sass-embedded 1.63.3-x86_64-linux-gnu → 1.63.4-x86_64-linux-gnu

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3aca352e8dc005bdd13446372af1851c78f799910d5845263d663c9bf4804f2a
4
- data.tar.gz: 713dc20b1115d65bf22ccbae7b37542a03821521bf990571d310aaeef67c7116
3
+ metadata.gz: 3e718c51368a838cb1134b919d34254f237f7d6fa157fecc9a00090da1ee09ff
4
+ data.tar.gz: 92559b950c8f2425fcf7b8a9f5784905ac21fa0e447bb7d364f7134744c3f5a0
5
5
  SHA512:
6
- metadata.gz: db52c3a8ce228c9fc525c4d05ae1f0128907e6d44cca69a3ed956c61101613a38f58c2df10e28c0c61d4ddd07f535c3dc8c4df931cacd9452cb68d6136a11a68
7
- data.tar.gz: 974f7e433f5085f5402582cdf5404de8fa914fe177160b2ba7128d8de7ce32cfa266002b757909219b6661cc85be49c4c68edc9c3cfc6e65ae0a365095780f92
6
+ metadata.gz: 590d1d60d6852ea28218cf21b60c219a2700055848f7de3d67da2ed366523d88608ed04ad44e52e296b8c3768f8e4a02f093fe2df4b60d6ae7bb0b9d6fb43384
7
+ data.tar.gz: a7ed1b875dddeee95f6c4f662197fb790c71bb059c4db81e0a50336823873f1b67a2454d9d4ec87d03e52e9399d2c94e85d362602283247701d74d563d77b966
Binary file
@@ -4,10 +4,10 @@ require 'open3'
4
4
 
5
5
  module Sass
6
6
  class Embedded
7
- # The {Compiler} class.
7
+ # The stdio based {Connection} between the {Dispatcher} and the compiler.
8
8
  #
9
- # It runs the `sass --embedded` process.
10
- class Compiler
9
+ # It runs the `sass --embedded` command.
10
+ class Connection
11
11
  def initialize
12
12
  @stdin, @stdout, @stderr, @wait_thread = begin
13
13
  Open3.popen3(*CLI::COMMAND, '--embedded', chdir: __dir__)
@@ -67,6 +67,6 @@ module Sass
67
67
  end
68
68
  end
69
69
 
70
- private_constant :Compiler
70
+ private_constant :Connection
71
71
  end
72
72
  end
@@ -4,12 +4,12 @@ module Sass
4
4
  class Embedded
5
5
  # The {Dispatcher} class.
6
6
  #
7
- # It dispatches messages between mutliple instances of {Host} and a single {Compiler}.
7
+ # It dispatches messages between mutliple instances of {Host} and a single {Connection} to the compiler.
8
8
  class Dispatcher
9
9
  UINT_MAX = 0xffffffff
10
10
 
11
11
  def initialize
12
- @compiler = Compiler.new
12
+ @connection = Connection.new
13
13
  @observers = {}
14
14
  @id = 1
15
15
  @mutex = Mutex.new
@@ -58,22 +58,26 @@ module Sass
58
58
  end
59
59
  end
60
60
 
61
+ def connect(host)
62
+ Channel.new(self, host)
63
+ end
64
+
61
65
  def close
62
- @compiler.close
66
+ @connection.close
63
67
  end
64
68
 
65
69
  def closed?
66
- @compiler.closed?
70
+ @connection.closed?
67
71
  end
68
72
 
69
73
  def send_proto(...)
70
- @compiler.write(...)
74
+ @connection.write(...)
71
75
  end
72
76
 
73
77
  private
74
78
 
75
79
  def receive_proto
76
- id, proto = @compiler.read
80
+ id, proto = @connection.read
77
81
  case id
78
82
  when 1...UINT_MAX
79
83
  @mutex.synchronize { @observers[id] }.receive_proto(proto)
@@ -91,6 +95,26 @@ module Sass
91
95
  raise Errno::EPROTO
92
96
  end
93
97
  end
98
+
99
+ # The {Channel} between {Dispatcher} and {Host}.
100
+ class Channel
101
+ attr_reader :id
102
+
103
+ def initialize(dispatcher, host)
104
+ @dispatcher = dispatcher
105
+ @id = @dispatcher.subscribe(host)
106
+ end
107
+
108
+ def disconnect
109
+ @dispatcher.unsubscribe(id)
110
+ end
111
+
112
+ def send_proto(...)
113
+ @dispatcher.send_proto(...)
114
+ end
115
+ end
116
+
117
+ private_constant :Channel
94
118
  end
95
119
 
96
120
  private_constant :Dispatcher
@@ -11,8 +11,8 @@ module Sass
11
11
  #
12
12
  # It communicates with {Dispatcher} and handles the host logic.
13
13
  class Host
14
- def initialize(channel)
15
- @channel = channel
14
+ def initialize(dispatcher)
15
+ @dispatcher = dispatcher
16
16
  end
17
17
 
18
18
  def compile_request(path:,
@@ -117,7 +117,7 @@ module Sass
117
117
  private
118
118
 
119
119
  def await0
120
- @connection = @channel.connect(self)
120
+ @channel = @dispatcher.connect(self)
121
121
  @queue = Queue.new
122
122
 
123
123
  yield
@@ -128,11 +128,11 @@ module Sass
128
128
 
129
129
  @result
130
130
  ensure
131
- @connection&.disconnect
131
+ @channel&.disconnect
132
132
  end
133
133
 
134
134
  def await
135
- @connection = @channel.connect(self)
135
+ @channel = @dispatcher.connect(self)
136
136
  @queue = Queue.new
137
137
 
138
138
  yield
@@ -148,21 +148,21 @@ module Sass
148
148
 
149
149
  @result
150
150
  ensure
151
- @connection&.disconnect
151
+ @channel&.disconnect
152
152
  end
153
153
 
154
154
  def id
155
- @connection.id
155
+ @channel.id
156
156
  end
157
157
 
158
158
  def send_message0(...)
159
159
  inbound_message = EmbeddedProtocol::InboundMessage.new(...)
160
- @connection.send_proto(0, inbound_message.to_proto)
160
+ @channel.send_proto(0, inbound_message.to_proto)
161
161
  end
162
162
 
163
163
  def send_message(...)
164
164
  inbound_message = EmbeddedProtocol::InboundMessage.new(...)
165
- @connection.send_proto(id, inbound_message.to_proto)
165
+ @channel.send_proto(id, inbound_message.to_proto)
166
166
  end
167
167
  end
168
168
 
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sass
4
+ class Embedded
5
+ # The {ResilientDispatcher} class.
6
+ #
7
+ # It recovers from failures and continues to function.
8
+ class ResilientDispatcher
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(host)
27
+ @dispatcher.connect(host)
28
+ rescue Errno::EBUSY
29
+ @mutex.synchronize do
30
+ @dispatcher.connect(host)
31
+ rescue Errno::EBUSY
32
+ @dispatcher = Dispatcher.new
33
+ @dispatcher.connect(host)
34
+ end
35
+ end
36
+ end
37
+
38
+ private_constant :ResilientDispatcher
39
+ end
40
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sass
4
4
  class Embedded
5
- VERSION = '1.63.3'
5
+ VERSION = '1.63.4'
6
6
  end
7
7
  end
data/lib/sass/embedded.rb CHANGED
@@ -4,11 +4,11 @@ require_relative '../../ext/sass/cli'
4
4
  require_relative '../../ext/sass/embedded_sass_pb'
5
5
  require_relative 'compile_error'
6
6
  require_relative 'compile_result'
7
- require_relative 'embedded/channel'
8
- require_relative 'embedded/compiler'
7
+ require_relative 'embedded/connection'
9
8
  require_relative 'embedded/dispatcher'
10
9
  require_relative 'embedded/host'
11
10
  require_relative 'embedded/protofier'
11
+ require_relative 'embedded/resilient_dispatcher'
12
12
  require_relative 'embedded/structifier'
13
13
  require_relative 'embedded/varint'
14
14
  require_relative 'embedded/version'
@@ -80,7 +80,7 @@ module Sass
80
80
  # rubocop:enable Layout/LineLength
81
81
 
82
82
  # The {Embedded} host for using dart-sass. Each instance creates its own
83
- # communication {Channel} with a dedicated compiler process.
83
+ # communication {Dispatcher} with a dedicated compiler process.
84
84
  #
85
85
  # @example
86
86
  # embedded = Sass::Embedded.new
@@ -89,7 +89,7 @@ module Sass
89
89
  # embedded.close
90
90
  class Embedded
91
91
  def initialize
92
- @channel = Channel.new
92
+ @dispatcher = ResilientDispatcher.new
93
93
  end
94
94
 
95
95
  # Compiles the Sass file at +path+ to CSS.
@@ -138,7 +138,7 @@ module Sass
138
138
  verbose: false)
139
139
  raise ArgumentError, 'path must be set' if path.nil?
140
140
 
141
- Host.new(@channel).compile_request(
141
+ Host.new(@dispatcher).compile_request(
142
142
  path: path,
143
143
  source: nil,
144
144
  importer: nil,
@@ -212,7 +212,7 @@ module Sass
212
212
  verbose: false)
213
213
  raise ArgumentError, 'source must be set' if source.nil?
214
214
 
215
- Host.new(@channel).compile_request(
215
+ Host.new(@dispatcher).compile_request(
216
216
  path: nil,
217
217
  source: source,
218
218
  importer: importer,
@@ -236,15 +236,15 @@ module Sass
236
236
  # @return [String] Information about the Sass implementation.
237
237
  # @see https://sass-lang.com/documentation/js-api/modules#info
238
238
  def info
239
- @info ||= Host.new(@channel).version_request
239
+ @info ||= Host.new(@dispatcher).version_request
240
240
  end
241
241
 
242
242
  def close
243
- @channel.close
243
+ @dispatcher.close
244
244
  end
245
245
 
246
246
  def closed?
247
- @channel.closed?
247
+ @dispatcher.closed?
248
248
  end
249
249
  end
250
250
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass-embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.63.3
4
+ version: 1.63.4
5
5
  platform: x86_64-linux-gnu
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-09 00:00:00.000000000 Z
11
+ date: 2023-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -47,8 +47,7 @@ files:
47
47
  - lib/sass/compile_result.rb
48
48
  - lib/sass/elf.rb
49
49
  - lib/sass/embedded.rb
50
- - lib/sass/embedded/channel.rb
51
- - lib/sass/embedded/compiler.rb
50
+ - lib/sass/embedded/connection.rb
52
51
  - lib/sass/embedded/dispatcher.rb
53
52
  - lib/sass/embedded/host.rb
54
53
  - lib/sass/embedded/host/function_registry.rb
@@ -56,6 +55,7 @@ files:
56
55
  - lib/sass/embedded/host/logger_registry.rb
57
56
  - lib/sass/embedded/host/value_protofier.rb
58
57
  - lib/sass/embedded/protofier.rb
58
+ - lib/sass/embedded/resilient_dispatcher.rb
59
59
  - lib/sass/embedded/structifier.rb
60
60
  - lib/sass/embedded/varint.rb
61
61
  - lib/sass/embedded/version.rb
@@ -79,8 +79,8 @@ homepage: https://github.com/ntkme/sass-embedded-host-ruby
79
79
  licenses:
80
80
  - MIT
81
81
  metadata:
82
- documentation_uri: https://rubydoc.info/gems/sass-embedded/1.63.3
83
- source_code_uri: https://github.com/ntkme/sass-embedded-host-ruby/tree/v1.63.3
82
+ documentation_uri: https://rubydoc.info/gems/sass-embedded/1.63.4
83
+ source_code_uri: https://github.com/ntkme/sass-embedded-host-ruby/tree/v1.63.4
84
84
  funding_uri: https://github.com/sponsors/ntkme
85
85
  post_install_message:
86
86
  rdoc_options: []
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  - !ruby/object:Gem::Version
98
98
  version: 3.3.22
99
99
  requirements: []
100
- rubygems_version: 3.4.13
100
+ rubygems_version: 3.4.14
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: Use dart-sass with Ruby!
@@ -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 Errno::EBUSY
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_proto(...)
52
- @dispatcher.send_proto(...)
53
- end
54
- end
55
-
56
- private_constant :Connection
57
- end
58
-
59
- private_constant :Channel
60
- end
61
- end