Skip to content

Commit efbc7a8

Browse files
committed
Breaking change on importer function signature
1 parent 4744bd1 commit efbc7a8

File tree

5 files changed

+376
-26
lines changed

5 files changed

+376
-26
lines changed

lib/sass/canonicalize_context.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
module Sass
4+
# Contextual information passed to `canonicalize` and `find_file_url`.
5+
# Not all importers will need this information to resolve loads, but some may find it useful.
6+
#
7+
# @see https://sass-lang.com/documentation/js-api/interfaces/canonicalizecontext/
8+
class CanonicalizeContext
9+
# @return [String, nil]
10+
attr_reader :containing_url
11+
12+
# @return [Boolean]
13+
attr_reader :from_import
14+
15+
def initialize(containing_url, from_import)
16+
@containing_url = containing_url
17+
@from_import = from_import
18+
end
19+
end
20+
end

lib/sass/embedded.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require_relative '../../ext/sass/cli'
4+
require_relative 'canonicalize_context'
45
require_relative 'compile_error'
56
require_relative 'compile_result'
67
require_relative 'embedded/connection'

lib/sass/embedded/host/importer_registry.rb

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def initialize(importers, load_paths, alert_color:)
2626
end
2727

2828
def register(importer)
29-
importer = Structifier.to_struct(importer, :canonicalize, :load, :find_file_url)
29+
importer = Structifier.to_struct(importer, :canonicalize, :load, :non_canonical_scheme, :find_file_url)
3030

3131
is_importer = importer.respond_to?(:canonicalize) && importer.respond_to?(:load)
3232
is_file_importer = importer.respond_to?(:find_file_url)
@@ -39,7 +39,17 @@ def register(importer)
3939
@importers_by_id[id] = importer
4040
if is_importer
4141
EmbeddedProtocol::InboundMessage::CompileRequest::Importer.new(
42-
importer_id: id
42+
importer_id: id,
43+
non_canonical_scheme: if importer.respond_to?(:non_canonical_scheme)
44+
non_canonical_scheme = importer.non_canonical_scheme
45+
if non_canonical_scheme.is_a?(String)
46+
[non_canonical_scheme]
47+
else
48+
non_canonical_scheme || []
49+
end
50+
else
51+
[]
52+
end
4353
)
4454
else
4555
EmbeddedProtocol::InboundMessage::CompileRequest::Importer.new(
@@ -50,7 +60,8 @@ def register(importer)
5060

5161
def canonicalize(canonicalize_request)
5262
importer = @importers_by_id[canonicalize_request.importer_id]
53-
url = importer.canonicalize(canonicalize_request.url, from_import: canonicalize_request.from_import)&.to_s
63+
url = importer.canonicalize(canonicalize_request.url,
64+
Protofier.from_proto_canonicalize_context(canonicalize_request))&.to_s
5465

5566
EmbeddedProtocol::InboundMessage::CanonicalizeResponse.new(
5667
id: canonicalize_request.id,
@@ -84,7 +95,8 @@ def import(import_request)
8495

8596
def file_import(file_import_request)
8697
importer = @importers_by_id[file_import_request.importer_id]
87-
file_url = importer.find_file_url(file_import_request.url, from_import: file_import_request.from_import)&.to_s
98+
file_url = importer.find_file_url(file_import_request.url,
99+
Protofier.from_proto_canonicalize_context(file_import_request))&.to_s
88100

89101
EmbeddedProtocol::InboundMessage::FileImportResponse.new(
90102
id: file_import_request.id,

lib/sass/embedded/protofier.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ class Embedded
88
module Protofier
99
module_function
1010

11+
def from_proto_canonicalize_context(canonicalize_request)
12+
CanonicalizeContext.new(
13+
canonicalize_request.containing_url == '' ? nil : canonicalize_request.containing_url,
14+
canonicalize_request.from_import
15+
)
16+
end
17+
1118
def from_proto_compile_response(compile_response)
1219
oneof = compile_response.result
1320
result = compile_response.public_send(oneof)

0 commit comments

Comments
 (0)