sassc-embedded 1.5.5 → 1.5.8

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: 695381cf5ae96903ffaf015c6e406eab12c38312008ee5dce88e2f1658d6da35
4
- data.tar.gz: c5c981214af6123d9c17ff3dc4b6099bc78864419df9c29848ce146ebbfeca2d
3
+ metadata.gz: 47ccda859c1fd8acaffccd1945f5dc15907e5ca96086244a01fc3091003cf4d4
4
+ data.tar.gz: 7ee3c7121bf0c299771c4a9d3a6c1f5699a85565acea5392ddf3c3c9a6b3856f
5
5
  SHA512:
6
- metadata.gz: 9a346cd91ea29ae9618460eee15592b1316948637bae1054a343521f9a0194b290c972d37481fd91b068d47bf83d38a033efb2f9e20f3713fcbc7ad339110cbb
7
- data.tar.gz: 36d53934e2f475d3c62a42a5f7530c32668d42d4ba3a09a84eed6177bb9256d4dc7383adf64d80b6863590bffbfc676c6cec6b792b24523cbce7b516d887ff5d
6
+ metadata.gz: 6f548fbe156fa13744ced7282b9a1959f35851bd24b1c3d329542e426715a7a0dbf400e7dddff9cee76b3d73af978087a0e383f0b37e7c2c61f7c64c7c096589
7
+ data.tar.gz: 8aa5ff0798d5ffbc0699543884c2c13e953d5847b59c0ea47d4573ce68e35329ff380f16fda6b3560cc012f86a35509ab272d0f5e907b8765805a5f8c0adcd55
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SassC
4
4
  module Embedded
5
- VERSION = '1.5.5'
5
+ VERSION = '1.5.8'
6
6
  end
7
7
  end
@@ -36,7 +36,7 @@ module SassC
36
36
  )
37
37
 
38
38
  @dependencies = result.loaded_urls
39
- .filter { |url| url.start_with?('file:') && url != file_url }
39
+ .filter { |url| url.start_with?(Protocol::FILE) && url != file_url }
40
40
  .map { |url| URL.file_url_to_path(url) }
41
41
  @source_map = post_process_source_map(result.source_map)
42
42
 
@@ -45,10 +45,10 @@ module SassC
45
45
  line = e.span&.start&.line
46
46
  line += 1 unless line.nil?
47
47
  url = e.span&.url
48
- path = if url&.start_with?('file:')
48
+ path = if url&.start_with?(Protocol::FILE)
49
49
  URL.parse(url).route_from(URL.path_to_file_url("#{File.absolute_path('')}/"))
50
50
  end
51
- raise SyntaxError.new(e.message, filename: path, line: line)
51
+ raise SyntaxError.new(e.full_message, filename: path, line: line)
52
52
  end
53
53
 
54
54
  private
@@ -109,7 +109,7 @@ module SassC
109
109
  data = JSON.parse(source_map)
110
110
  data['file'] = URL.parse(output_url).route_from(url).to_s if output_url
111
111
  data['sources'].map! do |source|
112
- if source.start_with?('file:')
112
+ if source.start_with?(Protocol::FILE)
113
113
  URL.parse(source).route_from(url).to_s
114
114
  else
115
115
  source
@@ -283,72 +283,55 @@ module SassC
283
283
  private_constant :FileImporter
284
284
 
285
285
  class Importer
286
- module Protocol
287
- FILE = 'file:'
288
- IMPORT = 'sassc-embedded-import:'
289
- LOAD = 'sassc-embedded-load:'
290
- LOADED = 'sassc-embedded-loaded:'
291
- end
292
-
293
- private_constant :Protocol
294
-
295
286
  def initialize(importer)
296
287
  @importer = importer
288
+
289
+ @canonical_urls = {}
290
+ @id = 0
297
291
  @importer_results = {}
298
- @load_id = 0
299
- @load_urls = {}
300
292
  @parent_urls = [URL.path_to_file_url(File.absolute_path(@importer.options[:filename] || 'stdin'))]
301
293
  end
302
294
 
303
295
  def canonicalize(url, from_import:)
304
- return url if url.start_with?(Protocol::IMPORT, Protocol::LOADED)
305
-
306
- if url.start_with?(Protocol::LOAD)
307
- url = @load_urls.delete(url.delete_prefix(Protocol::LOAD))
308
- return url if @importer_results.key?(url)
309
-
296
+ if url.start_with?(Protocol::IMPORT)
297
+ canonical_url = @canonical_urls.delete(url.delete_prefix(Protocol::IMPORT))
298
+ unless @importer_results.key?(canonical_url)
299
+ canonical_url = resolve_file_url(canonical_url, @parent_urls.last, from_import)
300
+ end
301
+ @parent_urls.push(canonical_url)
302
+ canonical_url
303
+ elsif url.start_with?(Protocol::FILE)
310
304
  path = URL.parse(url).route_from(@parent_urls.last).to_s
311
- resolved = resolve_path(path, URL.file_url_to_path(@parent_urls.last), from_import)
312
- return URL.path_to_file_url(resolved) unless resolved.nil?
313
-
314
- return
315
- end
305
+ parent_path = URL.file_url_to_path(@parent_urls.last)
316
306
 
317
- return unless url.start_with?(Protocol::FILE)
318
-
319
- path = URL.parse(url).route_from(@parent_urls.last).to_s
320
- parent_path = URL.file_url_to_path(@parent_urls.last)
307
+ imports = @importer.imports(path, parent_path)
308
+ imports = [SassC::Importer::Import.new(path)] if imports.nil?
309
+ imports = [imports] unless imports.is_a?(Array)
310
+ imports.each do |import|
311
+ import.path = File.absolute_path(import.path, File.dirname(parent_path))
312
+ end
321
313
 
322
- imports = @importer.imports(path, parent_path)
323
- imports = [SassC::Importer::Import.new(path)] if imports.nil?
324
- imports = [imports] unless imports.is_a?(Array)
325
- imports.each do |import|
326
- import.path = File.absolute_path(import.path, File.dirname(parent_path))
314
+ canonical_url = "#{Protocol::IMPORT}#{next_id}"
315
+ @importer_results[canonical_url] = imports_to_native(imports)
316
+ canonical_url
317
+ elsif url.start_with?(Protocol::LOADED)
318
+ canonical_url = Protocol::LOADED
319
+ @parent_urls.pop
320
+ canonical_url
327
321
  end
328
-
329
- import_url = URL.path_to_file_url(File.absolute_path(path, File.dirname(parent_path)))
330
- canonical_url = "#{Protocol::IMPORT}#{import_url}"
331
- @importer_results[canonical_url] = imports_to_native(imports)
332
- canonical_url
333
322
  end
334
323
 
335
324
  def load(canonical_url)
336
- if canonical_url.start_with?(Protocol::IMPORT)
325
+ if @importer_results.key?(canonical_url)
337
326
  @importer_results.delete(canonical_url)
338
327
  elsif canonical_url.start_with?(Protocol::FILE)
339
- @parent_urls.push(canonical_url)
340
- if @importer_results.key?(canonical_url)
341
- @importer_results.delete(canonical_url)
342
- else
343
- path = URL.file_url_to_path(canonical_url)
344
- {
345
- contents: File.read(path),
346
- syntax: syntax(path),
347
- source_map_url: canonical_url
348
- }
349
- end
328
+ path = URL.file_url_to_path(canonical_url)
329
+ {
330
+ contents: File.read(path),
331
+ syntax: syntax(path),
332
+ source_map_url: canonical_url
333
+ }
350
334
  elsif canonical_url.start_with?(Protocol::LOADED)
351
- @parent_urls.pop
352
335
  {
353
336
  contents: '',
354
337
  syntax: :scss
@@ -362,10 +345,12 @@ module SassC
362
345
  @load_paths ||= (@importer.options[:load_paths] || []) + SassC.load_paths
363
346
  end
364
347
 
365
- def resolve_path(path, parent_path, from_import)
348
+ def resolve_file_url(url, parent_url, from_import)
349
+ path = URL.parse(url).route_from(parent_url).to_s
350
+ parent_path = URL.file_url_to_path(parent_url)
366
351
  [File.dirname(parent_path)].concat(load_paths).each do |load_path|
367
352
  resolved = FileImporter.resolve_path(File.absolute_path(path, load_path), from_import)
368
- return resolved unless resolved.nil?
353
+ return URL.path_to_file_url(resolved) unless resolved.nil?
369
354
  end
370
355
  nil
371
356
  end
@@ -384,33 +369,38 @@ module SassC
384
369
  def imports_to_native(imports)
385
370
  {
386
371
  contents: imports.flat_map do |import|
387
- load_id = @load_id
388
- @load_id = load_id.next
389
- load_url = URL.path_to_file_url(import.path)
390
- @load_urls[load_id.to_s] = load_url
372
+ id = next_id
373
+ canonical_url = URL.path_to_file_url(import.path)
374
+ @canonical_urls[id] = canonical_url
391
375
  if import.source
392
- @importer_results[load_url] = if import.source.is_a?(Hash)
393
- {
394
- contents: import.source[:contents],
395
- syntax: import.source[:syntax],
396
- source_map_url: load_url
397
- }
398
- else
399
- {
400
- contents: import.source,
401
- syntax: syntax(import.path),
402
- source_map_url: load_url
403
- }
404
- end
376
+ @importer_results[canonical_url] = if import.source.is_a?(Hash)
377
+ {
378
+ contents: import.source[:contents],
379
+ syntax: import.source[:syntax],
380
+ source_map_url: canonical_url
381
+ }
382
+ else
383
+ {
384
+ contents: import.source,
385
+ syntax: syntax(import.path),
386
+ source_map_url: canonical_url
387
+ }
388
+ end
405
389
  end
406
390
  [
407
- "@import \"#{Protocol::LOAD}#{load_id}\";",
408
- "@import \"#{Protocol::LOADED}#{load_id}\";"
391
+ "@import \"#{Protocol::IMPORT}#{id}\";",
392
+ "@import \"#{Protocol::LOADED}#{id}\";"
409
393
  ]
410
394
  end.join("\n"),
411
395
  syntax: :scss
412
396
  }
413
397
  end
398
+
399
+ def next_id
400
+ id = @id
401
+ @id = id.next
402
+ id.to_s
403
+ end
414
404
  end
415
405
 
416
406
  private_constant :Importer
@@ -542,6 +532,14 @@ module SassC
542
532
  end
543
533
  end
544
534
 
535
+ module Protocol
536
+ FILE = 'file:'
537
+ IMPORT = 'sassc-embedded-import:'
538
+ LOADED = 'sassc-embedded-loaded:'
539
+ end
540
+
541
+ private_constant :Protocol
542
+
545
543
  module URL
546
544
  PARSER = URI::Parser.new({ RESERVED: ';/?:@&=+$,' })
547
545
 
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.5.5
4
+ version: 1.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-06 00:00:00.000000000 Z
11
+ date: 2022-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sassc
@@ -138,8 +138,8 @@ homepage: https://github.com/ntkme/sassc-embedded-polyfill-ruby
138
138
  licenses:
139
139
  - MIT
140
140
  metadata:
141
- documentation_uri: https://rubydoc.info/gems/sassc-embedded/1.5.5
142
- source_code_uri: https://github.com/ntkme/sassc-embedded-polyfill-ruby/tree/v1.5.5
141
+ documentation_uri: https://rubydoc.info/gems/sassc-embedded/1.5.8
142
+ source_code_uri: https://github.com/ntkme/sassc-embedded-polyfill-ruby/tree/v1.5.8
143
143
  funding_uri: https://github.com/sponsors/ntkme
144
144
  post_install_message:
145
145
  rdoc_options: []