sass-embedded 1.77.5 → 1.78.0

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: 631464c3270dfeddd024e782fed7e3354594b03afa25ca5b9efc0509ccd70af4
4
- data.tar.gz: bd6224dff05c20e442feee188d1ae9f9b0066db7c1ad0725c253ccb25c3b6aa0
3
+ metadata.gz: 6140546f1464fb936af0e5d76355e24844d12cb71f29142ca64e1aa5ec1cce56
4
+ data.tar.gz: 2956e3e5ec0b5860482e4f084159d94a4fc7bb06f67f6ae0820bc04971efd824
5
5
  SHA512:
6
- metadata.gz: 6292f26854e7d873b7168d6e172fab1044eb7ca75754b2dc6b3ca158462abdaf49cc351a2cf58cb6da71bb81a1854b1da06267d76b2a779c67c9bd513a8736a1
7
- data.tar.gz: '0958f5d6cd79525a5ba9d591e540bd2eb23e31a2acaa59a74f0a896c0596ad6709e6332d7f7d328bfa95835b6f3262797f321958c88ef83d17d8f6de78284713'
6
+ metadata.gz: e366ed09f3a7dd7235bb3375b2aa2e0e239bbd66f770ae0432dcaf9e279139957a3aaaf3f76415977d123b37eaace4153eb22bd6709fe8e47be8b4bccf3ebff5
7
+ data.tar.gz: e6ef849e9d80e3d3f4810c76d4d9c46de4d633d3cf3f1b6e906bae870dd3cae5dc7f21384c24a718dd063e088da69a2ca8198bfda7c03b2f595021ee850248d0
data/ext/sass/Rakefile CHANGED
@@ -138,7 +138,7 @@ module FileUtils
138
138
  def fetch(source_uri, dest_path = nil)
139
139
  require 'rubygems/remote_fetcher'
140
140
 
141
- source_uri = "/#{source_uri}" if File.absolute_path?(source_uri) && !source_uri.start_with?('/')
141
+ source_uri = "/#{source_uri}" if !source_uri.start_with?('/') && File.absolute_path?(source_uri)
142
142
 
143
143
  source_uri = begin
144
144
  Gem::Uri.parse!(source_uri)
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "dependencies": {
3
- "sass": "1.77.5"
3
+ "sass": "1.78.0"
4
4
  }
5
5
  }
@@ -24,21 +24,24 @@ module Sass
24
24
 
25
25
  @stdin.binmode
26
26
 
27
- @wait_thread.name = "sass-embedded-process-waiter-#{@wait_thread.pid}"
28
- end
27
+ # # https://dart.dev/tools/dart-devtools
28
+ # if 'dart' == File.basename(CLI::COMMAND.first, '.exe') && CLI::COMMAND.include?('--observe')
29
+ # Kernel.warn(@stdout.readline, uplevel: 0)
30
+ # Kernel.warn(@stdout.readline, uplevel: 0)
31
+ # end
29
32
 
30
- def listen(dispatcher)
31
- Thread.new do
32
- Thread.current.name = "sass-embedded-process-stdout-poller-#{@wait_thread.pid}"
33
+ @stdout.binmode
33
34
 
34
- # # https://dart.dev/tools/dart-devtools
35
- # if 'dart' == File.basename(CLI::COMMAND.first, '.exe') && CLI::COMMAND.include?('--observe')
36
- # Kernel.warn(@stdout.readline, uplevel: 0)
37
- # Kernel.warn(@stdout.readline, uplevel: 0)
38
- # end
35
+ @wait_thread.name = "sass-embedded-process-waiter-#{id}"
36
+ end
39
37
 
40
- @stdout.binmode
38
+ def id
39
+ @wait_thread.pid
40
+ end
41
41
 
42
+ def listen(dispatcher)
43
+ Thread.new do
44
+ Thread.current.name = "sass-embedded-process-stdout-poller-#{id}"
42
45
  loop do
43
46
  length = Varint.read(@stdout)
44
47
  id = Varint.read(@stdout)
@@ -53,7 +56,7 @@ module Sass
53
56
  end
54
57
 
55
58
  Thread.new do
56
- Thread.current.name = "sass-embedded-process-stderr-poller-#{@wait_thread.pid}"
59
+ Thread.current.name = "sass-embedded-process-stderr-poller-#{id}"
57
60
  loop do
58
61
  Kernel.warn(@stderr.readline, uplevel: 0)
59
62
  end
data/lib/sass/compiler.rb CHANGED
@@ -62,7 +62,7 @@ module Sass
62
62
  # compilation to avoid deluging users in console noise. If you set verbose to +true+, it will instead print every
63
63
  # deprecation warning it encounters.
64
64
  # @return [CompileResult]
65
- # @raise [ArgumentError, CompileError]
65
+ # @raise [ArgumentError, CompileError, IOError]
66
66
  # @see https://sass-lang.com/documentation/js-api/functions/compile/
67
67
  def compile(path,
68
68
  load_paths: [],
@@ -142,7 +142,7 @@ module Sass
142
142
  # compilation to avoid deluging users in console noise. If you set verbose to +true+, it will instead print every
143
143
  # deprecation warning it encounters.
144
144
  # @return [CompileResult]
145
- # @raise [ArgumentError, CompileError]
145
+ # @raise [ArgumentError, CompileError, IOError]
146
146
  # @see https://sass-lang.com/documentation/js-api/functions/compilestring/
147
147
  def compile_string(source,
148
148
  importer: nil,
data/lib/sass/elf.rb CHANGED
@@ -7,26 +7,76 @@ module Sass
7
7
  # @see https://github.com/torvalds/linux/blob/HEAD/include/uapi/linux/elf.h
8
8
  # @see https://github.com/torvalds/linux/blob/HEAD/kernel/kexec_elf.c
9
9
  class ELF
10
- # rubocop:disable Naming/ConstantName
11
-
12
- # 32-bit ELF base types.
13
- Elf32_Addr = :__u32
14
- Elf32_Half = :__u16
15
- Elf32_Off = :__u32
16
- Elf32_Sword = :__s32
17
- Elf32_Word = :__u32
18
-
19
- # 64-bit ELF base types.
20
- Elf64_Addr = :__u64
21
- Elf64_Half = :__u16
22
- Elf64_SHalf = :__s16
23
- Elf64_Off = :__u64
24
- Elf64_Sword = :__s32
25
- Elf64_Word = :__u32
26
- Elf64_Xword = :__u64
27
- Elf64_Sxword = :__s64
10
+ module PackInfo
11
+ PACK_MAP = {
12
+ Elf32_Ehdr: 'S<2L<5S<6',
13
+ Elf64_Ehdr: 'S<2L<Q<3L<S<6',
14
+ Elf32_Phdr: 'L<8',
15
+ Elf64_Phdr: 'L<2Q<6'
16
+ }.freeze
17
+
18
+ SIZE_MAP = {
19
+ Elf32_Ehdr: 36,
20
+ Elf64_Ehdr: 48,
21
+ Elf32_Phdr: 32,
22
+ Elf64_Phdr: 56
23
+ }.freeze
24
+
25
+ STRUCT_MAP = {
26
+ Elf32_Ehdr: %i[
27
+ e_type
28
+ e_machine
29
+ e_version
30
+ e_entry
31
+ e_phoff
32
+ e_shoff
33
+ e_flags
34
+ e_ehsize
35
+ e_phentsize
36
+ e_phnum
37
+ e_shentsize
38
+ e_shnum
39
+ e_shstrndx
40
+ ].freeze,
41
+ Elf64_Ehdr: %i[
42
+ e_type
43
+ e_machine
44
+ e_version
45
+ e_entry
46
+ e_phoff
47
+ e_shoff
48
+ e_flags
49
+ e_ehsize
50
+ e_phentsize
51
+ e_phnum
52
+ e_shentsize
53
+ e_shnum
54
+ e_shstrndx
55
+ ].freeze,
56
+ Elf32_Phdr: %i[
57
+ p_type
58
+ p_offset
59
+ p_vaddr
60
+ p_paddr
61
+ p_filesz
62
+ p_memsz
63
+ p_flags
64
+ p_align
65
+ ].freeze,
66
+ Elf64_Phdr: %i[
67
+ p_type
68
+ p_flags
69
+ p_offset
70
+ p_vaddr
71
+ p_paddr
72
+ p_filesz
73
+ p_memsz
74
+ p_align
75
+ ].freeze
76
+ }.freeze
77
+ end
28
78
 
29
- # rubocop:enable Naming/ConstantName
79
+ private_constant :PackInfo
30
80
 
31
81
  # These constants are for the segment types stored in the image headers
32
82
  PT_NULL = 0
@@ -41,10 +91,6 @@ module Sass
41
91
  PT_HIOS = 0x6fffffff
42
92
  PT_LOPROC = 0x70000000
43
93
  PT_HIPROC = 0x7fffffff
44
- PT_GNU_EH_FRAME = (PT_LOOS + 0x474e550)
45
- PT_GNU_STACK = (PT_LOOS + 0x474e551)
46
- PT_GNU_RELRO = (PT_LOOS + 0x474e552)
47
- PT_GNU_PROPERTY = (PT_LOOS + 0x474e553)
48
94
 
49
95
  # These constants define the different elf file types
50
96
  ET_NONE = 0
@@ -57,66 +103,6 @@ module Sass
57
103
 
58
104
  EI_NIDENT = 16
59
105
 
60
- # rubocop:disable Naming/ConstantName
61
-
62
- Elf32_Ehdr = [
63
- [:unsigned_char, :e_ident, EI_NIDENT],
64
- [Elf32_Half, :e_type],
65
- [Elf32_Half, :e_machine],
66
- [Elf32_Word, :e_version],
67
- [Elf32_Addr, :e_entry],
68
- [Elf32_Off, :e_phoff],
69
- [Elf32_Off, :e_shoff],
70
- [Elf32_Word, :e_flags],
71
- [Elf32_Half, :e_ehsize],
72
- [Elf32_Half, :e_phentsize],
73
- [Elf32_Half, :e_phnum],
74
- [Elf32_Half, :e_shentsize],
75
- [Elf32_Half, :e_shnum],
76
- [Elf32_Half, :e_shstrndx]
77
- ].freeze
78
-
79
- Elf64_Ehdr = [
80
- [:unsigned_char, :e_ident, EI_NIDENT],
81
- [Elf64_Half, :e_type],
82
- [Elf64_Half, :e_machine],
83
- [Elf64_Word, :e_version],
84
- [Elf64_Addr, :e_entry],
85
- [Elf64_Off, :e_phoff],
86
- [Elf64_Off, :e_shoff],
87
- [Elf64_Word, :e_flags],
88
- [Elf64_Half, :e_ehsize],
89
- [Elf64_Half, :e_phentsize],
90
- [Elf64_Half, :e_phnum],
91
- [Elf64_Half, :e_shentsize],
92
- [Elf64_Half, :e_shnum],
93
- [Elf64_Half, :e_shstrndx]
94
- ].freeze
95
-
96
- Elf32_Phdr = [
97
- [Elf32_Word, :p_type],
98
- [Elf32_Off, :p_offset],
99
- [Elf32_Addr, :p_vaddr],
100
- [Elf32_Addr, :p_paddr],
101
- [Elf32_Word, :p_filesz],
102
- [Elf32_Word, :p_memsz],
103
- [Elf32_Word, :p_flags],
104
- [Elf32_Word, :p_align]
105
- ].freeze
106
-
107
- Elf64_Phdr = [
108
- [Elf64_Word, :p_type],
109
- [Elf64_Word, :p_flags],
110
- [Elf64_Off, :p_offset],
111
- [Elf64_Addr, :p_vaddr],
112
- [Elf64_Addr, :p_paddr],
113
- [Elf64_Xword, :p_filesz],
114
- [Elf64_Xword, :p_memsz],
115
- [Elf64_Xword, :p_align]
116
- ].freeze
117
-
118
- # rubocop:enable Naming/ConstantName
119
-
120
106
  # e_ident[] indexes
121
107
  EI_MAG0 = 0
122
108
  EI_MAG1 = 1
@@ -130,9 +116,9 @@ module Sass
130
116
 
131
117
  # EI_MAG
132
118
  ELFMAG0 = 0x7f
133
- ELFMAG1 = 'E'.ord
134
- ELFMAG2 = 'L'.ord
135
- ELFMAG3 = 'F'.ord
119
+ ELFMAG1 = 0x45
120
+ ELFMAG2 = 0x4c
121
+ ELFMAG3 = 0x46
136
122
  ELFMAG = [ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3].pack('C*')
137
123
  SELFMAG = 4
138
124
 
@@ -149,10 +135,35 @@ module Sass
149
135
 
150
136
  def initialize(buffer)
151
137
  @buffer = buffer
152
- @ehdr = read_ehdr
138
+
139
+ @ehdr = { e_ident: @buffer.read(EI_NIDENT).unpack('C*') }
140
+ raise ArgumentError unless @ehdr[:e_ident].slice(EI_MAG0, SELFMAG).pack('C*') == ELFMAG
141
+
142
+ case @ehdr[:e_ident][EI_CLASS]
143
+ when ELFCLASS32
144
+ elf_ehdr = :Elf32_Ehdr
145
+ elf_phdr = :Elf32_Phdr
146
+ when ELFCLASS64
147
+ elf_ehdr = :Elf64_Ehdr
148
+ elf_phdr = :Elf64_Phdr
149
+ else
150
+ raise ArgumentError
151
+ end
152
+
153
+ case @ehdr[:e_ident][EI_DATA]
154
+ when ELFDATA2LSB
155
+ little_endian = true
156
+ when ELFDATA2MSB
157
+ little_endian = false
158
+ else
159
+ raise ArgumentError
160
+ end
161
+
162
+ @ehdr.merge!(read(elf_ehdr, little_endian))
163
+
153
164
  @buffer.seek(@ehdr[:e_phoff], IO::SEEK_SET)
154
165
  @proghdrs = Array.new(@ehdr[:e_phnum]) do
155
- read_phdr
166
+ read(elf_phdr, little_endian)
156
167
  end
157
168
  end
158
169
 
@@ -185,75 +196,10 @@ module Sass
185
196
 
186
197
  private
187
198
 
188
- def file_class
189
- @ehdr[:e_ident][EI_CLASS]
190
- end
191
-
192
- def data_encoding
193
- @ehdr[:e_ident][EI_DATA]
194
- end
195
-
196
- def read_ehdr
197
- @ehdr = { e_ident: @buffer.read(EI_NIDENT).unpack('C*') }
198
- raise ArgumentError unless @ehdr[:e_ident].slice(EI_MAG0, SELFMAG).pack('C*') == ELFMAG
199
-
200
- case file_class
201
- when ELFCLASS32
202
- Elf32_Ehdr
203
- when ELFCLASS64
204
- Elf64_Ehdr
205
- else
206
- raise ArgumentError
207
- end.drop(1).to_h do |field|
208
- [field[1], read1(field[0])]
209
- end.merge!(@ehdr)
210
- end
211
-
212
- def read_phdr
213
- case file_class
214
- when ELFCLASS32
215
- Elf32_Phdr
216
- when ELFCLASS64
217
- Elf64_Phdr
218
- else
219
- raise ArgumentError
220
- end.to_h do |field|
221
- [field[1], read1(field[0])]
222
- end
223
- end
224
-
225
- def explicit_endian
226
- case data_encoding
227
- when ELFDATA2LSB
228
- '<'
229
- when ELFDATA2MSB
230
- '>'
231
- else
232
- raise ArgumentError
233
- end
234
- end
235
-
236
- def read1(type)
237
- case type
238
- when :__u8
239
- @buffer.read(1).unpack1('C')
240
- when :__u16
241
- @buffer.read(2).unpack1("S#{explicit_endian}")
242
- when :__u32
243
- @buffer.read(4).unpack1("L#{explicit_endian}")
244
- when :__u64
245
- @buffer.read(8).unpack1("Q#{explicit_endian}")
246
- when :__s8
247
- @buffer.read(1).unpack1('c')
248
- when :__s16
249
- @buffer.read(2).unpack1("s#{explicit_endian}")
250
- when :__s32
251
- @buffer.read(4).unpack1("l#{explicit_endian}")
252
- when :__s64
253
- @buffer.read(8).unpack1("q#{explicit_endian}")
254
- else
255
- raise ArgumentError
256
- end
199
+ def read(type, little_endian)
200
+ size = PackInfo::SIZE_MAP[type]
201
+ format = little_endian ? PackInfo::PACK_MAP[type] : PackInfo::PACK_MAP[type].tr('<', '>')
202
+ [PackInfo::STRUCT_MAP[type], @buffer.read(size).unpack(format)].transpose.to_h
257
203
  end
258
204
 
259
205
  INTERPRETER = begin
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sass
4
4
  module Embedded
5
- VERSION = '1.77.5'
5
+ VERSION = '1.78.0'
6
6
  end
7
7
  end
data/lib/sass/embedded.rb CHANGED
@@ -63,7 +63,7 @@ module Sass
63
63
  @last_accessed_time = current_time
64
64
 
65
65
  Thread.new do
66
- Thread.current.name = 'sass-embedded-process-reaper'
66
+ Thread.current.name = "sass-embedded-connection-reaper-#{@connection.id}"
67
67
  duration = idle_timeout
68
68
  loop do
69
69
  sleep(duration.negative? ? idle_timeout : duration)
@@ -51,8 +51,12 @@ module Sass
51
51
  font-family: monospace, monospace;
52
52
  white-space: pre;
53
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
54
+ ordinal = match.ord
55
+ replacement = "\\#{ordinal.to_s(16)}"
56
+ if match.length > 1
57
+ replacement << ' ' if ordinal < 0x100000
58
+ replacement << match[1]
59
+ end
56
60
  replacement
57
61
  end};
58
62
  }
@@ -62,6 +66,7 @@ module Sass
62
66
 
63
67
  # An exception thrown by Sass Script.
64
68
  class ScriptError < StandardError
69
+ # @!visibility private
65
70
  def initialize(message, name = nil)
66
71
  super(name.nil? ? message : "$#{name}: #{message}")
67
72
  end
@@ -290,7 +290,7 @@ module Sass
290
290
 
291
291
  compatibility_error = lambda {
292
292
  unless other.nil?
293
- message = +"#{self} and"
293
+ message = "#{self} and"
294
294
  message << " $#{other_name}:" unless other_name.nil?
295
295
  message << " #{other} have incompatible units"
296
296
  message << " (one has units and the other doesn't)" if unitless? || other_unitless
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.77.5
4
+ version: 1.78.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-12 00:00:00.000000000 Z
11
+ date: 2024-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -28,22 +28,16 @@ dependencies:
28
28
  name: google-protobuf
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '3.25'
34
- - - "<"
31
+ - - "~>"
35
32
  - !ruby/object:Gem::Version
36
- version: '5.0'
33
+ version: '4.27'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: '3.25'
44
- - - "<"
38
+ - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '5.0'
40
+ version: '4.27'
47
41
  description: A Ruby library that will communicate with Embedded Dart Sass using the
48
42
  Embedded Sass protocol.
49
43
  email:
@@ -107,8 +101,8 @@ licenses:
107
101
  - MIT
108
102
  metadata:
109
103
  bug_tracker_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/issues
110
- documentation_uri: https://rubydoc.info/gems/sass-embedded/1.77.5
111
- source_code_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/tree/v1.77.5
104
+ documentation_uri: https://rubydoc.info/gems/sass-embedded/1.78.0
105
+ source_code_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/tree/v1.78.0
112
106
  funding_uri: https://github.com/sponsors/ntkme
113
107
  rubygems_mfa_required: 'true'
114
108
  post_install_message:
@@ -126,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
120
  - !ruby/object:Gem::Version
127
121
  version: '0'
128
122
  requirements: []
129
- rubygems_version: 3.5.11
123
+ rubygems_version: 3.5.18
130
124
  signing_key:
131
125
  specification_version: 4
132
126
  summary: Use dart-sass with Ruby!