sass-embedded 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36aa31c9cb340c6a95c73c93ea480ab565a9f8f009094ec0f7f7a2239e647f2b
4
- data.tar.gz: 71f325cdb5e5db87b97a931b92749c6e0ebbc91b376945fc5aa7b2fb5590928a
3
+ metadata.gz: 36a036051c7abed208ad60c033464cc8ebba1c7b16e0aaf4d32e7e88e7480dbe
4
+ data.tar.gz: d90c2b2f3c0a66c1de05cdb30fa66bb0b42b8d29ecaa84be53a36dc42fc886b2
5
5
  SHA512:
6
- metadata.gz: 7f136169a9f697db2cc04c466e2268230d090db81a01e54da74880a5dde4bba1acdafe425cf8b7f35f4030a2ec4d52b56e20dbba82911be974f9c000138f1e67
7
- data.tar.gz: 79507aae38d81b506a0d38ddc312bd12533bbe1d6647e0634a3755ff154c4a0a7be917d9cfbe8f7604ce2196fda9a7eb45f0f77a89c0b23513aec5b43f88abb2
6
+ metadata.gz: 9ea57f9e2d75135b81cc2dcdc7dd37cf1db7b185512f90b2e40a5c03d05994409d85023b61feccdc0a346443863fac2c4439c439d975adfd2404319747d1f8fc
7
+ data.tar.gz: 90d91290a68af79837a17dd4cd73645524e4d9e377b5e30f232df2c2a2dde1dba4f4c2a7520b66fda1e225f409804abc3b2de0df8c8998be094827982114472c
data/ext/sass/extconf.rb CHANGED
@@ -1,221 +1,223 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'mkmf'
4
+ require 'fileutils'
5
5
  require 'json'
6
+ require 'mkmf'
6
7
  require 'open-uri'
7
- require 'fileutils'
8
- require_relative '../../lib/sass/platform'
9
- require_relative '../../lib/sass/compiler'
8
+ require_relative '../../lib/sass/embedded/compiler'
9
+ require_relative '../../lib/sass/embedded/platform'
10
10
 
11
11
  module Sass
12
- # The dependency downloader. This downloads all the dependencies during gem
13
- # installation. The companion Makefile then unpacks all downloaded
14
- # dependencies. By default it downloads the release of each dependency
15
- # from GitHub releases.
16
- #
17
- # It is possible to specify an alternative source or version of each
18
- # dependency. Local sources can be used for offline installation.
19
- #
20
- # @example
21
- # gem install sass-embedded -- \
22
- # --with-protoc=file:///path/to/protoc-*.zip \
23
- # --with-sass-embedded=file:///path/to/sass_embedded-*.(tar.gz|zip) \
24
- # --with-sass-embedded-protocol=file:///path/to/embedded_sass.proto
25
- # @example
26
- # bundle config build.sass-embedded \
27
- # --with-protoc=file:///path/to/protoc-*.zip \
28
- # --with-sass-embedded=file:///path/to/sass_embedded-*.(tar.gz|zip) \
29
- # --with-sass-embedded-protocol=file:///path/to/embedded_sass.proto
30
- class Extconf
31
- def initialize
32
- fetch_with_config('protoc', false) { default_protoc }
33
- fetch_with_config('sass-embedded', false) { default_sass_embedded }
34
- fetch_with_config('sass-embedded-protocol', false) { default_sass_embedded_protocol }
35
- end
12
+ class Embedded
13
+ # The dependency downloader. This downloads all the dependencies during gem
14
+ # installation. The companion Makefile then unpacks all downloaded
15
+ # dependencies. By default it downloads the release of each dependency
16
+ # from GitHub releases.
17
+ #
18
+ # It is possible to specify an alternative source or version of each
19
+ # dependency. Local sources can be used for offline installation.
20
+ #
21
+ # @example
22
+ # gem install sass-embedded -- \
23
+ # --with-protoc=file:///path/to/protoc-*.zip \
24
+ # --with-sass-embedded=file:///path/to/sass_embedded-*.(tar.gz|zip) \
25
+ # --with-sass-embedded-protocol=file:///path/to/embedded_sass.proto
26
+ # @example
27
+ # bundle config build.sass-embedded \
28
+ # --with-protoc=file:///path/to/protoc-*.zip \
29
+ # --with-sass-embedded=file:///path/to/sass_embedded-*.(tar.gz|zip) \
30
+ # --with-sass-embedded-protocol=file:///path/to/embedded_sass.proto
31
+ class Extconf
32
+ def initialize
33
+ fetch_with_config('protoc', false) { default_protoc }
34
+ fetch_with_config('sass-embedded', false) { default_sass_embedded }
35
+ fetch_with_config('sass-embedded-protocol', false) { default_sass_embedded_protocol }
36
+ end
36
37
 
37
- private
38
+ private
38
39
 
39
- def fetch_with_config(config, default)
40
- val = with_config(config, default)
41
- case val
42
- when true
43
- if block_given?
44
- fetch yield
40
+ def fetch_with_config(config, default)
41
+ val = with_config(config, default)
42
+ case val
43
+ when true
44
+ if block_given?
45
+ fetch yield
46
+ else
47
+ fetch default
48
+ end
49
+ when false
50
+ nil
45
51
  else
46
- fetch default
52
+ fetch val
47
53
  end
48
- when false
49
- nil
50
- else
51
- fetch val
52
54
  end
53
- end
54
55
 
55
- def fetch(uri_s)
56
- uri = URI.parse(uri_s)
57
- path = File.absolute_path(File.basename(uri.path), __dir__)
58
- if uri.is_a?(URI::File) || uri.instance_of?(URI::Generic)
59
- FileUtils.copy_file uri.path, path
60
- elsif uri.respond_to? :open
61
- puts "curl -fsSLo #{path} -- #{uri}"
62
- uri.open do |source|
63
- File.open(path, 'wb') do |destination|
64
- destination.write source.read
56
+ def fetch(uri_s)
57
+ uri = URI.parse(uri_s)
58
+ path = File.absolute_path(File.basename(uri.path), __dir__)
59
+ if uri.is_a?(URI::File) || uri.instance_of?(URI::Generic)
60
+ FileUtils.copy_file uri.path, path
61
+ elsif uri.respond_to? :open
62
+ puts "curl -fsSLo #{path} -- #{uri}"
63
+ uri.open do |source|
64
+ File.open(path, 'wb') do |destination|
65
+ destination.write source.read
66
+ end
65
67
  end
68
+ else
69
+ raise
66
70
  end
67
- else
71
+ rescue StandardError
72
+ warn "ERROR: Error fetching #{uri_s}:"
68
73
  raise
69
74
  end
70
- rescue StandardError
71
- warn "ERROR: Error fetching #{uri_s}:"
72
- raise
73
- end
74
75
 
75
- def resolve_tag_name(repo, *requirements, gh_release: true)
76
- requirements = Gem::Requirement.create(*requirements)
76
+ def resolve_tag_name(repo, *requirements, gh_release: true)
77
+ requirements = Gem::Requirement.create(*requirements)
77
78
 
78
- satisfied = lambda { |version|
79
- Gem::Version.correct?(version) && requirements.satisfied_by?(Gem::Version.new(version))
80
- }
79
+ satisfied = lambda { |version|
80
+ Gem::Version.correct?(version) && requirements.satisfied_by?(Gem::Version.new(version))
81
+ }
81
82
 
82
- headers = {}
83
- headers['Authorization'] = "token #{ENV['GITHUB_TOKEN']}" if ENV['GITHUB_TOKEN']
83
+ headers = {}
84
+ headers['Authorization'] = "token #{ENV['GITHUB_TOKEN']}" if ENV['GITHUB_TOKEN']
84
85
 
85
- begin
86
- if gh_release
87
- releases_uri = "https://github.com/#{repo}/releases"
88
- uri = "#{releases_uri}/latest"
89
- tag_name = URI.parse(uri).open do |file|
90
- return nil if file.base_uri == releases_uri
86
+ begin
87
+ if gh_release
88
+ releases_uri = "https://github.com/#{repo}/releases"
89
+ uri = "#{releases_uri}/latest"
90
+ tag_name = URI.parse(uri).open do |file|
91
+ return nil if file.base_uri == releases_uri
91
92
 
92
- latest = File.basename file.base_uri.to_s
93
- latest if satisfied.call latest
94
- end
93
+ latest = File.basename file.base_uri.to_s
94
+ latest if satisfied.call latest
95
+ end
95
96
 
96
- return tag_name unless tag_name.nil?
97
+ return tag_name unless tag_name.nil?
97
98
 
98
- uri = "https://api.github.com/repos/#{repo}/releases?per_page=100"
99
- tag_name = URI.parse(uri).open(headers) do |file|
100
- JSON.parse(file.read).map { |release| release['tag_name'] }
101
- end
102
- .find(satisfied)&.peek
103
- else
104
- uri = "https://api.github.com/repos/#{repo}/tags?per_page=100"
105
- tag_name = URI.parse(uri).open(headers) do |file|
106
- JSON.parse(file.read).map { |tag| tag['name'] }
99
+ uri = "https://api.github.com/repos/#{repo}/releases?per_page=100"
100
+ tag_name = URI.parse(uri).open(headers) do |file|
101
+ JSON.parse(file.read).map { |release| release['tag_name'] }
102
+ end
103
+ .find(satisfied)&.peek
104
+ else
105
+ uri = "https://api.github.com/repos/#{repo}/tags?per_page=100"
106
+ tag_name = URI.parse(uri).open(headers) do |file|
107
+ JSON.parse(file.read).map { |tag| tag['name'] }
108
+ end
109
+ .find(satisfied)&.peek
107
110
  end
108
- .find(satisfied)&.peek
111
+
112
+ return tag_name unless tag_name.nil?
113
+ rescue OpenURI::HTTPError => e
114
+ warn "WARNING: Error fetching #{uri}: #{e}"
109
115
  end
110
116
 
111
- return tag_name unless tag_name.nil?
112
- rescue OpenURI::HTTPError => e
113
- warn "WARNING: Error fetching #{uri}: #{e}"
117
+ requirements.requirements
118
+ .map { |requirement| requirement.last.to_s.gsub('.pre.', '-') }
119
+ .find(satisfied)&.peek
114
120
  end
115
121
 
116
- requirements.requirements
117
- .map { |requirement| requirement.last.to_s.gsub('.pre.', '-') }
118
- .find(satisfied)&.peek
119
- end
122
+ def default_sass_embedded
123
+ repo = 'sass/dart-sass-embedded'
124
+
125
+ tag_name = resolve_tag_name(repo, Compiler::REQUIREMENTS)
120
126
 
121
- def default_sass_embedded
122
- repo = 'sass/dart-sass-embedded'
123
-
124
- tag_name = resolve_tag_name(repo, Compiler::REQUIREMENTS)
125
-
126
- os = case Platform::OS
127
- when 'darwin'
128
- 'macos'
129
- when 'linux'
130
- 'linux'
131
- when 'windows'
132
- 'windows'
133
- else
134
- raise "Unsupported OS: #{Platform::OS}"
135
- end
136
-
137
- arch = case Platform::ARCH
138
- when 'x86_64'
139
- 'x64'
140
- when 'i386'
141
- 'ia32'
142
- when 'aarch64'
143
- raise "Unsupported Arch: #{Platform::ARCH}" unless Platform::OS == 'darwin'
144
-
145
- 'x64'
127
+ os = case Platform::OS
128
+ when 'darwin'
129
+ 'macos'
130
+ when 'linux'
131
+ 'linux'
132
+ when 'windows'
133
+ 'windows'
146
134
  else
147
- raise "Unsupported Arch: #{Platform::ARCH}"
135
+ raise "Unsupported OS: #{Platform::OS}"
148
136
  end
149
137
 
150
- ext = case os
151
- when 'windows'
152
- 'zip'
153
- else
154
- 'tar.gz'
155
- end
138
+ arch = case Platform::ARCH
139
+ when 'x86_64'
140
+ 'x64'
141
+ when 'i386'
142
+ 'ia32'
143
+ when 'aarch64'
144
+ raise "Unsupported Arch: #{Platform::ARCH}" unless Platform::OS == 'darwin'
156
145
 
157
- "https://github.com/#{repo}/releases/download/#{tag_name}/sass_embedded-#{tag_name}-#{os}-#{arch}.#{ext}"
158
- end
146
+ 'x64'
147
+ else
148
+ raise "Unsupported Arch: #{Platform::ARCH}"
149
+ end
159
150
 
160
- def default_protoc
161
- repo = 'protocolbuffers/protobuf'
151
+ ext = case os
152
+ when 'windows'
153
+ 'zip'
154
+ else
155
+ 'tar.gz'
156
+ end
162
157
 
163
- spec = Gem::Dependency.new('google-protobuf').to_spec
158
+ "https://github.com/#{repo}/releases/download/#{tag_name}/sass_embedded-#{tag_name}-#{os}-#{arch}.#{ext}"
159
+ end
164
160
 
165
- tag_name = "v#{spec.version}"
161
+ def default_protoc
162
+ repo = 'protocolbuffers/protobuf'
166
163
 
167
- os = case Platform::OS
168
- when 'darwin'
169
- 'osx'
170
- when 'linux'
171
- 'linux'
172
- when 'windows'
173
- 'win'
174
- else
175
- raise "Unsupported OS: #{Platform::OS}"
176
- end
164
+ spec = Gem::Dependency.new('google-protobuf').to_spec
177
165
 
178
- arch = case Platform::ARCH
179
- when 'aarch64'
180
- if Platform::OS == 'darwin'
166
+ tag_name = "v#{spec.version}"
167
+
168
+ os = case Platform::OS
169
+ when 'darwin'
170
+ 'osx'
171
+ when 'linux'
172
+ 'linux'
173
+ when 'windows'
174
+ 'win'
175
+ else
176
+ raise "Unsupported OS: #{Platform::OS}"
177
+ end
178
+
179
+ arch = case Platform::ARCH
180
+ when 'aarch64'
181
+ if Platform::OS == 'darwin'
182
+ 'x86_64'
183
+ else
184
+ 'aarch_64'
185
+ end
186
+ when 'sparcv9'
187
+ 's390'
188
+ when 'i386'
189
+ 'x86_32'
190
+ when 'x86_64'
181
191
  'x86_64'
192
+ when 'powerpc64'
193
+ 'ppcle_64'
182
194
  else
183
- 'aarch_64'
195
+ raise "Unsupported Arch: #{Platform::ARCH}"
184
196
  end
185
- when 'sparcv9'
186
- 's390'
187
- when 'i386'
188
- 'x86_32'
189
- when 'x86_64'
190
- 'x86_64'
191
- when 'powerpc64'
192
- 'ppcle_64'
193
- else
194
- raise "Unsupported Arch: #{Platform::ARCH}"
195
- end
196
197
 
197
- os_arch = case os
198
- when 'win'
199
- os + arch.split('_').last
200
- else
201
- "#{os}-#{arch}"
202
- end
198
+ os_arch = case os
199
+ when 'win'
200
+ os + arch.split('_').last
201
+ else
202
+ "#{os}-#{arch}"
203
+ end
203
204
 
204
- ext = 'zip'
205
+ ext = 'zip'
205
206
 
206
- "https://github.com/#{repo}/releases/download/#{tag_name}/protoc-#{tag_name[1..]}-#{os_arch}.#{ext}"
207
- end
207
+ "https://github.com/#{repo}/releases/download/#{tag_name}/protoc-#{tag_name[1..]}-#{os_arch}.#{ext}"
208
+ end
208
209
 
209
- def default_sass_embedded_protocol
210
- repo = 'sass/embedded-protocol'
210
+ def default_sass_embedded_protocol
211
+ repo = 'sass/embedded-protocol'
211
212
 
212
- tag_name = IO.popen([Compiler::DART_SASS_EMBEDDED, '--version']) do |file|
213
- JSON.parse(file.read)['protocolVersion']
214
- end
213
+ tag_name = IO.popen([Compiler::DART_SASS_EMBEDDED, '--version']) do |file|
214
+ JSON.parse(file.read)['protocolVersion']
215
+ end
215
216
 
216
- "https://raw.githubusercontent.com/#{repo}/#{tag_name}/embedded_sass.proto"
217
+ "https://raw.githubusercontent.com/#{repo}/#{tag_name}/embedded_sass.proto"
218
+ end
217
219
  end
218
220
  end
219
221
  end
220
222
 
221
- Sass::Extconf.new
223
+ Sass::Embedded::Extconf.new
@@ -0,0 +1,255 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'observer'
4
+ require_relative 'protocol'
5
+ require_relative 'util'
6
+
7
+ module Sass
8
+ class Embedded
9
+ # The {Observer} for {Embedded#render}.
10
+ class CompileContext
11
+ include Observer
12
+
13
+ def initialize(transport, id,
14
+ data:,
15
+ file:,
16
+ indented_syntax:,
17
+ include_paths:,
18
+ output_style:,
19
+ source_map:,
20
+ out_file:,
21
+ functions:,
22
+ importer:)
23
+ raise ArgumentError, 'either data or file must be set' if file.nil? && data.nil?
24
+
25
+ @id = id
26
+ @data = data
27
+ @file = file
28
+ @indented_syntax = indented_syntax
29
+ @include_paths = include_paths
30
+ @output_style = output_style
31
+ @source_map = source_map
32
+ @out_file = out_file
33
+ @global_functions = functions.keys
34
+ @functions = functions.transform_keys do |key|
35
+ key.to_s.split('(')[0].chomp
36
+ end
37
+ @importer = importer
38
+ @import_responses = {}
39
+
40
+ super(transport)
41
+
42
+ send_message compile_request
43
+ end
44
+
45
+ def update(error, message)
46
+ raise error unless error.nil?
47
+
48
+ case message
49
+ when EmbeddedProtocol::OutboundMessage::CompileResponse
50
+ return unless message.id == @id
51
+
52
+ Thread.new do
53
+ super(nil, message)
54
+ end
55
+ when EmbeddedProtocol::OutboundMessage::LogEvent
56
+ return unless message.compilation_id == @id && $stderr.tty?
57
+
58
+ warn message.formatted
59
+ when EmbeddedProtocol::OutboundMessage::CanonicalizeRequest
60
+ return unless message.compilation_id == @id
61
+
62
+ Thread.new do
63
+ send_message canonicalize_response message
64
+ end
65
+ when EmbeddedProtocol::OutboundMessage::ImportRequest
66
+ return unless message.compilation_id == @id
67
+
68
+ Thread.new do
69
+ send_message import_response message
70
+ end
71
+ when EmbeddedProtocol::OutboundMessage::FileImportRequest
72
+ raise NotImplementedError, 'FileImportRequest is not implemented'
73
+ when EmbeddedProtocol::OutboundMessage::FunctionCallRequest
74
+ return unless message.compilation_id == @id
75
+
76
+ Thread.new do
77
+ send_message function_call_response message
78
+ end
79
+ end
80
+ rescue StandardError => e
81
+ Thread.new do
82
+ super(e, nil)
83
+ end
84
+ end
85
+
86
+ private
87
+
88
+ def compile_request
89
+ EmbeddedProtocol::InboundMessage::CompileRequest.new(
90
+ id: @id,
91
+ string: string,
92
+ path: path,
93
+ style: style,
94
+ source_map: source_map,
95
+ importers: importers,
96
+ global_functions: global_functions,
97
+ alert_color: $stderr.tty?,
98
+ alert_ascii: Platform::OS == 'windows'
99
+ )
100
+ end
101
+
102
+ def canonicalize_response(canonicalize_request)
103
+ url = Util.file_uri_from_path(File.absolute_path(canonicalize_request.url, (@file.nil? ? 'stdin' : @file)))
104
+
105
+ begin
106
+ result = @importer[canonicalize_request.importer_id].call canonicalize_request.url, @file
107
+ raise result if result.is_a? StandardError
108
+ rescue StandardError => e
109
+ return EmbeddedProtocol::InboundMessage::CanonicalizeResponse.new(
110
+ id: canonicalize_request.id,
111
+ error: e.message
112
+ )
113
+ end
114
+
115
+ if result&.key? :contents
116
+ @import_responses[url] = EmbeddedProtocol::InboundMessage::ImportResponse.new(
117
+ id: canonicalize_request.id,
118
+ success: EmbeddedProtocol::InboundMessage::ImportResponse::ImportSuccess.new(
119
+ contents: result[:contents],
120
+ syntax: EmbeddedProtocol::Syntax::SCSS,
121
+ source_map_url: nil
122
+ )
123
+ )
124
+ EmbeddedProtocol::InboundMessage::CanonicalizeResponse.new(
125
+ id: canonicalize_request.id,
126
+ url: url
127
+ )
128
+ elsif result&.key? :file
129
+ canonicalized_url = Util.file_uri_from_path(File.absolute_path(result[:file]))
130
+
131
+ # TODO: FileImportRequest is not supported yet.
132
+ # Workaround by reading contents and return it when server asks
133
+ @import_responses[canonicalized_url] = EmbeddedProtocol::InboundMessage::ImportResponse.new(
134
+ id: canonicalize_request.id,
135
+ success: EmbeddedProtocol::InboundMessage::ImportResponse::ImportSuccess.new(
136
+ contents: File.read(result[:file]),
137
+ syntax: EmbeddedProtocol::Syntax::SCSS,
138
+ source_map_url: nil
139
+ )
140
+ )
141
+
142
+ EmbeddedProtocol::InboundMessage::CanonicalizeResponse.new(
143
+ id: canonicalize_request.id,
144
+ url: canonicalized_url
145
+ )
146
+ else
147
+ EmbeddedProtocol::InboundMessage::CanonicalizeResponse.new(
148
+ id: canonicalize_request.id
149
+ )
150
+ end
151
+ end
152
+
153
+ def import_response(import_request)
154
+ url = import_request.url
155
+
156
+ if @import_responses.key? url
157
+ @import_responses[url].id = import_request.id
158
+ else
159
+ @import_responses[url] = EmbeddedProtocol::InboundMessage::ImportResponse.new(
160
+ id: import_request.id,
161
+ error: "Failed to import: #{url}"
162
+ )
163
+ end
164
+
165
+ @import_responses[url]
166
+ end
167
+
168
+ def function_call_response(function_call_request)
169
+ # TODO: convert argument_list to **kwargs
170
+ EmbeddedProtocol::InboundMessage::FunctionCallResponse.new(
171
+ id: function_call_request.id,
172
+ success: @functions[function_call_request.name].call(*function_call_request.arguments),
173
+ accessed_argument_lists: function_call_request.arguments
174
+ .filter { |argument| argument.value == :argument_list }
175
+ .map { |argument| argument.argument_list.id }
176
+ )
177
+ rescue StandardError => e
178
+ EmbeddedProtocol::InboundMessage::FunctionCallResponse.new(
179
+ id: function_call_request.id,
180
+ error: e.message
181
+ )
182
+ end
183
+
184
+ def syntax
185
+ if @indented_syntax == true
186
+ EmbeddedProtocol::Syntax::INDENTED
187
+ else
188
+ EmbeddedProtocol::Syntax::SCSS
189
+ end
190
+ end
191
+
192
+ def url
193
+ return if @file.nil?
194
+
195
+ Util.file_uri_from_path File.absolute_path @file
196
+ end
197
+
198
+ def string
199
+ return if @data.nil?
200
+
201
+ EmbeddedProtocol::InboundMessage::CompileRequest::StringInput.new(
202
+ source: @data,
203
+ url: url,
204
+ syntax: syntax
205
+ )
206
+ end
207
+
208
+ def path
209
+ @file if @data.nil?
210
+ end
211
+
212
+ def style
213
+ case @output_style&.to_sym
214
+ when :expanded
215
+ EmbeddedProtocol::OutputStyle::EXPANDED
216
+ when :compressed
217
+ EmbeddedProtocol::OutputStyle::COMPRESSED
218
+ else
219
+ raise ArgumentError, 'output_style must be one of :expanded, :compressed'
220
+ end
221
+ end
222
+
223
+ def source_map
224
+ @source_map.is_a?(String) || (@source_map == true && !@out_file.nil?)
225
+ end
226
+
227
+ attr_reader :global_functions
228
+
229
+ # Order
230
+ # 1. Loading a file relative to the file in which the @use or @import appeared.
231
+ # 2. Each custom importer.
232
+ # 3. Loading a file relative to the current working directory.
233
+ # 4. Each load path in includePaths
234
+ # 5. Each load path specified in the SASS_PATH environment variable, which should
235
+ # be semicolon-separated on Windows and colon-separated elsewhere.
236
+ def importers
237
+ custom_importers = @importer.map.with_index do |_, id|
238
+ EmbeddedProtocol::InboundMessage::CompileRequest::Importer.new(
239
+ importer_id: id
240
+ )
241
+ end
242
+
243
+ include_path_importers = @include_paths
244
+ .concat(Embedded.include_paths)
245
+ .map do |include_path|
246
+ EmbeddedProtocol::InboundMessage::CompileRequest::Importer.new(
247
+ path: File.absolute_path(include_path)
248
+ )
249
+ end
250
+
251
+ custom_importers.concat include_path_importers
252
+ end
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'platform'
4
+
5
+ module Sass
6
+ class Embedded
7
+ module Compiler
8
+ DART_SASS_EMBEDDED = File.absolute_path(
9
+ "../../../ext/sass/sass_embedded/dart-sass-embedded#{Platform::OS == 'windows' ? '.bat' : ''}", __dir__
10
+ )
11
+
12
+ PROTOCOL_ERROR_ID = 4_294_967_295
13
+
14
+ REQUIREMENTS = '~> 1.0.0-beta.11'
15
+ end
16
+ end
17
+ end