ihsm 0.0.26 → 0.1.21
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 +105 -113
- package/lib/cjs/index.d.ts +8 -1394
- package/lib/cjs/index.js +65 -764
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/internal/console-instrumentation.d.ts +34 -0
- package/lib/cjs/internal/console-instrumentation.js +71 -0
- package/lib/cjs/internal/console-instrumentation.js.map +1 -0
- package/lib/cjs/internal/identity.d.ts +16 -0
- package/lib/cjs/internal/identity.js +170 -0
- package/lib/cjs/internal/identity.js.map +1 -0
- package/lib/cjs/internal/instrumentation.d.ts +47 -0
- package/lib/cjs/internal/instrumentation.js +201 -0
- package/lib/cjs/internal/instrumentation.js.map +1 -0
- package/lib/cjs/internal/runtime.d.ts +376 -0
- package/lib/cjs/internal/runtime.js +2530 -0
- package/lib/cjs/internal/runtime.js.map +1 -0
- package/lib/cjs/internal/types.d.ts +515 -0
- package/lib/cjs/internal/types.js +9 -0
- package/lib/cjs/internal/types.js.map +1 -0
- package/lib/cjs/test-only.d.ts +5 -0
- package/lib/cjs/test-only.js +21 -0
- package/lib/cjs/test-only.js.map +1 -0
- package/lib/cjs/testing.d.ts +120 -88
- package/lib/cjs/testing.js +126 -38
- package/lib/cjs/testing.js.map +1 -1
- package/lib/cjs/transition-routines.d.ts +3 -0
- package/lib/cjs/transition-routines.js +11 -0
- package/lib/cjs/transition-routines.js.map +1 -0
- package/lib/cjs/types.d.ts +5 -0
- package/lib/cjs/{internal/defs.private.js → types.js} +1 -1
- package/lib/cjs/types.js.map +1 -0
- package/lib/esm/index.d.ts +8 -1394
- package/lib/esm/index.js +5 -742
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/internal/console-instrumentation.d.ts +34 -0
- package/lib/esm/internal/console-instrumentation.js +68 -0
- package/lib/esm/internal/console-instrumentation.js.map +1 -0
- package/lib/esm/internal/identity.d.ts +16 -0
- package/lib/esm/internal/identity.js +159 -0
- package/lib/esm/internal/identity.js.map +1 -0
- package/lib/esm/internal/instrumentation.d.ts +47 -0
- package/lib/esm/internal/instrumentation.js +178 -0
- package/lib/esm/internal/instrumentation.js.map +1 -0
- package/lib/esm/internal/runtime.d.ts +376 -0
- package/lib/esm/internal/runtime.js +2462 -0
- package/lib/esm/internal/runtime.js.map +1 -0
- package/lib/esm/internal/types.d.ts +515 -0
- package/lib/esm/internal/types.js +6 -0
- package/lib/esm/internal/types.js.map +1 -0
- package/lib/esm/test-only.d.ts +5 -0
- package/lib/esm/test-only.js +15 -0
- package/lib/esm/test-only.js.map +1 -0
- package/lib/esm/testing.d.ts +120 -88
- package/lib/esm/testing.js +125 -38
- package/lib/esm/testing.js.map +1 -1
- package/lib/esm/transition-routines.d.ts +3 -0
- package/lib/esm/transition-routines.js +3 -0
- package/lib/esm/transition-routines.js.map +1 -0
- package/lib/esm/types.d.ts +5 -0
- package/lib/esm/types.js +2 -0
- package/lib/esm/types.js.map +1 -0
- package/package.json +22 -4
- package/lib/cjs/internal/defs.private.d.ts +0 -41
- package/lib/cjs/internal/defs.private.js.map +0 -1
- package/lib/cjs/internal/dispatch.debug.d.ts +0 -4
- package/lib/cjs/internal/dispatch.debug.js +0 -332
- package/lib/cjs/internal/dispatch.debug.js.map +0 -1
- package/lib/cjs/internal/dispatch.production.d.ts +0 -6
- package/lib/cjs/internal/dispatch.production.js +0 -241
- package/lib/cjs/internal/dispatch.production.js.map +0 -1
- package/lib/cjs/internal/dispatch.trace.d.ts +0 -4
- package/lib/cjs/internal/dispatch.trace.js +0 -418
- package/lib/cjs/internal/dispatch.trace.js.map +0 -1
- package/lib/cjs/internal/hsm.d.ts +0 -60
- package/lib/cjs/internal/hsm.js +0 -215
- package/lib/cjs/internal/hsm.js.map +0 -1
- package/lib/cjs/internal/lookup.d.ts +0 -15
- package/lib/cjs/internal/lookup.js +0 -32
- package/lib/cjs/internal/lookup.js.map +0 -1
- package/lib/cjs/internal/utils.d.ts +0 -26
- package/lib/cjs/internal/utils.js +0 -63
- package/lib/cjs/internal/utils.js.map +0 -1
- package/lib/esm/internal/defs.private.d.ts +0 -41
- package/lib/esm/internal/defs.private.js +0 -2
- package/lib/esm/internal/defs.private.js.map +0 -1
- package/lib/esm/internal/dispatch.debug.d.ts +0 -4
- package/lib/esm/internal/dispatch.debug.js +0 -328
- package/lib/esm/internal/dispatch.debug.js.map +0 -1
- package/lib/esm/internal/dispatch.production.d.ts +0 -6
- package/lib/esm/internal/dispatch.production.js +0 -237
- package/lib/esm/internal/dispatch.production.js.map +0 -1
- package/lib/esm/internal/dispatch.trace.d.ts +0 -4
- package/lib/esm/internal/dispatch.trace.js +0 -414
- package/lib/esm/internal/dispatch.trace.js.map +0 -1
- package/lib/esm/internal/hsm.d.ts +0 -60
- package/lib/esm/internal/hsm.js +0 -211
- package/lib/esm/internal/hsm.js.map +0 -1
- package/lib/esm/internal/lookup.d.ts +0 -15
- package/lib/esm/internal/lookup.js +0 -29
- package/lib/esm/internal/lookup.js.map +0 -1
- package/lib/esm/internal/utils.d.ts +0 -26
- package/lib/esm/internal/utils.js +0 -52
- package/lib/esm/internal/utils.js.map +0 -1
package/lib/esm/testing.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* into production code that only imports `ihsm`. Import test helpers from `ihsm/testing`:
|
|
7
7
|
*
|
|
8
8
|
* ```ts
|
|
9
|
-
* import {
|
|
9
|
+
* import { makeActor, TopState } from 'ihsm'; // production code
|
|
10
10
|
* import { makeTestActor, mock, TestPort } from 'ihsm/testing'; // tests only
|
|
11
11
|
* ```
|
|
12
12
|
*
|
|
@@ -15,42 +15,113 @@
|
|
|
15
15
|
*
|
|
16
16
|
* @packageDocumentation
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { Port } from './internal/runtime.js';
|
|
19
|
+
import type { Any, Disposable, EventObserver, MachinePortInput, TracedMessage, ActorOptions, ActorConfig, ActorContextOf, ActorConfigOf, DomainPortOf, ChildActor, TestHsm, TopStateArg, ValidatedTopStateArg } from './internal/types.js';
|
|
19
20
|
export * from './index.js';
|
|
20
21
|
/**
|
|
21
|
-
* Full-access
|
|
22
|
+
* Full-access test actor returned by {@link makeTestActor} for **deterministic testing**.
|
|
22
23
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* machine's `port` for asserting outbound calls or pushing observations.
|
|
24
|
+
* Same faceted surface as {@link ChildActor} (`notify`, `notifyNow`, `call`, `hsm`), with
|
|
25
|
+
* `hsm.port` and `hsm.subscribe` for test instrumentation.
|
|
26
26
|
*
|
|
27
|
-
* @typeParam
|
|
28
|
-
* @typeParam Protocol - Public protocol
|
|
29
|
-
* @typeParam InternalProtocol - Internal (port-driven) protocol
|
|
30
|
-
* @typeParam P - Port type
|
|
27
|
+
* @typeParam C - Machine config bag (plain interface satisfying {@link ActorConfig})
|
|
31
28
|
*
|
|
32
29
|
* @category State machine
|
|
33
30
|
*/
|
|
34
|
-
export type TestActor<
|
|
35
|
-
|
|
31
|
+
export type TestActor<C extends ActorConfig = ActorConfig> = ChildActor<C> & {
|
|
32
|
+
ctx: ActorContextOf<C>;
|
|
33
|
+
hsm: TestHsm<C>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* An actor-like handle that can be drained by {@link settleAll}.
|
|
37
|
+
*
|
|
38
|
+
* Any actor exposing `hsm.sync()` is compatible. When `hsm.subscribe()` is also available
|
|
39
|
+
* (e.g. {@link TestActor}), {@link settleAll} can detect quiescence and return `settled: true`.
|
|
40
|
+
*
|
|
41
|
+
* @category Testing
|
|
42
|
+
*/
|
|
43
|
+
export type SettlingActor = {
|
|
44
|
+
hsm: {
|
|
45
|
+
sync(): Promise<void>;
|
|
46
|
+
subscribe?: (observer: EventObserver) => Disposable;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Options for {@link settleAll}.
|
|
51
|
+
*
|
|
52
|
+
* @category Testing
|
|
53
|
+
*/
|
|
54
|
+
export interface SettleAllOptions {
|
|
36
55
|
/**
|
|
37
|
-
*
|
|
38
|
-
* test surface (it is intentionally absent from {@link Actor} / {@link Hsm}).
|
|
56
|
+
* Hard cap on drain rounds.
|
|
39
57
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
|
|
58
|
+
* Each round calls `sync()` on all actors once.
|
|
59
|
+
* @defaultValue `8`
|
|
60
|
+
*/
|
|
61
|
+
readonly maxRounds?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Number of consecutive no-event rounds required to declare quiescence.
|
|
43
64
|
*
|
|
44
|
-
*
|
|
45
|
-
* @
|
|
65
|
+
* Applies only when all actors expose `hsm.subscribe()`.
|
|
66
|
+
* @defaultValue `1`
|
|
46
67
|
*/
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
68
|
+
readonly idleRounds?: number;
|
|
69
|
+
/**
|
|
70
|
+
* Microtask turns awaited after each round.
|
|
71
|
+
*
|
|
72
|
+
* Helps flush promise chains that enqueue follow-up work.
|
|
73
|
+
* @defaultValue `1`
|
|
74
|
+
*/
|
|
75
|
+
readonly microtaskTurns?: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Result returned by {@link settleAll}.
|
|
79
|
+
*
|
|
80
|
+
* @category Testing
|
|
81
|
+
*/
|
|
82
|
+
export interface SettleAllResult {
|
|
83
|
+
/** Number of rounds that were executed. */
|
|
84
|
+
readonly rounds: number;
|
|
85
|
+
/**
|
|
86
|
+
* True when observed quiescence was reached.
|
|
87
|
+
*
|
|
88
|
+
* False means either:
|
|
89
|
+
* - at least one actor lacked `hsm.subscribe()` (settlement is unobservable), or
|
|
90
|
+
* - `maxRounds` was hit before enough idle rounds were observed.
|
|
91
|
+
*/
|
|
92
|
+
readonly settled: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Drain a set of actors until quiescence is observed, or until `maxRounds` is reached.
|
|
96
|
+
*
|
|
97
|
+
* This is a **testing** helper: it coordinates repeated `sync()` calls across a small actor system
|
|
98
|
+
* and reports whether a stable idle round was observed.
|
|
99
|
+
*
|
|
100
|
+
* - If every actor exposes `hsm.subscribe()` (e.g. via {@link makeTestActor}), quiescence is
|
|
101
|
+
* detected by observing no emitted events for `idleRounds` consecutive rounds.
|
|
102
|
+
* - If any actor lacks `hsm.subscribe()`, settlement cannot be observed reliably; the helper still
|
|
103
|
+
* runs `maxRounds` drain rounds and returns `{ settled: false }`.
|
|
104
|
+
*
|
|
105
|
+
* `options` is the last argument when provided.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const a = makeTestActor(A, ctxA, new TestPort());
|
|
110
|
+
* const b = makeTestActor(B, ctxB, new TestPort());
|
|
111
|
+
* a.notify.go();
|
|
112
|
+
* const { settled } = await settleAll(a, b);
|
|
113
|
+
* expect(settled).equals(true);
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @category Testing
|
|
117
|
+
*/
|
|
118
|
+
export declare function settleAll(...actors: SettlingActor[]): Promise<SettleAllResult>;
|
|
119
|
+
export declare function settleAll(...args: [...SettlingActor[], SettleAllOptions]): Promise<SettleAllResult>;
|
|
120
|
+
export declare class TestPort<T extends TopStateArg = TopStateArg> extends Port<T> {
|
|
50
121
|
private readonly _messages;
|
|
51
122
|
private readonly _preloads;
|
|
52
123
|
private _now;
|
|
53
|
-
private
|
|
124
|
+
private _virtualTimerId;
|
|
54
125
|
private readonly _timers;
|
|
55
126
|
private readonly _cancelled;
|
|
56
127
|
private readonly _randomQueue;
|
|
@@ -67,6 +138,13 @@ export declare class TestPort<T = Any> extends BasePort<T> implements RandomServ
|
|
|
67
138
|
* @param payload - Optional values associated with the entry
|
|
68
139
|
*/
|
|
69
140
|
record(event: string, ...payload: unknown[]): void;
|
|
141
|
+
/**
|
|
142
|
+
* Push an **inbound** internal notification into the bound actor (`port.actor.onData(…)`).
|
|
143
|
+
*
|
|
144
|
+
* Convenience for deterministic tests — equivalent to calling the generated method on
|
|
145
|
+
* {@link Port.actor} after the factory has wired it.
|
|
146
|
+
*/
|
|
147
|
+
send(event: string, ...payload: unknown[]): void;
|
|
70
148
|
private _slot;
|
|
71
149
|
/** @internal Set the persistent implementation for a stubbed method (used by `method.default`). */
|
|
72
150
|
_stubDefault(name: string, impl: (...args: unknown[]) => unknown): void;
|
|
@@ -104,13 +182,13 @@ export declare class TestPort<T = Any> extends BasePort<T> implements RandomServ
|
|
|
104
182
|
clear(): void;
|
|
105
183
|
private _sortTimers;
|
|
106
184
|
/** @inheritdoc Port.setTimeout — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
107
|
-
setTimeout(callback: () => void, millis?: number):
|
|
185
|
+
setTimeout(callback: () => void, millis?: number): number;
|
|
108
186
|
/** @inheritdoc Port.clearTimeout */
|
|
109
|
-
clearTimeout(id:
|
|
187
|
+
clearTimeout(id: number | undefined): void;
|
|
110
188
|
/** @inheritdoc Port.setInterval — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
111
|
-
setInterval(callback: () => void, millis?: number):
|
|
189
|
+
setInterval(callback: () => void, millis?: number): number;
|
|
112
190
|
/** @inheritdoc Port.clearInterval */
|
|
113
|
-
clearInterval(id:
|
|
191
|
+
clearInterval(id: number | undefined): void;
|
|
114
192
|
/**
|
|
115
193
|
* Advance the virtual clock by `millis`, firing every timer whose deadline is reached, in
|
|
116
194
|
* deadline order. Timers scheduled by a fired callback within the same window are **not** run
|
|
@@ -165,8 +243,8 @@ export declare class PreloadError extends Error {
|
|
|
165
243
|
* - `calls` — the live, typed list of argument tuples this method was called with (`Parameters<F>[]`).
|
|
166
244
|
*
|
|
167
245
|
* Both `default` and `once` take a closure with the **same parameters and return type** as the port
|
|
168
|
-
* method, so scripts stay type-safe. Pushing
|
|
169
|
-
* {@link
|
|
246
|
+
* method, so scripts stay type-safe. Pushing inbound observations uses
|
|
247
|
+
* {@link TestPort.send | send} on the port.
|
|
170
248
|
*
|
|
171
249
|
* @typeParam A - The method's argument tuple (`Parameters<F>`)
|
|
172
250
|
* @typeParam R - The method's return type (`ReturnType<F>`)
|
|
@@ -186,75 +264,29 @@ export interface Stubbed<A extends unknown[], R> {
|
|
|
186
264
|
}
|
|
187
265
|
/**
|
|
188
266
|
* The fully-wired mock type returned by {@link makeTestPort}: the mock class `P` itself, with each
|
|
189
|
-
* **port method** (inferred from the machine's {@link TopState} via {@link
|
|
267
|
+
* **port method** (inferred from the machine's {@link TopState} via {@link DomainPortOf}) upgraded to
|
|
190
268
|
* a scriptable, introspectable {@link Stubbed} method.
|
|
191
269
|
*
|
|
192
270
|
* @typeParam P - The mock port class instance type
|
|
193
|
-
* @typeParam
|
|
271
|
+
* @typeParam C - The machine {@link ActorConfig} bag (inferred from the port's {@link TestPort} type param)
|
|
194
272
|
*
|
|
195
273
|
* @category Testing
|
|
196
274
|
*/
|
|
197
|
-
export type Mock<P,
|
|
198
|
-
[K in keyof
|
|
275
|
+
export type Mock<P, C extends ActorConfig = ActorConfig> = P & {
|
|
276
|
+
[K in keyof DomainPortOf<C>]: DomainPortOf<C>[K] extends (...args: infer A) => infer R ? Stubbed<A, R> : DomainPortOf<C>[K];
|
|
199
277
|
};
|
|
200
|
-
/**
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
* whatever the test scripted with `method.default(...)` / `method.once(...)`. You never write a
|
|
207
|
-
* method body — the behavior lives in the test, so one mock serves many scenarios.
|
|
208
|
-
*
|
|
209
|
-
* Concrete members (public fields holding device state, helper methods) are left untouched; only the
|
|
210
|
-
* abstract port methods are auto-stubbed.
|
|
211
|
-
*
|
|
212
|
-
* @example
|
|
213
|
-
* ```ts
|
|
214
|
-
* @ihsmTest.mock
|
|
215
|
-
* abstract class WatcherMock extends ihsmTest.TestPort<WatcherTop> {
|
|
216
|
-
* abstract watch(path: string): ihsm.ResultWithSubscription<number>; // signature matches the port
|
|
217
|
-
* }
|
|
218
|
-
*
|
|
219
|
-
* const port = ihsmTest.makeTestPort(WatcherMock);
|
|
220
|
-
* port.watch.default(path => ({ value: 1, subscription: { dispose: () => port.record('dispose') } }));
|
|
221
|
-
* ```
|
|
222
|
-
*
|
|
223
|
-
* @category Testing
|
|
224
|
-
*/
|
|
225
|
-
export declare function mock<C extends abstract new (...args: Any[]) => TestPort<Any>>(Ctor: C): C;
|
|
226
|
-
/**
|
|
227
|
-
* Instantiate an `@`{@link mock}-decorated mock class — the canonical way to build a test port.
|
|
228
|
-
*
|
|
229
|
-
* Pass the mock **class**; you get back a typed instance whose abstract port methods (inferred from
|
|
230
|
-
* the machine's {@link TopState}) are scriptable {@link Stubbed} methods, ready for
|
|
231
|
-
* `port.method.default(...)`. The port's `actor` is still bound lazily when you hand the instance to
|
|
232
|
-
* {@link makeActor} / {@link makeTestActor}.
|
|
233
|
-
*
|
|
234
|
-
* @typeParam P - The mock class instance type (a {@link TestPort} subclass)
|
|
235
|
-
* @param PortClass - The `@mock`-decorated mock class
|
|
236
|
-
* @returns A scriptable {@link Mock} instance
|
|
237
|
-
* @throws If `PortClass` was not decorated with `@`{@link mock}
|
|
238
|
-
*
|
|
239
|
-
* @example
|
|
240
|
-
* ```ts
|
|
241
|
-
* const port = ihsmTest.makeTestPort(WatcherMock);
|
|
242
|
-
* port.watch.default(() => ({ value: 1, subscription: { dispose: () => port.send('onClosed') } }));
|
|
243
|
-
* const sm = ihsmTest.makeTestActor(WatcherTop, new WatcherCtx(), port);
|
|
244
|
-
* ```
|
|
245
|
-
*
|
|
246
|
-
* @category Testing
|
|
247
|
-
*/
|
|
248
|
-
export declare function makeTestPort<P extends TestPort<Any>>(PortClass: abstract new () => P): Mock<P, P extends {
|
|
249
|
-
readonly __topState: infer T;
|
|
250
|
-
} ? T : never>;
|
|
278
|
+
/** Inferred {@link ActorConfig} from a {@link TestPort}'s root state type parameter. */
|
|
279
|
+
export type ActorConfigFromPortClass<P> = P extends TestPort<infer M> ? ActorConfigOf<M> : ActorConfig;
|
|
280
|
+
/** Decorate an abstract {@link TestPort} subclass; pass port method names (abstract members are type-only at runtime). */
|
|
281
|
+
export declare function mock<C extends abstract new (...args: Any[]) => TestPort<TopStateArg>>(Ctor: C): C;
|
|
282
|
+
export declare function mock(...methodNames: string[]): <C extends abstract new (...args: Any[]) => TestPort<TopStateArg>>(Ctor: C) => C;
|
|
283
|
+
export declare function makeTestPort<P extends TestPort<TopStateArg>, C extends ActorConfig = ActorConfigFromPortClass<P>>(PortClass: abstract new () => P, _topState?: TopStateArg<C>): Mock<P, C>;
|
|
251
284
|
/**
|
|
252
285
|
* Creates a **full-access** actor for deterministic tests: merged protocol + typed `port`.
|
|
253
286
|
*
|
|
254
287
|
* Identical construction to {@link makeActor} (same three mandatory arguments + {@link ActorOptions}),
|
|
255
|
-
* but the returned {@link TestActor} exposes the
|
|
256
|
-
*
|
|
257
|
-
* asserting outbound interactions or pushing observations.
|
|
288
|
+
* but the returned {@link TestActor} exposes the full child protocol (including internal buckets) and
|
|
289
|
+
* grants typed access to `port` for asserting outbound interactions or pushing observations.
|
|
258
290
|
*
|
|
259
291
|
* Unlike {@link makeActor}, `traceLevel` defaults to {@link TraceLevel.VERBOSE_DEBUG} so a failing
|
|
260
292
|
* test is fully readable; opt down explicitly via `options.traceLevel` only when you need a quiet run.
|
|
@@ -276,4 +308,4 @@ export declare function makeTestPort<P extends TestPort<Any>>(PortClass: abstrac
|
|
|
276
308
|
*
|
|
277
309
|
* @category Factory
|
|
278
310
|
*/
|
|
279
|
-
export declare function makeTestActor<
|
|
311
|
+
export declare function makeTestActor<T extends TopStateArg<ActorConfig>>(topState: ValidatedTopStateArg<T>, ctx: ActorContextOf<ActorConfigOf<T>>, port?: MachinePortInput<ActorConfigOf<T>>, options?: ActorOptions<ActorConfigOf<T>>): TestActor<ActorConfigOf<T>>;
|
package/lib/esm/testing.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* into production code that only imports `ihsm`. Import test helpers from `ihsm/testing`:
|
|
7
7
|
*
|
|
8
8
|
* ```ts
|
|
9
|
-
* import {
|
|
9
|
+
* import { makeActor, TopState } from 'ihsm'; // production code
|
|
10
10
|
* import { makeTestActor, mock, TestPort } from 'ihsm/testing'; // tests only
|
|
11
11
|
* ```
|
|
12
12
|
*
|
|
@@ -15,13 +15,66 @@
|
|
|
15
15
|
*
|
|
16
16
|
* @packageDocumentation
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { Port, TraceLevel, spawnActor, kMachine, defaultDispatchErrorCallback, defaultInitialize, defaultTraceWriter } from './internal/runtime.js';
|
|
19
19
|
export * from './index.js';
|
|
20
|
-
|
|
20
|
+
function isSettlingActor(value) {
|
|
21
|
+
return typeof value === 'object' && value !== null && 'hsm' in value && typeof value.hsm?.sync === 'function';
|
|
22
|
+
}
|
|
23
|
+
export async function settleAll(...args) {
|
|
24
|
+
if (args.length === 0) {
|
|
25
|
+
return { rounds: 0, settled: true };
|
|
26
|
+
}
|
|
27
|
+
const last = args[args.length - 1];
|
|
28
|
+
const hasOptions = !isSettlingActor(last);
|
|
29
|
+
const options = (hasOptions ? last : {});
|
|
30
|
+
const actorArgs = (hasOptions ? args.slice(0, -1) : args);
|
|
31
|
+
const actors = actorArgs.filter(isSettlingActor);
|
|
32
|
+
const maxRounds = Math.max(1, options.maxRounds ?? 8);
|
|
33
|
+
const idleRoundsTarget = Math.max(1, options.idleRounds ?? 1);
|
|
34
|
+
const microtaskTurns = Math.max(0, options.microtaskTurns ?? 1);
|
|
35
|
+
if (actors.length === 0)
|
|
36
|
+
return { rounds: 0, settled: true };
|
|
37
|
+
const observable = actors.every(actor => typeof actor.hsm.subscribe === 'function');
|
|
38
|
+
const subscriptions = [];
|
|
39
|
+
let rounds;
|
|
40
|
+
let idleRounds = 0;
|
|
41
|
+
let observedEvents = 0;
|
|
42
|
+
try {
|
|
43
|
+
if (observable) {
|
|
44
|
+
for (const actor of actors) {
|
|
45
|
+
const sub = actor.hsm.subscribe(() => {
|
|
46
|
+
observedEvents += 1;
|
|
47
|
+
});
|
|
48
|
+
subscriptions.push(sub);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (rounds = 1; rounds <= maxRounds; rounds += 1) {
|
|
52
|
+
const before = observedEvents;
|
|
53
|
+
await Promise.all(actors.map(actor => actor.hsm.sync()));
|
|
54
|
+
for (let turn = 0; turn < microtaskTurns; turn += 1) {
|
|
55
|
+
await Promise.resolve();
|
|
56
|
+
}
|
|
57
|
+
if (!observable)
|
|
58
|
+
continue;
|
|
59
|
+
const emitted = observedEvents > before;
|
|
60
|
+
idleRounds = emitted ? 0 : idleRounds + 1;
|
|
61
|
+
if (idleRounds >= idleRoundsTarget) {
|
|
62
|
+
return { rounds, settled: true };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { rounds: maxRounds, settled: false };
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
for (const sub of subscriptions) {
|
|
69
|
+
sub.dispose();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class TestPort extends Port {
|
|
21
74
|
_messages = [];
|
|
22
75
|
_preloads = new Map();
|
|
23
76
|
_now = 0;
|
|
24
|
-
|
|
77
|
+
_virtualTimerId = 0;
|
|
25
78
|
_timers = [];
|
|
26
79
|
_cancelled = new Set();
|
|
27
80
|
_randomQueue = [];
|
|
@@ -40,6 +93,21 @@ export class TestPort extends BasePort {
|
|
|
40
93
|
record(event, ...payload) {
|
|
41
94
|
this._messages.push({ event, payload: [...payload] });
|
|
42
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Push an **inbound** internal notification into the bound actor (`port.actor.onData(…)`).
|
|
98
|
+
*
|
|
99
|
+
* Convenience for deterministic tests — equivalent to calling the generated method on
|
|
100
|
+
* {@link Port.actor} after the factory has wired it.
|
|
101
|
+
*/
|
|
102
|
+
send(event, ...payload) {
|
|
103
|
+
const actor = this.actor;
|
|
104
|
+
const facet = actor?.notify;
|
|
105
|
+
const inbound = facet?.[event];
|
|
106
|
+
if (inbound === undefined) {
|
|
107
|
+
throw new Error(`ihsm: TestPort.send — actor has no notification "${event}" (bind the port with makeActor/makeTestActor first)`);
|
|
108
|
+
}
|
|
109
|
+
inbound.call(facet, ...payload);
|
|
110
|
+
}
|
|
43
111
|
_slot(name) {
|
|
44
112
|
let slot = this._preloads.get(name);
|
|
45
113
|
if (slot === undefined) {
|
|
@@ -119,7 +187,7 @@ export class TestPort extends BasePort {
|
|
|
119
187
|
}
|
|
120
188
|
/** @inheritdoc Port.setTimeout — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
121
189
|
setTimeout(callback, millis) {
|
|
122
|
-
const id = ++this.
|
|
190
|
+
const id = ++this._virtualTimerId;
|
|
123
191
|
this._timers.push({ id, at: this._now + Math.max(0, millis ?? 0), callback });
|
|
124
192
|
this._sortTimers();
|
|
125
193
|
return id;
|
|
@@ -137,7 +205,7 @@ export class TestPort extends BasePort {
|
|
|
137
205
|
}
|
|
138
206
|
/** @inheritdoc Port.setInterval — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
139
207
|
setInterval(callback, millis) {
|
|
140
|
-
const id = ++this.
|
|
208
|
+
const id = ++this._virtualTimerId;
|
|
141
209
|
const repeat = Math.max(0, millis ?? 0);
|
|
142
210
|
this._timers.push({ id, at: this._now + repeat, callback, repeat });
|
|
143
211
|
this._sortTimers();
|
|
@@ -255,6 +323,8 @@ function buildMethodStub(target, name) {
|
|
|
255
323
|
}
|
|
256
324
|
/** Marker set by {@link mock} so {@link makeTestPort} can verify the class was decorated. */
|
|
257
325
|
const MOCK_MARKER = Symbol('ihsm.mock');
|
|
326
|
+
/** Port method names registered by {@link mock} (abstract members have no runtime prototype entries). */
|
|
327
|
+
const MOCK_METHODS = Symbol('ihsm.mockMethods');
|
|
258
328
|
/**
|
|
259
329
|
* Class decorator that turns an **abstract** {@link TestPort} subclass into a preloadable mock.
|
|
260
330
|
*
|
|
@@ -270,7 +340,7 @@ const MOCK_MARKER = Symbol('ihsm.mock');
|
|
|
270
340
|
* @example
|
|
271
341
|
* ```ts
|
|
272
342
|
* @ihsmTest.mock
|
|
273
|
-
* abstract class WatcherMock extends ihsmTest.TestPort<WatcherTop> {
|
|
343
|
+
* abstract class WatcherMock extends ihsmTest.TestPort<typeof WatcherTop> {
|
|
274
344
|
* abstract watch(path: string): ihsm.ResultWithSubscription<number>; // signature matches the port
|
|
275
345
|
* }
|
|
276
346
|
*
|
|
@@ -280,29 +350,20 @@ const MOCK_MARKER = Symbol('ihsm.mock');
|
|
|
280
350
|
*
|
|
281
351
|
* @category Testing
|
|
282
352
|
*/
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return stub;
|
|
297
|
-
}
|
|
298
|
-
return Reflect.get(t, prop, receiver);
|
|
299
|
-
},
|
|
300
|
-
});
|
|
301
|
-
return proxy;
|
|
302
|
-
}
|
|
353
|
+
function markMockPort(Ctor, methodNames) {
|
|
354
|
+
Ctor[MOCK_MARKER] = true;
|
|
355
|
+
Ctor[MOCK_METHODS] = [...methodNames];
|
|
356
|
+
}
|
|
357
|
+
export function mock(first, ...rest) {
|
|
358
|
+
if (typeof first === 'function') {
|
|
359
|
+
markMockPort(first, []);
|
|
360
|
+
return first;
|
|
361
|
+
}
|
|
362
|
+
const methodNames = [first, ...rest];
|
|
363
|
+
return (Ctor) => {
|
|
364
|
+
markMockPort(Ctor, methodNames);
|
|
365
|
+
return Ctor;
|
|
303
366
|
};
|
|
304
|
-
Decorated[MOCK_MARKER] = true;
|
|
305
|
-
return Decorated;
|
|
306
367
|
}
|
|
307
368
|
/**
|
|
308
369
|
* Instantiate an `@`{@link mock}-decorated mock class — the canonical way to build a test port.
|
|
@@ -326,19 +387,29 @@ export function mock(Ctor) {
|
|
|
326
387
|
*
|
|
327
388
|
* @category Testing
|
|
328
389
|
*/
|
|
329
|
-
|
|
390
|
+
function installPortStubs(port, PortClass) {
|
|
391
|
+
const stubTarget = port;
|
|
392
|
+
const names = PortClass[MOCK_METHODS] ?? [];
|
|
393
|
+
for (const name of names) {
|
|
394
|
+
if (NON_STUB_PROPS.has(name))
|
|
395
|
+
continue;
|
|
396
|
+
port[name] = buildMethodStub(stubTarget, name);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
export function makeTestPort(PortClass, _topState) {
|
|
330
400
|
if (PortClass[MOCK_MARKER] !== true) {
|
|
331
401
|
throw new Error('ihsm: makeTestPort requires a class decorated with @ihsm.mock');
|
|
332
402
|
}
|
|
333
|
-
|
|
403
|
+
const port = new PortClass();
|
|
404
|
+
installPortStubs(port, PortClass);
|
|
405
|
+
return port;
|
|
334
406
|
}
|
|
335
407
|
/**
|
|
336
408
|
* Creates a **full-access** actor for deterministic tests: merged protocol + typed `port`.
|
|
337
409
|
*
|
|
338
410
|
* Identical construction to {@link makeActor} (same three mandatory arguments + {@link ActorOptions}),
|
|
339
|
-
* but the returned {@link TestActor} exposes the
|
|
340
|
-
*
|
|
341
|
-
* asserting outbound interactions or pushing observations.
|
|
411
|
+
* but the returned {@link TestActor} exposes the full child protocol (including internal buckets) and
|
|
412
|
+
* grants typed access to `port` for asserting outbound interactions or pushing observations.
|
|
342
413
|
*
|
|
343
414
|
* Unlike {@link makeActor}, `traceLevel` defaults to {@link TraceLevel.VERBOSE_DEBUG} so a failing
|
|
344
415
|
* test is fully readable; opt down explicitly via `options.traceLevel` only when you need a quiet run.
|
|
@@ -360,11 +431,27 @@ export function makeTestPort(PortClass) {
|
|
|
360
431
|
*
|
|
361
432
|
* @category Factory
|
|
362
433
|
*/
|
|
363
|
-
export function makeTestActor(topState, ctx, port, options = {}
|
|
434
|
+
export function makeTestActor(topState, ctx, port, options = {}) {
|
|
435
|
+
const boundPort = (port ?? new TestPort());
|
|
364
436
|
// Tests default to the most verbose trace (so a failing run is fully readable). Never silence to
|
|
365
437
|
// a production level here — the user opts down explicitly via `options.traceLevel`.
|
|
366
|
-
const { initialize = defaultInitialize, traceLevel = TraceLevel.VERBOSE_DEBUG, traceWriter = defaultTraceWriter, dispatchErrorCallback = defaultDispatchErrorCallback } = options;
|
|
367
|
-
const
|
|
368
|
-
|
|
438
|
+
const { initialize = defaultInitialize, traceLevel = TraceLevel.VERBOSE_DEBUG, traceWriter = defaultTraceWriter, dispatchErrorCallback = defaultDispatchErrorCallback, ...rest } = options;
|
|
439
|
+
const actor = spawnActor('test', topState, ctx, boundPort, {
|
|
440
|
+
initialize,
|
|
441
|
+
traceLevel,
|
|
442
|
+
traceWriter,
|
|
443
|
+
dispatchErrorCallback,
|
|
444
|
+
...rest,
|
|
445
|
+
});
|
|
446
|
+
const machine = actor[kMachine];
|
|
447
|
+
const testHsm = actor.hsm;
|
|
448
|
+
Object.defineProperties(testHsm, {
|
|
449
|
+
port: { enumerable: true, get: () => boundPort },
|
|
450
|
+
subscribe: {
|
|
451
|
+
enumerable: true,
|
|
452
|
+
value: (observer) => machine.subscribe(observer),
|
|
453
|
+
},
|
|
454
|
+
});
|
|
455
|
+
return actor;
|
|
369
456
|
}
|
|
370
457
|
//# sourceMappingURL=testing.js.map
|
package/lib/esm/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAW,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAS1J,cAAc,SAAS,CAAC;AA+ExB,SAAS,eAAe,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,OAAQ,KAAsC,CAAC,GAAG,EAAE,IAAI,KAAK,UAAU,CAAC;AACjJ,CAAC;AA4BD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAG,IAA6C;IAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAE,IAAyB,CAAC,CAAC,CAAC,EAAE,CAAqB,CAAC;IACnF,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAoB,CAAC;IAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC;IACpF,MAAM,aAAa,GAAiB,EAAE,CAAC;IACvC,IAAI,MAAc,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC;QACJ,IAAI,UAAU,EAAE,CAAC;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAU,CAAC,GAAS,EAAE;oBAC3C,cAAc,IAAI,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAC;gBACH,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACF,CAAC;QACD,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC9B,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBACrD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,UAAU;gBAAE,SAAS;YAC1B,MAAM,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;YACxC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;YAC1C,IAAI,UAAU,IAAI,gBAAgB,EAAE,CAAC;gBACpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClC,CAAC;QACF,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;YAAS,CAAC;QACV,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YACjC,GAAG,CAAC,OAAO,EAAE,CAAC;QACf,CAAC;IACF,CAAC;AACF,CAAC;AAkDD,MAAM,OAAO,QAA8C,SAAQ,IAAO;IACxD,SAAS,GAAoB,EAAE,CAAC;IAChC,SAAS,GAAG,IAAI,GAAG,EAA6H,CAAC;IAC1J,IAAI,GAAG,CAAC,CAAC;IACT,eAAe,GAAG,CAAC,CAAC;IACX,OAAO,GAAmB,EAAE,CAAC;IAC7B,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,YAAY,GAAa,EAAE,CAAC;IAC5B,kBAAkB,GAAa,EAAE,CAAC;IAClC,UAAU,GAAa,EAAE,CAAC;IAC1B,UAAU,GAAa,EAAE,CAAC;IAE3C;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAa,EAAE,GAAG,OAAkB;QAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,KAAa,EAAE,GAAG,OAAkB;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAA4F,CAAC;QAChH,MAAM,KAAK,GAAG,KAAK,EAAE,MAAM,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oDAAoD,KAAK,sDAAsD,CAAC,CAAC;QAClI,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,IAAY;QACzB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,mGAAmG;IACnG,YAAY,CAAC,IAAY,EAAE,IAAqC;QAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,8FAA8F;IAC9F,SAAS,CAAC,IAAY,EAAE,IAAqC;QAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,gHAAgH;IAChH,UAAU,CAAC,IAAY;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,2GAA2G;IAC3G,UAAU,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,IAAY,EAAE,IAAe;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,gDAAgD;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC;QACjD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,wCAAwC;IACxC,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,4FAA4F;IAC5F,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,mCAAmC;IACnC,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,sCAAsC;IACtC,KAAK;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEO,WAAW;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,+GAA+G;IAC/G,UAAU,CAAC,QAAoB,EAAE,MAAe;QAC/C,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,oCAAoC;IACpC,YAAY,CAAC,EAAsB;QAClC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;IAED,gHAAgH;IAChH,WAAW,CAAC,QAAoB,EAAE,MAAe;QAChD,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,qCAAqC;IACrC,aAAa,CAAC,EAAsB;QACnC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,MAAc;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACnH,CAAC;QACF,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;IACpB,CAAC;IAED,gEAAgE;IAChE,IAAI,GAAG;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,kEAAkE;IAClE,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,yFAAyF;IACzF,UAAU,CAAC,GAAG,MAAgB;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,qGAAqG;IACrG,gBAAgB,CAAC,GAAG,MAAgB;QACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,iGAAiG;IACjG,QAAQ,CAAC,GAAG,MAAgB;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,qHAAqH;IACrH,eAAe,CAAC,GAAG,KAAe;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,8IAA8I;IAC9I,WAAW;QACV,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,iHAAiH;IACjH,MAAM;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,IAAI,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,yHAAyH;IACzH,YAAY;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,kGAAkG;IAClG,UAAU;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,sCAAsC,CAAC;IAC1E,CAAC;IAED,2GAA2G;IAC3G,eAAe,CAA4B,KAAQ;QAClD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACtC,YAAY,MAAc;QACzB,KAAK,CAAC,UAAU,MAAM,8DAA8D,MAAM,yBAAyB,MAAM,YAAY,CAAC,CAAC;QACvI,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,CAAC;CACD;AAqDD,gHAAgH;AAChH,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC;AAUxX,SAAS,eAAe,CAAC,MAAkB,EAAE,IAAY;IACxD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAe,EAAW,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjF,IAAI,CAAC,OAAO,GAAG,CAAC,IAAqC,EAAW,EAAE;QACjE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,GAAG,CAAC,IAAqC,EAAW,EAAE;QAC9D,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,GAAG,GAAY,EAAE;QAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IACF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC;AACb,CAAC;AAED,6FAA6F;AAC7F,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAExC,yGAAyG;AACzG,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAOhD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAS,YAAY,CAAC,IAAoB,EAAE,WAA8B;IACxE,IAAoC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACzD,IAA+C,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;AACnF,CAAC;AAKD,MAAM,UAAU,IAAI,CAAmE,KAAiB,EAAE,GAAG,IAAc;IAC1H,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACjC,YAAY,CAAC,KAAuB,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,IAAO,EAAK,EAAE;QACrB,YAAY,CAAC,IAAsB,EAAE,WAAW,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAS,gBAAgB,CAAC,IAA2B,EAAE,SAAyB;IAC/E,MAAM,UAAU,GAAG,IAA6B,CAAC;IACjD,MAAM,KAAK,GAAI,SAAoD,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACxF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,IAA2C,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAuF,SAA+B,EAAE,SAA0B;IAC7K,IAAK,SAAyC,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,IAAI,GAAG,IAAK,SAAoC,EAAE,CAAC;IACzD,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClC,OAAO,IAAkB,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,aAAa,CAAqC,QAAiC,EAAE,GAAqC,EAAE,IAAyC,EAAE,UAA0C,EAAE;IAElO,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,IAAI,QAAQ,EAAK,CAAuC,CAAC;IACpF,iGAAiG;IACjG,oFAAoF;IACpF,MAAM,EAAE,UAAU,GAAG,iBAAiB,EAAE,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,WAAW,GAAG,kBAAkB,EAAE,qBAAqB,GAAG,4BAA4B,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC3L,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,QAA0B,EAAE,GAAG,EAAE,SAAS,EAAE;QAC5E,UAAU;QACV,UAAU;QACV,WAAW;QACX,qBAAqB;QACrB,GAAG,IAAI;KACP,CAAC,CAAC;IACH,MAAM,OAAO,GAAI,KAA8B,CAAC,QAAQ,CAAe,CAAC;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAiB,CAAC;IACxC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE;QAChC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE;QAChD,SAAS,EAAE;YACV,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,CAAC,QAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;SAC/D;KACD,CAAC,CAAC;IACH,OAAO,KAAqB,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Public subpath — transition planning and execution helpers. */
|
|
2
|
+
export { TransitionTableError, createTransitionTracer, executeTransitionRoutine, planTransitionClasses, transitionTraceLines } from './internal/runtime.js';
|
|
3
|
+
export type { PlannedTransition, TransitionHost, TransitionRoutineExecuteOptions, TransitionRoutinePlan, TransitionRoutineStyle, TransitionTracer, TransitionTraceHost } from './internal/types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition-routines.js","sourceRoot":"","sources":["../../src/transition-routines.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-only public surface — erased at compile time; no runtime JS from this module.
|
|
3
|
+
*
|
|
4
|
+
* Import protocol and actor types from here:
|
|
5
|
+
* `import type { ActorConfig, ChildActor } from 'ihsm/types'` */ export type { ActorConfig, ActorContextOf, ActorInternalNotificationsOf, ActorInternalServicesOf, ActorMethodKeysOf, ActorNotificationsOf, ActorConfigOf, ActorPortOf, ActorServicesOf, ActorHsm, ActorOptions, ActorParentField, AssertAsyncService, CallFacet, ChildActor, ChildHsm, DisjointActorConfig, EmbodimentKind, ErrorHost, ExternalActor, ExternalHsm, FilterReservedKeys, InboundActor, InboundHsm, IPort, IsReservedName, MachinePortInput, HandlerHsm, MachineContext, MachineInternal, MachinePort, MachinePublic, NotificationArgs, NotificationClient, NotificationHandler, NotificationQueue, NotifyFacet, OwnerActorHsm, ParentActor, PlannedTransition, ProtocolBucket, ProtocolIndex, ProtocolSlot, ReservedName, SelfNotifications, ServiceArgs, ServiceClient, ServiceHandler, ServiceReply, ServiceCallOptions, StateClassOf, TestActorHsm, TestHsm, TopStateArg, TransitionHost, TransitionResolver, TransitionRoutineExecuteOptions, TransitionRoutinePlan, TransitionRoutineStyle, TransitionTracer, TransitionTraceHost, ValidatedActorConfig, ValidatedTopStateArg, ActorIdentity, CauseRef, DispatchPhase, Instrumentation, LogRecord, MacrostepBegin, MacrostepEnd, MicrostepBegin, MicrostepEnd, TriggerKind, TraceFrame, ActorLogger, LogAttributes, DispatchError, EnqueueInfo, SpawnInfo, PortCallBegin, PortCallEnd, OutboundCallBegin, OutboundCallEnd, } from './internal/types.js';
|
package/lib/esm/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|