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