xstate 4.7.7 → 4.9.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
@@ -50,7 +50,11 @@ export interface AssignMeta<TContext, TEvent extends EventObject> {
50
50
  _event: SCXML.Event<TEvent>;
51
51
  }
52
52
  export declare type ActionFunction<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent>) => any | void;
53
- export declare type Action<TContext, TEvent extends EventObject> = ActionType | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent> | AssignAction<Required<TContext>, TEvent> | SendAction<TContext, TEvent> | RaiseAction<AnyEventObject>;
53
+ export interface ChooseConditon<TContext, TEvent extends EventObject> {
54
+ cond?: Condition<TContext, TEvent>;
55
+ actions: Actions<TContext, TEvent>;
56
+ }
57
+ export declare type Action<TContext, TEvent extends EventObject> = ActionType | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent> | AssignAction<Required<TContext>, TEvent> | SendAction<TContext, AnyEventObject> | RaiseAction<AnyEventObject> | ChooseAction<TContext, TEvent>;
54
58
  export declare type Actions<TContext, TEvent extends EventObject> = SingleOrArray<Action<TContext, TEvent>>;
55
59
  export declare type StateKey = string | State<any>;
56
60
  export interface StateValueMap {
@@ -124,7 +128,7 @@ export declare type InvokeCallback = (callback: Sender<any>, onReceive: Receiver
124
128
  * @param context The current machine `context`
125
129
  * @param event The event that invoked the service
126
130
  */
127
- export declare type InvokeCreator<TContext, TFinalContext = any> = (context: TContext, event: AnyEventObject) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any> | Subscribable<any> | InvokeCallback;
131
+ export declare type InvokeCreator<TContext, TEvent = AnyEventObject, TFinalContext = any> = (context: TContext, event: TEvent) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any> | Subscribable<any> | InvokeCallback;
128
132
  export interface InvokeDefinition<TContext, TEvent extends EventObject> extends ActivityDefinition<TContext, TEvent> {
129
133
  /**
130
134
  * The source of the machine to be invoked, or the machine itself.
@@ -171,21 +175,28 @@ export declare type StatesConfig<TContext, TStateSchema extends StateSchema, TEv
171
175
  export declare type StatesDefinition<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = {
172
176
  [K in keyof TStateSchema['states']]: StateNodeDefinition<TContext, TStateSchema['states'][K], TEvent>;
173
177
  };
174
- export declare type TransitionConfigTargetShortcut<TContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, any, TEvent>;
178
+ export declare type TransitionConfigTarget<TContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, any, TEvent>;
179
+ export declare type TransitionConfigOrTarget<TContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
175
180
  declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
176
- [K in TEvent['type'] | NullEvent['type'] | '*']?: SingleOrArray<TransitionConfigTargetShortcut<TContext, TEvent> | (TransitionConfig<TContext, K extends TEvent['type'] ? Extract<TEvent, {
181
+ [K in TEvent['type']]?: TransitionConfigOrTarget<TContext, TEvent extends {
177
182
  type: K;
178
- }> : EventObject> & {
179
- event?: undefined;
180
- })>;
183
+ } ? TEvent : never>;
184
+ } & {
185
+ ''?: TransitionConfigOrTarget<TContext, TEvent>;
186
+ } & {
187
+ '*'?: TransitionConfigOrTarget<TContext, TEvent>;
181
188
  };
182
189
  declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<{
183
- [K in TEvent['type'] | NullEvent['type'] | '*']: TransitionConfig<TContext, K extends TEvent['type'] ? Extract<TEvent, {
190
+ [K in TEvent['type']]: TransitionConfig<TContext, TEvent extends {
184
191
  type: K;
185
- }> : EventObject> & {
192
+ } ? TEvent : never> & {
186
193
  event: K;
187
194
  };
188
- }[TEvent['type'] | NullEvent['type'] | '*']>;
195
+ }[TEvent['type']] | (TransitionConfig<TContext, TEvent> & {
196
+ event: '';
197
+ }) | (TransitionConfig<TContext, TEvent> & {
198
+ event: '*';
199
+ })>;
189
200
  export declare type TransitionsConfig<TContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
190
201
  export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
191
202
  /**
@@ -196,7 +207,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
196
207
  /**
197
208
  * The source of the machine to be invoked, or the machine itself.
198
209
  */
199
- src: string | StateMachine<any, any, any> | InvokeCreator<any, any>;
210
+ src: string | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent, any>;
200
211
  /**
201
212
  * If `true`, events sent to the parent service will be forwarded to the invoked service.
202
213
  *
@@ -345,14 +356,15 @@ export interface StateNodeDefinition<TContext, TStateSchema extends StateSchema,
345
356
  id: string;
346
357
  version: string | undefined;
347
358
  key: string;
359
+ context: TContext;
348
360
  type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
349
361
  initial: StateNodeConfig<TContext, TStateSchema, TEvent>['initial'];
350
362
  history: boolean | 'shallow' | 'deep' | undefined;
351
363
  states: StatesDefinition<TContext, TStateSchema, TEvent>;
352
364
  on: TransitionDefinitionMap<TContext, TEvent>;
353
365
  transitions: Array<TransitionDefinition<TContext, TEvent>>;
354
- onEntry: Array<ActionObject<TContext, TEvent>>;
355
- onExit: Array<ActionObject<TContext, TEvent>>;
366
+ entry: Array<ActionObject<TContext, TEvent>>;
367
+ exit: Array<ActionObject<TContext, TEvent>>;
356
368
  activities: Array<ActivityDefinition<TContext, TEvent>>;
357
369
  meta: any;
358
370
  order: number;
@@ -478,7 +490,8 @@ export declare enum ActionTypes {
478
490
  ErrorPlatform = "error.platform",
479
491
  ErrorCustom = "xstate.error",
480
492
  Update = "xstate.update",
481
- Pure = "xstate.pure"
493
+ Pure = "xstate.pure",
494
+ Choose = "xstate.choose"
482
495
  }
483
496
  export interface RaiseAction<TEvent extends EventObject> {
484
497
  type: ActionTypes.Raise;
@@ -576,6 +589,10 @@ export interface PureAction<TContext, TEvent extends EventObject> extends Action
576
589
  type: ActionTypes.Pure;
577
590
  get: (context: TContext, event: TEvent) => SingleOrArray<ActionObject<TContext, TEvent>> | undefined;
578
591
  }
592
+ export interface ChooseAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
593
+ type: ActionTypes.Choose;
594
+ conds: Array<ChooseConditon<TContext, TEvent>>;
595
+ }
579
596
  export interface TransitionDefinition<TContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
580
597
  target: Array<StateNode<TContext, any, TEvent>> | undefined;
581
598
  source: StateNode<TContext, any, TEvent>;
package/lib/types.js CHANGED
@@ -21,6 +21,7 @@ var ActionTypes;
21
21
  ActionTypes["ErrorCustom"] = "xstate.error";
22
22
  ActionTypes["Update"] = "xstate.update";
23
23
  ActionTypes["Pure"] = "xstate.pure";
24
+ ActionTypes["Choose"] = "xstate.choose";
24
25
  })(ActionTypes = exports.ActionTypes || (exports.ActionTypes = {}));
25
26
  var SpecialTargets;
26
27
  (function (SpecialTargets) {
package/lib/utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition, Guard, Subscribable, StateMachine, ConditionPredicate, SCXML, StateLike, EventData, TransitionConfig, TransitionConfigTargetShortcut, NullEvent, SingleOrArray } from './types';
1
+ import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition, Subscribable, StateMachine, ConditionPredicate, SCXML, StateLike, EventData, TransitionConfig, TransitionConfigTarget, NullEvent, SingleOrArray, Guard } from './types';
2
2
  import { StateNode } from './StateNode';
3
3
  import { State } from '.';
4
4
  import { Actor } from './Actor';
@@ -59,9 +59,10 @@ export declare function isActor(value: any): value is Actor;
59
59
  export declare const uniqueId: () => string;
60
60
  export declare function toEventObject<TEvent extends EventObject>(event: Event<TEvent>, payload?: EventData): TEvent;
61
61
  export declare function toSCXMLEvent<TEvent extends EventObject>(event: Event<TEvent> | SCXML.Event<TEvent>, scxmlEvent?: Partial<SCXML.Event<TEvent>>): SCXML.Event<TEvent>;
62
- export declare function toTransitionConfigArray<TContext, TEvent extends EventObject>(event: TEvent['type'] | NullEvent['type'] | '*', configLike: SingleOrArray<TransitionConfig<TContext, TEvent> | TransitionConfigTargetShortcut<TContext, TEvent>>): Array<TransitionConfig<TContext, TEvent> & {
62
+ export declare function toTransitionConfigArray<TContext, TEvent extends EventObject>(event: TEvent['type'] | NullEvent['type'] | '*', configLike: SingleOrArray<TransitionConfig<TContext, TEvent> | TransitionConfigTarget<TContext, TEvent>>): Array<TransitionConfig<TContext, TEvent> & {
63
63
  event: TEvent['type'] | NullEvent['type'] | '*';
64
64
  }>;
65
65
  export declare function normalizeTarget<TContext, TEvent extends EventObject>(target: SingleOrArray<string | StateNode<TContext, any, TEvent>> | undefined): Array<string | StateNode<TContext, any, TEvent>> | undefined;
66
66
  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;
67
68
  //# sourceMappingURL=utils.d.ts.map
package/lib/utils.js CHANGED
@@ -108,10 +108,10 @@ function toStatePath(stateId, delimiter) {
108
108
  exports.toStatePath = toStatePath;
109
109
  function isStateLike(state) {
110
110
  return (typeof state === 'object' &&
111
- ('value' in state &&
112
- 'context' in state &&
113
- 'event' in state &&
114
- '_event' in state));
111
+ 'value' in state &&
112
+ 'context' in state &&
113
+ 'event' in state &&
114
+ '_event' in state);
115
115
  }
116
116
  exports.isStateLike = isStateLike;
117
117
  function toStateValue(stateValue, delimiter) {
@@ -584,3 +584,21 @@ function reportUnhandledExceptionOnInvocation(originalError, currentError, id) {
584
584
  }
585
585
  }
586
586
  exports.reportUnhandledExceptionOnInvocation = reportUnhandledExceptionOnInvocation;
587
+ function evaluateGuard(machine, guard, context, _event, state) {
588
+ var guards = machine.options.guards;
589
+ var guardMeta = {
590
+ state: state,
591
+ cond: guard,
592
+ _event: _event
593
+ };
594
+ // TODO: do not hardcode!
595
+ if (guard.type === constants_1.DEFAULT_GUARD_TYPE) {
596
+ return guard.predicate(context, _event.data, guardMeta);
597
+ }
598
+ var condFn = guards[guard.type];
599
+ if (!condFn) {
600
+ throw new Error("Guard '" + guard.type + "' is not implemented on machine '" + machine.id + "'.");
601
+ }
602
+ return condFn(context, _event.data, guardMeta);
603
+ }
604
+ exports.evaluateGuard = evaluateGuard;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xstate",
3
- "version": "4.7.7",
3
+ "version": "4.9.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",
@@ -66,7 +66,7 @@
66
66
  "rxjs": "^6.5.1",
67
67
  "ts-jest": "^24.1.9",
68
68
  "tslib": "^1.10.0",
69
- "typescript": "^3.7.2",
69
+ "typescript": "^3.8.3",
70
70
  "xml-js": "^1.6.11"
71
71
  }
72
72
  }