xstate 4.13.0 → 4.15.1

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/lib/types.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { StateNode } from './StateNode';
2
2
  import { State } from './State';
3
3
  import { Interpreter, Clock } from './interpreter';
4
- import { Actor } from './Actor';
5
4
  export declare type EventType = string;
6
5
  export declare type ActionType = string;
7
6
  export declare type MetaObject = Record<string, any>;
@@ -116,6 +115,24 @@ export interface ActivityDefinition<TContext, TEvent extends EventObject> extend
116
115
  type: string;
117
116
  }
118
117
  export declare type Sender<TEvent extends EventObject> = (event: Event<TEvent>) => void;
118
+ declare type ExcludeType<A> = {
119
+ [K in Exclude<keyof A, 'type'>]: A[K];
120
+ };
121
+ declare type ExtractExtraParameters<A, T> = A extends {
122
+ type: T;
123
+ } ? ExcludeType<A> : never;
124
+ declare type ExtractSimple<A> = A extends any ? {} extends ExcludeType<A> ? A : never : never;
125
+ declare type NeverIfEmpty<T> = {} extends T ? never : T;
126
+ export interface PayloadSender<TEvent extends EventObject> {
127
+ /**
128
+ * Send an event object or just the event type, if the event has no other payload
129
+ */
130
+ (event: TEvent | ExtractSimple<TEvent>['type']): void;
131
+ /**
132
+ * Send an event type and its payload
133
+ */
134
+ <K extends TEvent['type']>(eventType: K, payload: NeverIfEmpty<ExtractExtraParameters<TEvent, K>>): void;
135
+ }
119
136
  export declare type Receiver<TEvent extends EventObject> = (listener: (event: TEvent) => void) => void;
120
137
  export declare type InvokeCallback = (callback: Sender<any>, onReceive: Receiver<EventObject>) => any;
121
138
  export interface InvokeMeta {
@@ -205,7 +222,7 @@ export interface InvokeSourceDefinition {
205
222
  [key: string]: any;
206
223
  type: string;
207
224
  }
208
- export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
225
+ export interface InvokeConfig<TContext, TEvent extends EventObject> {
209
226
  /**
210
227
  * The unique identifier for the invoked machine. If not specified, this
211
228
  * will be the machine's own `id`, or the URL (from `src`).
@@ -242,7 +259,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
242
259
  * The transition to take upon the invoked child machine sending an error event.
243
260
  */
244
261
  onError?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
245
- };
262
+ }
246
263
  export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> {
247
264
  /**
248
265
  * The relative key of the state node, which represents its location in the overall state value.
@@ -541,7 +558,7 @@ export interface NullEvent {
541
558
  }
542
559
  export interface ActivityActionObject<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
543
560
  type: ActionTypes.Start | ActionTypes.Stop;
544
- activity: ActivityDefinition<TContext, TEvent>;
561
+ activity: ActivityDefinition<TContext, TEvent> | undefined;
545
562
  exec: ActionFunction<TContext, TEvent> | undefined;
546
563
  }
547
564
  export interface InvokeActionObject<TContext, TEvent extends EventObject> extends ActivityActionObject<TContext, TEvent> {
@@ -557,18 +574,32 @@ export interface LogActionObject<TContext, TEvent extends EventObject> extends L
557
574
  value: any;
558
575
  }
559
576
  export interface SendAction<TContext, TEvent extends EventObject, TSentEvent extends EventObject> extends ActionObject<TContext, TEvent> {
560
- to: string | number | Actor | ExprWithMeta<TContext, TEvent, string | number | Actor> | undefined;
577
+ to: string | number | ActorRef<any> | ExprWithMeta<TContext, TEvent, string | number | ActorRef<any>> | undefined;
561
578
  event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
562
579
  delay?: number | string | DelayExpr<TContext, TEvent>;
563
580
  id: string | number;
564
581
  }
565
582
  export interface SendActionObject<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> extends SendAction<TContext, TEvent, TSentEvent> {
566
- to: string | number | Actor | undefined;
583
+ to: string | number | ActorRef<any> | undefined;
567
584
  _event: SCXML.Event<TSentEvent>;
568
585
  event: TSentEvent;
569
586
  delay?: number;
570
587
  id: string | number;
571
588
  }
589
+ export interface StopAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
590
+ type: ActionTypes.Stop;
591
+ activity: string | {
592
+ id: string;
593
+ } | Expr<TContext, TEvent, string | {
594
+ id: string;
595
+ }>;
596
+ }
597
+ export interface StopActionObject {
598
+ type: ActionTypes.Stop;
599
+ activity: {
600
+ id: string;
601
+ };
602
+ }
572
603
  export declare type Expr<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent) => T;
573
604
  export declare type ExprWithMeta<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent, meta: SCXMLEventMeta<TEvent>) => T;
574
605
  export declare type SendExpr<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
@@ -579,7 +610,7 @@ export declare enum SpecialTargets {
579
610
  export interface SendActionOptions<TContext, TEvent extends EventObject> {
580
611
  id?: string | number;
581
612
  delay?: number | string | DelayExpr<TContext, TEvent>;
582
- to?: string | ExprWithMeta<TContext, TEvent, string | number | Actor>;
613
+ to?: string | ExprWithMeta<TContext, TEvent, string | number | ActorRef<any>>;
583
614
  }
584
615
  export interface CancelAction extends ActionObject<any, any> {
585
616
  sendId: string | number;
@@ -620,6 +651,7 @@ export interface TransitionDefinition<TContext, TEvent extends EventObject> exte
620
651
  actions: Array<ActionObject<TContext, TEvent>>;
621
652
  cond?: Guard<TContext, TEvent>;
622
653
  eventType: TEvent['type'] | NullEvent['type'] | '*';
654
+ meta?: Record<string, any>;
623
655
  };
624
656
  }
625
657
  export declare type TransitionDefinitionMap<TContext, TEvent extends EventObject> = {
@@ -709,7 +741,7 @@ export interface StateConfig<TContext, TEvent extends EventObject> {
709
741
  events?: TEvent[];
710
742
  configuration: Array<StateNode<TContext, any, TEvent>>;
711
743
  transitions: Array<TransitionDefinition<TContext, TEvent>>;
712
- children: Record<string, Actor>;
744
+ children: Record<string, ActorRef<any>>;
713
745
  done?: boolean;
714
746
  }
715
747
  export interface StateSchema<TC = any> {
@@ -809,17 +841,29 @@ export declare namespace SCXML {
809
841
  $$type: 'scxml';
810
842
  }
811
843
  }
812
- export interface Unsubscribable {
813
- unsubscribe(): void;
814
- }
815
- export interface Subscribable<T> {
816
- subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Unsubscribable;
817
- }
818
844
  export interface Observer<T> {
819
845
  next: (value: T) => void;
820
846
  error: (err: any) => void;
821
847
  complete: () => void;
822
848
  }
849
+ export interface Subscription {
850
+ unsubscribe(): void;
851
+ }
852
+ export interface Subscribable<T> {
853
+ subscribe(observer: Observer<T>): Subscription;
854
+ subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
855
+ }
823
856
  export declare type Spawnable = StateMachine<any, any, any> | Promise<any> | InvokeCallback | Subscribable<any>;
857
+ export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Subscribable<TEmitted> {
858
+ send: Sender<TEvent>;
859
+ }
860
+ export interface SpawnedActorRef<TEvent extends EventObject, TEmitted = any> extends ActorRef<TEvent, TEmitted> {
861
+ id: string;
862
+ stop?: () => void;
863
+ toJSON?: () => any;
864
+ }
865
+ 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
+ state: State<TContext, TEvent, any, TTypestate>;
867
+ } : never;
824
868
  export {};
825
869
  //# sourceMappingURL=types.d.ts.map
package/lib/utils.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition, Subscribable, StateMachine, ConditionPredicate, SCXML, StateLike, EventData, TransitionConfig, TransitionConfigTarget, NullEvent, SingleOrArray, Guard, InvokeSourceDefinition } from './types';
2
2
  import { StateNode } from './StateNode';
3
- import { State } from '.';
3
+ import { Observer, State } from '.';
4
4
  import { Actor } from './Actor';
5
5
  export declare function keys<T extends object>(value: T): Array<keyof T & string>;
6
6
  export declare function matchesState(parentStateId: StateValue, childStateId: StateValue, delimiter?: string): boolean;
@@ -66,4 +66,5 @@ export declare function normalizeTarget<TContext, TEvent extends EventObject>(ta
66
66
  export declare function reportUnhandledExceptionOnInvocation(originalError: any, currentError: any, id: string): void;
67
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;
68
68
  export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
69
+ export declare function toObserver<T>(nextHandler: Observer<T> | ((value: T) => void), errorHandler?: (error: any) => void, completionHandler?: () => void): Observer<T>;
69
70
  //# sourceMappingURL=utils.d.ts.map
package/lib/utils.js CHANGED
@@ -42,7 +42,7 @@ var __spread = (this && this.__spread) || function () {
42
42
  return ar;
43
43
  };
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.toInvokeSource = exports.evaluateGuard = exports.reportUnhandledExceptionOnInvocation = exports.normalizeTarget = exports.toTransitionConfigArray = exports.toSCXMLEvent = exports.toEventObject = exports.uniqueId = exports.isActor = exports.isMachine = exports.symbolObservable = exports.isObservable = exports.toGuard = exports.isString = exports.isFunction = exports.isArray = exports.warn = exports.updateContext = exports.updateHistoryValue = exports.updateHistoryStates = exports.partition = exports.isPromiseLike = exports.isBuiltInEvent = exports.mapContext = exports.toArray = exports.toArrayStrict = exports.flatten = exports.pathsToStateValue = exports.toStatePaths = exports.nestedPath = exports.path = exports.mapFilterValues = exports.mapValues = exports.pathToStateValue = exports.toStateValue = exports.isStateLike = exports.toStatePath = exports.getActionType = exports.getEventType = exports.matchesState = exports.keys = void 0;
45
+ exports.toObserver = exports.toInvokeSource = exports.evaluateGuard = exports.reportUnhandledExceptionOnInvocation = exports.normalizeTarget = exports.toTransitionConfigArray = exports.toSCXMLEvent = exports.toEventObject = exports.uniqueId = exports.isActor = exports.isMachine = exports.symbolObservable = exports.isObservable = exports.toGuard = exports.isString = exports.isFunction = exports.isArray = exports.warn = exports.updateContext = exports.updateHistoryValue = exports.updateHistoryStates = exports.partition = exports.isPromiseLike = exports.isBuiltInEvent = exports.mapContext = exports.toArray = exports.toArrayStrict = exports.flatten = exports.pathsToStateValue = exports.toStatePaths = exports.nestedPath = exports.path = exports.mapFilterValues = exports.mapValues = exports.pathToStateValue = exports.toStateValue = exports.isStateLike = exports.toStatePath = exports.getActionType = exports.getEventType = exports.matchesState = exports.keys = void 0;
46
46
  var constants_1 = require("./constants");
47
47
  var environment_1 = require("./environment");
48
48
  function keys(value) {
@@ -184,7 +184,7 @@ exports.mapFilterValues = mapFilterValues;
184
184
  * Retrieves a value at the given path.
185
185
  * @param props The deep path to the prop of the desired value
186
186
  */
187
- exports.path = function (props) { return function (object) {
187
+ var path = function (props) { return function (object) {
188
188
  var e_2, _a;
189
189
  var result = object;
190
190
  try {
@@ -202,6 +202,7 @@ exports.path = function (props) { return function (object) {
202
202
  }
203
203
  return result;
204
204
  }; };
205
+ exports.path = path;
205
206
  /**
206
207
  * Retrieves a value at the given path via the nested accessor prop.
207
208
  * @param props The deep path to the prop of the desired value
@@ -609,3 +610,15 @@ function toInvokeSource(src) {
609
610
  return src;
610
611
  }
611
612
  exports.toInvokeSource = toInvokeSource;
613
+ function toObserver(nextHandler, errorHandler, completionHandler) {
614
+ if (typeof nextHandler === 'object') {
615
+ return nextHandler;
616
+ }
617
+ var noop = function () { return void 0; };
618
+ return {
619
+ next: nextHandler,
620
+ error: errorHandler || noop,
621
+ complete: completionHandler || noop
622
+ };
623
+ }
624
+ exports.toObserver = toObserver;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xstate",
3
- "version": "4.13.0",
3
+ "version": "4.15.1",
4
4
  "description": "Finite State Machines and Statecharts for the Modern Web.",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -52,7 +52,7 @@
52
52
  "@babel/core": "^7.10.5",
53
53
  "@scion-scxml/test-framework": "^2.0.15",
54
54
  "babel-plugin-annotate-pure-calls": "^0.4.0",
55
- "jest": "^24.8.0",
55
+ "jest": "^26.4.2",
56
56
  "jsdom": "^14.0.0",
57
57
  "jsdom-global": "^3.0.2",
58
58
  "lerna-alias": "3.0.3-0",
@@ -64,9 +64,9 @@
64
64
  "rollup-plugin-typescript2": "^0.25.2",
65
65
  "rollup-plugin-uglify": "^6.0.2",
66
66
  "rxjs": "^6.5.1",
67
- "ts-jest": "^24.1.9",
67
+ "ts-jest": "^26.4.0",
68
68
  "tslib": "^1.10.0",
69
- "typescript": "^3.9.7",
69
+ "typescript": "^4.1.2",
70
70
  "xml-js": "^1.6.11"
71
71
  }
72
72
  }