ihsm 0.0.14 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +330 -5
  2. package/lib/cjs/index.d.ts +934 -0
  3. package/lib/cjs/index.js +493 -0
  4. package/lib/cjs/index.js.map +1 -0
  5. package/lib/cjs/internal/defs.private.d.ts +31 -0
  6. package/lib/cjs/internal/defs.private.js +3 -0
  7. package/lib/cjs/internal/defs.private.js.map +1 -0
  8. package/lib/cjs/internal/dispatch.debug.d.ts +4 -0
  9. package/lib/cjs/internal/dispatch.debug.js +330 -0
  10. package/lib/cjs/internal/dispatch.debug.js.map +1 -0
  11. package/lib/cjs/internal/dispatch.production.d.ts +6 -0
  12. package/lib/cjs/internal/dispatch.production.js +239 -0
  13. package/lib/cjs/internal/dispatch.production.js.map +1 -0
  14. package/lib/cjs/internal/dispatch.trace.d.ts +4 -0
  15. package/lib/cjs/internal/dispatch.trace.js +410 -0
  16. package/lib/cjs/internal/dispatch.trace.js.map +1 -0
  17. package/lib/cjs/internal/hsm.d.ts +54 -0
  18. package/lib/cjs/internal/hsm.js +182 -0
  19. package/lib/cjs/internal/hsm.js.map +1 -0
  20. package/lib/cjs/internal/utils.d.ts +18 -0
  21. package/lib/cjs/internal/utils.js +51 -0
  22. package/lib/cjs/internal/utils.js.map +1 -0
  23. package/lib/cjs/package.json +3 -0
  24. package/lib/esm/index.d.ts +934 -0
  25. package/lib/esm/index.js +476 -0
  26. package/lib/esm/index.js.map +1 -0
  27. package/lib/esm/internal/defs.private.d.ts +31 -0
  28. package/lib/esm/internal/defs.private.js +2 -0
  29. package/lib/esm/internal/defs.private.js.map +1 -0
  30. package/lib/esm/internal/dispatch.debug.d.ts +4 -0
  31. package/lib/esm/internal/dispatch.debug.js +326 -0
  32. package/lib/esm/internal/dispatch.debug.js.map +1 -0
  33. package/lib/esm/internal/dispatch.production.d.ts +6 -0
  34. package/lib/esm/internal/dispatch.production.js +235 -0
  35. package/lib/esm/internal/dispatch.production.js.map +1 -0
  36. package/lib/esm/internal/dispatch.trace.d.ts +4 -0
  37. package/lib/esm/internal/dispatch.trace.js +406 -0
  38. package/lib/esm/internal/dispatch.trace.js.map +1 -0
  39. package/lib/esm/internal/hsm.d.ts +54 -0
  40. package/lib/esm/internal/hsm.js +178 -0
  41. package/lib/esm/internal/hsm.js.map +1 -0
  42. package/lib/esm/internal/utils.d.ts +18 -0
  43. package/lib/esm/internal/utils.js +41 -0
  44. package/lib/esm/internal/utils.js.map +1 -0
  45. package/lib/esm/package.json +3 -0
  46. package/package.json +116 -66
  47. package/lib/index.browser.js +0 -523
  48. package/lib/index.d.ts +0 -104
  49. package/lib/index.js +0 -374
  50. package/tsconfig.json +0 -72
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createInitTask = createInitTask;
4
+ exports.createEventDispatchTask = createEventDispatchTask;
5
+ const __1 = require("../");
6
+ const utils_1 = require("./utils");
7
+ function finishEventDispatch(hsm) {
8
+ hsm._traceWrite(`end event dispatch`);
9
+ hsm._currentEventName = undefined;
10
+ hsm._currentEventPayload = undefined;
11
+ }
12
+ async function completePendingTransitions(hsm, onComplete) {
13
+ await doTransition(hsm);
14
+ onComplete();
15
+ }
16
+ /** @internal */
17
+ class TraceTransition {
18
+ exitList;
19
+ entryList;
20
+ constructor(exitList, entryList) {
21
+ this.exitList = exitList;
22
+ this.entryList = entryList;
23
+ }
24
+ async execute(hsm, srcState, dstState) {
25
+ hsm._tracePush(`transition from ${(0, utils_1.getStateName)(srcState)} to ${(0, utils_1.getStateName)(dstState)}`, `started transition from ${(0, utils_1.getStateName)(srcState)} to ${(0, utils_1.getStateName)(dstState)} `);
26
+ for (const state of this.exitList) {
27
+ const statePrototype = state.prototype;
28
+ const stateName = (0, utils_1.getStateName)(state);
29
+ if (Object.prototype.hasOwnProperty.call(statePrototype, 'onExit')) {
30
+ try {
31
+ const res = statePrototype.onExit.call(hsm._instance);
32
+ if (res) {
33
+ await res;
34
+ }
35
+ hsm._traceWrite(`${stateName}.onExit() done`);
36
+ }
37
+ catch (cause) {
38
+ hsm._tracePopError(`${stateName}.onExit() has thrown ${(0, utils_1.quoteUnknown)(cause)}`);
39
+ throw new __1.TransitionError(hsm, (0, utils_1.asError)(cause), stateName, 'onExit', (0, utils_1.getStateName)(srcState), (0, utils_1.getStateName)(dstState));
40
+ }
41
+ }
42
+ else {
43
+ hsm._traceWrite(`${stateName}.onExit() skipped: default empty implementation`);
44
+ }
45
+ }
46
+ for (const state of this.entryList) {
47
+ const statePrototype = state.prototype;
48
+ const stateName = (0, utils_1.getStateName)(state);
49
+ if (Object.prototype.hasOwnProperty.call(statePrototype, 'onEntry')) {
50
+ try {
51
+ const res = statePrototype.onEntry.call(hsm._instance);
52
+ if (res) {
53
+ await res;
54
+ }
55
+ hsm._traceWrite(`${stateName}.onEntry() done`);
56
+ }
57
+ catch (cause) {
58
+ hsm._tracePopError(`${stateName}.onEntry() has thrown ${(0, utils_1.quoteUnknown)(cause)}`);
59
+ throw new __1.TransitionError(hsm, (0, utils_1.asError)(cause), (0, utils_1.getStateName)(state), 'onEntry', (0, utils_1.getStateName)(srcState), (0, utils_1.getStateName)(dstState));
60
+ }
61
+ }
62
+ else {
63
+ hsm._traceWrite(`${stateName}.onEntry() skipped: default empty implementation`);
64
+ }
65
+ }
66
+ let newState;
67
+ if (this.entryList.length !== 0) {
68
+ newState = this.entryList[this.entryList.length - 1];
69
+ }
70
+ else if (this.exitList.length !== 0) {
71
+ newState = Object.getPrototypeOf(this.exitList[this.exitList.length - 1]);
72
+ }
73
+ else {
74
+ newState = hsm.currentState;
75
+ }
76
+ hsm._tracePopDone(`final state is ${(0, utils_1.getStateName)(newState)}`);
77
+ hsm.currentState = newState;
78
+ }
79
+ }
80
+ /** @internal */
81
+ function createTransition(srcState, destState) {
82
+ const src = srcState;
83
+ let dst = destState;
84
+ let srcPath = [];
85
+ const end = __1.TopState;
86
+ const srcIndex = new Map();
87
+ const dstPath = [];
88
+ let cur = src;
89
+ let i = 0;
90
+ while (cur !== end) {
91
+ srcPath.push(cur);
92
+ srcIndex.set(cur, i);
93
+ cur = Object.getPrototypeOf(cur);
94
+ ++i;
95
+ }
96
+ cur = dst;
97
+ while (cur !== end) {
98
+ const i = srcIndex.get(cur);
99
+ if (i !== undefined) {
100
+ srcPath = srcPath.slice(0, i);
101
+ break;
102
+ }
103
+ dstPath.unshift(cur);
104
+ cur = Object.getPrototypeOf(cur);
105
+ }
106
+ while ((0, utils_1.hasInitialState)(dst)) {
107
+ dst = (0, utils_1.getInitialState)(dst);
108
+ dstPath.push(dst);
109
+ }
110
+ return new TraceTransition(srcPath, dstPath);
111
+ }
112
+ /** @internal */
113
+ async function doTransition(hsm) {
114
+ if (hsm._transitionState) {
115
+ try {
116
+ const srcState = hsm.currentState;
117
+ const destState = hsm._transitionState;
118
+ hsm._traceWrite(`requested transition from ${(0, utils_1.getStateName)(srcState)} to ${(0, utils_1.getStateName)(destState)} `);
119
+ const transitionKey = (0, utils_1.getTransitionKey)(srcState, destState);
120
+ let tr = hsm._transitionCache.get(transitionKey);
121
+ if (tr) {
122
+ hsm._traceWrite(`transition cache hit for ${(0, utils_1.getStateName)(srcState)} to ${(0, utils_1.getStateName)(destState)} `);
123
+ }
124
+ else {
125
+ hsm._traceWrite(`transition cache miss for ${(0, utils_1.getStateName)(srcState)} to ${(0, utils_1.getStateName)(destState)} `);
126
+ tr = createTransition(srcState, destState);
127
+ hsm._transitionCache.set(transitionKey, tr);
128
+ }
129
+ try {
130
+ await tr.execute(hsm, srcState, destState);
131
+ }
132
+ catch (transitionError) {
133
+ hsm.currentState = __1.FatalErrorState;
134
+ throw transitionError;
135
+ }
136
+ }
137
+ finally {
138
+ hsm._transitionState = undefined;
139
+ }
140
+ }
141
+ else {
142
+ hsm._traceWrite('no transition requested');
143
+ }
144
+ }
145
+ /** @internal */
146
+ function lookupErrorHandler(hsm) {
147
+ hsm._tracePush(`lookup`, `started lookup of #onError event handler`);
148
+ let state = hsm.currentState;
149
+ while (state != __1.TopState) {
150
+ const prototype = state.prototype;
151
+ if (Object.prototype.hasOwnProperty.call(prototype, 'onError')) {
152
+ hsm._tracePopDone(`found in state ${(0, utils_1.getStateName)(state)}`);
153
+ return prototype['onError'];
154
+ }
155
+ else {
156
+ hsm._traceWrite(`not found in state ${(0, utils_1.getStateName)(state)}`);
157
+ state = Object.getPrototypeOf(state);
158
+ }
159
+ }
160
+ hsm._tracePopDone(`found in state ${(0, utils_1.getStateName)(__1.TopState)}`);
161
+ return __1.TopState.prototype.onError;
162
+ }
163
+ /** @internal */
164
+ async function doError(hsm, err, onComplete) {
165
+ hsm._transitionState = undefined;
166
+ hsm._tracePush(`error recovery`, `started error recovery`);
167
+ const messageHandler = lookupErrorHandler(hsm);
168
+ try {
169
+ hsm._tracePush('execute', 'started #onError handler execution');
170
+ const result = messageHandler.call(hsm._instance, new __1.EventHandlerError(hsm, err));
171
+ if (result) {
172
+ await result;
173
+ }
174
+ hsm._tracePopDone('error handler execution successful');
175
+ await completePendingTransitions(hsm, () => {
176
+ hsm._tracePopDone('error recovery successful');
177
+ onComplete();
178
+ });
179
+ }
180
+ catch (recoveryErr) {
181
+ hsm._tracePopError(`error handler execution failure: ${(0, utils_1.quoteUnknown)(recoveryErr)}`);
182
+ if (recoveryErr instanceof __1.TransitionError) {
183
+ hsm._tracePopError(`error recovery failure: ${(0, utils_1.quoteUnknown)(recoveryErr)}`);
184
+ throw recoveryErr;
185
+ }
186
+ const err = (0, utils_1.asError)(recoveryErr);
187
+ hsm.transition(__1.FatalErrorState);
188
+ await completePendingTransitions(hsm, () => {
189
+ hsm._tracePopError(`error recovery failure: ${(0, utils_1.quoteUnknown)(err)}`);
190
+ onComplete();
191
+ });
192
+ throw new __1.FatalError(hsm, err);
193
+ }
194
+ }
195
+ /** @internal */
196
+ function lookupUnhandled(hsm) {
197
+ let state = hsm.currentState;
198
+ hsm._tracePush(`lookup`, `started lookup of #onUnhandled event handler`);
199
+ while (true) {
200
+ const prototype = state.prototype;
201
+ if (Object.prototype.hasOwnProperty.call(prototype, 'onUnhandled')) {
202
+ hsm._tracePopDone(`found in state ${(0, utils_1.getStateName)(state)}`);
203
+ return prototype.onUnhandled;
204
+ }
205
+ else {
206
+ hsm._traceWrite(`not found in state ${(0, utils_1.getStateName)(state)}`);
207
+ state = Object.getPrototypeOf(state);
208
+ if (state == __1.TopState) {
209
+ hsm._tracePopDone(`found in state ${(0, utils_1.getStateName)(state)}`);
210
+ return prototype.onUnhandled;
211
+ }
212
+ }
213
+ }
214
+ }
215
+ /** @internal */
216
+ async function doUnhandledEvent(hsm, error, onComplete) {
217
+ hsm._tracePush('unhandled recovery', `started unhandled event recovery`);
218
+ const messageHandler = lookupUnhandled(hsm);
219
+ try {
220
+ hsm._tracePush('execute', 'started #onUnhandled handler execution');
221
+ const result = messageHandler.call(hsm._instance, error);
222
+ if (result) {
223
+ await result;
224
+ }
225
+ hsm._tracePopDone('unhandled handler execution successful');
226
+ await completePendingTransitions(hsm, () => {
227
+ hsm._tracePopDone('unhandled event recovery successful');
228
+ onComplete();
229
+ });
230
+ }
231
+ catch (recoveryErr) {
232
+ hsm._tracePopError(`unhandled event recovery failure: ${(0, utils_1.quoteUnknown)(recoveryErr)}`);
233
+ if (recoveryErr instanceof __1.TransitionError) {
234
+ hsm.currentState = __1.FatalErrorState;
235
+ hsm._tracePopError(`unhandled event recovery failure: ${(0, utils_1.quoteUnknown)(recoveryErr)}`);
236
+ throw recoveryErr;
237
+ }
238
+ try {
239
+ await doError(hsm, (0, utils_1.asError)(recoveryErr), () => {
240
+ hsm._tracePopDone('unhandled event recovery successful');
241
+ onComplete();
242
+ });
243
+ }
244
+ catch (nestedErr) {
245
+ hsm._tracePopError(`unhandled event recovery failure: ${(0, utils_1.quoteUnknown)(nestedErr)}`);
246
+ throw nestedErr;
247
+ }
248
+ }
249
+ }
250
+ /** @internal */
251
+ function lookupEventHandler(hsm, eventName) {
252
+ const eventLabel = String(eventName);
253
+ let state = hsm.currentState;
254
+ hsm._tracePush(`lookup`, `started lookup of #${eventLabel} event handler`);
255
+ while (true) {
256
+ const prototype = state.prototype;
257
+ if (Object.prototype.hasOwnProperty.call(prototype, eventName)) {
258
+ hsm._tracePopDone(`#${eventLabel} found in state ${(0, utils_1.getStateName)(state)}`);
259
+ return prototype[eventName];
260
+ }
261
+ else {
262
+ hsm._traceWrite(`not found in state ${(0, utils_1.getStateName)(state)}`);
263
+ if (state == __1.TopState)
264
+ break;
265
+ state = Object.getPrototypeOf(state);
266
+ }
267
+ }
268
+ hsm._tracePopError(`not found in state ${hsm.currentStateName}`);
269
+ return undefined;
270
+ }
271
+ /** @internal */
272
+ async function executeInit(hsm) {
273
+ hsm._traceWrite('begin initialization');
274
+ try {
275
+ let currState = hsm.topState;
276
+ hsm._tracePush(`initialize`, `started initialization from ${(0, utils_1.getStateName)(hsm.topState)}`);
277
+ try {
278
+ while (true) {
279
+ if (Object.prototype.hasOwnProperty.call(currState.prototype, 'onEntry')) {
280
+ currState.prototype['onEntry'].call(hsm._instance);
281
+ hsm._traceWrite(`${(0, utils_1.getStateName)(currState)}.onEntry() done`);
282
+ }
283
+ else {
284
+ hsm._traceWrite(`skip ${(0, utils_1.getStateName)(currState)}.onEntry(): default empty implementation`);
285
+ }
286
+ if ((0, utils_1.hasInitialState)(currState)) {
287
+ const newInitialState = (0, utils_1.getInitialState)(currState);
288
+ hsm._traceWrite(`${(0, utils_1.getStateName)(currState)} initial state is ${(0, utils_1.getStateName)(newInitialState)}`);
289
+ currState = newInitialState;
290
+ }
291
+ else {
292
+ hsm._traceWrite(`${(0, utils_1.getStateName)(currState)} has no initial state; final state is ${(0, utils_1.getStateName)(currState)}`);
293
+ break;
294
+ }
295
+ }
296
+ hsm._tracePopDone(`final state is ${(0, utils_1.getStateName)(currState)}`);
297
+ hsm.currentState = currState;
298
+ }
299
+ catch (cause) {
300
+ if (cause instanceof __1.TransitionError) {
301
+ throw cause;
302
+ }
303
+ hsm._tracePopError(`initialization failed from top state '${(0, utils_1.getStateName)(hsm.topState)}' as ${(0, utils_1.getStateName)(currState)}.onEntry() handler has raised ${(0, utils_1.quoteUnknown)(cause)}; final state is ${(0, utils_1.getStateName)(__1.FatalErrorState)}`);
304
+ hsm.currentState = __1.FatalErrorState;
305
+ throw new __1.InitializationError(hsm, currState, (0, utils_1.asError)(cause));
306
+ }
307
+ }
308
+ finally {
309
+ hsm._traceWrite('end initialization');
310
+ }
311
+ }
312
+ /** @internal */
313
+ async function dispatchEvent(hsm, eventName, ...eventPayload) {
314
+ const eventLabel = String(eventName);
315
+ hsm._traceWrite(`begin event dispatch of #${eventLabel}`);
316
+ hsm._tracePush(`#${eventLabel}`, `started event dispatch`);
317
+ hsm._currentEventName = eventLabel;
318
+ hsm._currentEventPayload = eventPayload;
319
+ try {
320
+ const eventHandler = lookupEventHandler(hsm, eventName);
321
+ if (!eventHandler) {
322
+ hsm._traceWrite(`event #${eventLabel} is unhandled in state ${hsm.currentStateName}`);
323
+ try {
324
+ await doUnhandledEvent(hsm, new __1.UnhandledEventError(hsm), () => {
325
+ hsm._tracePopDone('event dispatch successful');
326
+ finishEventDispatch(hsm);
327
+ });
328
+ return;
329
+ }
330
+ catch (recoveryErr) {
331
+ hsm._tracePopError(`event dispatch failed: ${(0, utils_1.quoteUnknown)(recoveryErr)}`);
332
+ finishEventDispatch(hsm);
333
+ throw recoveryErr;
334
+ }
335
+ }
336
+ try {
337
+ hsm._tracePush('execute', 'started event handler execution');
338
+ const result = eventHandler.call(hsm._instance, ...eventPayload);
339
+ if (result) {
340
+ await result;
341
+ }
342
+ hsm._tracePopDone('event handler execution successful');
343
+ await completePendingTransitions(hsm, () => {
344
+ hsm._tracePopDone(`event dispatch successful`);
345
+ finishEventDispatch(hsm);
346
+ });
347
+ }
348
+ catch (recoveryErr) {
349
+ hsm._tracePopError((0, utils_1.quoteUnknown)(recoveryErr));
350
+ if (recoveryErr instanceof __1.UnhandledEventError) {
351
+ hsm._traceWrite(`event #${eventLabel} is unhandled in state ${hsm.currentStateName}`);
352
+ try {
353
+ await doUnhandledEvent(hsm, recoveryErr, () => {
354
+ hsm._tracePopDone('event dispatch successful');
355
+ finishEventDispatch(hsm);
356
+ });
357
+ return;
358
+ }
359
+ catch (nestedErr) {
360
+ hsm._tracePopError(`event dispatch failed: ${(0, utils_1.quoteUnknown)(nestedErr)}`);
361
+ finishEventDispatch(hsm);
362
+ throw nestedErr;
363
+ }
364
+ }
365
+ else if (recoveryErr instanceof __1.TransitionError) {
366
+ hsm._tracePopError(`event dispatch failed: ${(0, utils_1.quoteUnknown)(recoveryErr)}`);
367
+ finishEventDispatch(hsm);
368
+ throw recoveryErr;
369
+ }
370
+ else {
371
+ try {
372
+ await doError(hsm, (0, utils_1.asError)(recoveryErr), () => {
373
+ hsm._tracePopDone('event dispatch successful');
374
+ finishEventDispatch(hsm);
375
+ });
376
+ }
377
+ catch (nestedErr) {
378
+ hsm._tracePopError(`event dispatch failed: ${(0, utils_1.quoteUnknown)(nestedErr)}`);
379
+ finishEventDispatch(hsm);
380
+ throw nestedErr;
381
+ }
382
+ }
383
+ }
384
+ }
385
+ catch (err) {
386
+ finishEventDispatch(hsm);
387
+ throw err;
388
+ }
389
+ }
390
+ function createInitTask(hsm) {
391
+ return (done) => {
392
+ executeInit(hsm)
393
+ .then(async () => {
394
+ await doTransition(hsm);
395
+ done();
396
+ })
397
+ .catch((err) => {
398
+ hsm.dispatchErrorCallback(hsm, (0, utils_1.asError)(err));
399
+ done();
400
+ });
401
+ };
402
+ }
403
+ function createEventDispatchTask(hsm, eventName, ...eventPayload) {
404
+ return (done) => {
405
+ dispatchEvent(hsm, eventName, ...eventPayload)
406
+ .catch((err) => hsm.dispatchErrorCallback(hsm, (0, utils_1.asError)(err)))
407
+ .finally(() => done());
408
+ };
409
+ }
410
+ //# sourceMappingURL=dispatch.trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.trace.js","sourceRoot":"","sources":["../../../src/internal/dispatch.trace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { DispatchErrorCallback, PostedEvent, EventPayload, ServiceResponse, ServiceName, ServiceRequest, StateClass, TraceLevel, TraceWriter } from '../';
2
+ import { HsmWithTracing, Instance, Task, Transition } from './defs.private';
3
+ /** @internal */
4
+ export declare class HsmObject<Context, Protocol extends {} | undefined> implements HsmWithTracing<Context, Protocol> {
5
+ topState: StateClass<Context, Protocol>;
6
+ topStateName: string;
7
+ readonly ctxTypeName: string;
8
+ traceWriter: TraceWriter;
9
+ _instance: Instance<Context, Protocol>;
10
+ _transitionCache: Map<string, Transition<Context, Protocol>>;
11
+ _jobs: Task[];
12
+ _hiPriorityJobs: Task[];
13
+ private _isRunning;
14
+ _transitionState?: StateClass<Context, Protocol>;
15
+ _currentEventName?: string;
16
+ _currentEventPayload?: any[];
17
+ dispatchErrorCallback: DispatchErrorCallback<Context, Protocol>;
18
+ private _traceLevel;
19
+ private _traceDomainStack;
20
+ _createInitTask: <DispatchContext, DispatchProtocol extends {} | undefined>(hsm: HsmWithTracing<DispatchContext, DispatchProtocol>) => Task;
21
+ _createEventDispatchTask: <DispatchContext, DispatchProtocol extends {} | undefined, EventName extends keyof DispatchProtocol>(hsm: HsmWithTracing<DispatchContext, DispatchProtocol>, eventName: PostedEvent<DispatchProtocol, EventName>, ...eventPayload: EventPayload<DispatchProtocol, EventName>) => Task;
22
+ constructor(TopState: StateClass<Context, Protocol>, instance: Instance<Context, Protocol>, traceWriter: TraceWriter, traceLevel: TraceLevel, dispatchErrorCallback: DispatchErrorCallback<Context, Protocol>, initialize: boolean);
23
+ get ctx(): Context;
24
+ set ctx(ctx: Context);
25
+ get eventName(): string;
26
+ get eventPayload(): any[];
27
+ get currentStateName(): string;
28
+ get currentState(): StateClass<Context, Protocol>;
29
+ set currentState(newState: StateClass<Context, Protocol>);
30
+ post<EventName extends keyof Protocol>(eventName: PostedEvent<Protocol, EventName>, ...eventPayload: EventPayload<Protocol, EventName>): void;
31
+ postNow<EventName extends keyof Protocol>(eventName: PostedEvent<Protocol, EventName>, ...eventPayload: EventPayload<Protocol, EventName>): void;
32
+ deferredPost<EventName extends keyof Protocol>(millis: number, eventName: PostedEvent<Protocol, EventName>, ...eventPayload: EventPayload<Protocol, EventName>): void;
33
+ transition(nextState: StateClass<Context, Protocol>): void;
34
+ unhandled(): never;
35
+ sleep(millis: number): Promise<void>;
36
+ get traceLevel(): TraceLevel;
37
+ set traceLevel(traceLevel: TraceLevel);
38
+ sync(): Promise<void>;
39
+ pushTask(t: (done: () => void) => void): void;
40
+ pushHiPriorityTask(t: (done: () => void) => void): void;
41
+ unshiftHiPriorityTask(t: (done: () => void) => void): void;
42
+ private enqueueTask;
43
+ restore(state: StateClass<Context, Protocol>, ctx: Context): void;
44
+ private dequeue;
45
+ private exec;
46
+ private runTask;
47
+ private drainHiPriority;
48
+ _tracePush(d: string, msg: string): void;
49
+ _tracePopDone(msg: string): void;
50
+ _tracePopError(msg: string): void;
51
+ _traceWrite(msg: any): void;
52
+ get traceHeader(): string;
53
+ call<EventName extends keyof Protocol>(eventName: ServiceName<Protocol, EventName>, ...eventPayload: ServiceRequest<Protocol, EventName>): Promise<ServiceResponse<Protocol, EventName>>;
54
+ }
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HsmObject = void 0;
4
+ const __1 = require("../");
5
+ const dispatch_trace_1 = require("./dispatch.trace");
6
+ const dispatch_debug_1 = require("./dispatch.debug");
7
+ const dispatch_production_1 = require("./dispatch.production");
8
+ const utils_1 = require("./utils");
9
+ function mapInitTaskFactory(traceLevel) {
10
+ switch (traceLevel) {
11
+ case __1.TraceLevel.PRODUCTION:
12
+ return dispatch_production_1.createInitTask;
13
+ case __1.TraceLevel.DEBUG:
14
+ return dispatch_debug_1.createInitTask;
15
+ case __1.TraceLevel.VERBOSE_DEBUG:
16
+ return dispatch_trace_1.createInitTask;
17
+ }
18
+ }
19
+ function mapEventDispatchTaskFactory(traceLevel) {
20
+ switch (traceLevel) {
21
+ case __1.TraceLevel.PRODUCTION:
22
+ return dispatch_production_1.createEventDispatchTask;
23
+ case __1.TraceLevel.DEBUG:
24
+ return dispatch_debug_1.createEventDispatchTask;
25
+ case __1.TraceLevel.VERBOSE_DEBUG:
26
+ return dispatch_trace_1.createEventDispatchTask;
27
+ }
28
+ }
29
+ /** @internal */
30
+ // prettier-ignore
31
+ class HsmObject {
32
+ topState;
33
+ topStateName;
34
+ ctxTypeName;
35
+ traceWriter;
36
+ _instance;
37
+ _transitionCache = new Map();
38
+ _jobs;
39
+ _hiPriorityJobs;
40
+ _isRunning = false;
41
+ _transitionState;
42
+ _currentEventName;
43
+ _currentEventPayload;
44
+ dispatchErrorCallback;
45
+ _traceLevel;
46
+ _traceDomainStack;
47
+ _createInitTask;
48
+ _createEventDispatchTask;
49
+ constructor(TopState, instance, traceWriter, traceLevel, dispatchErrorCallback, initialize) {
50
+ this._instance = instance;
51
+ this._transitionState = undefined;
52
+ this._transitionCache = new Map();
53
+ this._traceLevel = traceLevel;
54
+ this._currentEventName = undefined;
55
+ this._currentEventPayload = undefined;
56
+ this._traceDomainStack = [];
57
+ this._createInitTask = mapInitTaskFactory(traceLevel);
58
+ this._createEventDispatchTask = mapEventDispatchTaskFactory(traceLevel);
59
+ this._jobs = [];
60
+ this._hiPriorityJobs = [];
61
+ this._isRunning = false;
62
+ this.topState = TopState;
63
+ this.topStateName = (0, utils_1.getStateName)(TopState);
64
+ this.ctxTypeName = Object.getPrototypeOf(instance.ctx).constructor.name;
65
+ this.currentState = TopState;
66
+ this.traceWriter = traceWriter;
67
+ this.dispatchErrorCallback = dispatchErrorCallback;
68
+ if (initialize) {
69
+ this.pushTask(this._createInitTask(this));
70
+ }
71
+ }
72
+ get ctx() {
73
+ return this._instance.ctx;
74
+ }
75
+ set ctx(ctx) {
76
+ this._instance.ctx = ctx;
77
+ }
78
+ get eventName() { return this._currentEventName; }
79
+ get eventPayload() { return this._currentEventPayload; }
80
+ get currentStateName() { return (0, utils_1.getStateName)(Object.getPrototypeOf(this._instance).constructor); }
81
+ get currentState() { return Object.getPrototypeOf(this._instance).constructor; }
82
+ set currentState(newState) { Object.setPrototypeOf(this._instance, newState.prototype); }
83
+ post(eventName, ...eventPayload) { this.pushTask(this._createEventDispatchTask(this, eventName, ...eventPayload)); }
84
+ postNow(eventName, ...eventPayload) { this.pushHiPriorityTask(this._createEventDispatchTask(this, eventName, ...eventPayload)); }
85
+ deferredPost(millis, eventName, ...eventPayload) {
86
+ setTimeout(() => this.pushTask(this._createEventDispatchTask(this, eventName, ...eventPayload)), millis);
87
+ }
88
+ transition(nextState) { this._transitionState = nextState; }
89
+ unhandled() { throw new __1.UnhandledEventError(this); }
90
+ sleep(millis) { return new Promise(resolve => setTimeout(() => resolve(), millis)); }
91
+ get traceLevel() {
92
+ return this._traceLevel;
93
+ }
94
+ set traceLevel(traceLevel) {
95
+ this._createInitTask = mapInitTaskFactory(traceLevel);
96
+ this._createEventDispatchTask = mapEventDispatchTaskFactory(traceLevel);
97
+ this._traceLevel = traceLevel;
98
+ }
99
+ sync() {
100
+ return new Promise(resolve => {
101
+ this.pushTask((doneCallback) => {
102
+ resolve();
103
+ doneCallback();
104
+ });
105
+ });
106
+ }
107
+ pushTask(t) {
108
+ this.enqueueTask(t, this._jobs);
109
+ }
110
+ pushHiPriorityTask(t) {
111
+ this.enqueueTask(t, this._hiPriorityJobs);
112
+ }
113
+ unshiftHiPriorityTask(t) {
114
+ this._hiPriorityJobs.unshift(t);
115
+ if (this._isRunning)
116
+ return;
117
+ this._isRunning = true;
118
+ this.dequeue();
119
+ }
120
+ enqueueTask(t, queue) {
121
+ queue.push(t);
122
+ if (this._isRunning)
123
+ return;
124
+ this._isRunning = true;
125
+ this.dequeue();
126
+ }
127
+ restore(state, ctx) {
128
+ this.currentState = state;
129
+ this.ctx = ctx;
130
+ }
131
+ dequeue() {
132
+ if (this._hiPriorityJobs.length == 0 && this._jobs.length == 0) {
133
+ this._isRunning = false;
134
+ return;
135
+ }
136
+ const task = this._hiPriorityJobs.length > 0 ? this._hiPriorityJobs.shift() : this._jobs.shift();
137
+ this.exec(task);
138
+ }
139
+ exec(task) {
140
+ setTimeout(() => this.runTask(task).then(() => this.dequeue()), 0);
141
+ }
142
+ runTask(task) {
143
+ return new Promise(resolve => {
144
+ task(() => {
145
+ this.drainHiPriority().then(resolve);
146
+ });
147
+ });
148
+ }
149
+ drainHiPriority() {
150
+ if (this._hiPriorityJobs.length === 0) {
151
+ return Promise.resolve();
152
+ }
153
+ const task = this._hiPriorityJobs.shift();
154
+ return this.runTask(task).then(() => this.drainHiPriority());
155
+ }
156
+ _tracePush(d, msg) {
157
+ this._traceDomainStack.push(d);
158
+ this.traceWriter.write(this, msg);
159
+ }
160
+ _tracePopDone(msg) {
161
+ this.traceWriter.write(this, `done: ${msg}`);
162
+ this._traceDomainStack.pop();
163
+ }
164
+ _tracePopError(msg) {
165
+ this.traceWriter.write(this, `failure: ${msg}`);
166
+ this._traceDomainStack.pop();
167
+ }
168
+ _traceWrite(msg) {
169
+ this.traceWriter.write(this, msg);
170
+ }
171
+ get traceHeader() {
172
+ return `${this._traceDomainStack.length === 0 ? '' : this._traceDomainStack.join('|') + '|'}`;
173
+ }
174
+ call(eventName, ...eventPayload) {
175
+ return new Promise((resolve, reject) => {
176
+ const taskFactory = this._createEventDispatchTask;
177
+ this.pushTask(taskFactory(this, eventName, ...[resolve, reject, ...eventPayload]));
178
+ });
179
+ }
180
+ }
181
+ exports.HsmObject = HsmObject;
182
+ //# sourceMappingURL=hsm.js.map