ruby2js 3.5.1 → 3.5.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f659d6312b558d08a3ca6c1f30183d602445ed580910715909ea2b4334a114a9
4
- data.tar.gz: 3f07730f5727ea25b95e095c7b45c19f3fb85dcc5d640e822a3a629fa88b8056
3
+ metadata.gz: 8995ca731fa2bedb5306084bca13f70aa01c269a3b3ac9b6c0ace540a0d58fae
4
+ data.tar.gz: 71c6cbb010ddf18f67623307c469f1ce4f55c4938c33a9e3172161f71819de87
5
5
  SHA512:
6
- metadata.gz: a85a3d7f144485575608cd136d764e36868d095fb8dbf4f6bc8b8adb8a218379775eeb12934c148574cac0f03dc6e12fc6223ef302973b5f4cb0a0629ba41de4
7
- data.tar.gz: 4c154cd393ce76cc0f72e23180fbfdd1b0b8e876a5d60686d246e9f53effff1c4f4ce4ea3c5573cf9ac5cb7cfcda3d2300ee865c2d8d21855a717fa8f203de4a
6
+ metadata.gz: b51e4838e7180248ffb00debab0758049dcc6a989bcc4b9e1087fb7112ac1a8142507c96e21309b23c3b69d987065e9d7fafb91dd0a7d8961b25f125fafc3788
7
+ data.tar.gz: fe7b943fc51b4f1685b5cc7020c969101d7a9aa17834bc6a8af746fdbe9472f9cc55960ef464f8dcfc10125598d6966a8cf38322ce432ec88e6dd787a49158ac
data/README.md CHANGED
@@ -243,8 +243,10 @@ the script.
243
243
 
244
244
  * <a id="functions" href="https://github.com/rubys/ruby2js/blob/master/lib/ruby2js/filter/functions.rb">functions</a>
245
245
 
246
+ * `.abs` becomes `Math.abs()`
246
247
  * `.all?` becomes `.every`
247
248
  * `.any?` becomes `.some`
249
+ * `.ceil` becomes `Math.ceil()`
248
250
  * `.chr` becomes `fromCharCode`
249
251
  * `.clear` becomes `.length = 0`
250
252
  * `.delete` becomes `delete target[arg]`
@@ -259,6 +261,7 @@ the script.
259
261
  * `.find_index` becomes `findIndex`
260
262
  * `.first` becomes `[0]`
261
263
  * `.first(n)` becomes `.slice(0, n)`
264
+ * `.floor` becomes `Math.floor()`
262
265
  * `.gsub` becomes `replace(//g)`
263
266
  * `.include?` becomes `.indexOf() != -1`
264
267
  * `.inspect` becomes `JSON.stringify()`
@@ -17,6 +17,7 @@ module Ruby2JS
17
17
 
18
18
  @@eslevel_default = 2009 # ecmascript 5
19
19
  @@strict_default = false
20
+ @@module_default = nil
20
21
 
21
22
  def self.eslevel_default
22
23
  @@eslevel_default
@@ -34,6 +35,14 @@ module Ruby2JS
34
35
  @@strict_default = level
35
36
  end
36
37
 
38
+ def self.module_default
39
+ @@module_default
40
+ end
41
+
42
+ def self.module_default=(module_type)
43
+ @@module_default = module_type
44
+ end
45
+
37
46
  module Filter
38
47
  DEFAULTS = []
39
48
 
@@ -52,11 +61,14 @@ module Ruby2JS
52
61
  include Ruby2JS::Filter
53
62
  BINARY_OPERATORS = Converter::OPERATORS[2..-1].flatten
54
63
 
64
+ attr_accessor :prepend_list
65
+
55
66
  def initialize(comments)
56
67
  @comments = comments
57
68
  @ast = nil
58
69
  @exclude_methods = []
59
70
  @esm = false
71
+ @prepend_list = Set.new
60
72
  end
61
73
 
62
74
  def options=(options)
@@ -162,6 +174,7 @@ module Ruby2JS
162
174
  def self.convert(source, options={})
163
175
  options[:eslevel] ||= @@eslevel_default
164
176
  options[:strict] = @@strict_default if options[:strict] == nil
177
+ options[:module] ||= @@module_default || :esm
165
178
 
166
179
  if Proc === source
167
180
  file,line = source.source_location
@@ -193,6 +206,11 @@ module Ruby2JS
193
206
 
194
207
  filter.options = options
195
208
  ast = filter.process(ast)
209
+
210
+ if filter.prepend_list
211
+ prepend = filter.prepend_list.sort_by {|ast| ast.type == :import ? 0 : 1}
212
+ ast = Parser::AST::Node.new(:begin, [*prepend, ast])
213
+ end
196
214
  end
197
215
 
198
216
  ruby2js = Ruby2JS::Converter.new(ast, comments)
@@ -203,6 +221,7 @@ module Ruby2JS
203
221
  ruby2js.strict = options[:strict]
204
222
  ruby2js.comparison = options[:comparison] || :equality
205
223
  ruby2js.or = options[:or] || :logical
224
+ ruby2js.module_type = options[:module] || :esm
206
225
  ruby2js.underscored_private = (options[:eslevel] < 2020) || options[:underscored_private]
207
226
  if ruby2js.binding and not ruby2js.ivars
208
227
  ruby2js.ivars = ruby2js.binding.eval \
@@ -130,7 +130,7 @@ module Ruby2JS
130
130
  Parser::AST::Node.new(type, args)
131
131
  end
132
132
 
133
- attr_accessor :strict, :eslevel, :comparison, :or, :underscored_private
133
+ attr_accessor :strict, :eslevel, :module_type, :comparison, :or, :underscored_private
134
134
 
135
135
  def es2015
136
136
  @eslevel >= 2015
@@ -6,7 +6,23 @@ module Ruby2JS
6
6
  # NOTE: import is a synthetic
7
7
 
8
8
  handle :import do |path, *args|
9
+ if module_type == :cjs
10
+ # only the subset of import syntaxes generated by filters are handled here
11
+ if Parser::AST::Node === args.first and args.first.type == :attr
12
+ return parse s(:casgn, *args.first.children,
13
+ s(:send, nil, :require, s(:str, Array(path).first))), :statement
14
+ elsif Array === args.first and args.first.length == 1
15
+ target = args.first.first
16
+ if Parser::AST::Node === target and target.type == :attr and target.children.first == nil
17
+ return parse s(:casgn, *target.children,
18
+ s(:attr, s(:send, nil, :require, s(:str, Array(path).first)), target.children.last)),
19
+ :statement
20
+ end
21
+ end
22
+ end
23
+
9
24
  put 'import '
25
+
10
26
  if args.length == 0
11
27
  # import "file.css"
12
28
  put path.inspect
@@ -1,5 +1,7 @@
1
1
  require 'ruby2js'
2
2
 
3
+ Ruby2JS.module_default = :esm
4
+
3
5
  module Ruby2JS
4
6
  module Filter
5
7
  module ESM
@@ -8,6 +10,27 @@ module Ruby2JS
8
10
  def initialize(*args)
9
11
  super
10
12
  @esm = true # signal for other filters
13
+ @esm_imports = nil
14
+ end
15
+
16
+ def options=(options)
17
+ super
18
+ @esm_autoimports = options[:autoimports]
19
+ return unless @esm_autoimports
20
+ end
21
+
22
+ def process(node)
23
+ return super if @esm_imports or not @esm_autoimports
24
+ @esm_imports = Set.new
25
+ result = super
26
+
27
+ if @esm_imports.empty?
28
+ result
29
+ else
30
+ s(:begin, *@esm_imports.to_a.map {|token|
31
+ s(:import, @esm_autoimports[token], s(:const, nil, token))
32
+ }, result)
33
+ end
11
34
  end
12
35
 
13
36
  def on_send(node)
@@ -56,10 +79,21 @@ module Ruby2JS
56
79
  end
57
80
  elsif method == :export
58
81
  s(:export, *process_all(args))
82
+ elsif @esm_imports and args.length == 0 and @esm_autoimports[method]
83
+ @esm_imports.add(method)
84
+ super
59
85
  else
60
86
  super
61
87
  end
62
88
  end
89
+
90
+ def on_const(node)
91
+ return super unless @esm_autoimports
92
+ if node.children.first == nil and @esm_autoimports[node.children.last]
93
+ @esm_imports.add(node.children.last)
94
+ end
95
+ super
96
+ end
63
97
  end
64
98
 
65
99
  DEFAULTS.push ESM
@@ -531,6 +531,15 @@ module Ruby2JS
531
531
  elsif method == :block_given? and target == nil and args.length == 0
532
532
  process process s(:lvar, "_implicitBlockYield")
533
533
 
534
+ elsif method == :abs and args.length == 0
535
+ process S(:send, s(:const, nil, :Math), :abs, target)
536
+
537
+ elsif method == :ceil and args.length == 0
538
+ process S(:send, s(:const, nil, :Math), :ceil, target)
539
+
540
+ elsif method == :floor and args.length == 0
541
+ process S(:send, s(:const, nil, :Math), :floor, target)
542
+
534
543
  else
535
544
  super
536
545
  end
@@ -1,44 +1,21 @@
1
1
  require 'ruby2js'
2
2
  require 'set'
3
3
 
4
+ Ruby2JS.module_default ||= :cjs
5
+
4
6
  module Ruby2JS
5
7
  module Filter
6
8
  module Node
7
9
  include SEXP
8
10
  extend SEXP
9
11
 
10
- CJS_SETUP = {
11
- child_process: s(:casgn, nil, :child_process,
12
- s(:send, nil, :require, s(:str, "child_process"))),
13
- fs: s(:casgn, nil, :fs, s(:send, nil, :require, s(:str, "fs"))),
14
- ARGV: s(:lvasgn, :ARGV, s(:send, s(:attr,
15
- s(:attr, nil, :process), :argv), :slice, s(:int, 2)))
16
- }
17
-
18
- ESM_SETUP = {
19
- child_process: s(:import, ['child_process'],
20
- s(:attr, nil, :child_process)),
21
- fs: s(:import, ['fs'], s(:attr, nil, :fs)),
22
- ARGV: CJS_SETUP[:ARGV]
23
- }
24
-
25
- def initialize(*args)
26
- @node_setup = nil
27
- super
28
- end
12
+ IMPORT_CHILD_PROCESS = s(:import, ['child_process'],
13
+ s(:attr, nil, :child_process))
29
14
 
30
- def process(node)
31
- return super if @node_setup
32
- @node_setup = Set.new
33
- result = super
15
+ IMPORT_FS = s(:import, ['fs'], s(:attr, nil, :fs))
34
16
 
35
- if @node_setup.empty?
36
- result
37
- else
38
- setup = @esm ? ESM_SETUP : CJS_SETUP;
39
- s(:begin, *@node_setup.to_a.map {|token| setup[token]}, result)
40
- end
41
- end
17
+ SETUP_ARGV = s(:lvasgn, :ARGV, s(:send, s(:attr,
18
+ s(:attr, nil, :process), :argv), :slice, s(:int, 2)))
42
19
 
43
20
  def on_send(node)
44
21
  target, method, *args = node.children
@@ -51,7 +28,7 @@ module Ruby2JS
51
28
  s(:send, s(:attr, nil, :process), :exit, *process_all(args));
52
29
 
53
30
  elsif method == :system
54
- @node_setup << :child_process
31
+ prepend_list << IMPORT_CHILD_PROCESS
55
32
 
56
33
  if args.length == 1
57
34
  s(:send, s(:attr, nil, :child_process), :execSync,
@@ -79,38 +56,38 @@ module Ruby2JS
79
56
  target.type == :const and target.children.first == nil
80
57
  then
81
58
  if method == :read and args.length == 1
82
- @node_setup << :fs
59
+ prepend_list << IMPORT_FS
83
60
  s(:send, s(:attr, nil, :fs), :readFileSync, *process_all(args),
84
61
  s(:str, 'utf8'))
85
62
 
86
63
  elsif method == :write and args.length == 2
87
- @node_setup << :fs
64
+ prepend_list << IMPORT_FS
88
65
  S(:send, s(:attr, nil, :fs), :writeFileSync, *process_all(args))
89
66
 
90
67
  elsif target.children.last == :IO
91
68
  super
92
69
 
93
70
  elsif [:exist?, :exists?].include? method and args.length == 1
94
- @node_setup << :fs
71
+ prepend_list << IMPORT_FS
95
72
  S(:send, s(:attr, nil, :fs), :existsSync, process(args.first))
96
73
 
97
74
  elsif method == :readlink and args.length == 1
98
- @node_setup << :fs
75
+ prepend_list << IMPORT_FS
99
76
  S(:send, s(:attr, nil, :fs), :readlinkSync, process(args.first))
100
77
 
101
78
  elsif method == :realpath and args.length == 1
102
- @node_setup << :fs
79
+ prepend_list << IMPORT_FS
103
80
  S(:send, s(:attr, nil, :fs), :realpathSync, process(args.first))
104
81
 
105
82
  elsif method == :rename and args.length == 2
106
- @node_setup << :fs
83
+ prepend_list << IMPORT_FS
107
84
  S(:send, s(:attr, nil, :fs), :renameSync, *process_all(args))
108
85
 
109
86
  elsif \
110
87
  [:chmod, :lchmod].include? method and
111
88
  args.length > 1 and args.first.type == :int
112
89
  then
113
- @node_setup << :fs
90
+ prepend_list << IMPORT_FS
114
91
 
115
92
  S(:begin, *args[1..-1].map{|file|
116
93
  S(:send, s(:attr, nil, :fs), method.to_s + 'Sync', process(file),
@@ -121,7 +98,7 @@ module Ruby2JS
121
98
  [:chown, :lchown].include? method and args.length > 2 and
122
99
  args[0].type == :int and args[1].type == :int
123
100
  then
124
- @node_setup << :fs
101
+ prepend_list << IMPORT_FS
125
102
 
126
103
  S(:begin, *args[2..-1].map{|file|
127
104
  s(:send, s(:attr, nil, :fs), method.to_s + 'Sync', process(file),
@@ -129,24 +106,24 @@ module Ruby2JS
129
106
  })
130
107
 
131
108
  elsif [:ln, :link].include? method and args.length == 2
132
- @node_setup << :fs
109
+ prepend_list << IMPORT_FS
133
110
  s(:send, s(:attr, nil, :fs), :linkSync, *process_all(args))
134
111
 
135
112
  elsif method == :symlink and args.length == 2
136
- @node_setup << :fs
113
+ prepend_list << IMPORT_FS
137
114
  s(:send, s(:attr, nil, :fs), :symlinkSync, *process_all(args))
138
115
 
139
116
  elsif method == :truncate and args.length == 2
140
- @node_setup << :fs
117
+ prepend_list << IMPORT_FS
141
118
  s(:send, s(:attr, nil, :fs), :truncateSync, *process_all(args))
142
119
 
143
120
  elsif [:stat, :lstat].include? method and args.length == 1
144
- @node_setup << :fs
121
+ prepend_list << IMPORT_FS
145
122
  s(:send, s(:attr, nil, :fs), method.to_s + 'Sync',
146
123
  process(args.first))
147
124
 
148
125
  elsif method == :unlink and args.length == 1
149
- @node_setup << :fs
126
+ prepend_list << IMPORT_FS
150
127
  S(:begin, *args.map{|file|
151
128
  S(:send, s(:attr, nil, :fs), :unlinkSync, process(file))
152
129
  })
@@ -169,15 +146,15 @@ module Ruby2JS
169
146
  end
170
147
 
171
148
  if [:cp, :copy].include? method and args.length == 2
172
- @node_setup << :fs
149
+ prepend_list << IMPORT_FS
173
150
  s(:send, s(:attr, nil, :fs), :copyFileSync, *process_all(args))
174
151
 
175
152
  elsif [:mv, :move].include? method and args.length == 2
176
- @node_setup << :fs
153
+ prepend_list << IMPORT_FS
177
154
  S(:send, s(:attr, nil, :fs), :renameSync, *process_all(args))
178
155
 
179
156
  elsif method == :mkdir and args.length == 1
180
- @node_setup << :fs
157
+ prepend_list << IMPORT_FS
181
158
  S(:begin, *list[args.last].map {|file|
182
159
  s(:send, s(:attr, nil, :fs), :mkdirSync, process(file))
183
160
  })
@@ -189,21 +166,21 @@ module Ruby2JS
189
166
  s(:send, s(:attr, nil, :process), :cwd)
190
167
 
191
168
  elsif method == :rmdir and args.length == 1
192
- @node_setup << :fs
169
+ prepend_list << IMPORT_FS
193
170
  S(:begin, *list[args.last].map {|file|
194
171
  s(:send, s(:attr, nil, :fs), :rmdirSync, process(file))
195
172
  })
196
173
 
197
174
  elsif method == :ln and args.length == 2
198
- @node_setup << :fs
175
+ prepend_list << IMPORT_FS
199
176
  s(:send, s(:attr, nil, :fs), :linkSync, *process_all(args))
200
177
 
201
178
  elsif method == :ln_s and args.length == 2
202
- @node_setup << :fs
179
+ prepend_list << IMPORT_FS
203
180
  s(:send, s(:attr, nil, :fs), :symlinkSync, *process_all(args))
204
181
 
205
182
  elsif method == :rm and args.length == 1
206
- @node_setup << :fs
183
+ prepend_list << IMPORT_FS
207
184
  S(:begin, *list[args.last].map {|file|
208
185
  s(:send, s(:attr, nil, :fs), :unlinkSync, process(file))
209
186
  })
@@ -211,7 +188,7 @@ module Ruby2JS
211
188
  elsif \
212
189
  method == :chmod and args.length == 2 and args.first.type == :int
213
190
  then
214
- @node_setup << :fs
191
+ prepend_list << IMPORT_FS
215
192
 
216
193
  S(:begin, *list[args.last].map {|file|
217
194
  S(:send, s(:attr, nil, :fs), method.to_s + 'Sync', process(file),
@@ -222,14 +199,14 @@ module Ruby2JS
222
199
  method == :chown and args.length == 3 and
223
200
  args[0].type == :int and args[1].type == :int
224
201
  then
225
- @node_setup << :fs
202
+ prepend_list << IMPORT_FS
226
203
 
227
204
  S(:begin, *list[args.last].map {|file|
228
205
  s(:send, s(:attr, nil, :fs), method.to_s + 'Sync', process(file),
229
206
  *process_all(args[0..1]))})
230
207
 
231
208
  elsif method == :touch
232
- @node_setup << :fs
209
+ prepend_list << IMPORT_FS
233
210
 
234
211
  S(:begin, *list[args.first].map {|file|
235
212
  S(:send, s(:attr, nil, :fs), :closeSync,
@@ -249,16 +226,16 @@ module Ruby2JS
249
226
  elsif method == :pwd and args.length == 0
250
227
  s(:send, s(:attr, nil, :process), :cwd)
251
228
  elsif method == :entries
252
- @node_setup << :fs
229
+ prepend_list << IMPORT_FS
253
230
  s(:send, s(:attr, nil, :fs), :readdirSync, *process_all(args))
254
231
  elsif method == :mkdir and args.length == 1
255
- @node_setup << :fs
232
+ prepend_list << IMPORT_FS
256
233
  s(:send, s(:attr, nil, :fs), :mkdirSync, process(args.first))
257
234
  elsif method == :rmdir and args.length == 1
258
- @node_setup << :fs
235
+ prepend_list << IMPORT_FS
259
236
  s(:send, s(:attr, nil, :fs), :rmdirSync, process(args.first))
260
237
  elsif method == :mktmpdir and args.length <=1
261
- @node_setup << :fs
238
+ prepend_list << IMPORT_FS
262
239
  if args.length == 0
263
240
  prefix = s(:str, 'd')
264
241
  elsif args.first.type == :array
@@ -298,7 +275,7 @@ module Ruby2JS
298
275
 
299
276
  def on_const(node)
300
277
  if node.children == [nil, :ARGV]
301
- @node_setup << :ARGV
278
+ prepend_list << SETUP_ARGV
302
279
  super
303
280
  elsif node.children == [nil, :ENV]
304
281
  S(:attr, s(:attr, nil, :process), :env)
@@ -326,7 +303,7 @@ module Ruby2JS
326
303
  end
327
304
 
328
305
  def on_xstr(node)
329
- @node_setup << :child_process
306
+ prepend_list << IMPORT_CHILD_PROCESS
330
307
 
331
308
  children = node.children.dup
332
309
  command = children.shift
@@ -7,33 +7,7 @@ module Ruby2JS
7
7
  include SEXP
8
8
  extend SEXP
9
9
 
10
- CJS_SETUP = {
11
- jsdom: s(:casgn, nil, :JSDOM,
12
- s(:attr, s(:send, nil, :require, s(:str, "jsdom")), :JSDOM))
13
- }
14
-
15
- ESM_SETUP = {
16
- jsdom: s(:import, ["jsdom"], [s(:attr, nil, :JSDOM)])
17
- }
18
-
19
- def initialize(*args)
20
- @nokogiri_setup = nil
21
- super
22
- end
23
-
24
- def process(node)
25
- return super if @nokogiri_setup
26
- @nokogiri_setup = Set.new
27
- result = super
28
-
29
- if @nokogiri_setup.empty?
30
- result
31
- else
32
- setup = @esm ? ESM_SETUP : CJS_SETUP;
33
- s(:begin,
34
- *@nokogiri_setup.to_a.map {|token| setup[token]}, result)
35
- end
36
- end
10
+ IMPORT_JSDOM = s(:import, ["jsdom"], [s(:attr, nil, :JSDOM)])
37
11
 
38
12
  def on_send(node)
39
13
  target, method, *args = node.children
@@ -55,7 +29,7 @@ module Ruby2JS
55
29
  [:HTML, :HTML5].include? method and
56
30
  target == s(:const, nil, :Nokogiri)
57
31
  then
58
- @nokogiri_setup << :jsdom
32
+ prepend_list << IMPORT_JSDOM
59
33
  S(:attr, s(:attr, s(:send, s(:const, nil, :JSDOM), :new,
60
34
  *process_all(args)), :window), :document)
61
35
 
@@ -65,7 +39,7 @@ module Ruby2JS
65
39
  target.children.first == s(:const, nil, :Nokogiri) and
66
40
  [:HTML, :HTML5].include? target.children.last
67
41
  then
68
- @nokogiri_setup << :jsdom
42
+ prepend_list << IMPORT_JSDOM
69
43
  S(:attr, s(:attr, s(:send, s(:const, nil, :JSDOM), :new,
70
44
  *process_all(args)), :window), :document)
71
45
 
@@ -21,6 +21,8 @@ module Ruby2JS
21
21
  def on_def(node)
22
22
  node = super
23
23
  return node unless node.type == :def
24
+ return node if [:constructor, :initialize].include?(node.children.first)
25
+
24
26
  children = node.children[1..-1]
25
27
 
26
28
  children[-1] = s(:nil) if children.last == nil
@@ -0,0 +1,33 @@
1
+ require 'ruby2js'
2
+ require 'set'
3
+
4
+ # Experimental secure random support
5
+
6
+ module Ruby2JS
7
+ module Filter
8
+ module SecureRandom
9
+ include SEXP
10
+ extend SEXP
11
+
12
+ IMPORT_BASE62_RANDOM = s(:import, ['base62-random'],
13
+ s(:attr, nil, :base62_random))
14
+
15
+ def on_send(node)
16
+ target, method, *args = node.children
17
+
18
+ if target == s(:const, nil, :SecureRandom)
19
+ if method == :alphanumeric and args.length == 1
20
+ prepend_list << IMPORT_BASE62_RANDOM
21
+ node.updated(nil, [nil, :base62_random, *args])
22
+ else
23
+ super
24
+ end
25
+ else
26
+ super
27
+ end
28
+ end
29
+ end
30
+
31
+ DEFAULTS.push SecureRandom
32
+ end
33
+ end
@@ -106,6 +106,7 @@ module Ruby2JS
106
106
  computed = []
107
107
  setters = []
108
108
  options = []
109
+ watch = nil
109
110
  el = nil
110
111
  mixins = []
111
112
 
@@ -205,6 +206,9 @@ module Ruby2JS
205
206
  end
206
207
 
207
208
  @vue_h = args.children.first.children.last
209
+ elsif method == :watch and args.children.length == 0 and block.type == :hash
210
+ watch = process(block)
211
+ next
208
212
  elsif method == :initialize
209
213
  method = :data
210
214
 
@@ -332,6 +336,11 @@ module Ruby2JS
332
336
  hash << s(:pair, s(:sym, :computed), s(:hash, *computed))
333
337
  end
334
338
 
339
+ # append watch to hash
340
+ if watch
341
+ hash << s(:pair, s(:sym, :watch), watch)
342
+ end
343
+
335
344
  # convert class name to camel case
336
345
  cname = cname.children.last
337
346
  camel = cname.to_s.gsub(/[^\w]/, '-').
@@ -2,7 +2,7 @@ module Ruby2JS
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 5
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2js
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.1
4
+ version: 3.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-02 00:00:00.000000000 Z
11
+ date: 2020-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -135,6 +135,7 @@ files:
135
135
  - lib/ruby2js/filter/react.rb
136
136
  - lib/ruby2js/filter/require.rb
137
137
  - lib/ruby2js/filter/return.rb
138
+ - lib/ruby2js/filter/securerandom.rb
138
139
  - lib/ruby2js/filter/tagged_templates.rb
139
140
  - lib/ruby2js/filter/underscore.rb
140
141
  - lib/ruby2js/filter/vue.rb