sassc-embedded 1.5.4 → 1.5.7

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: 7e5e1e76c99f6d9c1e0735114d4c1fee858fbf466878fa45fb607142d605886b
4
- data.tar.gz: 2c428bbc53b229b9ecbd6ac26a3f559a2eb47b458d02855e64b444d6238dc0e9
3
+ metadata.gz: 0bfb6d5d03f82fe0caed0330d377a072a9943695119839dedd7927b9353ae234
4
+ data.tar.gz: a3ab1f40872818454a6dc4df354c053022efc44fe0f8e9f8138eab21645e212c
5
5
  SHA512:
6
- metadata.gz: 55b738463c259f446fb89f4373a5b6929f3c9abf07cd403217c860036780cb4a2737a6c2deceb3ef470baf9e523eb76794579a9fa75fe4b2d807439fa0c8ee9e
7
- data.tar.gz: 222ddb543a2aea77fa84cc625c6a920c5350598c263defcedddf8db638dd704a6061a7b7d15ac61ad0299e8ec02520af76a58242e6774a86c6d591f1c4dd13f5
6
+ metadata.gz: e85eb1e5be70cdbca5d2561945c9ff8cc291f8721ebc3d1c53e7e58d7dec47953b131ec70c8d8c2d497f1f9a25c16ee84e3e23e465cf18fa62412fd1b99c4974
7
+ data.tar.gz: af772e37b302bfc34f3db138f79ed86a2628185a6f95699687e0f4d19ff5588c68a01ac50b66e9ddd63a8fa9e518ceaae8d74ff12637056d24c7c1474129ceeb
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SassC
4
4
  module Embedded
5
- VERSION = '1.5.4'
5
+ VERSION = '1.5.7'
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,70 +283,59 @@ 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
292
  @parent_urls = [URL.path_to_file_url(File.absolute_path(@importer.options[:filename] || 'stdin'))]
299
293
  end
300
294
 
301
295
  def canonicalize(url, from_import:)
302
- return url if url.start_with?(Protocol::IMPORT, Protocol::LOADED)
303
-
304
- if url.start_with?(Protocol::LOAD)
305
- url = url.delete_prefix(Protocol::LOAD)
306
- return url if @importer_results.key?(url)
296
+ if url.start_with?(Protocol::IMPORT)
297
+ canonical_url = @canonical_urls.delete(url.delete_prefix(Protocol::IMPORT))
298
+ return canonical_url if canonical_url.start_with?(Protocol::IMPORT)
307
299
 
300
+ unless @importer_results.key?(canonical_url)
301
+ canonical_url = resolve_file_url(canonical_url, @parent_urls.last, from_import)
302
+ end
303
+ @parent_urls.push(canonical_url)
304
+ canonical_url
305
+ elsif url.start_with?(Protocol::FILE)
308
306
  path = URL.parse(url).route_from(@parent_urls.last).to_s
309
- resolved = resolve_path(path, URL.file_url_to_path(@parent_urls.last), from_import)
310
- return URL.path_to_file_url(resolved) unless resolved.nil?
311
-
312
- return
313
- end
314
-
315
- return unless url.start_with?(Protocol::FILE)
307
+ parent_path = URL.file_url_to_path(@parent_urls.last)
316
308
 
317
- path = URL.parse(url).route_from(@parent_urls.last).to_s
318
- parent_path = URL.file_url_to_path(@parent_urls.last)
309
+ imports = @importer.imports(path, parent_path)
310
+ imports = [SassC::Importer::Import.new(path)] if imports.nil?
311
+ imports = [imports] unless imports.is_a?(Array)
312
+ imports.each do |import|
313
+ import.path = File.absolute_path(import.path, File.dirname(parent_path))
314
+ end
319
315
 
320
- imports = @importer.imports(path, parent_path)
321
- imports = [SassC::Importer::Import.new(path)] if imports.nil?
322
- imports = [imports] unless imports.is_a?(Array)
323
- imports.each do |import|
324
- import.path = File.absolute_path(import.path, File.dirname(parent_path))
316
+ id = next_id
317
+ canonical_url = "#{Protocol::IMPORT}#{id}"
318
+ @canonical_urls[id] = canonical_url
319
+ @importer_results[canonical_url] = imports_to_native(imports)
320
+ canonical_url
321
+ elsif url.start_with?(Protocol::LOADED)
322
+ canonical_url = Protocol::LOADED
323
+ @parent_urls.pop
324
+ canonical_url
325
325
  end
326
-
327
- import_url = URL.path_to_file_url(File.absolute_path(path, File.dirname(parent_path)))
328
- canonical_url = "#{Protocol::IMPORT}#{import_url}"
329
- @importer_results[canonical_url] = imports_to_native(imports)
330
- canonical_url
331
326
  end
332
327
 
333
328
  def load(canonical_url)
334
- if canonical_url.start_with?(Protocol::IMPORT)
329
+ if @importer_results.key?(canonical_url)
335
330
  @importer_results.delete(canonical_url)
336
331
  elsif canonical_url.start_with?(Protocol::FILE)
337
- @parent_urls.push(canonical_url)
338
- if @importer_results.key?(canonical_url)
339
- @importer_results.delete(canonical_url)
340
- else
341
- path = URL.file_url_to_path(canonical_url)
342
- {
343
- contents: File.read(path),
344
- syntax: syntax(path),
345
- source_map_url: canonical_url
346
- }
347
- end
332
+ path = URL.file_url_to_path(canonical_url)
333
+ {
334
+ contents: File.read(path),
335
+ syntax: syntax(path),
336
+ source_map_url: canonical_url
337
+ }
348
338
  elsif canonical_url.start_with?(Protocol::LOADED)
349
- @parent_urls.pop
350
339
  {
351
340
  contents: '',
352
341
  syntax: :scss
@@ -360,10 +349,12 @@ module SassC
360
349
  @load_paths ||= (@importer.options[:load_paths] || []) + SassC.load_paths
361
350
  end
362
351
 
363
- def resolve_path(path, parent_path, from_import)
352
+ def resolve_file_url(url, parent_url, from_import)
353
+ path = URL.parse(url).route_from(parent_url).to_s
354
+ parent_path = URL.file_url_to_path(parent_url)
364
355
  [File.dirname(parent_path)].concat(load_paths).each do |load_path|
365
356
  resolved = FileImporter.resolve_path(File.absolute_path(path, load_path), from_import)
366
- return resolved unless resolved.nil?
357
+ return URL.path_to_file_url(resolved) unless resolved.nil?
367
358
  end
368
359
  nil
369
360
  end
@@ -382,30 +373,38 @@ module SassC
382
373
  def imports_to_native(imports)
383
374
  {
384
375
  contents: imports.flat_map do |import|
385
- file_url = URL.path_to_file_url(import.path)
376
+ id = next_id
377
+ canonical_url = URL.path_to_file_url(import.path)
378
+ @canonical_urls[id] = canonical_url
386
379
  if import.source
387
- @importer_results[file_url] = if import.source.is_a?(Hash)
388
- {
389
- contents: import.source[:contents],
390
- syntax: import.source[:syntax],
391
- source_map_url: file_url
392
- }
393
- else
394
- {
395
- contents: import.source,
396
- syntax: syntax(import.path),
397
- source_map_url: file_url
398
- }
399
- end
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
400
393
  end
401
394
  [
402
- "@import #{"#{Protocol::LOAD}#{file_url}".inspect};",
403
- "@import #{"#{Protocol::LOADED}#{file_url}".inspect};"
395
+ "@import \"#{Protocol::IMPORT}#{id}\";",
396
+ "@import \"#{Protocol::LOADED}#{id}\";"
404
397
  ]
405
398
  end.join("\n"),
406
399
  syntax: :scss
407
400
  }
408
401
  end
402
+
403
+ def next_id
404
+ id = @id
405
+ @id = id.next
406
+ id.to_s
407
+ end
409
408
  end
410
409
 
411
410
  private_constant :Importer
@@ -537,6 +536,14 @@ module SassC
537
536
  end
538
537
  end
539
538
 
539
+ module Protocol
540
+ FILE = 'file:'
541
+ IMPORT = 'sassc-embedded-import:'
542
+ LOADED = 'sassc-embedded-loaded:'
543
+ end
544
+
545
+ private_constant :Protocol
546
+
540
547
  module URL
541
548
  PARSER = URI::Parser.new({ RESERVED: ';/?:@&=+$,' })
542
549
 
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.4
4
+ version: 1.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-05 00:00:00.000000000 Z
11
+ date: 2022-04-06 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.4
142
- source_code_uri: https://github.com/ntkme/sassc-embedded-polyfill-ruby/tree/v1.5.4
141
+ documentation_uri: https://rubydoc.info/gems/sassc-embedded/1.5.7
142
+ source_code_uri: https://github.com/ntkme/sassc-embedded-polyfill-ruby/tree/v1.5.7
143
143
  funding_uri: https://github.com/sponsors/ntkme
144
144
  post_install_message:
145
145
  rdoc_options: []