@rxova/journey-core 0.7.0 → 1.0.0-rc.2

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 (99) hide show
  1. package/README.md +236 -105
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.cjs.map +4 -4
  4. package/dist/index.d.cts +5 -4
  5. package/dist/index.d.ts +5 -4
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +4 -4
  8. package/dist/journey-builder/index.d.cts +5 -0
  9. package/dist/journey-builder/index.d.ts +5 -0
  10. package/dist/journey-builder/types.d.cts +126 -0
  11. package/dist/journey-builder/types.d.ts +126 -0
  12. package/dist/journey-machine/async-state.d.cts +12 -0
  13. package/dist/journey-machine/async-state.d.ts +12 -0
  14. package/dist/journey-machine/computed.d.cts +2 -0
  15. package/dist/journey-machine/computed.d.ts +2 -0
  16. package/dist/journey-machine/controls.d.cts +17 -0
  17. package/dist/journey-machine/controls.d.ts +17 -0
  18. package/dist/journey-machine/helpers.d.cts +52 -0
  19. package/dist/journey-machine/helpers.d.ts +52 -0
  20. package/dist/journey-machine/index.d.cts +3 -0
  21. package/dist/journey-machine/index.d.ts +3 -0
  22. package/dist/journey-machine/navigation.d.cts +32 -0
  23. package/dist/journey-machine/navigation.d.ts +32 -0
  24. package/dist/journey-machine/plugin-controller.d.cts +15 -0
  25. package/dist/journey-machine/plugin-controller.d.ts +15 -0
  26. package/dist/journey-machine/resolve-journey-definition.d.cts +2 -0
  27. package/dist/journey-machine/resolve-journey-definition.d.ts +2 -0
  28. package/dist/journey-machine/runtime.d.cts +33 -0
  29. package/dist/journey-machine/runtime.d.ts +33 -0
  30. package/dist/journey-machine/send.d.cts +9 -0
  31. package/dist/journey-machine/send.d.ts +9 -0
  32. package/dist/plugins/analytics/index.cjs +2 -0
  33. package/dist/plugins/analytics/index.cjs.map +7 -0
  34. package/dist/plugins/analytics/index.d.cts +25 -0
  35. package/dist/plugins/analytics/index.d.ts +25 -0
  36. package/dist/plugins/analytics/index.js +2 -0
  37. package/dist/plugins/analytics/index.js.map +7 -0
  38. package/dist/plugins/autosave/index.cjs +2 -0
  39. package/dist/plugins/autosave/index.cjs.map +7 -0
  40. package/dist/plugins/autosave/index.d.cts +17 -0
  41. package/dist/plugins/autosave/index.d.ts +17 -0
  42. package/dist/plugins/autosave/index.js +2 -0
  43. package/dist/plugins/autosave/index.js.map +7 -0
  44. package/dist/plugins/diagnostics/diagnostics.d.cts +3 -0
  45. package/dist/plugins/diagnostics/diagnostics.d.ts +3 -0
  46. package/dist/plugins/diagnostics/index.cjs +2 -0
  47. package/dist/plugins/diagnostics/index.cjs.map +7 -0
  48. package/dist/plugins/diagnostics/index.d.cts +15 -0
  49. package/dist/plugins/diagnostics/index.d.ts +15 -0
  50. package/dist/plugins/diagnostics/index.js +2 -0
  51. package/dist/plugins/diagnostics/index.js.map +7 -0
  52. package/dist/plugins/execution-paths/execution-paths.d.cts +6 -0
  53. package/dist/plugins/execution-paths/execution-paths.d.ts +6 -0
  54. package/dist/plugins/execution-paths/index.cjs +2 -0
  55. package/dist/plugins/execution-paths/index.cjs.map +7 -0
  56. package/dist/plugins/execution-paths/index.d.cts +18 -0
  57. package/dist/plugins/execution-paths/index.d.ts +18 -0
  58. package/dist/plugins/execution-paths/index.js +2 -0
  59. package/dist/plugins/execution-paths/index.js.map +7 -0
  60. package/dist/plugins/persistence/controller.d.cts +17 -0
  61. package/dist/plugins/persistence/controller.d.ts +17 -0
  62. package/dist/plugins/persistence/index.cjs +2 -0
  63. package/dist/plugins/persistence/index.cjs.map +7 -0
  64. package/dist/plugins/persistence/index.d.cts +12 -0
  65. package/dist/plugins/persistence/index.d.ts +12 -0
  66. package/dist/plugins/persistence/index.js +2 -0
  67. package/dist/plugins/persistence/index.js.map +7 -0
  68. package/dist/plugins/replay/index.cjs +2 -0
  69. package/dist/plugins/replay/index.cjs.map +7 -0
  70. package/dist/plugins/replay/index.d.cts +27 -0
  71. package/dist/plugins/replay/index.d.ts +27 -0
  72. package/dist/plugins/replay/index.js +2 -0
  73. package/dist/plugins/replay/index.js.map +7 -0
  74. package/dist/types/analytics.types.d.cts +33 -0
  75. package/dist/types/analytics.types.d.ts +33 -0
  76. package/dist/types/autosave.types.d.cts +23 -0
  77. package/dist/types/autosave.types.d.ts +23 -0
  78. package/dist/types/diagnostics.types.d.cts +38 -0
  79. package/dist/types/diagnostics.types.d.ts +38 -0
  80. package/dist/types/index.d.cts +9 -0
  81. package/dist/types/index.d.ts +9 -4
  82. package/dist/types/journey.types.d.cts +191 -0
  83. package/dist/types/journey.types.d.ts +140 -167
  84. package/dist/types/machine.types.d.cts +104 -0
  85. package/dist/types/machine.types.d.ts +104 -0
  86. package/dist/types/observation.types.d.cts +83 -0
  87. package/dist/types/observation.types.d.ts +83 -0
  88. package/dist/types/persistence.types.d.cts +34 -0
  89. package/dist/types/persistence.types.d.ts +13 -20
  90. package/dist/types/replay.types.d.cts +35 -0
  91. package/dist/types/replay.types.d.ts +35 -0
  92. package/dist/types/transitions.types.d.cts +122 -0
  93. package/dist/types/transitions.types.d.ts +100 -57
  94. package/package.json +92 -2
  95. package/dist/machine-helpers.d.ts +0 -23
  96. package/dist/machine.d.ts +0 -11
  97. package/dist/persistence.d.ts +0 -17
  98. package/dist/transitions.d.ts +0 -62
  99. package/dist/types.d.ts +0 -1
@@ -0,0 +1,5 @@
1
+ import type { JourneyJsonObject } from "../types";
2
+ import type { JourneyBuilder } from "./types";
3
+ export type { JourneyBuilder, JourneyBuilderCustomEventKey, JourneyBuilderDefinition, JourneyBuilderDefinitionMetadata, JourneyBuilderGuard, JourneyBuilderLifecycle, JourneyBuilderOnEntry, JourneyBuilderTerminalCandidate, JourneyBuilderTerminalEntry, JourneyBuilderUpdateContext, JourneyStepBuilder, JourneyToBuilder } from "./types";
4
+ /** Creates a typed builder for authoring journey definitions with `createStep`, `to`, and `build` helpers. */
5
+ export declare function createJourneyBuilder<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>>(): JourneyBuilder<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
@@ -0,0 +1,5 @@
1
+ import type { JourneyJsonObject } from "../types";
2
+ import type { JourneyBuilder } from "./types";
3
+ export type { JourneyBuilder, JourneyBuilderCustomEventKey, JourneyBuilderDefinition, JourneyBuilderDefinitionMetadata, JourneyBuilderGuard, JourneyBuilderLifecycle, JourneyBuilderOnEntry, JourneyBuilderTerminalCandidate, JourneyBuilderTerminalEntry, JourneyBuilderUpdateContext, JourneyStepBuilder, JourneyToBuilder } from "./types";
4
+ /** Creates a typed builder for authoring journey definitions with `createStep`, `to`, and `build` helpers. */
5
+ export declare function createJourneyBuilder<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>>(): JourneyBuilder<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
@@ -0,0 +1,126 @@
1
+ import type { JourneyDefaultEventType, JourneyDefinition, JourneyFullEventType, JourneyJsonObject } from "../types";
2
+ import type { JourneyStepLifecycleCallback, JourneyTransitionArgsForEvent, JourneyTransitionUpdateContextArgsForEvent } from "../types";
3
+ export type JourneyBuilderStepEventKey<TEventMap extends Record<string, unknown>> = Exclude<JourneyFullEventType<TEventMap>, "completeJourney" | "terminateJourney">;
4
+ export type JourneyBuilderTerminalEventKey<TEventMap extends Record<string, unknown>> = Extract<JourneyFullEventType<TEventMap>, "completeJourney" | "terminateJourney">;
5
+ export type JourneyBuilderCustomEventKey<TEventMap extends Record<string, unknown>> = Exclude<keyof TEventMap & string, JourneyDefaultEventType>;
6
+ export type JourneyBuilderGuard<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = (args: JourneyTransitionArgsForEvent<TContext, TStepId, TEventMap, THandlers, TEventType>) => boolean | Promise<boolean>;
7
+ export type JourneyBuilderUpdateContext<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = (args: JourneyTransitionUpdateContextArgsForEvent<TContext, TStepId, TEventMap, TEventType>) => TContext;
8
+ export type JourneyBuilderLifecycle<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
9
+ export type JourneyBuilderCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = {
10
+ readonly _to: TStepId;
11
+ readonly _when: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType> | undefined;
12
+ readonly _updateContext: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType> | undefined;
13
+ readonly _onEnter: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
14
+ readonly _onLeave: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
15
+ readonly _label: string | undefined;
16
+ readonly _timeoutMs: number | undefined;
17
+ };
18
+ export type JourneyToBuilderUsage = {
19
+ readonly when: boolean;
20
+ readonly updateContext: boolean;
21
+ readonly onEnter: boolean;
22
+ readonly onLeave: boolean;
23
+ readonly label: boolean;
24
+ readonly timeoutMs: boolean;
25
+ };
26
+ export type JourneyToBuilderUnused = {
27
+ readonly when: false;
28
+ readonly updateContext: false;
29
+ readonly onEnter: false;
30
+ readonly onLeave: false;
31
+ readonly label: false;
32
+ readonly timeoutMs: false;
33
+ };
34
+ type JourneyDuplicateModifierCall<TName extends string> = (...args: [
35
+ `Duplicate transition modifier ${TName}() is invalid. If several are present, the last one wins at runtime.`
36
+ ]) => never;
37
+ export type JourneyToBuilder<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>, TUsed extends JourneyToBuilderUsage = JourneyToBuilderUnused> = {
38
+ readonly _candidate: JourneyBuilderCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>;
39
+ when: TUsed["when"] extends true ? JourneyDuplicateModifierCall<"when"> : (guard: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "when"> & {
40
+ readonly when: true;
41
+ }>;
42
+ updateContext: TUsed["updateContext"] extends true ? JourneyDuplicateModifierCall<"updateContext"> : (fn: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "updateContext"> & {
43
+ readonly updateContext: true;
44
+ }>;
45
+ onEnter: TUsed["onEnter"] extends true ? JourneyDuplicateModifierCall<"onEnter"> : (fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "onEnter"> & {
46
+ readonly onEnter: true;
47
+ }>;
48
+ onLeave: TUsed["onLeave"] extends true ? JourneyDuplicateModifierCall<"onLeave"> : (fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "onLeave"> & {
49
+ readonly onLeave: true;
50
+ }>;
51
+ label: TUsed["label"] extends true ? JourneyDuplicateModifierCall<"label"> : (label: string) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "label"> & {
52
+ readonly label: true;
53
+ }>;
54
+ timeoutMs: TUsed["timeoutMs"] extends true ? JourneyDuplicateModifierCall<"timeoutMs"> : (ms: number) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "timeoutMs"> & {
55
+ readonly timeoutMs: true;
56
+ }>;
57
+ };
58
+ type JourneyBuiltTransitionCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = {
59
+ readonly _candidate: JourneyBuilderCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>;
60
+ };
61
+ export type JourneyBuilderOnEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderStepEventKey<TEventMap>> = readonly JourneyBuiltTransitionCandidate<TContext, TStepId, TEventMap, THandlers>[] | ((helpers: {
62
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
63
+ }) => readonly JourneyBuiltTransitionCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>[]);
64
+ export type JourneyBuilderTerminalCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderTerminalEventKey<TEventMap>> = {
65
+ when?: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>;
66
+ updateContext?: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>;
67
+ onEnter?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
68
+ onLeave?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
69
+ label?: string;
70
+ timeoutMs?: number;
71
+ };
72
+ export type JourneyBuilderTerminalEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderTerminalEventKey<TEventMap>> = true | readonly [] | readonly JourneyBuilderTerminalCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>[];
73
+ type JourneyBuilderEventEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap>> = TEventType extends JourneyBuilderTerminalEventKey<TEventMap> ? JourneyBuilderTerminalEntry<TContext, TStepId, TEventMap, THandlers, TEventType> : JourneyBuilderOnEntry<TContext, TStepId, TEventMap, THandlers, Extract<TEventType, JourneyBuilderStepEventKey<TEventMap>>>;
74
+ type JourneyStepBuilderOnConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = Partial<{
75
+ [TEventType in JourneyFullEventType<TEventMap>]: JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, TEventType>;
76
+ }>;
77
+ type JourneyStepBuilderHandledCustomEventKey<TEventMap extends Record<string, unknown>, TOn> = Extract<keyof NonNullable<TOn>, JourneyBuilderCustomEventKey<TEventMap>>;
78
+ type JourneyStepBuilderConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>, TOn extends JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined> = {
79
+ meta?: TStepMeta;
80
+ onEnter?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
81
+ onLeave?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
82
+ on?: TOn;
83
+ };
84
+ export type JourneyStepBuilder<TContext extends JourneyJsonObject, TStepId extends string, TStepKey extends TStepId, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>, THandledCustomEventType extends JourneyBuilderCustomEventKey<TEventMap> = never> = {
85
+ readonly id: TStepKey;
86
+ readonly _meta: TStepMeta | undefined;
87
+ readonly _onEnter: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
88
+ readonly _onLeave: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
89
+ readonly _on: Record<string, JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, JourneyFullEventType<TEventMap>>> | undefined;
90
+ readonly _handledCustomEventType?: THandledCustomEventType;
91
+ };
92
+ type JourneyStepBuilderHandledCustomEventMap<TStepId extends string, TEventMap extends Record<string, unknown>, TSteps extends readonly {
93
+ readonly id: TStepId;
94
+ readonly _handledCustomEventType?: JourneyBuilderCustomEventKey<TEventMap>;
95
+ }[]> = {
96
+ [TCurrentStepId in TStepId]: Extract<Extract<TSteps[number], {
97
+ readonly id: TCurrentStepId;
98
+ }> extends {
99
+ readonly _handledCustomEventType?: infer THandledCustomEventType;
100
+ } ? THandledCustomEventType : never, JourneyBuilderCustomEventKey<TEventMap>>;
101
+ };
102
+ type JourneyBuilderGlobalHandledCustomEventKey<TEventMap extends Record<string, unknown>, TGlobal> = Extract<keyof NonNullable<TGlobal>, JourneyBuilderCustomEventKey<TEventMap>>;
103
+ declare const journeyBuilderDefinitionBrand: unique symbol;
104
+ export type JourneyBuilderDefinitionMetadata<TStepId extends string, TEventMap extends Record<string, unknown>, TStepHandledCustomEventMap extends Record<TStepId, JourneyBuilderCustomEventKey<TEventMap>> = Record<TStepId, never>, TGlobalHandledCustomEventType extends JourneyBuilderCustomEventKey<TEventMap> = never> = {
105
+ readonly [journeyBuilderDefinitionBrand]?: {
106
+ readonly stepHandledCustomEvents: TStepHandledCustomEventMap;
107
+ readonly globalHandledCustomEvents: TGlobalHandledCustomEventType;
108
+ };
109
+ };
110
+ export type JourneyBuilderDefinition<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TStepHandledCustomEventMap extends Record<TStepId, JourneyBuilderCustomEventKey<TEventMap>> = Record<TStepId, never>, TGlobalHandledCustomEventType extends JourneyBuilderCustomEventKey<TEventMap> = never> = JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers> & JourneyBuilderDefinitionMetadata<TStepId, TEventMap, TStepHandledCustomEventMap, TGlobalHandledCustomEventType>;
111
+ type JourneyBuilderGlobalConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = Partial<{
112
+ [TEventType in JourneyFullEventType<TEventMap>]: TEventType extends JourneyBuilderTerminalEventKey<TEventMap> ? JourneyBuilderTerminalEntry<TContext, TStepId, TEventMap, THandlers, TEventType> : readonly JourneyBuiltTransitionCandidate<TContext, TStepId, TEventMap, THandlers>[];
113
+ }>;
114
+ type JourneyBuilderBuildInput<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>, TSteps extends readonly JourneyStepBuilder<TContext, TStepId, TStepId, TEventMap, TStepMeta, THandlers, JourneyBuilderCustomEventKey<TEventMap>>[], TGlobal extends JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined> = {
115
+ initial: TStepId;
116
+ context: TContext;
117
+ handlers?: THandlers;
118
+ steps: TSteps;
119
+ global?: TGlobal;
120
+ };
121
+ export type JourneyBuilder<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>> = {
122
+ createStep: <TStepKey extends TStepId, TOn extends JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined>(id: TStepKey, config?: JourneyStepBuilderConfig<TContext, TStepId, TEventMap, TStepMeta, THandlers, TOn>) => JourneyStepBuilder<TContext, TStepId, TStepKey, TEventMap, TStepMeta, THandlers, JourneyStepBuilderHandledCustomEventKey<TEventMap, TOn>>;
123
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>;
124
+ build: <TSteps extends readonly JourneyStepBuilder<TContext, TStepId, TStepId, TEventMap, TStepMeta, THandlers, JourneyBuilderCustomEventKey<TEventMap>>[], TGlobal extends JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined>(input: JourneyBuilderBuildInput<TContext, TStepId, TEventMap, TStepMeta, THandlers, TSteps, TGlobal>) => JourneyBuilderDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers, JourneyStepBuilderHandledCustomEventMap<TStepId, TEventMap, TSteps>, JourneyBuilderGlobalHandledCustomEventKey<TEventMap, TGlobal>>;
125
+ };
126
+ export type { JourneyStepBuilderConfig as _JourneyStepBuilderConfig, JourneyBuilderBuildInput as _JourneyBuilderBuildInput, JourneyBuilderEventEntry as _JourneyBuilderEventEntry };
@@ -0,0 +1,126 @@
1
+ import type { JourneyDefaultEventType, JourneyDefinition, JourneyFullEventType, JourneyJsonObject } from "../types";
2
+ import type { JourneyStepLifecycleCallback, JourneyTransitionArgsForEvent, JourneyTransitionUpdateContextArgsForEvent } from "../types";
3
+ export type JourneyBuilderStepEventKey<TEventMap extends Record<string, unknown>> = Exclude<JourneyFullEventType<TEventMap>, "completeJourney" | "terminateJourney">;
4
+ export type JourneyBuilderTerminalEventKey<TEventMap extends Record<string, unknown>> = Extract<JourneyFullEventType<TEventMap>, "completeJourney" | "terminateJourney">;
5
+ export type JourneyBuilderCustomEventKey<TEventMap extends Record<string, unknown>> = Exclude<keyof TEventMap & string, JourneyDefaultEventType>;
6
+ export type JourneyBuilderGuard<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = (args: JourneyTransitionArgsForEvent<TContext, TStepId, TEventMap, THandlers, TEventType>) => boolean | Promise<boolean>;
7
+ export type JourneyBuilderUpdateContext<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = (args: JourneyTransitionUpdateContextArgsForEvent<TContext, TStepId, TEventMap, TEventType>) => TContext;
8
+ export type JourneyBuilderLifecycle<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
9
+ export type JourneyBuilderCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = {
10
+ readonly _to: TStepId;
11
+ readonly _when: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType> | undefined;
12
+ readonly _updateContext: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType> | undefined;
13
+ readonly _onEnter: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
14
+ readonly _onLeave: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
15
+ readonly _label: string | undefined;
16
+ readonly _timeoutMs: number | undefined;
17
+ };
18
+ export type JourneyToBuilderUsage = {
19
+ readonly when: boolean;
20
+ readonly updateContext: boolean;
21
+ readonly onEnter: boolean;
22
+ readonly onLeave: boolean;
23
+ readonly label: boolean;
24
+ readonly timeoutMs: boolean;
25
+ };
26
+ export type JourneyToBuilderUnused = {
27
+ readonly when: false;
28
+ readonly updateContext: false;
29
+ readonly onEnter: false;
30
+ readonly onLeave: false;
31
+ readonly label: false;
32
+ readonly timeoutMs: false;
33
+ };
34
+ type JourneyDuplicateModifierCall<TName extends string> = (...args: [
35
+ `Duplicate transition modifier ${TName}() is invalid. If several are present, the last one wins at runtime.`
36
+ ]) => never;
37
+ export type JourneyToBuilder<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>, TUsed extends JourneyToBuilderUsage = JourneyToBuilderUnused> = {
38
+ readonly _candidate: JourneyBuilderCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>;
39
+ when: TUsed["when"] extends true ? JourneyDuplicateModifierCall<"when"> : (guard: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "when"> & {
40
+ readonly when: true;
41
+ }>;
42
+ updateContext: TUsed["updateContext"] extends true ? JourneyDuplicateModifierCall<"updateContext"> : (fn: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "updateContext"> & {
43
+ readonly updateContext: true;
44
+ }>;
45
+ onEnter: TUsed["onEnter"] extends true ? JourneyDuplicateModifierCall<"onEnter"> : (fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "onEnter"> & {
46
+ readonly onEnter: true;
47
+ }>;
48
+ onLeave: TUsed["onLeave"] extends true ? JourneyDuplicateModifierCall<"onLeave"> : (fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "onLeave"> & {
49
+ readonly onLeave: true;
50
+ }>;
51
+ label: TUsed["label"] extends true ? JourneyDuplicateModifierCall<"label"> : (label: string) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "label"> & {
52
+ readonly label: true;
53
+ }>;
54
+ timeoutMs: TUsed["timeoutMs"] extends true ? JourneyDuplicateModifierCall<"timeoutMs"> : (ms: number) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType, Omit<TUsed, "timeoutMs"> & {
55
+ readonly timeoutMs: true;
56
+ }>;
57
+ };
58
+ type JourneyBuiltTransitionCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap> = JourneyFullEventType<TEventMap>> = {
59
+ readonly _candidate: JourneyBuilderCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>;
60
+ };
61
+ export type JourneyBuilderOnEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderStepEventKey<TEventMap>> = readonly JourneyBuiltTransitionCandidate<TContext, TStepId, TEventMap, THandlers>[] | ((helpers: {
62
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
63
+ }) => readonly JourneyBuiltTransitionCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>[]);
64
+ export type JourneyBuilderTerminalCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderTerminalEventKey<TEventMap>> = {
65
+ when?: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>;
66
+ updateContext?: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>;
67
+ onEnter?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
68
+ onLeave?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
69
+ label?: string;
70
+ timeoutMs?: number;
71
+ };
72
+ export type JourneyBuilderTerminalEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderTerminalEventKey<TEventMap>> = true | readonly [] | readonly JourneyBuilderTerminalCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>[];
73
+ type JourneyBuilderEventEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyFullEventType<TEventMap>> = TEventType extends JourneyBuilderTerminalEventKey<TEventMap> ? JourneyBuilderTerminalEntry<TContext, TStepId, TEventMap, THandlers, TEventType> : JourneyBuilderOnEntry<TContext, TStepId, TEventMap, THandlers, Extract<TEventType, JourneyBuilderStepEventKey<TEventMap>>>;
74
+ type JourneyStepBuilderOnConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = Partial<{
75
+ [TEventType in JourneyFullEventType<TEventMap>]: JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, TEventType>;
76
+ }>;
77
+ type JourneyStepBuilderHandledCustomEventKey<TEventMap extends Record<string, unknown>, TOn> = Extract<keyof NonNullable<TOn>, JourneyBuilderCustomEventKey<TEventMap>>;
78
+ type JourneyStepBuilderConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>, TOn extends JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined> = {
79
+ meta?: TStepMeta;
80
+ onEnter?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
81
+ onLeave?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
82
+ on?: TOn;
83
+ };
84
+ export type JourneyStepBuilder<TContext extends JourneyJsonObject, TStepId extends string, TStepKey extends TStepId, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>, THandledCustomEventType extends JourneyBuilderCustomEventKey<TEventMap> = never> = {
85
+ readonly id: TStepKey;
86
+ readonly _meta: TStepMeta | undefined;
87
+ readonly _onEnter: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
88
+ readonly _onLeave: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
89
+ readonly _on: Record<string, JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, JourneyFullEventType<TEventMap>>> | undefined;
90
+ readonly _handledCustomEventType?: THandledCustomEventType;
91
+ };
92
+ type JourneyStepBuilderHandledCustomEventMap<TStepId extends string, TEventMap extends Record<string, unknown>, TSteps extends readonly {
93
+ readonly id: TStepId;
94
+ readonly _handledCustomEventType?: JourneyBuilderCustomEventKey<TEventMap>;
95
+ }[]> = {
96
+ [TCurrentStepId in TStepId]: Extract<Extract<TSteps[number], {
97
+ readonly id: TCurrentStepId;
98
+ }> extends {
99
+ readonly _handledCustomEventType?: infer THandledCustomEventType;
100
+ } ? THandledCustomEventType : never, JourneyBuilderCustomEventKey<TEventMap>>;
101
+ };
102
+ type JourneyBuilderGlobalHandledCustomEventKey<TEventMap extends Record<string, unknown>, TGlobal> = Extract<keyof NonNullable<TGlobal>, JourneyBuilderCustomEventKey<TEventMap>>;
103
+ declare const journeyBuilderDefinitionBrand: unique symbol;
104
+ export type JourneyBuilderDefinitionMetadata<TStepId extends string, TEventMap extends Record<string, unknown>, TStepHandledCustomEventMap extends Record<TStepId, JourneyBuilderCustomEventKey<TEventMap>> = Record<TStepId, never>, TGlobalHandledCustomEventType extends JourneyBuilderCustomEventKey<TEventMap> = never> = {
105
+ readonly [journeyBuilderDefinitionBrand]?: {
106
+ readonly stepHandledCustomEvents: TStepHandledCustomEventMap;
107
+ readonly globalHandledCustomEvents: TGlobalHandledCustomEventType;
108
+ };
109
+ };
110
+ export type JourneyBuilderDefinition<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TStepHandledCustomEventMap extends Record<TStepId, JourneyBuilderCustomEventKey<TEventMap>> = Record<TStepId, never>, TGlobalHandledCustomEventType extends JourneyBuilderCustomEventKey<TEventMap> = never> = JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers> & JourneyBuilderDefinitionMetadata<TStepId, TEventMap, TStepHandledCustomEventMap, TGlobalHandledCustomEventType>;
111
+ type JourneyBuilderGlobalConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = Partial<{
112
+ [TEventType in JourneyFullEventType<TEventMap>]: TEventType extends JourneyBuilderTerminalEventKey<TEventMap> ? JourneyBuilderTerminalEntry<TContext, TStepId, TEventMap, THandlers, TEventType> : readonly JourneyBuiltTransitionCandidate<TContext, TStepId, TEventMap, THandlers>[];
113
+ }>;
114
+ type JourneyBuilderBuildInput<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>, TSteps extends readonly JourneyStepBuilder<TContext, TStepId, TStepId, TEventMap, TStepMeta, THandlers, JourneyBuilderCustomEventKey<TEventMap>>[], TGlobal extends JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined> = {
115
+ initial: TStepId;
116
+ context: TContext;
117
+ handlers?: THandlers;
118
+ steps: TSteps;
119
+ global?: TGlobal;
120
+ };
121
+ export type JourneyBuilder<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>> = {
122
+ createStep: <TStepKey extends TStepId, TOn extends JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyStepBuilderOnConfig<TContext, TStepId, TEventMap, THandlers> | undefined>(id: TStepKey, config?: JourneyStepBuilderConfig<TContext, TStepId, TEventMap, TStepMeta, THandlers, TOn>) => JourneyStepBuilder<TContext, TStepId, TStepKey, TEventMap, TStepMeta, THandlers, JourneyStepBuilderHandledCustomEventKey<TEventMap, TOn>>;
123
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>;
124
+ build: <TSteps extends readonly JourneyStepBuilder<TContext, TStepId, TStepId, TEventMap, TStepMeta, THandlers, JourneyBuilderCustomEventKey<TEventMap>>[], TGlobal extends JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined = JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers> | undefined>(input: JourneyBuilderBuildInput<TContext, TStepId, TEventMap, TStepMeta, THandlers, TSteps, TGlobal>) => JourneyBuilderDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers, JourneyStepBuilderHandledCustomEventMap<TStepId, TEventMap, TSteps>, JourneyBuilderGlobalHandledCustomEventKey<TEventMap, TGlobal>>;
125
+ };
126
+ export type { JourneyStepBuilderConfig as _JourneyStepBuilderConfig, JourneyBuilderBuildInput as _JourneyBuilderBuildInput, JourneyBuilderEventEntry as _JourneyBuilderEventEntry };
@@ -0,0 +1,12 @@
1
+ import type { JourneyAsyncPhase, JourneyAsyncState, JourneyJsonObject } from "../types";
2
+ import type { JourneyMachineRuntime } from "./runtime";
3
+ export type JourneyMachineAsyncStateController<TStepId extends string> = {
4
+ syncState: (asyncState: JourneyAsyncState<TStepId>) => void;
5
+ updateStepAsync: (stepId: TStepId, updater: (current: JourneyAsyncState<TStepId>["byStep"][TStepId]) => JourneyAsyncState<TStepId>["byStep"][TStepId], runVersion?: number) => void;
6
+ setStepLoading: (stepId: TStepId, phase: JourneyAsyncPhase, eventType: string, transitionId?: string, runVersion?: number) => void;
7
+ setStepIdle: (stepId: TStepId, runVersion?: number) => void;
8
+ setStepError: (stepId: TStepId, eventType: string, error: unknown, transitionId?: string, runVersion?: number) => void;
9
+ };
10
+ export declare const createJourneyMachineAsyncStateController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>>({ runtime }: {
11
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
12
+ }) => JourneyMachineAsyncStateController<TStepId>;
@@ -0,0 +1,12 @@
1
+ import type { JourneyAsyncPhase, JourneyAsyncState, JourneyJsonObject } from "../types";
2
+ import type { JourneyMachineRuntime } from "./runtime";
3
+ export type JourneyMachineAsyncStateController<TStepId extends string> = {
4
+ syncState: (asyncState: JourneyAsyncState<TStepId>) => void;
5
+ updateStepAsync: (stepId: TStepId, updater: (current: JourneyAsyncState<TStepId>["byStep"][TStepId]) => JourneyAsyncState<TStepId>["byStep"][TStepId], runVersion?: number) => void;
6
+ setStepLoading: (stepId: TStepId, phase: JourneyAsyncPhase, eventType: string, transitionId?: string, runVersion?: number) => void;
7
+ setStepIdle: (stepId: TStepId, runVersion?: number) => void;
8
+ setStepError: (stepId: TStepId, eventType: string, error: unknown, transitionId?: string, runVersion?: number) => void;
9
+ };
10
+ export declare const createJourneyMachineAsyncStateController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>>({ runtime }: {
11
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
12
+ }) => JourneyMachineAsyncStateController<TStepId>;
@@ -0,0 +1,2 @@
1
+ import type { JourneyComputed, JourneyDefinition, JourneyJsonObject, JourneyResolvedDefinition, JourneySnapshot } from "../types";
2
+ export declare const createJourneyMachineComputedGetter: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>>(journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>, resolvedJourney: JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>, getSnapshot: () => JourneySnapshot<TContext, TStepId>) => (() => JourneyComputed<TStepId>);
@@ -0,0 +1,2 @@
1
+ import type { JourneyComputed, JourneyDefinition, JourneyJsonObject, JourneyResolvedDefinition, JourneySnapshot } from "../types";
2
+ export declare const createJourneyMachineComputedGetter: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>>(journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>, resolvedJourney: JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>, getSnapshot: () => JourneySnapshot<TContext, TStepId>) => (() => JourneyComputed<TStepId>);
@@ -0,0 +1,17 @@
1
+ import type { JourneyJsonObject, JourneySnapshot } from "../types";
2
+ import type { JourneyMachineAsyncStateController } from "./async-state";
3
+ import type { JourneyMachineRuntime } from "./runtime";
4
+ export type JourneyMachineControls<TContext extends JourneyJsonObject, TStepId extends string> = {
5
+ startJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
6
+ resetJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
7
+ updateContext: (updater: (context: TContext) => TContext) => Promise<JourneySnapshot<TContext, TStepId>>;
8
+ clearStepError: (stepId?: TStepId) => Promise<JourneySnapshot<TContext, TStepId>>;
9
+ dispose: () => void;
10
+ };
11
+ export declare const createJourneyMachineControls: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>>({ runtime, asyncState, initial, initialContext, steps }: {
12
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
13
+ asyncState: JourneyMachineAsyncStateController<TStepId>;
14
+ initial: TStepId;
15
+ initialContext: TContext;
16
+ steps: Record<TStepId, unknown>;
17
+ }) => JourneyMachineControls<TContext, TStepId>;
@@ -0,0 +1,17 @@
1
+ import type { JourneyJsonObject, JourneySnapshot } from "../types";
2
+ import type { JourneyMachineAsyncStateController } from "./async-state";
3
+ import type { JourneyMachineRuntime } from "./runtime";
4
+ export type JourneyMachineControls<TContext extends JourneyJsonObject, TStepId extends string> = {
5
+ startJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
6
+ resetJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
7
+ updateContext: (updater: (context: TContext) => TContext) => Promise<JourneySnapshot<TContext, TStepId>>;
8
+ clearStepError: (stepId?: TStepId) => Promise<JourneySnapshot<TContext, TStepId>>;
9
+ dispose: () => void;
10
+ };
11
+ export declare const createJourneyMachineControls: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>>({ runtime, asyncState, initial, initialContext, steps }: {
12
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
13
+ asyncState: JourneyMachineAsyncStateController<TStepId>;
14
+ initial: TStepId;
15
+ initialContext: TContext;
16
+ steps: Record<TStepId, unknown>;
17
+ }) => JourneyMachineControls<TContext, TStepId>;
@@ -0,0 +1,52 @@
1
+ import type { JourneyAsyncState, JourneyEvent, JourneyGoToEvent, JourneyJsonObject, JourneyPayloadFor, JourneyResolvedTransition, JourneySendEvent, JourneySendResult, JourneySnapshot, JourneyStatus, JourneyStepAsyncState, JourneyTerminal, JourneyTransition, JourneyTransitionArgs } from "../types";
2
+ export declare const assertStepExists: <TStepId extends string>(steps: Record<TStepId, unknown>, stepId: TStepId, message: string) => void;
3
+ export declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
4
+ export declare function assertSerializableContext<TContext extends JourneyJsonObject>(context: TContext, label?: string): TContext;
5
+ export declare const cloneContext: <TContext extends JourneyJsonObject>(context: TContext) => TContext;
6
+ export declare const cloneMetaValue: <T>(value: T) => T;
7
+ export declare const normalizeStepCount: (steps?: number) => number;
8
+ export declare const now: () => number;
9
+ export declare const buildVisitedFromTimeline: <TStepId extends string>(timeline: readonly TStepId[], stepIds?: readonly TStepId[]) => Record<TStepId, boolean>;
10
+ export declare const appendVisited: <TStepId extends string>(visited: Record<TStepId, boolean>, current: TStepId) => Record<TStepId, boolean>;
11
+ export declare const isPromiseLike: <T>(value: T | PromiseLike<T>) => value is PromiseLike<T>;
12
+ export declare const validateFiniteTimeout: (timeoutMs: unknown, label: string) => void;
13
+ export declare class JourneyTimeoutError extends Error {
14
+ name: string;
15
+ constructor(message: string);
16
+ }
17
+ export declare class JourneyDisposedError extends Error {
18
+ name: string;
19
+ readonly operation: string;
20
+ constructor(operation: string);
21
+ }
22
+ export declare const isDevelopmentEnvironment: () => boolean;
23
+ export declare const warnInDevelopment: (message: string, detail?: unknown) => void;
24
+ export declare const errorInDevelopment: (message: string, detail?: unknown) => void;
25
+ export declare const withTimeout: <T>(promise: PromiseLike<T>, timeoutMs: number | undefined, buildError: () => Error) => Promise<T>;
26
+ export declare const withAbortSignal: <T>(promise: PromiseLike<T>, signal: AbortSignal) => Promise<T>;
27
+ export declare const buildIdleStepAsyncState: () => JourneyStepAsyncState;
28
+ export declare const buildInitialAsyncState: <TStepId extends string>(steps: Record<TStepId, unknown>) => JourneyAsyncState<TStepId>;
29
+ export declare const isGoToStepByIdEvent: <TStepId extends string, TEventMap extends Record<string, unknown>>(event: JourneySendEvent<TStepId, TEventMap>) => event is JourneyGoToEvent<TStepId, JourneyPayloadFor<TEventMap, "goToStepById">>;
30
+ export declare const isTerminalTarget: <TStepId extends string>(target: TStepId | JourneyTerminal) => target is JourneyTerminal;
31
+ export declare const resolveTransitionTarget: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>) => TStepId | JourneyTerminal;
32
+ export declare const validateJourneyTransitions: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(transitions: readonly JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>[], steps: Record<TStepId, unknown>) => void;
33
+ export declare const buildSendResult: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>, transitioned: boolean, options?: {
34
+ transitionId?: string;
35
+ label?: string;
36
+ error?: unknown;
37
+ }) => JourneySendResult<TContext, TStepId>;
38
+ export declare const buildSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(timeline: readonly TStepId[], index: number, context: TContext, status: JourneyStatus, asyncState: JourneyAsyncState<TStepId>, visited?: Record<TStepId, boolean>) => JourneySnapshot<TContext, TStepId>;
39
+ export declare const stabilizeSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
40
+ export declare const selectTransition: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TTransition extends {
41
+ from: TStepId | "*";
42
+ event: string;
43
+ when?: (args: JourneyTransitionArgs<TContext, TStepId, TEventMap, THandlers>) => boolean | Promise<boolean>;
44
+ timeoutMs?: number;
45
+ id?: string;
46
+ label?: string;
47
+ }>(transitions: readonly TTransition[], snapshot: JourneySnapshot<TContext, TStepId>, event: JourneyEvent<TStepId, TEventMap>, signal: AbortSignal, handlers: THandlers, hooks?: {
48
+ onAsyncGuardStart?: (transition: TTransition) => void;
49
+ onAsyncGuardSuccess?: (transition: TTransition) => void;
50
+ onAsyncGuardError?: (transition: TTransition, error: unknown) => void;
51
+ }, defaultTimeoutMs?: number) => Promise<TTransition | null>;
52
+ export declare const transitionSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>, nextCurrent: TStepId, nextContext: TContext) => JourneySnapshot<TContext, TStepId>;
@@ -0,0 +1,52 @@
1
+ import type { JourneyAsyncState, JourneyEvent, JourneyGoToEvent, JourneyJsonObject, JourneyPayloadFor, JourneyResolvedTransition, JourneySendEvent, JourneySendResult, JourneySnapshot, JourneyStatus, JourneyStepAsyncState, JourneyTerminal, JourneyTransition, JourneyTransitionArgs } from "../types";
2
+ export declare const assertStepExists: <TStepId extends string>(steps: Record<TStepId, unknown>, stepId: TStepId, message: string) => void;
3
+ export declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
4
+ export declare function assertSerializableContext<TContext extends JourneyJsonObject>(context: TContext, label?: string): TContext;
5
+ export declare const cloneContext: <TContext extends JourneyJsonObject>(context: TContext) => TContext;
6
+ export declare const cloneMetaValue: <T>(value: T) => T;
7
+ export declare const normalizeStepCount: (steps?: number) => number;
8
+ export declare const now: () => number;
9
+ export declare const buildVisitedFromTimeline: <TStepId extends string>(timeline: readonly TStepId[], stepIds?: readonly TStepId[]) => Record<TStepId, boolean>;
10
+ export declare const appendVisited: <TStepId extends string>(visited: Record<TStepId, boolean>, current: TStepId) => Record<TStepId, boolean>;
11
+ export declare const isPromiseLike: <T>(value: T | PromiseLike<T>) => value is PromiseLike<T>;
12
+ export declare const validateFiniteTimeout: (timeoutMs: unknown, label: string) => void;
13
+ export declare class JourneyTimeoutError extends Error {
14
+ name: string;
15
+ constructor(message: string);
16
+ }
17
+ export declare class JourneyDisposedError extends Error {
18
+ name: string;
19
+ readonly operation: string;
20
+ constructor(operation: string);
21
+ }
22
+ export declare const isDevelopmentEnvironment: () => boolean;
23
+ export declare const warnInDevelopment: (message: string, detail?: unknown) => void;
24
+ export declare const errorInDevelopment: (message: string, detail?: unknown) => void;
25
+ export declare const withTimeout: <T>(promise: PromiseLike<T>, timeoutMs: number | undefined, buildError: () => Error) => Promise<T>;
26
+ export declare const withAbortSignal: <T>(promise: PromiseLike<T>, signal: AbortSignal) => Promise<T>;
27
+ export declare const buildIdleStepAsyncState: () => JourneyStepAsyncState;
28
+ export declare const buildInitialAsyncState: <TStepId extends string>(steps: Record<TStepId, unknown>) => JourneyAsyncState<TStepId>;
29
+ export declare const isGoToStepByIdEvent: <TStepId extends string, TEventMap extends Record<string, unknown>>(event: JourneySendEvent<TStepId, TEventMap>) => event is JourneyGoToEvent<TStepId, JourneyPayloadFor<TEventMap, "goToStepById">>;
30
+ export declare const isTerminalTarget: <TStepId extends string>(target: TStepId | JourneyTerminal) => target is JourneyTerminal;
31
+ export declare const resolveTransitionTarget: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>) => TStepId | JourneyTerminal;
32
+ export declare const validateJourneyTransitions: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(transitions: readonly JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>[], steps: Record<TStepId, unknown>) => void;
33
+ export declare const buildSendResult: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>, transitioned: boolean, options?: {
34
+ transitionId?: string;
35
+ label?: string;
36
+ error?: unknown;
37
+ }) => JourneySendResult<TContext, TStepId>;
38
+ export declare const buildSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(timeline: readonly TStepId[], index: number, context: TContext, status: JourneyStatus, asyncState: JourneyAsyncState<TStepId>, visited?: Record<TStepId, boolean>) => JourneySnapshot<TContext, TStepId>;
39
+ export declare const stabilizeSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
40
+ export declare const selectTransition: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TTransition extends {
41
+ from: TStepId | "*";
42
+ event: string;
43
+ when?: (args: JourneyTransitionArgs<TContext, TStepId, TEventMap, THandlers>) => boolean | Promise<boolean>;
44
+ timeoutMs?: number;
45
+ id?: string;
46
+ label?: string;
47
+ }>(transitions: readonly TTransition[], snapshot: JourneySnapshot<TContext, TStepId>, event: JourneyEvent<TStepId, TEventMap>, signal: AbortSignal, handlers: THandlers, hooks?: {
48
+ onAsyncGuardStart?: (transition: TTransition) => void;
49
+ onAsyncGuardSuccess?: (transition: TTransition) => void;
50
+ onAsyncGuardError?: (transition: TTransition, error: unknown) => void;
51
+ }, defaultTimeoutMs?: number) => Promise<TTransition | null>;
52
+ export declare const transitionSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>, nextCurrent: TStepId, nextContext: TContext) => JourneySnapshot<TContext, TStepId>;
@@ -0,0 +1,3 @@
1
+ import type { JourneyDefinition, JourneyJsonObject, JourneyMachinePlugin, JourneyMachineOptions, JourneyMachineWithPlugins } from "../types";
2
+ /** Creates a journey machine from a definition and optional runtime/plugin options. */
3
+ export declare function createJourneyMachine<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TPlugins extends readonly JourneyMachinePlugin[] = []>(journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>, options?: JourneyMachineOptions<TPlugins>): JourneyMachineWithPlugins<TContext, TStepId, TEventMap, TStepMeta, THandlers, TPlugins>;
@@ -0,0 +1,3 @@
1
+ import type { JourneyDefinition, JourneyJsonObject, JourneyMachinePlugin, JourneyMachineOptions, JourneyMachineWithPlugins } from "../types";
2
+ /** Creates a journey machine from a definition and optional runtime/plugin options. */
3
+ export declare function createJourneyMachine<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TPlugins extends readonly JourneyMachinePlugin[] = []>(journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>, options?: JourneyMachineOptions<TPlugins>): JourneyMachineWithPlugins<TContext, TStepId, TEventMap, TStepMeta, THandlers, TPlugins>;
@@ -0,0 +1,32 @@
1
+ import type { JourneyEvent, JourneyJsonObject, JourneyResolvedTransition, JourneySendResult, JourneySnapshot, JourneyTerminal } from "../types";
2
+ import type { JourneyMachineRuntime } from "./runtime";
3
+ export type JourneyLifecycleScheduler<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = (args: {
4
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
5
+ snapshot: JourneySnapshot<TContext, TStepId>;
6
+ from: TStepId;
7
+ to: TStepId | JourneyTerminal;
8
+ event: JourneyEvent<TStepId, TEventMap> | {
9
+ type: "goToLastVisitedStep";
10
+ } | {
11
+ type: "goToPreviousStep";
12
+ };
13
+ transitionId: string | null;
14
+ label?: string;
15
+ runVersion: number;
16
+ transition?: JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>;
17
+ }) => void;
18
+ export type JourneyMachineNavigationController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = {
19
+ applyPreviousNavigation: (requestedSteps?: number, transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
20
+ applyLastVisitedNavigation: (transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
21
+ hasDeclaredTransitionForEvent: (fromStep: TStepId, eventType: string) => boolean;
22
+ commitTerminalTransition: (fromStep: TStepId, target: JourneyTerminal, transitionEvent: {
23
+ type: string;
24
+ }, transitionId: string | null, transition: JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers> | undefined, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
25
+ commitStepTransition: (fromStep: TStepId, target: TStepId, transitionEvent: JourneyEvent<TStepId, TEventMap>, transition: JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
26
+ };
27
+ export declare const createJourneyMachineNavigationController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>({ runtime, steps, transitions, scheduleLifecycle }: {
28
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
29
+ steps: Record<TStepId, unknown>;
30
+ transitions: readonly JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>[];
31
+ scheduleLifecycle: JourneyLifecycleScheduler<TContext, TStepId, TEventMap, THandlers>;
32
+ }) => JourneyMachineNavigationController<TContext, TStepId, TEventMap, THandlers>;
@@ -0,0 +1,32 @@
1
+ import type { JourneyEvent, JourneyJsonObject, JourneyResolvedTransition, JourneySendResult, JourneySnapshot, JourneyTerminal } from "../types";
2
+ import type { JourneyMachineRuntime } from "./runtime";
3
+ export type JourneyLifecycleScheduler<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = (args: {
4
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
5
+ snapshot: JourneySnapshot<TContext, TStepId>;
6
+ from: TStepId;
7
+ to: TStepId | JourneyTerminal;
8
+ event: JourneyEvent<TStepId, TEventMap> | {
9
+ type: "goToLastVisitedStep";
10
+ } | {
11
+ type: "goToPreviousStep";
12
+ };
13
+ transitionId: string | null;
14
+ label?: string;
15
+ runVersion: number;
16
+ transition?: JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>;
17
+ }) => void;
18
+ export type JourneyMachineNavigationController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = {
19
+ applyPreviousNavigation: (requestedSteps?: number, transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
20
+ applyLastVisitedNavigation: (transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
21
+ hasDeclaredTransitionForEvent: (fromStep: TStepId, eventType: string) => boolean;
22
+ commitTerminalTransition: (fromStep: TStepId, target: JourneyTerminal, transitionEvent: {
23
+ type: string;
24
+ }, transitionId: string | null, transition: JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers> | undefined, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
25
+ commitStepTransition: (fromStep: TStepId, target: TStepId, transitionEvent: JourneyEvent<TStepId, TEventMap>, transition: JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
26
+ };
27
+ export declare const createJourneyMachineNavigationController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>({ runtime, steps, transitions, scheduleLifecycle }: {
28
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
29
+ steps: Record<TStepId, unknown>;
30
+ transitions: readonly JourneyResolvedTransition<TContext, TStepId, TEventMap, THandlers>[];
31
+ scheduleLifecycle: JourneyLifecycleScheduler<TContext, TStepId, TEventMap, THandlers>;
32
+ }) => JourneyMachineNavigationController<TContext, TStepId, TEventMap, THandlers>;
@@ -0,0 +1,15 @@
1
+ import type { JourneyJsonObject, JourneyMachine, JourneyMachinePlugin, JourneyMachinePluginSetupContext, JourneyMachineSnapshotReason, JourneySnapshot } from "../types";
2
+ export type JourneyMachinePluginController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
3
+ hydrateSnapshot: (snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
4
+ onSnapshotChange: (args: {
5
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
6
+ snapshot: JourneySnapshot<TContext, TStepId>;
7
+ reason: JourneyMachineSnapshotReason;
8
+ }) => void;
9
+ extendMachine: (machine: JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
10
+ dispose: () => void;
11
+ };
12
+ export declare const createJourneyMachinePluginController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown> = Record<never, never>>({ plugins, setupContext }: {
13
+ plugins: readonly JourneyMachinePlugin[];
14
+ setupContext: JourneyMachinePluginSetupContext<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
15
+ }) => JourneyMachinePluginController<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
@@ -0,0 +1,15 @@
1
+ import type { JourneyJsonObject, JourneyMachine, JourneyMachinePlugin, JourneyMachinePluginSetupContext, JourneyMachineSnapshotReason, JourneySnapshot } from "../types";
2
+ export type JourneyMachinePluginController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
3
+ hydrateSnapshot: (snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
4
+ onSnapshotChange: (args: {
5
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
6
+ snapshot: JourneySnapshot<TContext, TStepId>;
7
+ reason: JourneyMachineSnapshotReason;
8
+ }) => void;
9
+ extendMachine: (machine: JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
10
+ dispose: () => void;
11
+ };
12
+ export declare const createJourneyMachinePluginController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown> = Record<never, never>>({ plugins, setupContext }: {
13
+ plugins: readonly JourneyMachinePlugin[];
14
+ setupContext: JourneyMachinePluginSetupContext<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
15
+ }) => JourneyMachinePluginController<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
@@ -0,0 +1,2 @@
1
+ import type { JourneyDefinition, JourneyJsonObject, JourneyResolvedDefinition } from "../types";
2
+ export declare const resolveJourneyDefinition: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>>(journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
@@ -0,0 +1,2 @@
1
+ import type { JourneyDefinition, JourneyJsonObject, JourneyResolvedDefinition } from "../types";
2
+ export declare const resolveJourneyDefinition: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>>(journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;