sass-embedded 1.69.6 → 1.70.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.
@@ -1,390 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- class Compiler
5
- class Host
6
- # The {ValueProtofier} class.
7
- #
8
- # It converts Pure Ruby types and Protobuf Ruby types.
9
- class ValueProtofier
10
- def initialize(function_registry)
11
- @function_registry = function_registry
12
- end
13
-
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,
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.contents.map { |element| to_proto(element) },
61
- keywords: obj.keywords.transform_values { |value| 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.contents.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)
125
- case oneof
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.transform_values! do |value|
160
- 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
180
- )
181
- when :compiler_function
182
- Sass::Value::Function.new(nil, 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
206
- else
207
- raise Sass::ScriptError, "Unknown Value.value #{obj}"
208
- end
209
- end
210
-
211
- # The {Number} Protofier.
212
- module Number
213
- module_function
214
-
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
231
- end
232
-
233
- private_constant :Number
234
-
235
- # The {Calculation} Protofier.
236
- module Calculation
237
- module_function
238
-
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
253
- end
254
-
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
307
- end
308
- end
309
-
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
344
- end
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
385
- end
386
-
387
- private_constant :ValueProtofier
388
- end
389
- end
390
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- class Compiler
5
- # The {ResilientDispatcher} class.
6
- #
7
- # It recovers from failures and continues to function.
8
- class ResilientDispatcher
9
- def initialize(dispatcher_class)
10
- @dispatcher_class = dispatcher_class
11
- @dispatcher = @dispatcher_class.new
12
- @mutex = Mutex.new
13
- end
14
-
15
- def close(...)
16
- @mutex.synchronize do
17
- @dispatcher.close(...)
18
- end
19
- end
20
-
21
- def closed?(...)
22
- @mutex.synchronize do
23
- @dispatcher.closed?(...)
24
- end
25
- end
26
-
27
- def connect(...)
28
- @dispatcher.connect(...)
29
- rescue Errno::EBUSY
30
- @mutex.synchronize do
31
- @dispatcher.connect(...)
32
- rescue Errno::EBUSY
33
- @dispatcher = @dispatcher_class.new
34
- @dispatcher.connect(...)
35
- end
36
- end
37
- end
38
-
39
- private_constant :ResilientDispatcher
40
- end
41
- end