sass-embedded 1.69.7-arm-linux-androideabi → 1.70.0-arm-linux-androideabi

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.
@@ -3,83 +3,385 @@
3
3
  module Sass
4
4
  class Compiler
5
5
  class Host
6
- # The {Protofier} module.
6
+ # The {Protofier} class.
7
7
  #
8
8
  # It converts Pure Ruby types and Protobuf Ruby types.
9
- module Protofier
10
- module_function
11
-
12
- def from_proto_canonicalize_context(canonicalize_request)
13
- CanonicalizeContext.new(
14
- canonicalize_request.containing_url == '' ? nil : canonicalize_request.containing_url,
15
- canonicalize_request.from_import
16
- )
9
+ class Protofier
10
+ def initialize(function_registry)
11
+ @function_registry = function_registry
17
12
  end
18
13
 
19
- def from_proto_compile_response(compile_response)
20
- oneof = compile_response.result
21
- result = compile_response.public_send(oneof)
14
+ def to_proto(obj)
15
+ case obj
16
+ when Sass::Value::String
17
+ EmbeddedProtocol::Value.new(
18
+ string: EmbeddedProtocol::Value::String.new(
19
+ text: obj.text.to_str,
20
+ quoted: obj.quoted?
21
+ )
22
+ )
23
+ when Sass::Value::Number
24
+ EmbeddedProtocol::Value.new(
25
+ number: Number.to_proto(obj)
26
+ )
27
+ when Sass::Value::Color
28
+ if obj.instance_eval { !defined?(@hue) }
29
+ EmbeddedProtocol::Value.new(
30
+ rgb_color: EmbeddedProtocol::Value::RgbColor.new(
31
+ red: obj.red,
32
+ green: obj.green,
33
+ blue: obj.blue,
34
+ alpha: obj.alpha.to_f
35
+ )
36
+ )
37
+ elsif obj.instance_eval { !defined?(@saturation) }
38
+ EmbeddedProtocol::Value.new(
39
+ hwb_color: EmbeddedProtocol::Value::HwbColor.new(
40
+ hue: obj.hue.to_f,
41
+ whiteness: obj.whiteness.to_f,
42
+ blackness: obj.blackness.to_f,
43
+ alpha: obj.alpha.to_f
44
+ )
45
+ )
46
+ else
47
+ EmbeddedProtocol::Value.new(
48
+ hsl_color: EmbeddedProtocol::Value::HslColor.new(
49
+ hue: obj.hue.to_f,
50
+ saturation: obj.saturation.to_f,
51
+ lightness: obj.lightness.to_f,
52
+ alpha: obj.alpha.to_f
53
+ )
54
+ )
55
+ end
56
+ when Sass::Value::ArgumentList
57
+ EmbeddedProtocol::Value.new(
58
+ argument_list: EmbeddedProtocol::Value::ArgumentList.new(
59
+ id: obj.instance_eval { @id },
60
+ contents: obj.to_a.map { |element| to_proto(element) },
61
+ keywords: obj.keywords.to_h { |key, value| [key.to_s, to_proto(value)] },
62
+ separator: ListSeparator.to_proto(obj.separator)
63
+ )
64
+ )
65
+ when Sass::Value::List
66
+ EmbeddedProtocol::Value.new(
67
+ list: EmbeddedProtocol::Value::List.new(
68
+ contents: obj.to_a.map { |element| to_proto(element) },
69
+ separator: ListSeparator.to_proto(obj.separator),
70
+ has_brackets: obj.bracketed?
71
+ )
72
+ )
73
+ when Sass::Value::Map
74
+ EmbeddedProtocol::Value.new(
75
+ map: EmbeddedProtocol::Value::Map.new(
76
+ entries: obj.contents.map do |key, value|
77
+ EmbeddedProtocol::Value::Map::Entry.new(
78
+ key: to_proto(key),
79
+ value: to_proto(value)
80
+ )
81
+ end
82
+ )
83
+ )
84
+ when Sass::Value::Function
85
+ if obj.instance_eval { @id }
86
+ EmbeddedProtocol::Value.new(
87
+ compiler_function: EmbeddedProtocol::Value::CompilerFunction.new(
88
+ id: obj.instance_eval { @id }
89
+ )
90
+ )
91
+ else
92
+ EmbeddedProtocol::Value.new(
93
+ host_function: EmbeddedProtocol::Value::HostFunction.new(
94
+ id: @function_registry.register(obj.callback),
95
+ signature: obj.signature
96
+ )
97
+ )
98
+ end
99
+ when Sass::Value::Mixin
100
+ EmbeddedProtocol::Value.new(
101
+ compiler_mixin: EmbeddedProtocol::Value::CompilerMixin.new(
102
+ id: obj.instance_eval { @id }
103
+ )
104
+ )
105
+ when Sass::Value::Calculation
106
+ EmbeddedProtocol::Value.new(
107
+ calculation: Calculation.to_proto(obj)
108
+ )
109
+ when Sass::Value::Boolean
110
+ EmbeddedProtocol::Value.new(
111
+ singleton: obj.value ? :TRUE : :FALSE
112
+ )
113
+ when Sass::Value::Null
114
+ EmbeddedProtocol::Value.new(
115
+ singleton: :NULL
116
+ )
117
+ else
118
+ raise Sass::ScriptError, "Unknown Sass::Value #{obj}"
119
+ end
120
+ end
121
+
122
+ def from_proto(proto)
123
+ oneof = proto.value
124
+ obj = proto.public_send(oneof)
22
125
  case oneof
23
- when :failure
24
- raise CompileError.new(
25
- result.message,
26
- result.formatted == '' ? nil : result.formatted,
27
- result.stack_trace == '' ? nil : result.stack_trace,
28
- from_proto_source_span(result.span),
29
- compile_response.loaded_urls
30
- )
31
- when :success
32
- CompileResult.new(
33
- result.css,
34
- result.source_map == '' ? nil : result.source_map,
35
- compile_response.loaded_urls
126
+ when :string
127
+ Sass::Value::String.new(
128
+ obj.text,
129
+ quoted: obj.quoted
130
+ )
131
+ when :number
132
+ Number.from_proto(obj)
133
+ when :rgb_color
134
+ Sass::Value::Color.new(
135
+ red: obj.red,
136
+ green: obj.green,
137
+ blue: obj.blue,
138
+ alpha: obj.alpha
139
+ )
140
+ when :hsl_color
141
+ Sass::Value::Color.new(
142
+ hue: obj.hue,
143
+ saturation: obj.saturation,
144
+ lightness: obj.lightness,
145
+ alpha: obj.alpha
146
+ )
147
+ when :hwb_color
148
+ Sass::Value::Color.new(
149
+ hue: obj.hue,
150
+ whiteness: obj.whiteness,
151
+ blackness: obj.blackness,
152
+ alpha: obj.alpha
153
+ )
154
+ when :argument_list
155
+ Sass::Value::ArgumentList.new(
156
+ obj.contents.map do |element|
157
+ from_proto(element)
158
+ end,
159
+ obj.keywords.entries.to_h do |key, value|
160
+ [key.to_sym, from_proto(value)]
161
+ end,
162
+ ListSeparator.from_proto(obj.separator)
163
+ ).instance_eval do
164
+ @id = obj.id
165
+ self
166
+ end
167
+ when :list
168
+ Sass::Value::List.new(
169
+ obj.contents.map do |element|
170
+ from_proto(element)
171
+ end,
172
+ separator: ListSeparator.from_proto(obj.separator),
173
+ bracketed: obj.has_brackets
174
+ )
175
+ when :map
176
+ Sass::Value::Map.new(
177
+ obj.entries.to_h do |entry|
178
+ [from_proto(entry.key), from_proto(entry.value)]
179
+ end
36
180
  )
181
+ when :compiler_function
182
+ Sass::Value::Function.new(nil).instance_eval do
183
+ @id = obj.id
184
+ self
185
+ end
186
+ when :host_function
187
+ raise Sass::ScriptError, 'The compiler may not send Value.host_function to host'
188
+ when :compiler_mixin
189
+ Sass::Value::Mixin.send(:new).instance_eval do
190
+ @id = obj.id
191
+ self
192
+ end
193
+ when :calculation
194
+ Calculation.from_proto(obj)
195
+ when :singleton
196
+ case obj
197
+ when :TRUE
198
+ Sass::Value::Boolean::TRUE
199
+ when :FALSE
200
+ Sass::Value::Boolean::FALSE
201
+ when :NULL
202
+ Sass::Value::Null::NULL
203
+ else
204
+ raise Sass::ScriptError, "Unknown Value.singleton #{obj}"
205
+ end
37
206
  else
38
- raise ArgumentError, "Unknown CompileResponse.result #{result}"
207
+ raise Sass::ScriptError, "Unknown Value.value #{obj}"
39
208
  end
40
209
  end
41
210
 
42
- def from_proto_source_span(source_span)
43
- return if source_span.nil?
211
+ # The {Number} Protofier.
212
+ module Number
213
+ module_function
44
214
 
45
- Logger::SourceSpan.new(from_proto_source_location(source_span.start),
46
- from_proto_source_location(source_span.end),
47
- source_span.text,
48
- source_span.url == '' ? nil : source_span.url,
49
- source_span.context == '' ? nil : source_span.context)
215
+ def to_proto(obj)
216
+ EmbeddedProtocol::Value::Number.new(
217
+ value: obj.value.to_f,
218
+ numerators: obj.numerator_units,
219
+ denominators: obj.denominator_units
220
+ )
221
+ end
222
+
223
+ def from_proto(obj)
224
+ Sass::Value::Number.new(
225
+ obj.value, {
226
+ numerator_units: obj.numerators.to_a,
227
+ denominator_units: obj.denominators.to_a
228
+ }
229
+ )
230
+ end
50
231
  end
51
232
 
52
- def from_proto_source_location(source_location)
53
- return if source_location.nil?
233
+ private_constant :Number
234
+
235
+ # The {Calculation} Protofier.
236
+ module Calculation
237
+ module_function
54
238
 
55
- Logger::SourceLocation.new(source_location.offset,
56
- source_location.line,
57
- source_location.column)
239
+ def to_proto(obj)
240
+ EmbeddedProtocol::Value::Calculation.new(
241
+ name: obj.name,
242
+ arguments: obj.arguments.map { |argument| CalculationValue.to_proto(argument) }
243
+ )
244
+ end
245
+
246
+ def from_proto(obj)
247
+ Sass::Value::Calculation.send(
248
+ :new,
249
+ obj.name,
250
+ obj.arguments.map { |argument| CalculationValue.from_proto(argument) }
251
+ )
252
+ end
58
253
  end
59
254
 
60
- def to_proto_syntax(syntax)
61
- case syntax&.to_sym
62
- when :scss
63
- EmbeddedProtocol::Syntax::SCSS
64
- when :indented
65
- EmbeddedProtocol::Syntax::INDENTED
66
- when :css
67
- EmbeddedProtocol::Syntax::CSS
68
- else
69
- raise ArgumentError, 'syntax must be one of :scss, :indented, :css'
255
+ private_constant :Calculation
256
+
257
+ # The {CalculationValue} Protofier.
258
+ module CalculationValue
259
+ module_function
260
+
261
+ def to_proto(value)
262
+ case value
263
+ when Sass::Value::Number
264
+ EmbeddedProtocol::Value::Calculation::CalculationValue.new(
265
+ number: Number.to_proto(value)
266
+ )
267
+ when Sass::Value::Calculation
268
+ EmbeddedProtocol::Value::Calculation::CalculationValue.new(
269
+ calculation: Calculation.to_proto(value)
270
+ )
271
+ when Sass::Value::String
272
+ EmbeddedProtocol::Value::Calculation::CalculationValue.new(
273
+ string: value.text
274
+ )
275
+ when Sass::CalculationValue::CalculationOperation
276
+ EmbeddedProtocol::Value::Calculation::CalculationValue.new(
277
+ operation: EmbeddedProtocol::Value::Calculation::CalculationOperation.new(
278
+ operator: CalculationOperator.to_proto(value.operator),
279
+ left: to_proto(value.left),
280
+ right: to_proto(value.right)
281
+ )
282
+ )
283
+ else
284
+ raise Sass::ScriptError, "Unknown CalculationValue #{value}"
285
+ end
286
+ end
287
+
288
+ def from_proto(value)
289
+ oneof = value.value
290
+ obj = value.public_send(oneof)
291
+ case oneof
292
+ when :number
293
+ Number.from_proto(obj)
294
+ when :calculation
295
+ Calculation.from_proto(obj)
296
+ when :string
297
+ Sass::Value::String.new(obj, quoted: false)
298
+ when :operation
299
+ Sass::CalculationValue::CalculationOperation.new(
300
+ CalculationOperator.from_proto(obj.operator),
301
+ from_proto(obj.left),
302
+ from_proto(obj.right)
303
+ )
304
+ else
305
+ raise Sass::ScriptError, "Unknown CalculationValue #{value}"
306
+ end
70
307
  end
71
308
  end
72
309
 
73
- def to_proto_output_style(style)
74
- case style&.to_sym
75
- when :expanded
76
- EmbeddedProtocol::OutputStyle::EXPANDED
77
- when :compressed
78
- EmbeddedProtocol::OutputStyle::COMPRESSED
79
- else
80
- raise ArgumentError, 'style must be one of :expanded, :compressed'
310
+ private_constant :CalculationValue
311
+
312
+ # The {CalculationOperator} Protofier.
313
+ module CalculationOperator
314
+ module_function
315
+
316
+ def to_proto(operator)
317
+ case operator
318
+ when '+'
319
+ :PLUS
320
+ when '-'
321
+ :MINUS
322
+ when '*'
323
+ :TIMES
324
+ when '/'
325
+ :DIVIDE
326
+ else
327
+ raise Sass::ScriptError, "Unknown CalculationOperator #{separator}"
328
+ end
329
+ end
330
+
331
+ def from_proto(operator)
332
+ case operator
333
+ when :PLUS
334
+ '+'
335
+ when :MINUS
336
+ '-'
337
+ when :TIMES
338
+ '*'
339
+ when :DIVIDE
340
+ '/'
341
+ else
342
+ raise Sass::ScriptError, "Unknown CalculationOperator #{separator}"
343
+ end
81
344
  end
82
345
  end
346
+
347
+ private_constant :CalculationOperator
348
+
349
+ # The {ListSeparator} Protofier.
350
+ module ListSeparator
351
+ module_function
352
+
353
+ def to_proto(separator)
354
+ case separator
355
+ when ','
356
+ :COMMA
357
+ when ' '
358
+ :SPACE
359
+ when '/'
360
+ :SLASH
361
+ when nil
362
+ :UNDECIDED
363
+ else
364
+ raise Sass::ScriptError, "Unknown ListSeparator #{separator}"
365
+ end
366
+ end
367
+
368
+ def from_proto(separator)
369
+ case separator
370
+ when :COMMA
371
+ ','
372
+ when :SPACE
373
+ ' '
374
+ when :SLASH
375
+ '/'
376
+ when :UNDECIDED
377
+ nil
378
+ else
379
+ raise Sass::ScriptError, "Unknown ListSeparator #{separator}"
380
+ end
381
+ end
382
+ end
383
+
384
+ private_constant :ListSeparator
83
385
  end
84
386
 
85
387
  private_constant :Protofier
@@ -5,7 +5,6 @@ require_relative 'host/importer_registry'
5
5
  require_relative 'host/logger_registry'
6
6
  require_relative 'host/protofier'
7
7
  require_relative 'host/structifier'
8
- require_relative 'host/value_protofier'
9
8
 
10
9
  module Sass
11
10
  class Compiler
@@ -46,12 +45,19 @@ module Sass
46
45
  EmbeddedProtocol::InboundMessage::CompileRequest::StringInput.new(
47
46
  source: source.to_str,
48
47
  url: url&.to_s,
49
- syntax: Protofier.to_proto_syntax(syntax),
48
+ syntax: @importer_registry.syntax_to_proto(syntax),
50
49
  importer: (@importer_registry.register(importer) unless importer.nil?)
51
50
  )
52
51
  end,
53
52
  path: (File.absolute_path(path) unless path.nil?),
54
- style: Protofier.to_proto_output_style(style),
53
+ style: case style&.to_sym
54
+ when :expanded
55
+ EmbeddedProtocol::OutputStyle::EXPANDED
56
+ when :compressed
57
+ EmbeddedProtocol::OutputStyle::COMPRESSED
58
+ else
59
+ raise ArgumentError, 'style must be one of :expanded, :compressed'
60
+ end,
55
61
  charset:,
56
62
  source_map:,
57
63
  source_map_include_sources:,
@@ -60,11 +66,31 @@ module Sass
60
66
  alert_ascii:,
61
67
  alert_color:,
62
68
  quiet_deps:,
69
+ silent: logger == Logger.silent,
63
70
  verbose:
64
71
  ))
65
72
  end
66
73
 
67
- Protofier.from_proto_compile_response(compile_response)
74
+ oneof = compile_response.result
75
+ result = compile_response.public_send(oneof)
76
+ case oneof
77
+ when :failure
78
+ raise CompileError.new(
79
+ result.message,
80
+ result.formatted == '' ? nil : result.formatted,
81
+ result.stack_trace == '' ? nil : result.stack_trace,
82
+ result.span.nil? ? nil : Logger::SourceSpan.new(result.span),
83
+ compile_response.loaded_urls
84
+ )
85
+ when :success
86
+ CompileResult.new(
87
+ result.css,
88
+ result.source_map == '' ? nil : result.source_map,
89
+ compile_response.loaded_urls
90
+ )
91
+ else
92
+ raise ArgumentError, "Unknown CompileResponse.result #{result}"
93
+ end
68
94
  end
69
95
 
70
96
  def version_request
@@ -74,14 +100,18 @@ module Sass
74
100
  ))
75
101
  end
76
102
 
77
- lang = case version_response.implementation_name
78
- when /\bdart\b/i
79
- '[Dart]'
80
- else
81
- '[?]'
82
- end
103
+ info = [
104
+ version_response.implementation_name,
105
+ version_response.implementation_version,
106
+ '(Sass Compiler)'
107
+ ]
108
+
109
+ case version_response.implementation_name
110
+ when 'dart-sass'
111
+ info << '[Dart]'
112
+ end
83
113
 
84
- "#{version_response.implementation_name}\t#{version_response.implementation_version}\t(Sass Compiler)\t#{lang}"
114
+ info
85
115
  end
86
116
 
87
117
  def compile_response(message)
data/lib/sass/compiler.rb CHANGED
@@ -7,6 +7,7 @@ require_relative 'compiler/dispatcher'
7
7
  require_relative 'compiler/dispatcher_manager'
8
8
  require_relative 'compiler/host'
9
9
  require_relative 'compiler/varint'
10
+ require_relative 'embedded/version'
10
11
  require_relative 'embedded_protocol'
11
12
  require_relative 'exception'
12
13
  require_relative 'fork_tracker'
@@ -174,10 +175,10 @@ module Sass
174
175
  # @return [String] Information about the Sass implementation.
175
176
  # @see https://sass-lang.com/documentation/js-api/variables/info/
176
177
  def info
177
- @info ||= <<~INFO.freeze
178
- sass-embedded\t#{Embedded::VERSION}\t(Embedded Host)\t[Ruby]
179
- #{Host.new(@dispatcher).version_request}
180
- INFO
178
+ @info ||= [
179
+ ['sass-embedded', Embedded::VERSION, '(Embedded Host)', '[Ruby]'].join("\t"),
180
+ Host.new(@dispatcher).version_request.join("\t")
181
+ ].join("\n").freeze
181
182
  end
182
183
 
183
184
  def close
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sass
4
4
  module Embedded
5
- VERSION = '1.69.7'
5
+ VERSION = '1.70.0'
6
6
  end
7
7
  end
data/lib/sass/embedded.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'compiler'
4
- require_relative 'embedded/version'
5
4
 
6
5
  # The Sass module.
7
6
  #
@@ -28,7 +28,7 @@ module Sass
28
28
 
29
29
  highlight = Exception.respond_to?(:to_tty?) && Exception.to_tty? if highlight.nil?
30
30
  if highlight
31
- +@full_message
31
+ @full_message.dup
32
32
  else
33
33
  @full_message.gsub(/\e\[[0-9;]*m/, '')
34
34
  end
@@ -38,7 +38,7 @@ module Sass
38
38
  def to_css
39
39
  content = full_message(highlight: false, order: :top)
40
40
 
41
- <<~CSS
41
+ <<~CSS.freeze
42
42
  /* #{content.gsub('*/', "*\u2060/").gsub("\r\n", "\n").split("\n").join("\n * ")} */
43
43
 
44
44
  body::before {
@@ -50,7 +50,11 @@ module Sass
50
50
  border-bottom-style: solid;
51
51
  font-family: monospace, monospace;
52
52
  white-space: pre;
53
- content: #{Serializer.serialize_quoted_string(content, ascii_only: true)};
53
+ content: #{Serializer.serialize_quoted_string(content).gsub(/[^[:ascii:]][\h\t ]?/) do |match|
54
+ replacement = "\\#{match.ord.to_s(16)}"
55
+ replacement << " #{match[1]}" if match.length > 1
56
+ replacement
57
+ end};
54
58
  }
55
59
  CSS
56
60
  end
@@ -12,10 +12,10 @@ module Sass
12
12
  attr_reader :offset, :line, :column
13
13
 
14
14
  # @!visibility private
15
- def initialize(offset, line, column)
16
- @offset = offset
17
- @line = line
18
- @column = column
15
+ def initialize(source_location)
16
+ @offset = source_location.offset
17
+ @line = source_location.line
18
+ @column = source_location.column
19
19
  end
20
20
  end
21
21
  end
@@ -16,12 +16,12 @@ module Sass
16
16
  attr_reader :url, :context
17
17
 
18
18
  # @!visibility private
19
- def initialize(start, end_, text, url, context)
20
- @start = start
21
- @end = end_
22
- @text = text
23
- @url = url
24
- @context = context
19
+ def initialize(source_span)
20
+ @start = source_span.start.nil? ? nil : Logger::SourceLocation.new(source_span.start)
21
+ @end = source_span.end.nil? ? nil : Logger::SourceLocation.new(source_span.end)
22
+ @text = source_span.text
23
+ @url = source_span.url == '' ? nil : source_span.url
24
+ @context = source_span.context == '' ? nil : source_span.context
25
25
  end
26
26
  end
27
27
  end