ruby2js 3.3.5 → 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.
@@ -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
@@ -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
@@ -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]/, '-').
@@ -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
@@ -1,8 +1,8 @@
1
1
  module Ruby2JS
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
- MINOR = 3
5
- TINY = 5
4
+ MINOR = 5
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -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.0".freeze)
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.3.5
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-10-07 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
@@ -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,8 @@ 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/rubyjs.rb
138
+ - lib/ruby2js/filter/securerandom.rb
139
+ - lib/ruby2js/filter/tagged_templates.rb
135
140
  - lib/ruby2js/filter/underscore.rb
136
141
  - lib/ruby2js/filter/vue.rb
137
142
  - lib/ruby2js/filter/wunderbar.rb
@@ -154,7 +159,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
159
  requirements:
155
160
  - - ">="
156
161
  - !ruby/object:Gem::Version
157
- version: '2.0'
162
+ version: '2.3'
158
163
  required_rubygems_version: !ruby/object:Gem::Requirement
159
164
  requirements:
160
165
  - - ">="
@@ -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