xstate 5.0.0-beta.15 → 5.0.0-beta.16
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/actions/dist/xstate-actions.cjs.js +1 -3
- package/actions/dist/xstate-actions.cjs.mjs +0 -2
- package/actions/dist/xstate-actions.development.cjs.js +1 -3
- package/actions/dist/xstate-actions.development.esm.js +1 -1
- package/actions/dist/xstate-actions.esm.js +1 -1
- package/actions/dist/xstate-actions.umd.min.js +1 -1
- package/actions/dist/xstate-actions.umd.min.js.map +1 -1
- package/actors/dist/xstate-actors.cjs.js +1 -1
- package/actors/dist/xstate-actors.development.cjs.js +1 -1
- package/actors/dist/xstate-actors.development.esm.js +1 -1
- package/actors/dist/xstate-actors.esm.js +1 -1
- package/actors/dist/xstate-actors.umd.min.js +1 -1
- package/actors/dist/xstate-actors.umd.min.js.map +1 -1
- package/dist/{actions-6884fae8.esm.js → actions-0386b622.esm.js} +707 -742
- package/dist/{actions-d71ac253.development.cjs.js → actions-0f903c0d.development.cjs.js} +836 -874
- package/dist/{actions-81cc7f2b.cjs.js → actions-6b9073db.cjs.js} +706 -744
- package/dist/{actions-98f362b9.development.esm.js → actions-6f7fbc84.development.esm.js} +837 -872
- package/dist/declarations/src/StateMachine.d.ts +2 -4
- package/dist/declarations/src/actionTypes.d.ts +1 -1
- package/dist/declarations/src/actions/assign.d.ts +2 -2
- package/dist/declarations/src/actions/cancel.d.ts +2 -2
- package/dist/declarations/src/actions/send.d.ts +12 -22
- package/dist/declarations/src/actions/stop.d.ts +2 -2
- package/dist/declarations/src/actions.d.ts +1 -4
- package/dist/declarations/src/interpreter.d.ts +2 -2
- package/dist/declarations/src/stateUtils.d.ts +1 -1
- package/dist/declarations/src/types.d.ts +29 -49
- package/dist/xstate.cjs.js +20 -34
- package/dist/xstate.development.cjs.js +20 -34
- package/dist/xstate.development.esm.js +21 -35
- package/dist/xstate.esm.js +21 -35
- package/dist/xstate.umd.min.js +1 -1
- package/dist/xstate.umd.min.js.map +1 -1
- package/guards/dist/xstate-guards.cjs.js +1 -1
- package/guards/dist/xstate-guards.development.cjs.js +1 -1
- package/guards/dist/xstate-guards.development.esm.js +1 -1
- package/guards/dist/xstate-guards.esm.js +1 -1
- package/guards/dist/xstate-guards.umd.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as STATE_DELIMITER, m as mapValues, t as toActionObjects, a as toArray, f as formatTransitions, b as toTransitionConfigArray, N as NULL_EVENT, c as formatTransition, d as memo, e as evaluateGuard, g as flatten, h as createInvokeId, i as isString, j as invoke, k as getDelayedTransitions, l as formatInitialTransition, n as getCandidates, o as toInvokeConfig, p as
|
|
2
|
-
export {
|
|
1
|
+
import { S as STATE_DELIMITER, m as mapValues, t as toActionObjects, a as toArray, f as formatTransitions, b as toTransitionConfigArray, N as NULL_EVENT, c as formatTransition, d as memo, e as evaluateGuard, g as flatten, h as createInvokeId, i as isString, j as invoke, k as getDelayedTransitions, l as formatInitialTransition, n as getCandidates, o as toInvokeConfig, p as getConfiguration, q as getStateNodes, r as resolveStateValue, s as isInFinalState, u as State, v as isErrorEvent, w as macrostep, x as transitionNode, y as getInitialConfiguration, z as resolveActionsAndContext, A as assign, B as microstep, C as isAtomicStateNode, D as error, E as isStateId, F as getStateNodeByPath, G as getPersistedState, H as resolveReferencedActor, I as interpret, J as createInitEvent, K as matchesState } from './actions-6f7fbc84.development.esm.js';
|
|
2
|
+
export { a8 as ActionTypes, P as Interpreter, Q as InterpreterStatus, a9 as SpecialTargets, u as State, a6 as and, A as assign, T as cancel, U as choose, R as doneInvoke, O as forwardTo, a1 as fromCallback, a2 as fromEventObservable, a0 as fromObservable, $ as fromPromise, a3 as fromTransition, q as getStateNodes, I as interpret, V as log, K as matchesState, a5 as not, a7 as or, Z as pathToStateValue, W as pure, X as raise, M as sendParent, L as sendTo, a4 as stateIn, Y as stop, _ as toObserver } from './actions-6f7fbc84.development.esm.js';
|
|
3
3
|
import '../dev/dist/xstate-dev.development.esm.js';
|
|
4
4
|
|
|
5
5
|
const EMPTY_OBJECT = {};
|
|
@@ -316,23 +316,6 @@ class StateNode {
|
|
|
316
316
|
|
|
317
317
|
const STATE_IDENTIFIER = '#';
|
|
318
318
|
class StateMachine {
|
|
319
|
-
// TODO: this getter should be removed
|
|
320
|
-
getContext(input) {
|
|
321
|
-
return this.getContextAndActions(undefined, input)[0];
|
|
322
|
-
}
|
|
323
|
-
getContextAndActions(actorCtx, input) {
|
|
324
|
-
const actions = [];
|
|
325
|
-
const {
|
|
326
|
-
context
|
|
327
|
-
} = this.config;
|
|
328
|
-
const resolvedContext = typeof context === 'function' ? context({
|
|
329
|
-
spawn: createSpawner(actorCtx?.self, this, undefined,
|
|
330
|
-
// TODO: this requires `| undefined` for all referenced dynamic inputs that are spawnable in the context factory,
|
|
331
|
-
createInitEvent(input), actions),
|
|
332
|
-
input
|
|
333
|
-
}) : context;
|
|
334
|
-
return [resolvedContext || {}, actions];
|
|
335
|
-
}
|
|
336
319
|
/**
|
|
337
320
|
* The machine's own version.
|
|
338
321
|
*/
|
|
@@ -429,10 +412,9 @@ class StateMachine {
|
|
|
429
412
|
done: isInFinalState(configuration)
|
|
430
413
|
});
|
|
431
414
|
}
|
|
432
|
-
resolveStateValue(stateValue) {
|
|
415
|
+
resolveStateValue(stateValue, ...[context]) {
|
|
433
416
|
const resolvedStateValue = resolveStateValue(this.root, stateValue);
|
|
434
|
-
|
|
435
|
-
return this.resolveState(State.from(resolvedStateValue, resolvedContext, this));
|
|
417
|
+
return this.resolveState(State.from(resolvedStateValue, context, this));
|
|
436
418
|
}
|
|
437
419
|
|
|
438
420
|
/**
|
|
@@ -471,20 +453,27 @@ class StateMachine {
|
|
|
471
453
|
* The initial state _before_ evaluating any microsteps.
|
|
472
454
|
* This "pre-initial" state is provided to initial actions executed in the initial state.
|
|
473
455
|
*/
|
|
474
|
-
getPreInitialState(actorCtx,
|
|
475
|
-
const
|
|
476
|
-
|
|
456
|
+
getPreInitialState(actorCtx, initEvent) {
|
|
457
|
+
const {
|
|
458
|
+
context
|
|
459
|
+
} = this.config;
|
|
477
460
|
const preInitial = this.resolveState(this.createState({
|
|
478
461
|
value: {},
|
|
479
462
|
// TODO: this is computed in state constructor
|
|
480
|
-
context,
|
|
463
|
+
context: typeof context !== 'function' && context ? context : {},
|
|
481
464
|
meta: undefined,
|
|
482
|
-
configuration:
|
|
465
|
+
configuration: getInitialConfiguration(this.root),
|
|
483
466
|
children: {}
|
|
484
467
|
}));
|
|
485
|
-
if (
|
|
486
|
-
const
|
|
487
|
-
|
|
468
|
+
if (typeof context === 'function') {
|
|
469
|
+
const assignment = ({
|
|
470
|
+
spawn,
|
|
471
|
+
event
|
|
472
|
+
}) => context({
|
|
473
|
+
spawn,
|
|
474
|
+
input: event.input
|
|
475
|
+
});
|
|
476
|
+
return resolveActionsAndContext([assign(assignment)], initEvent, preInitial, actorCtx);
|
|
488
477
|
}
|
|
489
478
|
return preInitial;
|
|
490
479
|
}
|
|
@@ -495,7 +484,7 @@ class StateMachine {
|
|
|
495
484
|
getInitialState(actorCtx, input) {
|
|
496
485
|
const initEvent = createInitEvent(input); // TODO: fix;
|
|
497
486
|
|
|
498
|
-
const preInitialState = this.getPreInitialState(actorCtx,
|
|
487
|
+
const preInitialState = this.getPreInitialState(actorCtx, initEvent);
|
|
499
488
|
const nextState = microstep([{
|
|
500
489
|
target: [...preInitialState.configuration].filter(isAtomicStateNode),
|
|
501
490
|
source: this.root,
|
|
@@ -532,10 +521,7 @@ class StateMachine {
|
|
|
532
521
|
return getStateNodeByPath(stateNode, relativePath);
|
|
533
522
|
}
|
|
534
523
|
get definition() {
|
|
535
|
-
return
|
|
536
|
-
context: this.getContext(),
|
|
537
|
-
...this.root.definition
|
|
538
|
-
};
|
|
524
|
+
return this.root.definition;
|
|
539
525
|
}
|
|
540
526
|
toJSON() {
|
|
541
527
|
return this.definition;
|
package/dist/xstate.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as STATE_DELIMITER, m as mapValues, t as toActionObjects, a as toArray, f as formatTransitions, b as toTransitionConfigArray, N as NULL_EVENT, c as formatTransition, d as memo, e as evaluateGuard, g as flatten, h as createInvokeId, i as isString, j as invoke, k as getDelayedTransitions, l as formatInitialTransition, n as getCandidates, o as toInvokeConfig, p as
|
|
2
|
-
export {
|
|
1
|
+
import { S as STATE_DELIMITER, m as mapValues, t as toActionObjects, a as toArray, f as formatTransitions, b as toTransitionConfigArray, N as NULL_EVENT, c as formatTransition, d as memo, e as evaluateGuard, g as flatten, h as createInvokeId, i as isString, j as invoke, k as getDelayedTransitions, l as formatInitialTransition, n as getCandidates, o as toInvokeConfig, p as getConfiguration, q as getStateNodes, r as resolveStateValue, s as isInFinalState, u as State, v as isErrorEvent, w as macrostep, x as transitionNode, y as getInitialConfiguration, z as resolveActionsAndContext, A as assign, B as microstep, C as isAtomicStateNode, D as error, E as isStateId, F as getStateNodeByPath, G as getPersistedState, H as resolveReferencedActor, I as interpret, J as createInitEvent, K as matchesState } from './actions-0386b622.esm.js';
|
|
2
|
+
export { a8 as ActionTypes, P as Interpreter, Q as InterpreterStatus, a9 as SpecialTargets, u as State, a6 as and, A as assign, T as cancel, U as choose, R as doneInvoke, O as forwardTo, a1 as fromCallback, a2 as fromEventObservable, a0 as fromObservable, $ as fromPromise, a3 as fromTransition, q as getStateNodes, I as interpret, V as log, K as matchesState, a5 as not, a7 as or, Z as pathToStateValue, W as pure, X as raise, M as sendParent, L as sendTo, a4 as stateIn, Y as stop, _ as toObserver } from './actions-0386b622.esm.js';
|
|
3
3
|
import '../dev/dist/xstate-dev.esm.js';
|
|
4
4
|
|
|
5
5
|
const EMPTY_OBJECT = {};
|
|
@@ -316,23 +316,6 @@ class StateNode {
|
|
|
316
316
|
|
|
317
317
|
const STATE_IDENTIFIER = '#';
|
|
318
318
|
class StateMachine {
|
|
319
|
-
// TODO: this getter should be removed
|
|
320
|
-
getContext(input) {
|
|
321
|
-
return this.getContextAndActions(undefined, input)[0];
|
|
322
|
-
}
|
|
323
|
-
getContextAndActions(actorCtx, input) {
|
|
324
|
-
const actions = [];
|
|
325
|
-
const {
|
|
326
|
-
context
|
|
327
|
-
} = this.config;
|
|
328
|
-
const resolvedContext = typeof context === 'function' ? context({
|
|
329
|
-
spawn: createSpawner(actorCtx?.self, this, undefined,
|
|
330
|
-
// TODO: this requires `| undefined` for all referenced dynamic inputs that are spawnable in the context factory,
|
|
331
|
-
createInitEvent(input), actions),
|
|
332
|
-
input
|
|
333
|
-
}) : context;
|
|
334
|
-
return [resolvedContext || {}, actions];
|
|
335
|
-
}
|
|
336
319
|
/**
|
|
337
320
|
* The machine's own version.
|
|
338
321
|
*/
|
|
@@ -429,10 +412,9 @@ class StateMachine {
|
|
|
429
412
|
done: isInFinalState(configuration)
|
|
430
413
|
});
|
|
431
414
|
}
|
|
432
|
-
resolveStateValue(stateValue) {
|
|
415
|
+
resolveStateValue(stateValue, ...[context]) {
|
|
433
416
|
const resolvedStateValue = resolveStateValue(this.root, stateValue);
|
|
434
|
-
|
|
435
|
-
return this.resolveState(State.from(resolvedStateValue, resolvedContext, this));
|
|
417
|
+
return this.resolveState(State.from(resolvedStateValue, context, this));
|
|
436
418
|
}
|
|
437
419
|
|
|
438
420
|
/**
|
|
@@ -471,20 +453,27 @@ class StateMachine {
|
|
|
471
453
|
* The initial state _before_ evaluating any microsteps.
|
|
472
454
|
* This "pre-initial" state is provided to initial actions executed in the initial state.
|
|
473
455
|
*/
|
|
474
|
-
getPreInitialState(actorCtx,
|
|
475
|
-
const
|
|
476
|
-
|
|
456
|
+
getPreInitialState(actorCtx, initEvent) {
|
|
457
|
+
const {
|
|
458
|
+
context
|
|
459
|
+
} = this.config;
|
|
477
460
|
const preInitial = this.resolveState(this.createState({
|
|
478
461
|
value: {},
|
|
479
462
|
// TODO: this is computed in state constructor
|
|
480
|
-
context,
|
|
463
|
+
context: typeof context !== 'function' && context ? context : {},
|
|
481
464
|
meta: undefined,
|
|
482
|
-
configuration:
|
|
465
|
+
configuration: getInitialConfiguration(this.root),
|
|
483
466
|
children: {}
|
|
484
467
|
}));
|
|
485
|
-
if (
|
|
486
|
-
const
|
|
487
|
-
|
|
468
|
+
if (typeof context === 'function') {
|
|
469
|
+
const assignment = ({
|
|
470
|
+
spawn,
|
|
471
|
+
event
|
|
472
|
+
}) => context({
|
|
473
|
+
spawn,
|
|
474
|
+
input: event.input
|
|
475
|
+
});
|
|
476
|
+
return resolveActionsAndContext([assign(assignment)], initEvent, preInitial, actorCtx);
|
|
488
477
|
}
|
|
489
478
|
return preInitial;
|
|
490
479
|
}
|
|
@@ -495,7 +484,7 @@ class StateMachine {
|
|
|
495
484
|
getInitialState(actorCtx, input) {
|
|
496
485
|
const initEvent = createInitEvent(input); // TODO: fix;
|
|
497
486
|
|
|
498
|
-
const preInitialState = this.getPreInitialState(actorCtx,
|
|
487
|
+
const preInitialState = this.getPreInitialState(actorCtx, initEvent);
|
|
499
488
|
const nextState = microstep([{
|
|
500
489
|
target: [...preInitialState.configuration].filter(isAtomicStateNode),
|
|
501
490
|
source: this.root,
|
|
@@ -532,10 +521,7 @@ class StateMachine {
|
|
|
532
521
|
return getStateNodeByPath(stateNode, relativePath);
|
|
533
522
|
}
|
|
534
523
|
get definition() {
|
|
535
|
-
return
|
|
536
|
-
context: this.getContext(),
|
|
537
|
-
...this.root.definition
|
|
538
|
-
};
|
|
524
|
+
return this.root.definition;
|
|
539
525
|
}
|
|
540
526
|
toJSON() {
|
|
541
527
|
return this.definition;
|
package/dist/xstate.umd.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).XState={})}(this,(function(t){"use strict";let e=function(t){return t.Stop="xstate.stop",t.Raise="xstate.raise",t.Send="xstate.send",t.Cancel="xstate.cancel",t.Assign="xstate.assign",t.After="xstate.after",t.DoneState="done.state",t.DoneInvoke="done.invoke",t.Log="xstate.log",t.Init="xstate.init",t.Invoke="xstate.invoke",t.ErrorExecution="error.execution",t.ErrorCommunication="error.communication",t.ErrorPlatform="error.platform",t.ErrorCustom="xstate.error",t.Pure="xstate.pure",t.Choose="xstate.choose",t}({}),n=function(t){return t.Parent="#_parent",t.Internal="#_internal",t}({});const s=e.Stop,i=e.Raise,o=e.Send,r=e.Cancel,a=e.Assign;e.After,e.DoneState;const c=e.Log,u=e.Init,d=e.Invoke,h=e.ErrorExecution,f=e.ErrorPlatform,p=e.ErrorCustom,l=e.Choose,y=e.Pure,m=".",g="",v="",x="*";function _(t,e){const n=S(t),s=S(e);return C(s)?!!C(n)&&s===n:C(n)?n in s:Object.keys(n).every((t=>t in s&&_(n[t],s[t])))}function b(t){try{return O(t)?t:t.toString().split(m)}catch(e){throw new Error(`'${t}' is not a valid state path.`)}}function S(t){if("object"==typeof(e=t)&&"value"in e&&"context"in e&&"event"in e)return t.value;var e;if(O(t))return w(t);if("string"!=typeof t)return t;return w(b(t))}function w(t){if(1===t.length)return t[0];const e={};let n=e;for(let e=0;e<t.length-1;e++)if(e===t.length-2)n[t[e]]=t[e+1];else{const s=n;n={},s[t[e]]=n}return e}function $(t,e){const n={},s=Object.keys(t);for(let i=0;i<s.length;i++){const o=s[i];n[o]=e(t[o],o,t,i)}return n}function k(t){return[].concat(...t)}function E(t){return O(t)?t:[t]}function I(t){return void 0===t?[]:E(t)}function T(t,e,n){if(j(t))return t({context:e,event:n});const s={},i={context:e,event:n};for(const e of Object.keys(t)){const n=t[e];j(n)?s[e]=n(i):s[e]=n}return s}function O(t){return Array.isArray(t)}function j(t){return"function"==typeof t}function C(t){return"string"==typeof t}function A(t,e){return E(e).map((e=>void 0===e||"string"==typeof e?{target:e,event:t}:{...e,event:t}))}function P(t){if(void 0!==t&&t!==g)return I(t)}function M(t,e,n){const s=()=>{},i="object"==typeof t,o=i?t:null;return{next:((i?t.next:t)||s).bind(o),error:((i?t.error:e)||s).bind(o),complete:((i?t.complete:n)||s).bind(o)}}function N(t){return t?"transition"in t?{src:t,input:void 0}:t:void 0}function D(t,e){return{type:t.type,params:t.params,resolve:e}}function R(t){return"object"==typeof t&&null!==t&&"resolve"in t}function J(t,e){return D({type:o,params:{to:e?e.to:void 0,delay:e?e.delay:void 0,event:t,id:e&&void 0!==e.id?e.id:j(t)?t.name:t.type}},((s,{actorContext:i,state:r})=>{const a={to:e?e.to:void 0,delay:e?e.delay:void 0,event:t,id:e&&void 0!==e.id?e.id:j(t)?t.name:t.type},c={context:r.context,event:s,self:i?.self??null,system:i?.system},u=r.machine.implementations.delays;if("string"==typeof t)throw new Error(`Only event objects may be used with sendTo; use sendTo({ type: "${t}" }) instead`);const d=j(t)?t(c):t;let h;if(C(a.delay)){const t=u&&u[a.delay];h=j(t)?t(c):t}else h=j(a.delay)?a.delay(c):a.delay;const f=j(a.to)?a.to(c):a.to;let l;if("string"==typeof f){if(l=f===n.Parent?i?.self._parent:f===n.Internal?i?.self:f.startsWith("#_")?r.children[f.slice(2)]:r.children[f],!l)throw new Error(`Unable to send event to actor '${f}' from machine '${r.machine.id}'.`)}else l=f||i?.self;const y={type:o,params:{...a,to:l,event:d,delay:h,internal:f===n.Internal},execute:t=>{const e=y;if("number"!=typeof e.params.delay){const n=e.params.to,s=e.params.event;t.defer((()=>{n.send(s.type===p?{type:`${Yt(t.self.id)}`,data:s.data}:e.params.event)}))}else t.self.delaySend(e)}};return[r,y]}))}const Q=new WeakMap;function V(t,e,n){let s=Q.get(t);return s?e in s||(s[e]=n()):(s={[e]:n()},Q.set(t,s)),s[e]}function z(t){return D({type:r,params:{sendId:t}},((e,{state:n,actorContext:s})=>{const i=j(t)?t({context:n.context,event:e,self:s?.self??{},system:s?.system}):t;return[n,{type:"xstate.cancel",params:{sendId:i},execute:t=>{t.self.cancel(i)}}]}))}const B="function"==typeof Symbol&&Symbol.observable||"@@observable";class U{constructor(t){this._process=t,this._active=!1,this._current=null,this._last=null}start(){this._active=!0,this.flush()}clear(){this._current&&(this._current.next=null,this._last=this._current)}prepend(t){this._current?this._current={value:t,next:this._current}:this.enqueue(t)}enqueue(t){const e={value:t,next:null};if(this._current)return this._last.next=e,void(this._last=e);this._current=e,this._last=e,this._active&&this.flush()}flush(){for(;this._current;){const t=this._current;this._process(t.value),t===this._current&&(this._current=this._current.next)}this._last=null}}function W(){const t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window;if(t.__xstate__)return t.__xstate__}const q=t=>{const e=W();e&&e.register(t)};let L=function(t){return t[t.NotStarted=0]="NotStarted",t[t.Running=1]="Running",t[t.Stopped=2]="Stopped",t}({});const F={deferEvents:!0,clock:{setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t)},logger:console.log.bind(console),devTools:!1};class G{constructor(t,e){this.logic=t,this._state=void 0,this.clock=void 0,this.options=void 0,this.id=void 0,this.mailbox=new U(this._process.bind(this)),this.delayedEventsMap={},this.observers=new Set,this.logger=void 0,this.status=L.NotStarted,this._parent=void 0,this.ref=void 0,this._actorContext=void 0,this._systemId=void 0,this.sessionId=void 0,this.system=void 0,this._doneEvent=void 0,this.src=void 0,this._deferred=[];const n={...F,...e},{clock:s,logger:i,parent:o,id:r,systemId:a}=n;this.system=o?.system??function(){let t=0;const e=new Map,n=new Map,s=new WeakMap;return{_bookId:()=>"x:"+t++,_register:(t,n)=>(e.set(t,n),t),_unregister:t=>{e.delete(t.sessionId);const i=s.get(t);void 0!==i&&(n.delete(i),s.delete(t))},get:t=>n.get(t),_set:(t,e)=>{const i=n.get(t);if(i&&i!==e)throw new Error(`Actor with system ID '${t}' already exists.`);n.set(t,e),s.set(e,t)}}}(),a&&(this._systemId=a,this.system._set(a,this)),this.sessionId=this.system._bookId(),this.id=r??this.sessionId,this.logger=i,this.clock=s,this._parent=o,this.options=n,this.src=n.src,this.ref=this,this._actorContext={self:this,id:this.id,sessionId:this.sessionId,logger:this.logger,defer:t=>{this._deferred.push(t)},system:this.system,stopChild:t=>{if(t._parent!==this)throw new Error(`Cannot stop child actor ${t.id} of ${this.id} because it is not a child`);t._stop()}},this.send=this.send.bind(this),this._initState()}_initState(){this._state=this.options.state?this.logic.restoreState?this.logic.restoreState(this.options.state,this._actorContext):this.options.state:this.logic.getInitialState(this._actorContext,this.options?.input)}update(t){this._state=t;const e=this.getSnapshot();let n;for(;n=this._deferred.shift();)n();for(const t of this.observers)t.next?.(e);const s=this.logic.getStatus?.(t);switch(s?.status){case"done":this._stopProcedure(),this._doneEvent=Kt(this.id,s.data),this._parent?.send(this._doneEvent),this._complete();break;case"error":this._stopProcedure(),this._parent?.send(Yt(this.id,s.data)),this._error(s.data)}}subscribe(t,e,n){const s=M(t,e,n);return this.observers.add(s),this.status===L.Stopped&&(s.complete?.(),this.observers.delete(s)),{unsubscribe:()=>{this.observers.delete(s)}}}start(){return this.status===L.Running||(this.system._register(this.sessionId,this),this._systemId&&this.system._set(this._systemId,this),this.status=L.Running,this.logic.start&&this.logic.start(this._state,this._actorContext),this.update(this._state),this.options.devTools&&this.attachDevTools(),this.mailbox.start()),this}_process(t){try{const e=this.logic.transition(this._state,t,this._actorContext);this.update(e),t.type===Z&&(this._stopProcedure(),this._complete())}catch(t){if(!(this.observers.size>0))throw t;this.observers.forEach((e=>{e.error?.(t)})),this.stop()}}_stop(){return this.status===L.Stopped?this:(this.mailbox.clear(),this.status===L.NotStarted?(this.status=L.Stopped,this):(this.mailbox.enqueue({type:Z}),this))}stop(){if(this._parent)throw new Error("A non-root actor cannot be stopped directly.");return this._stop()}_complete(){for(const t of this.observers)t.complete?.();this.observers.clear()}_error(t){for(const e of this.observers)e.error?.(t);this.observers.clear()}_stopProcedure(){if(this.status!==L.Running)return this;for(const t of Object.keys(this.delayedEventsMap))this.clock.clearTimeout(this.delayedEventsMap[t]);return this.mailbox.clear(),this.mailbox=new U(this._process.bind(this)),this.status=L.Stopped,this.system._unregister(this),this}send(t){if("string"==typeof t)throw new Error(`Only event objects may be sent to actors; use .send({ type: "${t}" }) instead`);if(this.status!==L.Stopped){if(this.status!==L.Running&&!this.options.deferEvents)throw new Error(`Event "${t.type}" was sent to uninitialized actor "${this.id}". Make sure .start() is called for this actor, or set { deferEvents: true } in the actor options.\nEvent: ${JSON.stringify(t)}`);this.mailbox.enqueue(t)}}delaySend(t){this.delayedEventsMap[t.params.id]=this.clock.setTimeout((()=>{"to"in t.params&&t.params.to?t.params.to.send(t.params.event):this.send(t.params.event)}),t.params.delay)}cancel(t){this.clock.clearTimeout(this.delayedEventsMap[t]),delete this.delayedEventsMap[t]}attachDevTools(){const{devTools:t}=this.options;if(t){("function"==typeof t?t:q)(this)}}toJSON(){return{id:this.id}}getPersistedState(){return this.logic.getPersistedState?.(this._state)}[B](){return this}getSnapshot(){return this.logic.getSnapshot?this.logic.getSnapshot(this._state):this._state}}function X(t,e){return new G(t,e)}const H="$$xstate.resolve",K="$$xstate.reject";const Y="xstate.init",Z="xstate.stop";function tt(t){return D({type:d,params:t},((e,{state:n,actorContext:s})=>{const i=d,{id:o,src:r}=t;let a;if((c=r)&&"object"==typeof c&&"function"==typeof c.send)a={type:i,params:{...t,ref:r}};else{const c=N(n.machine.implementations.actors[r]);if(c){const u="input"in t?t.input:c.input,d=X(c.src,{id:o,src:r,parent:s?.self,systemId:t.systemId,input:"function"==typeof u?u({context:n.context,event:e,self:s?.self}):u});a={type:i,params:{...t,ref:d}}}else a={type:i,params:t}}var c;const u=a.params.ref,h=Bt(n,{children:{...n.children,[o]:u}});return a.execute=t=>{const e=t.self,{id:n,ref:s}=a.params;s&&t.defer((()=>{if(u.status!==L.Stopped)try{u.start?.()}catch(t){return void e.send(Yt(n,t))}}))},[h,a]}))}function et(t,e,n,s){const{machine:i}=s,o=i?.implementations?.guards?.[t.type]??t.predicate;if(!o)throw new Error(`Guard '${t.type}' is not implemented.'.`);return o({context:e,event:n,state:s,guard:t,evaluate:et})}function nt(t,e){if(C(t)){const n=e?.(t);return j(n)?{type:t,predicate:n,params:{type:t}}:n||{type:t,params:{type:t}}}if(j(t))return{type:t.name,predicate:t,params:{type:t.name,name:t.name}};const n=e?.(t.type);return j(n)?{type:t.type,params:t.params||t,children:t.children?.map((t=>nt(t,e))),predicate:e?.(t.type)||t.predicate}:n||{type:t.type,params:t.params||t,children:t.children?.map((t=>nt(t,e))),predicate:t.predicate}}const st=t=>"atomic"===t.type||"final"===t.type;function it(t){return Object.values(t.states).filter((t=>"history"!==t.type))}function ot(t,e){const n=[];let s=t.parent;for(;s&&s!==e;)n.push(s),s=s.parent;return n}function rt(t){const e=new Set(t),n=new Set(t),s=ct(n);for(const t of e)if("compound"!==t.type||s.get(t)&&s.get(t).length){if("parallel"===t.type)for(const e of it(t))if("history"!==e.type&&!n.has(e))for(const t of gt(e))n.add(t)}else gt(t).forEach((t=>n.add(t)));for(const t of n){let e=t.parent;for(;e;)n.add(e),e=e.parent}return n}function at(t,e){const n=e.get(t);if(!n)return{};if("compound"===t.type){const t=n[0];if(!t)return{};if(st(t))return t.key}const s={};for(const t of n)s[t.key]=at(t,e);return s}function ct(t){const e=new Map;for(const n of t)e.has(n)||e.set(n,[]),n.parent&&(e.has(n.parent)||e.set(n.parent,[]),e.get(n.parent).push(n));return e}function ut(t,e){return at(t,ct(rt(e)))}function dt(t,e=t[0].machine.root){return"compound"===e.type?it(e).some((e=>"final"===e.type&&t.includes(e))):"parallel"===e.type&&it(e).every((e=>dt(t,e)))}const ht=t=>"#"===t[0];function ft(t){const n=t.config.after;if(!n)return[];const s=(n,s)=>{const i=function(t,n){const s=n?`#${n}`:"";return`${e.After}(${t})${s}`}(j(n)?`${t.id}:delay[${s}]`:n,t.id);return t.entry.push(Lt({type:i},{delay:n})),t.exit.push(z(i)),i};return(O(n)?n.map(((t,e)=>{const n=s(t.delay,e);return{...t,event:n}})):Object.keys(n).flatMap(((t,e)=>{const i=n[t],o=C(i)?{target:i}:i,r=isNaN(+t)?t:+t,a=s(r,e);return I(o).map((t=>({...t,event:a,delay:r})))}))).map((e=>{const{delay:n}=e;return{...pt(t,e),delay:n}}))}function pt(t,e){const n=P(e.target),s=e.reenter??!1,{guards:i}=t.machine.implementations,o=lt(t,n),r={...e,actions:Xt(I(e.actions)),guard:e.guard?nt(e.guard,(t=>i[t])):void 0,target:o,source:t,reenter:s,eventType:e.event,toJSON:()=>({...r,source:`#${t.id}`,target:o?o.map((t=>`#${t.id}`)):void 0})};return r}function lt(t,e){if(void 0!==e)return e.map((e=>{if(!C(e))return e;if(ht(e))return t.machine.getStateNodeById(e);const n=e[0]===m;if(n&&!t.parent)return xt(t,e.slice(1));const s=n?t.key+e:e;if(!t.parent)throw new Error(`Invalid target: "${e}" is not a valid target from the root node. Did you mean ".${e}"?`);try{return xt(t.parent,s)}catch(e){throw new Error(`Invalid transition definition for state node '${t.id}':\n${e.message}`)}}))}function yt(t){const e=P(t.target);return e?e.map((e=>"string"==typeof e?xt(t.parent,e):e)):t.parent.initial.target}function mt(t){return"history"===t.type}function gt(t){const e=new Set;return function n(s){if(!e.has(s))if(e.add(s),"compound"===s.type)for(const i of s.initial.target){for(const n of ot(i,t))e.add(n);n(i)}else if("parallel"===s.type)for(const t of it(s))n(t)}(t),[...e]}function vt(t,e){if(ht(e))return t.machine.getStateNodeById(e);if(!t.states)throw new Error(`Unable to retrieve child state '${e}' from '${t.id}'; no child states exist.`);const n=t.states[e];if(!n)throw new Error(`Child state '${e}' does not exist on '${t.id}'`);return n}function xt(t,e){if("string"==typeof e&&ht(e))try{return t.machine.getStateNodeById(e)}catch(t){}const n=b(e).slice();let s=t;for(;n.length;){const t=n.shift();if(!t.length)break;s=vt(s,t)}return s}function _t(t,e){const n=e instanceof zt?e.value:S(e);if(C(n))return[t,t.states[n]];const s=Object.keys(n),i=s.map((e=>vt(t,e))).filter(Boolean);return[t.machine.root,t].concat(i,s.reduce(((e,s)=>{const i=vt(t,s);if(!i)return e;const o=_t(i,n[s]);return e.concat(o)}),[]))}function bt(t,e,n,s){return C(e)?function(t,e,n,s){const i=vt(t,e).next(n,s);return i&&i.length?i:t.next(n,s)}(t,e,n,s):1===Object.keys(e).length?function(t,e,n,s){const i=Object.keys(e),o=bt(vt(t,i[0]),e[i[0]],n,s);return o&&o.length?o:t.next(n,s)}(t,e,n,s):function(t,e,n,s){const i=[];for(const o of Object.keys(e)){const r=e[o];if(!r)continue;const a=bt(vt(t,o),r,n,s);a&&i.push(...a)}return i.length?i:t.next(n,s)}(t,e,n,s)}function St(t){return Object.keys(t.states).map((e=>t.states[e])).filter((t=>"history"===t.type))}function wt(t,e){let n=t;for(;n.parent&&n.parent!==e;)n=n.parent;return n.parent===e}function $t(t){const e=[];let n=t.parent;for(;n;)e.unshift(n),n=n.parent;return e}function kt(t,e){const n=new Set(t),s=new Set(e);for(const t of n)if(s.has(t))return!0;for(const t of s)if(n.has(t))return!0;return!1}function Et(t,e,n){const s=new Set;for(const i of t){let t=!1;const o=new Set;for(const r of s)if(kt(Ot([i],e,n),Ot([r],e,n))){if(!wt(i.source,r.source)){t=!0;break}o.add(r)}if(!t){for(const t of o)s.delete(t);s.add(i)}}return Array.from(s)}function It(t,e){if(!t.target)return[];const n=new Set;for(const s of t.target)if(mt(s))if(e[s.id])for(const t of e[s.id])n.add(t);else for(const t of It({target:yt(s)},e))n.add(t);else n.add(s);return[...n]}function Tt(t,e){const n=It(t,e);if(!n)return null;if(!t.reenter&&"parallel"!==t.source.type&&n.every((e=>wt(e,t.source))))return t.source;return function(t){const[e]=t;let n=$t(e),s=[];for(const e of t){const t=$t(e);s=n.filter((e=>t.includes(e))),n=s,s=[]}return n[n.length-1]}(n.concat(t.source))}function Ot(t,e,n){const s=new Set;for(const i of t)if(i.target?.length){const t=Tt(i,n);for(const n of e)wt(n,t)&&s.add(n)}return[...s]}function jt(t,e,n,s,i){const o=new Set(e.configuration);if(!t.length)return e;const r=function(t,e,n,s,i,o){const r=[],a={...e.historyValue},c=Et(t,n,a),u=[...e._internalQueue];o||function(t,e,n,s){const i=Ot(t,e,n);i.sort(((t,e)=>e.order-t.order));for(const t of i)for(const s of St(t)){let i;i="deep"===s.history?e=>st(e)&&wt(e,t):e=>e.parent===t,n[s.id]=Array.from(e).filter(i)}for(const t of i)s.push(...t.exit,...t.invoke.map((t=>Ut(t.id)))),e.delete(t)}(c,n,a,r);r.push(...c.flatMap((t=>t.actions))),Ct(s,c,n,r,u,e,a,o);const d=[...n],h=dt(d);if(h){const t=d.sort(((t,e)=>e.order-t.order)).flatMap((t=>t.exit));r.push(...t)}try{const t=Nt(r,s,e,i),n=h?function(t,e,n){const s=t[0].machine,i=t.find((t=>"final"===t.type&&t.parent===s.root));return i&&i.output?T(i.output,e,n):void 0}(d,t.context,s):void 0;return u.push(...t._internalQueue),Bt(e,{configuration:d,historyValue:a,_internalQueue:u,context:t.context,done:h,output:n,children:t.children})}catch(t){throw t}}(t,e,o,s,n,i);return Bt(r,{value:{}})}function Ct(t,e,n,s,i,o,r,a){const c=new Set,u=new Set;At(e,r,u,c),a&&u.add(o.machine.root);for(const e of[...c].sort(((t,e)=>t.order-e.order))){n.add(e);for(const t of e.invoke)s.push(tt(t));if(s.push(...e.entry),u.has(e))for(const t of u){const e=t.initial.actions;s.push(...e)}if("final"===e.type){const s=e.parent;if(!s.parent)continue;if(i.push(Ht(s.id,e.output?T(e.output,o.context,t):void 0)),s.parent){const t=s.parent;"parallel"===t.type&&it(t).every((t=>dt([...n],t)))&&i.push(Ht(t.id))}}}}function At(t,e,n,s){for(const i of t){for(const t of i.target||[])Pt(t,e,n,s);const t=Tt(i,e),o=It(i,e);for(const i of o)Mt(i,t,s,e,n)}}function Pt(t,e,n,s){if(mt(t))if(e[t.id]){const i=e[t.id];for(const t of i)Pt(t,e,n,s);for(const o of i){Mt(o,t.parent,s,e,n);for(const t of n)n.add(t)}}else{const i=yt(t);for(const t of i)Pt(t,e,n,s);for(const o of i){Mt(o,t,s,e,n);for(const t of n)n.add(t)}}else if(s.add(t),"compound"===t.type){n.add(t);const i=t.initial.target;for(const t of i)Pt(t,e,n,s);for(const o of i)Mt(o,t,s,e,n)}else if("parallel"===t.type)for(const i of it(t).filter((t=>!mt(t))))[...s].some((t=>wt(t,i)))||Pt(i,e,n,s)}function Mt(t,e,n,s,i){const o=ot(t,e);for(const t of o)if(n.add(t),"parallel"===t.type)for(const e of it(t).filter((t=>!mt(t))))[...n].some((t=>wt(t,e)))||Pt(e,s,i,n)}function Nt(t,e,n,s){const{machine:r}=n,a=[];let c=n;function u(t){s?.self.status===L.Running?t.execute?.(s):s?.defer((()=>t.execute?.(s)))}function d(t){const n=function(t,e){if(R(t))return t;const n=e[t.type];return"function"==typeof n?D({type:"xstate.function",params:t.params??{}},((e,{state:s})=>{const i={type:t.type,params:t.params,execute:t=>n({context:s.context,event:e,action:i,system:t.system,self:t.self})};return[s,i]})):n||t}(t,r.implementations.actions);if(R(n)){const[r,h]=n.resolve(e,{state:c,action:t,actorContext:s}),f=h.params?.actions;return c=r,(h.type===i||h.type===o&&h.params.internal)&&"number"!=typeof h.params.delay&&a.push(h),h.type!==y&&u(h),void Xt(f).forEach(d)}u(n)}for(const e of t)d(e);return Bt(c,{_internalQueue:a.map((t=>t.params.event))})}function Dt(t,e,n){let s=t;const i=[];if(e.type===Z)return s=Rt(e,s,n),i.push(s),{state:s,microstates:i};let o=e;if(o.type!==u){s=jt(Jt(o,s),t,n,o,!1),i.push(s)}for(;!s.done;){let t=Qt(s,o);if(t.length)s=jt(t,s,n,o,!1),i.push(s);else{if(!s._internalQueue.length)break;o=s._internalQueue[0];s=jt(Jt(o,s),s,n,o,!1),s._internalQueue.shift(),i.push(s)}}return s.done&&Rt(o,s,n),{state:s,microstates:i}}function Rt(t,e,n){const s=[];for(const t of e.configuration.sort(((t,e)=>e.order-t.order)))s.push(...t.exit);for(const t of Object.values(e.children))s.push(Ut(t));return Nt(s,t,e,n)}function Jt(t,e){return e.machine.getTransitionData(e,t)}function Qt(t,e){const n=new Set,s=t.configuration.filter(st);for(const i of s)t:for(const s of[i].concat(ot(i,null)))if(s.always)for(const i of s.always)if(void 0===i.guard||et(i.guard,t.context,e,t)){n.add(i);break t}return Et(Array.from(n),new Set(t.configuration),t.historyValue)}function Vt(t,e){return ut(t,[...rt(_t(t,e))])}class zt{static from(t,e={},n){if(t instanceof zt)return t.context!==e?new zt({value:t.value,context:e,meta:{},configuration:[],children:{}},n):t;const s=rt(_t(n.root,t));return new zt({value:t,context:e,meta:void 0,configuration:Array.from(s),children:{}},n)}constructor(t,e){this.machine=e,this.tags=void 0,this.value=void 0,this.done=void 0,this.output=void 0,this.context=void 0,this.historyValue={},this._internalQueue=void 0,this.configuration=void 0,this.children=void 0,this.context=t.context,this._internalQueue=t._internalQueue??[],this.historyValue=t.historyValue||{},this.matches=this.matches.bind(this),this.toStrings=this.toStrings.bind(this),this.configuration=t.configuration??Array.from(rt(_t(e.root,t.value))),this.children=t.children,this.value=ut(e.root,this.configuration),this.tags=new Set(k(this.configuration.map((t=>t.tags)))),this.done=t.done??!1,this.output=t.output}toStrings(t=this.value){if(C(t))return[t];const e=Object.keys(t);return e.concat(...e.map((e=>this.toStrings(t[e]).map((t=>e+m+t)))))}toJSON(){const{configuration:t,tags:e,machine:n,...s}=this;return{...s,tags:Array.from(e),meta:this.meta}}matches(t){return _(t,this.value)}hasTag(t){return this.tags.has(t)}can(t){const e=this.machine.getTransitionData(this,t);return!!e?.length&&e.some((t=>void 0!==t.target||t.actions.length))}get nextEvents(){return V(this,"nextEvents",(()=>[...new Set(k([...this.configuration.map((t=>t.ownEvents))]))]))}get meta(){return this.configuration.reduce(((t,e)=>(void 0!==e.meta&&(t[e.id]=e.meta),t)),{})}}function Bt(t,e={}){return new zt({...t,...e},t.machine)}function Ut(t){const e=t;return D({type:s,params:{actor:e}},((t,{state:n})=>{const s=j(e)?e({context:n.context,event:t}):e,i="string"==typeof s?n.children[s]:s;let o=n.children;return i&&(o={...o},delete o[i.id]),[Bt(n,{children:o}),{type:"xstate.stop",params:{actor:i},execute:t=>{i&&(i.status===L.Running?t.defer((()=>{t.stopChild(i)})):t.stopChild(i))}}]}))}const Wt=({context:t,event:e})=>({context:t,event:e});function qt(t,e,n,s,i){return(o,r={})=>{const{systemId:a}=r;if(C(o)){const c=N(e.implementations.actors[o]);if(c){const e="input"in r?r.input:c.input,o=X(c.src,{id:r.id,parent:t,input:"function"==typeof e?e({context:n,event:s,self:t}):e});return i.push(tt({id:o.id,src:o,ref:o,meta:void 0,input:e,systemId:a})),o}throw new Error(`Actor logic '${o}' not implemented in machine '${e.id}'`)}{const e=X(o,{id:r.id,parent:t,input:r.input,systemId:a});return i.push(tt({src:e,ref:e,id:e.id,meta:void 0,input:r.input})),e}}}function Lt(t,e){return D({type:i,params:{delay:e?e.delay:void 0,event:t,id:e&&void 0!==e.id?e.id:"function"==typeof t?t.name:t.type}},((n,{state:s,actorContext:o})=>{const r={delay:e?e.delay:void 0,event:t,id:e&&void 0!==e.id?e.id:"function"==typeof t?t.name:t.type},a={context:s.context,event:n,self:o?.self??{},system:o?.system},c=s.machine.implementations.delays;if("string"==typeof t)throw new Error(`Only event objects may be used with raise; use raise({ type: "${t}" }) instead`);const u="function"==typeof t?t(a):t;let d;if("string"==typeof r.delay){const t=c&&c[r.delay];d="function"==typeof t?t(a):t}else d="function"==typeof r.delay?r.delay(a):r.delay;const h={type:i,params:{...r,event:u,delay:d},execute:t=>{"number"!=typeof h.params.delay||t.self.delaySend(h)}};return[s,h]}))}const Ft={type:u};function Gt(t){if(R(t))return t;if("string"==typeof t)return{type:t,params:{}};if("function"==typeof t){const e="xstate.function";return D({type:e,params:{}},((n,{state:s})=>{const i={type:e,params:{function:t},execute:e=>t({context:s.context,event:n,action:i,self:e.self,system:e.system})};return[s,i]}))}return t}const Xt=t=>{if(!t)return[];return(O(t)?t:[t]).map(Gt)};function Ht(t,n){const s=`${e.DoneState}.${t}`,i={type:s,output:n,toString:()=>s};return i}function Kt(t,n){const s=`${e.DoneInvoke}.${t}`,i={type:s,output:n,toString:()=>s};return i}function Yt(t,n){const s=`${e.ErrorPlatform}.${t}`,i={type:s,data:n,toString:()=>s};return i}function Zt(t){return{type:u,input:t}}const te={};class ee{constructor(t,e){if(this.config=t,this.key=void 0,this.id=void 0,this.type=void 0,this.path=void 0,this.states=void 0,this.history=void 0,this.entry=void 0,this.exit=void 0,this.parent=void 0,this.machine=void 0,this.meta=void 0,this.output=void 0,this.order=-1,this.description=void 0,this.tags=[],this.transitions=void 0,this.always=void 0,this.parent=e._parent,this.key=e._key,this.machine=e._machine,this.path=this.parent?this.parent.path.concat(this.key):[],this.id=this.config.id||[this.machine.id,...this.path].join(m),this.type=this.config.type||(this.config.states&&Object.keys(this.config.states).length?"compound":this.config.history?"history":"atomic"),this.description=this.config.description,this.order=this.machine.idMap.size,this.machine.idMap.set(this.id,this),this.states=this.config.states?$(this.config.states,((t,e)=>new ee(t,{_parent:this,_key:e,_machine:this.machine}))):te,"compound"===this.type&&!this.config.initial)throw new Error(`No initial state specified for compound state node "#${this.id}". Try adding { initial: "${Object.keys(this.states)[0]}" } to the state config.`);this.history=!0===this.config.history?"shallow":this.config.history||!1,this.entry=Xt(this.config.entry),this.exit=Xt(this.config.exit),this.meta=this.config.meta,this.output="final"===this.type?this.config.output:void 0,this.tags=I(t.tags)}_initialize(){this.transitions=function(t){const e=[];if(Array.isArray(t.config.on))e.push(...t.config.on);else if(t.config.on){const{[x]:n=[],...s}=t.config.on;for(const t of Object.keys(s)){if(t===v)throw new Error('Null events ("") cannot be specified as a transition key. Use `always: { ... }` instead.');const n=A(t,s[t]);e.push(...n)}e.push(...A(x,n))}const n=t.config.onDone?A(String(Ht(t.id)),t.config.onDone):[],s=t.invoke.flatMap((t=>{const e=[];return t.onDone&&e.push(...A(`done.invoke.${t.id}`,t.onDone)),t.onError&&e.push(...A(`error.platform.${t.id}`,t.onError)),t.onSnapshot&&e.push(...A(`xstate.snapshot.${t.id}`,t.onSnapshot)),e})),i=t.after,o=[...n,...s,...e].flatMap((e=>I(e).map((e=>pt(t,e)))));for(const t of i)o.push(t);return o}(this),this.config.always&&(this.always=A(v,this.config.always).map((t=>pt(this,t)))),Object.keys(this.states).forEach((t=>{this.states[t]._initialize()}))}get definition(){return{id:this.id,key:this.key,version:this.machine.version,type:this.type,initial:this.initial?{target:this.initial.target,source:this,actions:this.initial.actions,eventType:null,reenter:!1,toJSON:()=>({target:this.initial.target.map((t=>`#${t.id}`)),source:`#${this.id}`,actions:this.initial.actions,eventType:null})}:void 0,history:this.history,states:$(this.states,(t=>t.definition)),on:this.on,transitions:this.transitions,entry:this.entry,exit:this.exit,meta:this.meta,order:this.order||-1,output:this.output,invoke:this.invoke,description:this.description,tags:this.tags}}toJSON(){return this.definition}get invoke(){return V(this,"invoke",(()=>I(this.config.invoke).map(((t,e)=>{const n=`${this.id}:invocation[${e}]`;const s=function(t,e){if("object"==typeof t){if("src"in t)return t;if("transition"in t)return{id:e,src:t}}return{id:e,src:t}}(t,n),i=s.id||n,o=s.src,{systemId:r}=s,a=C(o)||"type"in o?o:i;return this.machine.implementations.actors[i]||"string"==typeof o||"type"in o||(this.machine.implementations.actors={...this.machine.implementations.actors,[i]:o}),{type:d,...s,src:a,id:i,systemId:r,toJSON(){const{onDone:t,onError:e,...n}=s;return{...n,type:d,src:a,id:i}}}}))))}get on(){return V(this,"on",(()=>this.transitions.reduce(((t,e)=>(t[e.eventType]=t[e.eventType]||[],t[e.eventType].push(e),t)),{})))}get after(){return V(this,"delayedTransitions",(()=>ft(this)))}get initial(){return V(this,"initial",(()=>function(t,e){if(C(e)||O(e)){const n=I(e).map((e=>{const n=C(e)?ht(e)?t.machine.getStateNodeById(e):t.states[e]:e;if(!n)throw new Error(`Initial state node "${e}" not found on parent state node #${t.id}`);if(!wt(n,t))throw new Error(`Invalid initial target: state node #${n.id} is not a descendant of #${t.id}`);return n})),s=lt(t,n),i={source:t,actions:[],eventType:null,reenter:!1,target:s,toJSON:()=>({...i,source:`#${t.id}`,target:s?s.map((t=>`#${t.id}`)):void 0})};return i}return pt(t,{target:I(e.target).map((t=>C(t)?ht(t)?t:`${m}${t}`:t)),actions:e.actions,event:null})}(this,this.config.initial||[])))}next(t,e){const n=e.type,s=[];let i;const o=V(this,`candidates-${n}`,(()=>{return t=n,this.transitions.filter((e=>{const{eventType:n}=e;if(n===t)return!0;if(n===x)return!0;if(!n.endsWith(".*"))return!1;const s=n.split("."),i=t.split(".");for(let t=0;t<s.length;t++){const e=s[t],n=i[t];if("*"===e)return t===s.length-1;if(e!==n)return!1}return!0}));var t}));for(const r of o){const{guard:o}=r,a=t.context;let c=!1;try{c=!o||et(o,a,e,t)}catch(t){throw new Error(`Unable to evaluate guard '${o.type}' in transition for event '${n}' in state node '${this.id}':\n${t.message}`)}if(c){s.push(...r.actions),i=r;break}}return i?[i]:void 0}get target(){if("history"===this.type){return this.config.target}}get stateIds(){const t=k(Object.keys(this.states).map((t=>this.states[t].stateIds)));return[this.id].concat(t)}get events(){return V(this,"events",(()=>{const{states:t}=this,e=new Set(this.ownEvents);if(t)for(const n of Object.keys(t)){const s=t[n];if(s.states)for(const t of s.events)e.add(`${t}`)}return Array.from(e)}))}get ownEvents(){const t=new Set(this.transitions.filter((t=>!(!t.target&&!t.actions.length&&!t.reenter))).map((t=>t.eventType)));return Array.from(t)}}class ne{getContext(t){return this.getContextAndActions(void 0,t)[0]}getContextAndActions(t,e){const n=[],{context:s}=this.config;return[("function"==typeof s?s({spawn:qt(t?.self,this,void 0,Zt(e),n),input:e}):s)||{},n]}constructor(t,e){this.config=t,this.version=void 0,this.implementations=void 0,this.types=void 0,this.__xstatenode=!0,this.idMap=new Map,this.root=void 0,this.id=void 0,this.states=void 0,this.events=void 0,this.__TContext=void 0,this.__TEvent=void 0,this.__TAction=void 0,this.__TActorMap=void 0,this.__TResolvedTypesMeta=void 0,this.id=t.id||"(machine)",this.implementations={actors:e?.actors??{},actions:e?.actions??{},delays:e?.delays??{},guards:e?.guards??{}},this.version=this.config.version,this.types=this.config.types??{},this.transition=this.transition.bind(this),this.root=new ee(t,{_key:this.id,_machine:this}),this.root._initialize(),this.states=this.root.states,this.events=this.root.events}provide(t){const{actions:e,guards:n,actors:s,delays:i}=this.implementations;return new ne(this.config,{actions:{...e,...t.actions},guards:{...n,...t.guards},actors:{...s,...t.actors},delays:{...i,...t.delays}})}resolveState(t){const e=rt(_t(this.root,t.value)),n=Array.from(e);return this.createState({...t,value:Vt(this.root,t.value),configuration:n,done:dt(n)})}resolveStateValue(t){const e=Vt(this.root,t),n=this.getContext();return this.resolveState(zt.from(e,n,this))}transition(t,e,n){if(function(t){return"string"==typeof t.type&&(t.type===h||t.type.startsWith(f))}(e)&&!t.nextEvents.some((t=>t===e.type)))throw e.data;const{state:s}=Dt(t,e,n);return s}microstep(t,e,n){return Dt(t,e,n).microstates}getTransitionData(t,e){return bt(this.root,t.value,t,e)||[]}getPreInitialState(t,e){const[n,s]=this.getContextAndActions(t,e),i=function(t){const e=[],n=t.initial,s=new Set;At([n],{},new Set([t]),s);for(const t of[...s].sort(((t,e)=>t.order-e.order)))e.push(t);return e}(this.root),o=this.resolveState(this.createState({value:{},context:n,meta:void 0,configuration:i,children:{}}));if(t){const e=Nt(s,Ft,o,t);o.children=e.children}return o}getInitialState(t,e){const n=Zt(e),s=this.getPreInitialState(t,e),i=jt([{target:[...s.configuration].filter(st),source:this.root,reenter:!0,actions:[],eventType:null,toJSON:null}],s,t,n,!0),{state:o}=Dt(i,n,t);return o}start(t,e){Object.values(t.children).forEach((t=>{if(0===t.status)try{t.start?.()}catch(n){e.self.send(Yt(t.id,n))}}))}getStateNodeById(t){const e=t.split(m),n=e.slice(1),s=ht(e[0])?e[0].slice(1):e[0],i=this.idMap.get(s);if(!i)throw new Error(`Child state node '#${s}' does not exist on machine '${this.id}'`);return xt(i,n)}get definition(){return{context:this.getContext(),...this.root.definition}}toJSON(){return this.definition}getPersistedState(t){return function(t){const{configuration:e,tags:n,machine:s,children:i,...o}=t,r={};for(const t in i)r[t]={state:i[t].getPersistedState?.(),src:i[t].src};return{...o,children:r}}(t)}createState(t){return t instanceof zt?t:new zt(t,this)}getStatus(t){return t.done?{status:"done",data:t.output}:{status:"active"}}restoreState(t,e){const n={};Object.keys(t.children).forEach((s=>{const i=t.children[s],o=i.state,r=i.src,a=r?N(this.implementations.actors[r])?.src:void 0;if(!a)return;const c=a.restoreState?.(o,e),u=X(a,{id:s,state:c});n[s]=u}));const s=this.createState(new zt({...t,children:n},this));return s.configuration.forEach((t=>{t.invoke&&t.invoke.forEach((t=>{const{id:s,src:i}=t;if(n[s])return;const o=N(this.implementations.actors[i]);if(o){const i=X(o.src,{id:s,parent:e?.self,input:"input"in t?t.input:o.input});n[s]=i}}))})),s}}const se={timeout:1e4};t.ActionTypes=e,t.Interpreter=G,t.InterpreterStatus=L,t.SimulatedClock=class{constructor(){this.timeouts=new Map,this._now=0,this._id=0}now(){return this._now}getId(){return this._id++}setTimeout(t,e){const n=this.getId();return this.timeouts.set(n,{start:this.now(),timeout:e,fn:t}),n}clearTimeout(t){this.timeouts.delete(t)}set(t){if(this._now>t)throw new Error("Unable to travel back in time");this._now=t,this.flushTimeouts()}flushTimeouts(){[...this.timeouts].sort((([t,e],[n,s])=>{const i=e.start+e.timeout;return s.start+s.timeout>i?-1:1})).forEach((([t,e])=>{this.now()-e.start>=e.timeout&&(this.timeouts.delete(t),e.fn.call(null))}))}increment(t){this._now+=t,this.flushTimeouts()}},t.SpecialTargets=n,t.State=zt,t.StateMachine=ne,t.StateNode=ee,t.and=function(t){return{type:"xstate.boolean",params:{op:"and"},children:t.map((t=>nt(t))),predicate:({evaluate:t,guard:e,context:n,event:s,state:i})=>e.children.every((e=>t(e,n,s,i)))}},t.assign=function(t){return D({type:a,params:{assignment:t}},((e,{state:n,action:s,actorContext:i})=>{const o=[];if(!n.context)throw new Error("Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.");const r={context:n.context,event:e,action:s,spawn:qt(i?.self,n.machine,n.context,e,o),self:i?.self??{},system:i?.system};let c={};if(j(t))c=t(r);else for(const e of Object.keys(t)){const n=t[e];c[e]=j(n)?n(r):n}const u=Object.assign({},n.context,c);return[Bt(n,{context:u}),{type:a,params:{context:u,actions:o}}]}))},t.cancel=z,t.choose=function(t){return D({type:l,params:{guards:t}},((e,{state:n})=>{const s=t.find((t=>{const s=t.guard&&nt(t.guard,(t=>n.machine.implementations.guards[t]));return!s||et(s,n.context,e,n)}))?.actions;return[n,{type:l,params:{actions:Xt(s)}}]}))},t.createMachine=function(t,e){return new ne(t,e)},t.doneInvoke=Kt,t.forwardTo=function(t,e){return J((({event:t})=>t),{...e,to:t})},t.fromCallback=function(t){return{config:t,start:(t,{self:e})=>{e.send({type:Y})},transition:(e,n,{self:s,id:i,system:o})=>{if(n.type===Y){const n=t=>{e.canceled||s._parent?.send(t)},a=t=>{e.receivers.add(t)};return e.dispose=t(n,a,{input:e.input,system:o}),((r=e.dispose)instanceof Promise||null!==r&&(j(r)||"object"==typeof r)&&j(r.then))&&e.dispose.then((t=>{s._parent?.send(Kt(i,t)),e.canceled=!0}),(t=>{e.canceled=!0,s._parent?.send(Yt(i,t))})),e}var r;return n.type===Z?(e.canceled=!0,j(e.dispose)&&e.dispose(),e):(function(t){return t.type===Y||t.type===Z}(n)||e.receivers.forEach((t=>t(n))),e)},getInitialState:(t,e)=>({canceled:!1,receivers:new Set,dispose:void 0,input:e}),getSnapshot:()=>{},getPersistedState:({input:t})=>t}},t.fromEventObservable=function(t){const e="$$xstate.error",n="$$xstate.complete";return{config:t,transition:(t,s)=>{if("active"!==t.status)return t;switch(s.type){case e:return{...t,status:"error",input:void 0,data:s.data,subscription:void 0};case n:return{...t,status:"done",input:void 0,subscription:void 0};case Z:return t.subscription.unsubscribe(),{...t,status:"canceled",input:void 0,subscription:void 0};default:return t}},getInitialState:(t,e)=>({subscription:void 0,status:"active",data:void 0,input:e}),start:(s,{self:i,system:o})=>{"done"!==s.status&&(s.subscription=t({input:s.input,system:o}).subscribe({next:t=>{i._parent?.send(t)},error:t=>{i.send({type:e,data:t})},complete:()=>{i.send({type:n})}}))},getSnapshot:t=>{},getPersistedState:({status:t,data:e,input:n})=>({status:t,data:e,input:n}),getStatus:t=>t,restoreState:t=>({...t,subscription:void 0})}},t.fromObservable=function(t){const e="$$xstate.next",n="$$xstate.error",s="$$xstate.complete";return{config:t,transition:(t,i,{self:o,id:r,defer:a})=>{if("active"!==t.status)return t;switch(i.type){case e:return a((()=>{o._parent?.send({type:`xstate.snapshot.${r}`,data:i.data})})),{...t,data:i.data};case n:return{...t,status:"error",input:void 0,data:i.data,subscription:void 0};case s:return{...t,status:"done",input:void 0,subscription:void 0};case Z:return t.subscription.unsubscribe(),{...t,status:"canceled",input:void 0,subscription:void 0};default:return t}},getInitialState:(t,e)=>({subscription:void 0,status:"active",data:void 0,input:e}),start:(i,{self:o,system:r})=>{"done"!==i.status&&(i.subscription=t({input:i.input,system:r}).subscribe({next:t=>{o.send({type:e,data:t})},error:t=>{o.send({type:n,data:t})},complete:()=>{o.send({type:s})}}))},getSnapshot:t=>t.data,getPersistedState:({status:t,data:e,input:n})=>({status:t,data:e,input:n}),getStatus:t=>t,restoreState:t=>({...t,subscription:void 0})}},t.fromPromise=function(t){return{config:t,transition:(t,e)=>{if("active"!==t.status)return t;switch(e.type){case H:return{...t,status:"done",data:e.data,input:void 0};case K:return{...t,status:"error",data:e.data,input:void 0};case Z:return{...t,status:"canceled",input:void 0};default:return t}},start:(e,{self:n,system:s})=>{if("active"!==e.status)return;Promise.resolve(t({input:e.input,system:s})).then((t=>{"active"===n._state.status&&n.send({type:H,data:t})}),(t=>{"active"===n._state.status&&n.send({type:K,data:t})}))},getInitialState:(t,e)=>({status:"active",data:void 0,input:e}),getSnapshot:t=>t.data,getStatus:t=>t,getPersistedState:t=>t,restoreState:t=>t}},t.fromTransition=function(t,e){return{config:t,transition:(e,n,s)=>t(e,n,s),getInitialState:(t,n)=>"function"==typeof e?e({input:n}):e,getSnapshot:t=>t,getPersistedState:t=>t,restoreState:t=>t}},t.getStateNodes=_t,t.interpret=X,t.log=function(t=Wt,e){return D({type:c,params:{label:e,expr:t}},((n,{state:s,actorContext:i})=>{const o="function"==typeof t?t({context:s.context,event:n,self:i?.self??{},system:i?.system}):t;return[s,{type:"xstate.log",params:{label:e,value:o},execute:t=>{e?t.logger?.(e,o):t.logger?.(o)}}]}))},t.mapState=function(t,e){let n;for(const s of Object.keys(t))_(s,e)&&(!n||e.length>n.length)&&(n=s);return t[n]},t.matchesState=_,t.not=function(t){return{type:"xstate.boolean",params:{op:"not"},children:[nt(t)],predicate:({evaluate:t,guard:e,context:n,event:s,state:i})=>!t(e.children[0],n,s,i)}},t.or=function(t){return{type:"xstate.boolean",params:{op:"or"},children:t.map((t=>nt(t))),predicate:({evaluate:t,guard:e,context:n,event:s,state:i})=>e.children.some((e=>t(e,n,s,i)))}},t.pathToStateValue=w,t.pure=function(t){return D({type:y,params:{get:t}},((e,{state:n})=>[n,{type:y,params:{actions:I(Xt(t({context:n.context,event:e})))??[]}}]))},t.raise=Lt,t.sendParent=function(t,e){return J(t,{...e,to:n.Parent})},t.sendTo=function(t,e,n){return J(e,{...n,to:t})},t.stateIn=function(t){return{type:"xstate.guard:in",params:{stateValue:t},predicate:({state:e})=>C(t)&&ht(t)?e.configuration.some((e=>e.id===t.slice(1))):e.matches(t)}},t.stop=Ut,t.toObserver=M,t.waitFor=function(t,e,n){const s={...se,...n};return new Promise(((n,i)=>{let o=!1;const r=s.timeout===1/0?void 0:setTimeout((()=>{u.unsubscribe(),i(new Error(`Timeout of ${s.timeout} ms exceeded`))}),s.timeout),a=()=>{clearTimeout(r),o=!0,u?.unsubscribe()};function c(t){e(t)&&(a(),n(t))}let u;c(t.getSnapshot()),o||(u=t.subscribe({next:c,error:t=>{a(),i(t)},complete:()=>{a(),i(new Error("Actor terminated without satisfying predicate"))}}),o&&u.unsubscribe())}))},Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).XState={})}(this,(function(t){"use strict";let e=function(t){return t.Stop="xstate.stop",t.Raise="xstate.raise",t.SendTo="xstate.sendTo",t.Cancel="xstate.cancel",t.Assign="xstate.assign",t.After="xstate.after",t.DoneState="done.state",t.DoneInvoke="done.invoke",t.Log="xstate.log",t.Init="xstate.init",t.Invoke="xstate.invoke",t.ErrorExecution="error.execution",t.ErrorCommunication="error.communication",t.ErrorPlatform="error.platform",t.ErrorCustom="xstate.error",t.Pure="xstate.pure",t.Choose="xstate.choose",t}({}),n=function(t){return t.Parent="#_parent",t.Internal="#_internal",t}({});const s=e.Stop,i=e.Raise,o=e.SendTo,r=e.Cancel,a=e.Assign;e.After,e.DoneState;const c=e.Log,u=e.Init,d=e.Invoke,h=e.ErrorExecution,f=e.ErrorPlatform,p=e.ErrorCustom,l=e.Choose,y=e.Pure,m=".",g="",v="",x="*";function _(t,e){const n=S(t),s=S(e);return C(s)?!!C(n)&&s===n:C(n)?n in s:Object.keys(n).every((t=>t in s&&_(n[t],s[t])))}function b(t){try{return O(t)?t:t.toString().split(m)}catch(e){throw new Error(`'${t}' is not a valid state path.`)}}function S(t){if("object"==typeof(e=t)&&"value"in e&&"context"in e&&"event"in e)return t.value;var e;if(O(t))return w(t);if("string"!=typeof t)return t;return w(b(t))}function w(t){if(1===t.length)return t[0];const e={};let n=e;for(let e=0;e<t.length-1;e++)if(e===t.length-2)n[t[e]]=t[e+1];else{const s=n;n={},s[t[e]]=n}return e}function $(t,e){const n={},s=Object.keys(t);for(let i=0;i<s.length;i++){const o=s[i];n[o]=e(t[o],o,t,i)}return n}function k(t){return[].concat(...t)}function E(t){return O(t)?t:[t]}function I(t){return void 0===t?[]:E(t)}function T(t,e,n){if(j(t))return t({context:e,event:n});const s={},i={context:e,event:n};for(const e of Object.keys(t)){const n=t[e];j(n)?s[e]=n(i):s[e]=n}return s}function O(t){return Array.isArray(t)}function j(t){return"function"==typeof t}function C(t){return"string"==typeof t}function P(t,e){return E(e).map((e=>void 0===e||"string"==typeof e?{target:e,event:t}:{...e,event:t}))}function M(t){if(void 0!==t&&t!==g)return I(t)}function A(t,e,n){const s=()=>{},i="object"==typeof t,o=i?t:null;return{next:((i?t.next:t)||s).bind(o),error:((i?t.error:e)||s).bind(o),complete:((i?t.complete:n)||s).bind(o)}}function N(t){return t?"transition"in t?{src:t,input:void 0}:t:void 0}function D(t,e){return{type:t.type,params:t.params,resolve:e}}function R(t){return"object"==typeof t&&null!==t&&"resolve"in t}function J(t,e,s){return D({type:o,params:{to:t,delay:s?s.delay:void 0,event:e,id:s&&void 0!==s.id?s.id:j(e)?e.name:e.type}},((i,{actorContext:r,state:a})=>{const c={to:t,delay:s?s.delay:void 0,event:e,id:s&&void 0!==s.id?s.id:j(e)?e.name:e.type},u={context:a.context,event:i,self:r?.self??null,system:r?.system},d=a.machine.implementations.delays;if("string"==typeof e)throw new Error(`Only event objects may be used with sendTo; use sendTo({ type: "${e}" }) instead`);const h=j(e)?e(u):e;let f;if(C(c.delay)){const t=d&&d[c.delay];f=j(t)?t(u):t}else f=j(c.delay)?c.delay(u):c.delay;const l=j(c.to)?c.to(u):c.to;let y;if("string"==typeof l){if(y=l===n.Parent?r?.self._parent:l===n.Internal?r?.self:l.startsWith("#_")?a.children[l.slice(2)]:a.children[l],!y)throw new Error(`Unable to send event to actor '${l}' from machine '${a.machine.id}'.`)}else y=l||r?.self;const m={type:o,params:{...c,to:y,event:h,delay:f},execute:t=>{const e=m;if("number"!=typeof e.params.delay){const n=e.params.to,s=e.params.event;t.defer((()=>{n.send(s.type===p?{type:`${Zt(t.self.id)}`,data:s.data}:e.params.event)}))}else t.self.delaySend(e)}};return[a,m]}))}const Q=new WeakMap;function V(t,e,n){let s=Q.get(t);return s?e in s||(s[e]=n()):(s={[e]:n()},Q.set(t,s)),s[e]}function z(t){return D({type:r,params:{sendId:t}},((e,{state:n,actorContext:s})=>{const i=j(t)?t({context:n.context,event:e,self:s?.self??{},system:s?.system}):t;return[n,{type:"xstate.cancel",params:{sendId:i},execute:t=>{t.self.cancel(i)}}]}))}class B{constructor(t){this._process=t,this._active=!1,this._current=null,this._last=null}start(){this._active=!0,this.flush()}clear(){this._current&&(this._current.next=null,this._last=this._current)}prepend(t){this._current?this._current={value:t,next:this._current}:this.enqueue(t)}enqueue(t){const e={value:t,next:null};if(this._current)return this._last.next=e,void(this._last=e);this._current=e,this._last=e,this._active&&this.flush()}flush(){for(;this._current;){const t=this._current;this._process(t.value),t===this._current&&(this._current=this._current.next)}this._last=null}}const U="function"==typeof Symbol&&Symbol.observable||"@@observable";const W="$$xstate.resolve",q="$$xstate.reject";const L="xstate.init",F="xstate.stop";function G(){const t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window;if(t.__xstate__)return t.__xstate__}const X=t=>{const e=G();e&&e.register(t)};let H=function(t){return t[t.NotStarted=0]="NotStarted",t[t.Running=1]="Running",t[t.Stopped=2]="Stopped",t}({});const K={deferEvents:!0,clock:{setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t)},logger:console.log.bind(console),devTools:!1};class Y{constructor(t,e){this.logic=t,this._state=void 0,this.clock=void 0,this.options=void 0,this.id=void 0,this.mailbox=new B(this._process.bind(this)),this.delayedEventsMap={},this.observers=new Set,this.logger=void 0,this.status=H.NotStarted,this._parent=void 0,this.ref=void 0,this._actorContext=void 0,this._systemId=void 0,this.sessionId=void 0,this.system=void 0,this._doneEvent=void 0,this.src=void 0,this._deferred=[];const n={...K,...e},{clock:s,logger:i,parent:o,id:r,systemId:a}=n;this.system=o?.system??function(){let t=0;const e=new Map,n=new Map,s=new WeakMap;return{_bookId:()=>"x:"+t++,_register:(t,n)=>(e.set(t,n),t),_unregister:t=>{e.delete(t.sessionId);const i=s.get(t);void 0!==i&&(n.delete(i),s.delete(t))},get:t=>n.get(t),_set:(t,e)=>{const i=n.get(t);if(i&&i!==e)throw new Error(`Actor with system ID '${t}' already exists.`);n.set(t,e),s.set(e,t)}}}(),a&&(this._systemId=a,this.system._set(a,this)),this.sessionId=this.system._bookId(),this.id=r??this.sessionId,this.logger=i,this.clock=s,this._parent=o,this.options=n,this.src=n.src,this.ref=this,this._actorContext={self:this,id:this.id,sessionId:this.sessionId,logger:this.logger,defer:t=>{this._deferred.push(t)},system:this.system,stopChild:t=>{if(t._parent!==this)throw new Error(`Cannot stop child actor ${t.id} of ${this.id} because it is not a child`);t._stop()}},this.send=this.send.bind(this),this._initState()}_initState(){this._state=this.options.state?this.logic.restoreState?this.logic.restoreState(this.options.state,this._actorContext):this.options.state:this.logic.getInitialState(this._actorContext,this.options?.input)}update(t){this._state=t;const e=this.getSnapshot();let n;for(;n=this._deferred.shift();)n();for(const t of this.observers)t.next?.(e);const s=this.logic.getStatus?.(t);switch(s?.status){case"done":this._stopProcedure(),this._doneEvent=Yt(this.id,s.data),this._parent?.send(this._doneEvent),this._complete();break;case"error":this._stopProcedure(),this._parent?.send(Zt(this.id,s.data)),this._error(s.data)}}subscribe(t,e,n){const s=A(t,e,n);return this.observers.add(s),this.status===H.Stopped&&(s.complete?.(),this.observers.delete(s)),{unsubscribe:()=>{this.observers.delete(s)}}}start(){return this.status===H.Running||(this.system._register(this.sessionId,this),this._systemId&&this.system._set(this._systemId,this),this.status=H.Running,this.logic.start&&this.logic.start(this._state,this._actorContext),this.update(this._state),this.options.devTools&&this.attachDevTools(),this.mailbox.start()),this}_process(t){try{const e=this.logic.transition(this._state,t,this._actorContext);this.update(e),t.type===F&&(this._stopProcedure(),this._complete())}catch(t){if(!(this.observers.size>0))throw t;this.observers.forEach((e=>{e.error?.(t)})),this.stop()}}_stop(){return this.status===H.Stopped?this:(this.mailbox.clear(),this.status===H.NotStarted?(this.status=H.Stopped,this):(this.mailbox.enqueue({type:F}),this))}stop(){if(this._parent)throw new Error("A non-root actor cannot be stopped directly.");return this._stop()}_complete(){for(const t of this.observers)t.complete?.();this.observers.clear()}_error(t){for(const e of this.observers)e.error?.(t);this.observers.clear()}_stopProcedure(){if(this.status!==H.Running)return this;for(const t of Object.keys(this.delayedEventsMap))this.clock.clearTimeout(this.delayedEventsMap[t]);return this.mailbox.clear(),this.mailbox=new B(this._process.bind(this)),this.status=H.Stopped,this.system._unregister(this),this}send(t){if("string"==typeof t)throw new Error(`Only event objects may be sent to actors; use .send({ type: "${t}" }) instead`);if(this.status!==H.Stopped){if(this.status!==H.Running&&!this.options.deferEvents)throw new Error(`Event "${t.type}" was sent to uninitialized actor "${this.id}". Make sure .start() is called for this actor, or set { deferEvents: true } in the actor options.\nEvent: ${JSON.stringify(t)}`);this.mailbox.enqueue(t)}}delaySend(t){this.delayedEventsMap[t.params.id]=this.clock.setTimeout((()=>{"to"in t.params&&t.params.to?t.params.to.send(t.params.event):this.send(t.params.event)}),t.params.delay)}cancel(t){this.clock.clearTimeout(this.delayedEventsMap[t]),delete this.delayedEventsMap[t]}attachDevTools(){const{devTools:t}=this.options;if(t){("function"==typeof t?t:X)(this)}}toJSON(){return{id:this.id}}getPersistedState(){return this.logic.getPersistedState?.(this._state)}[U](){return this}getSnapshot(){return this.logic.getSnapshot?this.logic.getSnapshot(this._state):this._state}}function Z(t,e){return new Y(t,e)}function tt(t){return D({type:d,params:t},((e,{state:n,actorContext:s})=>{const i=d,{id:o,src:r}=t;let a;const c=N(n.machine.implementations.actors[r]);if(c){const u="input"in t?t.input:c.input,d=Z(c.src,{id:o,src:r,parent:s?.self,systemId:t.systemId,input:"function"==typeof u?u({context:n.context,event:e,self:s?.self}):u});a={type:i,params:{...t,ref:d}}}else a={type:i,params:t};const u=a.params.ref,h=Ut(n,{children:{...n.children,[o]:u}});return a.execute=t=>{const e=t.self,{id:n,ref:s}=a.params;s&&t.defer((()=>{if(u.status!==H.Stopped)try{u.start?.()}catch(t){return void e.send(Zt(n,t))}}))},[h,a]}))}function et(t,e,n,s){const{machine:i}=s,o=i?.implementations?.guards?.[t.type]??t.predicate;if(!o)throw new Error(`Guard '${t.type}' is not implemented.'.`);return o({context:e,event:n,state:s,guard:t,evaluate:et})}function nt(t,e){if(C(t)){const n=e?.(t);return j(n)?{type:t,predicate:n,params:{type:t}}:n||{type:t,params:{type:t}}}if(j(t))return{type:t.name,predicate:t,params:{type:t.name,name:t.name}};const n=e?.(t.type);return j(n)?{type:t.type,params:t.params||t,children:t.children?.map((t=>nt(t,e))),predicate:e?.(t.type)||t.predicate}:n||{type:t.type,params:t.params||t,children:t.children?.map((t=>nt(t,e))),predicate:t.predicate}}const st=t=>"atomic"===t.type||"final"===t.type;function it(t){return Object.values(t.states).filter((t=>"history"!==t.type))}function ot(t,e){const n=[];let s=t.parent;for(;s&&s!==e;)n.push(s),s=s.parent;return n}function rt(t){const e=new Set(t),n=new Set(t),s=ct(n);for(const t of e)if("compound"!==t.type||s.get(t)&&s.get(t).length){if("parallel"===t.type)for(const e of it(t))if("history"!==e.type&&!n.has(e))for(const t of gt(e))n.add(t)}else gt(t).forEach((t=>n.add(t)));for(const t of n){let e=t.parent;for(;e;)n.add(e),e=e.parent}return n}function at(t,e){const n=e.get(t);if(!n)return{};if("compound"===t.type){const t=n[0];if(!t)return{};if(st(t))return t.key}const s={};for(const t of n)s[t.key]=at(t,e);return s}function ct(t){const e=new Map;for(const n of t)e.has(n)||e.set(n,[]),n.parent&&(e.has(n.parent)||e.set(n.parent,[]),e.get(n.parent).push(n));return e}function ut(t,e){return at(t,ct(rt(e)))}function dt(t,e=t[0].machine.root){return"compound"===e.type?it(e).some((e=>"final"===e.type&&t.includes(e))):"parallel"===e.type&&it(e).every((e=>dt(t,e)))}const ht=t=>"#"===t[0];function ft(t){const n=t.config.after;if(!n)return[];const s=(n,s)=>{const i=function(t,n){const s=n?`#${n}`:"";return`${e.After}(${t})${s}`}(j(n)?`${t.id}:delay[${s}]`:n,t.id);return t.entry.push(Gt({type:i},{delay:n})),t.exit.push(z(i)),i};return(O(n)?n.map(((t,e)=>{const n=s(t.delay,e);return{...t,event:n}})):Object.keys(n).flatMap(((t,e)=>{const i=n[t],o=C(i)?{target:i}:i,r=isNaN(+t)?t:+t,a=s(r,e);return I(o).map((t=>({...t,event:a,delay:r})))}))).map((e=>{const{delay:n}=e;return{...pt(t,e),delay:n}}))}function pt(t,e){const n=M(e.target),s=e.reenter??!1,{guards:i}=t.machine.implementations,o=lt(t,n),r={...e,actions:Ht(I(e.actions)),guard:e.guard?nt(e.guard,(t=>i[t])):void 0,target:o,source:t,reenter:s,eventType:e.event,toJSON:()=>({...r,source:`#${t.id}`,target:o?o.map((t=>`#${t.id}`)):void 0})};return r}function lt(t,e){if(void 0!==e)return e.map((e=>{if(!C(e))return e;if(ht(e))return t.machine.getStateNodeById(e);const n=e[0]===m;if(n&&!t.parent)return xt(t,e.slice(1));const s=n?t.key+e:e;if(!t.parent)throw new Error(`Invalid target: "${e}" is not a valid target from the root node. Did you mean ".${e}"?`);try{return xt(t.parent,s)}catch(e){throw new Error(`Invalid transition definition for state node '${t.id}':\n${e.message}`)}}))}function yt(t){const e=M(t.target);return e?e.map((e=>"string"==typeof e?xt(t.parent,e):e)):t.parent.initial.target}function mt(t){return"history"===t.type}function gt(t){const e=new Set;return function n(s){if(!e.has(s))if(e.add(s),"compound"===s.type)for(const i of s.initial.target){for(const n of ot(i,t))e.add(n);n(i)}else if("parallel"===s.type)for(const t of it(s))n(t)}(t),[...e]}function vt(t,e){if(ht(e))return t.machine.getStateNodeById(e);if(!t.states)throw new Error(`Unable to retrieve child state '${e}' from '${t.id}'; no child states exist.`);const n=t.states[e];if(!n)throw new Error(`Child state '${e}' does not exist on '${t.id}'`);return n}function xt(t,e){if("string"==typeof e&&ht(e))try{return t.machine.getStateNodeById(e)}catch(t){}const n=b(e).slice();let s=t;for(;n.length;){const t=n.shift();if(!t.length)break;s=vt(s,t)}return s}function _t(t,e){const n=e instanceof Bt?e.value:S(e);if(C(n))return[t,t.states[n]];const s=Object.keys(n),i=s.map((e=>vt(t,e))).filter(Boolean);return[t.machine.root,t].concat(i,s.reduce(((e,s)=>{const i=vt(t,s);if(!i)return e;const o=_t(i,n[s]);return e.concat(o)}),[]))}function bt(t,e,n,s){return C(e)?function(t,e,n,s){const i=vt(t,e).next(n,s);return i&&i.length?i:t.next(n,s)}(t,e,n,s):1===Object.keys(e).length?function(t,e,n,s){const i=Object.keys(e),o=bt(vt(t,i[0]),e[i[0]],n,s);return o&&o.length?o:t.next(n,s)}(t,e,n,s):function(t,e,n,s){const i=[];for(const o of Object.keys(e)){const r=e[o];if(!r)continue;const a=bt(vt(t,o),r,n,s);a&&i.push(...a)}return i.length?i:t.next(n,s)}(t,e,n,s)}function St(t){return Object.keys(t.states).map((e=>t.states[e])).filter((t=>"history"===t.type))}function wt(t,e){let n=t;for(;n.parent&&n.parent!==e;)n=n.parent;return n.parent===e}function $t(t){const e=[];let n=t.parent;for(;n;)e.unshift(n),n=n.parent;return e}function kt(t,e){const n=new Set(t),s=new Set(e);for(const t of n)if(s.has(t))return!0;for(const t of s)if(n.has(t))return!0;return!1}function Et(t,e,n){const s=new Set;for(const i of t){let t=!1;const o=new Set;for(const r of s)if(kt(Ot([i],e,n),Ot([r],e,n))){if(!wt(i.source,r.source)){t=!0;break}o.add(r)}if(!t){for(const t of o)s.delete(t);s.add(i)}}return Array.from(s)}function It(t,e){if(!t.target)return[];const n=new Set;for(const s of t.target)if(mt(s))if(e[s.id])for(const t of e[s.id])n.add(t);else for(const t of It({target:yt(s)},e))n.add(t);else n.add(s);return[...n]}function Tt(t,e){const n=It(t,e);if(!n)return null;if(!t.reenter&&"parallel"!==t.source.type&&n.every((e=>wt(e,t.source))))return t.source;return function(t){const[e]=t;let n=$t(e),s=[];for(const e of t){const t=$t(e);s=n.filter((e=>t.includes(e))),n=s,s=[]}return n[n.length-1]}(n.concat(t.source))}function Ot(t,e,n){const s=new Set;for(const i of t)if(i.target?.length){const t=Tt(i,n);for(const n of e)wt(n,t)&&s.add(n)}return[...s]}function jt(t,e,n,s,i){const o=new Set(e.configuration);if(!t.length)return e;const r=function(t,e,n,s,i,o){const r=[],a={...e.historyValue},c=Et(t,n,a),u=[...e._internalQueue];o||function(t,e,n,s){const i=Ot(t,e,n);i.sort(((t,e)=>e.order-t.order));for(const t of i)for(const s of St(t)){let i;i="deep"===s.history?e=>st(e)&&wt(e,t):e=>e.parent===t,n[s.id]=Array.from(e).filter(i)}for(const t of i)s.push(...t.exit,...t.invoke.map((t=>Wt(t.id)))),e.delete(t)}(c,n,a,r);r.push(...c.flatMap((t=>t.actions))),Ct(s,c,n,r,u,e,a,o);const d=[...n],h=dt(d);if(h){const t=d.sort(((t,e)=>e.order-t.order)).flatMap((t=>t.exit));r.push(...t)}try{const t=Nt(r,s,e,i),n=h?function(t,e,n){const s=t[0].machine,i=t.find((t=>"final"===t.type&&t.parent===s.root));return i&&i.output?T(i.output,e,n):void 0}(d,t.context,s):void 0;return u.push(...t._internalQueue),Ut(e,{configuration:d,historyValue:a,_internalQueue:u,context:t.context,done:h,output:n,children:t.children})}catch(t){throw t}}(t,e,o,s,n,i);return Ut(r,{value:{}})}function Ct(t,e,n,s,i,o,r,a){const c=new Set,u=new Set;Pt(e,r,u,c),a&&u.add(o.machine.root);for(const e of[...c].sort(((t,e)=>t.order-e.order))){n.add(e);for(const t of e.invoke)s.push(tt(t));if(s.push(...e.entry),u.has(e))for(const t of u){const e=t.initial.actions;s.push(...e)}if("final"===e.type){const s=e.parent;if(!s.parent)continue;if(i.push(Kt(s.id,e.output?T(e.output,o.context,t):void 0)),s.parent){const t=s.parent;"parallel"===t.type&&it(t).every((t=>dt([...n],t)))&&i.push(Kt(t.id))}}}}function Pt(t,e,n,s){for(const i of t){for(const t of i.target||[])Mt(t,e,n,s);const t=Tt(i,e),o=It(i,e);for(const i of o)At(i,t,s,e,n)}}function Mt(t,e,n,s){if(mt(t))if(e[t.id]){const i=e[t.id];for(const t of i)Mt(t,e,n,s);for(const o of i){At(o,t.parent,s,e,n);for(const t of n)n.add(t)}}else{const i=yt(t);for(const t of i)Mt(t,e,n,s);for(const o of i){At(o,t,s,e,n);for(const t of n)n.add(t)}}else if(s.add(t),"compound"===t.type){n.add(t);const i=t.initial.target;for(const t of i)Mt(t,e,n,s);for(const o of i)At(o,t,s,e,n)}else if("parallel"===t.type)for(const i of it(t).filter((t=>!mt(t))))[...s].some((t=>wt(t,i)))||Mt(i,e,n,s)}function At(t,e,n,s,i){const o=ot(t,e);for(const t of o)if(n.add(t),"parallel"===t.type)for(const e of it(t).filter((t=>!mt(t))))[...n].some((t=>wt(t,e)))||Mt(e,s,i,n)}function Nt(t,e,n,s){const{machine:o}=n,r=[];let a=n;function c(t){s?.self.status===H.Running?t.execute?.(s):s?.defer((()=>t.execute?.(s)))}function u(t){const n=function(t,e){if(R(t))return t;const n=e[t.type];return"function"==typeof n?D({type:"xstate.function",params:t.params??{}},((e,{state:s})=>{const i={type:t.type,params:t.params,execute:t=>n({context:s.context,event:e,action:i,system:t.system,self:t.self})};return[s,i]})):n||t}(t,o.implementations.actions);if(R(n)){const[o,d]=n.resolve(e,{state:a,action:t,actorContext:s}),h=d.params?.actions;return a=o,d.type===i&&"number"!=typeof d.params.delay&&r.push(d),d.type!==y&&c(d),void Ht(h).forEach(u)}c(n)}for(const e of t)u(e);return Ut(a,{_internalQueue:r.map((t=>t.params.event))})}function Dt(t,e,n){let s=t;const i=[];if(e.type===F)return s=Rt(e,s,n),i.push(s),{state:s,microstates:i};let o=e;if(o.type!==u){s=jt(Jt(o,s),t,n,o,!1),i.push(s)}for(;!s.done;){let t=Qt(s,o);if(t.length)s=jt(t,s,n,o,!1),i.push(s);else{if(!s._internalQueue.length)break;o=s._internalQueue[0];s=jt(Jt(o,s),s,n,o,!1),s._internalQueue.shift(),i.push(s)}}return s.done&&Rt(o,s,n),{state:s,microstates:i}}function Rt(t,e,n){const s=[];for(const t of e.configuration.sort(((t,e)=>e.order-t.order)))s.push(...t.exit);for(const t of Object.values(e.children))s.push(Wt(t));return Nt(s,t,e,n)}function Jt(t,e){return e.machine.getTransitionData(e,t)}function Qt(t,e){const n=new Set,s=t.configuration.filter(st);for(const i of s)t:for(const s of[i].concat(ot(i,null)))if(s.always)for(const i of s.always)if(void 0===i.guard||et(i.guard,t.context,e,t)){n.add(i);break t}return Et(Array.from(n),new Set(t.configuration),t.historyValue)}function Vt(t,e){return ut(t,[...rt(_t(t,e))])}function zt(t){const e=[],n=t.initial,s=new Set;Pt([n],{},new Set([t]),s);for(const t of[...s].sort(((t,e)=>t.order-e.order)))e.push(t);return e}class Bt{static from(t,e={},n){if(t instanceof Bt)return t.context!==e?new Bt({value:t.value,context:e,meta:{},configuration:[],children:{}},n):t;const s=rt(_t(n.root,t));return new Bt({value:t,context:e,meta:void 0,configuration:Array.from(s),children:{}},n)}constructor(t,e){this.machine=e,this.tags=void 0,this.value=void 0,this.done=void 0,this.output=void 0,this.context=void 0,this.historyValue={},this._internalQueue=void 0,this.configuration=void 0,this.children=void 0,this.context=t.context,this._internalQueue=t._internalQueue??[],this.historyValue=t.historyValue||{},this.matches=this.matches.bind(this),this.toStrings=this.toStrings.bind(this),this.configuration=t.configuration??Array.from(rt(_t(e.root,t.value))),this.children=t.children,this.value=ut(e.root,this.configuration),this.tags=new Set(k(this.configuration.map((t=>t.tags)))),this.done=t.done??!1,this.output=t.output}toStrings(t=this.value){if(C(t))return[t];const e=Object.keys(t);return e.concat(...e.map((e=>this.toStrings(t[e]).map((t=>e+m+t)))))}toJSON(){const{configuration:t,tags:e,machine:n,...s}=this;return{...s,tags:Array.from(e),meta:this.meta}}matches(t){return _(t,this.value)}hasTag(t){return this.tags.has(t)}can(t){const e=this.machine.getTransitionData(this,t);return!!e?.length&&e.some((t=>void 0!==t.target||t.actions.length))}get nextEvents(){return V(this,"nextEvents",(()=>[...new Set(k([...this.configuration.map((t=>t.ownEvents))]))]))}get meta(){return this.configuration.reduce(((t,e)=>(void 0!==e.meta&&(t[e.id]=e.meta),t)),{})}}function Ut(t,e={}){return new Bt({...t,...e},t.machine)}function Wt(t){const e=t;return D({type:s,params:{actor:e}},((t,{state:n,actorContext:s})=>{const i=j(e)?e({context:n.context,event:t,self:s?.self??{},system:s?.system}):e,o="string"==typeof i?n.children[i]:i;let r=n.children;return o&&(r={...r},delete r[o.id]),[Ut(n,{children:r}),{type:"xstate.stop",params:{actor:o},execute:t=>{o&&(o.status===H.Running?t.defer((()=>{t.stopChild(o)})):t.stopChild(o))}}]}))}const qt=({context:t,event:e})=>({context:t,event:e});function Lt(t,{machine:e,context:n},s,i){return(o,r)=>{const a=((o,r={})=>{const{systemId:a}=r;if("string"==typeof o){const c=N(e.implementations.actors[o]);if(!c)throw new Error(`Actor logic '${o}' not implemented in machine '${e.id}'`);const u="input"in r?r.input:c.input,d=Z(c.src,{id:r.id,parent:t.self,input:"function"==typeof u?u({context:n,event:s,self:t.self}):u,systemId:a});return i[d.id]=d,d}return Z(o,{id:r.id,parent:t.self,input:r.input,systemId:a})})(o,r);return i[a.id]=a,t.defer((()=>{if(a.status!==H.Stopped)try{a.start?.()}catch(e){return void t.self.send(Zt(a.id,e))}})),a}}function Ft(t){return D({type:a,params:{assignment:t}},((e,{state:n,action:s,actorContext:i})=>{if(!n.context)throw new Error("Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.");const o={},r={context:n.context,event:e,action:s,spawn:Lt(i,n,e,o),self:i?.self??{},system:i?.system};let c={};if(j(t))c=t(r);else for(const e of Object.keys(t)){const n=t[e];c[e]=j(n)?n(r):n}const u=Object.assign({},n.context,c);return[Ut(n,{context:u,children:Object.keys(o).length?{...n.children,...o}:n.children}),{type:a,params:{context:u}}]}))}function Gt(t,e){return D({type:i,params:{delay:e?e.delay:void 0,event:t,id:e&&void 0!==e.id?e.id:"function"==typeof t?t.name:t.type}},((n,{state:s,actorContext:o})=>{const r={delay:e?e.delay:void 0,event:t,id:e&&void 0!==e.id?e.id:"function"==typeof t?t.name:t.type},a={context:s.context,event:n,self:o?.self??{},system:o?.system},c=s.machine.implementations.delays;if("string"==typeof t)throw new Error(`Only event objects may be used with raise; use raise({ type: "${t}" }) instead`);const u="function"==typeof t?t(a):t;let d;if("string"==typeof r.delay){const t=c&&c[r.delay];d="function"==typeof t?t(a):t}else d="function"==typeof r.delay?r.delay(a):r.delay;const h={type:i,params:{...r,event:u,delay:d},execute:t=>{"number"!=typeof h.params.delay||t.self.delaySend(h)}};return[s,h]}))}function Xt(t){if(R(t))return t;if("string"==typeof t)return{type:t,params:{}};if("function"==typeof t){const e="xstate.function";return D({type:e,params:{}},((n,{state:s})=>{const i={type:e,params:{function:t},execute:e=>t({context:s.context,event:n,action:i,self:e.self,system:e.system})};return[s,i]}))}return t}const Ht=t=>{if(!t)return[];return(O(t)?t:[t]).map(Xt)};function Kt(t,n){const s=`${e.DoneState}.${t}`,i={type:s,output:n,toString:()=>s};return i}function Yt(t,n){const s=`${e.DoneInvoke}.${t}`,i={type:s,output:n,toString:()=>s};return i}function Zt(t,n){const s=`${e.ErrorPlatform}.${t}`,i={type:s,data:n,toString:()=>s};return i}const te={};class ee{constructor(t,e){if(this.config=t,this.key=void 0,this.id=void 0,this.type=void 0,this.path=void 0,this.states=void 0,this.history=void 0,this.entry=void 0,this.exit=void 0,this.parent=void 0,this.machine=void 0,this.meta=void 0,this.output=void 0,this.order=-1,this.description=void 0,this.tags=[],this.transitions=void 0,this.always=void 0,this.parent=e._parent,this.key=e._key,this.machine=e._machine,this.path=this.parent?this.parent.path.concat(this.key):[],this.id=this.config.id||[this.machine.id,...this.path].join(m),this.type=this.config.type||(this.config.states&&Object.keys(this.config.states).length?"compound":this.config.history?"history":"atomic"),this.description=this.config.description,this.order=this.machine.idMap.size,this.machine.idMap.set(this.id,this),this.states=this.config.states?$(this.config.states,((t,e)=>new ee(t,{_parent:this,_key:e,_machine:this.machine}))):te,"compound"===this.type&&!this.config.initial)throw new Error(`No initial state specified for compound state node "#${this.id}". Try adding { initial: "${Object.keys(this.states)[0]}" } to the state config.`);this.history=!0===this.config.history?"shallow":this.config.history||!1,this.entry=Ht(this.config.entry),this.exit=Ht(this.config.exit),this.meta=this.config.meta,this.output="final"===this.type?this.config.output:void 0,this.tags=I(t.tags)}_initialize(){this.transitions=function(t){const e=[];if(Array.isArray(t.config.on))e.push(...t.config.on);else if(t.config.on){const{[x]:n=[],...s}=t.config.on;for(const t of Object.keys(s)){if(t===v)throw new Error('Null events ("") cannot be specified as a transition key. Use `always: { ... }` instead.');const n=P(t,s[t]);e.push(...n)}e.push(...P(x,n))}const n=t.config.onDone?P(String(Kt(t.id)),t.config.onDone):[],s=t.invoke.flatMap((t=>{const e=[];return t.onDone&&e.push(...P(`done.invoke.${t.id}`,t.onDone)),t.onError&&e.push(...P(`error.platform.${t.id}`,t.onError)),t.onSnapshot&&e.push(...P(`xstate.snapshot.${t.id}`,t.onSnapshot)),e})),i=t.after,o=[...n,...s,...e].flatMap((e=>I(e).map((e=>pt(t,e)))));for(const t of i)o.push(t);return o}(this),this.config.always&&(this.always=P(v,this.config.always).map((t=>pt(this,t)))),Object.keys(this.states).forEach((t=>{this.states[t]._initialize()}))}get definition(){return{id:this.id,key:this.key,version:this.machine.version,type:this.type,initial:this.initial?{target:this.initial.target,source:this,actions:this.initial.actions,eventType:null,reenter:!1,toJSON:()=>({target:this.initial.target.map((t=>`#${t.id}`)),source:`#${this.id}`,actions:this.initial.actions,eventType:null})}:void 0,history:this.history,states:$(this.states,(t=>t.definition)),on:this.on,transitions:this.transitions,entry:this.entry,exit:this.exit,meta:this.meta,order:this.order||-1,output:this.output,invoke:this.invoke,description:this.description,tags:this.tags}}toJSON(){return this.definition}get invoke(){return V(this,"invoke",(()=>I(this.config.invoke).map(((t,e)=>{const n=`${this.id}:invocation[${e}]`;const s=function(t,e){if("object"==typeof t){if("src"in t)return t;if("transition"in t)return{id:e,src:t}}return{id:e,src:t}}(t,n),i=s.id||n,o=s.src,{systemId:r}=s,a=C(o)||"type"in o?o:i;return this.machine.implementations.actors[i]||"string"==typeof o||"type"in o||(this.machine.implementations.actors={...this.machine.implementations.actors,[i]:o}),{type:d,...s,src:a,id:i,systemId:r,toJSON(){const{onDone:t,onError:e,...n}=s;return{...n,type:d,src:a,id:i}}}}))))}get on(){return V(this,"on",(()=>this.transitions.reduce(((t,e)=>(t[e.eventType]=t[e.eventType]||[],t[e.eventType].push(e),t)),{})))}get after(){return V(this,"delayedTransitions",(()=>ft(this)))}get initial(){return V(this,"initial",(()=>function(t,e){if(C(e)||O(e)){const n=I(e).map((e=>{const n=C(e)?ht(e)?t.machine.getStateNodeById(e):t.states[e]:e;if(!n)throw new Error(`Initial state node "${e}" not found on parent state node #${t.id}`);if(!wt(n,t))throw new Error(`Invalid initial target: state node #${n.id} is not a descendant of #${t.id}`);return n})),s=lt(t,n),i={source:t,actions:[],eventType:null,reenter:!1,target:s,toJSON:()=>({...i,source:`#${t.id}`,target:s?s.map((t=>`#${t.id}`)):void 0})};return i}return pt(t,{target:I(e.target).map((t=>C(t)?ht(t)?t:`${m}${t}`:t)),actions:e.actions,event:null})}(this,this.config.initial||[])))}next(t,e){const n=e.type,s=[];let i;const o=V(this,`candidates-${n}`,(()=>{return t=n,this.transitions.filter((e=>{const{eventType:n}=e;if(n===t)return!0;if(n===x)return!0;if(!n.endsWith(".*"))return!1;const s=n.split("."),i=t.split(".");for(let t=0;t<s.length;t++){const e=s[t],n=i[t];if("*"===e)return t===s.length-1;if(e!==n)return!1}return!0}));var t}));for(const r of o){const{guard:o}=r,a=t.context;let c=!1;try{c=!o||et(o,a,e,t)}catch(t){throw new Error(`Unable to evaluate guard '${o.type}' in transition for event '${n}' in state node '${this.id}':\n${t.message}`)}if(c){s.push(...r.actions),i=r;break}}return i?[i]:void 0}get target(){if("history"===this.type){return this.config.target}}get stateIds(){const t=k(Object.keys(this.states).map((t=>this.states[t].stateIds)));return[this.id].concat(t)}get events(){return V(this,"events",(()=>{const{states:t}=this,e=new Set(this.ownEvents);if(t)for(const n of Object.keys(t)){const s=t[n];if(s.states)for(const t of s.events)e.add(`${t}`)}return Array.from(e)}))}get ownEvents(){const t=new Set(this.transitions.filter((t=>!(!t.target&&!t.actions.length&&!t.reenter))).map((t=>t.eventType)));return Array.from(t)}}class ne{constructor(t,e){this.config=t,this.version=void 0,this.implementations=void 0,this.types=void 0,this.__xstatenode=!0,this.idMap=new Map,this.root=void 0,this.id=void 0,this.states=void 0,this.events=void 0,this.__TContext=void 0,this.__TEvent=void 0,this.__TAction=void 0,this.__TActorMap=void 0,this.__TResolvedTypesMeta=void 0,this.id=t.id||"(machine)",this.implementations={actors:e?.actors??{},actions:e?.actions??{},delays:e?.delays??{},guards:e?.guards??{}},this.version=this.config.version,this.types=this.config.types??{},this.transition=this.transition.bind(this),this.root=new ee(t,{_key:this.id,_machine:this}),this.root._initialize(),this.states=this.root.states,this.events=this.root.events}provide(t){const{actions:e,guards:n,actors:s,delays:i}=this.implementations;return new ne(this.config,{actions:{...e,...t.actions},guards:{...n,...t.guards},actors:{...s,...t.actors},delays:{...i,...t.delays}})}resolveState(t){const e=rt(_t(this.root,t.value)),n=Array.from(e);return this.createState({...t,value:Vt(this.root,t.value),configuration:n,done:dt(n)})}resolveStateValue(t,...[e]){const n=Vt(this.root,t);return this.resolveState(Bt.from(n,e,this))}transition(t,e,n){if(function(t){return"string"==typeof t.type&&(t.type===h||t.type.startsWith(f))}(e)&&!t.nextEvents.some((t=>t===e.type)))throw e.data;const{state:s}=Dt(t,e,n);return s}microstep(t,e,n){return Dt(t,e,n).microstates}getTransitionData(t,e){return bt(this.root,t.value,t,e)||[]}getPreInitialState(t,e){const{context:n}=this.config,s=this.resolveState(this.createState({value:{},context:"function"!=typeof n&&n?n:{},meta:void 0,configuration:zt(this.root),children:{}}));if("function"==typeof n){return Nt([Ft((({spawn:t,event:e})=>n({spawn:t,input:e.input})))],e,s,t)}return s}getInitialState(t,e){const n=function(t){return{type:u,input:t}}(e),s=this.getPreInitialState(t,n),i=jt([{target:[...s.configuration].filter(st),source:this.root,reenter:!0,actions:[],eventType:null,toJSON:null}],s,t,n,!0),{state:o}=Dt(i,n,t);return o}start(t,e){Object.values(t.children).forEach((t=>{if(0===t.status)try{t.start?.()}catch(n){e.self.send(Zt(t.id,n))}}))}getStateNodeById(t){const e=t.split(m),n=e.slice(1),s=ht(e[0])?e[0].slice(1):e[0],i=this.idMap.get(s);if(!i)throw new Error(`Child state node '#${s}' does not exist on machine '${this.id}'`);return xt(i,n)}get definition(){return this.root.definition}toJSON(){return this.definition}getPersistedState(t){return function(t){const{configuration:e,tags:n,machine:s,children:i,...o}=t,r={};for(const t in i)r[t]={state:i[t].getPersistedState?.(),src:i[t].src};return{...o,children:r}}(t)}createState(t){return t instanceof Bt?t:new Bt(t,this)}getStatus(t){return t.done?{status:"done",data:t.output}:{status:"active"}}restoreState(t,e){const n={};Object.keys(t.children).forEach((s=>{const i=t.children[s],o=i.state,r=i.src,a=r?N(this.implementations.actors[r])?.src:void 0;if(!a)return;const c=a.restoreState?.(o,e),u=Z(a,{id:s,state:c});n[s]=u}));const s=this.createState(new Bt({...t,children:n},this));return s.configuration.forEach((t=>{t.invoke&&t.invoke.forEach((t=>{const{id:s,src:i}=t;if(n[s])return;const o=N(this.implementations.actors[i]);if(o){const i=Z(o.src,{id:s,parent:e?.self,input:"input"in t?t.input:o.input});n[s]=i}}))})),s}}const se={timeout:1e4};t.ActionTypes=e,t.Interpreter=Y,t.InterpreterStatus=H,t.SimulatedClock=class{constructor(){this.timeouts=new Map,this._now=0,this._id=0}now(){return this._now}getId(){return this._id++}setTimeout(t,e){const n=this.getId();return this.timeouts.set(n,{start:this.now(),timeout:e,fn:t}),n}clearTimeout(t){this.timeouts.delete(t)}set(t){if(this._now>t)throw new Error("Unable to travel back in time");this._now=t,this.flushTimeouts()}flushTimeouts(){[...this.timeouts].sort((([t,e],[n,s])=>{const i=e.start+e.timeout;return s.start+s.timeout>i?-1:1})).forEach((([t,e])=>{this.now()-e.start>=e.timeout&&(this.timeouts.delete(t),e.fn.call(null))}))}increment(t){this._now+=t,this.flushTimeouts()}},t.SpecialTargets=n,t.State=Bt,t.StateMachine=ne,t.StateNode=ee,t.and=function(t){return{type:"xstate.boolean",params:{op:"and"},children:t.map((t=>nt(t))),predicate:({evaluate:t,guard:e,context:n,event:s,state:i})=>e.children.every((e=>t(e,n,s,i)))}},t.assign=Ft,t.cancel=z,t.choose=function(t){return D({type:l,params:{guards:t}},((e,{state:n})=>{const s=t.find((t=>{const s=t.guard&&nt(t.guard,(t=>n.machine.implementations.guards[t]));return!s||et(s,n.context,e,n)}))?.actions;return[n,{type:l,params:{actions:Ht(s)}}]}))},t.createMachine=function(t,e){return new ne(t,e)},t.doneInvoke=Yt,t.forwardTo=function(t,e){return J(t,(({event:t})=>t),e)},t.fromCallback=function(t){return{config:t,start:(t,{self:e})=>{e.send({type:L})},transition:(e,n,{self:s,id:i,system:o})=>{if(n.type===L){const n=t=>{e.canceled||s._parent?.send(t)},a=t=>{e.receivers.add(t)};return e.dispose=t(n,a,{input:e.input,system:o}),((r=e.dispose)instanceof Promise||null!==r&&(j(r)||"object"==typeof r)&&j(r.then))&&e.dispose.then((t=>{s._parent?.send(Yt(i,t)),e.canceled=!0}),(t=>{e.canceled=!0,s._parent?.send(Zt(i,t))})),e}var r;return n.type===F?(e.canceled=!0,j(e.dispose)&&e.dispose(),e):(function(t){return t.type===L||t.type===F}(n)||e.receivers.forEach((t=>t(n))),e)},getInitialState:(t,e)=>({canceled:!1,receivers:new Set,dispose:void 0,input:e}),getSnapshot:()=>{},getPersistedState:({input:t})=>t}},t.fromEventObservable=function(t){const e="$$xstate.error",n="$$xstate.complete";return{config:t,transition:(t,s)=>{if("active"!==t.status)return t;switch(s.type){case e:return{...t,status:"error",input:void 0,data:s.data,subscription:void 0};case n:return{...t,status:"done",input:void 0,subscription:void 0};case F:return t.subscription.unsubscribe(),{...t,status:"canceled",input:void 0,subscription:void 0};default:return t}},getInitialState:(t,e)=>({subscription:void 0,status:"active",data:void 0,input:e}),start:(s,{self:i,system:o})=>{"done"!==s.status&&(s.subscription=t({input:s.input,system:o}).subscribe({next:t=>{i._parent?.send(t)},error:t=>{i.send({type:e,data:t})},complete:()=>{i.send({type:n})}}))},getSnapshot:t=>{},getPersistedState:({status:t,data:e,input:n})=>({status:t,data:e,input:n}),getStatus:t=>t,restoreState:t=>({...t,subscription:void 0})}},t.fromObservable=function(t){const e="$$xstate.next",n="$$xstate.error",s="$$xstate.complete";return{config:t,transition:(t,i,{self:o,id:r,defer:a})=>{if("active"!==t.status)return t;switch(i.type){case e:return a((()=>{o._parent?.send({type:`xstate.snapshot.${r}`,data:i.data})})),{...t,data:i.data};case n:return{...t,status:"error",input:void 0,data:i.data,subscription:void 0};case s:return{...t,status:"done",input:void 0,subscription:void 0};case F:return t.subscription.unsubscribe(),{...t,status:"canceled",input:void 0,subscription:void 0};default:return t}},getInitialState:(t,e)=>({subscription:void 0,status:"active",data:void 0,input:e}),start:(i,{self:o,system:r})=>{"done"!==i.status&&(i.subscription=t({input:i.input,system:r}).subscribe({next:t=>{o.send({type:e,data:t})},error:t=>{o.send({type:n,data:t})},complete:()=>{o.send({type:s})}}))},getSnapshot:t=>t.data,getPersistedState:({status:t,data:e,input:n})=>({status:t,data:e,input:n}),getStatus:t=>t,restoreState:t=>({...t,subscription:void 0})}},t.fromPromise=function(t){return{config:t,transition:(t,e)=>{if("active"!==t.status)return t;switch(e.type){case W:return{...t,status:"done",data:e.data,input:void 0};case q:return{...t,status:"error",data:e.data,input:void 0};case F:return{...t,status:"canceled",input:void 0};default:return t}},start:(e,{self:n,system:s})=>{if("active"!==e.status)return;Promise.resolve(t({input:e.input,system:s})).then((t=>{"active"===n._state.status&&n.send({type:W,data:t})}),(t=>{"active"===n._state.status&&n.send({type:q,data:t})}))},getInitialState:(t,e)=>({status:"active",data:void 0,input:e}),getSnapshot:t=>t.data,getStatus:t=>t,getPersistedState:t=>t,restoreState:t=>t}},t.fromTransition=function(t,e){return{config:t,transition:(e,n,s)=>t(e,n,s),getInitialState:(t,n)=>"function"==typeof e?e({input:n}):e,getSnapshot:t=>t,getPersistedState:t=>t,restoreState:t=>t}},t.getStateNodes=_t,t.interpret=Z,t.log=function(t=qt,e){return D({type:c,params:{label:e,expr:t}},((n,{state:s,actorContext:i})=>{const o="function"==typeof t?t({context:s.context,event:n,self:i?.self??{},system:i?.system}):t;return[s,{type:"xstate.log",params:{label:e,value:o},execute:t=>{e?t.logger?.(e,o):t.logger?.(o)}}]}))},t.mapState=function(t,e){let n;for(const s of Object.keys(t))_(s,e)&&(!n||e.length>n.length)&&(n=s);return t[n]},t.matchesState=_,t.not=function(t){return{type:"xstate.boolean",params:{op:"not"},children:[nt(t)],predicate:({evaluate:t,guard:e,context:n,event:s,state:i})=>!t(e.children[0],n,s,i)}},t.or=function(t){return{type:"xstate.boolean",params:{op:"or"},children:t.map((t=>nt(t))),predicate:({evaluate:t,guard:e,context:n,event:s,state:i})=>e.children.some((e=>t(e,n,s,i)))}},t.pathToStateValue=w,t.pure=function(t){return D({type:y,params:{get:t}},((e,{state:n})=>[n,{type:y,params:{actions:I(Ht(t({context:n.context,event:e})))??[]}}]))},t.raise=Gt,t.sendParent=function(t,e){return J(n.Parent,t,e)},t.sendTo=J,t.stateIn=function(t){return{type:"xstate.guard:in",params:{stateValue:t},predicate:({state:e})=>C(t)&&ht(t)?e.configuration.some((e=>e.id===t.slice(1))):e.matches(t)}},t.stop=Wt,t.toObserver=A,t.waitFor=function(t,e,n){const s={...se,...n};return new Promise(((n,i)=>{let o=!1;const r=s.timeout===1/0?void 0:setTimeout((()=>{u.unsubscribe(),i(new Error(`Timeout of ${s.timeout} ms exceeded`))}),s.timeout),a=()=>{clearTimeout(r),o=!0,u?.unsubscribe()};function c(t){e(t)&&(a(),n(t))}let u;c(t.getSnapshot()),o||(u=t.subscribe({next:c,error:t=>{a(),i(t)},complete:()=>{a(),i(new Error("Actor terminated without satisfying predicate"))}}),o&&u.unsubscribe())}))},Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
2
2
|
//# sourceMappingURL=xstate.umd.min.js.map
|