@daltonr/pathwrite-core 0.2.1 → 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/dist/index.d.ts +41 -4
- package/dist/index.js +79 -22
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +121 -23
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,14 @@ export interface PathStepContext<TData extends PathData = PathData> {
|
|
|
3
3
|
readonly pathId: string;
|
|
4
4
|
readonly stepId: string;
|
|
5
5
|
readonly data: Readonly<TData>;
|
|
6
|
+
/**
|
|
7
|
+
* `true` the first time this step is entered within the current path
|
|
8
|
+
* instance. `false` on all subsequent re-entries (e.g. navigating back
|
|
9
|
+
* then forward again). Use inside `onEnter` to distinguish initialisation
|
|
10
|
+
* from re-entry so you don't accidentally overwrite data the user has
|
|
11
|
+
* already filled in.
|
|
12
|
+
*/
|
|
13
|
+
readonly isFirstEntry: boolean;
|
|
6
14
|
}
|
|
7
15
|
export interface PathStep<TData extends PathData = PathData> {
|
|
8
16
|
id: string;
|
|
@@ -20,7 +28,22 @@ export interface PathStep<TData extends PathData = PathData> {
|
|
|
20
28
|
validationMessages?: (ctx: PathStepContext<TData>) => string[] | Promise<string[]>;
|
|
21
29
|
onEnter?: (ctx: PathStepContext<TData>) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
22
30
|
onLeave?: (ctx: PathStepContext<TData>) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
23
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Called on the parent step when a sub-path completes naturally (user
|
|
33
|
+
* reached the last step). Receives the sub-path ID, its final data, the
|
|
34
|
+
* parent step context, and the optional `meta` object that was passed to
|
|
35
|
+
* `startSubPath()` for correlation (e.g. a collection item index).
|
|
36
|
+
*/
|
|
37
|
+
onSubPathComplete?: (subPathId: string, subPathData: PathData, ctx: PathStepContext<TData>, meta?: Record<string, unknown>) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
38
|
+
/**
|
|
39
|
+
* Called on the parent step when a sub-path is cancelled — either via an
|
|
40
|
+
* explicit `cancel()` call or by pressing Back on the sub-path's first step.
|
|
41
|
+
* Receives the sub-path ID, its data at time of cancellation, the parent
|
|
42
|
+
* step context, and the optional `meta` passed to `startSubPath()`.
|
|
43
|
+
* Return a patch to update the parent path's data (e.g. to record a
|
|
44
|
+
* "skipped" or "declined" outcome).
|
|
45
|
+
*/
|
|
46
|
+
onSubPathCancel?: (subPathId: string, subPathData: PathData, ctx: PathStepContext<TData>, meta?: Record<string, unknown>) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
24
47
|
}
|
|
25
48
|
export interface PathDefinition<TData extends PathData = PathData> {
|
|
26
49
|
id: string;
|
|
@@ -80,11 +103,24 @@ export declare class PathEngine {
|
|
|
80
103
|
private _isNavigating;
|
|
81
104
|
subscribe(listener: (event: PathEvent) => void): () => void;
|
|
82
105
|
start(path: PathDefinition<any>, initialData?: PathData): Promise<void>;
|
|
83
|
-
/**
|
|
84
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Starts a sub-path on top of the currently active path. Throws if no path
|
|
108
|
+
* is running.
|
|
109
|
+
*
|
|
110
|
+
* @param path The sub-path definition to start.
|
|
111
|
+
* @param initialData Data to seed the sub-path with.
|
|
112
|
+
* @param meta Optional correlation object returned unchanged to the
|
|
113
|
+
* parent step's `onSubPathComplete` / `onSubPathCancel`
|
|
114
|
+
* hooks. Use to identify which collection item triggered
|
|
115
|
+
* the sub-path without embedding that information in the
|
|
116
|
+
* sub-path's own data.
|
|
117
|
+
*/
|
|
118
|
+
startSubPath(path: PathDefinition<any>, initialData?: PathData, meta?: Record<string, unknown>): Promise<void>;
|
|
85
119
|
next(): Promise<void>;
|
|
86
120
|
previous(): Promise<void>;
|
|
87
|
-
/** Cancel is synchronous (no hooks).
|
|
121
|
+
/** Cancel is synchronous for top-level paths (no hooks). Sub-path cancellation
|
|
122
|
+
* is async when an `onSubPathCancel` hook is present. Returns a Promise for
|
|
123
|
+
* API consistency. */
|
|
88
124
|
cancel(): Promise<void>;
|
|
89
125
|
setData(key: string, value: unknown): Promise<void>;
|
|
90
126
|
/** Jumps directly to the step with the given ID. Does not check guards or shouldSkip. */
|
|
@@ -106,6 +142,7 @@ export declare class PathEngine {
|
|
|
106
142
|
private _previousAsync;
|
|
107
143
|
private _goToStepAsync;
|
|
108
144
|
private _goToStepCheckedAsync;
|
|
145
|
+
private _cancelSubPathAsync;
|
|
109
146
|
private finishActivePath;
|
|
110
147
|
private requireActivePath;
|
|
111
148
|
private assertPathHasSteps;
|
package/dist/index.js
CHANGED
|
@@ -14,10 +14,21 @@ export class PathEngine {
|
|
|
14
14
|
this.assertPathHasSteps(path);
|
|
15
15
|
return this._startAsync(path, initialData);
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Starts a sub-path on top of the currently active path. Throws if no path
|
|
19
|
+
* is running.
|
|
20
|
+
*
|
|
21
|
+
* @param path The sub-path definition to start.
|
|
22
|
+
* @param initialData Data to seed the sub-path with.
|
|
23
|
+
* @param meta Optional correlation object returned unchanged to the
|
|
24
|
+
* parent step's `onSubPathComplete` / `onSubPathCancel`
|
|
25
|
+
* hooks. Use to identify which collection item triggered
|
|
26
|
+
* the sub-path without embedding that information in the
|
|
27
|
+
* sub-path's own data.
|
|
28
|
+
*/
|
|
29
|
+
startSubPath(path, initialData = {}, meta) {
|
|
19
30
|
this.requireActivePath();
|
|
20
|
-
return this.
|
|
31
|
+
return this._startAsync(path, initialData, meta);
|
|
21
32
|
}
|
|
22
33
|
next() {
|
|
23
34
|
const active = this.requireActivePath();
|
|
@@ -27,17 +38,18 @@ export class PathEngine {
|
|
|
27
38
|
const active = this.requireActivePath();
|
|
28
39
|
return this._previousAsync(active);
|
|
29
40
|
}
|
|
30
|
-
/** Cancel is synchronous (no hooks).
|
|
41
|
+
/** Cancel is synchronous for top-level paths (no hooks). Sub-path cancellation
|
|
42
|
+
* is async when an `onSubPathCancel` hook is present. Returns a Promise for
|
|
43
|
+
* API consistency. */
|
|
31
44
|
cancel() {
|
|
32
45
|
const active = this.requireActivePath();
|
|
33
46
|
if (this._isNavigating)
|
|
34
47
|
return Promise.resolve();
|
|
35
48
|
const cancelledPathId = active.definition.id;
|
|
36
49
|
const cancelledData = { ...active.data };
|
|
50
|
+
const cancelledMeta = active.subPathMeta;
|
|
37
51
|
if (this.pathStack.length > 0) {
|
|
38
|
-
|
|
39
|
-
this.emitStateChanged();
|
|
40
|
-
return Promise.resolve();
|
|
52
|
+
return this._cancelSubPathAsync(cancelledPathId, cancelledData, cancelledMeta);
|
|
41
53
|
}
|
|
42
54
|
this.activePath = null;
|
|
43
55
|
this.emit({ type: "cancelled", pathId: cancelledPathId, data: cancelledData });
|
|
@@ -116,7 +128,7 @@ export class PathEngine {
|
|
|
116
128
|
// ---------------------------------------------------------------------------
|
|
117
129
|
// Private async helpers
|
|
118
130
|
// ---------------------------------------------------------------------------
|
|
119
|
-
async _startAsync(path, initialData) {
|
|
131
|
+
async _startAsync(path, initialData, subPathMeta) {
|
|
120
132
|
if (this._isNavigating)
|
|
121
133
|
return;
|
|
122
134
|
if (this.activePath !== null) {
|
|
@@ -125,7 +137,9 @@ export class PathEngine {
|
|
|
125
137
|
this.activePath = {
|
|
126
138
|
definition: path,
|
|
127
139
|
currentStepIndex: 0,
|
|
128
|
-
data: { ...initialData }
|
|
140
|
+
data: { ...initialData },
|
|
141
|
+
visitedStepIds: new Set(),
|
|
142
|
+
subPathMeta
|
|
129
143
|
};
|
|
130
144
|
this._isNavigating = true;
|
|
131
145
|
await this.skipSteps(1);
|
|
@@ -249,10 +263,41 @@ export class PathEngine {
|
|
|
249
263
|
throw err;
|
|
250
264
|
}
|
|
251
265
|
}
|
|
266
|
+
async _cancelSubPathAsync(cancelledPathId, cancelledData, cancelledMeta) {
|
|
267
|
+
// Pop the stack BEFORE emitting so snapshot() always reflects the parent
|
|
268
|
+
// path (which has a valid currentStepIndex) rather than the cancelled
|
|
269
|
+
// sub-path (which may have currentStepIndex = -1).
|
|
270
|
+
this.activePath = this.pathStack.pop() ?? null;
|
|
271
|
+
this._isNavigating = true;
|
|
272
|
+
this.emitStateChanged();
|
|
273
|
+
try {
|
|
274
|
+
const parent = this.activePath;
|
|
275
|
+
if (parent) {
|
|
276
|
+
const parentStep = this.getCurrentStep(parent);
|
|
277
|
+
if (parentStep.onSubPathCancel) {
|
|
278
|
+
const ctx = {
|
|
279
|
+
pathId: parent.definition.id,
|
|
280
|
+
stepId: parentStep.id,
|
|
281
|
+
data: { ...parent.data },
|
|
282
|
+
isFirstEntry: !parent.visitedStepIds.has(parentStep.id)
|
|
283
|
+
};
|
|
284
|
+
this.applyPatch(await parentStep.onSubPathCancel(cancelledPathId, cancelledData, ctx, cancelledMeta));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
this._isNavigating = false;
|
|
288
|
+
this.emitStateChanged();
|
|
289
|
+
}
|
|
290
|
+
catch (err) {
|
|
291
|
+
this._isNavigating = false;
|
|
292
|
+
this.emitStateChanged();
|
|
293
|
+
throw err;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
252
296
|
async finishActivePath() {
|
|
253
297
|
const finished = this.requireActivePath();
|
|
254
298
|
const finishedPathId = finished.definition.id;
|
|
255
299
|
const finishedData = { ...finished.data };
|
|
300
|
+
const finishedMeta = finished.subPathMeta;
|
|
256
301
|
if (this.pathStack.length > 0) {
|
|
257
302
|
this.activePath = this.pathStack.pop();
|
|
258
303
|
const parent = this.activePath;
|
|
@@ -261,9 +306,10 @@ export class PathEngine {
|
|
|
261
306
|
const ctx = {
|
|
262
307
|
pathId: parent.definition.id,
|
|
263
308
|
stepId: parentStep.id,
|
|
264
|
-
data: { ...parent.data }
|
|
309
|
+
data: { ...parent.data },
|
|
310
|
+
isFirstEntry: !parent.visitedStepIds.has(parentStep.id)
|
|
265
311
|
};
|
|
266
|
-
this.applyPatch(await parentStep.onSubPathComplete(finishedPathId, finishedData, ctx));
|
|
312
|
+
this.applyPatch(await parentStep.onSubPathComplete(finishedPathId, finishedData, ctx, finishedMeta));
|
|
267
313
|
}
|
|
268
314
|
this.emit({
|
|
269
315
|
type: "resumed",
|
|
@@ -322,7 +368,8 @@ export class PathEngine {
|
|
|
322
368
|
const ctx = {
|
|
323
369
|
pathId: active.definition.id,
|
|
324
370
|
stepId: step.id,
|
|
325
|
-
data: { ...active.data }
|
|
371
|
+
data: { ...active.data },
|
|
372
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
326
373
|
};
|
|
327
374
|
const skip = await step.shouldSkip(ctx);
|
|
328
375
|
if (!skip)
|
|
@@ -335,12 +382,17 @@ export class PathEngine {
|
|
|
335
382
|
if (!active)
|
|
336
383
|
return;
|
|
337
384
|
const step = this.getCurrentStep(active);
|
|
385
|
+
const isFirstEntry = !active.visitedStepIds.has(step.id);
|
|
386
|
+
// Mark as visited before calling onEnter so re-entrant calls see the
|
|
387
|
+
// correct isFirstEntry value.
|
|
388
|
+
active.visitedStepIds.add(step.id);
|
|
338
389
|
if (!step.onEnter)
|
|
339
390
|
return;
|
|
340
391
|
const ctx = {
|
|
341
392
|
pathId: active.definition.id,
|
|
342
393
|
stepId: step.id,
|
|
343
|
-
data: { ...active.data }
|
|
394
|
+
data: { ...active.data },
|
|
395
|
+
isFirstEntry
|
|
344
396
|
};
|
|
345
397
|
return step.onEnter(ctx);
|
|
346
398
|
}
|
|
@@ -350,7 +402,8 @@ export class PathEngine {
|
|
|
350
402
|
const ctx = {
|
|
351
403
|
pathId: active.definition.id,
|
|
352
404
|
stepId: step.id,
|
|
353
|
-
data: { ...active.data }
|
|
405
|
+
data: { ...active.data },
|
|
406
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
354
407
|
};
|
|
355
408
|
return step.onLeave(ctx);
|
|
356
409
|
}
|
|
@@ -360,7 +413,8 @@ export class PathEngine {
|
|
|
360
413
|
const ctx = {
|
|
361
414
|
pathId: active.definition.id,
|
|
362
415
|
stepId: step.id,
|
|
363
|
-
data: { ...active.data }
|
|
416
|
+
data: { ...active.data },
|
|
417
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
364
418
|
};
|
|
365
419
|
return step.canMoveNext(ctx);
|
|
366
420
|
}
|
|
@@ -370,7 +424,8 @@ export class PathEngine {
|
|
|
370
424
|
const ctx = {
|
|
371
425
|
pathId: active.definition.id,
|
|
372
426
|
stepId: step.id,
|
|
373
|
-
data: { ...active.data }
|
|
427
|
+
data: { ...active.data },
|
|
428
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
374
429
|
};
|
|
375
430
|
return step.canMovePrevious(ctx);
|
|
376
431
|
}
|
|
@@ -382,15 +437,16 @@ export class PathEngine {
|
|
|
382
437
|
evaluateGuardSync(guard, active) {
|
|
383
438
|
if (!guard)
|
|
384
439
|
return true;
|
|
440
|
+
const step = this.getCurrentStep(active);
|
|
385
441
|
const ctx = {
|
|
386
442
|
pathId: active.definition.id,
|
|
387
|
-
stepId:
|
|
388
|
-
data: { ...active.data }
|
|
443
|
+
stepId: step.id,
|
|
444
|
+
data: { ...active.data },
|
|
445
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
389
446
|
};
|
|
390
447
|
const result = guard(ctx);
|
|
391
448
|
if (typeof result === "boolean")
|
|
392
449
|
return result;
|
|
393
|
-
// Async guard — default to true (optimistic); the engine will enforce the real result on navigation.
|
|
394
450
|
return true;
|
|
395
451
|
}
|
|
396
452
|
/**
|
|
@@ -401,15 +457,16 @@ export class PathEngine {
|
|
|
401
457
|
evaluateValidationMessagesSync(fn, active) {
|
|
402
458
|
if (!fn)
|
|
403
459
|
return [];
|
|
460
|
+
const step = this.getCurrentStep(active);
|
|
404
461
|
const ctx = {
|
|
405
462
|
pathId: active.definition.id,
|
|
406
|
-
stepId:
|
|
407
|
-
data: { ...active.data }
|
|
463
|
+
stepId: step.id,
|
|
464
|
+
data: { ...active.data },
|
|
465
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
408
466
|
};
|
|
409
467
|
const result = fn(ctx);
|
|
410
468
|
if (Array.isArray(result))
|
|
411
469
|
return result;
|
|
412
|
-
// Async hook — default to empty; consumers should keep validationMessages synchronous.
|
|
413
470
|
return [];
|
|
414
471
|
}
|
|
415
472
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -4,6 +4,14 @@ export interface PathStepContext<TData extends PathData = PathData> {
|
|
|
4
4
|
readonly pathId: string;
|
|
5
5
|
readonly stepId: string;
|
|
6
6
|
readonly data: Readonly<TData>;
|
|
7
|
+
/**
|
|
8
|
+
* `true` the first time this step is entered within the current path
|
|
9
|
+
* instance. `false` on all subsequent re-entries (e.g. navigating back
|
|
10
|
+
* then forward again). Use inside `onEnter` to distinguish initialisation
|
|
11
|
+
* from re-entry so you don't accidentally overwrite data the user has
|
|
12
|
+
* already filled in.
|
|
13
|
+
*/
|
|
14
|
+
readonly isFirstEntry: boolean;
|
|
7
15
|
}
|
|
8
16
|
|
|
9
17
|
export interface PathStep<TData extends PathData = PathData> {
|
|
@@ -22,10 +30,31 @@ export interface PathStep<TData extends PathData = PathData> {
|
|
|
22
30
|
validationMessages?: (ctx: PathStepContext<TData>) => string[] | Promise<string[]>;
|
|
23
31
|
onEnter?: (ctx: PathStepContext<TData>) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
24
32
|
onLeave?: (ctx: PathStepContext<TData>) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
33
|
+
/**
|
|
34
|
+
* Called on the parent step when a sub-path completes naturally (user
|
|
35
|
+
* reached the last step). Receives the sub-path ID, its final data, the
|
|
36
|
+
* parent step context, and the optional `meta` object that was passed to
|
|
37
|
+
* `startSubPath()` for correlation (e.g. a collection item index).
|
|
38
|
+
*/
|
|
25
39
|
onSubPathComplete?: (
|
|
26
40
|
subPathId: string,
|
|
27
41
|
subPathData: PathData,
|
|
28
|
-
ctx: PathStepContext<TData
|
|
42
|
+
ctx: PathStepContext<TData>,
|
|
43
|
+
meta?: Record<string, unknown>
|
|
44
|
+
) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
45
|
+
/**
|
|
46
|
+
* Called on the parent step when a sub-path is cancelled — either via an
|
|
47
|
+
* explicit `cancel()` call or by pressing Back on the sub-path's first step.
|
|
48
|
+
* Receives the sub-path ID, its data at time of cancellation, the parent
|
|
49
|
+
* step context, and the optional `meta` passed to `startSubPath()`.
|
|
50
|
+
* Return a patch to update the parent path's data (e.g. to record a
|
|
51
|
+
* "skipped" or "declined" outcome).
|
|
52
|
+
*/
|
|
53
|
+
onSubPathCancel?: (
|
|
54
|
+
subPathId: string,
|
|
55
|
+
subPathData: PathData,
|
|
56
|
+
ctx: PathStepContext<TData>,
|
|
57
|
+
meta?: Record<string, unknown>
|
|
29
58
|
) => Partial<TData> | void | Promise<Partial<TData> | void>;
|
|
30
59
|
}
|
|
31
60
|
|
|
@@ -82,6 +111,8 @@ interface ActivePath {
|
|
|
82
111
|
definition: PathDefinition;
|
|
83
112
|
currentStepIndex: number;
|
|
84
113
|
data: PathData;
|
|
114
|
+
visitedStepIds: Set<string>;
|
|
115
|
+
subPathMeta?: Record<string, unknown>;
|
|
85
116
|
}
|
|
86
117
|
|
|
87
118
|
export class PathEngine {
|
|
@@ -104,10 +135,21 @@ export class PathEngine {
|
|
|
104
135
|
return this._startAsync(path, initialData);
|
|
105
136
|
}
|
|
106
137
|
|
|
107
|
-
/**
|
|
108
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Starts a sub-path on top of the currently active path. Throws if no path
|
|
140
|
+
* is running.
|
|
141
|
+
*
|
|
142
|
+
* @param path The sub-path definition to start.
|
|
143
|
+
* @param initialData Data to seed the sub-path with.
|
|
144
|
+
* @param meta Optional correlation object returned unchanged to the
|
|
145
|
+
* parent step's `onSubPathComplete` / `onSubPathCancel`
|
|
146
|
+
* hooks. Use to identify which collection item triggered
|
|
147
|
+
* the sub-path without embedding that information in the
|
|
148
|
+
* sub-path's own data.
|
|
149
|
+
*/
|
|
150
|
+
public startSubPath(path: PathDefinition<any>, initialData: PathData = {}, meta?: Record<string, unknown>): Promise<void> {
|
|
109
151
|
this.requireActivePath();
|
|
110
|
-
return this.
|
|
152
|
+
return this._startAsync(path, initialData, meta);
|
|
111
153
|
}
|
|
112
154
|
|
|
113
155
|
public next(): Promise<void> {
|
|
@@ -120,18 +162,19 @@ export class PathEngine {
|
|
|
120
162
|
return this._previousAsync(active);
|
|
121
163
|
}
|
|
122
164
|
|
|
123
|
-
/** Cancel is synchronous (no hooks).
|
|
165
|
+
/** Cancel is synchronous for top-level paths (no hooks). Sub-path cancellation
|
|
166
|
+
* is async when an `onSubPathCancel` hook is present. Returns a Promise for
|
|
167
|
+
* API consistency. */
|
|
124
168
|
public cancel(): Promise<void> {
|
|
125
169
|
const active = this.requireActivePath();
|
|
126
170
|
if (this._isNavigating) return Promise.resolve();
|
|
127
171
|
|
|
128
172
|
const cancelledPathId = active.definition.id;
|
|
129
173
|
const cancelledData = { ...active.data };
|
|
174
|
+
const cancelledMeta = active.subPathMeta;
|
|
130
175
|
|
|
131
176
|
if (this.pathStack.length > 0) {
|
|
132
|
-
|
|
133
|
-
this.emitStateChanged();
|
|
134
|
-
return Promise.resolve();
|
|
177
|
+
return this._cancelSubPathAsync(cancelledPathId, cancelledData, cancelledMeta);
|
|
135
178
|
}
|
|
136
179
|
|
|
137
180
|
this.activePath = null;
|
|
@@ -219,7 +262,7 @@ export class PathEngine {
|
|
|
219
262
|
// Private async helpers
|
|
220
263
|
// ---------------------------------------------------------------------------
|
|
221
264
|
|
|
222
|
-
private async _startAsync(path: PathDefinition, initialData: PathData): Promise<void> {
|
|
265
|
+
private async _startAsync(path: PathDefinition, initialData: PathData, subPathMeta?: Record<string, unknown>): Promise<void> {
|
|
223
266
|
if (this._isNavigating) return;
|
|
224
267
|
|
|
225
268
|
if (this.activePath !== null) {
|
|
@@ -229,7 +272,9 @@ export class PathEngine {
|
|
|
229
272
|
this.activePath = {
|
|
230
273
|
definition: path,
|
|
231
274
|
currentStepIndex: 0,
|
|
232
|
-
data: { ...initialData }
|
|
275
|
+
data: { ...initialData },
|
|
276
|
+
visitedStepIds: new Set(),
|
|
277
|
+
subPathMeta
|
|
233
278
|
};
|
|
234
279
|
|
|
235
280
|
this._isNavigating = true;
|
|
@@ -374,10 +419,51 @@ export class PathEngine {
|
|
|
374
419
|
}
|
|
375
420
|
}
|
|
376
421
|
|
|
422
|
+
private async _cancelSubPathAsync(
|
|
423
|
+
cancelledPathId: string,
|
|
424
|
+
cancelledData: PathData,
|
|
425
|
+
cancelledMeta?: Record<string, unknown>
|
|
426
|
+
): Promise<void> {
|
|
427
|
+
// Pop the stack BEFORE emitting so snapshot() always reflects the parent
|
|
428
|
+
// path (which has a valid currentStepIndex) rather than the cancelled
|
|
429
|
+
// sub-path (which may have currentStepIndex = -1).
|
|
430
|
+
this.activePath = this.pathStack.pop() ?? null;
|
|
431
|
+
|
|
432
|
+
this._isNavigating = true;
|
|
433
|
+
this.emitStateChanged();
|
|
434
|
+
|
|
435
|
+
try {
|
|
436
|
+
const parent = this.activePath;
|
|
437
|
+
|
|
438
|
+
if (parent) {
|
|
439
|
+
const parentStep = this.getCurrentStep(parent);
|
|
440
|
+
if (parentStep.onSubPathCancel) {
|
|
441
|
+
const ctx: PathStepContext = {
|
|
442
|
+
pathId: parent.definition.id,
|
|
443
|
+
stepId: parentStep.id,
|
|
444
|
+
data: { ...parent.data },
|
|
445
|
+
isFirstEntry: !parent.visitedStepIds.has(parentStep.id)
|
|
446
|
+
};
|
|
447
|
+
this.applyPatch(
|
|
448
|
+
await parentStep.onSubPathCancel(cancelledPathId, cancelledData, ctx, cancelledMeta)
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
this._isNavigating = false;
|
|
454
|
+
this.emitStateChanged();
|
|
455
|
+
} catch (err) {
|
|
456
|
+
this._isNavigating = false;
|
|
457
|
+
this.emitStateChanged();
|
|
458
|
+
throw err;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
377
462
|
private async finishActivePath(): Promise<void> {
|
|
378
463
|
const finished = this.requireActivePath();
|
|
379
464
|
const finishedPathId = finished.definition.id;
|
|
380
465
|
const finishedData = { ...finished.data };
|
|
466
|
+
const finishedMeta = finished.subPathMeta;
|
|
381
467
|
|
|
382
468
|
if (this.pathStack.length > 0) {
|
|
383
469
|
this.activePath = this.pathStack.pop()!;
|
|
@@ -388,10 +474,11 @@ export class PathEngine {
|
|
|
388
474
|
const ctx: PathStepContext = {
|
|
389
475
|
pathId: parent.definition.id,
|
|
390
476
|
stepId: parentStep.id,
|
|
391
|
-
data: { ...parent.data }
|
|
477
|
+
data: { ...parent.data },
|
|
478
|
+
isFirstEntry: !parent.visitedStepIds.has(parentStep.id)
|
|
392
479
|
};
|
|
393
480
|
this.applyPatch(
|
|
394
|
-
await parentStep.onSubPathComplete(finishedPathId, finishedData, ctx)
|
|
481
|
+
await parentStep.onSubPathComplete(finishedPathId, finishedData, ctx, finishedMeta)
|
|
395
482
|
);
|
|
396
483
|
}
|
|
397
484
|
|
|
@@ -460,7 +547,8 @@ export class PathEngine {
|
|
|
460
547
|
const ctx: PathStepContext = {
|
|
461
548
|
pathId: active.definition.id,
|
|
462
549
|
stepId: step.id,
|
|
463
|
-
data: { ...active.data }
|
|
550
|
+
data: { ...active.data },
|
|
551
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
464
552
|
};
|
|
465
553
|
const skip = await step.shouldSkip(ctx);
|
|
466
554
|
if (!skip) break;
|
|
@@ -472,11 +560,16 @@ export class PathEngine {
|
|
|
472
560
|
const active = this.activePath;
|
|
473
561
|
if (!active) return;
|
|
474
562
|
const step = this.getCurrentStep(active);
|
|
563
|
+
const isFirstEntry = !active.visitedStepIds.has(step.id);
|
|
564
|
+
// Mark as visited before calling onEnter so re-entrant calls see the
|
|
565
|
+
// correct isFirstEntry value.
|
|
566
|
+
active.visitedStepIds.add(step.id);
|
|
475
567
|
if (!step.onEnter) return;
|
|
476
568
|
const ctx: PathStepContext = {
|
|
477
569
|
pathId: active.definition.id,
|
|
478
570
|
stepId: step.id,
|
|
479
|
-
data: { ...active.data }
|
|
571
|
+
data: { ...active.data },
|
|
572
|
+
isFirstEntry
|
|
480
573
|
};
|
|
481
574
|
return step.onEnter(ctx);
|
|
482
575
|
}
|
|
@@ -489,7 +582,8 @@ export class PathEngine {
|
|
|
489
582
|
const ctx: PathStepContext = {
|
|
490
583
|
pathId: active.definition.id,
|
|
491
584
|
stepId: step.id,
|
|
492
|
-
data: { ...active.data }
|
|
585
|
+
data: { ...active.data },
|
|
586
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
493
587
|
};
|
|
494
588
|
return step.onLeave(ctx);
|
|
495
589
|
}
|
|
@@ -502,7 +596,8 @@ export class PathEngine {
|
|
|
502
596
|
const ctx: PathStepContext = {
|
|
503
597
|
pathId: active.definition.id,
|
|
504
598
|
stepId: step.id,
|
|
505
|
-
data: { ...active.data }
|
|
599
|
+
data: { ...active.data },
|
|
600
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
506
601
|
};
|
|
507
602
|
return step.canMoveNext(ctx);
|
|
508
603
|
}
|
|
@@ -515,7 +610,8 @@ export class PathEngine {
|
|
|
515
610
|
const ctx: PathStepContext = {
|
|
516
611
|
pathId: active.definition.id,
|
|
517
612
|
stepId: step.id,
|
|
518
|
-
data: { ...active.data }
|
|
613
|
+
data: { ...active.data },
|
|
614
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
519
615
|
};
|
|
520
616
|
return step.canMovePrevious(ctx);
|
|
521
617
|
}
|
|
@@ -530,14 +626,15 @@ export class PathEngine {
|
|
|
530
626
|
active: ActivePath
|
|
531
627
|
): boolean {
|
|
532
628
|
if (!guard) return true;
|
|
629
|
+
const step = this.getCurrentStep(active);
|
|
533
630
|
const ctx: PathStepContext = {
|
|
534
631
|
pathId: active.definition.id,
|
|
535
|
-
stepId:
|
|
536
|
-
data: { ...active.data }
|
|
632
|
+
stepId: step.id,
|
|
633
|
+
data: { ...active.data },
|
|
634
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
537
635
|
};
|
|
538
636
|
const result = guard(ctx);
|
|
539
637
|
if (typeof result === "boolean") return result;
|
|
540
|
-
// Async guard — default to true (optimistic); the engine will enforce the real result on navigation.
|
|
541
638
|
return true;
|
|
542
639
|
}
|
|
543
640
|
|
|
@@ -551,14 +648,15 @@ export class PathEngine {
|
|
|
551
648
|
active: ActivePath
|
|
552
649
|
): string[] {
|
|
553
650
|
if (!fn) return [];
|
|
651
|
+
const step = this.getCurrentStep(active);
|
|
554
652
|
const ctx: PathStepContext = {
|
|
555
653
|
pathId: active.definition.id,
|
|
556
|
-
stepId:
|
|
557
|
-
data: { ...active.data }
|
|
654
|
+
stepId: step.id,
|
|
655
|
+
data: { ...active.data },
|
|
656
|
+
isFirstEntry: !active.visitedStepIds.has(step.id)
|
|
558
657
|
};
|
|
559
658
|
const result = fn(ctx);
|
|
560
659
|
if (Array.isArray(result)) return result;
|
|
561
|
-
// Async hook — default to empty; consumers should keep validationMessages synchronous.
|
|
562
660
|
return [];
|
|
563
661
|
}
|
|
564
662
|
}
|