xstate 4.15.3 → 4.16.2

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.
@@ -81,11 +81,11 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
81
81
  /**
82
82
  * The parent state node.
83
83
  */
84
- parent?: StateNode<TContext, any, TEvent>;
84
+ parent?: StateNode<TContext, any, TEvent, any>;
85
85
  /**
86
86
  * The root machine node.
87
87
  */
88
- machine: StateNode<TContext, any, TEvent>;
88
+ machine: StateNode<TContext, any, TEvent, TTypestate>;
89
89
  /**
90
90
  * The meta data associated with this state node, which will be returned in State instances.
91
91
  */
@@ -159,7 +159,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
159
159
  *
160
160
  * @param state The state value or State instance
161
161
  */
162
- getStateNodes(state: StateValue | State<TContext, TEvent, any, TTypestate>): Array<StateNode<TContext, any, TEvent>>;
162
+ getStateNodes(state: StateValue | State<TContext, TEvent, any, TTypestate>): Array<StateNode<TContext, any, TEvent, any>>;
163
163
  /**
164
164
  * Returns `true` if this state node explicitly handles the given event.
165
165
  *
@@ -173,7 +173,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
173
173
  *
174
174
  * @param state The state to resolve
175
175
  */
176
- resolveState(state: State<TContext, TEvent>): State<TContext, TEvent, TStateSchema, TTypestate>;
176
+ resolveState(state: State<TContext, TEvent, any, any>): State<TContext, TEvent, TStateSchema, TTypestate>;
177
177
  private transitionLeafNode;
178
178
  private transitionCompoundNode;
179
179
  private transitionParallelNode;
@@ -205,13 +205,13 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
205
205
  *
206
206
  * @param stateId The state ID. The prefix "#" is removed.
207
207
  */
208
- getStateNodeById(stateId: string): StateNode<TContext, any, TEvent>;
208
+ getStateNodeById(stateId: string): StateNode<TContext, any, TEvent, any>;
209
209
  /**
210
210
  * Returns the relative state node from the given `statePath`, or throws.
211
211
  *
212
212
  * @param statePath The string or string array relative path to the state node.
213
213
  */
214
- getStateNodeByPath(statePath: string | string[]): StateNode<TContext, any, TEvent>;
214
+ getStateNodeByPath(statePath: string | string[]): StateNode<TContext, any, TEvent, any>;
215
215
  /**
216
216
  * Resolves a partial state value with its full representation in this machine.
217
217
  *
@@ -239,14 +239,14 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
239
239
  * @param resolve Whether state nodes should resolve to initial child state nodes
240
240
  */
241
241
  getRelativeStateNodes(relativeStateId: StateNode<TContext, any, TEvent>, historyValue?: HistoryValue, resolve?: boolean): Array<StateNode<TContext, any, TEvent>>;
242
- get initialStateNodes(): Array<StateNode<TContext, any, TEvent>>;
242
+ get initialStateNodes(): Array<StateNode<TContext, any, TEvent, any>>;
243
243
  /**
244
244
  * Retrieves state nodes from a relative path to this state node.
245
245
  *
246
246
  * @param relativePath The relative path from this state node
247
247
  * @param historyValue
248
248
  */
249
- getFromRelativePath(relativePath: string[]): Array<StateNode<TContext, any, TEvent>>;
249
+ getFromRelativePath(relativePath: string[]): Array<StateNode<TContext, any, TEvent, any>>;
250
250
  private historyValue;
251
251
  /**
252
252
  * Resolves to the historical value(s) of the parent state node,
package/lib/StateNode.js CHANGED
@@ -429,7 +429,7 @@ var StateNode = /** @class */ (function () {
429
429
  */
430
430
  StateNode.prototype.resolveState = function (state) {
431
431
  var configuration = Array.from(stateUtils_1.getConfiguration([], this.getStateNodes(state.value)));
432
- return new State_1.State(__assign(__assign({}, state), { value: this.resolve(state.value), configuration: configuration }));
432
+ return new State_1.State(__assign(__assign({}, state), { value: this.resolve(state.value), configuration: configuration, done: stateUtils_1.isInFinalState(configuration, this) }));
433
433
  };
434
434
  StateNode.prototype.transitionLeafNode = function (stateValue, state, _event) {
435
435
  var stateNode = this.getStateNode(stateValue);
package/lib/actions.d.ts CHANGED
@@ -135,5 +135,5 @@ export declare function forwardTo<TContext, TEvent extends EventObject>(target:
135
135
  */
136
136
  export declare function escalate<TContext, TEvent extends EventObject, TErrorData = any>(errorData: TErrorData | ExprWithMeta<TContext, TEvent, TErrorData>, options?: SendActionOptions<TContext, TEvent>): SendAction<TContext, TEvent, AnyEventObject>;
137
137
  export declare function choose<TContext, TEvent extends EventObject>(conds: Array<ChooseConditon<TContext, TEvent>>): ChooseAction<TContext, TEvent>;
138
- export declare function resolveActions<TContext, TEvent extends EventObject>(machine: StateNode<TContext, any, TEvent>, currentState: State<TContext, TEvent> | undefined, currentContext: TContext, _event: SCXML.Event<TEvent>, actions: Array<ActionObject<TContext, TEvent>>): [Array<ActionObject<TContext, TEvent>>, TContext];
138
+ export declare function resolveActions<TContext, TEvent extends EventObject>(machine: StateNode<TContext, any, TEvent, any>, currentState: State<TContext, TEvent> | undefined, currentContext: TContext, _event: SCXML.Event<TEvent>, actions: Array<ActionObject<TContext, TEvent>>): [Array<ActionObject<TContext, TEvent>>, TContext];
139
139
  //# sourceMappingURL=actions.d.ts.map
package/lib/devTools.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { Interpreter } from '.';
3
- declare type AnyInterpreter = Interpreter<any, any, any>;
3
+ import { AnyInterpreter } from './types';
4
4
  declare type ServiceListener = (service: AnyInterpreter) => void;
5
5
  export interface XStateDevInterface {
6
6
  register: (service: Interpreter<any>) => void;
@@ -10,7 +10,7 @@ export interface XStateDevInterface {
10
10
  };
11
11
  services: Set<Interpreter<any>>;
12
12
  }
13
- export declare function getGlobal(): (Window & typeof globalThis) | NodeJS.Global | undefined;
13
+ export declare function getGlobal(): (Window & typeof globalThis) | (NodeJS.Global & typeof globalThis) | undefined;
14
14
  export declare function registerService(service: AnyInterpreter): void;
15
15
  export {};
16
16
  //# sourceMappingURL=devTools.d.ts.map
@@ -486,6 +486,10 @@ var Interpreter = /** @class */ (function () {
486
486
  }
487
487
  finally { if (e_9) throw e_9.error; }
488
488
  }
489
+ if (!this.initialized) {
490
+ // Interpreter already stopped; do nothing
491
+ return this;
492
+ }
489
493
  this.state.configuration.forEach(function (stateNode) {
490
494
  var e_11, _a;
491
495
  try {
package/lib/model.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { AssignAction, Assigner, PropertyAssigner, ExtractEvent, EventObject } from './types';
2
+ export interface ContextModel<TContext, TEvent extends EventObject> {
3
+ initialContext: TContext;
4
+ assign: <TEventType extends TEvent['type'] = TEvent['type']>(assigner: Assigner<TContext, ExtractEvent<TEvent, TEventType>> | PropertyAssigner<TContext, ExtractEvent<TEvent, TEventType>>, eventType?: TEventType) => AssignAction<TContext, ExtractEvent<TEvent, TEventType>>;
5
+ reset: () => AssignAction<TContext, any>;
6
+ }
7
+ export declare function createModel<TContext, TEvent extends EventObject>(initialContext: TContext): ContextModel<TContext, TEvent>;
8
+ //# sourceMappingURL=model.d.ts.map
package/lib/model.js ADDED
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createModel = void 0;
4
+ var actions_1 = require("./actions");
5
+ function createModel(initialContext) {
6
+ var model = {
7
+ initialContext: initialContext,
8
+ assign: actions_1.assign,
9
+ reset: function () { return actions_1.assign(initialContext); }
10
+ };
11
+ return model;
12
+ }
13
+ exports.createModel = createModel;
@@ -1,10 +1,4 @@
1
- import { Interpreter } from './interpreter';
2
- export declare const provide: <T, TService extends Interpreter<any, any, any, {
3
- value: any;
4
- context: any;
5
- }>>(service: TService | undefined, fn: (service: TService | undefined) => T) => T;
6
- export declare const consume: <T, TService extends Interpreter<any, any, any, {
7
- value: any;
8
- context: any;
9
- }>>(fn: (service: TService) => T) => T;
1
+ import { AnyInterpreter } from './types';
2
+ export declare const provide: <T, TService extends AnyInterpreter>(service: TService | undefined, fn: (service: TService | undefined) => T) => T;
3
+ export declare const consume: <T, TService extends AnyInterpreter>(fn: (service: TService) => T) => T;
10
4
  //# sourceMappingURL=serviceScope.d.ts.map
@@ -1,14 +1,14 @@
1
1
  import { EventObject, StateNode, StateValue } from '.';
2
2
  declare type Configuration<TC, TE extends EventObject> = Iterable<StateNode<TC, any, TE>>;
3
3
  declare type AdjList<TC, TE extends EventObject> = Map<StateNode<TC, any, TE>, Array<StateNode<TC, any, TE>>>;
4
- export declare const isLeafNode: (stateNode: StateNode<any, any, any>) => boolean;
4
+ export declare const isLeafNode: (stateNode: StateNode<any, any, any, any>) => boolean;
5
5
  export declare function getChildren<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
6
- export declare function getAllStateNodes<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
7
- export declare function getConfiguration<TC, TE extends EventObject>(prevStateNodes: Iterable<StateNode<TC, any, TE>>, stateNodes: Iterable<StateNode<TC, any, TE>>): Iterable<StateNode<TC, any, TE>>;
6
+ export declare function getAllStateNodes<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE, any>): Array<StateNode<TC, any, TE, any>>;
7
+ export declare function getConfiguration<TC, TE extends EventObject>(prevStateNodes: Iterable<StateNode<TC, any, TE, any>>, stateNodes: Iterable<StateNode<TC, any, TE, any>>): Iterable<StateNode<TC, any, TE, any>>;
8
8
  export declare function getAdjList<TC, TE extends EventObject>(configuration: Configuration<TC, TE>): AdjList<TC, TE>;
9
- export declare function getValue<TC, TE extends EventObject>(rootNode: StateNode<TC, any, TE>, configuration: Configuration<TC, TE>): StateValue;
9
+ export declare function getValue<TC, TE extends EventObject>(rootNode: StateNode<TC, any, TE, any>, configuration: Configuration<TC, TE>): StateValue;
10
10
  export declare function has<T>(iterable: Iterable<T>, item: T): boolean;
11
11
  export declare function nextEvents<TC, TE extends EventObject>(configuration: Array<StateNode<TC, any, TE>>): Array<TE['type']>;
12
- export declare function isInFinalState<TC, TE extends EventObject>(configuration: Array<StateNode<TC, any, TE>>, stateNode: StateNode<TC, any, TE>): boolean;
12
+ export declare function isInFinalState<TC, TE extends EventObject>(configuration: Array<StateNode<TC, any, TE, any>>, stateNode: StateNode<TC, any, TE, any>): boolean;
13
13
  export {};
14
14
  //# sourceMappingURL=stateUtils.d.ts.map
package/lib/types.d.ts CHANGED
@@ -201,7 +201,7 @@ export declare type StatesDefinition<TContext, TStateSchema extends StateSchema,
201
201
  };
202
202
  export declare type TransitionConfigTarget<TContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, any, TEvent>;
203
203
  export declare type TransitionConfigOrTarget<TContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
204
- declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
204
+ export declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
205
205
  [K in TEvent['type']]?: TransitionConfigOrTarget<TContext, TEvent extends {
206
206
  type: K;
207
207
  } ? TEvent : never>;
@@ -433,7 +433,7 @@ export interface MachineOptions<TContext, TEvent extends EventObject> {
433
433
  /**
434
434
  * @private
435
435
  */
436
- _parent?: StateNode<TContext, any, TEvent>;
436
+ _parent?: StateNode<TContext, any, TEvent, any>;
437
437
  /**
438
438
  * @private
439
439
  */
@@ -489,13 +489,13 @@ export interface ActivityMap {
489
489
  }
490
490
  export interface StateTransition<TContext, TEvent extends EventObject> {
491
491
  transitions: Array<TransitionDefinition<TContext, TEvent>>;
492
- configuration: Array<StateNode<TContext, any, TEvent>>;
493
- entrySet: Array<StateNode<TContext, any, TEvent>>;
494
- exitSet: Array<StateNode<TContext, any, TEvent>>;
492
+ configuration: Array<StateNode<TContext, any, TEvent, any>>;
493
+ entrySet: Array<StateNode<TContext, any, TEvent, any>>;
494
+ exitSet: Array<StateNode<TContext, any, TEvent, any>>;
495
495
  /**
496
496
  * The source state that preceded the transition.
497
497
  */
498
- source: State<TContext> | undefined;
498
+ source: State<TContext, any, any, any> | undefined;
499
499
  actions: Array<ActionObject<TContext, TEvent>>;
500
500
  }
501
501
  export interface TransitionData<TContext, TEvent extends EventObject> {
@@ -616,8 +616,9 @@ export interface CancelAction extends ActionObject<any, any> {
616
616
  sendId: string | number;
617
617
  }
618
618
  export declare type Assigner<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => Partial<TContext>;
619
+ export declare type PartialAssigner<TContext, TEvent extends EventObject, TKey extends keyof TContext> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => TContext[TKey];
619
620
  export declare type PropertyAssigner<TContext, TEvent extends EventObject> = {
620
- [K in keyof TContext]?: ((context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => TContext[K]) | TContext[K];
621
+ [K in keyof TContext]?: PartialAssigner<TContext, TEvent, K> | TContext[K];
621
622
  };
622
623
  export declare type Mapper<TContext, TEvent extends EventObject, TParams extends {}> = (context: TContext, event: TEvent) => TParams;
623
624
  export declare type PropertyMapper<TContext, TEvent extends EventObject, TParams extends {}> = {
@@ -715,7 +716,7 @@ export interface SCXMLEventMeta<TEvent extends EventObject> {
715
716
  _event: SCXML.Event<TEvent>;
716
717
  }
717
718
  export interface StateMeta<TContext, TEvent extends EventObject> {
718
- state: State<TContext, TEvent>;
719
+ state: State<TContext, TEvent, any, any>;
719
720
  _event: SCXML.Event<TEvent>;
720
721
  }
721
722
  export interface Typestate<TContext> {
@@ -758,7 +759,7 @@ export interface InterpreterOptions {
758
759
  execute: boolean;
759
760
  clock: Clock;
760
761
  logger: (...args: any[]) => void;
761
- parent?: Interpreter<any, any, any>;
762
+ parent?: AnyInterpreter;
762
763
  /**
763
764
  * If `true`, defers processing of sent events until the service
764
765
  * is initialized (`.start()`). Otherwise, an error will be thrown
@@ -854,6 +855,9 @@ export interface Subscribable<T> {
854
855
  subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
855
856
  }
856
857
  export declare type Spawnable = StateMachine<any, any, any> | Promise<any> | InvokeCallback | Subscribable<any>;
858
+ export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends {
859
+ type: TEventType;
860
+ } ? TEvent : never;
857
861
  export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Subscribable<TEmitted> {
858
862
  send: Sender<TEvent>;
859
863
  }
@@ -865,5 +869,6 @@ export interface SpawnedActorRef<TEvent extends EventObject, TEmitted = any> ext
865
869
  export declare type ActorRefFrom<T extends StateMachine<any, any, any>> = T extends StateMachine<infer TContext, any, infer TEvent, infer TTypestate> ? SpawnedActorRef<TEvent, State<TContext, TEvent, any, TTypestate>> & {
866
870
  state: State<TContext, TEvent, any, TTypestate>;
867
871
  } : never;
872
+ export declare type AnyInterpreter = Interpreter<any, any, any, any>;
868
873
  export {};
869
874
  //# sourceMappingURL=types.d.ts.map
package/lib/utils.d.ts CHANGED
@@ -10,12 +10,10 @@ export declare function toStatePath(stateId: string | string[], delimiter: strin
10
10
  export declare function isStateLike(state: any): state is StateLike<any>;
11
11
  export declare function toStateValue(stateValue: StateLike<any> | StateValue | string[], delimiter: string): StateValue;
12
12
  export declare function pathToStateValue(statePath: string[]): StateValue;
13
- export declare function mapValues<T, P>(collection: {
13
+ export declare function mapValues<T, P, O extends {
14
14
  [key: string]: T;
15
- }, iteratee: (item: T, key: string, collection: {
16
- [key: string]: T;
17
- }, i: number) => P): {
18
- [key: string]: P;
15
+ }>(collection: O, iteratee: (item: O[keyof O], key: keyof O, collection: O, i: number) => P): {
16
+ [key in keyof O]: P;
19
17
  };
20
18
  export declare function mapFilterValues<T, P>(collection: {
21
19
  [key: string]: T;
@@ -53,7 +51,7 @@ export declare function isFunction(value: any): value is Function;
53
51
  export declare function isString(value: any): value is string;
54
52
  export declare function toGuard<TContext, TEvent extends EventObject>(condition?: Condition<TContext, TEvent>, guardMap?: Record<string, ConditionPredicate<TContext, TEvent>>): Guard<TContext, TEvent> | undefined;
55
53
  export declare function isObservable<T>(value: any): value is Subscribable<T>;
56
- export declare const symbolObservable: string | symbol;
54
+ export declare const symbolObservable: any;
57
55
  export declare function isMachine(value: any): value is StateMachine<any, any, any>;
58
56
  export declare function isActor(value: any): value is Actor;
59
57
  export declare const uniqueId: () => string;
@@ -64,7 +62,7 @@ export declare function toTransitionConfigArray<TContext, TEvent extends EventOb
64
62
  }>;
65
63
  export declare function normalizeTarget<TContext, TEvent extends EventObject>(target: SingleOrArray<string | StateNode<TContext, any, TEvent>> | undefined): Array<string | StateNode<TContext, any, TEvent>> | undefined;
66
64
  export declare function reportUnhandledExceptionOnInvocation(originalError: any, currentError: any, id: string): void;
67
- export declare function evaluateGuard<TContext, TEvent extends EventObject>(machine: StateNode<TContext, any, TEvent>, guard: Guard<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>): boolean;
65
+ export declare function evaluateGuard<TContext, TEvent extends EventObject>(machine: StateNode<TContext, any, TEvent, any>, guard: Guard<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>): boolean;
68
66
  export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
69
67
  export declare function toObserver<T>(nextHandler: Observer<T> | ((value: T) => void), errorHandler?: (error: any) => void, completionHandler?: () => void): Observer<T>;
70
68
  //# sourceMappingURL=utils.d.ts.map
package/lib/utils.js CHANGED
@@ -507,7 +507,8 @@ function isObservable(value) {
507
507
  }
508
508
  exports.isObservable = isObservable;
509
509
  exports.symbolObservable = (function () {
510
- return (typeof Symbol === 'function' && Symbol.observable) || '@@observable';
510
+ return (typeof Symbol === 'function' && Symbol.observable) ||
511
+ '@@observable';
511
512
  })();
512
513
  function isMachine(value) {
513
514
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xstate",
3
- "version": "4.15.3",
3
+ "version": "4.16.2",
4
4
  "description": "Finite State Machines and Statecharts for the Modern Web.",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",