sass-embedded 0.7.27 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
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