sass-embedded 1.6.2 → 1.83.1

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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -3
  3. data/exe/sass +13 -0
  4. data/ext/sass/Rakefile +352 -76
  5. data/ext/sass/embedded_sass_pb.rb +61 -0
  6. data/ext/sass/expand-archive.ps1 +1 -0
  7. data/ext/sass/package.json +1 -1
  8. data/lib/sass/calculation_value/calculation_operation.rb +49 -0
  9. data/lib/sass/calculation_value.rb +22 -0
  10. data/lib/sass/canonicalize_context.rb +25 -0
  11. data/lib/sass/compile_result.rb +3 -2
  12. data/lib/sass/compiler/channel.rb +68 -0
  13. data/lib/sass/compiler/connection.rb +89 -0
  14. data/lib/sass/compiler/dispatcher.rb +116 -0
  15. data/lib/sass/{embedded → compiler}/host/function_registry.rb +31 -34
  16. data/lib/sass/compiler/host/importer_registry.rb +141 -0
  17. data/lib/sass/compiler/host/logger_registry.rb +80 -0
  18. data/lib/sass/compiler/host/protofier.rb +360 -0
  19. data/lib/sass/compiler/host/structifier.rb +37 -0
  20. data/lib/sass/compiler/host.rb +226 -0
  21. data/lib/sass/{embedded → compiler}/varint.rb +9 -5
  22. data/lib/sass/compiler.rb +212 -0
  23. data/lib/sass/elf.rb +222 -0
  24. data/lib/sass/embedded/version.rb +2 -2
  25. data/lib/sass/embedded.rb +76 -204
  26. data/lib/sass/embedded_protocol.rb +10 -0
  27. data/lib/sass/exception.rb +74 -0
  28. data/lib/sass/fork_tracker.rb +51 -0
  29. data/lib/sass/logger/silent.rb +5 -3
  30. data/lib/sass/logger/source_location.rb +6 -5
  31. data/lib/sass/logger/source_span.rb +8 -7
  32. data/lib/sass/node_package_importer.rb +17 -0
  33. data/lib/sass/serializer.rb +30 -0
  34. data/lib/sass/value/argument_list.rb +13 -6
  35. data/lib/sass/value/boolean.rb +1 -1
  36. data/lib/sass/value/calculation.rb +90 -0
  37. data/lib/sass/value/color/channel.rb +79 -0
  38. data/lib/sass/value/color/conversions.rb +473 -0
  39. data/lib/sass/value/color/gamut_map_method/clip.rb +45 -0
  40. data/lib/sass/value/color/gamut_map_method/local_minde.rb +94 -0
  41. data/lib/sass/value/color/gamut_map_method.rb +45 -0
  42. data/lib/sass/value/color/interpolation_method.rb +51 -0
  43. data/lib/sass/value/color/space/a98_rgb.rb +57 -0
  44. data/lib/sass/value/color/space/display_p3.rb +57 -0
  45. data/lib/sass/value/color/space/hsl.rb +65 -0
  46. data/lib/sass/value/color/space/hwb.rb +70 -0
  47. data/lib/sass/value/color/space/lab.rb +77 -0
  48. data/lib/sass/value/color/space/lch.rb +53 -0
  49. data/lib/sass/value/color/space/lms.rb +129 -0
  50. data/lib/sass/value/color/space/oklab.rb +66 -0
  51. data/lib/sass/value/color/space/oklch.rb +54 -0
  52. data/lib/sass/value/color/space/prophoto_rgb.rb +59 -0
  53. data/lib/sass/value/color/space/rec2020.rb +69 -0
  54. data/lib/sass/value/color/space/rgb.rb +52 -0
  55. data/lib/sass/value/color/space/srgb.rb +140 -0
  56. data/lib/sass/value/color/space/srgb_linear.rb +72 -0
  57. data/lib/sass/value/color/space/utils.rb +86 -0
  58. data/lib/sass/value/color/space/xyz_d50.rb +100 -0
  59. data/lib/sass/value/color/space/xyz_d65.rb +57 -0
  60. data/lib/sass/value/color/space.rb +198 -0
  61. data/lib/sass/value/color.rb +538 -163
  62. data/lib/sass/value/function.rb +11 -16
  63. data/lib/sass/value/fuzzy_math.rb +24 -21
  64. data/lib/sass/value/list.rb +7 -7
  65. data/lib/sass/value/map.rb +6 -6
  66. data/lib/sass/value/mixin.rb +34 -0
  67. data/lib/sass/value/null.rb +1 -1
  68. data/lib/sass/value/number/unit.rb +7 -6
  69. data/lib/sass/value/number.rb +34 -26
  70. data/lib/sass/value/string.rb +9 -3
  71. data/lib/sass/value.rb +20 -16
  72. metadata +67 -103
  73. data/ext/sass/unzip.vbs +0 -13
  74. data/lib/sass/compile_error.rb +0 -28
  75. data/lib/sass/embedded/async.rb +0 -65
  76. data/lib/sass/embedded/channel.rb +0 -61
  77. data/lib/sass/embedded/compiler.rb +0 -60
  78. data/lib/sass/embedded/dispatcher.rb +0 -90
  79. data/lib/sass/embedded/host/importer_registry.rb +0 -107
  80. data/lib/sass/embedded/host/logger_registry.rb +0 -50
  81. data/lib/sass/embedded/host/value_protofier.rb +0 -241
  82. data/lib/sass/embedded/host.rb +0 -139
  83. data/lib/sass/embedded/protofier.rb +0 -78
  84. data/lib/sass/embedded/structifier.rb +0 -36
  85. data/lib/sass/script_error.rb +0 -6
metadata CHANGED
@@ -1,168 +1,133 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass-embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.83.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
- autorequire:
9
- bindir: bin
8
+ bindir: exe
10
9
  cert_chain: []
11
- date: 2022-06-09 00:00:00.000000000 Z
10
+ date: 2025-01-04 00:00:00.000000000 Z
12
11
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: google-protobuf
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '3.19'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '3.19'
27
12
  - !ruby/object:Gem::Dependency
28
13
  name: rake
29
14
  requirement: !ruby/object:Gem::Requirement
30
15
  requirements:
31
16
  - - ">="
32
17
  - !ruby/object:Gem::Version
33
- version: 10.0.0
18
+ version: '13'
34
19
  type: :runtime
35
20
  prerelease: false
36
21
  version_requirements: !ruby/object:Gem::Requirement
37
22
  requirements:
38
23
  - - ">="
39
24
  - !ruby/object:Gem::Version
40
- version: 10.0.0
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 3.11.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 3.11.0
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 1.30.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 1.30.0
25
+ version: '13'
69
26
  - !ruby/object:Gem::Dependency
70
- name: rubocop-performance
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 1.14.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 1.14.0
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-rake
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.6.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.6.0
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-rspec
27
+ name: google-protobuf
99
28
  requirement: !ruby/object:Gem::Requirement
100
29
  requirements:
101
30
  - - "~>"
102
31
  - !ruby/object:Gem::Version
103
- version: 2.11.1
104
- type: :development
32
+ version: '4.29'
33
+ type: :runtime
105
34
  prerelease: false
106
35
  version_requirements: !ruby/object:Gem::Requirement
107
36
  requirements:
108
37
  - - "~>"
109
38
  - !ruby/object:Gem::Version
110
- version: 2.11.1
39
+ version: '4.29'
111
40
  description: A Ruby library that will communicate with Embedded Dart Sass using the
112
41
  Embedded Sass protocol.
113
42
  email:
114
43
  - i@ntk.me
115
- executables: []
44
+ executables:
45
+ - sass
116
46
  extensions:
117
47
  - ext/sass/Rakefile
118
48
  extra_rdoc_files: []
119
49
  files:
120
50
  - LICENSE
121
51
  - README.md
52
+ - exe/sass
122
53
  - ext/sass/Rakefile
54
+ - ext/sass/embedded_sass_pb.rb
55
+ - ext/sass/expand-archive.ps1
123
56
  - ext/sass/package.json
124
- - ext/sass/unzip.vbs
125
57
  - lib/sass-embedded.rb
126
- - lib/sass/compile_error.rb
58
+ - lib/sass/calculation_value.rb
59
+ - lib/sass/calculation_value/calculation_operation.rb
60
+ - lib/sass/canonicalize_context.rb
127
61
  - lib/sass/compile_result.rb
62
+ - lib/sass/compiler.rb
63
+ - lib/sass/compiler/channel.rb
64
+ - lib/sass/compiler/connection.rb
65
+ - lib/sass/compiler/dispatcher.rb
66
+ - lib/sass/compiler/host.rb
67
+ - lib/sass/compiler/host/function_registry.rb
68
+ - lib/sass/compiler/host/importer_registry.rb
69
+ - lib/sass/compiler/host/logger_registry.rb
70
+ - lib/sass/compiler/host/protofier.rb
71
+ - lib/sass/compiler/host/structifier.rb
72
+ - lib/sass/compiler/varint.rb
73
+ - lib/sass/elf.rb
128
74
  - lib/sass/embedded.rb
129
- - lib/sass/embedded/async.rb
130
- - lib/sass/embedded/channel.rb
131
- - lib/sass/embedded/compiler.rb
132
- - lib/sass/embedded/dispatcher.rb
133
- - lib/sass/embedded/host.rb
134
- - lib/sass/embedded/host/function_registry.rb
135
- - lib/sass/embedded/host/importer_registry.rb
136
- - lib/sass/embedded/host/logger_registry.rb
137
- - lib/sass/embedded/host/value_protofier.rb
138
- - lib/sass/embedded/protofier.rb
139
- - lib/sass/embedded/structifier.rb
140
- - lib/sass/embedded/varint.rb
141
75
  - lib/sass/embedded/version.rb
76
+ - lib/sass/embedded_protocol.rb
77
+ - lib/sass/exception.rb
78
+ - lib/sass/fork_tracker.rb
142
79
  - lib/sass/logger/silent.rb
143
80
  - lib/sass/logger/source_location.rb
144
81
  - lib/sass/logger/source_span.rb
145
- - lib/sass/script_error.rb
82
+ - lib/sass/node_package_importer.rb
83
+ - lib/sass/serializer.rb
146
84
  - lib/sass/value.rb
147
85
  - lib/sass/value/argument_list.rb
148
86
  - lib/sass/value/boolean.rb
87
+ - lib/sass/value/calculation.rb
149
88
  - lib/sass/value/color.rb
89
+ - lib/sass/value/color/channel.rb
90
+ - lib/sass/value/color/conversions.rb
91
+ - lib/sass/value/color/gamut_map_method.rb
92
+ - lib/sass/value/color/gamut_map_method/clip.rb
93
+ - lib/sass/value/color/gamut_map_method/local_minde.rb
94
+ - lib/sass/value/color/interpolation_method.rb
95
+ - lib/sass/value/color/space.rb
96
+ - lib/sass/value/color/space/a98_rgb.rb
97
+ - lib/sass/value/color/space/display_p3.rb
98
+ - lib/sass/value/color/space/hsl.rb
99
+ - lib/sass/value/color/space/hwb.rb
100
+ - lib/sass/value/color/space/lab.rb
101
+ - lib/sass/value/color/space/lch.rb
102
+ - lib/sass/value/color/space/lms.rb
103
+ - lib/sass/value/color/space/oklab.rb
104
+ - lib/sass/value/color/space/oklch.rb
105
+ - lib/sass/value/color/space/prophoto_rgb.rb
106
+ - lib/sass/value/color/space/rec2020.rb
107
+ - lib/sass/value/color/space/rgb.rb
108
+ - lib/sass/value/color/space/srgb.rb
109
+ - lib/sass/value/color/space/srgb_linear.rb
110
+ - lib/sass/value/color/space/utils.rb
111
+ - lib/sass/value/color/space/xyz_d50.rb
112
+ - lib/sass/value/color/space/xyz_d65.rb
150
113
  - lib/sass/value/function.rb
151
114
  - lib/sass/value/fuzzy_math.rb
152
115
  - lib/sass/value/list.rb
153
116
  - lib/sass/value/map.rb
117
+ - lib/sass/value/mixin.rb
154
118
  - lib/sass/value/null.rb
155
119
  - lib/sass/value/number.rb
156
120
  - lib/sass/value/number/unit.rb
157
121
  - lib/sass/value/string.rb
158
- homepage: https://github.com/ntkme/sass-embedded-host-ruby
122
+ homepage: https://github.com/sass-contrib/sass-embedded-host-ruby
159
123
  licenses:
160
124
  - MIT
161
125
  metadata:
162
- documentation_uri: https://rubydoc.info/gems/sass-embedded/1.6.2
163
- source_code_uri: https://github.com/ntkme/sass-embedded-host-ruby/tree/v1.6.2
126
+ bug_tracker_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/issues
127
+ documentation_uri: https://rubydoc.info/gems/sass-embedded/1.83.1
128
+ source_code_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/tree/v1.83.1
164
129
  funding_uri: https://github.com/sponsors/ntkme
165
- post_install_message:
130
+ rubygems_mfa_required: 'true'
166
131
  rdoc_options: []
167
132
  require_paths:
168
133
  - lib
@@ -170,15 +135,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
135
  requirements:
171
136
  - - ">="
172
137
  - !ruby/object:Gem::Version
173
- version: 2.6.0
138
+ version: '3.1'
174
139
  required_rubygems_version: !ruby/object:Gem::Requirement
175
140
  requirements:
176
141
  - - ">="
177
142
  - !ruby/object:Gem::Version
178
143
  version: '0'
179
144
  requirements: []
180
- rubygems_version: 3.3.7
181
- signing_key:
145
+ rubygems_version: 3.6.2
182
146
  specification_version: 4
183
147
  summary: Use dart-sass with Ruby!
184
148
  test_files: []
data/ext/sass/unzip.vbs DELETED
@@ -1,13 +0,0 @@
1
- path = WScript.Arguments.item(0)
2
- destinationPath = WScript.Arguments.item(1)
3
-
4
- Set fileSystemObject = WScript.CreateObject("Scripting.FileSystemObject")
5
- If NOT fileSystemObject.FolderExists(destinationPath) Then
6
- fileSystemObject.CreateFolder(destinationPath)
7
- End If
8
-
9
- Set application = WScript.CreateObject("Shell.Application")
10
- Set pathNameSpace = application.NameSpace(fileSystemObject.GetAbsolutePathName(path))
11
- Set destinationPathNameSpace = application.NameSpace(fileSystemObject.GetAbsolutePathName(destinationPath))
12
-
13
- destinationPathNameSpace.CopyHere pathNameSpace.items, 4 + 16
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- # An exception thrown because a Sass compilation failed.
5
- class CompileError < StandardError
6
- # @return [String, nil]
7
- attr_accessor :sass_stack
8
-
9
- # @return [Logger::SourceSpan, nil]
10
- attr_accessor :span
11
-
12
- def initialize(message, full_message, sass_stack, span)
13
- super(message)
14
- @full_message = full_message == '' ? nil : full_message.dup
15
- @sass_stack = sass_stack == '' ? nil : sass_stack
16
- @span = span
17
- end
18
-
19
- # @return [String]
20
- def full_message(*args, **kwargs)
21
- if @full_message.nil?
22
- super(*args, **kwargs)
23
- else
24
- @full_message
25
- end
26
- end
27
- end
28
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- class Embedded
5
- # The {Async} class.
6
- #
7
- # It awaits until the promise is resolved or rejected.
8
- class Async
9
- module State
10
- PENDING = 0
11
- FULFILLED = 1
12
- REJECTED = 2
13
- end
14
-
15
- private_constant :State
16
-
17
- def initialize
18
- @error = nil
19
- @result = nil
20
- @state = State::PENDING
21
-
22
- @condition_variable = ConditionVariable.new
23
- @mutex = Mutex.new
24
-
25
- begin
26
- yield if block_given?
27
- rescue StandardError => e
28
- reject e
29
- end
30
- end
31
-
32
- def resolve(value)
33
- @mutex.synchronize do
34
- return unless @state == State::PENDING
35
-
36
- @state = State::FULFILLED
37
- @result = value
38
- @condition_variable.broadcast
39
- end
40
- end
41
-
42
- def reject(reason)
43
- @mutex.synchronize do
44
- return unless @state == State::PENDING
45
-
46
- @state = State::REJECTED
47
- @error = reason
48
- @condition_variable.broadcast
49
- end
50
- end
51
-
52
- def await
53
- @mutex.synchronize do
54
- @condition_variable.wait(@mutex) if @state == State::PENDING
55
-
56
- raise @error if @state == State::REJECTED
57
-
58
- @result
59
- end
60
- end
61
- end
62
-
63
- private_constant :Async
64
- end
65
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- class Embedded
5
- # The {Channel} class.
6
- #
7
- # It establishes connection between {Host} and {Dispatcher}.
8
- class Channel
9
- def initialize
10
- @dispatcher = Dispatcher.new
11
- @mutex = Mutex.new
12
- end
13
-
14
- def close
15
- @mutex.synchronize do
16
- @dispatcher.close
17
- end
18
- end
19
-
20
- def closed?
21
- @mutex.synchronize do
22
- @dispatcher.closed?
23
- end
24
- end
25
-
26
- def connect(observer)
27
- @mutex.synchronize do
28
- begin
29
- id = @dispatcher.subscribe(observer)
30
- rescue EOFError
31
- @dispatcher = Dispatcher.new
32
- id = @dispatcher.subscribe(observer)
33
- end
34
- Connection.new(@dispatcher, id)
35
- end
36
- end
37
-
38
- # The {Connection} between {Host} to {Dispatcher}.
39
- class Connection
40
- attr_reader :id
41
-
42
- def initialize(dispatcher, id)
43
- @dispatcher = dispatcher
44
- @id = id
45
- end
46
-
47
- def disconnect
48
- @dispatcher.unsubscribe(id)
49
- end
50
-
51
- def send_message(message)
52
- @dispatcher.send_message(message)
53
- end
54
- end
55
-
56
- private_constant :Connection
57
- end
58
-
59
- private_constant :Channel
60
- end
61
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
-
5
- module Sass
6
- class Embedded
7
- # The {Compiler} class.
8
- #
9
- # It runs the `dart-sass-embedded` process.
10
- class Compiler
11
- def initialize
12
- @stdin, @stdout, @stderr, @wait_thread = Open3.popen3(PATH, chdir: __dir__)
13
- @stdin.binmode
14
- @stdout.binmode
15
- @stdin_mutex = Mutex.new
16
- @stdout_mutex = Mutex.new
17
-
18
- Thread.new do
19
- loop do
20
- warn(@stderr.readline, uplevel: 1)
21
- rescue IOError, Errno::EBADF
22
- break
23
- end
24
- end
25
- end
26
-
27
- def close
28
- @stdin_mutex.synchronize do
29
- @stdin.close unless @stdin.closed?
30
- @stdout.close unless @stdout.closed?
31
- @stderr.close unless @stderr.closed?
32
- end
33
-
34
- @wait_thread.value
35
- end
36
-
37
- def closed?
38
- @stdin_mutex.synchronize do
39
- @stdin.closed?
40
- end
41
- end
42
-
43
- def write(payload)
44
- @stdin_mutex.synchronize do
45
- Varint.write(@stdin, payload.length)
46
- @stdin.write(payload)
47
- end
48
- end
49
-
50
- def read
51
- @stdout_mutex.synchronize do
52
- length = Varint.read(@stdout)
53
- @stdout.read(length)
54
- end
55
- end
56
- end
57
-
58
- private_constant :Compiler
59
- end
60
- end
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- class Embedded
5
- # The {Dispatcher} class.
6
- #
7
- # It dispatches messages between mutliple instances of {Host} and a single {Compiler}.
8
- class Dispatcher
9
- PROTOCOL_ERROR_ID = 0xffffffff
10
-
11
- def initialize
12
- @compiler = Compiler.new
13
- @observers = {}
14
- @id = 0
15
- @mutex = Mutex.new
16
-
17
- Thread.new do
18
- loop do
19
- receive_message EmbeddedProtocol::OutboundMessage.decode @compiler.read
20
- rescue IOError, Errno::EBADF => e
21
- @mutex.synchronize do
22
- @id = PROTOCOL_ERROR_ID
23
- @observers.values
24
- end.each do |observer|
25
- observer.error e
26
- end
27
- break
28
- end
29
- end
30
- end
31
-
32
- def subscribe(observer)
33
- @mutex.synchronize do
34
- raise EOFError if @id == PROTOCOL_ERROR_ID
35
-
36
- id = @id
37
- @id = id.next
38
- @observers[id] = observer
39
- id
40
- end
41
- end
42
-
43
- def unsubscribe(id)
44
- @mutex.synchronize do
45
- @observers.delete(id)
46
-
47
- close if @id == PROTOCOL_ERROR_ID && @observers.empty?
48
- end
49
- end
50
-
51
- def close
52
- @compiler.close
53
- end
54
-
55
- def closed?
56
- @compiler.closed?
57
- end
58
-
59
- def send_message(inbound_message)
60
- @compiler.write(inbound_message.to_proto)
61
- end
62
-
63
- private
64
-
65
- def receive_message(outbound_message)
66
- oneof = outbound_message.message
67
- message = outbound_message.public_send(oneof)
68
- case oneof
69
- when :error
70
- @mutex.synchronize do
71
- @id = PROTOCOL_ERROR_ID
72
- message.id == PROTOCOL_ERROR_ID ? @observers.values : [@observers[message.id]]
73
- end.each do |observer|
74
- observer.public_send(oneof, message)
75
- end
76
- when :compile_response, :version_response
77
- @mutex.synchronize { @observers[message.id] }.public_send(oneof, message)
78
- when :log_event, :canonicalize_request, :import_request, :file_import_request, :function_call_request
79
- Thread.new(@mutex.synchronize { @observers[message.compilation_id] }) do |observer|
80
- observer.public_send(oneof, message)
81
- end
82
- else
83
- raise ArgumentError, "Unknown OutboundMessage.message #{message}"
84
- end
85
- end
86
- end
87
-
88
- private_constant :Dispatcher
89
- end
90
- end
@@ -1,107 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- class Embedded
5
- class Host
6
- # The {ImporterRegistry} class.
7
- #
8
- # It stores importers and handles import requests.
9
- class ImporterRegistry
10
- attr_reader :importers
11
-
12
- def initialize(importers, load_paths, alert_color:)
13
- @id = 0
14
- @importers_by_id = {}
15
- @importers = importers
16
- .map { |importer| register(importer) }
17
- .concat(
18
- load_paths.map do |load_path|
19
- EmbeddedProtocol::InboundMessage::CompileRequest::Importer.new(
20
- path: File.absolute_path(load_path)
21
- )
22
- end
23
- )
24
-
25
- @highlight = alert_color
26
- end
27
-
28
- def register(importer)
29
- importer = Structifier.to_struct(importer)
30
-
31
- is_importer = importer.respond_to?(:canonicalize) && importer.respond_to?(:load)
32
- is_file_importer = importer.respond_to?(:find_file_url)
33
-
34
- raise ArgumentError, 'importer must be an Importer or a FileImporter' if is_importer == is_file_importer
35
-
36
- proto = if is_importer
37
- EmbeddedProtocol::InboundMessage::CompileRequest::Importer.new(
38
- importer_id: @id
39
- )
40
- else
41
- EmbeddedProtocol::InboundMessage::CompileRequest::Importer.new(
42
- file_importer_id: @id
43
- )
44
- end
45
- @importers_by_id[@id] = importer
46
- @id = @id.next
47
- proto
48
- end
49
-
50
- def canonicalize(canonicalize_request)
51
- importer = @importers_by_id[canonicalize_request.importer_id]
52
- url = importer.canonicalize(canonicalize_request.url, from_import: canonicalize_request.from_import)&.to_s
53
-
54
- EmbeddedProtocol::InboundMessage::CanonicalizeResponse.new(
55
- id: canonicalize_request.id,
56
- url: url
57
- )
58
- rescue StandardError => e
59
- EmbeddedProtocol::InboundMessage::CanonicalizeResponse.new(
60
- id: canonicalize_request.id,
61
- error: e.full_message(highlight: @highlight, order: :top)
62
- )
63
- end
64
-
65
- def import(import_request)
66
- importer = @importers_by_id[import_request.importer_id]
67
- importer_result = Structifier.to_struct importer.load(import_request.url)
68
-
69
- EmbeddedProtocol::InboundMessage::ImportResponse.new(
70
- id: import_request.id,
71
- success: EmbeddedProtocol::InboundMessage::ImportResponse::ImportSuccess.new(
72
- contents: importer_result.contents,
73
- syntax: Protofier.to_proto_syntax(importer_result.syntax),
74
- source_map_url: (importer_result.source_map_url&.to_s if importer_result.respond_to?(:source_map_url))
75
- )
76
- )
77
- rescue StandardError => e
78
- EmbeddedProtocol::InboundMessage::ImportResponse.new(
79
- id: import_request.id,
80
- error: e.full_message(highlight: @highlight, order: :top)
81
- )
82
- end
83
-
84
- def file_import(file_import_request)
85
- importer = @importers_by_id[file_import_request.importer_id]
86
- file_url = importer.find_file_url(file_import_request.url, from_import: file_import_request.from_import)&.to_s
87
-
88
- if !file_url.nil? && !file_url.start_with?('file:')
89
- raise "file_url must be a file: URL, was #{file_url.inspect}"
90
- end
91
-
92
- EmbeddedProtocol::InboundMessage::FileImportResponse.new(
93
- id: file_import_request.id,
94
- file_url: file_url
95
- )
96
- rescue StandardError => e
97
- EmbeddedProtocol::InboundMessage::FileImportResponse.new(
98
- id: file_import_request.id,
99
- error: e.full_message(highlight: @highlight, order: :top)
100
- )
101
- end
102
- end
103
-
104
- private_constant :ImporterRegistry
105
- end
106
- end
107
- end