sassc-embedded 1.3.0 → 1.5.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: cdd5607c689b8388cf0c07abc26c3769ef50007ddd6b46432b277f7631bceb7f
4
- data.tar.gz: 510835f24a3d66cf516bfd56acb0efd729d000cde730ef64908dfd5645f5aa12
3
+ metadata.gz: ae4ea5a6b743f50b8687316f4ff5492b91caa0e8672a7b85da21a7402e2e901d
4
+ data.tar.gz: c94a6a86fb24ee5d018feadfcc5d514fc60d3a77338fe0482f4d4451eafa4a54
5
5
  SHA512:
6
- metadata.gz: 93bbe6c1e4ff6e2fc4209e9390fd4775f029f0efb60606ab64cf9ee71a6afbc64d658c7572fd9c0719a134e8e192c5e8200d8ac2530e691cb84ae3fc14a31686
7
- data.tar.gz: 1eed6fff6d57ac4ac56965de504ee876bd6dbbebb93880edefef2de604eb99536660487ae5c1ebcd6991270904f4700b42a54790dd7c233e303a66755120f01d
6
+ metadata.gz: 42fa17dc23aa53fcfb091c5ad23d1d0e49c260dd914bab8c39ea3c15c9ae3a7e303c44e632f3088f5f4e42d1d6dd6881ec6451a3b5860adbb88e0adc12cc0d34
7
+ data.tar.gz: 35925d2e42085f78234223f56db9e406b95f6ff6541d98802ed5dc75056e4f1085a8f98efb1fe7233ce846b3c1ad8d45ec63255413a9a14191b4022b685ebeef
data/README.md CHANGED
@@ -7,6 +7,12 @@ Use `sass-embedded` with SassC Ruby!
7
7
 
8
8
  This library polyfills [`sassc`](https://github.com/sass/sassc-ruby) with the [`sass-embedded`](https://github.com/ntkme/sass-embedded-host-ruby) implementation.
9
9
 
10
+ It has been tested with:
11
+
12
+ - [`sassc`](https://github.com/sass/sassc-ruby)
13
+ - [`sassc-rails`](https://github.com/sass/sassc-rails)
14
+ - [`sprockets`](https://github.com/rails/sprockets)
15
+ - [`sprockets-rails`](https://github.com/rails/sprockets-rails)
10
16
 
11
17
  ## Install
12
18
 
@@ -43,12 +49,10 @@ See [rubydoc.info/gems/sassc](https://rubydoc.info/gems/sassc) for full API docu
43
49
 
44
50
  ## Behavioral Differences from SassC Ruby
45
51
 
46
- 1. Option `:style => :nested` behaves as `:expanded`.
47
-
48
- 2. Option `:style => :compact` behaves as `:compressed`.
52
+ 1. Option `:style => :nested` and `:style => :compact` behave as `:style => :expanded`.
49
53
 
50
- 3. Option `:precision` is ignored.
54
+ 2. Option `:precision` is ignored.
51
55
 
52
- 4. Option `:line_comments` is ignored.
56
+ 3. Option `:line_comments` is ignored.
53
57
 
54
58
  See [the dart-sass documentation](https://github.com/sass/dart-sass#behavioral-differences-from-ruby-sass) for other differences.
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SassC
4
4
  module Embedded
5
- VERSION = '1.3.0'
5
+ VERSION = '1.5.0'
6
6
  end
7
7
  end
@@ -5,7 +5,6 @@ require 'sass-embedded'
5
5
 
6
6
  require 'base64'
7
7
  require 'json'
8
- require 'pathname'
9
8
  require 'uri'
10
9
 
11
10
  require_relative 'embedded/version'
@@ -46,8 +45,9 @@ module SassC
46
45
  line = e.span&.start&.line
47
46
  line += 1 unless line.nil?
48
47
  url = e.span&.url
49
- path = url&.start_with?('file:') ? URL.file_url_to_path(url) : nil
50
- path = relative_path(Dir.pwd, path) unless path.nil?
48
+ path = if url&.start_with?('file:')
49
+ URL.parse(url).route_from(URL.path_to_file_url("#{File.absolute_path('')}/"))
50
+ end
51
51
  raise SyntaxError.new(e.message, filename: path, line: line)
52
52
  end
53
53
 
@@ -64,6 +64,14 @@ module SassC
64
64
  )
65
65
  end
66
66
 
67
+ def output_url
68
+ @output_url ||= (URL.path_to_file_url(File.absolute_path(output_path)) if output_path)
69
+ end
70
+
71
+ def source_map_file_url
72
+ @source_map_file_url ||= (URL.path_to_file_url(File.absolute_path(source_map_file)) if source_map_file)
73
+ end
74
+
67
75
  def output_style
68
76
  @output_style ||= begin
69
77
  style = @options.fetch(:style, :sass_style_nested).to_s
@@ -72,10 +80,8 @@ module SassC
72
80
 
73
81
  style = style.delete_prefix('sass_style_').to_sym
74
82
  case style
75
- when :nested
83
+ when :nested, :compact
76
84
  :expanded
77
- when :compact
78
- :compressed
79
85
  else
80
86
  style
81
87
  end
@@ -99,15 +105,12 @@ module SassC
99
105
  def post_process_source_map(source_map)
100
106
  return unless source_map
101
107
 
108
+ url = URL.parse(source_map_file_url || file_url)
102
109
  data = JSON.parse(source_map)
103
-
104
- source_map_dir = File.dirname(source_map_file || '')
105
-
106
- data['file'] = URL.escape(relative_path(source_map_dir, output_path)) if output_path
107
-
110
+ data['file'] = URL.parse(output_url).route_from(url).to_s if output_url
108
111
  data['sources'].map! do |source|
109
112
  if source.start_with?('file:')
110
- relative_path(source_map_dir, URL.file_url_to_path(source))
113
+ URL.parse(source).route_from(url).to_s
111
114
  else
112
115
  source
113
116
  end
@@ -119,19 +122,16 @@ module SassC
119
122
  def post_process_css(css)
120
123
  css += "\n" unless css.empty?
121
124
  unless @source_map.nil? || omit_source_map_url?
122
- url = if source_map_embed?
123
- "data:application/json;base64,#{Base64.strict_encode64(@source_map)}"
124
- else
125
- URL.escape(relative_path(File.dirname(output_path || ''), source_map_file))
126
- end
127
- css += "\n/*# sourceMappingURL=#{url} */"
125
+ url = URL.parse(output_url || file_url)
126
+ source_mapping_url = if source_map_embed?
127
+ "data:application/json;base64,#{Base64.strict_encode64(@source_map)}"
128
+ else
129
+ URL.parse(source_map_file_url).route_from(url).to_s
130
+ end
131
+ css += "\n/*# sourceMappingURL=#{source_mapping_url} */"
128
132
  end
129
133
  css
130
134
  end
131
-
132
- def relative_path(from, to)
133
- Pathname.new(File.absolute_path(to)).relative_path_from(Pathname.new(File.absolute_path(from))).to_s
134
- end
135
135
  end
136
136
 
137
137
  class FunctionsHandler
@@ -204,7 +204,7 @@ module SassC
204
204
  class << self
205
205
  def resolve_path(path, from_import)
206
206
  ext = File.extname(path)
207
- if ['.sass', '.scss', '.css'].include?(ext)
207
+ unless ext.empty?
208
208
  if from_import
209
209
  result = exactly_one(try_path("#{without_ext(path)}.import#{ext}"))
210
210
  return result unless result.nil?
@@ -286,8 +286,7 @@ module SassC
286
286
  def initialize(importer)
287
287
  @importer = importer
288
288
  @importer_results = {}
289
- @base_url = URL.parse(URL.path_to_file_url("#{File.absolute_path('')}/"))
290
- @parent_urls = [URL.parse(URL.path_to_file_url(File.absolute_path(@importer.options[:filename] || 'stdin')))]
289
+ @parent_urls = [URL.path_to_file_url(File.absolute_path(@importer.options[:filename] || 'stdin'))]
291
290
  end
292
291
 
293
292
  def canonicalize(url, from_import:)
@@ -305,7 +304,7 @@ module SassC
305
304
  return unless url.start_with?(Protocol::FILE)
306
305
 
307
306
  path = URL.parse(url).route_from(@parent_urls.last).to_s
308
- parent_path = @parent_urls.last.route_from(@base_url).to_s
307
+ parent_path = URL.file_url_to_path(@parent_urls.last)
309
308
 
310
309
  imports = @importer.imports(path, parent_path)
311
310
  imports = [SassC::Importer::Import.new(path)] if imports.nil?
@@ -324,7 +323,7 @@ module SassC
324
323
  if canonical_url.start_with?(Protocol::IMPORT)
325
324
  @importer_results.delete(canonical_url)
326
325
  elsif canonical_url.start_with?(Protocol::FILE)
327
- @parent_urls.push(URL.parse(canonical_url))
326
+ @parent_urls.push(canonical_url)
328
327
  if @importer_results.key?(canonical_url)
329
328
  @importer_results.delete(canonical_url)
330
329
  else
@@ -339,7 +338,7 @@ module SassC
339
338
  @parent_urls.pop
340
339
  {
341
340
  contents: '',
342
- syntax: 'scss'
341
+ syntax: :scss
343
342
  }
344
343
  end
345
344
  end
@@ -374,11 +373,19 @@ module SassC
374
373
  contents: imports.flat_map do |import|
375
374
  file_url = URL.path_to_file_url(import.path)
376
375
  if import.source
377
- @importer_results[file_url] = {
378
- contents: import.source,
379
- syntax: syntax(import.path),
380
- source_map_url: file_url
381
- }
376
+ @importer_results[file_url] = if import.source.is_a?(Hash)
377
+ {
378
+ contents: import.source[:contents],
379
+ syntax: import.source[:syntax],
380
+ source_map_url: file_url
381
+ }
382
+ else
383
+ {
384
+ contents: import.source,
385
+ syntax: syntax(import.path),
386
+ source_map_url: file_url
387
+ }
388
+ end
382
389
  end
383
390
  [
384
391
  "@import #{"#{Protocol::LOAD}#{file_url}".inspect};",
@@ -393,6 +400,15 @@ module SassC
393
400
  private_constant :Importer
394
401
  end
395
402
 
403
+ class Sass2Scss
404
+ def self.convert(sass)
405
+ {
406
+ contents: sass,
407
+ syntax: :indented
408
+ }
409
+ end
410
+ end
411
+
396
412
  module Script
397
413
  module ValueConversion
398
414
  def self.from_native(value, options)
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.3.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-02 00:00:00.000000000 Z
11
+ date: 2022-04-03 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.3.0
142
- source_code_uri: https://github.com/ntkme/sassc-embedded-polyfill-ruby/tree/v1.3.0
141
+ documentation_uri: https://rubydoc.info/gems/sassc-embedded/1.5.0
142
+ source_code_uri: https://github.com/ntkme/sassc-embedded-polyfill-ruby/tree/v1.5.0
143
143
  funding_uri: https://github.com/sponsors/ntkme
144
144
  post_install_message:
145
145
  rdoc_options: []