ihsm 0.0.26 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -113
- package/lib/cjs/index.d.ts +5 -1394
- package/lib/cjs/index.js +53 -764
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/internal/runtime.d.ts +293 -0
- package/lib/cjs/internal/runtime.js +1906 -0
- package/lib/cjs/internal/runtime.js.map +1 -0
- package/lib/cjs/internal/types.d.ts +348 -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 +38 -91
- package/lib/cjs/testing.js +72 -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 +5 -1394
- package/lib/esm/index.js +3 -742
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/internal/runtime.d.ts +293 -0
- package/lib/esm/internal/runtime.js +1847 -0
- package/lib/esm/internal/runtime.js.map +1 -0
- package/lib/esm/internal/types.d.ts +348 -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 +38 -91
- package/lib/esm/testing.js +72 -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,28 @@
|
|
|
15
15
|
*
|
|
16
16
|
* @packageDocumentation
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { Port } from './internal/runtime.js';
|
|
19
|
+
import type { Any, 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
|
-
|
|
36
|
-
|
|
37
|
-
* Observe **every** event as it is posted through this machine — a capability unique to the
|
|
38
|
-
* test surface (it is intentionally absent from {@link Actor} / {@link Hsm}).
|
|
39
|
-
*
|
|
40
|
-
* The observer fires synchronously at post time with the event name and payload, capturing
|
|
41
|
-
* client posts, handler self-posts, and port-driven internal events alike. Wire it to
|
|
42
|
-
* {@link TestPort.record} when you want a golden trace on the port under test.
|
|
43
|
-
*
|
|
44
|
-
* @param observer - Callback receiving each {@link TracedMessage}
|
|
45
|
-
* @returns A {@link Disposable} that stops the observation
|
|
46
|
-
*/
|
|
47
|
-
subscribe(observer: EventObserver): Disposable;
|
|
31
|
+
export type TestActor<C extends ActorConfig = ActorConfig> = ChildActor<C> & {
|
|
32
|
+
ctx: ActorContextOf<C>;
|
|
33
|
+
hsm: TestHsm<C>;
|
|
48
34
|
};
|
|
49
|
-
export declare class TestPort<T =
|
|
35
|
+
export declare class TestPort<T extends TopStateArg = TopStateArg> extends Port<T> {
|
|
50
36
|
private readonly _messages;
|
|
51
37
|
private readonly _preloads;
|
|
52
38
|
private _now;
|
|
53
|
-
private
|
|
39
|
+
private _virtualTimerId;
|
|
54
40
|
private readonly _timers;
|
|
55
41
|
private readonly _cancelled;
|
|
56
42
|
private readonly _randomQueue;
|
|
@@ -67,6 +53,13 @@ export declare class TestPort<T = Any> extends BasePort<T> implements RandomServ
|
|
|
67
53
|
* @param payload - Optional values associated with the entry
|
|
68
54
|
*/
|
|
69
55
|
record(event: string, ...payload: unknown[]): void;
|
|
56
|
+
/**
|
|
57
|
+
* Push an **inbound** internal notification into the bound actor (`port.actor.onData(…)`).
|
|
58
|
+
*
|
|
59
|
+
* Convenience for deterministic tests — equivalent to calling the generated method on
|
|
60
|
+
* {@link Port.actor} after the factory has wired it.
|
|
61
|
+
*/
|
|
62
|
+
send(event: string, ...payload: unknown[]): void;
|
|
70
63
|
private _slot;
|
|
71
64
|
/** @internal Set the persistent implementation for a stubbed method (used by `method.default`). */
|
|
72
65
|
_stubDefault(name: string, impl: (...args: unknown[]) => unknown): void;
|
|
@@ -104,13 +97,13 @@ export declare class TestPort<T = Any> extends BasePort<T> implements RandomServ
|
|
|
104
97
|
clear(): void;
|
|
105
98
|
private _sortTimers;
|
|
106
99
|
/** @inheritdoc Port.setTimeout — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
107
|
-
setTimeout(callback: () => void, millis?: number):
|
|
100
|
+
setTimeout(callback: () => void, millis?: number): number;
|
|
108
101
|
/** @inheritdoc Port.clearTimeout */
|
|
109
|
-
clearTimeout(id:
|
|
102
|
+
clearTimeout(id: number | undefined): void;
|
|
110
103
|
/** @inheritdoc Port.setInterval — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
111
|
-
setInterval(callback: () => void, millis?: number):
|
|
104
|
+
setInterval(callback: () => void, millis?: number): number;
|
|
112
105
|
/** @inheritdoc Port.clearInterval */
|
|
113
|
-
clearInterval(id:
|
|
106
|
+
clearInterval(id: number | undefined): void;
|
|
114
107
|
/**
|
|
115
108
|
* Advance the virtual clock by `millis`, firing every timer whose deadline is reached, in
|
|
116
109
|
* deadline order. Timers scheduled by a fired callback within the same window are **not** run
|
|
@@ -165,8 +158,8 @@ export declare class PreloadError extends Error {
|
|
|
165
158
|
* - `calls` — the live, typed list of argument tuples this method was called with (`Parameters<F>[]`).
|
|
166
159
|
*
|
|
167
160
|
* 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
|
|
161
|
+
* method, so scripts stay type-safe. Pushing inbound observations uses
|
|
162
|
+
* {@link TestPort.send | send} on the port.
|
|
170
163
|
*
|
|
171
164
|
* @typeParam A - The method's argument tuple (`Parameters<F>`)
|
|
172
165
|
* @typeParam R - The method's return type (`ReturnType<F>`)
|
|
@@ -186,75 +179,29 @@ export interface Stubbed<A extends unknown[], R> {
|
|
|
186
179
|
}
|
|
187
180
|
/**
|
|
188
181
|
* 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
|
|
182
|
+
* **port method** (inferred from the machine's {@link TopState} via {@link DomainPortOf}) upgraded to
|
|
190
183
|
* a scriptable, introspectable {@link Stubbed} method.
|
|
191
184
|
*
|
|
192
185
|
* @typeParam P - The mock port class instance type
|
|
193
|
-
* @typeParam
|
|
186
|
+
* @typeParam C - The machine {@link ActorConfig} bag (inferred from the port's {@link TestPort} type param)
|
|
194
187
|
*
|
|
195
188
|
* @category Testing
|
|
196
189
|
*/
|
|
197
|
-
export type Mock<P,
|
|
198
|
-
[K in keyof
|
|
190
|
+
export type Mock<P, C extends ActorConfig = ActorConfig> = P & {
|
|
191
|
+
[K in keyof DomainPortOf<C>]: DomainPortOf<C>[K] extends (...args: infer A) => infer R ? Stubbed<A, R> : DomainPortOf<C>[K];
|
|
199
192
|
};
|
|
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>;
|
|
193
|
+
/** Inferred {@link ActorConfig} from a {@link TestPort}'s root state type parameter. */
|
|
194
|
+
export type ActorConfigFromPortClass<P> = P extends TestPort<infer M> ? ActorConfigOf<M> : ActorConfig;
|
|
195
|
+
/** Decorate an abstract {@link TestPort} subclass; pass port method names (abstract members are type-only at runtime). */
|
|
196
|
+
export declare function mock<C extends abstract new (...args: Any[]) => TestPort<TopStateArg>>(Ctor: C): C;
|
|
197
|
+
export declare function mock(...methodNames: string[]): <C extends abstract new (...args: Any[]) => TestPort<TopStateArg>>(Ctor: C) => C;
|
|
198
|
+
export declare function makeTestPort<P extends TestPort<TopStateArg>, C extends ActorConfig = ActorConfigFromPortClass<P>>(PortClass: abstract new () => P, _topState?: TopStateArg<C>): Mock<P, C>;
|
|
251
199
|
/**
|
|
252
200
|
* Creates a **full-access** actor for deterministic tests: merged protocol + typed `port`.
|
|
253
201
|
*
|
|
254
202
|
* 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.
|
|
203
|
+
* but the returned {@link TestActor} exposes the full child protocol (including internal buckets) and
|
|
204
|
+
* grants typed access to `port` for asserting outbound interactions or pushing observations.
|
|
258
205
|
*
|
|
259
206
|
* Unlike {@link makeActor}, `traceLevel` defaults to {@link TraceLevel.VERBOSE_DEBUG} so a failing
|
|
260
207
|
* test is fully readable; opt down explicitly via `options.traceLevel` only when you need a quiet run.
|
|
@@ -276,4 +223,4 @@ export declare function makeTestPort<P extends TestPort<Any>>(PortClass: abstrac
|
|
|
276
223
|
*
|
|
277
224
|
* @category Factory
|
|
278
225
|
*/
|
|
279
|
-
export declare function makeTestActor<
|
|
226
|
+
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,13 @@
|
|
|
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
|
-
export class TestPort extends
|
|
20
|
+
export class TestPort extends Port {
|
|
21
21
|
_messages = [];
|
|
22
22
|
_preloads = new Map();
|
|
23
23
|
_now = 0;
|
|
24
|
-
|
|
24
|
+
_virtualTimerId = 0;
|
|
25
25
|
_timers = [];
|
|
26
26
|
_cancelled = new Set();
|
|
27
27
|
_randomQueue = [];
|
|
@@ -40,6 +40,21 @@ export class TestPort extends BasePort {
|
|
|
40
40
|
record(event, ...payload) {
|
|
41
41
|
this._messages.push({ event, payload: [...payload] });
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Push an **inbound** internal notification into the bound actor (`port.actor.onData(…)`).
|
|
45
|
+
*
|
|
46
|
+
* Convenience for deterministic tests — equivalent to calling the generated method on
|
|
47
|
+
* {@link Port.actor} after the factory has wired it.
|
|
48
|
+
*/
|
|
49
|
+
send(event, ...payload) {
|
|
50
|
+
const actor = this.actor;
|
|
51
|
+
const facet = actor?.notify;
|
|
52
|
+
const inbound = facet?.[event];
|
|
53
|
+
if (inbound === undefined) {
|
|
54
|
+
throw new Error(`ihsm: TestPort.send — actor has no notification "${event}" (bind the port with makeActor/makeTestActor first)`);
|
|
55
|
+
}
|
|
56
|
+
inbound.call(facet, ...payload);
|
|
57
|
+
}
|
|
43
58
|
_slot(name) {
|
|
44
59
|
let slot = this._preloads.get(name);
|
|
45
60
|
if (slot === undefined) {
|
|
@@ -119,7 +134,7 @@ export class TestPort extends BasePort {
|
|
|
119
134
|
}
|
|
120
135
|
/** @inheritdoc Port.setTimeout — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
121
136
|
setTimeout(callback, millis) {
|
|
122
|
-
const id = ++this.
|
|
137
|
+
const id = ++this._virtualTimerId;
|
|
123
138
|
this._timers.push({ id, at: this._now + Math.max(0, millis ?? 0), callback });
|
|
124
139
|
this._sortTimers();
|
|
125
140
|
return id;
|
|
@@ -137,7 +152,7 @@ export class TestPort extends BasePort {
|
|
|
137
152
|
}
|
|
138
153
|
/** @inheritdoc Port.setInterval — backed by the virtual clock; fire with {@link TestPort.advance | advance}. */
|
|
139
154
|
setInterval(callback, millis) {
|
|
140
|
-
const id = ++this.
|
|
155
|
+
const id = ++this._virtualTimerId;
|
|
141
156
|
const repeat = Math.max(0, millis ?? 0);
|
|
142
157
|
this._timers.push({ id, at: this._now + repeat, callback, repeat });
|
|
143
158
|
this._sortTimers();
|
|
@@ -255,6 +270,8 @@ function buildMethodStub(target, name) {
|
|
|
255
270
|
}
|
|
256
271
|
/** Marker set by {@link mock} so {@link makeTestPort} can verify the class was decorated. */
|
|
257
272
|
const MOCK_MARKER = Symbol('ihsm.mock');
|
|
273
|
+
/** Port method names registered by {@link mock} (abstract members have no runtime prototype entries). */
|
|
274
|
+
const MOCK_METHODS = Symbol('ihsm.mockMethods');
|
|
258
275
|
/**
|
|
259
276
|
* Class decorator that turns an **abstract** {@link TestPort} subclass into a preloadable mock.
|
|
260
277
|
*
|
|
@@ -270,7 +287,7 @@ const MOCK_MARKER = Symbol('ihsm.mock');
|
|
|
270
287
|
* @example
|
|
271
288
|
* ```ts
|
|
272
289
|
* @ihsmTest.mock
|
|
273
|
-
* abstract class WatcherMock extends ihsmTest.TestPort<WatcherTop> {
|
|
290
|
+
* abstract class WatcherMock extends ihsmTest.TestPort<typeof WatcherTop> {
|
|
274
291
|
* abstract watch(path: string): ihsm.ResultWithSubscription<number>; // signature matches the port
|
|
275
292
|
* }
|
|
276
293
|
*
|
|
@@ -280,29 +297,20 @@ const MOCK_MARKER = Symbol('ihsm.mock');
|
|
|
280
297
|
*
|
|
281
298
|
* @category Testing
|
|
282
299
|
*/
|
|
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
|
-
}
|
|
300
|
+
function markMockPort(Ctor, methodNames) {
|
|
301
|
+
Ctor[MOCK_MARKER] = true;
|
|
302
|
+
Ctor[MOCK_METHODS] = [...methodNames];
|
|
303
|
+
}
|
|
304
|
+
export function mock(first, ...rest) {
|
|
305
|
+
if (typeof first === 'function') {
|
|
306
|
+
markMockPort(first, []);
|
|
307
|
+
return first;
|
|
308
|
+
}
|
|
309
|
+
const methodNames = [first, ...rest];
|
|
310
|
+
return (Ctor) => {
|
|
311
|
+
markMockPort(Ctor, methodNames);
|
|
312
|
+
return Ctor;
|
|
303
313
|
};
|
|
304
|
-
Decorated[MOCK_MARKER] = true;
|
|
305
|
-
return Decorated;
|
|
306
314
|
}
|
|
307
315
|
/**
|
|
308
316
|
* Instantiate an `@`{@link mock}-decorated mock class — the canonical way to build a test port.
|
|
@@ -326,19 +334,29 @@ export function mock(Ctor) {
|
|
|
326
334
|
*
|
|
327
335
|
* @category Testing
|
|
328
336
|
*/
|
|
329
|
-
|
|
337
|
+
function installPortStubs(port, PortClass) {
|
|
338
|
+
const stubTarget = port;
|
|
339
|
+
const names = PortClass[MOCK_METHODS] ?? [];
|
|
340
|
+
for (const name of names) {
|
|
341
|
+
if (NON_STUB_PROPS.has(name))
|
|
342
|
+
continue;
|
|
343
|
+
port[name] = buildMethodStub(stubTarget, name);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
export function makeTestPort(PortClass, _topState) {
|
|
330
347
|
if (PortClass[MOCK_MARKER] !== true) {
|
|
331
348
|
throw new Error('ihsm: makeTestPort requires a class decorated with @ihsm.mock');
|
|
332
349
|
}
|
|
333
|
-
|
|
350
|
+
const port = new PortClass();
|
|
351
|
+
installPortStubs(port, PortClass);
|
|
352
|
+
return port;
|
|
334
353
|
}
|
|
335
354
|
/**
|
|
336
355
|
* Creates a **full-access** actor for deterministic tests: merged protocol + typed `port`.
|
|
337
356
|
*
|
|
338
357
|
* 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.
|
|
358
|
+
* but the returned {@link TestActor} exposes the full child protocol (including internal buckets) and
|
|
359
|
+
* grants typed access to `port` for asserting outbound interactions or pushing observations.
|
|
342
360
|
*
|
|
343
361
|
* Unlike {@link makeActor}, `traceLevel` defaults to {@link TraceLevel.VERBOSE_DEBUG} so a failing
|
|
344
362
|
* test is fully readable; opt down explicitly via `options.traceLevel` only when you need a quiet run.
|
|
@@ -360,11 +378,27 @@ export function makeTestPort(PortClass) {
|
|
|
360
378
|
*
|
|
361
379
|
* @category Factory
|
|
362
380
|
*/
|
|
363
|
-
export function makeTestActor(topState, ctx, port, options = {}
|
|
381
|
+
export function makeTestActor(topState, ctx, port, options = {}) {
|
|
382
|
+
const boundPort = (port ?? new TestPort());
|
|
364
383
|
// Tests default to the most verbose trace (so a failing run is fully readable). Never silence to
|
|
365
384
|
// 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
|
-
|
|
385
|
+
const { initialize = defaultInitialize, traceLevel = TraceLevel.VERBOSE_DEBUG, traceWriter = defaultTraceWriter, dispatchErrorCallback = defaultDispatchErrorCallback, ...rest } = options;
|
|
386
|
+
const actor = spawnActor('test', topState, ctx, boundPort, {
|
|
387
|
+
initialize,
|
|
388
|
+
traceLevel,
|
|
389
|
+
traceWriter,
|
|
390
|
+
dispatchErrorCallback,
|
|
391
|
+
...rest,
|
|
392
|
+
});
|
|
393
|
+
const machine = actor[kMachine];
|
|
394
|
+
const testHsm = actor.hsm;
|
|
395
|
+
Object.defineProperties(testHsm, {
|
|
396
|
+
port: { enumerable: true, get: () => boundPort },
|
|
397
|
+
subscribe: {
|
|
398
|
+
enumerable: true,
|
|
399
|
+
value: (observer) => machine.subscribe(observer),
|
|
400
|
+
},
|
|
401
|
+
});
|
|
402
|
+
return actor;
|
|
369
403
|
}
|
|
370
404
|
//# 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":"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"}
|
|
@@ -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, } 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":""}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"contributors": [
|
|
8
8
|
"Roberto Boati"
|
|
9
9
|
],
|
|
10
|
-
"description": "Class-based hierarchical state machines and run-to-completion actors for TypeScript, designed for Deterministic Simulation Testing (DST) —
|
|
10
|
+
"description": "Class-based hierarchical state machines and run-to-completion actors for TypeScript, designed for Deterministic Simulation Testing (DST) — Config, generated handles, promise services, zero dependencies",
|
|
11
11
|
"files": [
|
|
12
12
|
"lib"
|
|
13
13
|
],
|
|
@@ -91,6 +91,26 @@
|
|
|
91
91
|
"default": "./lib/cjs/testing.js"
|
|
92
92
|
}
|
|
93
93
|
},
|
|
94
|
+
"./transition-routines": {
|
|
95
|
+
"import": {
|
|
96
|
+
"types": "./lib/esm/transition-routines.d.ts",
|
|
97
|
+
"default": "./lib/esm/transition-routines.js"
|
|
98
|
+
},
|
|
99
|
+
"require": {
|
|
100
|
+
"types": "./lib/cjs/transition-routines.d.ts",
|
|
101
|
+
"default": "./lib/cjs/transition-routines.js"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"./types": {
|
|
105
|
+
"import": {
|
|
106
|
+
"types": "./lib/esm/types.d.ts",
|
|
107
|
+
"default": "./lib/esm/types.js"
|
|
108
|
+
},
|
|
109
|
+
"require": {
|
|
110
|
+
"types": "./lib/cjs/types.d.ts",
|
|
111
|
+
"default": "./lib/cjs/types.js"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
94
114
|
"./package.json": "./package.json"
|
|
95
115
|
},
|
|
96
116
|
"name": "ihsm",
|
|
@@ -116,8 +136,6 @@
|
|
|
116
136
|
"predist": "npm run clean",
|
|
117
137
|
"prettier": "prettier --write 'src/**/*.ts' 'examples/**/*.ts' 'website/**/*.{ts,tsx}'",
|
|
118
138
|
"release:check": "npm run test:all && npm run lint && npm run build && npm run doc && npm run verify:doc",
|
|
119
|
-
"check:nix-hash": "bash scripts/check-npm-deps-hash.sh",
|
|
120
|
-
"hooks:install": "bash scripts/install-local-hooks.sh",
|
|
121
139
|
"prepublishOnly": "npm run test:all && npm run build",
|
|
122
140
|
"test:node": "TS_NODE_PROJECT=tsconfig.lib.json nyc mocha",
|
|
123
141
|
"test:browser": "node scripts/run-browser-tests.mjs",
|
|
@@ -134,5 +152,5 @@
|
|
|
134
152
|
"pretypecheck": "npm run prepare:ide"
|
|
135
153
|
},
|
|
136
154
|
"types": "./lib/cjs/index.d.ts",
|
|
137
|
-
"version": "0.
|
|
155
|
+
"version": "0.1.1"
|
|
138
156
|
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { PostedEvent, EventPayload, Hsm, StateClass, State } from '../';
|
|
2
|
-
/** @internal */
|
|
3
|
-
export interface Instance<Context, Protocol extends {} | undefined> {
|
|
4
|
-
ctx: Context;
|
|
5
|
-
hsm: HsmWithTracing<Context, Protocol>;
|
|
6
|
-
/**
|
|
7
|
-
* Outbound boundary surfaced as `this.port`. Always set by `instantiate`: the supplied port
|
|
8
|
-
* instance (whose `actor` is bound lazily by the runtime), or a `Port` (which also
|
|
9
|
-
* provides the timer service used by `deferredPost`) when none is supplied.
|
|
10
|
-
*
|
|
11
|
-
* Stored under `portRef` (not `port`) because the instance's prototype is a `TopState`
|
|
12
|
-
* subclass whose `port` accessor would otherwise shadow this slot. Optional on the type only
|
|
13
|
-
* because it is assigned just after the instance literal is created.
|
|
14
|
-
*/
|
|
15
|
-
portRef?: unknown;
|
|
16
|
-
}
|
|
17
|
-
/** @internal */
|
|
18
|
-
export interface Transition<Context, Protocol extends {} | undefined> {
|
|
19
|
-
execute(hsm: HsmWithTracing<Context, Protocol>, srcState: StateClass<Context, Protocol>, dstState: StateClass<Context, Protocol>): Promise<void>;
|
|
20
|
-
}
|
|
21
|
-
/** @internal */
|
|
22
|
-
export type DoneCallback = () => void;
|
|
23
|
-
/** @internal */
|
|
24
|
-
export type Task = (done: DoneCallback) => void;
|
|
25
|
-
/** @internal */
|
|
26
|
-
export interface HsmWithTracing<Context, Protocol extends {} | undefined> extends Hsm<Context, Protocol>, State<Context, Protocol> {
|
|
27
|
-
_transitionCache: Map<string, Transition<Context, Protocol>>;
|
|
28
|
-
_createInitTask: <DispatchContext, DispatchProtocol extends {} | undefined>(hsm: HsmWithTracing<DispatchContext, DispatchProtocol>) => Task;
|
|
29
|
-
_createEventDispatchTask: <DispatchContext, DispatchProtocol extends {} | undefined, EventName extends keyof DispatchProtocol>(hsm: HsmWithTracing<DispatchContext, DispatchProtocol>, eventName: PostedEvent<DispatchProtocol, EventName>, ...eventPayload: EventPayload<DispatchProtocol, EventName>) => Task;
|
|
30
|
-
_instance: Instance<Context, Protocol>;
|
|
31
|
-
_transitionState?: StateClass<Context, Protocol>;
|
|
32
|
-
_currentEventName?: string;
|
|
33
|
-
_currentEventPayload?: any[];
|
|
34
|
-
currentState: StateClass<Context, Protocol>;
|
|
35
|
-
_tracePush(domain: string, msg: string): void;
|
|
36
|
-
_tracePopDone(msg: string): void;
|
|
37
|
-
_tracePopError(msg: string): void;
|
|
38
|
-
_traceWrite(msg: any): void;
|
|
39
|
-
unshiftHiPriorityTask(t: Task): void;
|
|
40
|
-
pushHiPriorityTask(t: Task): void;
|
|
41
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defs.private.js","sourceRoot":"","sources":["../../../src/internal/defs.private.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { PostedEvent, EventPayload } from '../';
|
|
2
|
-
import { HsmWithTracing, Task } from './defs.private';
|
|
3
|
-
export declare function createInitTask<DispatchContext, DispatchProtocol extends {} | undefined>(hsm: HsmWithTracing<DispatchContext, DispatchProtocol>): Task;
|
|
4
|
-
export declare function createEventDispatchTask<DispatchContext, DispatchProtocol extends {} | undefined, EventName extends keyof DispatchProtocol>(hsm: HsmWithTracing<DispatchContext, DispatchProtocol>, eventName: PostedEvent<DispatchProtocol, EventName>, ...eventPayload: EventPayload<DispatchProtocol, EventName>): Task;
|