@rxova/journey-core 0.7.0 → 1.0.0-rc.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.
Files changed (99) hide show
  1. package/README.md +235 -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 +69 -0
  11. package/dist/journey-builder/types.d.ts +69 -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 +44 -0
  19. package/dist/journey-machine/helpers.d.ts +44 -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 +31 -0
  23. package/dist/journey-machine/navigation.d.ts +31 -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 +32 -0
  75. package/dist/types/analytics.types.d.ts +32 -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 +190 -0
  83. package/dist/types/journey.types.d.ts +139 -167
  84. package/dist/types/machine.types.d.cts +102 -0
  85. package/dist/types/machine.types.d.ts +102 -0
  86. package/dist/types/observation.types.d.cts +75 -0
  87. package/dist/types/observation.types.d.ts +75 -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 +117 -0
  93. package/dist/types/transitions.types.d.ts +94 -56
  94. package/package.json +68 -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, 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, 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,69 @@
1
+ import type { 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 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>;
6
+ 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;
7
+ export type JourneyBuilderLifecycle<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
8
+ 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>> = {
9
+ readonly _to: TStepId;
10
+ readonly _when: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType> | undefined;
11
+ readonly _updateContext: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType> | undefined;
12
+ readonly _onEnter: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
13
+ readonly _onLeave: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
14
+ readonly _id: string | undefined;
15
+ readonly _timeoutMs: number | undefined;
16
+ };
17
+ 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>> = {
18
+ readonly _candidate: JourneyBuilderCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>;
19
+ when(guard: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
20
+ updateContext(fn: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
21
+ onEnter(fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
22
+ onLeave(fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
23
+ id(id: string): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
24
+ timeoutMs(ms: number): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
25
+ };
26
+ export type JourneyBuilderOnEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderStepEventKey<TEventMap>> = readonly JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>[] | ((helpers: {
27
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
28
+ }) => readonly JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>[]);
29
+ export type JourneyBuilderTerminalCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderTerminalEventKey<TEventMap>> = {
30
+ when?: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>;
31
+ updateContext?: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>;
32
+ onEnter?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
33
+ onLeave?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
34
+ id?: string;
35
+ timeoutMs?: number;
36
+ };
37
+ 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>[];
38
+ 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>>>;
39
+ type JourneyStepBuilderConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
40
+ meta?: TStepMeta;
41
+ onEnter?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
42
+ onLeave?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
43
+ on?: Partial<{
44
+ [TEventType in JourneyFullEventType<TEventMap>]: JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, TEventType>;
45
+ }>;
46
+ };
47
+ export type JourneyStepBuilder<TContext extends JourneyJsonObject, TStepId extends string, TStepKey extends TStepId, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
48
+ readonly _id: TStepKey;
49
+ readonly _meta: TStepMeta | undefined;
50
+ readonly _onEnter: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
51
+ readonly _onLeave: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
52
+ readonly _on: Record<string, JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, JourneyFullEventType<TEventMap>>> | undefined;
53
+ };
54
+ type JourneyBuilderGlobalConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = Partial<{
55
+ [TEventType in JourneyFullEventType<TEventMap>]: TEventType extends JourneyBuilderTerminalEventKey<TEventMap> ? JourneyBuilderTerminalEntry<TContext, TStepId, TEventMap, THandlers, TEventType> : readonly JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>[];
56
+ }>;
57
+ type JourneyBuilderBuildInput<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
58
+ initial: TStepId;
59
+ context: TContext;
60
+ handlers?: THandlers;
61
+ steps: readonly JourneyStepBuilder<TContext, TStepId, TStepId, TEventMap, TStepMeta, THandlers>[];
62
+ global?: JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers>;
63
+ };
64
+ 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>> = {
65
+ createStep: <TStepKey extends TStepId>(id: TStepKey, config?: JourneyStepBuilderConfig<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyStepBuilder<TContext, TStepId, TStepKey, TEventMap, TStepMeta, THandlers>;
66
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>;
67
+ build: (input: JourneyBuilderBuildInput<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
68
+ };
69
+ export type { JourneyStepBuilderConfig as _JourneyStepBuilderConfig, JourneyBuilderBuildInput as _JourneyBuilderBuildInput, JourneyBuilderEventEntry as _JourneyBuilderEventEntry };
@@ -0,0 +1,69 @@
1
+ import type { 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 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>;
6
+ 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;
7
+ export type JourneyBuilderLifecycle<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
8
+ 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>> = {
9
+ readonly _to: TStepId;
10
+ readonly _when: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType> | undefined;
11
+ readonly _updateContext: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType> | undefined;
12
+ readonly _onEnter: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
13
+ readonly _onLeave: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers> | undefined;
14
+ readonly _id: string | undefined;
15
+ readonly _timeoutMs: number | undefined;
16
+ };
17
+ 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>> = {
18
+ readonly _candidate: JourneyBuilderCandidate<TContext, TStepId, TEventMap, THandlers, TEventType>;
19
+ when(guard: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
20
+ updateContext(fn: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
21
+ onEnter(fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
22
+ onLeave(fn: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
23
+ id(id: string): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
24
+ timeoutMs(ms: number): JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
25
+ };
26
+ export type JourneyBuilderOnEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderStepEventKey<TEventMap>> = readonly JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>[] | ((helpers: {
27
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>;
28
+ }) => readonly JourneyToBuilder<TContext, TStepId, TEventMap, THandlers, TEventType>[]);
29
+ export type JourneyBuilderTerminalCandidate<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>, TEventType extends JourneyBuilderTerminalEventKey<TEventMap>> = {
30
+ when?: JourneyBuilderGuard<TContext, TStepId, TEventMap, THandlers, TEventType>;
31
+ updateContext?: JourneyBuilderUpdateContext<TContext, TStepId, TEventMap, TEventType>;
32
+ onEnter?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
33
+ onLeave?: JourneyBuilderLifecycle<TContext, TStepId, TEventMap, THandlers>;
34
+ id?: string;
35
+ timeoutMs?: number;
36
+ };
37
+ 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>[];
38
+ 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>>>;
39
+ type JourneyStepBuilderConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
40
+ meta?: TStepMeta;
41
+ onEnter?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
42
+ onLeave?: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers>;
43
+ on?: Partial<{
44
+ [TEventType in JourneyFullEventType<TEventMap>]: JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, TEventType>;
45
+ }>;
46
+ };
47
+ export type JourneyStepBuilder<TContext extends JourneyJsonObject, TStepId extends string, TStepKey extends TStepId, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
48
+ readonly _id: TStepKey;
49
+ readonly _meta: TStepMeta | undefined;
50
+ readonly _onEnter: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
51
+ readonly _onLeave: JourneyStepLifecycleCallback<TContext, TStepId, TEventMap, THandlers> | undefined;
52
+ readonly _on: Record<string, JourneyBuilderEventEntry<TContext, TStepId, TEventMap, THandlers, JourneyFullEventType<TEventMap>>> | undefined;
53
+ };
54
+ type JourneyBuilderGlobalConfig<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = Partial<{
55
+ [TEventType in JourneyFullEventType<TEventMap>]: TEventType extends JourneyBuilderTerminalEventKey<TEventMap> ? JourneyBuilderTerminalEntry<TContext, TStepId, TEventMap, THandlers, TEventType> : readonly JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>[];
56
+ }>;
57
+ type JourneyBuilderBuildInput<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = {
58
+ initial: TStepId;
59
+ context: TContext;
60
+ handlers?: THandlers;
61
+ steps: readonly JourneyStepBuilder<TContext, TStepId, TStepId, TEventMap, TStepMeta, THandlers>[];
62
+ global?: JourneyBuilderGlobalConfig<TContext, TStepId, TEventMap, THandlers>;
63
+ };
64
+ 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>> = {
65
+ createStep: <TStepKey extends TStepId>(id: TStepKey, config?: JourneyStepBuilderConfig<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyStepBuilder<TContext, TStepId, TStepKey, TEventMap, TStepMeta, THandlers>;
66
+ to: (stepId: TStepId) => JourneyToBuilder<TContext, TStepId, TEventMap, THandlers>;
67
+ build: (input: JourneyBuilderBuildInput<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
68
+ };
69
+ 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
+ start: () => 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
+ start: () => 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,44 @@
1
+ import type { JourneyAsyncState, JourneyEvent, JourneyGoToEvent, JourneyJsonObject, JourneyPayloadFor, JourneySendEvent, JourneySendResult, JourneySnapshot, JourneyStatus, JourneyStepAsyncState, JourneyTerminal, JourneyTransition } 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 JourneyTransition<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
+ error?: unknown;
36
+ }) => JourneySendResult<TContext, TStepId>;
37
+ 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>;
38
+ export declare const stabilizeSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
39
+ export declare const selectTransition: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(transitions: readonly JourneyTransition<TContext, TStepId, TEventMap, THandlers>[], snapshot: JourneySnapshot<TContext, TStepId>, event: JourneyEvent<TStepId, TEventMap>, signal: AbortSignal, handlers: THandlers, hooks?: {
40
+ onAsyncGuardStart?: (transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>) => void;
41
+ onAsyncGuardSuccess?: (transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>) => void;
42
+ onAsyncGuardError?: (transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>, error: unknown) => void;
43
+ }, defaultTimeoutMs?: number) => Promise<JourneyTransition<TContext, TStepId, TEventMap, THandlers> | null>;
44
+ export declare const transitionSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>, nextCurrent: TStepId, nextContext: TContext) => JourneySnapshot<TContext, TStepId>;
@@ -0,0 +1,44 @@
1
+ import type { JourneyAsyncState, JourneyEvent, JourneyGoToEvent, JourneyJsonObject, JourneyPayloadFor, JourneySendEvent, JourneySendResult, JourneySnapshot, JourneyStatus, JourneyStepAsyncState, JourneyTerminal, JourneyTransition } 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 JourneyTransition<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
+ error?: unknown;
36
+ }) => JourneySendResult<TContext, TStepId>;
37
+ 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>;
38
+ export declare const stabilizeSnapshot: <TContext extends JourneyJsonObject, TStepId extends string>(snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
39
+ export declare const selectTransition: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(transitions: readonly JourneyTransition<TContext, TStepId, TEventMap, THandlers>[], snapshot: JourneySnapshot<TContext, TStepId>, event: JourneyEvent<TStepId, TEventMap>, signal: AbortSignal, handlers: THandlers, hooks?: {
40
+ onAsyncGuardStart?: (transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>) => void;
41
+ onAsyncGuardSuccess?: (transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>) => void;
42
+ onAsyncGuardError?: (transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>, error: unknown) => void;
43
+ }, defaultTimeoutMs?: number) => Promise<JourneyTransition<TContext, TStepId, TEventMap, THandlers> | null>;
44
+ 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,31 @@
1
+ import type { JourneyEvent, JourneyJsonObject, JourneySendResult, JourneySnapshot, JourneyTerminal, JourneyTransition } 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
+ runVersion: number;
15
+ transition?: JourneyTransition<TContext, TStepId, TEventMap, THandlers>;
16
+ }) => void;
17
+ export type JourneyMachineNavigationController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = {
18
+ applyPreviousNavigation: (requestedSteps?: number, transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
19
+ applyLastVisitedNavigation: (transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
20
+ hasDeclaredTransitionForEvent: (fromStep: TStepId, eventType: string) => boolean;
21
+ commitTerminalTransition: (fromStep: TStepId, target: JourneyTerminal, transitionEvent: {
22
+ type: string;
23
+ }, transitionId: string | null, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
24
+ commitStepTransition: (fromStep: TStepId, target: TStepId, transitionEvent: JourneyEvent<TStepId, TEventMap>, transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
25
+ };
26
+ export declare const createJourneyMachineNavigationController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>({ runtime, steps, transitions, scheduleLifecycle }: {
27
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
28
+ steps: Record<TStepId, unknown>;
29
+ transitions: readonly JourneyTransition<TContext, TStepId, TEventMap, THandlers>[];
30
+ scheduleLifecycle: JourneyLifecycleScheduler<TContext, TStepId, TEventMap, THandlers>;
31
+ }) => JourneyMachineNavigationController<TContext, TStepId, TEventMap, THandlers>;
@@ -0,0 +1,31 @@
1
+ import type { JourneyEvent, JourneyJsonObject, JourneySendResult, JourneySnapshot, JourneyTerminal, JourneyTransition } 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
+ runVersion: number;
15
+ transition?: JourneyTransition<TContext, TStepId, TEventMap, THandlers>;
16
+ }) => void;
17
+ export type JourneyMachineNavigationController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>> = {
18
+ applyPreviousNavigation: (requestedSteps?: number, transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
19
+ applyLastVisitedNavigation: (transitionId?: string, runVersion?: number) => JourneySendResult<TContext, TStepId>;
20
+ hasDeclaredTransitionForEvent: (fromStep: TStepId, eventType: string) => boolean;
21
+ commitTerminalTransition: (fromStep: TStepId, target: JourneyTerminal, transitionEvent: {
22
+ type: string;
23
+ }, transitionId: string | null, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
24
+ commitStepTransition: (fromStep: TStepId, target: TStepId, transitionEvent: JourneyEvent<TStepId, TEventMap>, transition: JourneyTransition<TContext, TStepId, TEventMap, THandlers>, nextContext: TContext, runVersion?: number) => JourneySendResult<TContext, TStepId>;
25
+ };
26
+ export declare const createJourneyMachineNavigationController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>({ runtime, steps, transitions, scheduleLifecycle }: {
27
+ runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>;
28
+ steps: Record<TStepId, unknown>;
29
+ transitions: readonly JourneyTransition<TContext, TStepId, TEventMap, THandlers>[];
30
+ scheduleLifecycle: JourneyLifecycleScheduler<TContext, TStepId, TEventMap, THandlers>;
31
+ }) => 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>;
@@ -0,0 +1,33 @@
1
+ import type { JourneyEqualityFn, JourneyJsonObject, JourneyMachineSnapshotReason, JourneyObservationEvent, JourneySelector, JourneySnapshot } from "../types";
2
+ type SnapshotOptions = {
3
+ notify?: boolean;
4
+ reason?: JourneyMachineSnapshotReason;
5
+ };
6
+ export type JourneyMachineRuntime<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>> = {
7
+ getSnapshot: () => JourneySnapshot<TContext, TStepId>;
8
+ peekSnapshot: () => JourneySnapshot<TContext, TStepId>;
9
+ setSnapshot: (nextSnapshot: JourneySnapshot<TContext, TStepId>, options?: SnapshotOptions) => JourneySnapshot<TContext, TStepId>;
10
+ isDisposed: () => boolean;
11
+ isRunActive: (runVersion: number) => boolean;
12
+ cancelInFlight: () => void;
13
+ openLifecycle: (runVersion: number) => AbortController | null;
14
+ closeLifecycle: (controller: AbortController) => void;
15
+ queue: <T>(runner: (runVersion: number, signal: AbortSignal) => Promise<T>, onCanceled: () => T) => Promise<T>;
16
+ notify: () => void;
17
+ emit: (event: JourneyObservationEvent<TStepId, TEventMap>) => void;
18
+ subscribe: (listener: () => void) => () => void;
19
+ subscribeSelector: <TSelected>(selector: JourneySelector<TContext, TStepId, TSelected>, listener: (next: TSelected, previous: TSelected) => void, equalityFn?: JourneyEqualityFn<TSelected>) => () => void;
20
+ subscribeEvent: (listener: (event: JourneyObservationEvent<TStepId, TEventMap>) => void) => () => void;
21
+ dispose: () => void;
22
+ };
23
+ export declare const createJourneyMachineRuntime: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>>({ snapshot: initialSnapshot, onSnapshotChange, onDispose, onListenerError }: {
24
+ snapshot: JourneySnapshot<TContext, TStepId>;
25
+ onSnapshotChange?: (args: {
26
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
27
+ snapshot: JourneySnapshot<TContext, TStepId>;
28
+ reason: JourneyMachineSnapshotReason;
29
+ }) => void;
30
+ onDispose?: () => void;
31
+ onListenerError?: (error: unknown, context: "snapshot" | "event") => void;
32
+ }) => JourneyMachineRuntime<TContext, TStepId, TEventMap>;
33
+ export {};
@@ -0,0 +1,33 @@
1
+ import type { JourneyEqualityFn, JourneyJsonObject, JourneyMachineSnapshotReason, JourneyObservationEvent, JourneySelector, JourneySnapshot } from "../types";
2
+ type SnapshotOptions = {
3
+ notify?: boolean;
4
+ reason?: JourneyMachineSnapshotReason;
5
+ };
6
+ export type JourneyMachineRuntime<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>> = {
7
+ getSnapshot: () => JourneySnapshot<TContext, TStepId>;
8
+ peekSnapshot: () => JourneySnapshot<TContext, TStepId>;
9
+ setSnapshot: (nextSnapshot: JourneySnapshot<TContext, TStepId>, options?: SnapshotOptions) => JourneySnapshot<TContext, TStepId>;
10
+ isDisposed: () => boolean;
11
+ isRunActive: (runVersion: number) => boolean;
12
+ cancelInFlight: () => void;
13
+ openLifecycle: (runVersion: number) => AbortController | null;
14
+ closeLifecycle: (controller: AbortController) => void;
15
+ queue: <T>(runner: (runVersion: number, signal: AbortSignal) => Promise<T>, onCanceled: () => T) => Promise<T>;
16
+ notify: () => void;
17
+ emit: (event: JourneyObservationEvent<TStepId, TEventMap>) => void;
18
+ subscribe: (listener: () => void) => () => void;
19
+ subscribeSelector: <TSelected>(selector: JourneySelector<TContext, TStepId, TSelected>, listener: (next: TSelected, previous: TSelected) => void, equalityFn?: JourneyEqualityFn<TSelected>) => () => void;
20
+ subscribeEvent: (listener: (event: JourneyObservationEvent<TStepId, TEventMap>) => void) => () => void;
21
+ dispose: () => void;
22
+ };
23
+ export declare const createJourneyMachineRuntime: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>>({ snapshot: initialSnapshot, onSnapshotChange, onDispose, onListenerError }: {
24
+ snapshot: JourneySnapshot<TContext, TStepId>;
25
+ onSnapshotChange?: (args: {
26
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
27
+ snapshot: JourneySnapshot<TContext, TStepId>;
28
+ reason: JourneyMachineSnapshotReason;
29
+ }) => void;
30
+ onDispose?: () => void;
31
+ onListenerError?: (error: unknown, context: "snapshot" | "event") => void;
32
+ }) => JourneyMachineRuntime<TContext, TStepId, TEventMap>;
33
+ export {};
@@ -0,0 +1,9 @@
1
+ import type { JourneyJsonObject, JourneySendEvent, JourneySendResult, JourneyTransition } from "../types";
2
+ import type { JourneyMachineAsyncStateController } from "./async-state";
3
+ import type { JourneyMachineNavigationController } from "./navigation";
4
+ import type { JourneyMachineRuntime } from "./runtime";
5
+ export type JourneyMachineSendController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>> = {
6
+ executeSend: (event: JourneySendEvent<TStepId, TEventMap>, runVersion: number, signal: AbortSignal) => Promise<JourneySendResult<TContext, TStepId>>;
7
+ buildCanceledSendResult: (operation?: string) => JourneySendResult<TContext, TStepId>;
8
+ };
9
+ export declare const createJourneyMachineSendController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>, asyncState: JourneyMachineAsyncStateController<TStepId>, navigation: JourneyMachineNavigationController<TContext, TStepId, TEventMap, THandlers>, headless: boolean, steps: Record<TStepId, unknown>, transitions: readonly JourneyTransition<TContext, TStepId, TEventMap, THandlers>[], handlers: THandlers, requireExplicitCompletion: boolean, defaultTimeoutMs: number | undefined) => JourneyMachineSendController<TContext, TStepId, TEventMap>;
@@ -0,0 +1,9 @@
1
+ import type { JourneyJsonObject, JourneySendEvent, JourneySendResult, JourneyTransition } from "../types";
2
+ import type { JourneyMachineAsyncStateController } from "./async-state";
3
+ import type { JourneyMachineNavigationController } from "./navigation";
4
+ import type { JourneyMachineRuntime } from "./runtime";
5
+ export type JourneyMachineSendController<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>> = {
6
+ executeSend: (event: JourneySendEvent<TStepId, TEventMap>, runVersion: number, signal: AbortSignal) => Promise<JourneySendResult<TContext, TStepId>>;
7
+ buildCanceledSendResult: (operation?: string) => JourneySendResult<TContext, TStepId>;
8
+ };
9
+ export declare const createJourneyMachineSendController: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, THandlers extends Record<string, unknown>>(runtime: JourneyMachineRuntime<TContext, TStepId, TEventMap>, asyncState: JourneyMachineAsyncStateController<TStepId>, navigation: JourneyMachineNavigationController<TContext, TStepId, TEventMap, THandlers>, headless: boolean, steps: Record<TStepId, unknown>, transitions: readonly JourneyTransition<TContext, TStepId, TEventMap, THandlers>[], handlers: THandlers, requireExplicitCompletion: boolean, defaultTimeoutMs: number | undefined) => JourneyMachineSendController<TContext, TStepId, TEventMap>;
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var I=(n,t)=>{for(var i in t)m(n,i,{get:t[i],enumerable:!0})},b=(n,t,i,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of S(t))!x.call(n,a)&&a!==i&&m(n,a,{get:()=>t[a],enumerable:!(c=l(t,a))||c.enumerable});return n};var J=n=>b(m({},"__esModule",{value:!0}),n);var g={};I(g,{createAnalyticsPlugin:()=>E});module.exports=J(g);var w=()=>{let n=globalThis;if(typeof n.__DEV__=="boolean")return n.__DEV__;let t=n.process?.env?.NODE_ENV;return t===void 0||t==="development"},f=(n,t)=>{if(!(!w()||typeof console>"u")){if(t===void 0){console.warn(n);return}console.warn(n,t)}};var h=({context:n})=>({context:n}),E=n=>{let t,i=null,c=null,a=(y,u)=>{try{n.track(u)}catch(r){if(n.onError){n.onError(r,y);return}f("Journey analytics track() threw without an onError handler.",r)}};return{name:"analytics",setup:()=>({augmentMachine:({machine:y})=>{let u=y,r=(s,e)=>{a(s,e)},p=s=>{if(!n.includeStepMeta)return{};let e=u.getStepMeta(s);return e===void 0?{}:{stepMeta:e}},T=({from:s,to:e})=>{if(!n.includeStepMeta)return{};let d=u.getStepMeta(s),o=e==="COMPLETE"||e==="TERMINATED"?void 0:u.getStepMeta(e);return{...d===void 0?{}:{fromStepMeta:d},...o===void 0?{}:{toStepMeta:o}}};return t=u.subscribeEvent(s=>{let e=s,d=u.getSnapshot(),o=h({context:d.context});switch(e.type){case"journey.start":i=e.timestamp,c=e.timestamp,r(e,{name:"journey_started",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{stepId:e.stepId,...p(e.stepId),...o}});return;case"step.enter":c=e.timestamp,r(e,{name:"step_viewed",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{stepId:e.stepId,...p(e.stepId),...o}});return;case"step.exit":r(e,{name:"step_exited",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{stepId:e.stepId,...c===null?{}:{dwellMs:Math.max(0,e.timestamp-c)},...p(e.stepId),...o}});return;case"transition.start":r(e,{name:"transition_started",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{from:e.from,eventType:e.event.type,...o}});return;case"transition.success":r(e,{name:"transition_succeeded",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{from:e.from,to:e.to,eventType:e.eventType,transitionId:e.transitionId,...T({from:e.from,to:e.to}),...o}});return;case"transition.error":r(e,{name:"transition_failed",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{from:e.from,eventType:e.eventType,transitionId:e.transitionId,error:e.error,...o}});return;case"journey.completed":r(e,{name:"journey_completed",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{stepId:e.stepId,...i===null?{}:{durationMs:Math.max(0,e.timestamp-i)},...p(e.stepId),...o}});return;case"journey.terminated":r(e,{name:"journey_terminated",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{stepId:e.stepId,...i===null?{}:{durationMs:Math.max(0,e.timestamp-i)},...p(e.stepId),...o}});return;case"navigation.previous":r(e,{name:"navigation_previous",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{from:e.from,to:e.to,requestedSteps:e.requestedSteps,appliedSteps:e.appliedSteps,...T({from:e.from,to:e.to}),...o}});return;case"navigation.lastVisited":r(e,{name:"navigation_last_visited",timestamp:e.timestamp,...n.machineId?{machineId:n.machineId}:{},payload:{from:e.from,to:e.to,...T({from:e.from,to:e.to}),...o}});return}}),{trackAnalyticsEvent:(s,e={})=>{let d={name:s,timestamp:Date.now(),...n.machineId?{machineId:n.machineId}:{},payload:e};return a(d,d),d}}},dispose:()=>{t?.()}})}};0&&(module.exports={createAnalyticsPlugin});
2
+ //# sourceMappingURL=index.cjs.map