@daltonr/pathwrite-core 0.10.0 → 0.10.1

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 CHANGED
@@ -1,573 +1,118 @@
1
1
  # @daltonr/pathwrite-core
2
2
 
3
- Headless path engine with zero dependencies. Manages step navigation, navigation guards, lifecycle hooks, and stack-based sub-path orchestration. Works equally well driving a UI wizard or a backend document lifecycle — no framework required.
3
+ Headless path/wizard/stepper engine with no framework dependencies.
4
4
 
5
- ## Quick Reference: Common Patterns
5
+ ## Installation
6
6
 
7
- ### ✅ Write Defensive Guards
8
- ```typescript
9
- // Guards run BEFORE onEnter - always handle undefined data
10
- canMoveNext: (ctx) => (ctx.data.name ?? "").trim().length > 0 // ✅ Safe
11
- canMoveNext: (ctx) => ctx.data.name.trim().length > 0 // ❌ Crashes!
7
+ ```bash
8
+ npm install @daltonr/pathwrite-core
12
9
  ```
13
10
 
14
- ### Use `isFirstEntry` to Prevent Data Reset
15
- ```typescript
16
- onEnter: (ctx) => {
17
- if (ctx.isFirstEntry) {
18
- return { items: [], status: "pending" }; // Initialize only on first visit
19
- }
20
- // Don't reset when user navigates back
21
- }
22
- ```
11
+ ## Quick start
23
12
 
24
- ### ✅ Track Unsaved Changes with `isDirty`
25
13
  ```typescript
26
- // In your UI component
27
- const snapshot = engine.snapshot();
28
- if (snapshot.isDirty) {
29
- // Show "unsaved changes" warning, disable Save button until changes made, etc.
30
- }
31
-
32
- // Revert changes
33
- <button onClick={() => engine.resetStep()}>Undo Changes</button>
34
- ```
35
-
36
- ### ✅ Compute Time on Step with `stepEnteredAt`
37
- ```typescript
38
- // Analytics or timeout warnings
39
- const snapshot = engine.snapshot();
40
- const durationMs = Date.now() - snapshot.stepEnteredAt;
41
- const durationSec = Math.floor(durationMs / 1000);
42
-
43
- if (durationSec > 300) { // 5 minutes
44
- console.warn("User has been on this step for 5+ minutes");
45
- }
46
- ```
47
-
48
- ### ✅ Correlate Sub-Paths with `meta`
49
- ```typescript
50
- // Starting sub-path
51
- engine.startSubPath(subPath, initialData, { itemIndex: i });
52
-
53
- // In parent step
54
- onSubPathComplete: (_id, subData, ctx, meta) => {
55
- const index = meta?.itemIndex; // Correlate back to collection item
56
- // ...
57
- }
58
- ```
59
-
60
- ---
61
-
62
- ## Key types
14
+ import { PathEngine } from "@daltonr/pathwrite-core";
15
+ import type { PathDefinition } from "@daltonr/pathwrite-core";
63
16
 
64
- ```typescript
65
- // Define your path's data shape once
66
- interface CourseData extends PathData {
67
- courseName: string;
68
- subjects: SubjectEntry[];
17
+ interface SignupData {
18
+ name: string;
19
+ email: string;
69
20
  }
70
21
 
71
- const path: PathDefinition<CourseData> = {
72
- id: "course-path",
22
+ const signupPath: PathDefinition<SignupData> = {
23
+ id: "signup",
73
24
  steps: [
74
25
  {
75
26
  id: "details",
76
- canMoveNext: (ctx) => ctx.data.courseName.length > 0,
77
- onLeave: (ctx) => ({ courseName: ctx.data.courseName.trim() })
27
+ canMoveNext: ({ data }) => (data.name ?? "").length > 0,
78
28
  },
79
- { id: "review" }
80
- ],
81
- onComplete: (data) => {
82
- // Called when the path completes
83
- console.log("Course created:", data.courseName);
84
- },
85
- onCancel: (data) => {
86
- // Called when the path is cancelled
87
- console.log("Course creation cancelled");
88
- }
89
- };
90
- ```
91
-
92
- | Type | Description |
93
- |------|-------------|
94
- | `PathDefinition<TData>` | A path's ID, title, ordered list of step definitions, and optional `onComplete` / `onCancel` callbacks. |
95
- | `PathStep<TData>` | A single step: guards, lifecycle hooks. |
96
- | `PathStepContext<TData>` | Passed to every hook and guard. `data` is a **readonly snapshot copy** — return a patch to update state. |
97
- | `PathSnapshot<TData>` | Point-in-time read of the engine: step ID, index, count, flags, and a copy of data. |
98
- | `PathEvent` | Union of `stateChanged` (includes `cause`), `completed`, `cancelled`, and `resumed`. |
99
- | `StateChangeCause` | Identifies the method that triggered a `stateChanged` event: `"start"` \| `"next"` \| `"previous"` \| `"goToStep"` \| `"goToStepChecked"` \| `"setData"` \| `"resetStep"` \| `"cancel"` \| `"restart"`. |
100
- | `PathObserver` | `(event: PathEvent, engine: PathEngine) => void` — a function registered at construction time that receives every event for the engine's lifetime. |
101
- | `PathEngineOptions` | `{ observers?: PathObserver[] }` — options accepted by the `PathEngine` constructor and `PathEngine.fromState()`. |
102
- | `ObserverStrategy` | Union type for the five built-in trigger strategies: `"onEveryChange" \| "onNext" \| "onSubPathComplete" \| "onComplete" \| "manual"`. Import and use in your own observer factories. |
103
- | `matchesStrategy` | `(strategy: ObserverStrategy, event: PathEvent) => boolean` — returns `true` when an event should trigger an observer under the given strategy. Shared by every observer so none re-implement the same "when do I fire?" logic. |
104
-
105
- ## PathEngine API
106
-
107
- ```typescript
108
- // Observers are wired before the first event fires
109
- const engine = new PathEngine({ observers: [myObserver, anotherObserver] });
110
-
111
- engine.start(definition, initialData?); // start or re-start a path
112
- engine.restart(definition, initialData?); // tear down stack and start fresh (no hooks, no cancelled event)
113
- engine.startSubPath(definition, data?, meta?); // push sub-path onto the stack (requires active path)
114
- engine.next();
115
- engine.previous();
116
- engine.cancel();
117
- engine.setData(key, value); // update a single data value; emits stateChanged
118
- engine.resetStep(); // revert current step data to what it was on entry; emits stateChanged
119
- engine.goToStepChecked(stepId); // jump to step by ID; checks canMoveNext / canMovePrevious first
120
- engine.snapshot(); // returns PathSnapshot | null
121
-
122
- // Key PathSnapshot fields
123
- snapshot.isDirty // true if any data changed since entering this step (resets on navigation or resetStep)
124
- snapshot.hasAttemptedNext // true after user clicks Next at least once on this step
125
- snapshot.stepEnteredAt // Date.now() timestamp when step was entered (for analytics, timeout warnings)
126
-
127
- // Serialization API (for persistence)
128
- const state = engine.exportState(); // returns SerializedPathState | null
129
- const restoredEngine = PathEngine.fromState(state, pathDefinitions, { observers: [...] });
130
-
131
- // Removable one-off listener (use subscribe when you need to unsubscribe)
132
- const unsubscribe = engine.subscribe((event) => { ... });
133
- unsubscribe();
134
- ```
135
-
136
- ## Observers
137
-
138
- Observers are functions registered at construction time. They receive every event for the engine's lifetime and cannot be removed — for removable listeners use `subscribe()`.
139
-
140
- ```typescript
141
- // A logger observer
142
- const logger: PathObserver = (event) =>
143
- console.log(`[${event.type}]`, 'cause' in event ? event.cause : '');
144
-
145
- // A persistence observer using matchesStrategy from core
146
- import { matchesStrategy } from "@daltonr/pathwrite-core";
147
-
148
- const persist: PathObserver = (event, engine) => {
149
- if (matchesStrategy("onNext", event)) {
150
- myStore.save(engine.exportState());
151
- }
152
- };
153
-
154
- const engine = new PathEngine({ observers: [logger, persist] });
155
-
156
- // Observers are also passed through fromState — so restored engines are fully observed
157
- const restoredEngine = PathEngine.fromState(saved, pathDefs, { observers: [logger, persist] });
158
- ```
159
-
160
- The second argument to each observer is the engine itself, which lets observers call `engine.exportState()`, `engine.snapshot()`, etc. without needing a separate reference.
161
-
162
- ### Building your own observer factory
163
-
164
- `ObserverStrategy` and `matchesStrategy` are exported from core so any observer — not just HTTP persistence — can share the same strategy logic without reimplementing it:
165
-
166
- ```typescript
167
- import { type ObserverStrategy, matchesStrategy, type PathObserver } from "@daltonr/pathwrite-core";
168
-
169
- function myObserver(strategy: ObserverStrategy): PathObserver {
170
- return (event, engine) => {
171
- if (matchesStrategy(strategy, event)) {
172
- // react — save to MongoDB, write to a log, fire analytics, etc.
173
- }
174
- };
175
- }
176
- ```
177
-
178
-
179
-
180
- All hooks are optional. Hooks that want to update data **return a partial patch** — the engine applies it automatically. Direct mutation of `ctx.data` is a no-op; the context receives a copy.
181
-
182
- | Hook | When called | Can return patch |
183
- |------|-------------|-----------------|
184
- | `onEnter` | On arrival at a step (start, next, previous, resume) | ✅ |
185
- | `onLeave` | On departure from a step (only when the guard allows) | ✅ |
186
- | `onSubPathComplete` | On the parent step when a sub-path finishes | ✅ |
187
- | `onSubPathCancel` | On the parent step when a sub-path is cancelled | ✅ |
188
- | `canMoveNext` | Before advancing — return `false` to block | — |
189
- | `canMovePrevious` | Before going back — return `false` to block | — |
190
- | `validationMessages` | On every snapshot — return `string[]` explaining why the step is not yet valid | — |
191
-
192
- ### Using `isFirstEntry` to Avoid Data Reset
193
-
194
- **Problem:** `onEnter` fires EVERY time you enter a step, including when navigating backward. If you initialize data in `onEnter`, you'll overwrite user input when they return to the step.
195
-
196
- **Solution:** Use `ctx.isFirstEntry` to distinguish first visit from re-entry:
197
-
198
- ```typescript
199
- {
200
- id: "user-details",
201
- onEnter: (ctx) => {
202
- // Only initialize on first entry, not on re-entry
203
- if (ctx.isFirstEntry) {
204
- return {
205
- name: "",
206
- email: "",
207
- preferences: { newsletter: true }
208
- };
209
- }
210
- // On re-entry (e.g., user pressed Back), keep existing data
211
- }
212
- }
213
- ```
214
-
215
- **Common Patterns:**
216
-
217
- ```typescript
218
- // Initialize empty collection on first entry only
219
- onEnter: (ctx) => {
220
- if (ctx.isFirstEntry) {
221
- return { approvals: [], comments: [] };
222
- }
223
- }
224
-
225
- // Fetch data from API only once
226
- onEnter: async (ctx) => {
227
- if (ctx.isFirstEntry) {
228
- const userData = await fetchUserProfile(ctx.data.userId);
229
- return { ...userData };
230
- }
231
- }
232
-
233
- // Set defaults but preserve user changes on re-entry
234
- onEnter: (ctx) => {
235
- if (ctx.isFirstEntry) {
236
- return {
237
- reviewStatus: "pending",
238
- lastModified: new Date().toISOString()
239
- };
240
- }
241
- }
242
- ```
243
-
244
- ### Snapshot guard booleans
245
-
246
- The snapshot includes `canMoveNext` and `canMovePrevious` booleans — the evaluated results of the current step's guards. Use them to proactively disable navigation buttons. Sync guards reflect their real value; async guards default to `true` (optimistic). Both update automatically when data changes via `setData`.
247
-
248
- ### ⚠️ IMPORTANT: Guards Run Before `onEnter`
249
-
250
- **Guards are evaluated BEFORE `onEnter` runs on first entry.** This is critical to understand:
251
-
252
- 1. When a path starts, the engine creates the first snapshot immediately
253
- 2. Guards (`canMoveNext`, `validationMessages`) are evaluated to populate that snapshot
254
- 3. Only THEN does `onEnter` run to initialize data
255
-
256
- **This means guards see `initialData`, not data that `onEnter` would set.**
257
-
258
- #### Defensive Guard Patterns
259
-
260
- Always write guards defensively to handle undefined/missing data:
261
-
262
- ```typescript
263
- // ❌ WRONG - Crashes on first snapshot when initialData = {}
264
- {
265
- id: "user-details",
266
- canMoveNext: (ctx) => ctx.data.name.trim().length > 0, // TypeError!
267
- onEnter: () => ({ name: "" }) // Too late - guard already ran
268
- }
269
-
270
- // ✅ CORRECT - Use nullish coalescing
271
- {
272
- id: "user-details",
273
- canMoveNext: (ctx) => (ctx.data.name ?? "").trim().length > 0,
274
- onEnter: () => ({ name: "" })
275
- }
276
-
277
- // ✅ ALSO CORRECT - Provide initialData so fields exist from the start
278
- engine.start(path, { name: "", email: "" });
279
- ```
280
-
281
- #### More Defensive Patterns
282
-
283
- ```typescript
284
- // Arrays
285
- canMoveNext: (ctx) => (ctx.data.items ?? []).length > 0
286
-
287
- // Numbers
288
- canMoveNext: (ctx) => (ctx.data.age ?? 0) >= 18
289
-
290
- // Complex objects
291
- canMoveNext: (ctx) => {
292
- const address = ctx.data.address ?? {};
293
- return (address.street ?? "").length > 0 && (address.city ?? "").length > 0;
294
- }
295
-
296
- // Validation messages
297
- validationMessages: (ctx) => {
298
- const messages = [];
299
- if (!(ctx.data.email ?? "").includes("@")) {
300
- messages.push("Please enter a valid email");
301
- }
302
- return messages;
303
- }
304
- ```
305
-
306
- #### Error Handling
307
-
308
- If a guard or `validationMessages` hook throws, Pathwrite catches the error, emits a `console.warn` (with the step ID and thrown value), and returns the safe default (`true` / `[]`) so the UI remains operable. However, **relying on error handling is not recommended** — write defensive guards instead.
309
-
310
- ### Sub-path example with meta correlation
311
-
312
- ```typescript
313
- {
314
- id: "subjects-list",
315
- onSubPathComplete: (_id, subData, ctx, meta) => {
316
- // meta contains the correlation object passed to startSubPath
317
- const index = meta?.index as number;
318
- return {
319
- subjects: [...(ctx.data.subjects ?? []), {
320
- index,
321
- name: subData.name,
322
- teacher: subData.teacher
323
- }]
324
- };
325
- },
326
- onSubPathCancel: (_id, ctx, meta) => {
327
- // Called when user cancels sub-path (e.g., Back on first step)
328
- const index = meta?.index as number;
329
- console.log(`User skipped subject ${index}`);
330
- // Return patch to record the skip, or return nothing to ignore
331
- }
332
- }
333
- ```
334
-
335
- ## Sub-Paths: Comprehensive Guide
336
-
337
- Sub-paths let you nest workflows — for example, running a mini-wizard for each item in a collection.
338
-
339
- ### Basic Flow
340
-
341
- ```typescript
342
- engine.start(mainPath) → stack: [] active: main
343
- engine.startSubPath(subPath) → stack: [main] active: sub
344
- engine.next() // sub finishes
345
- → onSubPathComplete fires on the parent step
346
- → stack: [] active: main (resumed)
347
- ```
348
-
349
- ### Complete Example: Document Approval Workflow
350
-
351
- ```typescript
352
- interface ApprovalData extends PathData {
353
- documentTitle: string;
354
- approvers: Array<{ name: string; email: string }>;
355
- approvals: Array<{ approverIndex: number; decision: string; comments: string }>;
356
- }
357
-
358
- interface ApproverReviewData extends PathData {
359
- documentTitle: string; // Passed from parent
360
- decision?: "approve" | "reject";
361
- comments?: string;
362
- }
363
-
364
- // Main path
365
- const approvalPath: PathDefinition<ApprovalData> = {
366
- id: "approval-workflow",
367
- steps: [
368
- {
369
- id: "setup",
370
- onEnter: (ctx) => {
371
- if (ctx.isFirstEntry) {
372
- return { approvers: [], approvals: [] };
373
- }
374
- }
375
- },
376
- {
377
- id: "run-approvals",
378
- // Block next until all approvers have completed
379
- canMoveNext: (ctx) => {
380
- const approversCount = (ctx.data.approvers ?? []).length;
381
- const approvalsCount = (ctx.data.approvals ?? []).length;
382
- return approversCount > 0 && approvalsCount === approversCount;
383
- },
384
- validationMessages: (ctx) => {
385
- const approversCount = (ctx.data.approvers ?? []).length;
386
- const approvalsCount = (ctx.data.approvals ?? []).length;
387
- const remaining = approversCount - approvalsCount;
388
- if (remaining > 0) {
389
- return [`${remaining} approver(s) still need to complete their review`];
390
- }
391
- return [];
392
- },
393
- // Called when each approver sub-path completes
394
- onSubPathComplete: (_subPathId, subData, ctx, meta) => {
395
- const reviewData = subData as ApproverReviewData;
396
- const approverIndex = meta?.approverIndex as number;
397
-
398
- return {
399
- approvals: [
400
- ...(ctx.data.approvals ?? []),
401
- {
402
- approverIndex,
403
- decision: reviewData.decision!,
404
- comments: reviewData.comments ?? ""
405
- }
406
- ]
407
- };
408
- },
409
- // Called when approver cancels (presses Back on first step)
410
- onSubPathCancel: (_subPathId, ctx, meta) => {
411
- const approverIndex = meta?.approverIndex as number;
412
- console.log(`Approver ${approverIndex} declined to review`);
413
- // Could add to a "skipped" list or just ignore
414
- }
415
- },
416
- { id: "summary" }
417
- ]
418
- };
419
-
420
- // Sub-path for each approver
421
- const approverReviewPath: PathDefinition<ApproverReviewData> = {
422
- id: "approver-review",
423
- steps: [
424
- { id: "review-document" },
425
29
  {
426
- id: "make-decision",
427
- canMoveNext: (ctx) => ctx.data.decision !== undefined
30
+ id: "confirm",
428
31
  },
429
- { id: "add-comments" }
430
- ]
32
+ ],
33
+ onComplete: (data) => console.log("Done:", data),
431
34
  };
432
35
 
433
- // Usage in UI component
434
- function ReviewStep() {
435
- const approvers = snapshot.data.approvers ?? [];
436
- const approvals = snapshot.data.approvals ?? [];
437
-
438
- const startReview = (approverIndex: number) => {
439
- const approver = approvers[approverIndex];
440
-
441
- // Start sub-path with meta correlation
442
- engine.startSubPath(
443
- approverReviewPath,
444
- {
445
- documentTitle: snapshot.data.documentTitle, // Pass context from parent
446
- // decision and comments will be filled during sub-path
447
- },
448
- { approverIndex } // Meta: correlates completion back to this approver
449
- );
450
- };
451
-
452
- return (
453
- <div>
454
- {approvers.map((approver, i) => (
455
- <div key={i}>
456
- {approver.name}
457
- {approvals.some(a => a.approverIndex === i) ? (
458
- <span>✓ Reviewed</span>
459
- ) : (
460
- <button onClick={() => startReview(i)}>Start Review</button>
461
- )}
462
- </div>
463
- ))}
464
- </div>
465
- );
466
- }
467
- ```
468
-
469
- ### Sub-Path Key Concepts
470
-
471
- 1. **Stack-based**: Sub-paths push onto a stack. Parent is paused while sub-path is active.
472
-
473
- 2. **Meta correlation**: Pass a `meta` object to `startSubPath()` to identify which collection item triggered the sub-path. It's passed back unchanged to `onSubPathComplete` and `onSubPathCancel`.
474
-
475
- 3. **Data isolation**: Sub-path data is separate from parent data. Pass needed context (like `documentTitle`) in `initialData`.
476
-
477
- 4. **Completion vs Cancellation**:
478
- - **Complete**: User reaches the last step → `onSubPathComplete` fires
479
- - **Cancel**: User presses Back on first step → `onSubPathCancel` fires
480
- - `onSubPathComplete` is NOT called on cancellation
481
-
482
- 5. **Parent remains on same step**: After sub-path completes/cancels, parent resumes at the same step (not advanced automatically).
483
-
484
- 6. **Guards still apply**: Parent step's `canMoveNext` is evaluated when resuming. Use it to block until all sub-paths complete.
485
-
486
- ### What the Shell Renders During Sub-Paths
487
-
488
- When a sub-path is active:
489
- - The **root progress bar** stays visible (compact, muted) above the sub-path's progress bar so users always see their place in the main flow
490
- - The main progress bar shows the sub-path's steps
491
- - Back button on sub-path's first step cancels the sub-path
492
- - Completing the sub-path returns to parent (parent step re-renders)
493
-
494
- The snapshot includes `rootProgress` (type `RootProgress`) when `nestingLevel > 0`:
495
-
496
- ```typescript
497
- if (snapshot.rootProgress) {
498
- // { pathId, stepIndex, stepCount, progress, steps }
499
- console.log(`Main flow: step ${snapshot.rootProgress.stepIndex + 1} of ${snapshot.rootProgress.stepCount}`);
500
- }
501
- ```
502
-
503
- ### Nesting Levels
504
-
505
- Sub-paths can themselves start sub-paths (unlimited nesting). Use `snapshot.nestingLevel` to determine depth:
506
- - `0` = top-level path
507
- - `1` = first-level sub-path
508
- - `2+` = deeper nesting
36
+ const engine = new PathEngine();
37
+ await engine.start(signupPath, { name: "", email: "" });
509
38
 
510
- ## Events
39
+ engine.setData("name", "Alice");
40
+ await engine.next();
511
41
 
512
- ```typescript
513
- engine.subscribe((event) => {
514
- switch (event.type) {
515
- case "stateChanged": // event.cause ("start" | "next" | "previous" | ...), event.snapshot
516
- case "completed": // event.pathId, event.data
517
- case "cancelled": // event.pathId, event.data
518
- case "resumed": // event.resumedPathId, event.fromSubPathId, event.snapshot
519
- }
520
- });
521
- ```
522
-
523
- Every `stateChanged` event includes a `cause` field (`StateChangeCause`) identifying which public method triggered it. Use this to react to specific operations — for example, the `store` package uses `event.cause === "next"` to implement the `onNext` persistence strategy.
524
-
525
- ## State Persistence
526
-
527
- The engine supports exporting and restoring state for persistence scenarios (e.g., saving wizard progress to a server or localStorage).
528
-
529
- ### exportState()
530
-
531
- Returns a plain JSON-serializable object (`SerializedPathState`) containing the current state:
532
- - Current path ID and step index
533
- - Path data
534
- - Visited step IDs
535
- - Sub-path stack (if nested paths are active)
536
- - Navigation flags
537
-
538
- Returns `null` if no path is active.
539
-
540
- ```typescript
541
- const state = engine.exportState();
542
- if (state) {
543
- const json = JSON.stringify(state);
544
- // Save to localStorage, send to server, etc.
545
- }
546
- ```
547
-
548
- ### PathEngine.fromState()
549
-
550
- Restores a PathEngine from previously exported state. **Important:** You must provide the same path definitions that were active when the state was exported.
551
-
552
- ```typescript
553
- const state = JSON.parse(savedJson);
554
- const engine = PathEngine.fromState(state, {
555
- "main-path": mainPathDefinition,
556
- "sub-path": subPathDefinition
557
- });
558
-
559
- // Engine is restored to the exact step and state
560
42
  const snapshot = engine.snapshot();
561
- ```
562
-
563
- Throws if:
564
- - State references a path ID not in `pathDefinitions`
565
- - State version is unsupported
43
+ // snapshot.stepId → "confirm"
44
+ // snapshot.stepIndex → 1
45
+ // snapshot.isLastStep → true
46
+ ```
47
+
48
+ ## PathEngine
49
+
50
+ | Method | Signature summary | What it does |
51
+ |---|---|---|
52
+ | `start` | `(definition, initialData?) => Promise<void>` | Start a new path (or re-start the current one). |
53
+ | `next` | `() => Promise<void>` | Advance to the next step if guards pass. |
54
+ | `previous` | `() => Promise<void>` | Go back to the previous step if guards pass. |
55
+ | `cancel` | `() => Promise<void>` | Cancel the active path; fires `onCancel` and emits `cancelled`. |
56
+ | `goToStep` | `(stepId: string) => Promise<void>` | Jump directly to a step by ID without checking guards. |
57
+ | `setData` | `(key, value) => void` | Update a single data field; emits `stateChanged`. |
58
+ | `resetStep` | `() => void` | Revert data to what it was when the current step was entered. |
59
+ | `startSubPath` | `(definition, data?, meta?) => Promise<void>` | Push a nested sub-path onto the stack. |
60
+ | `exportState` | `() => SerializedPathState \| null` | Return a plain JSON-serialisable snapshot of all engine state. |
61
+ | `fromState` | `static (state, pathDefs, options?) => PathEngine` | Reconstruct a `PathEngine` from previously exported state. |
62
+ | `subscribe` | `(listener) => () => void` | Register a removable event listener; returns an unsubscribe function. |
63
+
64
+ For the complete options and overloads see [docs/reference/core-api.md](../../docs/reference/core-api.md).
65
+
66
+ ## PathSnapshot
67
+
68
+ Returned by `engine.snapshot()`. All properties are read-only.
69
+
70
+ | Property | Type | Description |
71
+ |---|---|---|
72
+ | `stepId` | `string` | ID of the currently active step. |
73
+ | `stepIndex` | `number` | Zero-based index of the current step. |
74
+ | `stepCount` | `number` | Total number of steps in the active path. |
75
+ | `stepTitle` | `string \| undefined` | Optional title defined on the step. |
76
+ | `data` | `Readonly<TData>` | Copy of all path data accumulated so far. |
77
+ | `fieldErrors` | `FieldErrors` | Map of field ID → error string from `fieldErrors` hook. |
78
+ | `fieldWarnings` | `FieldErrors` | Map of field ID → warning string from `fieldWarnings` hook. |
79
+ | `canMoveNext` | `boolean` | Evaluated result of the current step's `canMoveNext` guard. |
80
+ | `canMovePrevious` | `boolean` | Evaluated result of the current step's `canMovePrevious` guard. |
81
+ | `isFirstStep` | `boolean` | `true` when `stepIndex === 0`. |
82
+ | `isLastStep` | `boolean` | `true` when on the final step of the path. |
83
+ | `status` | `PathStatus` | Current engine state: `"idle"`, `"active"`, `"completed"`, or `"cancelled"`. |
84
+ | `blockingError` | `string \| undefined` | Reason string from a guard that returned `{ allowed: false, reason }`. |
85
+ | `progress` | `number` | Completion fraction in the range `[0, 1]`. |
86
+ | `isDirty` | `boolean` | `true` if any data field has changed since entering the current step. |
87
+
88
+ ## defineServices
89
+
90
+ `defineServices` wraps async service functions with caching, in-flight deduplication, and retry — useful for guards that call external APIs on every navigation attempt.
91
+
92
+ ```typescript
93
+ import { defineServices, ServiceUnavailableError } from "@daltonr/pathwrite-core";
94
+
95
+ const services = defineServices(
96
+ {
97
+ getRoles: { fn: api.getRoles, cache: "auto" },
98
+ getUser: { fn: api.getUser, cache: "auto", retry: 2 },
99
+ submitForm: { fn: api.submitForm, cache: "none" },
100
+ },
101
+ { storage: localStorage, keyPrefix: "myapp:svc:" }
102
+ );
566
103
 
567
- The restored engine is fully functional — you can continue navigation, modify data, complete or cancel paths normally.
104
+ await services.prefetch(); // warm zero-arg cached methods
105
+ const roles = await services.getRoles();
568
106
  ```
569
107
 
570
- ---
108
+ | Option | Values | Description |
109
+ |---|---|---|
110
+ | `cache` | `"auto"` \| `"none"` | `"auto"` caches the first result and deduplicates concurrent calls. `"none"` always calls through. |
111
+ | `retry` | `number` (default `0`) | Additional attempts on failure, with exponential back-off starting at 200 ms. Exhausted retries throw `ServiceUnavailableError`. |
112
+ | `storage` | `SyncServiceStorage \| AsyncServiceStorage` | Optional persistent cache (e.g. `localStorage`, React Native `AsyncStorage`). |
571
113
 
572
- © 2026 Devjoy Ltd. MIT License.
114
+ ## Further reading
573
115
 
116
+ - [docs/reference/core-api.md](../../docs/reference/core-api.md) — full method and type reference
117
+ - [docs/getting-started/core-concepts.md](../../docs/getting-started/core-concepts.md) — guards, lifecycle hooks, sub-paths, and observers explained
118
+ - [docs/README.md](../../docs/README.md) — documentation index
package/dist/index.d.ts CHANGED
@@ -689,3 +689,66 @@ export declare class PathEngine {
689
689
  */
690
690
  private computeIsDirty;
691
691
  }
692
+ /** Synchronous key-value store (e.g. localStorage, sessionStorage). */
693
+ export interface SyncServiceStorage {
694
+ getItem(key: string): string | null;
695
+ setItem(key: string, value: string): void;
696
+ removeItem(key: string): void;
697
+ }
698
+ /** Asynchronous key-value store (e.g. React Native AsyncStorage). */
699
+ export interface AsyncServiceStorage {
700
+ getItem(key: string): Promise<string | null>;
701
+ setItem(key: string, value: string): Promise<void>;
702
+ removeItem(key: string): Promise<void>;
703
+ }
704
+ /** Union accepted by defineServices — sync or async storage. */
705
+ export type ServiceCacheStorage = SyncServiceStorage | AsyncServiceStorage;
706
+ export type CachePolicy = "auto" | "none";
707
+ type AnyFn = (...args: any[]) => Promise<any>;
708
+ export interface ServiceMethodConfig<F extends AnyFn> {
709
+ fn: F;
710
+ cache: CachePolicy;
711
+ retry?: number;
712
+ }
713
+ type ServiceConfig<T extends Record<string, AnyFn>> = {
714
+ [K in keyof T]: ServiceMethodConfig<T[K]>;
715
+ };
716
+ export interface DefineServicesOptions {
717
+ storage?: ServiceCacheStorage;
718
+ keyPrefix?: string;
719
+ }
720
+ /**
721
+ * Thrown when all retry attempts for a service method have been exhausted.
722
+ */
723
+ export declare class ServiceUnavailableError extends Error {
724
+ readonly method: string;
725
+ readonly attempts: number;
726
+ readonly cause: unknown;
727
+ constructor(method: string, attempts: number, cause: unknown);
728
+ }
729
+ export type PrefetchManifest<T extends Record<string, AnyFn>> = {
730
+ [K in keyof T]?: Parameters<T[K]>[] | undefined;
731
+ };
732
+ export type DefinedServices<T extends Record<string, AnyFn>> = T & {
733
+ prefetch(manifest?: PrefetchManifest<T>): Promise<void>;
734
+ };
735
+ /**
736
+ * Wraps a set of async service methods with caching, deduplication, and retry.
737
+ *
738
+ * @example
739
+ * ```ts
740
+ * const services = defineServices(
741
+ * {
742
+ * getRoles: { fn: api.getRoles, cache: 'auto' },
743
+ * getUser: { fn: api.getUser, cache: 'auto', retry: 2 },
744
+ * submitForm: { fn: api.submitForm, cache: 'none' },
745
+ * },
746
+ * { storage: localStorage, keyPrefix: 'myapp:svc:' }
747
+ * );
748
+ *
749
+ * await services.prefetch();
750
+ * const roles = await services.getRoles();
751
+ * ```
752
+ */
753
+ export declare function defineServices<T extends Record<string, AnyFn>>(config: ServiceConfig<T>, options?: DefineServicesOptions): DefinedServices<T>;
754
+ export {};
package/dist/index.js CHANGED
@@ -1051,4 +1051,168 @@ export class PathEngine {
1051
1051
  return false;
1052
1052
  }
1053
1053
  }
1054
+ /**
1055
+ * Thrown when all retry attempts for a service method have been exhausted.
1056
+ */
1057
+ export class ServiceUnavailableError extends Error {
1058
+ method;
1059
+ attempts;
1060
+ cause;
1061
+ constructor(method, attempts, cause) {
1062
+ super(`Service method "${method}" failed after ${attempts} attempt(s).`);
1063
+ this.method = method;
1064
+ this.attempts = attempts;
1065
+ this.cause = cause;
1066
+ this.name = "ServiceUnavailableError";
1067
+ }
1068
+ }
1069
+ function _svcStorageGet(storage, key) {
1070
+ const result = storage.getItem(key);
1071
+ if (result instanceof Promise)
1072
+ return result;
1073
+ return Promise.resolve(result);
1074
+ }
1075
+ function _svcStorageSet(storage, key, value) {
1076
+ const result = storage.setItem(key, value);
1077
+ if (result instanceof Promise)
1078
+ return result;
1079
+ return Promise.resolve();
1080
+ }
1081
+ function _svcSerializeArgs(args) {
1082
+ try {
1083
+ return JSON.stringify(args);
1084
+ }
1085
+ catch {
1086
+ return args.map(String).join(",");
1087
+ }
1088
+ }
1089
+ async function _svcWithRetry(fn, maxRetries, methodName) {
1090
+ let lastErr;
1091
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
1092
+ try {
1093
+ return await fn();
1094
+ }
1095
+ catch (err) {
1096
+ lastErr = err;
1097
+ if (attempt < maxRetries) {
1098
+ await new Promise((r) => setTimeout(r, 200 * Math.pow(2, attempt)));
1099
+ }
1100
+ }
1101
+ }
1102
+ throw new ServiceUnavailableError(methodName, maxRetries + 1, lastErr);
1103
+ }
1104
+ /**
1105
+ * Wraps a set of async service methods with caching, deduplication, and retry.
1106
+ *
1107
+ * @example
1108
+ * ```ts
1109
+ * const services = defineServices(
1110
+ * {
1111
+ * getRoles: { fn: api.getRoles, cache: 'auto' },
1112
+ * getUser: { fn: api.getUser, cache: 'auto', retry: 2 },
1113
+ * submitForm: { fn: api.submitForm, cache: 'none' },
1114
+ * },
1115
+ * { storage: localStorage, keyPrefix: 'myapp:svc:' }
1116
+ * );
1117
+ *
1118
+ * await services.prefetch();
1119
+ * const roles = await services.getRoles();
1120
+ * ```
1121
+ */
1122
+ export function defineServices(config, options = {}) {
1123
+ const { storage, keyPrefix = "pw-svc:" } = options;
1124
+ const memCache = new Map();
1125
+ const inFlight = new Map();
1126
+ if (storage) {
1127
+ const syncStorage = storage;
1128
+ if (typeof syncStorage.getItem === "function") {
1129
+ try {
1130
+ for (const [methodName, methodConfig] of Object.entries(config)) {
1131
+ if (methodConfig.cache !== "auto")
1132
+ continue;
1133
+ const baseKey = `${keyPrefix}${methodName}`;
1134
+ const raw = syncStorage.getItem(baseKey);
1135
+ if (raw !== null && !(raw instanceof Promise)) {
1136
+ try {
1137
+ memCache.set(baseKey, JSON.parse(raw));
1138
+ }
1139
+ catch { /* ignore */ }
1140
+ }
1141
+ }
1142
+ }
1143
+ catch { /* storage unavailable */ }
1144
+ }
1145
+ }
1146
+ function cacheKey(methodName, args) {
1147
+ return args.length === 0
1148
+ ? `${keyPrefix}${methodName}`
1149
+ : `${keyPrefix}${methodName}:${_svcSerializeArgs(args)}`;
1150
+ }
1151
+ async function callMethod(methodName, methodConfig, args) {
1152
+ if (methodConfig.cache === "none") {
1153
+ return _svcWithRetry(() => methodConfig.fn(...args), methodConfig.retry ?? 0, methodName);
1154
+ }
1155
+ const key = cacheKey(methodName, args);
1156
+ if (memCache.has(key))
1157
+ return memCache.get(key);
1158
+ if (storage) {
1159
+ const existing = await _svcStorageGet(storage, key);
1160
+ if (existing !== null) {
1161
+ try {
1162
+ const parsed = JSON.parse(existing);
1163
+ memCache.set(key, parsed);
1164
+ return parsed;
1165
+ }
1166
+ catch { /* corrupt — fall through */ }
1167
+ }
1168
+ }
1169
+ if (inFlight.has(key))
1170
+ return inFlight.get(key);
1171
+ const promise = _svcWithRetry(() => methodConfig.fn(...args), methodConfig.retry ?? 0, methodName)
1172
+ .then(async (value) => {
1173
+ memCache.set(key, value);
1174
+ inFlight.delete(key);
1175
+ if (storage) {
1176
+ try {
1177
+ await _svcStorageSet(storage, key, JSON.stringify(value));
1178
+ }
1179
+ catch { /* non-fatal */ }
1180
+ }
1181
+ return value;
1182
+ })
1183
+ .catch((err) => { inFlight.delete(key); throw err; });
1184
+ inFlight.set(key, promise);
1185
+ return promise;
1186
+ }
1187
+ const wrapped = {};
1188
+ for (const [methodName, methodConfig] of Object.entries(config)) {
1189
+ wrapped[methodName] = (...args) => callMethod(methodName, methodConfig, args);
1190
+ }
1191
+ wrapped.prefetch = async (manifest) => {
1192
+ const tasks = [];
1193
+ if (manifest) {
1194
+ for (const [methodName, argSets] of Object.entries(manifest)) {
1195
+ const methodConfig = config[methodName];
1196
+ if (!methodConfig || methodConfig.cache === "none")
1197
+ continue;
1198
+ if (!argSets || argSets.length === 0) {
1199
+ tasks.push(callMethod(methodName, methodConfig, []));
1200
+ }
1201
+ else {
1202
+ for (const argSet of argSets)
1203
+ tasks.push(callMethod(methodName, methodConfig, argSet));
1204
+ }
1205
+ }
1206
+ }
1207
+ else {
1208
+ for (const [methodName, methodConfig] of Object.entries(config)) {
1209
+ if (methodConfig.cache !== "auto" || methodConfig.fn.length > 0)
1210
+ continue;
1211
+ tasks.push(callMethod(methodName, methodConfig, []));
1212
+ }
1213
+ }
1214
+ await Promise.allSettled(tasks);
1215
+ };
1216
+ return wrapped;
1217
+ }
1054
1218
  //# sourceMappingURL=index.js.map
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daltonr/pathwrite-core",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Headless path engine — deterministic state machine with stack-based sub-path orchestration. Zero dependencies.",
package/src/index.ts CHANGED
@@ -1679,3 +1679,238 @@ export class PathEngine {
1679
1679
  }
1680
1680
  }
1681
1681
 
1682
+
1683
+ // ---------------------------------------------------------------------------
1684
+ // Services utilities
1685
+ //
1686
+ // Wraps plain async service functions with declarative caching, in-flight
1687
+ // deduplication, configurable retry, and prefetch.
1688
+ // ---------------------------------------------------------------------------
1689
+
1690
+ /** Synchronous key-value store (e.g. localStorage, sessionStorage). */
1691
+ export interface SyncServiceStorage {
1692
+ getItem(key: string): string | null;
1693
+ setItem(key: string, value: string): void;
1694
+ removeItem(key: string): void;
1695
+ }
1696
+
1697
+ /** Asynchronous key-value store (e.g. React Native AsyncStorage). */
1698
+ export interface AsyncServiceStorage {
1699
+ getItem(key: string): Promise<string | null>;
1700
+ setItem(key: string, value: string): Promise<void>;
1701
+ removeItem(key: string): Promise<void>;
1702
+ }
1703
+
1704
+ /** Union accepted by defineServices — sync or async storage. */
1705
+ export type ServiceCacheStorage = SyncServiceStorage | AsyncServiceStorage;
1706
+
1707
+ export type CachePolicy = "auto" | "none";
1708
+
1709
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1710
+ type AnyFn = (...args: any[]) => Promise<any>;
1711
+
1712
+ export interface ServiceMethodConfig<F extends AnyFn> {
1713
+ fn: F;
1714
+ cache: CachePolicy;
1715
+ retry?: number;
1716
+ }
1717
+
1718
+ type ServiceConfig<T extends Record<string, AnyFn>> = {
1719
+ [K in keyof T]: ServiceMethodConfig<T[K]>;
1720
+ };
1721
+
1722
+ export interface DefineServicesOptions {
1723
+ storage?: ServiceCacheStorage;
1724
+ keyPrefix?: string;
1725
+ }
1726
+
1727
+ /**
1728
+ * Thrown when all retry attempts for a service method have been exhausted.
1729
+ */
1730
+ export class ServiceUnavailableError extends Error {
1731
+ constructor(
1732
+ public readonly method: string,
1733
+ public readonly attempts: number,
1734
+ public readonly cause: unknown
1735
+ ) {
1736
+ super(`Service method "${method}" failed after ${attempts} attempt(s).`);
1737
+ this.name = "ServiceUnavailableError";
1738
+ }
1739
+ }
1740
+
1741
+ export type PrefetchManifest<T extends Record<string, AnyFn>> = {
1742
+ [K in keyof T]?: Parameters<T[K]>[] | undefined;
1743
+ };
1744
+
1745
+ export type DefinedServices<T extends Record<string, AnyFn>> = T & {
1746
+ prefetch(manifest?: PrefetchManifest<T>): Promise<void>;
1747
+ };
1748
+
1749
+ function _svcStorageGet(
1750
+ storage: ServiceCacheStorage,
1751
+ key: string
1752
+ ): Promise<string | null> {
1753
+ const result = storage.getItem(key);
1754
+ if (result instanceof Promise) return result;
1755
+ return Promise.resolve(result);
1756
+ }
1757
+
1758
+ function _svcStorageSet(
1759
+ storage: ServiceCacheStorage,
1760
+ key: string,
1761
+ value: string
1762
+ ): Promise<void> {
1763
+ const result = storage.setItem(key, value);
1764
+ if (result instanceof Promise) return result;
1765
+ return Promise.resolve();
1766
+ }
1767
+
1768
+ function _svcSerializeArgs(args: unknown[]): string {
1769
+ try {
1770
+ return JSON.stringify(args);
1771
+ } catch {
1772
+ return args.map(String).join(",");
1773
+ }
1774
+ }
1775
+
1776
+ async function _svcWithRetry<T>(
1777
+ fn: () => Promise<T>,
1778
+ maxRetries: number,
1779
+ methodName: string
1780
+ ): Promise<T> {
1781
+ let lastErr: unknown;
1782
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
1783
+ try {
1784
+ return await fn();
1785
+ } catch (err) {
1786
+ lastErr = err;
1787
+ if (attempt < maxRetries) {
1788
+ await new Promise((r) => setTimeout(r, 200 * Math.pow(2, attempt)));
1789
+ }
1790
+ }
1791
+ }
1792
+ throw new ServiceUnavailableError(methodName, maxRetries + 1, lastErr);
1793
+ }
1794
+
1795
+ /**
1796
+ * Wraps a set of async service methods with caching, deduplication, and retry.
1797
+ *
1798
+ * @example
1799
+ * ```ts
1800
+ * const services = defineServices(
1801
+ * {
1802
+ * getRoles: { fn: api.getRoles, cache: 'auto' },
1803
+ * getUser: { fn: api.getUser, cache: 'auto', retry: 2 },
1804
+ * submitForm: { fn: api.submitForm, cache: 'none' },
1805
+ * },
1806
+ * { storage: localStorage, keyPrefix: 'myapp:svc:' }
1807
+ * );
1808
+ *
1809
+ * await services.prefetch();
1810
+ * const roles = await services.getRoles();
1811
+ * ```
1812
+ */
1813
+ export function defineServices<T extends Record<string, AnyFn>>(
1814
+ config: ServiceConfig<T>,
1815
+ options: DefineServicesOptions = {}
1816
+ ): DefinedServices<T> {
1817
+ const { storage, keyPrefix = "pw-svc:" } = options;
1818
+ const memCache = new Map<string, unknown>();
1819
+ const inFlight = new Map<string, Promise<unknown>>();
1820
+
1821
+ if (storage) {
1822
+ const syncStorage = storage as SyncServiceStorage;
1823
+ if (typeof syncStorage.getItem === "function") {
1824
+ try {
1825
+ for (const [methodName, methodConfig] of Object.entries(config)) {
1826
+ if (methodConfig.cache !== "auto") continue;
1827
+ const baseKey = `${keyPrefix}${methodName}`;
1828
+ const raw = syncStorage.getItem(baseKey);
1829
+ if (raw !== null && !((raw as unknown) instanceof Promise)) {
1830
+ try { memCache.set(baseKey, JSON.parse(raw)); } catch { /* ignore */ }
1831
+ }
1832
+ }
1833
+ } catch { /* storage unavailable */ }
1834
+ }
1835
+ }
1836
+
1837
+ function cacheKey(methodName: string, args: unknown[]): string {
1838
+ return args.length === 0
1839
+ ? `${keyPrefix}${methodName}`
1840
+ : `${keyPrefix}${methodName}:${_svcSerializeArgs(args)}`;
1841
+ }
1842
+
1843
+ async function callMethod(
1844
+ methodName: string,
1845
+ methodConfig: ServiceMethodConfig<AnyFn>,
1846
+ args: unknown[]
1847
+ ): Promise<unknown> {
1848
+ if (methodConfig.cache === "none") {
1849
+ return _svcWithRetry(() => methodConfig.fn(...args), methodConfig.retry ?? 0, methodName);
1850
+ }
1851
+
1852
+ const key = cacheKey(methodName, args);
1853
+ if (memCache.has(key)) return memCache.get(key);
1854
+
1855
+ if (storage) {
1856
+ const existing = await _svcStorageGet(storage, key);
1857
+ if (existing !== null) {
1858
+ try {
1859
+ const parsed = JSON.parse(existing);
1860
+ memCache.set(key, parsed);
1861
+ return parsed;
1862
+ } catch { /* corrupt — fall through */ }
1863
+ }
1864
+ }
1865
+
1866
+ if (inFlight.has(key)) return inFlight.get(key);
1867
+
1868
+ const promise = _svcWithRetry(
1869
+ () => methodConfig.fn(...args),
1870
+ methodConfig.retry ?? 0,
1871
+ methodName
1872
+ )
1873
+ .then(async (value) => {
1874
+ memCache.set(key, value);
1875
+ inFlight.delete(key);
1876
+ if (storage) {
1877
+ try { await _svcStorageSet(storage, key, JSON.stringify(value)); } catch { /* non-fatal */ }
1878
+ }
1879
+ return value;
1880
+ })
1881
+ .catch((err) => { inFlight.delete(key); throw err; });
1882
+
1883
+ inFlight.set(key, promise);
1884
+ return promise;
1885
+ }
1886
+
1887
+ const wrapped: Record<string, AnyFn> = {};
1888
+
1889
+ for (const [methodName, methodConfig] of Object.entries(config)) {
1890
+ wrapped[methodName] = (...args: unknown[]) =>
1891
+ callMethod(methodName, methodConfig as ServiceMethodConfig<AnyFn>, args);
1892
+ }
1893
+
1894
+ wrapped.prefetch = async (manifest?: PrefetchManifest<T>): Promise<void> => {
1895
+ const tasks: Promise<unknown>[] = [];
1896
+ if (manifest) {
1897
+ for (const [methodName, argSets] of Object.entries(manifest) as [string, Parameters<AnyFn>[] | undefined][]) {
1898
+ const methodConfig = config[methodName];
1899
+ if (!methodConfig || methodConfig.cache === "none") continue;
1900
+ if (!argSets || argSets.length === 0) {
1901
+ tasks.push(callMethod(methodName, methodConfig, []));
1902
+ } else {
1903
+ for (const argSet of argSets) tasks.push(callMethod(methodName, methodConfig, argSet));
1904
+ }
1905
+ }
1906
+ } else {
1907
+ for (const [methodName, methodConfig] of Object.entries(config)) {
1908
+ if (methodConfig.cache !== "auto" || methodConfig.fn.length > 0) continue;
1909
+ tasks.push(callMethod(methodName, methodConfig, []));
1910
+ }
1911
+ }
1912
+ await Promise.allSettled(tasks);
1913
+ };
1914
+
1915
+ return wrapped as DefinedServices<T>;
1916
+ }