ruby2js 3.3.4 → 3.5.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.
- checksums.yaml +4 -4
- data/README.md +96 -65
- data/lib/ruby2js.rb +3 -0
- data/lib/ruby2js/converter.rb +9 -4
- data/lib/ruby2js/converter/block.rb +5 -0
- data/lib/ruby2js/converter/class2.rb +9 -3
- data/lib/ruby2js/converter/cvar.rb +1 -1
- data/lib/ruby2js/converter/cvasgn.rb +1 -1
- data/lib/ruby2js/converter/def.rb +16 -0
- data/lib/ruby2js/converter/dstr.rb +1 -1
- data/lib/ruby2js/converter/hash.rb +9 -2
- data/lib/ruby2js/converter/import.rb +78 -10
- data/lib/ruby2js/converter/ivar.rb +13 -5
- data/lib/ruby2js/converter/ivasgn.rb +1 -1
- data/lib/ruby2js/converter/logical.rb +1 -1
- data/lib/ruby2js/converter/return.rb +3 -1
- data/lib/ruby2js/converter/taglit.rb +13 -0
- data/lib/ruby2js/converter/yield.rb +12 -0
- data/lib/ruby2js/filter/camelCase.rb +78 -35
- data/lib/ruby2js/filter/esm.rb +44 -49
- data/lib/ruby2js/filter/esm_migration.rb +72 -0
- data/lib/ruby2js/filter/fast-deep-equal.rb +23 -0
- data/lib/ruby2js/filter/functions.rb +15 -1
- data/lib/ruby2js/filter/node.rb +10 -3
- data/lib/ruby2js/filter/nokogiri.rb +7 -3
- data/lib/ruby2js/filter/require.rb +0 -2
- data/lib/ruby2js/filter/return.rb +7 -3
- data/lib/ruby2js/filter/tagged_templates.rb +40 -0
- data/lib/ruby2js/serializer.rb +1 -1
- data/lib/ruby2js/version.rb +2 -2
- data/ruby2js.gemspec +1 -1
- metadata +8 -4
- data/lib/ruby2js/filter/rubyjs.rb +0 -112
@@ -528,6 +528,9 @@ module Ruby2JS
|
|
528
528
|
elsif method == :new and target == s(:const, nil, :Exception)
|
529
529
|
process S(:send, s(:const, nil, :Error), :new, *args)
|
530
530
|
|
531
|
+
elsif method == :block_given? and target == nil and args.length == 0
|
532
|
+
process process s(:lvar, "_implicitBlockYield")
|
533
|
+
|
531
534
|
else
|
532
535
|
super
|
533
536
|
end
|
@@ -538,7 +541,7 @@ module Ruby2JS
|
|
538
541
|
method = call.children[1]
|
539
542
|
return super if excluded?(method)
|
540
543
|
|
541
|
-
if [:setInterval, :setTimeout].include? method
|
544
|
+
if [:setInterval, :setTimeout, :set_interval, :set_timeout].include? method
|
542
545
|
return super unless call.children.first == nil
|
543
546
|
block = process s(:block, s(:send, nil, :proc), *node.children[1..-1])
|
544
547
|
on_send call.updated nil, [*call.children[0..1], block,
|
@@ -703,6 +706,17 @@ module Ruby2JS
|
|
703
706
|
process call.updated(nil, [*call.children, s(:block,
|
704
707
|
s(:send, nil, :proc), *node.children[1..-1])])
|
705
708
|
|
709
|
+
elsif method == :yield_self and call.children.length == 2
|
710
|
+
process node.updated(:send, [s(:block, s(:send, nil, :proc),
|
711
|
+
node.children[1], s(:autoreturn, node.children[2])),
|
712
|
+
:[], call.children[0]])
|
713
|
+
|
714
|
+
elsif method == :tap and call.children.length == 2
|
715
|
+
process node.updated(:send, [s(:block, s(:send, nil, :proc),
|
716
|
+
node.children[1], s(:begin, node.children[2],
|
717
|
+
s(:return, s(:lvar, node.children[1].children[0].children[0])))),
|
718
|
+
:[], call.children[0]])
|
719
|
+
|
706
720
|
else
|
707
721
|
super
|
708
722
|
end
|
data/lib/ruby2js/filter/node.rb
CHANGED
@@ -7,7 +7,7 @@ module Ruby2JS
|
|
7
7
|
include SEXP
|
8
8
|
extend SEXP
|
9
9
|
|
10
|
-
|
10
|
+
CJS_SETUP = {
|
11
11
|
child_process: s(:casgn, nil, :child_process,
|
12
12
|
s(:send, nil, :require, s(:str, "child_process"))),
|
13
13
|
fs: s(:casgn, nil, :fs, s(:send, nil, :require, s(:str, "fs"))),
|
@@ -15,6 +15,13 @@ module Ruby2JS
|
|
15
15
|
s(:attr, nil, :process), :argv), :slice, s(:int, 2)))
|
16
16
|
}
|
17
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
|
+
|
18
25
|
def initialize(*args)
|
19
26
|
@node_setup = nil
|
20
27
|
super
|
@@ -28,8 +35,8 @@ module Ruby2JS
|
|
28
35
|
if @node_setup.empty?
|
29
36
|
result
|
30
37
|
else
|
31
|
-
|
32
|
-
|
38
|
+
setup = @esm ? ESM_SETUP : CJS_SETUP;
|
39
|
+
s(:begin, *@node_setup.to_a.map {|token| setup[token]}, result)
|
33
40
|
end
|
34
41
|
end
|
35
42
|
|
@@ -7,11 +7,15 @@ module Ruby2JS
|
|
7
7
|
include SEXP
|
8
8
|
extend SEXP
|
9
9
|
|
10
|
-
|
10
|
+
CJS_SETUP = {
|
11
11
|
jsdom: s(:casgn, nil, :JSDOM,
|
12
12
|
s(:attr, s(:send, nil, :require, s(:str, "jsdom")), :JSDOM))
|
13
13
|
}
|
14
14
|
|
15
|
+
ESM_SETUP = {
|
16
|
+
jsdom: s(:import, ["jsdom"], [s(:attr, nil, :JSDOM)])
|
17
|
+
}
|
18
|
+
|
15
19
|
def initialize(*args)
|
16
20
|
@nokogiri_setup = nil
|
17
21
|
super
|
@@ -25,9 +29,9 @@ module Ruby2JS
|
|
25
29
|
if @nokogiri_setup.empty?
|
26
30
|
result
|
27
31
|
else
|
32
|
+
setup = @esm ? ESM_SETUP : CJS_SETUP;
|
28
33
|
s(:begin,
|
29
|
-
*@nokogiri_setup.to_a.map {|token|
|
30
|
-
result)
|
34
|
+
*@nokogiri_setup.to_a.map {|token| setup[token]}, result)
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
@@ -8,16 +8,20 @@ module Ruby2JS
|
|
8
8
|
EXPRESSIONS = [ :array, :float, :hash, :if, :int, :lvar, :nil, :send ]
|
9
9
|
|
10
10
|
def on_block(node)
|
11
|
-
|
11
|
+
node = super
|
12
|
+
return node unless node.type == :block
|
13
|
+
children = node.children.dup
|
12
14
|
|
13
15
|
children[-1] = s(:nil) if children.last == nil
|
14
16
|
|
15
|
-
node.updated nil, [*
|
17
|
+
node.updated nil, [*children[0..1],
|
16
18
|
s(:autoreturn, *children[2..-1])]
|
17
19
|
end
|
18
20
|
|
19
21
|
def on_def(node)
|
20
|
-
|
22
|
+
node = super
|
23
|
+
return node unless node.type == :def
|
24
|
+
children = node.children[1..-1]
|
21
25
|
|
22
26
|
children[-1] = s(:nil) if children.last == nil
|
23
27
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'ruby2js'
|
2
|
+
|
3
|
+
module Ruby2JS
|
4
|
+
module Filter
|
5
|
+
module TaggedTemplates
|
6
|
+
include SEXP
|
7
|
+
|
8
|
+
def initialize(*args)
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def on_send(node)
|
13
|
+
target, method, *args = node.children
|
14
|
+
return super unless target.nil? and es2015
|
15
|
+
|
16
|
+
tagged_methods = @options[:template_literal_tags] || [:html, :css]
|
17
|
+
|
18
|
+
if tagged_methods.include?(method) && !args.empty?
|
19
|
+
strnode = process args.first
|
20
|
+
if strnode.type == :str
|
21
|
+
# convert regular strings to literal strings
|
22
|
+
strnode = strnode.updated(:dstr, [s(:str, strnode.children.first.chomp("\n"))])
|
23
|
+
else
|
24
|
+
# for literal strings, chomp a newline off the end
|
25
|
+
if strnode.children.last.type == :str && strnode.children.last.children[0].end_with?("\n")
|
26
|
+
children = [*strnode.children.take(strnode.children.length - 1), s(:str, strnode.children.last.children[0].chomp)]
|
27
|
+
strnode = s(:dstr, *children)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
S(:taglit, s(:sym, method), strnode)
|
32
|
+
else
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
DEFAULTS.push TaggedTemplates
|
39
|
+
end
|
40
|
+
end
|
data/lib/ruby2js/serializer.rb
CHANGED
@@ -355,7 +355,7 @@ module Ruby2JS
|
|
355
355
|
end
|
356
356
|
|
357
357
|
split = buffer.source[0...pos].split("\n")
|
358
|
-
vlq row, col, source_index, split.length-1, split.last.to_s.length
|
358
|
+
vlq row, col, source_index, [split.length - 1, 0].max, split.last.to_s.length
|
359
359
|
end
|
360
360
|
col += token.length
|
361
361
|
end
|
data/lib/ruby2js/version.rb
CHANGED
data/ruby2js.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.files = %w(ruby2js.gemspec README.md) + Dir.glob("{lib}/**/*")
|
16
16
|
s.homepage = "http://github.com/rubys/ruby2js".freeze
|
17
17
|
s.licenses = ["MIT".freeze]
|
18
|
-
s.required_ruby_version = Gem::Requirement.new(">= 2.
|
18
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3".freeze)
|
19
19
|
s.summary = "Minimal yet extensible Ruby to JavaScript conversion.".freeze
|
20
20
|
|
21
21
|
s.add_dependency('parser')
|
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.
|
4
|
+
version: 3.5.1
|
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
|
+
date: 2020-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- lib/ruby2js/converter/send.rb
|
95
95
|
- lib/ruby2js/converter/super.rb
|
96
96
|
- lib/ruby2js/converter/sym.rb
|
97
|
+
- lib/ruby2js/converter/taglit.rb
|
97
98
|
- lib/ruby2js/converter/undef.rb
|
98
99
|
- lib/ruby2js/converter/until.rb
|
99
100
|
- lib/ruby2js/converter/untilpost.rb
|
@@ -103,6 +104,7 @@ files:
|
|
103
104
|
- lib/ruby2js/converter/whilepost.rb
|
104
105
|
- lib/ruby2js/converter/xnode.rb
|
105
106
|
- lib/ruby2js/converter/xstr.rb
|
107
|
+
- lib/ruby2js/converter/yield.rb
|
106
108
|
- lib/ruby2js/es2015.rb
|
107
109
|
- lib/ruby2js/es2015/strict.rb
|
108
110
|
- lib/ruby2js/es2016.rb
|
@@ -122,6 +124,8 @@ files:
|
|
122
124
|
- lib/ruby2js/filter/camelCase.rb
|
123
125
|
- lib/ruby2js/filter/cjs.rb
|
124
126
|
- lib/ruby2js/filter/esm.rb
|
127
|
+
- lib/ruby2js/filter/esm_migration.rb
|
128
|
+
- lib/ruby2js/filter/fast-deep-equal.rb
|
125
129
|
- lib/ruby2js/filter/functions.rb
|
126
130
|
- lib/ruby2js/filter/jquery.rb
|
127
131
|
- lib/ruby2js/filter/matchAll.rb
|
@@ -131,7 +135,7 @@ files:
|
|
131
135
|
- lib/ruby2js/filter/react.rb
|
132
136
|
- lib/ruby2js/filter/require.rb
|
133
137
|
- lib/ruby2js/filter/return.rb
|
134
|
-
- lib/ruby2js/filter/
|
138
|
+
- lib/ruby2js/filter/tagged_templates.rb
|
135
139
|
- lib/ruby2js/filter/underscore.rb
|
136
140
|
- lib/ruby2js/filter/vue.rb
|
137
141
|
- lib/ruby2js/filter/wunderbar.rb
|
@@ -154,7 +158,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
154
158
|
requirements:
|
155
159
|
- - ">="
|
156
160
|
- !ruby/object:Gem::Version
|
157
|
-
version: '2.
|
161
|
+
version: '2.3'
|
158
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
163
|
requirements:
|
160
164
|
- - ">="
|
@@ -1,112 +0,0 @@
|
|
1
|
-
require 'ruby2js'
|
2
|
-
|
3
|
-
module Ruby2JS
|
4
|
-
module Filter
|
5
|
-
module RubyJS
|
6
|
-
include SEXP
|
7
|
-
|
8
|
-
def on_send(node)
|
9
|
-
# leave functional style calls alone
|
10
|
-
target = node.children.first
|
11
|
-
return super if target and [:_s, :_a, :_h, :_n, :_i, :_t].
|
12
|
-
include? target.children[1]
|
13
|
-
|
14
|
-
method = node.children[1]
|
15
|
-
return super if excluded?(method)
|
16
|
-
|
17
|
-
# leave classic ("OO") style call chains alone
|
18
|
-
while target and target.type == :send
|
19
|
-
return super if target.children[1] == :R
|
20
|
-
target = target.children.first
|
21
|
-
end
|
22
|
-
|
23
|
-
if \
|
24
|
-
[:capitalize, :center, :chomp, :ljust, :lstrip, :rindex, :rjust,
|
25
|
-
:rstrip, :scan, :swapcase, :tr].include? method
|
26
|
-
then
|
27
|
-
# map selected string functions
|
28
|
-
s(:send, s(:lvar, :_s), method,
|
29
|
-
*process_all([node.children[0], *node.children[2..-1]]))
|
30
|
-
|
31
|
-
elsif \
|
32
|
-
[:at, :compact, :compact!, :delete_at, :delete_at, :flatten, :insert,
|
33
|
-
:reverse, :reverse!, :rotate, :rotate, :rotate!, :shift, :shuffle,
|
34
|
-
:shuffle!, :slice, :slice!, :transpose, :union, :uniq, :uniq!]
|
35
|
-
.include? method
|
36
|
-
then
|
37
|
-
# map selected array functions
|
38
|
-
s(:send, s(:lvar, :_a), method.to_s.sub("!", '_bang'),
|
39
|
-
*process_all([node.children[0], *node.children[2..-1]]))
|
40
|
-
|
41
|
-
|
42
|
-
elsif [:strftime].include? method
|
43
|
-
# map selected time functions
|
44
|
-
s(:send, s(:lvar, :_t), method,
|
45
|
-
*process_all([node.children[0], *node.children[2..-1]]))
|
46
|
-
|
47
|
-
elsif method == :<=>
|
48
|
-
s(:send, s(:attr, s(:const, nil, :R), :Comparable), :cmp,
|
49
|
-
node.children[0], *node.children[2..-1])
|
50
|
-
|
51
|
-
elsif method == :between?
|
52
|
-
s(:send, s(:send, nil, :R, node.children[0]), :between,
|
53
|
-
*node.children[2..-1])
|
54
|
-
|
55
|
-
else
|
56
|
-
super
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def on_block(node)
|
61
|
-
call, args, *block = node.children
|
62
|
-
method = call.children[1]
|
63
|
-
return super if excluded?(method)
|
64
|
-
|
65
|
-
if \
|
66
|
-
[:collect_concat, :count, :cycle, :delete_if, :drop_while,
|
67
|
-
:each_index, :each_slice, :each_with_index, :each_with_object,
|
68
|
-
:find, :find_all, :flat_map, :inject, :grep, :group_by, :keep_if,
|
69
|
-
:map, :max_by, :min_by, :one?, :partition, :reject, :reverse_each,
|
70
|
-
:select!, :sort_by, :take_while].include? method
|
71
|
-
then
|
72
|
-
if \
|
73
|
-
[:collect_concat, :count, :delete_if, :drop_while, :find,
|
74
|
-
:find_all, :flat_map, :grep, :group_by, :keep_if, :map, :max_by,
|
75
|
-
:min_by, :one?, :partition, :reject, :select!, :sort_by,
|
76
|
-
:take_while].include? method
|
77
|
-
then
|
78
|
-
block = [ s(:autoreturn, *block) ]
|
79
|
-
end
|
80
|
-
|
81
|
-
lvar = [:each_index, :keep_if, :select!].include?(method) ? :_a : :_e
|
82
|
-
|
83
|
-
if method == :find and call.children.length == 2
|
84
|
-
call = s(:send, *call.children, s(:nil))
|
85
|
-
elsif method == :inject and call.children.length == 3
|
86
|
-
call = s(:send, *call.children, s(:nil))
|
87
|
-
elsif method == :select!
|
88
|
-
call = s(:send, call.children.first, :select_bang,
|
89
|
-
*call.children[2..-1])
|
90
|
-
end
|
91
|
-
|
92
|
-
s(:block, s(:send, s(:lvar, lvar), call.children[1],
|
93
|
-
*process_all([call.children[0], *call.children[2..-1]])),
|
94
|
-
args, *block)
|
95
|
-
else
|
96
|
-
super
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def on_irange(node)
|
101
|
-
s(:send, s(:attr, s(:const, nil, :R), :Range), :new, *node.children)
|
102
|
-
end
|
103
|
-
|
104
|
-
def on_erange(node)
|
105
|
-
s(:send, s(:attr, s(:const, nil, :R), :Range), :new, *node.children,
|
106
|
-
s(:true))
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
DEFAULTS.push RubyJS
|
111
|
-
end
|
112
|
-
end
|