sass-embedded 0.7.27 → 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: 753468eeb48a850025855c10bf6e0b43c9fe277dbb0a84a807f2c26bd1fe8d70
4
- data.tar.gz: 5aa9cafc1f066a2c4559192a16190c04644febcc7fb45717f9837dd23c2ee19d
3
+ metadata.gz: 36a036051c7abed208ad60c033464cc8ebba1c7b16e0aaf4d32e7e88e7480dbe
4
+ data.tar.gz: d90c2b2f3c0a66c1de05cdb30fa66bb0b42b8d29ecaa84be53a36dc42fc886b2
5
5
  SHA512:
6
- metadata.gz: ce4a0e708e41bd79079381437e7049a0534a129c69dd1675ea85c4e55f516047df98389cfd38b1ed4a5415c43e47aa4fa63523c9df881e6981402223be491ca8
7
- data.tar.gz: 3c04068db5b9540fef41e77abfb6d79875f330446d1d4ab21223ac262b371824b4f20a0313db80bcdb9ff63dedee41be109d084482d7519bac347527b49b04f5
6
+ metadata.gz: 9ea57f9e2d75135b81cc2dcdc7dd37cf1db7b185512f90b2e40a5c03d05994409d85023b61feccdc0a346443863fac2c4439c439d975adfd2404319747d1f8fc
7
+ data.tar.gz: 90d91290a68af79837a17dd4cd73645524e4d9e377b5e30f232df2c2a2dde1dba4f4c2a7520b66fda1e225f409804abc3b2de0df8c8998be094827982114472c
data/ext/sass/Makefile CHANGED
@@ -44,7 +44,7 @@ else
44
44
  unzip -od $@ $<
45
45
  endif
46
46
 
47
- embedded_sass.proto:
47
+ embedded_sass.proto: sass_embedded
48
48
  $(EXTCONF) --with-sass-embedded-protocol
49
49
 
50
50
  %_pb.rb: %.proto protoc
data/ext/sass/extconf.rb CHANGED
@@ -1,202 +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 './dependencies'
9
- require_relative '../../lib/sass/platform'
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)
78
+
79
+ satisfied = lambda { |version|
80
+ Gem::Version.correct?(version) && requirements.satisfied_by?(Gem::Version.new(version))
81
+ }
82
+
83
+ headers = {}
84
+ headers['Authorization'] = "token #{ENV['GITHUB_TOKEN']}" if ENV['GITHUB_TOKEN']
77
85
 
78
- if requirements == Gem::Requirement.default && gh_release
79
- URI.parse("https://github.com/#{repo}/releases/latest").open do |file|
80
- File.basename file.base_uri.to_s
81
- end
82
- else
83
86
  begin
84
- headers = {}
85
- headers['Authorization'] = "token #{ENV['GITHUB_TOKEN']}" if ENV['GITHUB_TOKEN']
86
87
  if gh_release
87
- URI.parse("https://api.github.com/repos/#{repo}/releases?per_page=100").open(headers) do |file|
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
92
+
93
+ latest = File.basename file.base_uri.to_s
94
+ latest if satisfied.call latest
95
+ end
96
+
97
+ return tag_name unless tag_name.nil?
98
+
99
+ uri = "https://api.github.com/repos/#{repo}/releases?per_page=100"
100
+ tag_name = URI.parse(uri).open(headers) do |file|
88
101
  JSON.parse(file.read).map { |release| release['tag_name'] }
89
102
  end
103
+ .find(satisfied)&.peek
90
104
  else
91
- URI.parse("https://api.github.com/repos/#{repo}/tags?per_page=100").open(headers) do |file|
105
+ uri = "https://api.github.com/repos/#{repo}/tags?per_page=100"
106
+ tag_name = URI.parse(uri).open(headers) do |file|
92
107
  JSON.parse(file.read).map { |tag| tag['name'] }
93
108
  end
109
+ .find(satisfied)&.peek
94
110
  end
95
- rescue OpenURI::HTTPError
96
- requirements.requirements
97
- .map { |requirement| requirement.last.to_s.gsub('.pre.', '-') }
111
+
112
+ return tag_name unless tag_name.nil?
113
+ rescue OpenURI::HTTPError => e
114
+ warn "WARNING: Error fetching #{uri}: #{e}"
98
115
  end
99
- .find { |version| Gem::Version.correct?(version) && requirements.satisfied_by?(Gem::Version.new(version)) }
100
- &.to_s
116
+
117
+ requirements.requirements
118
+ .map { |requirement| requirement.last.to_s.gsub('.pre.', '-') }
119
+ .find(satisfied)&.peek
101
120
  end
102
- end
103
121
 
104
- def default_sass_embedded
105
- repo = 'sass/dart-sass-embedded'
106
-
107
- tag_name = resolve_tag_name(repo, Sass::Dependencies::REQUIREMENTS[repo])
108
-
109
- os = case Platform::OS
110
- when 'darwin'
111
- 'macos'
112
- when 'linux'
113
- 'linux'
114
- when 'windows'
115
- 'windows'
116
- else
117
- raise "Unsupported OS: #{Platform::OS}"
118
- end
119
-
120
- arch = case Platform::ARCH
121
- when 'x86_64'
122
- 'x64'
123
- when 'i386'
124
- 'ia32'
125
- when 'aarch64'
126
- raise "Unsupported Arch: #{Platform::ARCH}" unless Platform::OS == 'darwin'
127
-
128
- 'x64'
122
+ def default_sass_embedded
123
+ repo = 'sass/dart-sass-embedded'
124
+
125
+ tag_name = resolve_tag_name(repo, Compiler::REQUIREMENTS)
126
+
127
+ os = case Platform::OS
128
+ when 'darwin'
129
+ 'macos'
130
+ when 'linux'
131
+ 'linux'
132
+ when 'windows'
133
+ 'windows'
129
134
  else
130
- raise "Unsupported Arch: #{Platform::ARCH}"
135
+ raise "Unsupported OS: #{Platform::OS}"
131
136
  end
132
137
 
133
- ext = case os
134
- when 'windows'
135
- 'zip'
136
- else
137
- 'tar.gz'
138
- 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'
139
145
 
140
- "https://github.com/#{repo}/releases/download/#{tag_name}/sass_embedded-#{tag_name}-#{os}-#{arch}.#{ext}"
141
- end
146
+ 'x64'
147
+ else
148
+ raise "Unsupported Arch: #{Platform::ARCH}"
149
+ end
142
150
 
143
- def default_protoc
144
- repo = 'protocolbuffers/protobuf'
151
+ ext = case os
152
+ when 'windows'
153
+ 'zip'
154
+ else
155
+ 'tar.gz'
156
+ end
157
+
158
+ "https://github.com/#{repo}/releases/download/#{tag_name}/sass_embedded-#{tag_name}-#{os}-#{arch}.#{ext}"
159
+ end
145
160
 
146
- spec = Gem::Dependency.new('google-protobuf', Sass::Dependencies::REQUIREMENTS[repo]).to_spec
161
+ def default_protoc
162
+ repo = 'protocolbuffers/protobuf'
147
163
 
148
- tag_name = "v#{spec.version}"
164
+ spec = Gem::Dependency.new('google-protobuf').to_spec
149
165
 
150
- os = case Platform::OS
151
- when 'darwin'
152
- 'osx'
153
- when 'linux'
154
- 'linux'
155
- when 'windows'
156
- 'win'
157
- else
158
- raise "Unsupported OS: #{Platform::OS}"
159
- end
166
+ tag_name = "v#{spec.version}"
160
167
 
161
- arch = case Platform::ARCH
162
- when 'aarch64'
163
- if Platform::OS == 'darwin'
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'
164
191
  'x86_64'
192
+ when 'powerpc64'
193
+ 'ppcle_64'
165
194
  else
166
- 'aarch_64'
195
+ raise "Unsupported Arch: #{Platform::ARCH}"
167
196
  end
168
- when 'sparcv9'
169
- 's390'
170
- when 'i386'
171
- 'x86_32'
172
- when 'x86_64'
173
- 'x86_64'
174
- when 'powerpc64'
175
- 'ppcle_64'
176
- else
177
- raise "Unsupported Arch: #{Platform::ARCH}"
178
- end
179
197
 
180
- os_arch = case os
181
- when 'win'
182
- os + arch.split('_').last
183
- else
184
- "#{os}-#{arch}"
185
- end
198
+ os_arch = case os
199
+ when 'win'
200
+ os + arch.split('_').last
201
+ else
202
+ "#{os}-#{arch}"
203
+ end
186
204
 
187
- ext = 'zip'
205
+ ext = 'zip'
188
206
 
189
- "https://github.com/#{repo}/releases/download/#{tag_name}/protoc-#{tag_name[1..]}-#{os_arch}.#{ext}"
190
- end
207
+ "https://github.com/#{repo}/releases/download/#{tag_name}/protoc-#{tag_name[1..]}-#{os_arch}.#{ext}"
208
+ end
191
209
 
192
- def default_sass_embedded_protocol
193
- repo = 'sass/embedded-protocol'
210
+ def default_sass_embedded_protocol
211
+ repo = 'sass/embedded-protocol'
194
212
 
195
- tag_name = resolve_tag_name(repo, Sass::Dependencies::REQUIREMENTS[repo], gh_release: false)
213
+ tag_name = IO.popen([Compiler::DART_SASS_EMBEDDED, '--version']) do |file|
214
+ JSON.parse(file.read)['protocolVersion']
215
+ end
196
216
 
197
- "https://raw.githubusercontent.com/#{repo}/#{tag_name}/embedded_sass.proto"
217
+ "https://raw.githubusercontent.com/#{repo}/#{tag_name}/embedded_sass.proto"
218
+ end
198
219
  end
199
220
  end
200
221
  end
201
222
 
202
- 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