@zokugun/regexp 0.3.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.
- package/LICENSE +22 -0
- package/README.md +141 -0
- package/lib/cjs/escape.cjs +7 -0
- package/lib/cjs/escape.d.cts +1 -0
- package/lib/cjs/generated/parser.cjs +2810 -0
- package/lib/cjs/generated/parser.d.cts +2 -0
- package/lib/cjs/index.cjs +18 -0
- package/lib/cjs/index.d.cts +7 -0
- package/lib/cjs/parse.cjs +16 -0
- package/lib/cjs/parse.d.cts +2 -0
- package/lib/cjs/stringify.cjs +228 -0
- package/lib/cjs/stringify.d.cts +2 -0
- package/lib/cjs/transform.cjs +119 -0
- package/lib/cjs/transform.d.cts +7 -0
- package/lib/cjs/translate.cjs +139 -0
- package/lib/cjs/translate.d.cts +4 -0
- package/lib/cjs/types.cjs +55 -0
- package/lib/cjs/types.d.cts +231 -0
- package/lib/cjs/visit.cjs +35 -0
- package/lib/cjs/visit.d.cts +2 -0
- package/lib/esm/escape.d.mts +1 -0
- package/lib/esm/escape.mjs +4 -0
- package/lib/esm/generated/parser.d.mts +2 -0
- package/lib/esm/generated/parser.mjs +2807 -0
- package/lib/esm/index.d.mts +7 -0
- package/lib/esm/index.mjs +7 -0
- package/lib/esm/parse.d.mts +2 -0
- package/lib/esm/parse.mjs +13 -0
- package/lib/esm/stringify.d.mts +2 -0
- package/lib/esm/stringify.mjs +225 -0
- package/lib/esm/transform.d.mts +7 -0
- package/lib/esm/transform.mjs +116 -0
- package/lib/esm/translate.d.mts +4 -0
- package/lib/esm/translate.mjs +136 -0
- package/lib/esm/types.d.mts +231 -0
- package/lib/esm/types.mjs +52 -0
- package/lib/esm/visit.d.mts +2 -0
- package/lib/esm/visit.mjs +32 -0
- package/package.json +115 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Flavor = exports.TokenType = exports.translate = exports.transform = exports.visit = exports.stringify = exports.parse = void 0;
|
|
4
|
+
var escape_js_1 = require("./escape.cjs");
|
|
5
|
+
Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return escape_js_1.escape; } });
|
|
6
|
+
var parse_js_1 = require("./parse.cjs");
|
|
7
|
+
Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parse_js_1.parse; } });
|
|
8
|
+
var stringify_js_1 = require("./stringify.cjs");
|
|
9
|
+
Object.defineProperty(exports, "stringify", { enumerable: true, get: function () { return stringify_js_1.stringify; } });
|
|
10
|
+
var visit_js_1 = require("./visit.cjs");
|
|
11
|
+
Object.defineProperty(exports, "visit", { enumerable: true, get: function () { return visit_js_1.visit; } });
|
|
12
|
+
var transform_js_1 = require("./transform.cjs");
|
|
13
|
+
Object.defineProperty(exports, "transform", { enumerable: true, get: function () { return transform_js_1.transform; } });
|
|
14
|
+
var translate_js_1 = require("./translate.cjs");
|
|
15
|
+
Object.defineProperty(exports, "translate", { enumerable: true, get: function () { return translate_js_1.translate; } });
|
|
16
|
+
var types_js_1 = require("./types.cjs");
|
|
17
|
+
Object.defineProperty(exports, "TokenType", { enumerable: true, get: function () { return types_js_1.TokenType; } });
|
|
18
|
+
Object.defineProperty(exports, "Flavor", { enumerable: true, get: function () { return types_js_1.Flavor; } });
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { escape } from './escape.cjs';
|
|
2
|
+
export { parse } from './parse.cjs';
|
|
3
|
+
export { stringify } from './stringify.cjs';
|
|
4
|
+
export { visit } from './visit.cjs';
|
|
5
|
+
export { transform, type TransformContext } from './transform.cjs';
|
|
6
|
+
export { translate } from './translate.cjs';
|
|
7
|
+
export { TokenType, Flavor, type Token } from './types.cjs';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parse = parse;
|
|
4
|
+
const is_it_type_1 = require("@zokugun/is-it-type");
|
|
5
|
+
const parser_js_1 = require("./generated/parser.cjs");
|
|
6
|
+
function parse(value) {
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
return (0, parser_js_1.pegParse)(value);
|
|
9
|
+
}
|
|
10
|
+
else if ((0, is_it_type_1.isRegExp)(value)) {
|
|
11
|
+
return (0, parser_js_1.pegParse)(value.toString());
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
throw new TypeError('The regexp to parse must be represented as a string.');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stringify = stringify;
|
|
4
|
+
const is_it_type_1 = require("@zokugun/is-it-type");
|
|
5
|
+
const types_js_1 = require("./types.cjs");
|
|
6
|
+
function stringify(tokens) {
|
|
7
|
+
if (Array.isArray(tokens)) {
|
|
8
|
+
let result = '';
|
|
9
|
+
for (const token of tokens) {
|
|
10
|
+
result += stringify(token);
|
|
11
|
+
}
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
else if ((0, is_it_type_1.isRegExp)(tokens)) {
|
|
15
|
+
return tokens.toString();
|
|
16
|
+
}
|
|
17
|
+
else if (tokens) {
|
|
18
|
+
return toString(tokens, '');
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function toString(value, result) {
|
|
25
|
+
if (value.type === types_js_1.TokenType.ALTERNATE) {
|
|
26
|
+
for (let i = 0, l = (value.body).length; i < l; i++) {
|
|
27
|
+
if (i !== 0) {
|
|
28
|
+
result += '|';
|
|
29
|
+
}
|
|
30
|
+
result = toString((value.body)[i], result);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else if (value.type === types_js_1.TokenType.ANY) {
|
|
34
|
+
result += '.';
|
|
35
|
+
}
|
|
36
|
+
else if (value.type === types_js_1.TokenType.BACK_REFERENCE) {
|
|
37
|
+
result += `\\${value.code}`;
|
|
38
|
+
}
|
|
39
|
+
else if (value.type === types_js_1.TokenType.BACKSPACE) {
|
|
40
|
+
result += '\\b';
|
|
41
|
+
}
|
|
42
|
+
else if (value.type === types_js_1.TokenType.BEGIN) {
|
|
43
|
+
result += '^';
|
|
44
|
+
}
|
|
45
|
+
else if (value.type === types_js_1.TokenType.CAPTURE_GROUP) {
|
|
46
|
+
result += '(';
|
|
47
|
+
result = toString(value.body, result);
|
|
48
|
+
result += ')';
|
|
49
|
+
}
|
|
50
|
+
else if (value.type === types_js_1.TokenType.CARRIAGE_RETURN) {
|
|
51
|
+
result += '\\r';
|
|
52
|
+
}
|
|
53
|
+
else if (value.type === types_js_1.TokenType.CHARSET) {
|
|
54
|
+
result += '[';
|
|
55
|
+
if (value.negated) {
|
|
56
|
+
result += '^';
|
|
57
|
+
}
|
|
58
|
+
for (const item of value.body) {
|
|
59
|
+
result = toString(item, result);
|
|
60
|
+
}
|
|
61
|
+
result += ']';
|
|
62
|
+
}
|
|
63
|
+
else if (value.type === types_js_1.TokenType.CONTROL) {
|
|
64
|
+
result += `\\c${value.code}`;
|
|
65
|
+
}
|
|
66
|
+
else if (value.type === types_js_1.TokenType.DIGIT) {
|
|
67
|
+
result += '\\d';
|
|
68
|
+
}
|
|
69
|
+
else if (value.type === types_js_1.TokenType.END) {
|
|
70
|
+
result += '$';
|
|
71
|
+
}
|
|
72
|
+
else if (value.type === types_js_1.TokenType.ESCAPE) {
|
|
73
|
+
result += `\\${value.code}`;
|
|
74
|
+
}
|
|
75
|
+
else if (value.type === types_js_1.TokenType.FORM_FEED) {
|
|
76
|
+
result += '\\f';
|
|
77
|
+
}
|
|
78
|
+
else if (value.type === types_js_1.TokenType.HEX) {
|
|
79
|
+
result += `\\x${value.code}`;
|
|
80
|
+
}
|
|
81
|
+
else if (value.type === types_js_1.TokenType.LINE_FEED) {
|
|
82
|
+
result += '\\n';
|
|
83
|
+
}
|
|
84
|
+
else if (value.type === types_js_1.TokenType.LITERAL) {
|
|
85
|
+
result += value.text;
|
|
86
|
+
}
|
|
87
|
+
else if (value.type === types_js_1.TokenType.MATCH) {
|
|
88
|
+
for (const item of value.body) {
|
|
89
|
+
result = toString(item, result);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else if (value.type === types_js_1.TokenType.MODIFIED_GROUP) {
|
|
93
|
+
result += '(?';
|
|
94
|
+
result += value.modifiers.positive.join('');
|
|
95
|
+
if (value.modifiers.negative.length > 0) {
|
|
96
|
+
result += `-${value.modifiers.negative.join('')}`;
|
|
97
|
+
}
|
|
98
|
+
result += ':';
|
|
99
|
+
result = toString(value.body, result);
|
|
100
|
+
result += ')';
|
|
101
|
+
}
|
|
102
|
+
else if (value.type === types_js_1.TokenType.MODIFIER) {
|
|
103
|
+
result += '(?';
|
|
104
|
+
result += value.positive.join('');
|
|
105
|
+
if (value.negative.length > 0) {
|
|
106
|
+
result += `-${value.negative.join('')}`;
|
|
107
|
+
}
|
|
108
|
+
result += ')';
|
|
109
|
+
}
|
|
110
|
+
else if (value.type === types_js_1.TokenType.NAMED_BACK_REFERENCE) {
|
|
111
|
+
result += `\\k<${value.name}>`;
|
|
112
|
+
}
|
|
113
|
+
else if (value.type === types_js_1.TokenType.NAMED_GROUP) {
|
|
114
|
+
result += `(?<${value.name}>`;
|
|
115
|
+
result = toString(value.body, result);
|
|
116
|
+
result += ')';
|
|
117
|
+
}
|
|
118
|
+
else if (value.type === types_js_1.TokenType.NEGATIVE_LOOKAHEAD) {
|
|
119
|
+
result += '(?!';
|
|
120
|
+
result = toString(value.body, result);
|
|
121
|
+
result += ')';
|
|
122
|
+
}
|
|
123
|
+
else if (value.type === types_js_1.TokenType.NEGATIVE_LOOKBEHIND) {
|
|
124
|
+
result += '(?<!';
|
|
125
|
+
result = toString(value.body, result);
|
|
126
|
+
result += ')';
|
|
127
|
+
}
|
|
128
|
+
else if (value.type === types_js_1.TokenType.NON_CAPTURE_GROUP) {
|
|
129
|
+
result += '(?:';
|
|
130
|
+
result = toString(value.body, result);
|
|
131
|
+
result += ')';
|
|
132
|
+
}
|
|
133
|
+
else if (value.type === types_js_1.TokenType.NON_DIGIT) {
|
|
134
|
+
result += '\\D';
|
|
135
|
+
}
|
|
136
|
+
else if (value.type === types_js_1.TokenType.NON_UNICODE_PROPERTY) {
|
|
137
|
+
result += `\\P{${value.property}}`;
|
|
138
|
+
}
|
|
139
|
+
else if (value.type === types_js_1.TokenType.NON_WHITE_SPACE) {
|
|
140
|
+
result += '\\S';
|
|
141
|
+
}
|
|
142
|
+
else if (value.type === types_js_1.TokenType.NON_WORD) {
|
|
143
|
+
result += '\\W';
|
|
144
|
+
}
|
|
145
|
+
else if (value.type === types_js_1.TokenType.NON_WORD_BOUNDARY) {
|
|
146
|
+
result += '\\B';
|
|
147
|
+
}
|
|
148
|
+
else if (value.type === types_js_1.TokenType.NUL) {
|
|
149
|
+
result += '\\0';
|
|
150
|
+
}
|
|
151
|
+
else if (value.type === types_js_1.TokenType.OCTAL) {
|
|
152
|
+
result += `\\0${value.code}`;
|
|
153
|
+
}
|
|
154
|
+
else if (value.type === types_js_1.TokenType.PATTERN) {
|
|
155
|
+
result += '/';
|
|
156
|
+
result = toString(value.body, result);
|
|
157
|
+
result += '/';
|
|
158
|
+
if (value.modifiers) {
|
|
159
|
+
result += value.modifiers.positive.join('');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else if (value.type === types_js_1.TokenType.POSITIVE_LOOKAHEAD) {
|
|
163
|
+
result += '(?=';
|
|
164
|
+
result = toString(value.body, result);
|
|
165
|
+
result += ')';
|
|
166
|
+
}
|
|
167
|
+
else if (value.type === types_js_1.TokenType.POSITIVE_LOOKBEHIND) {
|
|
168
|
+
result += '(?<=';
|
|
169
|
+
result = toString(value.body, result);
|
|
170
|
+
result += ')';
|
|
171
|
+
}
|
|
172
|
+
else if (value.type === types_js_1.TokenType.QUANTIFIED) {
|
|
173
|
+
result = toString(value.body, result);
|
|
174
|
+
result = toString(value.quantifier, result);
|
|
175
|
+
}
|
|
176
|
+
else if (value.type === types_js_1.TokenType.QUANTIFIER) {
|
|
177
|
+
if (value.max === Infinity) {
|
|
178
|
+
if (value.min === 0) {
|
|
179
|
+
result += '*';
|
|
180
|
+
}
|
|
181
|
+
else if (value.min === 1) {
|
|
182
|
+
result += '+';
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
result += `{${value.min},}`;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (value.min === 0 && value.max === 1) {
|
|
189
|
+
result += '?';
|
|
190
|
+
}
|
|
191
|
+
else if (value.min === value.max) {
|
|
192
|
+
result += `{${value.min}}`;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
result += `{${value.min},${value.max}}`;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (value.type === types_js_1.TokenType.RANGE) {
|
|
199
|
+
result = toString(value.begin, result);
|
|
200
|
+
result += '-';
|
|
201
|
+
result = toString(value.end, result);
|
|
202
|
+
}
|
|
203
|
+
else if (value.type === types_js_1.TokenType.TAB) {
|
|
204
|
+
result += '\\t';
|
|
205
|
+
}
|
|
206
|
+
else if (value.type === types_js_1.TokenType.UNICODE) {
|
|
207
|
+
result += `\\u{${value.code}}`;
|
|
208
|
+
}
|
|
209
|
+
else if (value.type === types_js_1.TokenType.UNICODE_PROPERTY) {
|
|
210
|
+
result += `\\p{${value.property}}`;
|
|
211
|
+
}
|
|
212
|
+
else if (value.type === types_js_1.TokenType.UTF16) {
|
|
213
|
+
result += `\\u${value.code}`;
|
|
214
|
+
}
|
|
215
|
+
else if (value.type === types_js_1.TokenType.VERTICAL_TAB) {
|
|
216
|
+
result += '\\v';
|
|
217
|
+
}
|
|
218
|
+
else if (value.type === types_js_1.TokenType.WHITE_SPACE) {
|
|
219
|
+
result += '\\s';
|
|
220
|
+
}
|
|
221
|
+
else if (value.type === types_js_1.TokenType.WORD) {
|
|
222
|
+
result += '\\w';
|
|
223
|
+
}
|
|
224
|
+
else if (value.type === types_js_1.TokenType.WORD_BOUNDARY) {
|
|
225
|
+
result += '\\b';
|
|
226
|
+
}
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transform = transform;
|
|
4
|
+
const parse_js_1 = require("./parse.cjs");
|
|
5
|
+
function transform(tokens, callback) {
|
|
6
|
+
if (typeof callback === 'function') {
|
|
7
|
+
transformFunc(tokens, null, null, callback);
|
|
8
|
+
}
|
|
9
|
+
else if (callback) {
|
|
10
|
+
transformMap(tokens, callback);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function transformFunc(tokens, parent, key, callback) {
|
|
14
|
+
if (Array.isArray(tokens)) {
|
|
15
|
+
let i = -1;
|
|
16
|
+
let notSkipped = true;
|
|
17
|
+
const that = {
|
|
18
|
+
remove() {
|
|
19
|
+
tokens.splice(i, 1);
|
|
20
|
+
--i;
|
|
21
|
+
notSkipped = false;
|
|
22
|
+
},
|
|
23
|
+
replace(token, transform) {
|
|
24
|
+
let replacement;
|
|
25
|
+
if (typeof token === 'string') {
|
|
26
|
+
replacement = (0, parse_js_1.parse)(token).body;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
replacement = token;
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(replacement)) {
|
|
32
|
+
tokens.splice(i, 1, ...replacement);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
tokens.splice(i, 1, replacement);
|
|
36
|
+
}
|
|
37
|
+
if (transform) {
|
|
38
|
+
--i;
|
|
39
|
+
}
|
|
40
|
+
else if (Array.isArray(replacement)) {
|
|
41
|
+
i += replacement.length - 1;
|
|
42
|
+
}
|
|
43
|
+
notSkipped = false;
|
|
44
|
+
},
|
|
45
|
+
transform(tokensArg, parentArg, keyArg) {
|
|
46
|
+
transformFunc(tokensArg, parentArg, keyArg, callback);
|
|
47
|
+
notSkipped = false;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
while (++i < tokens.length) {
|
|
51
|
+
const token = tokens[i];
|
|
52
|
+
callback.call(that, token, parent, key, i);
|
|
53
|
+
if (notSkipped) {
|
|
54
|
+
if ('body' in token && token.body) {
|
|
55
|
+
transformFunc(token.body, token, 'body', callback);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
notSkipped = true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (parent) {
|
|
64
|
+
let notSkipped = true;
|
|
65
|
+
const that = {
|
|
66
|
+
remove() {
|
|
67
|
+
if (parent && key) {
|
|
68
|
+
delete parent[key];
|
|
69
|
+
}
|
|
70
|
+
notSkipped = false;
|
|
71
|
+
},
|
|
72
|
+
replace(token, transform) {
|
|
73
|
+
let replacement;
|
|
74
|
+
if (typeof token === 'string') {
|
|
75
|
+
replacement = (0, parse_js_1.parse)(token).body;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
replacement = token;
|
|
79
|
+
}
|
|
80
|
+
if (parent && key) {
|
|
81
|
+
parent[key] = replacement;
|
|
82
|
+
}
|
|
83
|
+
if (transform && replacement) {
|
|
84
|
+
transformFunc(replacement, parent, key, callback);
|
|
85
|
+
}
|
|
86
|
+
notSkipped = false;
|
|
87
|
+
},
|
|
88
|
+
transform(tokensArg, parentArg, keyArg) {
|
|
89
|
+
transformFunc(tokensArg, parentArg, keyArg, callback);
|
|
90
|
+
notSkipped = false;
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
callback.call(that, tokens, parent, key, null);
|
|
94
|
+
if (notSkipped) {
|
|
95
|
+
const maybeBody = tokens.body;
|
|
96
|
+
if (maybeBody) {
|
|
97
|
+
transformFunc(maybeBody, tokens, 'body', callback);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
notSkipped = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
callback.call(null, tokens, null, null, null);
|
|
106
|
+
const maybeBody = tokens.body;
|
|
107
|
+
if (maybeBody) {
|
|
108
|
+
transformFunc(maybeBody, tokens, 'body', callback);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function transformMap(tokens, callbackMap) {
|
|
113
|
+
transformFunc(tokens, null, null, function (token, parent, key, index) {
|
|
114
|
+
const fn = callbackMap[token.type];
|
|
115
|
+
if (fn) {
|
|
116
|
+
fn.call(this, token, parent, key, index);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Token, type TokenType, type Transformer } from './types.cjs';
|
|
2
|
+
export type TransformContext = {
|
|
3
|
+
remove(): void;
|
|
4
|
+
replace(token: Token | string | Token[], transform?: boolean): void;
|
|
5
|
+
transform(tokensArg: Token | Token[] | undefined, parentArg: Token | null, keyArg: string | null): void;
|
|
6
|
+
};
|
|
7
|
+
export declare function transform(tokens: Token | Token[] | undefined, callback?: Transformer | Partial<Record<TokenType, Transformer>>): void;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.translate = translate;
|
|
4
|
+
const is_it_type_1 = require("@zokugun/is-it-type");
|
|
5
|
+
const parse_js_1 = require("./parse.cjs");
|
|
6
|
+
const stringify_js_1 = require("./stringify.cjs");
|
|
7
|
+
const transform_js_1 = require("./transform.cjs");
|
|
8
|
+
const types_js_1 = require("./types.cjs");
|
|
9
|
+
const TRANSLATORS = {
|
|
10
|
+
[types_js_1.Flavor.ES2018]: translateES2018,
|
|
11
|
+
};
|
|
12
|
+
function translate(value, target, toString = true) {
|
|
13
|
+
const translator = TRANSLATORS[target];
|
|
14
|
+
if (!translator) {
|
|
15
|
+
if (typeof value === 'string') {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
if ((0, is_it_type_1.isRegExp)(value)) {
|
|
19
|
+
return value.toString();
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
let result;
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
result = [];
|
|
26
|
+
for (const item of value) {
|
|
27
|
+
result.push(translator(item));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else if ((0, is_it_type_1.isRegExp)(value) || (0, is_it_type_1.isString)(value)) {
|
|
31
|
+
result = translator((0, parse_js_1.parse)(value));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
result = translator(value);
|
|
35
|
+
}
|
|
36
|
+
if (toString) {
|
|
37
|
+
return (0, stringify_js_1.stringify)(result);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function translateES2018(ast) {
|
|
44
|
+
const astToken = ast;
|
|
45
|
+
let caseless = false;
|
|
46
|
+
let inCharset = false;
|
|
47
|
+
let sets = null;
|
|
48
|
+
(0, transform_js_1.transform)(astToken, {
|
|
49
|
+
[types_js_1.TokenType.CHARSET]: function (token) {
|
|
50
|
+
const charset = token;
|
|
51
|
+
inCharset = true;
|
|
52
|
+
sets = {};
|
|
53
|
+
this.transform(charset.body, token, 'body');
|
|
54
|
+
inCharset = false;
|
|
55
|
+
},
|
|
56
|
+
[types_js_1.TokenType.LITERAL]: function (token) {
|
|
57
|
+
const literal = token;
|
|
58
|
+
if (caseless) {
|
|
59
|
+
let text = '';
|
|
60
|
+
let upper;
|
|
61
|
+
let lower;
|
|
62
|
+
let upperLower;
|
|
63
|
+
for (const c of literal.text.split('')) {
|
|
64
|
+
upper = c.toUpperCase();
|
|
65
|
+
lower = c.toLowerCase();
|
|
66
|
+
if (upper === lower) {
|
|
67
|
+
text += upper;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
upperLower = `${upper}${lower}`;
|
|
71
|
+
if (inCharset) {
|
|
72
|
+
if (!sets[upperLower]) {
|
|
73
|
+
sets[upperLower] = true;
|
|
74
|
+
text += upperLower;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
text += `[${upperLower}]`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (literal.text !== text) {
|
|
83
|
+
this.replace(text);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
[types_js_1.TokenType.MODIFIED_GROUP]: function (token) {
|
|
88
|
+
const modifier = token;
|
|
89
|
+
if (modifier.modifiers.positive.includes('i')) {
|
|
90
|
+
caseless = true;
|
|
91
|
+
}
|
|
92
|
+
if (modifier.modifiers.negative.includes('i')) {
|
|
93
|
+
caseless = false;
|
|
94
|
+
}
|
|
95
|
+
this.replace({
|
|
96
|
+
type: types_js_1.TokenType.NON_CAPTURE_GROUP,
|
|
97
|
+
body: modifier.body,
|
|
98
|
+
}, true);
|
|
99
|
+
},
|
|
100
|
+
[types_js_1.TokenType.MODIFIER]: function (token) {
|
|
101
|
+
const modifier = token;
|
|
102
|
+
if (modifier.positive.includes('i')) {
|
|
103
|
+
caseless = true;
|
|
104
|
+
}
|
|
105
|
+
if (modifier.negative.includes('i')) {
|
|
106
|
+
caseless = false;
|
|
107
|
+
}
|
|
108
|
+
this.remove();
|
|
109
|
+
},
|
|
110
|
+
[types_js_1.TokenType.RANGE]: function (token) {
|
|
111
|
+
const range = token;
|
|
112
|
+
if (caseless) {
|
|
113
|
+
let beginUpper;
|
|
114
|
+
let beginLower;
|
|
115
|
+
if (range.begin.type === types_js_1.TokenType.LITERAL) {
|
|
116
|
+
beginUpper = range.begin.text.toUpperCase();
|
|
117
|
+
beginLower = range.begin.text.toLowerCase();
|
|
118
|
+
}
|
|
119
|
+
let endUpper;
|
|
120
|
+
let endLower;
|
|
121
|
+
if (range.end.type === types_js_1.TokenType.LITERAL) {
|
|
122
|
+
endUpper = range.end.text.toUpperCase();
|
|
123
|
+
endLower = range.end.text.toLowerCase();
|
|
124
|
+
}
|
|
125
|
+
if (beginUpper && endUpper && beginUpper !== beginLower && (beginUpper.codePointAt(0) - endUpper.codePointAt(0)) === (beginLower.codePointAt(0) - endLower.codePointAt(0))) {
|
|
126
|
+
const range = `${beginUpper}-${endUpper}${beginLower}-${endLower}`;
|
|
127
|
+
if (sets[range]) {
|
|
128
|
+
this.remove();
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
sets[range] = true;
|
|
132
|
+
this.replace(range);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
return astToken;
|
|
139
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Flavor, type Token } from './types.cjs';
|
|
2
|
+
export declare function translate(value: string | RegExp | Token | Token[], target: Flavor, toString?: true): string;
|
|
3
|
+
export declare function translate(value: Token[], target: Flavor, toString: false): Token[];
|
|
4
|
+
export declare function translate(value: string | RegExp | Token, target: Flavor, toString: false): Token;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Flavor = exports.TokenType = void 0;
|
|
4
|
+
var TokenType;
|
|
5
|
+
(function (TokenType) {
|
|
6
|
+
TokenType["ALTERNATE"] = "alternate";
|
|
7
|
+
TokenType["ANY"] = "any";
|
|
8
|
+
TokenType["BACK_REFERENCE"] = "back-reference";
|
|
9
|
+
TokenType["BACKSPACE"] = "backspace";
|
|
10
|
+
TokenType["BEGIN"] = "begin";
|
|
11
|
+
TokenType["CAPTURE_GROUP"] = "capture-group";
|
|
12
|
+
TokenType["CARRIAGE_RETURN"] = "carriage-return";
|
|
13
|
+
TokenType["CHARSET"] = "charset";
|
|
14
|
+
TokenType["CONTROL"] = "control";
|
|
15
|
+
TokenType["DIGIT"] = "digit";
|
|
16
|
+
TokenType["END"] = "end";
|
|
17
|
+
TokenType["ESCAPE"] = "escape";
|
|
18
|
+
TokenType["FORM_FEED"] = "form-feed";
|
|
19
|
+
TokenType["HEX"] = "hex";
|
|
20
|
+
TokenType["LINE_FEED"] = "line-feed";
|
|
21
|
+
TokenType["LITERAL"] = "literal";
|
|
22
|
+
TokenType["MATCH"] = "match";
|
|
23
|
+
TokenType["MODIFIED_GROUP"] = "modified-group";
|
|
24
|
+
TokenType["MODIFIER"] = "modifier";
|
|
25
|
+
TokenType["NAMED_BACK_REFERENCE"] = "named-back-reference";
|
|
26
|
+
TokenType["NAMED_GROUP"] = "named-group";
|
|
27
|
+
TokenType["NEGATIVE_LOOKAHEAD"] = "negative-lookahead";
|
|
28
|
+
TokenType["NEGATIVE_LOOKBEHIND"] = "negative-lookbehind";
|
|
29
|
+
TokenType["NON_CAPTURE_GROUP"] = "non-capture-group";
|
|
30
|
+
TokenType["NON_DIGIT"] = "non-digit";
|
|
31
|
+
TokenType["NON_UNICODE_PROPERTY"] = "non-unicode-property";
|
|
32
|
+
TokenType["NON_WHITE_SPACE"] = "non-white-space";
|
|
33
|
+
TokenType["NON_WORD"] = "non-word";
|
|
34
|
+
TokenType["NON_WORD_BOUNDARY"] = "non-word-boundary";
|
|
35
|
+
TokenType["NUL"] = "nul";
|
|
36
|
+
TokenType["OCTAL"] = "octal";
|
|
37
|
+
TokenType["PATTERN"] = "pattern";
|
|
38
|
+
TokenType["POSITIVE_LOOKAHEAD"] = "positive-lookahead";
|
|
39
|
+
TokenType["POSITIVE_LOOKBEHIND"] = "positive-lookbehind";
|
|
40
|
+
TokenType["QUANTIFIED"] = "quantified";
|
|
41
|
+
TokenType["QUANTIFIER"] = "quantifier";
|
|
42
|
+
TokenType["RANGE"] = "range";
|
|
43
|
+
TokenType["TAB"] = "tab";
|
|
44
|
+
TokenType["UNICODE"] = "unicode";
|
|
45
|
+
TokenType["UNICODE_PROPERTY"] = "unicode-property";
|
|
46
|
+
TokenType["UTF16"] = "utf-16";
|
|
47
|
+
TokenType["VERTICAL_TAB"] = "vertical-tab";
|
|
48
|
+
TokenType["WHITE_SPACE"] = "white-space";
|
|
49
|
+
TokenType["WORD"] = "word";
|
|
50
|
+
TokenType["WORD_BOUNDARY"] = "word-boundary";
|
|
51
|
+
})(TokenType || (exports.TokenType = TokenType = {}));
|
|
52
|
+
var Flavor;
|
|
53
|
+
(function (Flavor) {
|
|
54
|
+
Flavor["ES2018"] = "es2018";
|
|
55
|
+
})(Flavor || (exports.Flavor = Flavor = {}));
|