js_regex 3.3.0 → 3.7.0
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/lib/js_regex.rb +12 -2
- data/lib/js_regex/conversion.rb +12 -9
- data/lib/js_regex/converter.rb +4 -14
- data/lib/js_regex/converter/anchor_converter.rb +2 -5
- data/lib/js_regex/converter/assertion_converter.rb +0 -2
- data/lib/js_regex/converter/backreference_converter.rb +0 -2
- data/lib/js_regex/converter/base.rb +2 -4
- data/lib/js_regex/converter/conditional_converter.rb +0 -2
- data/lib/js_regex/converter/context.rb +0 -2
- data/lib/js_regex/converter/escape_converter.rb +1 -3
- data/lib/js_regex/converter/freespace_converter.rb +0 -2
- data/lib/js_regex/converter/group_converter.rb +0 -2
- data/lib/js_regex/converter/literal_converter.rb +9 -25
- data/lib/js_regex/converter/meta_converter.rb +4 -3
- data/lib/js_regex/converter/property_converter.rb +5 -27
- data/lib/js_regex/converter/set_converter.rb +4 -17
- data/lib/js_regex/converter/subexpression_converter.rb +0 -2
- data/lib/js_regex/converter/type_converter.rb +0 -2
- data/lib/js_regex/converter/unsupported_token_converter.rb +0 -2
- data/lib/js_regex/error.rb +5 -0
- data/lib/js_regex/node.rb +5 -3
- data/lib/js_regex/second_pass.rb +1 -3
- data/lib/js_regex/version.rb +1 -3
- metadata +40 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c133491821c27a1ce87f58e59c828e92cef7e1f7f9be99b015e79e55ded6874e
|
4
|
+
data.tar.gz: 7ea0268f1e0d8cf48c6a56b635d8189dfb1c2f0ad969902eb0d2a9380d01f03a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f31af53ed6fd3213839df7ece799dc951a0f979cf9858cce47ae8151c167de5a5c5464de3d7355782a8bd56f6d142c5d152d4e381ffed9e26f7f51b13c445b1
|
7
|
+
data.tar.gz: 46525b2bb74b11189495f831fa860980291c9be05c5d546e7fc1ed1bee335d4cb29059b6ba1ffb008528c78309c4e75e2f9088570d7691565180821b912ffc96
|
data/lib/js_regex.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
# JsRegex converts ::Regexp instances to JavaScript.
|
4
2
|
#
|
5
3
|
# Usage:
|
@@ -10,6 +8,7 @@
|
|
10
8
|
#
|
11
9
|
class JsRegex
|
12
10
|
require_relative File.join('js_regex', 'conversion')
|
11
|
+
require_relative File.join('js_regex', 'error')
|
13
12
|
require_relative File.join('js_regex', 'version')
|
14
13
|
require 'json'
|
15
14
|
|
@@ -30,4 +29,15 @@ class JsRegex
|
|
30
29
|
def to_s
|
31
30
|
"/#{source.empty? ? '(?:)' : source}/#{options}"
|
32
31
|
end
|
32
|
+
|
33
|
+
def self.new!(ruby_regex, options: nil)
|
34
|
+
js_regex = new(ruby_regex, options: options)
|
35
|
+
if js_regex.warnings.any?
|
36
|
+
raise StandardError.new(
|
37
|
+
"Could not fully convert the given regex #{ruby_regex.inspect}:\n" +
|
38
|
+
js_regex.warnings.join("\n")
|
39
|
+
).extend(JsRegex::Error)
|
40
|
+
end
|
41
|
+
js_regex
|
42
|
+
end
|
33
43
|
end
|
data/lib/js_regex/conversion.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
class JsRegex
|
4
2
|
#
|
5
3
|
# This class acts as a facade, passing a regex to the converters.
|
@@ -9,29 +7,34 @@ class JsRegex
|
|
9
7
|
class Conversion
|
10
8
|
require 'regexp_parser'
|
11
9
|
require_relative 'converter'
|
10
|
+
require_relative 'error'
|
12
11
|
require_relative 'node'
|
13
12
|
require_relative 'second_pass'
|
14
13
|
|
15
14
|
class << self
|
16
|
-
def of(
|
17
|
-
source, warnings = convert_source(
|
18
|
-
options_string = convert_options(
|
15
|
+
def of(input, options: nil)
|
16
|
+
source, warnings = convert_source(input)
|
17
|
+
options_string = convert_options(input, options)
|
19
18
|
[source, options_string, warnings]
|
20
19
|
end
|
21
20
|
|
22
21
|
private
|
23
22
|
|
24
|
-
def convert_source(
|
25
|
-
tree = Regexp::Parser.parse(
|
23
|
+
def convert_source(input)
|
24
|
+
tree = Regexp::Parser.parse(input)
|
26
25
|
context = Converter::Context.new(case_insensitive_root: tree.i?)
|
27
26
|
converted_tree = Converter.convert(tree, context)
|
28
27
|
final_tree = SecondPass.call(converted_tree)
|
29
28
|
[final_tree.to_s, context.warnings]
|
29
|
+
rescue Regexp::Parser::Error => e
|
30
|
+
raise e.extend(JsRegex::Error)
|
30
31
|
end
|
31
32
|
|
32
|
-
def convert_options(
|
33
|
+
def convert_options(input, custom_options)
|
33
34
|
options = custom_options.to_s.scan(/[gimuy]/)
|
34
|
-
|
35
|
+
if input.is_a?(Regexp) && (input.options & Regexp::IGNORECASE).nonzero?
|
36
|
+
options << 'i'
|
37
|
+
end
|
35
38
|
options.uniq.sort.join
|
36
39
|
end
|
37
40
|
end
|
data/lib/js_regex/converter.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
class JsRegex
|
4
2
|
module Converter
|
5
|
-
Dir[File.join(
|
3
|
+
Dir[File.join(__dir__, 'converter', '*.rb')].sort.each do |file|
|
6
4
|
require file
|
7
5
|
end
|
8
6
|
|
@@ -32,18 +30,10 @@ class JsRegex
|
|
32
30
|
MAP[expression.type].new
|
33
31
|
end
|
34
32
|
|
35
|
-
#
|
36
|
-
|
37
|
-
|
38
|
-
# count of all properties supported by Ruby is 92. 75% are below 300 chars.
|
39
|
-
#
|
40
|
-
# Set this to nil if you need full unicode matches and size doesn't matter.
|
41
|
-
attr_writer :surrogate_pair_limit
|
42
|
-
|
43
|
-
def in_surrogate_pair_limit?(&pair_count)
|
44
|
-
@surrogate_pair_limit.nil? || @surrogate_pair_limit >= pair_count.call
|
33
|
+
# Legacy method. Remove in v4.0.0.
|
34
|
+
def surrogate_pair_limit=(_arg)
|
35
|
+
warn '#surrogate_pair_limit= is deprecated and has no effect anymore.'
|
45
36
|
end
|
46
37
|
end
|
47
|
-
self.surrogate_pair_limit = 300
|
48
38
|
end
|
49
39
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require_relative 'base'
|
4
2
|
|
5
3
|
class JsRegex
|
@@ -23,9 +21,8 @@ class JsRegex
|
|
23
21
|
end
|
24
22
|
|
25
23
|
def pass_boundary_with_warning(boundary)
|
26
|
-
|
27
|
-
|
28
|
-
'so it might act differently than in Ruby.')
|
24
|
+
warn_of("The anchor '#{boundary}' at index #{expression.ts} "\
|
25
|
+
'only works at ASCII word boundaries in JavaScript.')
|
29
26
|
boundary
|
30
27
|
end
|
31
28
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
class JsRegex
|
4
2
|
module Converter
|
5
3
|
#
|
@@ -54,11 +52,11 @@ class JsRegex
|
|
54
52
|
def warn_of_unsupported_feature(description = nil)
|
55
53
|
description ||= "#{subtype} #{expression.type}".tr('_', ' ')
|
56
54
|
full_desc = "#{description} '#{expression}'"
|
57
|
-
|
55
|
+
warn_of("Dropped unsupported #{full_desc} at index #{expression.ts}")
|
58
56
|
drop
|
59
57
|
end
|
60
58
|
|
61
|
-
def
|
59
|
+
def warn_of(text)
|
62
60
|
context.warnings << text
|
63
61
|
end
|
64
62
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require_relative 'base'
|
4
2
|
require_relative 'literal_converter'
|
5
3
|
|
@@ -44,7 +42,7 @@ class JsRegex
|
|
44
42
|
when :control, :meta_sequence
|
45
43
|
unicode_escape_codepoint
|
46
44
|
when :literal
|
47
|
-
LiteralConverter.convert_data(
|
45
|
+
LiteralConverter.convert_data(expression.char)
|
48
46
|
when *ESCAPES_SHARED_BY_RUBY_AND_JS
|
49
47
|
pass_through
|
50
48
|
when :bell, :escape
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require_relative 'base'
|
4
2
|
|
5
3
|
class JsRegex
|
@@ -15,42 +13,28 @@ class JsRegex
|
|
15
13
|
if data =~ ASTRAL_PLANE_CODEPOINT_PATTERN
|
16
14
|
convert_astral_data(data)
|
17
15
|
else
|
18
|
-
|
16
|
+
escape_incompatible_bmp_literals(data)
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
20
|
def convert_astral_data(data)
|
23
|
-
data.each_char.each_with_object(Node.new) do |
|
24
|
-
if
|
25
|
-
node <<
|
21
|
+
data.each_char.each_with_object(Node.new) do |char, node|
|
22
|
+
if char =~ ASTRAL_PLANE_CODEPOINT_PATTERN
|
23
|
+
node << surrogate_substitution_for(char)
|
26
24
|
else
|
27
|
-
node <<
|
25
|
+
node << escape_incompatible_bmp_literals(char)
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
32
|
-
def
|
33
|
-
|
34
|
-
ensure_forward_slashes_are_escaped(data)
|
35
|
-
)
|
30
|
+
def escape_incompatible_bmp_literals(data)
|
31
|
+
data.gsub('/', '\\/').gsub(/[\f\n\r\t]/) { |lit| Regexp.escape(lit) }
|
36
32
|
end
|
37
33
|
|
38
34
|
private
|
39
35
|
|
40
|
-
def
|
41
|
-
|
42
|
-
high = ((base / 1024).floor + 55_296).to_s(16)
|
43
|
-
low = (base % 1024 + 56_320).to_s(16)
|
44
|
-
"(?:\\u#{high}\\u#{low})"
|
45
|
-
end
|
46
|
-
|
47
|
-
def ensure_forward_slashes_are_escaped(data)
|
48
|
-
# literal slashes would signify the pattern end in JsRegex#to_s
|
49
|
-
data.gsub(%r{\\?/}, '\\/')
|
50
|
-
end
|
51
|
-
|
52
|
-
def ensure_json_compatibility(data)
|
53
|
-
data.gsub(%r{\\?([\f\n\r\t])}) { Regexp.escape($1) }
|
36
|
+
def surrogate_substitution_for(char)
|
37
|
+
CharacterSet::Writer.write_surrogate_ranges([], [char.codepoints])
|
54
38
|
end
|
55
39
|
end
|
56
40
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require_relative 'base'
|
4
2
|
|
5
3
|
class JsRegex
|
@@ -8,6 +6,9 @@ class JsRegex
|
|
8
6
|
# Template class implementation.
|
9
7
|
#
|
10
8
|
class MetaConverter < JsRegex::Converter::Base
|
9
|
+
DOT_EXPANSION = '(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\n\uD800-\uDFFF])'
|
10
|
+
ML_DOT_EXPANSION = '(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF])'
|
11
|
+
|
11
12
|
private
|
12
13
|
|
13
14
|
def convert_data
|
@@ -15,7 +16,7 @@ class JsRegex
|
|
15
16
|
when :alternation
|
16
17
|
convert_alternatives
|
17
18
|
when :dot
|
18
|
-
expression.multiline? ?
|
19
|
+
expression.multiline? ? ML_DOT_EXPANSION : DOT_EXPANSION
|
19
20
|
else
|
20
21
|
warn_of_unsupported_feature
|
21
22
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require_relative 'base'
|
4
2
|
require 'character_set'
|
5
3
|
|
@@ -15,35 +13,15 @@ class JsRegex
|
|
15
13
|
private
|
16
14
|
|
17
15
|
def convert_data
|
18
|
-
content =
|
19
|
-
|
20
|
-
if expression.negative?
|
21
|
-
if content.astral_part?
|
22
|
-
warn_of_unsupported_feature('astral plane negation by property')
|
23
|
-
end
|
24
|
-
elsif Converter.in_surrogate_pair_limit? { content.astral_part.size }
|
25
|
-
return content.to_s_with_surrogate_alternation
|
26
|
-
else
|
27
|
-
warn_of_unsupported_feature('large astral plane match of property')
|
28
|
-
end
|
16
|
+
content = CharacterSet.of_expression(expression)
|
29
17
|
|
30
|
-
limit_to_bmp_part(content)
|
31
|
-
end
|
32
|
-
|
33
|
-
def character_set_of_property
|
34
|
-
character_set = CharacterSet.of_property(subtype)
|
35
18
|
if expression.case_insensitive? && !context.case_insensitive_root
|
36
|
-
|
37
|
-
|
38
|
-
|
19
|
+
content = content.case_insensitive
|
20
|
+
elsif !expression.case_insensitive? && context.case_insensitive_root
|
21
|
+
warn_of_unsupported_feature('nested case-sensitive property')
|
39
22
|
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def limit_to_bmp_part(content)
|
43
|
-
bmp_part = content.bmp_part
|
44
|
-
return drop if bmp_part.empty?
|
45
23
|
|
46
|
-
|
24
|
+
content.to_s_with_surrogate_ranges
|
47
25
|
end
|
48
26
|
end
|
49
27
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require_relative 'base'
|
4
2
|
require_relative 'escape_converter'
|
5
3
|
require_relative 'type_converter'
|
@@ -28,11 +26,7 @@ class JsRegex
|
|
28
26
|
warn_of_unsupported_feature('nested case-sensitive set')
|
29
27
|
end
|
30
28
|
|
31
|
-
|
32
|
-
content.to_s_with_surrogate_alternation
|
33
|
-
else
|
34
|
-
limit_to_bmp_part_with_warning(content)
|
35
|
-
end
|
29
|
+
content.to_s_with_surrogate_ranges
|
36
30
|
end
|
37
31
|
|
38
32
|
def directly_compatible?
|
@@ -41,9 +35,7 @@ class JsRegex
|
|
41
35
|
|
42
36
|
def all_children_directly_compatible?
|
43
37
|
# note that #each_expression is recursive
|
44
|
-
expression.each_expression
|
45
|
-
return unless child_directly_compatible?(exp)
|
46
|
-
end
|
38
|
+
expression.each_expression.all? { |ch| child_directly_compatible?(ch) }
|
47
39
|
end
|
48
40
|
|
49
41
|
def child_directly_compatible?(exp)
|
@@ -66,13 +58,8 @@ class JsRegex
|
|
66
58
|
end
|
67
59
|
|
68
60
|
def pass_through_with_escaping
|
69
|
-
expression.to_s(:base)
|
70
|
-
|
71
|
-
|
72
|
-
def limit_to_bmp_part_with_warning(content)
|
73
|
-
warn_of_unsupported_feature('large astral plane match of set')
|
74
|
-
bmp_part = content.bmp_part
|
75
|
-
bmp_part.empty? ? drop : bmp_part.to_s(in_brackets: true)
|
61
|
+
string = expression.to_s(:base)
|
62
|
+
LiteralConverter.escape_incompatible_bmp_literals(string)
|
76
63
|
end
|
77
64
|
end
|
78
65
|
end
|
data/lib/js_regex/node.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
class JsRegex
|
4
2
|
#
|
5
3
|
# Converter#convert result. Represents a branch or leaf node with an optional
|
6
4
|
# quantifier as well as type and reference annotations for SecondPass.
|
7
5
|
#
|
8
6
|
class Node
|
7
|
+
require_relative 'error'
|
8
|
+
|
9
9
|
attr_reader :children, :quantifier, :reference, :type
|
10
10
|
|
11
11
|
TYPES = %i[
|
@@ -49,7 +49,9 @@ class JsRegex
|
|
49
49
|
when :backref_num, :captured_group, :plain
|
50
50
|
children.join << quantifier.to_s
|
51
51
|
else
|
52
|
-
raise TypeError
|
52
|
+
raise TypeError.new(
|
53
|
+
"#{type} must be substituted before stringification"
|
54
|
+
).extend(JsRegex::Error)
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
data/lib/js_regex/second_pass.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
class JsRegex
|
4
2
|
#
|
5
3
|
# After conversion of a full Regexp::Expression tree, this
|
@@ -61,7 +59,7 @@ class JsRegex
|
|
61
59
|
|
62
60
|
def condition_permutations(conditions)
|
63
61
|
(0..(conditions.length)).inject([]) do |arr, n|
|
64
|
-
arr
|
62
|
+
arr + conditions.combination(n).to_a
|
65
63
|
end
|
66
64
|
end
|
67
65
|
|
data/lib/js_regex/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js_regex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janosch Müller
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: character_set
|
@@ -16,37 +16,51 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: regexp_parser
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1
|
33
|
+
version: '2.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1
|
40
|
+
version: '2.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: regexp_property_values
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0
|
47
|
+
version: '1.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mini_racer
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
@@ -58,70 +72,70 @@ dependencies:
|
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '13.0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '13.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: rspec
|
84
|
+
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
89
|
+
version: '3.10'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3.
|
96
|
+
version: '3.10'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: codecov
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: 0.2.12
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 0.2.12
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: gouteur
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '1.0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
124
|
+
version: '1.0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: rubocop
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
131
|
+
version: '1.8'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
138
|
+
version: '1.8'
|
125
139
|
description: JsRegex converts Ruby's native regular expressions for JavaScript, taking
|
126
140
|
care of various incompatibilities and returning warnings for unsolvable differences.
|
127
141
|
email:
|
@@ -149,6 +163,7 @@ files:
|
|
149
163
|
- lib/js_regex/converter/subexpression_converter.rb
|
150
164
|
- lib/js_regex/converter/type_converter.rb
|
151
165
|
- lib/js_regex/converter/unsupported_token_converter.rb
|
166
|
+
- lib/js_regex/error.rb
|
152
167
|
- lib/js_regex/node.rb
|
153
168
|
- lib/js_regex/second_pass.rb
|
154
169
|
- lib/js_regex/version.rb
|
@@ -156,7 +171,7 @@ homepage: https://github.com/jaynetics/js_regex
|
|
156
171
|
licenses:
|
157
172
|
- MIT
|
158
173
|
metadata: {}
|
159
|
-
post_install_message:
|
174
|
+
post_install_message:
|
160
175
|
rdoc_options: []
|
161
176
|
require_paths:
|
162
177
|
- lib
|
@@ -171,8 +186,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
186
|
- !ruby/object:Gem::Version
|
172
187
|
version: '0'
|
173
188
|
requirements: []
|
174
|
-
rubygems_version: 3.
|
175
|
-
signing_key:
|
189
|
+
rubygems_version: 3.2.3
|
190
|
+
signing_key:
|
176
191
|
specification_version: 4
|
177
192
|
summary: Converts Ruby regexes to JavaScript regexes.
|
178
193
|
test_files: []
|