xstate 5.13.1 → 5.14.0
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 +2 -2
- package/actions/dist/xstate-actions.development.cjs.js +2 -2
- package/actions/dist/xstate-actions.development.esm.js +2 -2
- package/actions/dist/xstate-actions.esm.js +2 -2
- 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 +18 -15
- package/actors/dist/xstate-actors.development.cjs.js +18 -15
- package/actors/dist/xstate-actors.development.esm.js +18 -15
- package/actors/dist/xstate-actors.esm.js +18 -15
- package/actors/dist/xstate-actors.umd.min.js +1 -1
- package/actors/dist/xstate-actors.umd.min.js.map +1 -1
- package/dist/declarations/src/actors/callback.d.ts +4 -3
- package/dist/declarations/src/actors/index.d.ts +1 -1
- package/dist/declarations/src/actors/observable.d.ts +9 -7
- package/dist/declarations/src/actors/promise.d.ts +5 -4
- package/dist/declarations/src/actors/transition.d.ts +1 -1
- package/dist/declarations/src/createActor.d.ts +2 -2
- package/dist/declarations/src/system.d.ts +2 -2
- package/dist/declarations/src/types.d.ts +16 -13
- package/dist/{log-d06dd00b.development.cjs.js → log-505687fd.development.cjs.js} +1 -1
- package/dist/{log-5b14d850.cjs.js → log-7ae0ddf8.cjs.js} +1 -1
- package/dist/{log-c447a931.esm.js → log-b87cb6bd.esm.js} +1 -1
- package/dist/{log-b3b03961.development.esm.js → log-c943e6aa.development.esm.js} +1 -1
- package/dist/{raise-bf7a8462.development.cjs.js → raise-0cd7e521.development.cjs.js} +138 -130
- package/dist/{raise-150d5679.development.esm.js → raise-0f400094.development.esm.js} +138 -130
- package/dist/{raise-f406edbd.esm.js → raise-4e39e875.esm.js} +138 -130
- package/dist/{raise-ff8990f7.cjs.js → raise-f79d2832.cjs.js} +138 -130
- package/dist/xstate.cjs.js +2 -2
- package/dist/xstate.development.cjs.js +2 -2
- package/dist/xstate.development.esm.js +4 -4
- package/dist/xstate.esm.js +4 -4
- 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/package.json +1 -1
|
@@ -86,7 +86,7 @@ export interface UnifiedArg<TContext extends MachineContext, TExpressionEvent ex
|
|
|
86
86
|
context: TContext;
|
|
87
87
|
event: TExpressionEvent;
|
|
88
88
|
self: ActorRef<MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`
|
|
89
|
-
StateValue, string, unknown, TODO>, TEvent>;
|
|
89
|
+
StateValue, string, unknown, TODO>, TEvent, AnyEventObject>;
|
|
90
90
|
system: AnyActorSystem;
|
|
91
91
|
}
|
|
92
92
|
export type MachineContext = Record<string, any>;
|
|
@@ -95,7 +95,7 @@ export interface ActionArgs<TContext extends MachineContext, TExpressionEvent ex
|
|
|
95
95
|
export type InputFrom<T> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer TInput, infer _TOutput, infer _TEmitted, infer _TMeta, infer _TResolvedTypesMeta> ? TInput : T extends ActorLogic<infer _TSnapshot, infer _TEvent, infer TInput, infer _TSystem, infer _TEmitted> ? TInput : never;
|
|
96
96
|
export type OutputFrom<T> = T extends ActorLogic<infer TSnapshot, infer _TEvent, infer _TInput, infer _TSystem, infer _TEmitted> ? (TSnapshot & {
|
|
97
97
|
status: 'done';
|
|
98
|
-
})['output'] : T extends ActorRef<infer TSnapshot, infer _TEvent> ? (TSnapshot & {
|
|
98
|
+
})['output'] : T extends ActorRef<infer TSnapshot, infer _TEvent, infer _TEmitted> ? (TSnapshot & {
|
|
99
99
|
status: 'done';
|
|
100
100
|
})['output'] : never;
|
|
101
101
|
export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject> = {
|
|
@@ -467,7 +467,7 @@ export type ContextFactory<TContext extends MachineContext, TActor extends Provi
|
|
|
467
467
|
spawn: Spawner<TActor>;
|
|
468
468
|
input: TInput;
|
|
469
469
|
self: ActorRef<MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`
|
|
470
|
-
StateValue, string, unknown, TODO>, TEvent>;
|
|
470
|
+
StateValue, string, unknown, TODO>, TEvent, AnyEventObject>;
|
|
471
471
|
}) => TContext;
|
|
472
472
|
export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TDelay extends string = string, TTag extends string = string, TInput = any, TOutput = unknown, TEmitted extends EventObject = EventObject, TMeta extends MetaObject = MetaObject, TTypesMeta = TypegenDisabled> = (Omit<StateNodeConfig<DoNotInfer<TContext>, DoNotInfer<TEvent>, DoNotInfer<TActor>, DoNotInfer<TAction>, DoNotInfer<TGuard>, DoNotInfer<TDelay>, DoNotInfer<TTag>, DoNotInfer<TOutput>, DoNotInfer<TEmitted>, DoNotInfer<TMeta>>, 'output'> & {
|
|
473
473
|
/**
|
|
@@ -515,13 +515,15 @@ export type HistoryValue<TContext extends MachineContext, TEvent extends EventOb
|
|
|
515
515
|
export type AnyHistoryValue = HistoryValue<any, any>;
|
|
516
516
|
export type StateFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = T extends AnyStateMachine ? ReturnType<T['transition']> : T extends (...args: any[]) => AnyStateMachine ? ReturnType<ReturnType<T>['transition']> : never;
|
|
517
517
|
export type Transitions<TContext extends MachineContext, TEvent extends EventObject> = Array<TransitionDefinition<TContext, TEvent>>;
|
|
518
|
-
export interface DoneActorEvent<TOutput = unknown> {
|
|
519
|
-
type: `xstate.done.actor.${
|
|
518
|
+
export interface DoneActorEvent<TOutput = unknown, TId extends string = string> extends EventObject {
|
|
519
|
+
type: `xstate.done.actor.${TId}`;
|
|
520
520
|
output: TOutput;
|
|
521
|
+
actorId: TId;
|
|
521
522
|
}
|
|
522
|
-
export interface ErrorActorEvent<TErrorData = unknown> extends EventObject {
|
|
523
|
-
type: `xstate.error.actor.${
|
|
523
|
+
export interface ErrorActorEvent<TErrorData = unknown, TId extends string = string> extends EventObject {
|
|
524
|
+
type: `xstate.error.actor.${TId}`;
|
|
524
525
|
error: TErrorData;
|
|
526
|
+
actorId: TId;
|
|
525
527
|
}
|
|
526
528
|
export interface SnapshotEvent<TSnapshot extends Snapshot<unknown> = Snapshot<unknown>> extends EventObject {
|
|
527
529
|
type: `xstate.snapshot.${string}`;
|
|
@@ -559,7 +561,7 @@ export type Mapper<TContext extends MachineContext, TExpressionEvent extends Eve
|
|
|
559
561
|
context: TContext;
|
|
560
562
|
event: TExpressionEvent;
|
|
561
563
|
self: ActorRef<MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef>, // TODO: this should be replaced with `TChildren`
|
|
562
|
-
StateValue, string, unknown, TODO>, TEvent>;
|
|
564
|
+
StateValue, string, unknown, TODO>, TEvent, AnyEventObject>;
|
|
563
565
|
}) => TResult;
|
|
564
566
|
export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent, TEvent, TODO, TODO, TODO, TODO, TODO, // TEmitted
|
|
565
567
|
TODO>, 'target' | 'guard'> {
|
|
@@ -791,10 +793,11 @@ export interface ActorRef<TSnapshot extends Snapshot<unknown>, TEvent extends Ev
|
|
|
791
793
|
type: TType;
|
|
792
794
|
})) => void) => Subscription;
|
|
793
795
|
}
|
|
794
|
-
export type AnyActorRef = ActorRef<any, any>;
|
|
796
|
+
export type AnyActorRef = ActorRef<any, any, any>;
|
|
797
|
+
export type UnknownActorRef = ActorRef<Snapshot<unknown>, EventObject>;
|
|
795
798
|
export type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<any, any, any, any, any, any, any, any, any, any, any, any, // TMeta
|
|
796
799
|
any> ? R : R extends Promise<infer U> ? PromiseActorLogic<U> : never : never;
|
|
797
|
-
export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, infer TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TStateValue, infer TTag, infer _TInput, infer TOutput, infer TEmitted, infer TMeta, infer _TResolvedTypesMeta> ? ActorRef<MachineSnapshot<TContext, TEvent, TChildren, TStateValue, TTag, TOutput, TMeta>, TEvent> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TSnapshot, infer TEvent, infer _TInput, infer _TSystem, infer TEmitted> ? ActorRef<TSnapshot, TEvent> : never : never;
|
|
800
|
+
export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, infer TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TStateValue, infer TTag, infer _TInput, infer TOutput, infer TEmitted, infer TMeta, infer _TResolvedTypesMeta> ? ActorRef<MachineSnapshot<TContext, TEvent, TChildren, TStateValue, TTag, TOutput, TMeta>, TEvent, TEmitted> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TSnapshot, infer TEvent, infer _TInput, infer _TSystem, infer TEmitted> ? ActorRef<TSnapshot, TEvent, TEmitted> : never : never;
|
|
798
801
|
export type DevToolsAdapter = (service: AnyActor) => void;
|
|
799
802
|
/**
|
|
800
803
|
* @deprecated Use `Actor<T>` instead.
|
|
@@ -816,7 +819,7 @@ any, // emitted
|
|
|
816
819
|
any, // TMeta
|
|
817
820
|
infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
|
|
818
821
|
export interface ActorScope<TSnapshot extends Snapshot<unknown>, TEvent extends EventObject, TSystem extends AnyActorSystem = AnyActorSystem, TEmitted extends EventObject = EventObject> {
|
|
819
|
-
self: ActorRef<TSnapshot, TEvent>;
|
|
822
|
+
self: ActorRef<TSnapshot, TEvent, TEmitted>;
|
|
820
823
|
id: string;
|
|
821
824
|
sessionId: string;
|
|
822
825
|
logger: (...args: any[]) => void;
|
|
@@ -905,10 +908,10 @@ export type UnknownActorLogic = ActorLogic<any, // snapshot
|
|
|
905
908
|
any, // event
|
|
906
909
|
never, // input
|
|
907
910
|
AnyActorSystem, any>;
|
|
908
|
-
export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer TSnapshot, infer _> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends ActorLogic<infer _TSnapshot, infer _TEvent, infer _TInput, infer _TEmitted, infer _TSystem> ? ReturnType<R['transition']> : R extends ActorScope<infer TSnapshot, infer _TEvent, infer _TEmitted, infer _TSystem> ? TSnapshot : never : never;
|
|
911
|
+
export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer TSnapshot, infer _, infer __> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends ActorLogic<infer _TSnapshot, infer _TEvent, infer _TInput, infer _TEmitted, infer _TSystem> ? ReturnType<R['transition']> : R extends ActorScope<infer TSnapshot, infer _TEvent, infer _TEmitted, infer _TSystem> ? TSnapshot : never : never;
|
|
909
912
|
export type EventFromLogic<TLogic extends AnyActorLogic> = TLogic extends ActorLogic<infer _TSnapshot, infer TEvent, infer _TInput, infer _TEmitted, infer _TSystem> ? TEvent : never;
|
|
910
913
|
export type EmittedFrom<TLogic extends AnyActorLogic> = TLogic extends ActorLogic<infer _TSnapshot, infer _TEvent, infer _TInput, infer _TSystem, infer TEmitted> ? TEmitted : never;
|
|
911
|
-
type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _TContext, infer TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer _TMeta, infer _TResolvedTypesMeta> ? TEvent : R extends MachineSnapshot<infer _TContext, infer TEvent, infer _TChildren, infer _TStateValue, infer _TTag, infer _TOutput, infer _TMeta> ? TEvent : R extends ActorRef<infer
|
|
914
|
+
type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _TContext, infer TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer _TMeta, infer _TResolvedTypesMeta> ? TEvent : R extends MachineSnapshot<infer _TContext, infer TEvent, infer _TChildren, infer _TStateValue, infer _TTag, infer _TOutput, infer _TMeta> ? TEvent : R extends ActorRef<infer _TSnapshot, infer TEvent, infer _TEmitted> ? TEvent : never : never;
|
|
912
915
|
export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
|
|
913
916
|
export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer _TMeta, infer _TResolvedTypesMeta> ? TContext : R extends MachineSnapshot<infer TContext, infer _TEvent, infer _TChildren, infer _TStateValue, infer _TTag, infer _TOutput, infer _TMeta> ? TContext : R extends Actor<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer _TMeta, infer _TResolvedTypesMeta> ? TContext : never : never : never;
|
|
914
917
|
export type InferEvent<E extends EventObject> = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var guards_dist_xstateGuards = require('./raise-
|
|
3
|
+
var guards_dist_xstateGuards = require('./raise-0cd7e521.development.cjs.js');
|
|
4
4
|
|
|
5
5
|
// it's likely-ish that `(TActor & { src: TSrc })['logic']` would be faster
|
|
6
6
|
// but it's only possible to do it since https://github.com/microsoft/TypeScript/pull/53098 (TS 5.1)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var guards_dist_xstateGuards = require('./raise-
|
|
3
|
+
var guards_dist_xstateGuards = require('./raise-f79d2832.cjs.js');
|
|
4
4
|
|
|
5
5
|
// it's likely-ish that `(TActor & { src: TSrc })['logic']` would be faster
|
|
6
6
|
// but it's only possible to do it since https://github.com/microsoft/TypeScript/pull/53098 (TS 5.1)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { T as ProcessingStatus, z as resolveReferencedActor, A as createActor, U as cloneMachineSnapshot, V as XSTATE_ERROR, W as createErrorActorEvent, e as evaluateGuard, M as cancel, O as raise, P as spawnChild, R as stopChild } from './raise-
|
|
1
|
+
import { T as ProcessingStatus, z as resolveReferencedActor, A as createActor, U as cloneMachineSnapshot, V as XSTATE_ERROR, W as createErrorActorEvent, e as evaluateGuard, M as cancel, O as raise, P as spawnChild, R as stopChild } from './raise-4e39e875.esm.js';
|
|
2
2
|
|
|
3
3
|
// it's likely-ish that `(TActor & { src: TSrc })['logic']` would be faster
|
|
4
4
|
// but it's only possible to do it since https://github.com/microsoft/TypeScript/pull/53098 (TS 5.1)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { T as ProcessingStatus, z as resolveReferencedActor, A as createActor, U as cloneMachineSnapshot, V as executingCustomAction, W as XSTATE_ERROR, Y as createErrorActorEvent, e as evaluateGuard, M as cancel, O as raise, P as spawnChild, R as stopChild } from './raise-
|
|
1
|
+
import { T as ProcessingStatus, z as resolveReferencedActor, A as createActor, U as cloneMachineSnapshot, V as executingCustomAction, W as XSTATE_ERROR, Y as createErrorActorEvent, e as evaluateGuard, M as cancel, O as raise, P as spawnChild, R as stopChild } from './raise-0f400094.development.esm.js';
|
|
2
2
|
|
|
3
3
|
// it's likely-ish that `(TActor & { src: TSrc })['logic']` would be faster
|
|
4
4
|
// but it's only possible to do it since https://github.com/microsoft/TypeScript/pull/53098 (TS 5.1)
|
|
@@ -97,13 +97,15 @@ function createDoneStateEvent(id, output) {
|
|
|
97
97
|
function createDoneActorEvent(invokeId, output) {
|
|
98
98
|
return {
|
|
99
99
|
type: `xstate.done.actor.${invokeId}`,
|
|
100
|
-
output
|
|
100
|
+
output,
|
|
101
|
+
actorId: invokeId
|
|
101
102
|
};
|
|
102
103
|
}
|
|
103
104
|
function createErrorActorEvent(id, error) {
|
|
104
105
|
return {
|
|
105
106
|
type: `xstate.error.actor.${id}`,
|
|
106
|
-
error
|
|
107
|
+
error,
|
|
108
|
+
actorId: id
|
|
107
109
|
};
|
|
108
110
|
}
|
|
109
111
|
function createInitEvent(input) {
|
|
@@ -128,134 +130,6 @@ function reportUnhandledError(err) {
|
|
|
128
130
|
|
|
129
131
|
const symbolObservable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();
|
|
130
132
|
|
|
131
|
-
function createScheduledEventId(actorRef, id) {
|
|
132
|
-
return `${actorRef.sessionId}.${id}`;
|
|
133
|
-
}
|
|
134
|
-
let idCounter = 0;
|
|
135
|
-
function createSystem(rootActor, options) {
|
|
136
|
-
const children = new Map();
|
|
137
|
-
const keyedActors = new Map();
|
|
138
|
-
const reverseKeyedActors = new WeakMap();
|
|
139
|
-
const inspectionObservers = new Set();
|
|
140
|
-
const timerMap = {};
|
|
141
|
-
const {
|
|
142
|
-
clock,
|
|
143
|
-
logger
|
|
144
|
-
} = options;
|
|
145
|
-
const scheduler = {
|
|
146
|
-
schedule: (source, target, event, delay, id = Math.random().toString(36).slice(2)) => {
|
|
147
|
-
const scheduledEvent = {
|
|
148
|
-
source,
|
|
149
|
-
target,
|
|
150
|
-
event,
|
|
151
|
-
delay,
|
|
152
|
-
id,
|
|
153
|
-
startedAt: Date.now()
|
|
154
|
-
};
|
|
155
|
-
const scheduledEventId = createScheduledEventId(source, id);
|
|
156
|
-
system._snapshot._scheduledEvents[scheduledEventId] = scheduledEvent;
|
|
157
|
-
const timeout = clock.setTimeout(() => {
|
|
158
|
-
delete timerMap[scheduledEventId];
|
|
159
|
-
delete system._snapshot._scheduledEvents[scheduledEventId];
|
|
160
|
-
system._relay(source, target, event);
|
|
161
|
-
}, delay);
|
|
162
|
-
timerMap[scheduledEventId] = timeout;
|
|
163
|
-
},
|
|
164
|
-
cancel: (source, id) => {
|
|
165
|
-
const scheduledEventId = createScheduledEventId(source, id);
|
|
166
|
-
const timeout = timerMap[scheduledEventId];
|
|
167
|
-
delete timerMap[scheduledEventId];
|
|
168
|
-
delete system._snapshot._scheduledEvents[scheduledEventId];
|
|
169
|
-
clock.clearTimeout(timeout);
|
|
170
|
-
},
|
|
171
|
-
cancelAll: actorRef => {
|
|
172
|
-
for (const scheduledEventId in system._snapshot._scheduledEvents) {
|
|
173
|
-
const scheduledEvent = system._snapshot._scheduledEvents[scheduledEventId];
|
|
174
|
-
if (scheduledEvent.source === actorRef) {
|
|
175
|
-
scheduler.cancel(actorRef, scheduledEvent.id);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
const sendInspectionEvent = event => {
|
|
181
|
-
if (!inspectionObservers.size) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
const resolvedInspectionEvent = {
|
|
185
|
-
...event,
|
|
186
|
-
rootId: rootActor.sessionId
|
|
187
|
-
};
|
|
188
|
-
inspectionObservers.forEach(observer => observer.next?.(resolvedInspectionEvent));
|
|
189
|
-
};
|
|
190
|
-
const system = {
|
|
191
|
-
_snapshot: {
|
|
192
|
-
_scheduledEvents: (options?.snapshot && options.snapshot.scheduler) ?? {}
|
|
193
|
-
},
|
|
194
|
-
_bookId: () => `x:${idCounter++}`,
|
|
195
|
-
_register: (sessionId, actorRef) => {
|
|
196
|
-
children.set(sessionId, actorRef);
|
|
197
|
-
return sessionId;
|
|
198
|
-
},
|
|
199
|
-
_unregister: actorRef => {
|
|
200
|
-
children.delete(actorRef.sessionId);
|
|
201
|
-
const systemId = reverseKeyedActors.get(actorRef);
|
|
202
|
-
if (systemId !== undefined) {
|
|
203
|
-
keyedActors.delete(systemId);
|
|
204
|
-
reverseKeyedActors.delete(actorRef);
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
get: systemId => {
|
|
208
|
-
return keyedActors.get(systemId);
|
|
209
|
-
},
|
|
210
|
-
_set: (systemId, actorRef) => {
|
|
211
|
-
const existing = keyedActors.get(systemId);
|
|
212
|
-
if (existing && existing !== actorRef) {
|
|
213
|
-
throw new Error(`Actor with system ID '${systemId}' already exists.`);
|
|
214
|
-
}
|
|
215
|
-
keyedActors.set(systemId, actorRef);
|
|
216
|
-
reverseKeyedActors.set(actorRef, systemId);
|
|
217
|
-
},
|
|
218
|
-
inspect: observer => {
|
|
219
|
-
inspectionObservers.add(observer);
|
|
220
|
-
},
|
|
221
|
-
_sendInspectionEvent: sendInspectionEvent,
|
|
222
|
-
_relay: (source, target, event) => {
|
|
223
|
-
system._sendInspectionEvent({
|
|
224
|
-
type: '@xstate.event',
|
|
225
|
-
sourceRef: source,
|
|
226
|
-
actorRef: target,
|
|
227
|
-
event
|
|
228
|
-
});
|
|
229
|
-
target._send(event);
|
|
230
|
-
},
|
|
231
|
-
scheduler,
|
|
232
|
-
getSnapshot: () => {
|
|
233
|
-
return {
|
|
234
|
-
_scheduledEvents: {
|
|
235
|
-
...system._snapshot._scheduledEvents
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
},
|
|
239
|
-
start: () => {
|
|
240
|
-
const scheduledEvents = system._snapshot._scheduledEvents;
|
|
241
|
-
system._snapshot._scheduledEvents = {};
|
|
242
|
-
for (const scheduledId in scheduledEvents) {
|
|
243
|
-
const {
|
|
244
|
-
source,
|
|
245
|
-
target,
|
|
246
|
-
event,
|
|
247
|
-
delay,
|
|
248
|
-
id
|
|
249
|
-
} = scheduledEvents[scheduledId];
|
|
250
|
-
scheduler.schedule(source, target, event, delay, id);
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
_clock: clock,
|
|
254
|
-
_logger: logger
|
|
255
|
-
};
|
|
256
|
-
return system;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
133
|
function matchesState(parentStateId, childStateId) {
|
|
260
134
|
const parentStateValue = toStateValue(parentStateId);
|
|
261
135
|
const childStateValue = toStateValue(childStateId);
|
|
@@ -413,6 +287,140 @@ function getAllOwnEventDescriptors(snapshot) {
|
|
|
413
287
|
return [...new Set([...snapshot._nodes.flatMap(sn => sn.ownEvents)])];
|
|
414
288
|
}
|
|
415
289
|
|
|
290
|
+
function createScheduledEventId(actorRef, id) {
|
|
291
|
+
return `${actorRef.sessionId}.${id}`;
|
|
292
|
+
}
|
|
293
|
+
let idCounter = 0;
|
|
294
|
+
function createSystem(rootActor, options) {
|
|
295
|
+
const children = new Map();
|
|
296
|
+
const keyedActors = new Map();
|
|
297
|
+
const reverseKeyedActors = new WeakMap();
|
|
298
|
+
const inspectionObservers = new Set();
|
|
299
|
+
const timerMap = {};
|
|
300
|
+
const {
|
|
301
|
+
clock,
|
|
302
|
+
logger
|
|
303
|
+
} = options;
|
|
304
|
+
const scheduler = {
|
|
305
|
+
schedule: (source, target, event, delay, id = Math.random().toString(36).slice(2)) => {
|
|
306
|
+
const scheduledEvent = {
|
|
307
|
+
source,
|
|
308
|
+
target,
|
|
309
|
+
event,
|
|
310
|
+
delay,
|
|
311
|
+
id,
|
|
312
|
+
startedAt: Date.now()
|
|
313
|
+
};
|
|
314
|
+
const scheduledEventId = createScheduledEventId(source, id);
|
|
315
|
+
system._snapshot._scheduledEvents[scheduledEventId] = scheduledEvent;
|
|
316
|
+
const timeout = clock.setTimeout(() => {
|
|
317
|
+
delete timerMap[scheduledEventId];
|
|
318
|
+
delete system._snapshot._scheduledEvents[scheduledEventId];
|
|
319
|
+
system._relay(source, target, event);
|
|
320
|
+
}, delay);
|
|
321
|
+
timerMap[scheduledEventId] = timeout;
|
|
322
|
+
},
|
|
323
|
+
cancel: (source, id) => {
|
|
324
|
+
const scheduledEventId = createScheduledEventId(source, id);
|
|
325
|
+
const timeout = timerMap[scheduledEventId];
|
|
326
|
+
delete timerMap[scheduledEventId];
|
|
327
|
+
delete system._snapshot._scheduledEvents[scheduledEventId];
|
|
328
|
+
clock.clearTimeout(timeout);
|
|
329
|
+
},
|
|
330
|
+
cancelAll: actorRef => {
|
|
331
|
+
for (const scheduledEventId in system._snapshot._scheduledEvents) {
|
|
332
|
+
const scheduledEvent = system._snapshot._scheduledEvents[scheduledEventId];
|
|
333
|
+
if (scheduledEvent.source === actorRef) {
|
|
334
|
+
scheduler.cancel(actorRef, scheduledEvent.id);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
const sendInspectionEvent = event => {
|
|
340
|
+
if (!inspectionObservers.size) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
const resolvedInspectionEvent = {
|
|
344
|
+
...event,
|
|
345
|
+
rootId: rootActor.sessionId
|
|
346
|
+
};
|
|
347
|
+
inspectionObservers.forEach(observer => observer.next?.(resolvedInspectionEvent));
|
|
348
|
+
};
|
|
349
|
+
const system = {
|
|
350
|
+
_snapshot: {
|
|
351
|
+
_scheduledEvents: (options?.snapshot && options.snapshot.scheduler) ?? {}
|
|
352
|
+
},
|
|
353
|
+
_bookId: () => `x:${idCounter++}`,
|
|
354
|
+
_register: (sessionId, actorRef) => {
|
|
355
|
+
children.set(sessionId, actorRef);
|
|
356
|
+
return sessionId;
|
|
357
|
+
},
|
|
358
|
+
_unregister: actorRef => {
|
|
359
|
+
children.delete(actorRef.sessionId);
|
|
360
|
+
const systemId = reverseKeyedActors.get(actorRef);
|
|
361
|
+
if (systemId !== undefined) {
|
|
362
|
+
keyedActors.delete(systemId);
|
|
363
|
+
reverseKeyedActors.delete(actorRef);
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
get: systemId => {
|
|
367
|
+
return keyedActors.get(systemId);
|
|
368
|
+
},
|
|
369
|
+
_set: (systemId, actorRef) => {
|
|
370
|
+
const existing = keyedActors.get(systemId);
|
|
371
|
+
if (existing && existing !== actorRef) {
|
|
372
|
+
throw new Error(`Actor with system ID '${systemId}' already exists.`);
|
|
373
|
+
}
|
|
374
|
+
keyedActors.set(systemId, actorRef);
|
|
375
|
+
reverseKeyedActors.set(actorRef, systemId);
|
|
376
|
+
},
|
|
377
|
+
inspect: observerOrFn => {
|
|
378
|
+
const observer = toObserver(observerOrFn);
|
|
379
|
+
inspectionObservers.add(observer);
|
|
380
|
+
return {
|
|
381
|
+
unsubscribe() {
|
|
382
|
+
inspectionObservers.delete(observer);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
},
|
|
386
|
+
_sendInspectionEvent: sendInspectionEvent,
|
|
387
|
+
_relay: (source, target, event) => {
|
|
388
|
+
system._sendInspectionEvent({
|
|
389
|
+
type: '@xstate.event',
|
|
390
|
+
sourceRef: source,
|
|
391
|
+
actorRef: target,
|
|
392
|
+
event
|
|
393
|
+
});
|
|
394
|
+
target._send(event);
|
|
395
|
+
},
|
|
396
|
+
scheduler,
|
|
397
|
+
getSnapshot: () => {
|
|
398
|
+
return {
|
|
399
|
+
_scheduledEvents: {
|
|
400
|
+
...system._snapshot._scheduledEvents
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
},
|
|
404
|
+
start: () => {
|
|
405
|
+
const scheduledEvents = system._snapshot._scheduledEvents;
|
|
406
|
+
system._snapshot._scheduledEvents = {};
|
|
407
|
+
for (const scheduledId in scheduledEvents) {
|
|
408
|
+
const {
|
|
409
|
+
source,
|
|
410
|
+
target,
|
|
411
|
+
event,
|
|
412
|
+
delay,
|
|
413
|
+
id
|
|
414
|
+
} = scheduledEvents[scheduledId];
|
|
415
|
+
scheduler.schedule(source, target, event, delay, id);
|
|
416
|
+
}
|
|
417
|
+
},
|
|
418
|
+
_clock: clock,
|
|
419
|
+
_logger: logger
|
|
420
|
+
};
|
|
421
|
+
return system;
|
|
422
|
+
}
|
|
423
|
+
|
|
416
424
|
const $$ACTOR_TYPE = 1;
|
|
417
425
|
// those values are currently used by @xstate/react directly so it's important to keep the assigned values in sync
|
|
418
426
|
let ProcessingStatus = /*#__PURE__*/function (ProcessingStatus) {
|