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,326 @@
1
+ import { TopState, EventHandlerError, FatalError, FatalErrorState, InitializationError, TransitionError, UnhandledEventError } from '../index.js';
2
+ import { asError, getInitialState, getTransitionKey, hasInitialState, quoteUnknown, getStateName } from './utils.js';
3
+ function finishEventDispatch(hsm) {
4
+ hsm._traceWrite(`end event dispatch`);
5
+ hsm._currentEventName = undefined;
6
+ hsm._currentEventPayload = undefined;
7
+ }
8
+ async function completePendingTransitions(hsm, onComplete) {
9
+ await doTransition(hsm);
10
+ onComplete();
11
+ }
12
+ /** @internal */
13
+ class DebugTransition {
14
+ exitList;
15
+ entryList;
16
+ finalState;
17
+ constructor(exitList, entryList, finalState) {
18
+ this.exitList = exitList;
19
+ this.entryList = entryList;
20
+ this.finalState = finalState;
21
+ }
22
+ async execute(hsm, srcState, dstState) {
23
+ hsm._tracePush(`transition from ${getStateName(srcState)} to ${getStateName(dstState)}`, `started transition from ${getStateName(srcState)} to ${getStateName(dstState)} `);
24
+ for (const state of this.exitList) {
25
+ const statePrototype = state.prototype;
26
+ const stateName = getStateName(state);
27
+ if (Object.prototype.hasOwnProperty.call(statePrototype, 'onExit')) {
28
+ try {
29
+ const res = statePrototype.onExit.call(hsm._instance);
30
+ if (res) {
31
+ await res;
32
+ }
33
+ }
34
+ catch (cause) {
35
+ hsm._tracePopError(`${stateName}.onExit() has thrown ${quoteUnknown(cause)}`);
36
+ throw new TransitionError(hsm, asError(cause), stateName, 'onExit', getStateName(srcState), getStateName(dstState));
37
+ }
38
+ }
39
+ }
40
+ for (const state of this.entryList) {
41
+ const statePrototype = state.prototype;
42
+ const stateName = getStateName(state);
43
+ if (Object.prototype.hasOwnProperty.call(statePrototype, 'onEntry')) {
44
+ try {
45
+ const res = statePrototype.onEntry.call(hsm._instance);
46
+ if (res) {
47
+ await res;
48
+ }
49
+ }
50
+ catch (cause) {
51
+ hsm._tracePopError(`${stateName}.onEntry() has thrown ${quoteUnknown(cause)}`);
52
+ throw new TransitionError(hsm, asError(cause), stateName, 'onEntry', getStateName(srcState), getStateName(dstState));
53
+ }
54
+ }
55
+ }
56
+ if (this.finalState) {
57
+ hsm._tracePopDone(`final state is ${getStateName(this.finalState)}`);
58
+ hsm.currentState = this.finalState;
59
+ }
60
+ }
61
+ }
62
+ /** @internal */
63
+ function createTransition(srcState, destState) {
64
+ const src = srcState;
65
+ let dst = destState;
66
+ let srcPath = [];
67
+ const end = TopState;
68
+ const srcIndex = new Map();
69
+ let dstPath = [];
70
+ let cur = src;
71
+ let i = 0;
72
+ while (cur !== end) {
73
+ srcPath.push(cur);
74
+ srcIndex.set(cur, i);
75
+ cur = Object.getPrototypeOf(cur);
76
+ ++i;
77
+ }
78
+ cur = dst;
79
+ while (cur !== end) {
80
+ const i = srcIndex.get(cur);
81
+ if (i !== undefined) {
82
+ srcPath = srcPath.slice(0, i);
83
+ break;
84
+ }
85
+ dstPath.unshift(cur);
86
+ cur = Object.getPrototypeOf(cur);
87
+ }
88
+ while (hasInitialState(dst)) {
89
+ dst = getInitialState(dst);
90
+ dstPath.push(dst);
91
+ }
92
+ let finalState;
93
+ if (dstPath.length !== 0) {
94
+ finalState = dstPath[dstPath.length - 1];
95
+ }
96
+ else if (srcPath.length !== 0) {
97
+ finalState = Object.getPrototypeOf(srcPath[srcPath.length - 1]);
98
+ }
99
+ else {
100
+ finalState = undefined;
101
+ }
102
+ srcPath = srcPath.filter(value => !value.hasOwnProperty('onExit'));
103
+ dstPath = dstPath.filter(value => !value.hasOwnProperty('onEntry'));
104
+ return new DebugTransition(srcPath, dstPath, finalState);
105
+ }
106
+ /** @internal */
107
+ async function doTransition(hsm) {
108
+ if (hsm._transitionState) {
109
+ try {
110
+ const srcState = hsm.currentState;
111
+ const destState = hsm._transitionState;
112
+ const transitionKey = getTransitionKey(srcState, destState);
113
+ let tr = hsm._transitionCache.get(transitionKey);
114
+ if (!tr) {
115
+ tr = createTransition(srcState, destState);
116
+ hsm._transitionCache.set(transitionKey, tr);
117
+ }
118
+ try {
119
+ await tr.execute(hsm, srcState, destState);
120
+ }
121
+ catch (transitionError) {
122
+ hsm.currentState = FatalErrorState;
123
+ throw transitionError;
124
+ }
125
+ }
126
+ finally {
127
+ hsm._transitionState = undefined;
128
+ }
129
+ }
130
+ }
131
+ /** @internal */
132
+ async function doError(hsm, err, onComplete) {
133
+ hsm._transitionState = undefined;
134
+ hsm._tracePush(`error recovery`, `started error recovery`);
135
+ try {
136
+ hsm._tracePush('execute', 'started #onError handler execution');
137
+ const result = hsm.currentState.prototype.onError.call(hsm._instance, new EventHandlerError(hsm, err));
138
+ if (result) {
139
+ await result;
140
+ }
141
+ hsm._tracePopDone('error handler execution successful');
142
+ await completePendingTransitions(hsm, () => {
143
+ hsm._tracePopDone('error recovery successful');
144
+ onComplete();
145
+ });
146
+ }
147
+ catch (recoveryErr) {
148
+ hsm._tracePopError(`error handler execution failure: ${quoteUnknown(recoveryErr)}`);
149
+ if (recoveryErr instanceof TransitionError) {
150
+ hsm._tracePopError(`error recovery failure: ${quoteUnknown(recoveryErr)}`);
151
+ throw new FatalError(hsm, recoveryErr);
152
+ }
153
+ const err = asError(recoveryErr);
154
+ hsm.transition(FatalErrorState);
155
+ await completePendingTransitions(hsm, () => {
156
+ hsm._tracePopError(`error recovery failure: ${quoteUnknown(err)}`);
157
+ onComplete();
158
+ });
159
+ throw new FatalError(hsm, err);
160
+ }
161
+ }
162
+ /** @internal */
163
+ async function doUnhandledEvent(hsm, error, onComplete) {
164
+ hsm._tracePush('unhandled recovery', `started unhandled event recovery`);
165
+ try {
166
+ hsm._tracePush('execute', 'started #onUnhandled handler execution');
167
+ const result = hsm.currentState.prototype.onUnhandled.call(hsm._instance, error);
168
+ if (result) {
169
+ await result;
170
+ }
171
+ hsm._tracePopDone('unhandled handler execution successful');
172
+ await completePendingTransitions(hsm, () => {
173
+ hsm._tracePopDone('unhandled event recovery successful');
174
+ onComplete();
175
+ });
176
+ }
177
+ catch (recoveryErr) {
178
+ hsm._tracePopError(`unhandled event recovery failure: ${quoteUnknown(recoveryErr)}`);
179
+ if (recoveryErr instanceof TransitionError) {
180
+ hsm.currentState = FatalErrorState;
181
+ hsm._tracePopError(`unhandled event recovery failure: ${quoteUnknown(recoveryErr)}`);
182
+ throw recoveryErr;
183
+ }
184
+ try {
185
+ await doError(hsm, asError(recoveryErr), () => {
186
+ hsm._tracePopDone('unhandled event recovery successful');
187
+ onComplete();
188
+ });
189
+ }
190
+ catch (nestedErr) {
191
+ hsm._tracePopError(`unhandled event recovery failure: ${quoteUnknown(nestedErr)}`);
192
+ throw nestedErr;
193
+ }
194
+ }
195
+ }
196
+ /** @internal */
197
+ async function executeInit(hsm) {
198
+ hsm._traceWrite('begin initialization');
199
+ try {
200
+ let currState = hsm.topState;
201
+ hsm._tracePush(`initialize`, `started initialization from ${getStateName(hsm.topState)}`);
202
+ try {
203
+ while (true) {
204
+ if (Object.prototype.hasOwnProperty.call(currState.prototype, 'onEntry')) {
205
+ currState.prototype['onEntry'].call(hsm._instance);
206
+ }
207
+ if (hasInitialState(currState)) {
208
+ currState = getInitialState(currState);
209
+ }
210
+ else {
211
+ break;
212
+ }
213
+ }
214
+ hsm._tracePopDone(`final state is ${getStateName(currState)}`);
215
+ hsm.currentState = currState;
216
+ }
217
+ catch (cause) {
218
+ if (cause instanceof TransitionError) {
219
+ throw cause;
220
+ }
221
+ hsm._tracePopError(`initialization failed from top state '${getStateName(hsm.topState)}' as ${getStateName(currState)}.onEntry() handler has raised ${quoteUnknown(cause)}; final state is ${getStateName(FatalErrorState)}`);
222
+ hsm.currentState = FatalErrorState;
223
+ throw new InitializationError(hsm, currState, asError(cause));
224
+ }
225
+ }
226
+ finally {
227
+ hsm._traceWrite('end initialization');
228
+ }
229
+ }
230
+ /** @internal */
231
+ async function dispatchEvent(hsm, eventName, ...eventPayload) {
232
+ const eventLabel = String(eventName);
233
+ hsm._traceWrite(`begin event dispatch of #${eventLabel}`);
234
+ hsm._tracePush(`#${eventLabel}`, `started event dispatch`);
235
+ hsm._currentEventName = eventLabel;
236
+ hsm._currentEventPayload = eventPayload;
237
+ try {
238
+ const eventHandler = hsm.currentState.prototype[eventName];
239
+ if (!eventHandler) {
240
+ try {
241
+ await doUnhandledEvent(hsm, new UnhandledEventError(hsm), () => {
242
+ hsm._tracePopDone('event dispatch successful');
243
+ finishEventDispatch(hsm);
244
+ });
245
+ return;
246
+ }
247
+ catch (recoveryErr) {
248
+ hsm._tracePopError(`event dispatch failed: ${quoteUnknown(recoveryErr)}`);
249
+ finishEventDispatch(hsm);
250
+ throw recoveryErr;
251
+ }
252
+ }
253
+ try {
254
+ hsm._tracePush('execute', 'started event handler execution');
255
+ const result = eventHandler.call(hsm._instance, ...eventPayload);
256
+ if (result) {
257
+ await result;
258
+ }
259
+ hsm._tracePopDone('event handler execution successful');
260
+ await completePendingTransitions(hsm, () => {
261
+ hsm._tracePopDone(`event dispatch successful`);
262
+ finishEventDispatch(hsm);
263
+ });
264
+ }
265
+ catch (recoveryErr) {
266
+ hsm._tracePopError(quoteUnknown(recoveryErr));
267
+ if (recoveryErr instanceof UnhandledEventError) {
268
+ try {
269
+ await doUnhandledEvent(hsm, recoveryErr, () => {
270
+ hsm._tracePopDone('event dispatch successful');
271
+ finishEventDispatch(hsm);
272
+ });
273
+ return;
274
+ }
275
+ catch (nestedErr) {
276
+ hsm._tracePopError(`event dispatch failed: ${quoteUnknown(nestedErr)}`);
277
+ finishEventDispatch(hsm);
278
+ throw nestedErr;
279
+ }
280
+ }
281
+ else if (recoveryErr instanceof TransitionError) {
282
+ hsm._tracePopError(`event dispatch failed: ${quoteUnknown(recoveryErr)}`);
283
+ finishEventDispatch(hsm);
284
+ throw recoveryErr;
285
+ }
286
+ else {
287
+ try {
288
+ await doError(hsm, asError(recoveryErr), () => {
289
+ hsm._tracePopDone('event dispatch successful');
290
+ finishEventDispatch(hsm);
291
+ });
292
+ }
293
+ catch (nestedErr) {
294
+ hsm._tracePopError(`event dispatch failed: ${quoteUnknown(nestedErr)}`);
295
+ finishEventDispatch(hsm);
296
+ throw nestedErr;
297
+ }
298
+ }
299
+ }
300
+ }
301
+ catch (err) {
302
+ finishEventDispatch(hsm);
303
+ throw err;
304
+ }
305
+ }
306
+ export function createInitTask(hsm) {
307
+ return (done) => {
308
+ executeInit(hsm)
309
+ .then(async () => {
310
+ await doTransition(hsm);
311
+ done();
312
+ })
313
+ .catch((err) => {
314
+ hsm.dispatchErrorCallback(hsm, asError(err));
315
+ done();
316
+ });
317
+ };
318
+ }
319
+ export function createEventDispatchTask(hsm, eventName, ...eventPayload) {
320
+ return (done) => {
321
+ dispatchEvent(hsm, eventName, ...eventPayload)
322
+ .catch((err) => hsm.dispatchErrorCallback(hsm, asError(err)))
323
+ .finally(() => done());
324
+ };
325
+ }
326
+ //# sourceMappingURL=dispatch.debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.debug.js","sourceRoot":"","sources":["../../../src/internal/dispatch.debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { PostedEvent, EventPayload } from '../index.js';
2
+ import { HsmWithTracing, Task } from './defs.private.js';
3
+ /** @internal */
4
+ export declare function createInitTask<DispatchContext, DispatchProtocol extends {} | undefined>(hsm: HsmWithTracing<DispatchContext, DispatchProtocol>): Task;
5
+ /** @internal */
6
+ 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;
@@ -0,0 +1,235 @@
1
+ import { TopState, EventHandlerError, FatalErrorState, InitializationError, FatalError, TransitionError, UnhandledEventError } from '../index.js';
2
+ import { getInitialState, getTransitionKey, hasInitialState, asError, getStateName } from './utils.js';
3
+ class ProductionTransition {
4
+ exitList;
5
+ entryList;
6
+ finalState;
7
+ constructor(exitList, entryList, finalState) {
8
+ this.exitList = exitList;
9
+ this.entryList = entryList;
10
+ this.finalState = finalState;
11
+ }
12
+ async execute(hsm, srcState, dstState) {
13
+ // Execute exit
14
+ for (const state of this.exitList) {
15
+ try {
16
+ const res = state.prototype.onExit.call(hsm._instance);
17
+ if (res) {
18
+ await res;
19
+ }
20
+ }
21
+ catch (cause) {
22
+ throw new TransitionError(hsm, asError(cause), getStateName(state), 'onExit', getStateName(srcState), getStateName(dstState));
23
+ }
24
+ }
25
+ // Execute entry
26
+ for (const state of this.entryList) {
27
+ try {
28
+ const res = state.prototype.onEntry.call(hsm._instance);
29
+ if (res) {
30
+ await res;
31
+ }
32
+ }
33
+ catch (cause) {
34
+ throw new TransitionError(hsm, asError(cause), getStateName(state), 'onEntry', getStateName(srcState), getStateName(dstState));
35
+ }
36
+ }
37
+ if (this.finalState) {
38
+ hsm.currentState = this.finalState;
39
+ }
40
+ }
41
+ }
42
+ function createTransition(srcState, destState) {
43
+ const src = srcState;
44
+ let dst = destState;
45
+ let srcPath = [];
46
+ const end = TopState;
47
+ const srcIndex = new Map();
48
+ let dstPath = [];
49
+ let cur = src;
50
+ let i = 0;
51
+ while (cur !== end) {
52
+ srcPath.push(cur);
53
+ srcIndex.set(cur, i);
54
+ cur = Object.getPrototypeOf(cur);
55
+ ++i;
56
+ }
57
+ cur = dst;
58
+ while (cur !== end) {
59
+ const i = srcIndex.get(cur);
60
+ if (i !== undefined) {
61
+ srcPath = srcPath.slice(0, i);
62
+ break;
63
+ }
64
+ dstPath.unshift(cur);
65
+ cur = Object.getPrototypeOf(cur);
66
+ }
67
+ while (hasInitialState(dst)) {
68
+ dst = getInitialState(dst);
69
+ dstPath.push(dst);
70
+ }
71
+ let finalState;
72
+ if (dstPath.length !== 0) {
73
+ finalState = dstPath[dstPath.length - 1];
74
+ }
75
+ else if (srcPath.length !== 0) {
76
+ finalState = Object.getPrototypeOf(srcPath[srcPath.length - 1]);
77
+ }
78
+ else {
79
+ finalState = undefined;
80
+ }
81
+ srcPath = srcPath.filter(value => !value.hasOwnProperty('onExit'));
82
+ dstPath = dstPath.filter(value => !value.hasOwnProperty('onEntry'));
83
+ return new ProductionTransition(srcPath, dstPath, finalState);
84
+ }
85
+ async function doTransition(hsm) {
86
+ if (hsm._transitionState) {
87
+ try {
88
+ const srcState = hsm.currentState;
89
+ const destState = hsm._transitionState;
90
+ const transitionKey = getTransitionKey(srcState, destState);
91
+ let tr = hsm._transitionCache.get(transitionKey);
92
+ if (!tr) {
93
+ tr = createTransition(srcState, destState);
94
+ hsm._transitionCache.set(transitionKey, tr);
95
+ }
96
+ try {
97
+ await tr.execute(hsm, srcState, destState);
98
+ }
99
+ catch (transitionError) {
100
+ hsm.currentState = FatalErrorState;
101
+ throw transitionError;
102
+ }
103
+ }
104
+ finally {
105
+ hsm._transitionState = undefined;
106
+ }
107
+ }
108
+ }
109
+ async function completePendingTransitions(hsm, onComplete) {
110
+ await doTransition(hsm);
111
+ onComplete();
112
+ }
113
+ async function doError(hsm, err, onComplete) {
114
+ hsm._transitionState = undefined; // clear next state
115
+ const messageHandler = hsm.currentState.prototype.onError;
116
+ try {
117
+ const result = messageHandler.call(hsm._instance, new EventHandlerError(hsm, err));
118
+ if (result) {
119
+ await result;
120
+ }
121
+ await completePendingTransitions(hsm, onComplete);
122
+ }
123
+ catch (recoveryErr) {
124
+ if (recoveryErr instanceof TransitionError) {
125
+ throw new FatalError(hsm, recoveryErr);
126
+ }
127
+ const err = asError(recoveryErr);
128
+ hsm.transition(FatalErrorState);
129
+ await completePendingTransitions(hsm, onComplete);
130
+ throw new FatalError(hsm, err);
131
+ }
132
+ }
133
+ async function doUnhandledEvent(hsm, error, onComplete) {
134
+ try {
135
+ const result = hsm.currentState.prototype.onUnhandled.call(hsm._instance, error);
136
+ if (result) {
137
+ await result;
138
+ }
139
+ await completePendingTransitions(hsm, onComplete);
140
+ }
141
+ catch (recoveryErr) {
142
+ if (recoveryErr instanceof TransitionError) {
143
+ hsm.currentState = FatalErrorState;
144
+ throw recoveryErr;
145
+ }
146
+ await doError(hsm, asError(recoveryErr), onComplete);
147
+ }
148
+ }
149
+ async function executeInit(hsm) {
150
+ let currState = hsm.topState;
151
+ try {
152
+ while (true) {
153
+ const proto = currState.prototype;
154
+ if (proto.hasOwnProperty('onEntry')) {
155
+ proto.onEntry.call(hsm._instance);
156
+ }
157
+ if (hasInitialState(currState)) {
158
+ currState = getInitialState(currState);
159
+ }
160
+ else
161
+ break;
162
+ }
163
+ hsm.currentState = currState;
164
+ }
165
+ catch (cause) {
166
+ if (cause instanceof TransitionError) {
167
+ throw cause;
168
+ }
169
+ hsm.currentState = FatalErrorState;
170
+ throw new InitializationError(hsm, currState, asError(cause));
171
+ }
172
+ }
173
+ function finishEventDispatch(hsm) {
174
+ hsm._currentEventName = undefined;
175
+ hsm._currentEventPayload = undefined;
176
+ }
177
+ async function dispatchEvent(hsm, eventName, ...eventPayload) {
178
+ hsm._currentEventName = String(eventName);
179
+ hsm._currentEventPayload = eventPayload;
180
+ try {
181
+ const eventHandler = hsm.currentState.prototype[eventName];
182
+ if (!eventHandler) {
183
+ await doUnhandledEvent(hsm, new UnhandledEventError(hsm), () => finishEventDispatch(hsm));
184
+ return;
185
+ }
186
+ try {
187
+ const result = eventHandler.call(hsm._instance, ...eventPayload);
188
+ if (result)
189
+ await result;
190
+ await completePendingTransitions(hsm, () => finishEventDispatch(hsm));
191
+ }
192
+ catch (recoveryErr) {
193
+ if (recoveryErr instanceof UnhandledEventError) {
194
+ await doUnhandledEvent(hsm, recoveryErr, () => finishEventDispatch(hsm));
195
+ }
196
+ else if (recoveryErr instanceof TransitionError) {
197
+ finishEventDispatch(hsm);
198
+ throw recoveryErr;
199
+ }
200
+ else {
201
+ await doError(hsm, asError(recoveryErr), () => finishEventDispatch(hsm));
202
+ }
203
+ }
204
+ }
205
+ catch (err) {
206
+ finishEventDispatch(hsm);
207
+ throw err;
208
+ }
209
+ }
210
+ // ---------------------------------------------------------------------------------------------------------------------
211
+ // Export: _createInitTask, _createEventDispatchTask
212
+ // ---------------------------------------------------------------------------------------------------------------------
213
+ /** @internal */
214
+ export function createInitTask(hsm) {
215
+ return (done) => {
216
+ executeInit(hsm)
217
+ .then(async () => {
218
+ await doTransition(hsm);
219
+ done();
220
+ })
221
+ .catch((err) => {
222
+ hsm.dispatchErrorCallback(hsm, asError(err));
223
+ done();
224
+ });
225
+ };
226
+ }
227
+ /** @internal */
228
+ export function createEventDispatchTask(hsm, eventName, ...eventPayload) {
229
+ return (done) => {
230
+ dispatchEvent(hsm, eventName, ...eventPayload)
231
+ .catch((err) => hsm.dispatchErrorCallback(hsm, asError(err)))
232
+ .finally(() => done());
233
+ };
234
+ }
235
+ //# sourceMappingURL=dispatch.production.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.production.js","sourceRoot":"","sources":["../../../src/internal/dispatch.production.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { PostedEvent, EventPayload } from '../index.js';
2
+ import { HsmWithTracing, Task } from './defs.private.js';
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;