sassc-embedded 1.70.1 → 1.74.0

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: 1a1d6d7f744b77407d5d03ab046589505f9b33251eb8440e61a8230725ea3160
4
- data.tar.gz: fb40b19e534709b43f83a26d3358efe8c7a6e0f493da6d1c2e358efc51a9c1a2
3
+ metadata.gz: f2035f16da9c3d02bf4fce8ac06465db89afbee4b1ece61dfd3213b4fec4a150
4
+ data.tar.gz: 1ec55533d5a8949ed2ab53266b52abf963a2be427d228605e0c7147974490856
5
5
  SHA512:
6
- metadata.gz: 6f300bc7794f77fb090e4264bb62f79f1836a69be5a21a4b8e2889315bfa30dc18f46b372476ff9e8c5ac39d36e867bbb63c5d994eeb45ab64f8f12ac86d5660
7
- data.tar.gz: 74441eae5009812fa2058cdbe992da2ca24dd3ddb5cfb4518b7bde3544a4bfde6fc1ebbe628b671726d7da528d81e48a9d48cb663664f21e324f2824c816db4c
6
+ metadata.gz: 4f0d03db8a9d0848c96c21bcc340ee8fc15993f7b56697649fee823bb4e6a398a992b6245c4b6d274a12cf846c6aa8ee59bf56cc19c1b11081d251ae4509e05e
7
+ data.tar.gz: 40760cf8ab3aa85a459b83f2b41e5513b96fea52fc000fa435dd4f4115526914e3665388305962fdd91da1c454a326f64acb27bd47fd6ddd566a6e428bfb1b9f
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SassC
4
4
  module Embedded
5
- VERSION = '1.70.1'
5
+ VERSION = '1.74.0'
6
6
  end
7
7
  end
@@ -13,11 +13,11 @@ module SassC
13
13
  def render
14
14
  return @template.dup if @template.empty?
15
15
 
16
- base_importer = import_handler.setup(nil)
16
+ importers = import_handler.setup(nil)
17
17
 
18
18
  result = ::Sass.compile_string(
19
19
  @template,
20
- importer: base_importer,
20
+ importer: importers.first,
21
21
  load_paths:,
22
22
  syntax:,
23
23
  url: file_url,
@@ -28,12 +28,15 @@ module SassC
28
28
  style: output_style,
29
29
 
30
30
  functions: functions_handler.setup(nil, functions: @functions),
31
- importers: (base_importer.nil? ? [] : [base_importer]).concat(@options.fetch(:importers, [])),
31
+ importers: importers.concat(@options.fetch(:importers, [])),
32
32
 
33
33
  alert_ascii: @options.fetch(:alert_ascii, false),
34
34
  alert_color: @options.fetch(:alert_color, nil),
35
+ fatal_deprecations: @options.fetch(:fatal_deprecations, []),
36
+ future_deprecations: @options.fetch(:future_deprecations, []),
35
37
  logger: @options.fetch(:logger, nil),
36
38
  quiet_deps: @options.fetch(:quiet_deps, false),
39
+ silence_deprecations: @options.fetch(:silence_deprecations, []),
37
40
  verbose: @options.fetch(:verbose, false)
38
41
  )
39
42
 
@@ -184,10 +187,43 @@ module SassC
184
187
 
185
188
  class ImportHandler
186
189
  def setup(_native_options)
187
- Importer.new(@importer) if @importer
190
+ if @importer
191
+ import_cache = ImportCache.new(@importer)
192
+ [Importer.new(import_cache), FileImporter.new(import_cache)]
193
+ else
194
+ []
195
+ end
188
196
  end
189
197
 
198
+ class Importer
199
+ def initialize(import_cache)
200
+ @import_cache = import_cache
201
+ end
202
+
203
+ def canonicalize(...)
204
+ @import_cache.canonicalize(...)
205
+ end
206
+
207
+ def load(...)
208
+ @import_cache.load(...)
209
+ end
210
+ end
211
+
212
+ private_constant :Importer
213
+
190
214
  class FileImporter
215
+ def initialize(import_cache)
216
+ @import_cache = import_cache
217
+ end
218
+
219
+ def find_file_url(...)
220
+ @import_cache.find_file_url(...)
221
+ end
222
+ end
223
+
224
+ private_constant :FileImporter
225
+
226
+ class FileSystemImporter
191
227
  class << self
192
228
  def resolve_path(path, from_import)
193
229
  ext = File.extname(path)
@@ -202,10 +238,10 @@ module SassC
202
238
  unless ext.empty?
203
239
  if from_import
204
240
  result = exactly_one(try_path("#{without_ext(path)}.import#{ext}"))
205
- return result unless result.nil?
241
+ return warn_deprecation_ext(result) unless result.nil?
206
242
  end
207
243
  result = exactly_one(try_path(path))
208
- return result unless result.nil?
244
+ return warn_deprecation_ext(result) unless result.nil?
209
245
  end
210
246
 
211
247
  if from_import
@@ -235,7 +271,7 @@ module SassC
235
271
  end
236
272
 
237
273
  def try_path_as_dir(path, from_import)
238
- return unless dir_exist? path
274
+ return unless dir_exist?(path)
239
275
 
240
276
  if from_import
241
277
  result = exactly_one(try_path_with_ext(File.join(path, 'index.import')))
@@ -247,7 +283,7 @@ module SassC
247
283
 
248
284
  def exactly_one(paths)
249
285
  return if paths.empty?
250
- return paths.first if paths.length == 1
286
+ return paths.first if paths.one?
251
287
 
252
288
  raise "It's not clear which file to import. Found:\n#{paths.map { |path| " #{path}" }.join("\n")}"
253
289
  end
@@ -264,46 +300,71 @@ module SassC
264
300
  ext = File.extname(path)
265
301
  path.delete_suffix(ext)
266
302
  end
303
+
304
+ def warn_deprecation_ext(path)
305
+ basename = File.basename(path)
306
+ warn <<~WARNING
307
+ Deprecation Warning: Importing files with extensions other than `.scss`, `.sass`, `.css` from relative path or load paths without custom SassC::Importer is deprecated.
308
+
309
+ Recommandation: Rename #{basename} to #{basename}.scss
310
+
311
+ More info: https://github.com/sass-contrib/sassc-embedded-shim-ruby/pull/86
312
+
313
+ #{path}
314
+ #{' ' * (path.length - basename.length)}#{'^' * basename.length}
315
+ WARNING
316
+ path
317
+ end
267
318
  end
268
319
  end
269
320
 
270
- private_constant :FileImporter
321
+ private_constant :FileSystemImporter
271
322
 
272
- class Importer
323
+ class ImportCache
273
324
  def initialize(importer)
274
325
  @importer = importer
275
-
276
326
  @canonical_urls = {}
277
- @id = 0
278
327
  @importer_results = {}
328
+ @load_paths = (@importer.options[:load_paths] || []) + SassC.load_paths
279
329
  @parent_urls = [URL.path_to_file_url(File.absolute_path(@importer.options[:filename] || 'stdin'))]
280
330
  end
281
331
 
282
332
  def canonicalize(url, context)
283
333
  if url.start_with?(Protocol::IMPORT)
284
- canonical_url = @canonical_urls.delete(url.delete_prefix(Protocol::IMPORT))
334
+ canonical_url = @canonical_urls.delete(url)
285
335
  unless @importer_results.key?(canonical_url)
286
- canonical_url = resolve_file_url(canonical_url, @parent_urls.last, context.from_import)
336
+ path = URL.unescape(canonical_url)
337
+ parent_path = URL.file_url_to_path(@parent_urls.last)
338
+ canonical_url = resolve_file_url(path, parent_path, context.from_import)
339
+ return unless canonical_url
340
+
341
+ # Temporarily disable FileImporter optimization
342
+ # https://github.com/sass/dart-sass/issues/2208
343
+ #
344
+ # if ['.sass', '.scss', '.css'].include?(File.extname(URL.file_url_to_path(canonical_url)))
345
+ # @canonical_urls[url] = canonical_url
346
+ # return nil
347
+ # end
287
348
  end
288
349
  @parent_urls.push(canonical_url)
289
350
  canonical_url
290
- elsif url.start_with?(Protocol::FILE)
291
- path = URL.file_urls_to_relative_path(url, @parent_urls.last)
292
- parent_path = URL.file_url_to_path(@parent_urls.last)
351
+ elsif url.start_with?(Protocol::LOADED)
352
+ @parent_urls.pop
353
+ Protocol::LOADED
354
+ else
355
+ parent_url = @parent_urls.last
356
+ url = URL.join(parent_url, url)
357
+ return unless url.start_with?(Protocol::FILE)
358
+
359
+ path = URL.file_urls_to_relative_path(url, parent_url)
360
+ parent_path = URL.file_url_to_path(parent_url)
293
361
 
294
362
  imports = @importer.imports(path, parent_path)
295
363
  imports = [SassC::Importer::Import.new(path)] if imports.nil?
296
364
  imports = [imports] unless imports.is_a?(Array)
297
- imports.each do |import|
298
- import.path = File.absolute_path(import.path, File.dirname(parent_path))
299
- end
300
365
 
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
366
+ canonical_url = "#{Protocol::IMPORT}#{url}"
367
+ @importer_results[canonical_url] = imports_to_native(imports, File.dirname(parent_path), context.from_import)
307
368
  canonical_url
308
369
  end
309
370
  end
@@ -326,17 +387,19 @@ module SassC
326
387
  end
327
388
  end
328
389
 
329
- private
390
+ def find_file_url(url, _context)
391
+ canonical_url = @canonical_urls.delete(url)
392
+ return unless canonical_url
330
393
 
331
- def load_paths
332
- @load_paths ||= (@importer.options[:load_paths] || []) + SassC.load_paths
394
+ @parent_urls.push(canonical_url)
395
+ canonical_url
333
396
  end
334
397
 
335
- def resolve_file_url(url, parent_url, from_import)
336
- path = URL.file_urls_to_relative_path(url, parent_url)
337
- parent_path = URL.file_url_to_path(parent_url)
338
- [File.dirname(parent_path)].concat(load_paths).each do |load_path|
339
- resolved = FileImporter.resolve_path(File.absolute_path(path, load_path), from_import)
398
+ private
399
+
400
+ def resolve_file_url(path, parent_path, from_import)
401
+ [File.dirname(parent_path)].concat(@load_paths).each do |load_path|
402
+ resolved = FileSystemImporter.resolve_path(File.absolute_path(path, load_path), from_import)
340
403
  return URL.path_to_file_url(resolved) unless resolved.nil?
341
404
  end
342
405
  nil
@@ -353,13 +416,11 @@ module SassC
353
416
  end
354
417
  end
355
418
 
356
- def imports_to_native(imports, from_import)
419
+ def imports_to_native(imports, parent_dir, from_import)
357
420
  {
358
421
  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
422
  if import.source
423
+ canonical_url = URL.path_to_file_url(File.absolute_path(import.path, parent_dir))
363
424
  @importer_results[canonical_url] = if import.source.is_a?(Hash)
364
425
  {
365
426
  contents: import.source[:contents],
@@ -373,25 +434,24 @@ module SassC
373
434
  source_map_url: canonical_url
374
435
  }
375
436
  end
437
+ else
438
+ canonical_url = URL.escape(import.path)
376
439
  end
440
+ import_url = "#{Protocol::IMPORT}#{canonical_url}"
441
+ loaded_url = "#{Protocol::LOADED}#{canonical_url}"
442
+ @canonical_urls[import_url] = canonical_url
377
443
  at_rule = from_import ? '@import' : '@forward'
378
- [
379
- "#{at_rule} \"#{Protocol::IMPORT}#{id}\";",
380
- "#{at_rule} \"#{Protocol::LOADED}#{id}\";"
381
- ]
444
+ <<~SCSS
445
+ #{at_rule} #{Script::Value::String.quote(import_url)};
446
+ #{at_rule} #{Script::Value::String.quote(loaded_url)};
447
+ SCSS
382
448
  end.join("\n"),
383
449
  syntax: :scss
384
450
  }
385
451
  end
386
-
387
- def next_id
388
- id = @id
389
- @id = id.next
390
- id.to_s
391
- end
392
452
  end
393
453
 
394
- private_constant :Importer
454
+ private_constant :ImportCache
395
455
  end
396
456
 
397
457
  class Sass2Scss
@@ -556,6 +616,10 @@ module SassC
556
616
 
557
617
  module_function
558
618
 
619
+ def join(...)
620
+ URI.join(...).to_s
621
+ end
622
+
559
623
  def parse(str)
560
624
  PARSER.parse(str)
561
625
  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.70.1
4
+ version: 1.74.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-14 00:00:00.000000000 Z
11
+ date: 2024-04-04 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.70'
19
+ version: '1.74'
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.70'
26
+ version: '1.74'
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.70.1
82
+ source_code_uri: https://github.com/sass-contrib/sassc-embedded-shim-ruby/tree/v1.74.0
83
83
  funding_uri: https://github.com/sponsors/ntkme
84
84
  rubygems_mfa_required: 'true'
85
85
  post_install_message: