@vielzeug/clockwork 1.0.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.
- package/README.md +220 -0
- package/dist/_dev.cjs +2 -0
- package/dist/_dev.cjs.map +1 -0
- package/dist/_dev.d.ts +2 -0
- package/dist/_dev.d.ts.map +1 -0
- package/dist/_dev.js +9 -0
- package/dist/_dev.js.map +1 -0
- package/dist/_trace.cjs +2 -0
- package/dist/_trace.cjs.map +1 -0
- package/dist/_trace.d.ts +7 -0
- package/dist/_trace.d.ts.map +1 -0
- package/dist/_trace.js +17 -0
- package/dist/_trace.js.map +1 -0
- package/dist/clockwork.cjs +2 -0
- package/dist/clockwork.cjs.map +1 -0
- package/dist/clockwork.iife.js +2 -0
- package/dist/clockwork.iife.js.map +1 -0
- package/dist/clockwork.js +2 -0
- package/dist/clockwork.js.map +1 -0
- package/dist/definition.cjs +2 -0
- package/dist/definition.cjs.map +1 -0
- package/dist/definition.d.ts +16 -0
- package/dist/definition.d.ts.map +1 -0
- package/dist/definition.js +49 -0
- package/dist/definition.js.map +1 -0
- package/dist/devtools.cjs +2 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.ts +29 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +36 -0
- package/dist/devtools.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.ts +57 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +64 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/interpret.cjs +2 -0
- package/dist/interpret.cjs.map +1 -0
- package/dist/interpret.d.ts +25 -0
- package/dist/interpret.d.ts.map +1 -0
- package/dist/interpret.js +298 -0
- package/dist/interpret.js.map +1 -0
- package/dist/types.d.ts +277 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +48 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import type { Readable } from '@vielzeug/ripple';
|
|
2
|
+
export type MachineEvent = {
|
|
3
|
+
type: string;
|
|
4
|
+
};
|
|
5
|
+
export type EventType<Ev extends MachineEvent> = Ev['type'] & string;
|
|
6
|
+
export type EventByType<Ev extends MachineEvent, Type extends EventType<Ev>> = Extract<Ev, {
|
|
7
|
+
type: Type;
|
|
8
|
+
}>;
|
|
9
|
+
type InitEvent = {
|
|
10
|
+
readonly type: '$init';
|
|
11
|
+
};
|
|
12
|
+
type HydrateEvent = {
|
|
13
|
+
readonly type: '$hydrate';
|
|
14
|
+
};
|
|
15
|
+
export type AfterEvent = {
|
|
16
|
+
readonly delay: number;
|
|
17
|
+
readonly type: '$after';
|
|
18
|
+
};
|
|
19
|
+
export type LifecycleEvent = AfterEvent | HydrateEvent | InitEvent;
|
|
20
|
+
export type ActionArgs<Ctx extends object, Ev extends MachineEvent = MachineEvent> = {
|
|
21
|
+
context: Ctx;
|
|
22
|
+
readonly event: Ev;
|
|
23
|
+
};
|
|
24
|
+
export type ActionFn<Ctx extends object, Ev extends MachineEvent = MachineEvent> = (args: ActionArgs<Ctx, Ev>) => void;
|
|
25
|
+
/** Convenience alias for action functions used in `after` delayed transitions. */
|
|
26
|
+
export type AfterActionFn<Ctx extends object> = ActionFn<Ctx, AfterEvent>;
|
|
27
|
+
/**
|
|
28
|
+
* Pure predicate that decides whether a transition is taken.
|
|
29
|
+
* Context is **readonly** — mutating it inside a guard corrupts live state and is never valid.
|
|
30
|
+
*/
|
|
31
|
+
export type GuardFn<Ctx extends object, Ev extends MachineEvent = MachineEvent> = (args: {
|
|
32
|
+
readonly context: Readonly<Ctx>;
|
|
33
|
+
readonly event: Readonly<Ev>;
|
|
34
|
+
}) => boolean;
|
|
35
|
+
export type LifecycleFn<Ctx extends object, Ev extends MachineEvent = MachineEvent> = (args: {
|
|
36
|
+
context: Ctx;
|
|
37
|
+
readonly event: Ev | LifecycleEvent;
|
|
38
|
+
}) => void;
|
|
39
|
+
export type TransitionDef<State extends string, Ctx extends object, Ev extends MachineEvent, Type extends EventType<Ev> = EventType<Ev>> = {
|
|
40
|
+
actions?: Array<ActionFn<Ctx, EventByType<Ev, Type>>>;
|
|
41
|
+
guard?: GuardFn<Ctx, EventByType<Ev, Type>>;
|
|
42
|
+
target: NoInfer<State>;
|
|
43
|
+
};
|
|
44
|
+
/** Single transition or array of conditional alternatives (for the `on` map). */
|
|
45
|
+
export type TransitionInput<State extends string, Ctx extends object, Ev extends MachineEvent, Type extends EventType<Ev> = EventType<Ev>> = Array<TransitionDef<State, Ctx, Ev, Type>> | TransitionDef<State, Ctx, Ev, Type>;
|
|
46
|
+
export type AfterDef<State extends string, Ctx extends object> = {
|
|
47
|
+
actions?: Array<AfterActionFn<Ctx>>;
|
|
48
|
+
delay: number;
|
|
49
|
+
/** Guard evaluated at timer fire time. Same signature as all other guards. */
|
|
50
|
+
guard?: GuardFn<Ctx, AfterEvent>;
|
|
51
|
+
target: NoInfer<State>;
|
|
52
|
+
};
|
|
53
|
+
export type InvokeArgs<Ctx extends object, Ev extends MachineEvent> = {
|
|
54
|
+
readonly context: Readonly<Ctx>;
|
|
55
|
+
readonly entryEvent: Ev | LifecycleEvent;
|
|
56
|
+
readonly signal: AbortSignal;
|
|
57
|
+
};
|
|
58
|
+
export type InvokeDef<Ctx extends object, Ev extends MachineEvent, Result = unknown> = {
|
|
59
|
+
/** Optional label surfaced in DebugEvent for traceability. Defaults to an auto-incremented id. */
|
|
60
|
+
id?: string;
|
|
61
|
+
onDone?: (result: Result, context: Readonly<Ctx>) => Ev;
|
|
62
|
+
onError?: (error: unknown, context: Readonly<Ctx>) => Ev;
|
|
63
|
+
src: (args: InvokeArgs<Ctx, Ev>) => Promise<Result>;
|
|
64
|
+
};
|
|
65
|
+
export type StateNode<State extends string, Ctx extends object, Ev extends MachineEvent> = {
|
|
66
|
+
after?: Array<AfterDef<State, Ctx>>;
|
|
67
|
+
entry?: LifecycleFn<Ctx, Ev>;
|
|
68
|
+
exit?: LifecycleFn<Ctx, Ev>;
|
|
69
|
+
/** Initial substate for compound states. */
|
|
70
|
+
initial?: string;
|
|
71
|
+
invoke?: Array<InvokeDef<Ctx, Ev, any>>;
|
|
72
|
+
on?: Partial<{
|
|
73
|
+
[Type in EventType<Ev>]: TransitionInput<State, Ctx, Ev, Type>;
|
|
74
|
+
}>;
|
|
75
|
+
/** Nested substates — makes this a compound state. */
|
|
76
|
+
states?: Record<string, StateNode<string, Ctx, Ev>>;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Validates context during a transition or at init.
|
|
80
|
+
* - Return `true` for valid context.
|
|
81
|
+
* - Return a non-empty string describing the failure (surfaced in `ClockworkError.details.reason`).
|
|
82
|
+
*/
|
|
83
|
+
export type ContextValidator<Ctx extends object> = (context: Ctx) => string | true;
|
|
84
|
+
type ContextField<Ctx extends object> = Record<string, never> extends Ctx ? {
|
|
85
|
+
context?: Ctx;
|
|
86
|
+
} : {
|
|
87
|
+
context: Ctx;
|
|
88
|
+
};
|
|
89
|
+
export type MachineConfig<State extends string, Ctx extends object, Ev extends MachineEvent> = ContextField<Ctx> & {
|
|
90
|
+
initial: NoInfer<State>;
|
|
91
|
+
states: Record<State, StateNode<NoInfer<State>, Ctx, Ev>>;
|
|
92
|
+
validateContext?: ContextValidator<Ctx>;
|
|
93
|
+
};
|
|
94
|
+
export type MachineSnapshot<State extends string, Ctx extends object> = {
|
|
95
|
+
readonly context: Readonly<Ctx>;
|
|
96
|
+
readonly state: State;
|
|
97
|
+
};
|
|
98
|
+
export type PersistenceAdapter<State extends string, Ctx extends object> = {
|
|
99
|
+
load: () => MachineSnapshot<State, Ctx> | undefined;
|
|
100
|
+
save: (snapshot: MachineSnapshot<State, Ctx>) => void;
|
|
101
|
+
};
|
|
102
|
+
export type DebugEvent<State extends string, Ctx extends object, Ev extends MachineEvent> = {
|
|
103
|
+
context: Readonly<Ctx>;
|
|
104
|
+
event: Ev;
|
|
105
|
+
from: State;
|
|
106
|
+
passed: boolean;
|
|
107
|
+
target: State;
|
|
108
|
+
type: 'guard';
|
|
109
|
+
} | {
|
|
110
|
+
event: Ev;
|
|
111
|
+
from: State;
|
|
112
|
+
type: 'transition-skipped';
|
|
113
|
+
} | {
|
|
114
|
+
event: Ev | LifecycleEvent;
|
|
115
|
+
from: State;
|
|
116
|
+
to: State;
|
|
117
|
+
type: 'transition';
|
|
118
|
+
} | {
|
|
119
|
+
context: Readonly<Ctx>;
|
|
120
|
+
event: Ev | LifecycleEvent;
|
|
121
|
+
invokeId: string;
|
|
122
|
+
state: State;
|
|
123
|
+
type: 'invoke-start';
|
|
124
|
+
} | {
|
|
125
|
+
context: Readonly<Ctx>;
|
|
126
|
+
event: Ev | LifecycleEvent;
|
|
127
|
+
invokeId: string;
|
|
128
|
+
result: unknown;
|
|
129
|
+
state: State;
|
|
130
|
+
type: 'invoke-done';
|
|
131
|
+
} | {
|
|
132
|
+
context: Readonly<Ctx>;
|
|
133
|
+
error: unknown;
|
|
134
|
+
event: Ev | LifecycleEvent;
|
|
135
|
+
invokeId: string;
|
|
136
|
+
state: State;
|
|
137
|
+
type: 'invoke-error';
|
|
138
|
+
} | {
|
|
139
|
+
context: Readonly<Ctx>;
|
|
140
|
+
event: Ev | LifecycleEvent;
|
|
141
|
+
invokeId: string;
|
|
142
|
+
state: State;
|
|
143
|
+
type: 'invoke-abort';
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Pure event interceptor. Return the event (possibly transformed) to allow it,
|
|
147
|
+
* or `null` to block it. Runs in order; first `null` wins.
|
|
148
|
+
*/
|
|
149
|
+
export type InterceptorFn<State extends string, Ctx extends object, Ev extends MachineEvent> = (event: Ev, snapshot: {
|
|
150
|
+
readonly context: Readonly<Ctx>;
|
|
151
|
+
readonly state: State;
|
|
152
|
+
}) => Ev | null;
|
|
153
|
+
export type TransitionTraceEntry<State extends string, Ev extends MachineEvent> = {
|
|
154
|
+
readonly event: Ev | LifecycleEvent;
|
|
155
|
+
readonly from: State;
|
|
156
|
+
readonly timestamp: number;
|
|
157
|
+
readonly to: State;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Result of `send()`.
|
|
161
|
+
* - `status` — `'transitioned'` | `'queued'` | `'rejected'`
|
|
162
|
+
*
|
|
163
|
+
* Use `result.status !== 'rejected'` to check for success,
|
|
164
|
+
* and `result.status === 'queued'` to detect re-entrant sends inside actions.
|
|
165
|
+
*/
|
|
166
|
+
export type SendResult = {
|
|
167
|
+
readonly status: 'queued' | 'rejected' | 'transitioned';
|
|
168
|
+
};
|
|
169
|
+
export type InterpretOptions<State extends string, Ctx extends object, Ev extends MachineEvent> = {
|
|
170
|
+
/** Custom deep-clone function. Must return a structurally equivalent object with a safe prototype. Defaults to `structuredClone`. */
|
|
171
|
+
clone?: <T>(value: T) => T;
|
|
172
|
+
/** Array of pure interceptors. Each receives the event and current snapshot. Return the event (possibly transformed) to allow it, or `null` to block. Runs left-to-right; first `null` stops the chain. */
|
|
173
|
+
interceptors?: Array<InterceptorFn<State, Ctx, Ev>>;
|
|
174
|
+
/**
|
|
175
|
+
* Maximum number of transitions processed in a single synchronous flush.
|
|
176
|
+
* Defaults to `1_000`. Increase only if your machine has intentionally deep
|
|
177
|
+
* guard-only transition chains; reaching this limit throws
|
|
178
|
+
* `MACHINE_TRANSITION_LOOP_GUARD` to prevent infinite loops.
|
|
179
|
+
*/
|
|
180
|
+
maxTransitionsPerFlush?: number;
|
|
181
|
+
/** Callback for all debug events (guards, transitions, invokes, skips). Auto-enables a 50-entry trace buffer unless `traceLimit` is set. */
|
|
182
|
+
onDebug?: (event: DebugEvent<State, Ctx, Ev>) => void;
|
|
183
|
+
persistence?: PersistenceAdapter<State, Ctx>;
|
|
184
|
+
snapshot?: MachineSnapshot<State, Ctx>;
|
|
185
|
+
/**
|
|
186
|
+
* Ring buffer capacity for `getTrace()`.
|
|
187
|
+
* Defaults to `50` when `onDebug` is set; `0` (disabled) otherwise.
|
|
188
|
+
* Set explicitly to override.
|
|
189
|
+
*/
|
|
190
|
+
traceLimit?: number;
|
|
191
|
+
};
|
|
192
|
+
export interface MachineDefinition<State extends string, Ctx extends object, Ev extends MachineEvent> {
|
|
193
|
+
/**
|
|
194
|
+
* Resolves the transition that would be taken for a given state, context, and event.
|
|
195
|
+
* Pure — no side effects, no debug events.
|
|
196
|
+
*
|
|
197
|
+
* @param options.onGuard — called for every guard evaluation (passed and failed).
|
|
198
|
+
*/
|
|
199
|
+
resolve(input: {
|
|
200
|
+
context: Readonly<Ctx>;
|
|
201
|
+
event: Ev;
|
|
202
|
+
state: State;
|
|
203
|
+
}, options?: {
|
|
204
|
+
onGuard?: (info: {
|
|
205
|
+
context: Readonly<Ctx>;
|
|
206
|
+
event: Ev;
|
|
207
|
+
from: State;
|
|
208
|
+
passed: boolean;
|
|
209
|
+
target: State;
|
|
210
|
+
}) => void;
|
|
211
|
+
}): TransitionDef<State, Ctx, Ev> | undefined;
|
|
212
|
+
/** Creates a running machine instance from this definition. */
|
|
213
|
+
start(options?: InterpretOptions<State, Ctx, Ev>): MachineInstance<State, Ctx, Ev>;
|
|
214
|
+
}
|
|
215
|
+
export interface MachineInstance<State extends string, Ctx extends object, Ev extends MachineEvent> {
|
|
216
|
+
readonly context: Readable<Ctx>;
|
|
217
|
+
/** Fires when the machine is disposed. Use to tie external lifecycles to the machine's lifetime. */
|
|
218
|
+
readonly disposalSignal: AbortSignal;
|
|
219
|
+
/** Whether the machine has been permanently disposed. */
|
|
220
|
+
readonly disposed: boolean;
|
|
221
|
+
readonly state: Readable<State>;
|
|
222
|
+
/**
|
|
223
|
+
* Returns `true` if a valid transition exists for `event` in the current state.
|
|
224
|
+
* Evaluates guards but fires no side effects or debug hooks.
|
|
225
|
+
* Returns `false` when the machine is disposed.
|
|
226
|
+
*/
|
|
227
|
+
can(event: Ev): boolean;
|
|
228
|
+
/** Terminates the machine: aborts all active invokes, clears timers, and disposes internal signals. Idempotent. */
|
|
229
|
+
dispose(): void;
|
|
230
|
+
getSnapshot(): MachineSnapshot<State, Ctx>;
|
|
231
|
+
getTrace(): readonly TransitionTraceEntry<State, Ev>[];
|
|
232
|
+
/**
|
|
233
|
+
* Returns `true` if the current state equals one of the given values or is a
|
|
234
|
+
* descendant of any (e.g. `matches('loading')` matches `'loading.pending'`).
|
|
235
|
+
* Returns `false` when the machine is disposed.
|
|
236
|
+
*/
|
|
237
|
+
matches(...states: string[]): boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Dispatches the event and returns a `SendResult`.
|
|
240
|
+
* Check `.status` for `'transitioned'`, `'queued'`, or `'rejected'`.
|
|
241
|
+
*/
|
|
242
|
+
send(event: Ev): SendResult;
|
|
243
|
+
/**
|
|
244
|
+
* Subscribes to state/context changes. Fires only when state or context
|
|
245
|
+
* reference changes — **not** on the initial state. Returns an unsubscribe
|
|
246
|
+
* function. Use `getSnapshot()` to read the current state immediately.
|
|
247
|
+
*/
|
|
248
|
+
subscribe(fn: (snapshot: MachineSnapshot<State, Ctx>) => void): () => void;
|
|
249
|
+
[Symbol.dispose](): void;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Opaque schema bundle. Captures the three generics in a single type for
|
|
253
|
+
* ergonomic machine typing.
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```ts
|
|
257
|
+
* type Auth = MachineSchema<'idle' | 'loading', { user: User | null }, AuthEvent>;
|
|
258
|
+
*
|
|
259
|
+
* const guard: MachineGuard<Auth> = ({ context }) => !!context.user;
|
|
260
|
+
* const action: MachineAction<Auth, { type: 'DONE'; user: User }> = ({ context, event }) => {
|
|
261
|
+
* context.user = event.user;
|
|
262
|
+
* };
|
|
263
|
+
* ```
|
|
264
|
+
*/
|
|
265
|
+
export type MachineSchema<S extends string, C extends object, E extends MachineEvent> = {
|
|
266
|
+
readonly _c: C;
|
|
267
|
+
readonly _e: E;
|
|
268
|
+
readonly _s: S;
|
|
269
|
+
};
|
|
270
|
+
export type MachineTypeConfig<T extends MachineSchema<any, any, any>> = MachineConfig<T['_s'], T['_c'], T['_e']>;
|
|
271
|
+
export type MachineTypeDefinition<T extends MachineSchema<any, any, any>> = MachineDefinition<T['_s'], T['_c'], T['_e']>;
|
|
272
|
+
export type MachineTypeInstance<T extends MachineSchema<any, any, any>> = MachineInstance<T['_s'], T['_c'], T['_e']>;
|
|
273
|
+
export type MachineTypeOptions<T extends MachineSchema<any, any, any>> = InterpretOptions<T['_s'], T['_c'], T['_e']>;
|
|
274
|
+
export type MachineAction<T extends MachineSchema<any, any, any>, E extends T['_e'] = T['_e']> = ActionFn<T['_c'], E>;
|
|
275
|
+
export type MachineGuard<T extends MachineSchema<any, any, any>, E extends T['_e'] = T['_e']> = GuardFn<T['_c'], E>;
|
|
276
|
+
export {};
|
|
277
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vielzeug/clockwork",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Zero-dependency typed finite state machine — guards, async invokes, nested states, and signal integration",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"main": "./dist/index.cjs",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"source": "./src/index.ts",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"require": "./dist/index.cjs"
|
|
18
|
+
},
|
|
19
|
+
"./devtools": {
|
|
20
|
+
"source": "./src/devtools.ts",
|
|
21
|
+
"types": "./dist/devtools.d.ts",
|
|
22
|
+
"import": "./dist/devtools.js",
|
|
23
|
+
"require": "./dist/devtools.cjs"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "vite build && pnpm run build:bundle && pnpm run build:types",
|
|
28
|
+
"build:types": "tsc -p tsconfig.declarations.json",
|
|
29
|
+
"fix": "eslint --fix src",
|
|
30
|
+
"lint": "eslint src",
|
|
31
|
+
"prepublishOnly": "pnpm run build",
|
|
32
|
+
"test": "vitest",
|
|
33
|
+
"build:bundle": "vite build --config vite.bundle.config.ts"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public",
|
|
37
|
+
"registry": "https://registry.npmjs.org/"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@vielzeug/ripple": "workspace:*"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^26.1.0",
|
|
44
|
+
"typescript": "~6.0.3",
|
|
45
|
+
"vite": "^8.1.3",
|
|
46
|
+
"vitest": "^4.1.9"
|
|
47
|
+
}
|
|
48
|
+
}
|