@ptolemy2002/rgx 13.6.0 → 13.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.
- package/dist/walker/base.d.ts +8 -1
- package/dist/walker/base.js +48 -6
- package/package.json +1 -1
package/dist/walker/base.d.ts
CHANGED
|
@@ -60,12 +60,19 @@ export declare class RGXWalker<R, S = unknown> {
|
|
|
60
60
|
private validateCapture;
|
|
61
61
|
private handleAfterCapture;
|
|
62
62
|
step(): RGXCapture | null;
|
|
63
|
-
|
|
63
|
+
private _stepToTokenIter;
|
|
64
|
+
stepToToken(predicate?: (token: RGXTokenOrPart<R>) => boolean): this;
|
|
65
|
+
stepToTokenAsync(predicate?: (token: RGXTokenOrPart<R, S, unknown>) => boolean, yieldFn?: () => Promise<void>): Promise<this>;
|
|
66
|
+
private _stepPastCurrentPartIfNeeded;
|
|
64
67
|
stepToPart(predicate?: (part: RGXPart<R, S, unknown>) => boolean): this;
|
|
68
|
+
stepToPartAsync(predicate?: (part: RGXPart<R, S, unknown>) => boolean, yieldFn?: () => Promise<void>): Promise<this>;
|
|
65
69
|
walk(): R;
|
|
70
|
+
walkAsync(yieldFn?: () => Promise<void>): Promise<R>;
|
|
66
71
|
snapshot(name: string, ...keys: Array<RGXWalkerSnapshotKey | false>): this;
|
|
67
72
|
restore(name: string): this;
|
|
73
|
+
private _walkerSnapshot;
|
|
68
74
|
tryWalk({ revertReduced, revertShare, revertCaptures }?: RGXTryWalkOptions): boolean;
|
|
75
|
+
tryWalkAsync({ revertReduced, revertShare, revertCaptures }?: RGXTryWalkOptions, yieldFn?: () => Promise<void>): Promise<boolean>;
|
|
69
76
|
clone(depth?: CloneDepth): RGXWalker<R, S>;
|
|
70
77
|
}
|
|
71
78
|
export declare function rgxWalker<R, S = unknown>(...args: ConstructorParameters<typeof RGXWalker<R, S>>): RGXWalker<R, S>;
|
package/dist/walker/base.js
CHANGED
|
@@ -315,7 +315,7 @@ class RGXWalker {
|
|
|
315
315
|
this.advanceToken();
|
|
316
316
|
return captureResult;
|
|
317
317
|
}
|
|
318
|
-
|
|
318
|
+
*_stepToTokenIter(predicate) {
|
|
319
319
|
while (this.hasNextToken()) {
|
|
320
320
|
this._stopped = false;
|
|
321
321
|
if (predicate(this.currentToken()))
|
|
@@ -323,25 +323,51 @@ class RGXWalker {
|
|
|
323
323
|
this.step();
|
|
324
324
|
if (this._stopped)
|
|
325
325
|
break;
|
|
326
|
+
yield;
|
|
326
327
|
}
|
|
328
|
+
}
|
|
329
|
+
stepToToken(predicate = () => true) {
|
|
330
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
331
|
+
for (const _ of this._stepToTokenIter(predicate)) { /* sync — no yield needed */ }
|
|
327
332
|
return this;
|
|
328
333
|
}
|
|
329
|
-
|
|
330
|
-
//
|
|
331
|
-
|
|
334
|
+
async stepToTokenAsync(predicate = () => true, yieldFn = () => new Promise(resolve => setImmediate(resolve))) {
|
|
335
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
336
|
+
for (const _ of this._stepToTokenIter(predicate))
|
|
337
|
+
await yieldFn();
|
|
338
|
+
return this;
|
|
339
|
+
}
|
|
340
|
+
// If currently at a Part, steps past it (so repeated stepToPart calls advance
|
|
341
|
+
// rather than getting stuck). Returns true when the walker stopped mid-step.
|
|
342
|
+
_stepPastCurrentPartIfNeeded() {
|
|
332
343
|
if (this.hasNextToken() && this.currentToken() instanceof part_1.RGXPart) {
|
|
333
344
|
this._stopped = false;
|
|
334
345
|
this.step();
|
|
335
346
|
if (this._stopped)
|
|
336
|
-
return
|
|
347
|
+
return true;
|
|
337
348
|
}
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
stepToPart(predicate = () => true) {
|
|
352
|
+
if (this._stepPastCurrentPartIfNeeded())
|
|
353
|
+
return this;
|
|
338
354
|
this.stepToToken(token => token instanceof part_1.RGXPart && predicate(token));
|
|
339
355
|
return this;
|
|
340
356
|
}
|
|
357
|
+
async stepToPartAsync(predicate = () => true, yieldFn = () => new Promise(resolve => setImmediate(resolve))) {
|
|
358
|
+
if (this._stepPastCurrentPartIfNeeded())
|
|
359
|
+
return this;
|
|
360
|
+
await this.stepToTokenAsync(token => token instanceof part_1.RGXPart && predicate(token), yieldFn);
|
|
361
|
+
return this;
|
|
362
|
+
}
|
|
341
363
|
walk() {
|
|
342
364
|
this.stepToToken(() => false);
|
|
343
365
|
return this.reduced;
|
|
344
366
|
}
|
|
367
|
+
async walkAsync(yieldFn) {
|
|
368
|
+
await this.stepToTokenAsync(() => false, yieldFn);
|
|
369
|
+
return this.reduced;
|
|
370
|
+
}
|
|
345
371
|
snapshot(name, ...keys) {
|
|
346
372
|
const filteredKeys = keys.filter((k) => k !== false);
|
|
347
373
|
const snap = {};
|
|
@@ -374,8 +400,11 @@ class RGXWalker {
|
|
|
374
400
|
this.namedCaptures = snap.namedCaptures;
|
|
375
401
|
return this;
|
|
376
402
|
}
|
|
403
|
+
_walkerSnapshot(name, { revertReduced, revertShare, revertCaptures }) {
|
|
404
|
+
return this.snapshot(name, "sourcePosition", "tokenPosition", revertReduced && "reduced", revertShare && "share", revertCaptures && "captures", revertCaptures && "namedCaptures");
|
|
405
|
+
}
|
|
377
406
|
tryWalk({ revertReduced = false, revertShare = false, revertCaptures = false } = {}) {
|
|
378
|
-
this.
|
|
407
|
+
this._walkerSnapshot("tryWalk", { revertReduced, revertShare, revertCaptures });
|
|
379
408
|
try {
|
|
380
409
|
this.walk();
|
|
381
410
|
return true;
|
|
@@ -387,6 +416,19 @@ class RGXWalker {
|
|
|
387
416
|
throw e;
|
|
388
417
|
}
|
|
389
418
|
}
|
|
419
|
+
async tryWalkAsync({ revertReduced = false, revertShare = false, revertCaptures = false } = {}, yieldFn) {
|
|
420
|
+
this._walkerSnapshot("tryWalk", { revertReduced, revertShare, revertCaptures });
|
|
421
|
+
try {
|
|
422
|
+
await this.walkAsync(yieldFn);
|
|
423
|
+
return true;
|
|
424
|
+
}
|
|
425
|
+
catch (e) {
|
|
426
|
+
this.restore("tryWalk");
|
|
427
|
+
if (isMatchError(e))
|
|
428
|
+
return false;
|
|
429
|
+
throw e;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
390
432
|
// Clone method
|
|
391
433
|
clone(depth = "max") {
|
|
392
434
|
if (depth === 0)
|