sassc-embedded 1.70.1 → 1.75.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 +4 -4
- data/lib/sassc/embedded/version.rb +1 -1
- data/lib/sassc/embedded.rb +132 -105
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf373b6b88c4dcdc3c784f85965562aa6e86ffffafd8ecb2b30513f2f52d51ae
|
4
|
+
data.tar.gz: d29bad09cafd09e2a5953c46ec546fe9674fc022bbae0b9092d399d4902b621c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0ecd4e0d91d6890d2b9312a7f39889d46f58095299fa3160a7f133e2dc5efd51734ea0577c80271fedb0601357e9231d6beadd24dbff0e7e54a5b1a048ea74c
|
7
|
+
data.tar.gz: b58e4c56f4e3e41796f497885107f63765b91ec2fe81171cdc27b4d6d5d0a82909776a7453f723eee666f4e1cfedf1bedab35a75632517959e4e0cbe3b2ba909
|
data/lib/sassc/embedded.rb
CHANGED
@@ -13,11 +13,9 @@ module SassC
|
|
13
13
|
def render
|
14
14
|
return @template.dup if @template.empty?
|
15
15
|
|
16
|
-
base_importer = import_handler.setup(nil)
|
17
|
-
|
18
16
|
result = ::Sass.compile_string(
|
19
17
|
@template,
|
20
|
-
importer:
|
18
|
+
importer: (NoopImporter unless @options[:importer].nil?),
|
21
19
|
load_paths:,
|
22
20
|
syntax:,
|
23
21
|
url: file_url,
|
@@ -28,12 +26,15 @@ module SassC
|
|
28
26
|
style: output_style,
|
29
27
|
|
30
28
|
functions: functions_handler.setup(nil, functions: @functions),
|
31
|
-
importers: (
|
29
|
+
importers: import_handler.setup(nil).concat(@options.fetch(:importers, [])),
|
32
30
|
|
33
31
|
alert_ascii: @options.fetch(:alert_ascii, false),
|
34
32
|
alert_color: @options.fetch(:alert_color, nil),
|
33
|
+
fatal_deprecations: @options.fetch(:fatal_deprecations, []),
|
34
|
+
future_deprecations: @options.fetch(:future_deprecations, []),
|
35
35
|
logger: @options.fetch(:logger, nil),
|
36
36
|
quiet_deps: @options.fetch(:quiet_deps, false),
|
37
|
+
silence_deprecations: @options.fetch(:silence_deprecations, []),
|
37
38
|
verbose: @options.fetch(:verbose, false)
|
38
39
|
)
|
39
40
|
|
@@ -134,11 +135,7 @@ module SassC
|
|
134
135
|
end
|
135
136
|
|
136
137
|
def load_paths
|
137
|
-
@load_paths ||=
|
138
|
-
(@options[:load_paths] || []) + SassC.load_paths
|
139
|
-
else
|
140
|
-
[]
|
141
|
-
end
|
138
|
+
@load_paths ||= (@options[:load_paths] || []) + SassC.load_paths
|
142
139
|
end
|
143
140
|
end
|
144
141
|
|
@@ -182,12 +179,55 @@ module SassC
|
|
182
179
|
end
|
183
180
|
end
|
184
181
|
|
182
|
+
module NoopImporter
|
183
|
+
module_function
|
184
|
+
|
185
|
+
def canonicalize(...); end
|
186
|
+
|
187
|
+
def load(...); end
|
188
|
+
end
|
189
|
+
|
190
|
+
private_constant :NoopImporter
|
191
|
+
|
185
192
|
class ImportHandler
|
186
193
|
def setup(_native_options)
|
187
|
-
|
194
|
+
if @importer
|
195
|
+
import_cache = ImportCache.new(@importer)
|
196
|
+
[Importer.new(import_cache), FileImporter.new(import_cache)]
|
197
|
+
else
|
198
|
+
[]
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
class Importer
|
203
|
+
def initialize(import_cache)
|
204
|
+
@import_cache = import_cache
|
205
|
+
end
|
206
|
+
|
207
|
+
def canonicalize(...)
|
208
|
+
@import_cache.canonicalize(...)
|
209
|
+
end
|
210
|
+
|
211
|
+
def load(...)
|
212
|
+
@import_cache.load(...)
|
213
|
+
end
|
188
214
|
end
|
189
215
|
|
216
|
+
private_constant :Importer
|
217
|
+
|
190
218
|
class FileImporter
|
219
|
+
def initialize(import_cache)
|
220
|
+
@import_cache = import_cache
|
221
|
+
end
|
222
|
+
|
223
|
+
def find_file_url(...)
|
224
|
+
@import_cache.find_file_url(...)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
private_constant :FileImporter
|
229
|
+
|
230
|
+
class FileSystemImporter
|
191
231
|
class << self
|
192
232
|
def resolve_path(path, from_import)
|
193
233
|
ext = File.extname(path)
|
@@ -199,15 +239,6 @@ module SassC
|
|
199
239
|
return exactly_one(try_path(path))
|
200
240
|
end
|
201
241
|
|
202
|
-
unless ext.empty?
|
203
|
-
if from_import
|
204
|
-
result = exactly_one(try_path("#{without_ext(path)}.import#{ext}"))
|
205
|
-
return result unless result.nil?
|
206
|
-
end
|
207
|
-
result = exactly_one(try_path(path))
|
208
|
-
return result unless result.nil?
|
209
|
-
end
|
210
|
-
|
211
242
|
if from_import
|
212
243
|
result = exactly_one(try_path_with_ext("#{path}.import"))
|
213
244
|
return result unless result.nil?
|
@@ -235,7 +266,7 @@ module SassC
|
|
235
266
|
end
|
236
267
|
|
237
268
|
def try_path_as_dir(path, from_import)
|
238
|
-
return unless dir_exist?
|
269
|
+
return unless dir_exist?(path)
|
239
270
|
|
240
271
|
if from_import
|
241
272
|
result = exactly_one(try_path_with_ext(File.join(path, 'index.import')))
|
@@ -247,7 +278,7 @@ module SassC
|
|
247
278
|
|
248
279
|
def exactly_one(paths)
|
249
280
|
return if paths.empty?
|
250
|
-
return paths.first if paths.
|
281
|
+
return paths.first if paths.one?
|
251
282
|
|
252
283
|
raise "It's not clear which file to import. Found:\n#{paths.map { |path| " #{path}" }.join("\n")}"
|
253
284
|
end
|
@@ -267,79 +298,69 @@ module SassC
|
|
267
298
|
end
|
268
299
|
end
|
269
300
|
|
270
|
-
private_constant :
|
301
|
+
private_constant :FileSystemImporter
|
271
302
|
|
272
|
-
class
|
303
|
+
class ImportCache
|
273
304
|
def initialize(importer)
|
274
305
|
@importer = importer
|
275
|
-
|
276
|
-
@canonical_urls = {}
|
277
|
-
@id = 0
|
278
306
|
@importer_results = {}
|
279
|
-
@
|
307
|
+
@file_url = nil
|
280
308
|
end
|
281
309
|
|
282
310
|
def canonicalize(url, context)
|
283
|
-
if
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
parent_path = URL.file_url_to_path(@parent_urls.last)
|
311
|
+
return if context.containing_url.nil?
|
312
|
+
|
313
|
+
containing_url = if context.containing_url.start_with?(Protocol::GLOB)
|
314
|
+
URL.unescape(URL.parse(context.containing_url).fragment)
|
315
|
+
else
|
316
|
+
context.containing_url
|
317
|
+
end
|
318
|
+
|
319
|
+
return unless containing_url.start_with?(Protocol::FILE)
|
293
320
|
|
321
|
+
path = URL.unescape(url)
|
322
|
+
parent_path = URL.file_url_to_path(containing_url)
|
323
|
+
parent_dir = File.dirname(parent_path)
|
324
|
+
|
325
|
+
if containing_url == context.containing_url
|
294
326
|
imports = @importer.imports(path, parent_path)
|
295
327
|
imports = [SassC::Importer::Import.new(path)] if imports.nil?
|
296
328
|
imports = [imports] unless imports.is_a?(Array)
|
297
|
-
imports.
|
298
|
-
|
329
|
+
canonical_url = imports_to_native(imports, parent_dir, context.from_import, url, context.containing_url)
|
330
|
+
if @importer_results.key?(canonical_url)
|
331
|
+
canonical_url
|
332
|
+
else
|
333
|
+
@file_url = canonical_url
|
334
|
+
nil
|
335
|
+
end
|
336
|
+
else
|
337
|
+
canonical_url = URL.path_to_file_url(File.absolute_path(path, parent_dir))
|
338
|
+
if @importer_results.key?(canonical_url)
|
339
|
+
canonical_url
|
340
|
+
else
|
341
|
+
@file_url = resolve_file_url(path, parent_dir, context.from_import)
|
342
|
+
nil
|
299
343
|
end
|
300
|
-
|
301
|
-
canonical_url = "#{Protocol::IMPORT}#{next_id}"
|
302
|
-
@importer_results[canonical_url] = imports_to_native(imports, context.from_import)
|
303
|
-
canonical_url
|
304
|
-
elsif url.start_with?(Protocol::LOADED)
|
305
|
-
canonical_url = Protocol::LOADED
|
306
|
-
@parent_urls.pop
|
307
|
-
canonical_url
|
308
344
|
end
|
309
345
|
end
|
310
346
|
|
311
347
|
def load(canonical_url)
|
312
|
-
|
313
|
-
@importer_results.delete(canonical_url)
|
314
|
-
elsif canonical_url.start_with?(Protocol::FILE)
|
315
|
-
path = URL.file_url_to_path(canonical_url)
|
316
|
-
{
|
317
|
-
contents: File.read(path),
|
318
|
-
syntax: syntax(path),
|
319
|
-
source_map_url: canonical_url
|
320
|
-
}
|
321
|
-
elsif canonical_url.start_with?(Protocol::LOADED)
|
322
|
-
{
|
323
|
-
contents: '',
|
324
|
-
syntax: :scss
|
325
|
-
}
|
326
|
-
end
|
348
|
+
@importer_results.delete(canonical_url)
|
327
349
|
end
|
328
350
|
|
329
|
-
|
351
|
+
def find_file_url(_url, context)
|
352
|
+
return if context.containing_url.nil? || @file_url.nil?
|
330
353
|
|
331
|
-
|
332
|
-
@
|
354
|
+
canonical_url = @file_url
|
355
|
+
@file_url = nil
|
356
|
+
canonical_url
|
333
357
|
end
|
334
358
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
return URL.path_to_file_url(resolved) unless resolved.nil?
|
341
|
-
end
|
342
|
-
nil
|
359
|
+
private
|
360
|
+
|
361
|
+
def resolve_file_url(path, parent_dir, from_import)
|
362
|
+
resolved = FileSystemImporter.resolve_path(File.absolute_path(path, parent_dir), from_import)
|
363
|
+
URL.path_to_file_url(resolved) unless resolved.nil?
|
343
364
|
end
|
344
365
|
|
345
366
|
def syntax(path)
|
@@ -353,45 +374,48 @@ module SassC
|
|
353
374
|
end
|
354
375
|
end
|
355
376
|
|
356
|
-
def
|
357
|
-
|
377
|
+
def import_to_native(import, parent_dir, from_import, canonicalize)
|
378
|
+
if import.source
|
379
|
+
canonical_url = URL.path_to_file_url(File.absolute_path(import.path, parent_dir))
|
380
|
+
@importer_results[canonical_url] = if import.source.is_a?(Hash)
|
381
|
+
{
|
382
|
+
contents: import.source[:contents],
|
383
|
+
syntax: import.source[:syntax],
|
384
|
+
source_map_url: canonical_url
|
385
|
+
}
|
386
|
+
else
|
387
|
+
{
|
388
|
+
contents: import.source,
|
389
|
+
syntax: syntax(import.path),
|
390
|
+
source_map_url: canonical_url
|
391
|
+
}
|
392
|
+
end
|
393
|
+
return canonical_url if canonicalize
|
394
|
+
elsif canonicalize
|
395
|
+
return resolve_file_url(import.path, parent_dir, from_import)
|
396
|
+
end
|
397
|
+
|
398
|
+
URL.escape(import.path)
|
399
|
+
end
|
400
|
+
|
401
|
+
def imports_to_native(imports, parent_dir, from_import, url, containing_url)
|
402
|
+
return import_to_native(imports.first, parent_dir, from_import, true) if imports.one?
|
403
|
+
|
404
|
+
canonical_url = "#{Protocol::GLOB}?#{URL.escape(url)}##{URL.escape(containing_url)}"
|
405
|
+
@importer_results[canonical_url] = {
|
358
406
|
contents: imports.flat_map do |import|
|
359
|
-
id = next_id
|
360
|
-
canonical_url = URL.path_to_file_url(import.path)
|
361
|
-
@canonical_urls[id] = canonical_url
|
362
|
-
if import.source
|
363
|
-
@importer_results[canonical_url] = if import.source.is_a?(Hash)
|
364
|
-
{
|
365
|
-
contents: import.source[:contents],
|
366
|
-
syntax: import.source[:syntax],
|
367
|
-
source_map_url: canonical_url
|
368
|
-
}
|
369
|
-
else
|
370
|
-
{
|
371
|
-
contents: import.source,
|
372
|
-
syntax: syntax(import.path),
|
373
|
-
source_map_url: canonical_url
|
374
|
-
}
|
375
|
-
end
|
376
|
-
end
|
377
407
|
at_rule = from_import ? '@import' : '@forward'
|
378
|
-
|
379
|
-
|
380
|
-
"#{at_rule} \"#{Protocol::LOADED}#{id}\";"
|
381
|
-
]
|
408
|
+
url = import_to_native(import, parent_dir, from_import, false)
|
409
|
+
"#{at_rule} #{Script::Value::String.quote(url)};"
|
382
410
|
end.join("\n"),
|
383
411
|
syntax: :scss
|
384
412
|
}
|
385
|
-
end
|
386
413
|
|
387
|
-
|
388
|
-
id = @id
|
389
|
-
@id = id.next
|
390
|
-
id.to_s
|
414
|
+
canonical_url
|
391
415
|
end
|
392
416
|
end
|
393
417
|
|
394
|
-
private_constant :
|
418
|
+
private_constant :ImportCache
|
395
419
|
end
|
396
420
|
|
397
421
|
class Sass2Scss
|
@@ -543,8 +567,7 @@ module SassC
|
|
543
567
|
|
544
568
|
module Protocol
|
545
569
|
FILE = 'file:'
|
546
|
-
|
547
|
-
LOADED = 'sassc-embedded-loaded:'
|
570
|
+
GLOB = 'sassc-embedded-glob:'
|
548
571
|
end
|
549
572
|
|
550
573
|
private_constant :Protocol
|
@@ -556,6 +579,10 @@ module SassC
|
|
556
579
|
|
557
580
|
module_function
|
558
581
|
|
582
|
+
def join(...)
|
583
|
+
URI.join(...).to_s
|
584
|
+
end
|
585
|
+
|
559
586
|
def parse(str)
|
560
587
|
PARSER.parse(str)
|
561
588
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sassc-embedded
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.75.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- なつき
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sass-embedded
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.75'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.75'
|
27
27
|
description: An embedded sass shim for SassC.
|
28
28
|
email:
|
29
29
|
- i@ntk.me
|
@@ -79,7 +79,7 @@ licenses:
|
|
79
79
|
metadata:
|
80
80
|
bug_tracker_uri: https://github.com/sass-contrib/sassc-embedded-shim-ruby/issues
|
81
81
|
documentation_uri: https://rubydoc.info/gems/sassc
|
82
|
-
source_code_uri: https://github.com/sass-contrib/sassc-embedded-shim-ruby/tree/v1.
|
82
|
+
source_code_uri: https://github.com/sass-contrib/sassc-embedded-shim-ruby/tree/v1.75.2
|
83
83
|
funding_uri: https://github.com/sponsors/ntkme
|
84
84
|
rubygems_mfa_required: 'true'
|
85
85
|
post_install_message:
|