@renovatebot/good-enough-parser 1.1.24 → 2.0.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/README.md +6 -6
- package/dist/cjs/index.d.ts +4 -4
- package/dist/cjs/index.js +7 -7
- package/dist/cjs/lang/groovy.d.ts +6 -6
- package/dist/cjs/lang/groovy.js +83 -83
- package/dist/cjs/lang/index.d.ts +20 -20
- package/dist/cjs/lang/index.js +56 -56
- package/dist/cjs/lang/index.js.map +1 -1
- package/dist/cjs/lang/python.d.ts +6 -6
- package/dist/cjs/lang/python.js +73 -73
- package/dist/cjs/lang/scala.d.ts +6 -6
- package/dist/cjs/lang/scala.js +71 -71
- package/dist/cjs/lang/starlark.d.ts +6 -6
- package/dist/cjs/lang/starlark.js +58 -58
- package/dist/cjs/lang/types.d.ts +6 -6
- package/dist/cjs/lang/types.js +2 -2
- package/dist/cjs/lexer/bracket.d.ts +6 -6
- package/dist/cjs/lexer/bracket.js +56 -57
- package/dist/cjs/lexer/bracket.js.map +1 -1
- package/dist/cjs/lexer/comment.d.ts +3 -3
- package/dist/cjs/lexer/comment.js +43 -44
- package/dist/cjs/lexer/comment.js.map +1 -1
- package/dist/cjs/lexer/index.d.ts +5 -5
- package/dist/cjs/lexer/index.js +154 -155
- package/dist/cjs/lexer/index.js.map +1 -1
- package/dist/cjs/lexer/number.d.ts +2 -2
- package/dist/cjs/lexer/number.js +17 -18
- package/dist/cjs/lexer/number.js.map +1 -1
- package/dist/cjs/lexer/operator.d.ts +2 -2
- package/dist/cjs/lexer/operator.js +23 -24
- package/dist/cjs/lexer/operator.js.map +1 -1
- package/dist/cjs/lexer/rules.d.ts +4 -4
- package/dist/cjs/lexer/rules.js +74 -74
- package/dist/cjs/lexer/rules.js.map +1 -1
- package/dist/cjs/lexer/string.d.ts +2 -2
- package/dist/cjs/lexer/string.js +180 -181
- package/dist/cjs/lexer/string.js.map +1 -1
- package/dist/cjs/lexer/symbol.d.ts +2 -2
- package/dist/cjs/lexer/symbol.js +17 -18
- package/dist/cjs/lexer/symbol.js.map +1 -1
- package/dist/cjs/lexer/token.d.ts +3 -3
- package/dist/cjs/lexer/token.js +63 -64
- package/dist/cjs/lexer/token.js.map +1 -1
- package/dist/cjs/lexer/types.d.ts +142 -142
- package/dist/cjs/lexer/types.js +2 -2
- package/dist/cjs/parser/cursor.d.ts +2 -2
- package/dist/cjs/parser/cursor.js +12 -13
- package/dist/cjs/parser/cursor.js.map +1 -1
- package/dist/cjs/parser/index.d.ts +3 -3
- package/dist/cjs/parser/index.js +19 -19
- package/dist/cjs/parser/tree.d.ts +4 -4
- package/dist/cjs/parser/tree.js +245 -246
- package/dist/cjs/parser/tree.js.map +1 -1
- package/dist/cjs/parser/types.d.ts +33 -33
- package/dist/cjs/parser/types.js +2 -2
- package/dist/cjs/query/builder.d.ts +144 -144
- package/dist/cjs/query/builder.d.ts.map +1 -1
- package/dist/cjs/query/builder.js +333 -332
- package/dist/cjs/query/builder.js.map +1 -1
- package/dist/cjs/query/handler.d.ts +2 -2
- package/dist/cjs/query/handler.js +9 -10
- package/dist/cjs/query/handler.js.map +1 -1
- package/dist/cjs/query/index.d.ts +2 -2
- package/dist/cjs/query/index.js +32 -32
- package/dist/cjs/query/matchers/abstract-matcher.d.ts +9 -9
- package/dist/cjs/query/matchers/abstract-matcher.js +36 -36
- package/dist/cjs/query/matchers/abstract-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/alt-matcher.d.ts +10 -10
- package/dist/cjs/query/matchers/alt-matcher.js +33 -33
- package/dist/cjs/query/matchers/alt-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/anchor-matcher.d.ts +17 -17
- package/dist/cjs/query/matchers/anchor-matcher.js +50 -50
- package/dist/cjs/query/matchers/anchor-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/comment-matcher.d.ts +10 -10
- package/dist/cjs/query/matchers/comment-matcher.js +39 -39
- package/dist/cjs/query/matchers/comment-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/index.d.ts +6 -6
- package/dist/cjs/query/matchers/index.js +22 -22
- package/dist/cjs/query/matchers/many-matcher.d.ts +13 -13
- package/dist/cjs/query/matchers/many-matcher.js +61 -61
- package/dist/cjs/query/matchers/many-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/num-matcher.d.ts +8 -8
- package/dist/cjs/query/matchers/num-matcher.js +34 -34
- package/dist/cjs/query/matchers/num-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/op-matcher.d.ts +8 -8
- package/dist/cjs/query/matchers/op-matcher.js +34 -34
- package/dist/cjs/query/matchers/op-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/seq-matcher.d.ts +14 -14
- package/dist/cjs/query/matchers/seq-matcher.js +76 -76
- package/dist/cjs/query/matchers/seq-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/str-matcher.d.ts +38 -38
- package/dist/cjs/query/matchers/str-matcher.js +108 -108
- package/dist/cjs/query/matchers/str-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/sym-matcher.d.ts +8 -8
- package/dist/cjs/query/matchers/sym-matcher.js +34 -34
- package/dist/cjs/query/matchers/sym-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/tree-matcher.d.ts +23 -23
- package/dist/cjs/query/matchers/tree-matcher.js +121 -121
- package/dist/cjs/query/matchers/tree-matcher.js.map +1 -1
- package/dist/cjs/query/options.d.ts +10 -10
- package/dist/cjs/query/options.js +148 -149
- package/dist/cjs/query/options.js.map +1 -1
- package/dist/cjs/query/regex.d.ts +1 -1
- package/dist/cjs/query/regex.js +12 -13
- package/dist/cjs/query/regex.js.map +1 -1
- package/dist/cjs/query/types.d.ts +100 -100
- package/dist/cjs/query/types.d.ts.map +1 -1
- package/dist/cjs/query/types.js +2 -2
- package/dist/cjs/util/clone.d.ts +1 -1
- package/dist/cjs/util/clone.js +5 -5
- package/dist/cjs/util/regex.d.ts +1 -1
- package/dist/cjs/util/regex.js +6 -7
- package/dist/cjs/util/regex.js.map +1 -1
- package/dist/esm/index.d.ts +4 -4
- package/dist/esm/index.js +8 -8
- package/dist/esm/lang/groovy.d.ts +6 -6
- package/dist/esm/lang/groovy.js +80 -80
- package/dist/esm/lang/index.d.ts +20 -20
- package/dist/esm/lang/index.js +37 -37
- package/dist/esm/lang/python.d.ts +6 -6
- package/dist/esm/lang/python.js +70 -70
- package/dist/esm/lang/scala.d.ts +6 -6
- package/dist/esm/lang/scala.js +68 -68
- package/dist/esm/lang/starlark.d.ts +6 -6
- package/dist/esm/lang/starlark.js +55 -55
- package/dist/esm/lang/types.d.ts +6 -6
- package/dist/esm/lang/types.js +1 -1
- package/dist/esm/lexer/bracket.d.ts +6 -6
- package/dist/esm/lexer/bracket.js +49 -49
- package/dist/esm/lexer/bracket.js.map +1 -1
- package/dist/esm/lexer/comment.d.ts +3 -3
- package/dist/esm/lexer/comment.js +39 -39
- package/dist/esm/lexer/comment.js.map +1 -1
- package/dist/esm/lexer/index.d.ts +5 -5
- package/dist/esm/lexer/index.js +136 -136
- package/dist/esm/lexer/index.js.map +1 -1
- package/dist/esm/lexer/number.d.ts +2 -2
- package/dist/esm/lexer/number.js +14 -14
- package/dist/esm/lexer/operator.d.ts +2 -2
- package/dist/esm/lexer/operator.js +20 -20
- package/dist/esm/lexer/rules.d.ts +4 -4
- package/dist/esm/lexer/rules.js +69 -69
- package/dist/esm/lexer/rules.js.map +1 -1
- package/dist/esm/lexer/string.d.ts +2 -2
- package/dist/esm/lexer/string.js +177 -177
- package/dist/esm/lexer/string.js.map +1 -1
- package/dist/esm/lexer/symbol.d.ts +2 -2
- package/dist/esm/lexer/symbol.js +14 -14
- package/dist/esm/lexer/token.d.ts +3 -3
- package/dist/esm/lexer/token.js +60 -60
- package/dist/esm/lexer/token.js.map +1 -1
- package/dist/esm/lexer/types.d.ts +142 -142
- package/dist/esm/lexer/types.js +1 -1
- package/dist/esm/parser/cursor.d.ts +2 -2
- package/dist/esm/parser/cursor.js +9 -9
- package/dist/esm/parser/index.d.ts +3 -3
- package/dist/esm/parser/index.js +3 -3
- package/dist/esm/parser/tree.d.ts +4 -4
- package/dist/esm/parser/tree.js +241 -241
- package/dist/esm/parser/tree.js.map +1 -1
- package/dist/esm/parser/types.d.ts +33 -33
- package/dist/esm/parser/types.js +1 -1
- package/dist/esm/query/builder.d.ts +144 -144
- package/dist/esm/query/builder.d.ts.map +1 -1
- package/dist/esm/query/builder.js +305 -304
- package/dist/esm/query/builder.js.map +1 -1
- package/dist/esm/query/handler.d.ts +2 -2
- package/dist/esm/query/handler.js +6 -6
- package/dist/esm/query/index.d.ts +2 -2
- package/dist/esm/query/index.js +2 -2
- package/dist/esm/query/matchers/abstract-matcher.d.ts +9 -9
- package/dist/esm/query/matchers/abstract-matcher.js +32 -32
- package/dist/esm/query/matchers/abstract-matcher.js.map +1 -1
- package/dist/esm/query/matchers/alt-matcher.d.ts +10 -10
- package/dist/esm/query/matchers/alt-matcher.js +29 -29
- package/dist/esm/query/matchers/alt-matcher.js.map +1 -1
- package/dist/esm/query/matchers/anchor-matcher.d.ts +17 -17
- package/dist/esm/query/matchers/anchor-matcher.js +44 -44
- package/dist/esm/query/matchers/anchor-matcher.js.map +1 -1
- package/dist/esm/query/matchers/comment-matcher.d.ts +10 -10
- package/dist/esm/query/matchers/comment-matcher.js +35 -35
- package/dist/esm/query/matchers/comment-matcher.js.map +1 -1
- package/dist/esm/query/matchers/index.d.ts +6 -6
- package/dist/esm/query/matchers/index.js +6 -6
- package/dist/esm/query/matchers/many-matcher.d.ts +13 -13
- package/dist/esm/query/matchers/many-matcher.js +57 -57
- package/dist/esm/query/matchers/many-matcher.js.map +1 -1
- package/dist/esm/query/matchers/num-matcher.d.ts +8 -8
- package/dist/esm/query/matchers/num-matcher.js +30 -30
- package/dist/esm/query/matchers/num-matcher.js.map +1 -1
- package/dist/esm/query/matchers/op-matcher.d.ts +8 -8
- package/dist/esm/query/matchers/op-matcher.js +30 -30
- package/dist/esm/query/matchers/op-matcher.js.map +1 -1
- package/dist/esm/query/matchers/seq-matcher.d.ts +14 -14
- package/dist/esm/query/matchers/seq-matcher.js +72 -72
- package/dist/esm/query/matchers/seq-matcher.js.map +1 -1
- package/dist/esm/query/matchers/str-matcher.d.ts +38 -38
- package/dist/esm/query/matchers/str-matcher.js +102 -102
- package/dist/esm/query/matchers/str-matcher.js.map +1 -1
- package/dist/esm/query/matchers/sym-matcher.d.ts +8 -8
- package/dist/esm/query/matchers/sym-matcher.js +30 -30
- package/dist/esm/query/matchers/sym-matcher.js.map +1 -1
- package/dist/esm/query/matchers/tree-matcher.d.ts +23 -23
- package/dist/esm/query/matchers/tree-matcher.js +117 -117
- package/dist/esm/query/matchers/tree-matcher.js.map +1 -1
- package/dist/esm/query/options.d.ts +10 -10
- package/dist/esm/query/options.js +139 -139
- package/dist/esm/query/options.js.map +1 -1
- package/dist/esm/query/regex.d.ts +1 -1
- package/dist/esm/query/regex.js +9 -9
- package/dist/esm/query/regex.js.map +1 -1
- package/dist/esm/query/types.d.ts +100 -100
- package/dist/esm/query/types.d.ts.map +1 -1
- package/dist/esm/query/types.js +1 -1
- package/dist/esm/util/clone.d.ts +1 -1
- package/dist/esm/util/clone.js +1 -1
- package/dist/esm/util/regex.d.ts +1 -1
- package/dist/esm/util/regex.js +3 -3
- package/package.json +42 -46
|
@@ -1,305 +1,306 @@
|
|
|
1
|
-
import { AltMatcher, ManyMatcher, OpMatcher, SeqMatcher, SymMatcher, } from './matchers';
|
|
2
|
-
import { BeginMatcher, EndMatcher, VoidMatcher, } from './matchers/anchor-matcher';
|
|
3
|
-
import { CommentMatcher } from './matchers/comment-matcher';
|
|
4
|
-
import { NumMatcher } from './matchers/num-matcher';
|
|
5
|
-
import { StrContentMatcher, StrNodeMatcher, StrTplMatcher, } from './matchers/str-matcher';
|
|
6
|
-
import { TreeMatcher } from './matchers/tree-matcher';
|
|
7
|
-
import { coerceCommentOptions, coerceManyOptions, coerceNumOptions, coerceOpOptions, coerceStrOptions, coerceSymOptions, coerceTreeOptions, } from './options';
|
|
8
|
-
import { isRegex } from './regex';
|
|
9
|
-
class TerminalBuilder {
|
|
10
|
-
handler(fn) {
|
|
11
|
-
const voidMatcher = new VoidBuilder(fn);
|
|
12
|
-
const builder = new SeqBuilder(this, voidMatcher);
|
|
13
|
-
return builder;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
class AbstractBuilder extends TerminalBuilder {
|
|
17
|
-
sym(arg1, arg2) {
|
|
18
|
-
const opts = coerceSymOptions(arg1, arg2);
|
|
19
|
-
const builder = new SymBuilder(opts);
|
|
20
|
-
return new SeqBuilder(this, builder);
|
|
21
|
-
}
|
|
22
|
-
op(arg1, arg2) {
|
|
23
|
-
const opts = coerceOpOptions(arg1, arg2);
|
|
24
|
-
const builder = new OpBuilder(opts);
|
|
25
|
-
return new SeqBuilder(this, builder);
|
|
26
|
-
}
|
|
27
|
-
comment(arg1, arg2) {
|
|
28
|
-
const opts = coerceCommentOptions(arg1, arg2);
|
|
29
|
-
const builder = new CommentBuilder(opts);
|
|
30
|
-
return new SeqBuilder(this, builder);
|
|
31
|
-
}
|
|
32
|
-
num(arg1, arg2) {
|
|
33
|
-
const opts = coerceNumOptions(arg1, arg2);
|
|
34
|
-
const builder = new NumBuilder(opts);
|
|
35
|
-
return new SeqBuilder(this, builder);
|
|
36
|
-
}
|
|
37
|
-
many(arg1, arg2, arg3) {
|
|
38
|
-
const opts = coerceManyOptions(arg1, arg2, arg3);
|
|
39
|
-
const builder = new ManyBuilder(opts);
|
|
40
|
-
return new SeqBuilder(this, builder);
|
|
41
|
-
}
|
|
42
|
-
opt(innerBuilder) {
|
|
43
|
-
const opts = coerceManyOptions(innerBuilder, 0, 1);
|
|
44
|
-
const builder = new ManyBuilder(opts);
|
|
45
|
-
return new SeqBuilder(this, builder);
|
|
46
|
-
}
|
|
47
|
-
alt(...alts) {
|
|
48
|
-
const builder = new AltBuilder(alts);
|
|
49
|
-
return new SeqBuilder(this, builder);
|
|
50
|
-
}
|
|
51
|
-
tree(arg1) {
|
|
52
|
-
const opts = coerceTreeOptions(arg1);
|
|
53
|
-
const builder = new TreeBuilder(opts);
|
|
54
|
-
return new SeqBuilder(this, builder);
|
|
55
|
-
}
|
|
56
|
-
str(arg1, arg2) {
|
|
57
|
-
const opts = coerceStrOptions(arg1, arg2);
|
|
58
|
-
const builder = new StrBuilder(opts);
|
|
59
|
-
return new SeqBuilder(this, builder);
|
|
60
|
-
}
|
|
61
|
-
end() {
|
|
62
|
-
return new EndBuilder(this);
|
|
63
|
-
}
|
|
64
|
-
join(other) {
|
|
65
|
-
const builder = new SeqBuilder(this, other);
|
|
66
|
-
return builder;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
// Anchors
|
|
70
|
-
export class BeginBuilder extends AbstractBuilder {
|
|
71
|
-
build() {
|
|
72
|
-
return new BeginMatcher();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
export class EndBuilder extends TerminalBuilder {
|
|
76
|
-
constructor(builder) {
|
|
77
|
-
super();
|
|
78
|
-
this.builder = builder;
|
|
79
|
-
}
|
|
80
|
-
build() {
|
|
81
|
-
const matcher = this.builder.build();
|
|
82
|
-
const matchers = matcher instanceof SeqMatcher ? matcher.seq : [matcher];
|
|
83
|
-
matchers.push(new EndMatcher());
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
}
|
|
1
|
+
import { AltMatcher, ManyMatcher, OpMatcher, SeqMatcher, SymMatcher, } from './matchers';
|
|
2
|
+
import { BeginMatcher, EndMatcher, VoidMatcher, } from './matchers/anchor-matcher';
|
|
3
|
+
import { CommentMatcher } from './matchers/comment-matcher';
|
|
4
|
+
import { NumMatcher } from './matchers/num-matcher';
|
|
5
|
+
import { StrContentMatcher, StrNodeMatcher, StrTplMatcher, } from './matchers/str-matcher';
|
|
6
|
+
import { TreeMatcher } from './matchers/tree-matcher';
|
|
7
|
+
import { coerceCommentOptions, coerceManyOptions, coerceNumOptions, coerceOpOptions, coerceStrOptions, coerceSymOptions, coerceTreeOptions, } from './options';
|
|
8
|
+
import { isRegex } from './regex';
|
|
9
|
+
class TerminalBuilder {
|
|
10
|
+
handler(fn) {
|
|
11
|
+
const voidMatcher = new VoidBuilder(fn);
|
|
12
|
+
const builder = new SeqBuilder(this, voidMatcher);
|
|
13
|
+
return builder;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class AbstractBuilder extends TerminalBuilder {
|
|
17
|
+
sym(arg1, arg2) {
|
|
18
|
+
const opts = coerceSymOptions(arg1, arg2);
|
|
19
|
+
const builder = new SymBuilder(opts);
|
|
20
|
+
return new SeqBuilder(this, builder);
|
|
21
|
+
}
|
|
22
|
+
op(arg1, arg2) {
|
|
23
|
+
const opts = coerceOpOptions(arg1, arg2);
|
|
24
|
+
const builder = new OpBuilder(opts);
|
|
25
|
+
return new SeqBuilder(this, builder);
|
|
26
|
+
}
|
|
27
|
+
comment(arg1, arg2) {
|
|
28
|
+
const opts = coerceCommentOptions(arg1, arg2);
|
|
29
|
+
const builder = new CommentBuilder(opts);
|
|
30
|
+
return new SeqBuilder(this, builder);
|
|
31
|
+
}
|
|
32
|
+
num(arg1, arg2) {
|
|
33
|
+
const opts = coerceNumOptions(arg1, arg2);
|
|
34
|
+
const builder = new NumBuilder(opts);
|
|
35
|
+
return new SeqBuilder(this, builder);
|
|
36
|
+
}
|
|
37
|
+
many(arg1, arg2, arg3) {
|
|
38
|
+
const opts = coerceManyOptions(arg1, arg2, arg3);
|
|
39
|
+
const builder = new ManyBuilder(opts);
|
|
40
|
+
return new SeqBuilder(this, builder);
|
|
41
|
+
}
|
|
42
|
+
opt(innerBuilder) {
|
|
43
|
+
const opts = coerceManyOptions(innerBuilder, 0, 1);
|
|
44
|
+
const builder = new ManyBuilder(opts);
|
|
45
|
+
return new SeqBuilder(this, builder);
|
|
46
|
+
}
|
|
47
|
+
alt(...alts) {
|
|
48
|
+
const builder = new AltBuilder(alts);
|
|
49
|
+
return new SeqBuilder(this, builder);
|
|
50
|
+
}
|
|
51
|
+
tree(arg1) {
|
|
52
|
+
const opts = coerceTreeOptions(arg1);
|
|
53
|
+
const builder = new TreeBuilder(opts);
|
|
54
|
+
return new SeqBuilder(this, builder);
|
|
55
|
+
}
|
|
56
|
+
str(arg1, arg2) {
|
|
57
|
+
const opts = coerceStrOptions(arg1, arg2);
|
|
58
|
+
const builder = new StrBuilder(opts);
|
|
59
|
+
return new SeqBuilder(this, builder);
|
|
60
|
+
}
|
|
61
|
+
end() {
|
|
62
|
+
return new EndBuilder(this);
|
|
63
|
+
}
|
|
64
|
+
join(other) {
|
|
65
|
+
const builder = new SeqBuilder(this, other);
|
|
66
|
+
return builder;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Anchors
|
|
70
|
+
export class BeginBuilder extends AbstractBuilder {
|
|
71
|
+
build() {
|
|
72
|
+
return new BeginMatcher();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export class EndBuilder extends TerminalBuilder {
|
|
76
|
+
constructor(builder) {
|
|
77
|
+
super();
|
|
78
|
+
this.builder = builder;
|
|
79
|
+
}
|
|
80
|
+
build() {
|
|
81
|
+
const matcher = this.builder.build();
|
|
82
|
+
const matchers = matcher instanceof SeqMatcher ? matcher.seq : [matcher];
|
|
83
|
+
matchers.push(new EndMatcher());
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
85
|
+
return new SeqMatcher({ matchers });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function begin() {
|
|
89
|
+
return new BeginBuilder();
|
|
90
|
+
}
|
|
91
|
+
export class VoidBuilder extends AbstractBuilder {
|
|
92
|
+
constructor(fn) {
|
|
93
|
+
super();
|
|
94
|
+
this.fn = fn;
|
|
95
|
+
}
|
|
96
|
+
build() {
|
|
97
|
+
return new VoidMatcher(this.fn);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export function handler(fn) {
|
|
101
|
+
return new VoidBuilder(fn);
|
|
102
|
+
}
|
|
103
|
+
// Sequence
|
|
104
|
+
export class SeqBuilder extends AbstractBuilder {
|
|
105
|
+
constructor(prev, next) {
|
|
106
|
+
super();
|
|
107
|
+
const prevSeq = prev instanceof SeqBuilder
|
|
108
|
+
? prev.builders
|
|
109
|
+
: [prev];
|
|
110
|
+
const nextSeq = next instanceof SeqBuilder
|
|
111
|
+
? next.builders
|
|
112
|
+
: [next];
|
|
113
|
+
this.builders = [...prevSeq, ...nextSeq];
|
|
114
|
+
}
|
|
115
|
+
build() {
|
|
116
|
+
const matchers = this.builders.map((builder) => builder.build());
|
|
117
|
+
return new SeqMatcher({ matchers });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function join(first, second, ...others) {
|
|
121
|
+
const seq = new SeqBuilder(first, second);
|
|
122
|
+
if (!others.length) {
|
|
123
|
+
return seq;
|
|
124
|
+
}
|
|
125
|
+
return others.reduce((res, query) => {
|
|
126
|
+
return res.join(query);
|
|
127
|
+
}, seq);
|
|
128
|
+
}
|
|
129
|
+
// Symbols
|
|
130
|
+
export class SymBuilder extends AbstractBuilder {
|
|
131
|
+
constructor(opts) {
|
|
132
|
+
super();
|
|
133
|
+
this.opts = opts;
|
|
134
|
+
}
|
|
135
|
+
build() {
|
|
136
|
+
return new SymMatcher(this.opts);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export function sym(arg1, arg2) {
|
|
140
|
+
const opts = coerceSymOptions(arg1, arg2);
|
|
141
|
+
return new SymBuilder(opts);
|
|
142
|
+
}
|
|
143
|
+
// Operators
|
|
144
|
+
export class OpBuilder extends AbstractBuilder {
|
|
145
|
+
constructor(opts) {
|
|
146
|
+
super();
|
|
147
|
+
this.opts = opts;
|
|
148
|
+
}
|
|
149
|
+
build() {
|
|
150
|
+
return new OpMatcher(this.opts);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export function op(arg1, arg2) {
|
|
154
|
+
const opts = coerceOpOptions(arg1, arg2);
|
|
155
|
+
return new OpBuilder(opts);
|
|
156
|
+
}
|
|
157
|
+
// Comments
|
|
158
|
+
export class CommentBuilder extends AbstractBuilder {
|
|
159
|
+
constructor(opts) {
|
|
160
|
+
super();
|
|
161
|
+
this.opts = opts;
|
|
162
|
+
}
|
|
163
|
+
build() {
|
|
164
|
+
return new CommentMatcher(this.opts);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export function comment(arg1, arg2) {
|
|
168
|
+
const opts = coerceCommentOptions(arg1, arg2);
|
|
169
|
+
return new CommentBuilder(opts);
|
|
170
|
+
}
|
|
171
|
+
// Numbers
|
|
172
|
+
export class NumBuilder extends AbstractBuilder {
|
|
173
|
+
constructor(opts) {
|
|
174
|
+
super();
|
|
175
|
+
this.opts = opts;
|
|
176
|
+
}
|
|
177
|
+
build() {
|
|
178
|
+
return new NumMatcher(this.opts);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
export function num(arg1, arg2) {
|
|
182
|
+
const opts = coerceNumOptions(arg1, arg2);
|
|
183
|
+
return new NumBuilder(opts);
|
|
184
|
+
}
|
|
185
|
+
// Repetitive patterns
|
|
186
|
+
export class ManyBuilder extends AbstractBuilder {
|
|
187
|
+
constructor(opts) {
|
|
188
|
+
super();
|
|
189
|
+
this.opts = opts;
|
|
190
|
+
}
|
|
191
|
+
build() {
|
|
192
|
+
const matcher = this.opts.builder.build();
|
|
193
|
+
return new ManyMatcher({ ...this.opts, matcher });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export function many(arg1, arg2, arg3) {
|
|
197
|
+
const opts = coerceManyOptions(arg1, arg2, arg3);
|
|
198
|
+
return new ManyBuilder(opts);
|
|
199
|
+
}
|
|
200
|
+
export function opt(builder) {
|
|
201
|
+
const opts = coerceManyOptions(builder, 0, 1);
|
|
202
|
+
return new ManyBuilder(opts);
|
|
203
|
+
}
|
|
204
|
+
// Alternatives
|
|
205
|
+
export class AltBuilder extends AbstractBuilder {
|
|
206
|
+
constructor(builders) {
|
|
207
|
+
super();
|
|
208
|
+
this.builders = builders;
|
|
209
|
+
}
|
|
210
|
+
build() {
|
|
211
|
+
const matchers = this.builders.map((alt) => alt.build());
|
|
212
|
+
return new AltMatcher({ matchers });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
export function alt(...builders) {
|
|
216
|
+
return new AltBuilder(builders);
|
|
217
|
+
}
|
|
218
|
+
// Trees
|
|
219
|
+
export class TreeBuilder extends AbstractBuilder {
|
|
220
|
+
constructor(opts) {
|
|
221
|
+
super();
|
|
222
|
+
this.opts = opts;
|
|
223
|
+
}
|
|
224
|
+
build() {
|
|
225
|
+
const builderOpts = this.opts;
|
|
226
|
+
const matcher = builderOpts.search ? builderOpts.search.build() : null;
|
|
227
|
+
const matcherOpts = { ...builderOpts, matcher };
|
|
228
|
+
return new TreeMatcher(matcherOpts);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export function tree(arg1) {
|
|
232
|
+
const opts = coerceTreeOptions(arg1);
|
|
233
|
+
return new TreeBuilder(opts);
|
|
234
|
+
}
|
|
235
|
+
// Strings
|
|
236
|
+
export class StrBuilder extends AbstractBuilder {
|
|
237
|
+
constructor(opts) {
|
|
238
|
+
super();
|
|
239
|
+
this.opts = opts;
|
|
240
|
+
}
|
|
241
|
+
build() {
|
|
242
|
+
var _a, _b, _c, _d, _e, _f;
|
|
243
|
+
if (this.opts.type === 'str-content') {
|
|
244
|
+
return new StrNodeMatcher({
|
|
245
|
+
matchers: [
|
|
246
|
+
new StrContentMatcher({
|
|
247
|
+
value: (_a = this.opts.match) !== null && _a !== void 0 ? _a : null,
|
|
248
|
+
handler: (_b = this.opts.handler) !== null && _b !== void 0 ? _b : null,
|
|
249
|
+
}),
|
|
250
|
+
],
|
|
251
|
+
preHandler: null,
|
|
252
|
+
postHandler: null,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
if (this.opts.match) {
|
|
256
|
+
const matchers = [];
|
|
257
|
+
this.opts.match.forEach((m) => {
|
|
258
|
+
if (typeof m === 'string' || isRegex(m)) {
|
|
259
|
+
const contentMatcher = new StrContentMatcher({
|
|
260
|
+
value: m,
|
|
261
|
+
handler: null,
|
|
262
|
+
});
|
|
263
|
+
matchers.push(contentMatcher);
|
|
264
|
+
}
|
|
265
|
+
else if (m instanceof StrBuilder) {
|
|
266
|
+
const childStrMatcher = m.build();
|
|
267
|
+
if (childStrMatcher.matchers) {
|
|
268
|
+
matchers.push(...childStrMatcher.matchers);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else if (m instanceof StrTplMatcher) {
|
|
272
|
+
matchers.push(m);
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
const tplMatcher = new StrTplMatcher({
|
|
276
|
+
matcher: m.build(),
|
|
277
|
+
preHandler: null,
|
|
278
|
+
postHandler: null,
|
|
279
|
+
});
|
|
280
|
+
matchers.push(tplMatcher);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
return new StrNodeMatcher({
|
|
284
|
+
matchers: matchers,
|
|
285
|
+
preHandler: (_c = this.opts.preHandler) !== null && _c !== void 0 ? _c : null,
|
|
286
|
+
postHandler: (_d = this.opts.postHandler) !== null && _d !== void 0 ? _d : null,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
return new StrNodeMatcher({
|
|
290
|
+
matchers: null,
|
|
291
|
+
preHandler: (_e = this.opts.preHandler) !== null && _e !== void 0 ? _e : null,
|
|
292
|
+
postHandler: (_f = this.opts.postHandler) !== null && _f !== void 0 ? _f : null,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
export function str(arg1, arg2) {
|
|
297
|
+
const opts = coerceStrOptions(arg1, arg2);
|
|
298
|
+
return new StrBuilder(opts);
|
|
299
|
+
}
|
|
300
|
+
export function buildRoot(builder) {
|
|
301
|
+
const matcher = builder.build();
|
|
302
|
+
return matcher instanceof TreeMatcher && matcher.type === 'root-tree'
|
|
303
|
+
? matcher
|
|
304
|
+
: new TreeMatcher({ matcher, type: 'root-tree' });
|
|
305
|
+
}
|
|
305
306
|
//# sourceMappingURL=builder.js.map
|