xstate 4.27.0 → 4.30.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.
Files changed (59) hide show
  1. package/CHANGELOG.md +227 -90
  2. package/README.md +5 -5
  3. package/dist/xstate.interpreter.js +1 -1
  4. package/dist/xstate.js +1 -1
  5. package/dist/xstate.web.js +2 -2
  6. package/es/Actor.d.ts +1 -2
  7. package/es/Actor.js +5 -5
  8. package/es/Machine.d.ts +5 -4
  9. package/es/State.d.ts +17 -14
  10. package/es/State.js +4 -4
  11. package/es/StateNode.d.ts +22 -17
  12. package/es/StateNode.js +33 -36
  13. package/es/actions.d.ts +3 -4
  14. package/es/actions.js +22 -3
  15. package/es/behaviors.d.ts +1 -1
  16. package/es/devTools.d.ts +3 -4
  17. package/es/each.d.ts +1 -1
  18. package/es/index.d.ts +10 -21
  19. package/es/index.js +11 -22
  20. package/es/interpreter.d.ts +34 -31
  21. package/es/interpreter.js +21 -13
  22. package/es/model.d.ts +2 -2
  23. package/es/model.types.d.ts +8 -9
  24. package/es/schema.d.ts +1 -0
  25. package/es/schema.js +2 -1
  26. package/es/scxml.d.ts +2 -2
  27. package/es/stateUtils.d.ts +6 -5
  28. package/es/typegenTypes.d.ts +121 -0
  29. package/es/types.d.ts +118 -57
  30. package/es/utils.d.ts +7 -2
  31. package/es/utils.js +9 -2
  32. package/lib/Actor.d.ts +1 -2
  33. package/lib/Actor.js +4 -4
  34. package/lib/Machine.d.ts +5 -4
  35. package/lib/State.d.ts +17 -14
  36. package/lib/State.js +4 -4
  37. package/lib/StateNode.d.ts +22 -17
  38. package/lib/StateNode.js +32 -35
  39. package/lib/actions.d.ts +3 -4
  40. package/lib/actions.js +20 -0
  41. package/lib/behaviors.d.ts +1 -1
  42. package/lib/devTools.d.ts +3 -4
  43. package/lib/each.d.ts +1 -1
  44. package/lib/index.d.ts +10 -21
  45. package/lib/index.js +15 -26
  46. package/lib/interpreter.d.ts +34 -31
  47. package/lib/interpreter.js +18 -10
  48. package/lib/model.d.ts +2 -2
  49. package/lib/model.types.d.ts +8 -9
  50. package/lib/schema.d.ts +1 -0
  51. package/lib/schema.js +2 -0
  52. package/lib/scxml.d.ts +2 -2
  53. package/lib/stateUtils.d.ts +6 -5
  54. package/lib/typegenTypes.d.ts +121 -0
  55. package/lib/typegenTypes.js +2 -0
  56. package/lib/types.d.ts +118 -57
  57. package/lib/utils.d.ts +7 -2
  58. package/lib/utils.js +10 -1
  59. package/package.json +5 -5
@@ -1,9 +1,11 @@
1
1
  import { StateMachine, Event, EventObject, DefaultContext, StateSchema, StateValue, InterpreterOptions, SingleOrArray, Subscribable, DoneEvent, MachineOptions, SCXML, EventData, Observer, Spawnable, Typestate, ActorRef, ActorRefFrom, Behavior, Subscription } from './types';
2
2
  import { State } from './State';
3
+ import { StateConfig } from '.';
4
+ import { AreAllImplementationsAssumedToBeProvided, TypegenDisabled } from './typegenTypes';
3
5
  export declare type StateListener<TContext, TEvent extends EventObject, TStateSchema extends StateSchema<TContext> = any, TTypestate extends Typestate<TContext> = {
4
6
  value: any;
5
7
  context: TContext;
6
- }> = (state: State<TContext, TEvent, TStateSchema, TTypestate>, event: TEvent) => void;
8
+ }, TResolvedTypesMeta = TypegenDisabled> = (state: State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>, event: TEvent) => void;
7
9
  export declare type ContextListener<TContext = DefaultContext> = (context: TContext, prevContext: TContext | undefined) => void;
8
10
  export declare type EventListener<TEvent extends EventObject = EventObject> = (event: TEvent) => void;
9
11
  export declare type Listener = () => void;
@@ -21,23 +23,24 @@ export declare enum InterpreterStatus {
21
23
  Running = 1,
22
24
  Stopped = 2
23
25
  }
24
- declare global {
25
- interface SymbolConstructor {
26
- readonly observable: symbol;
27
- }
28
- }
29
26
  export declare class Interpreter<TContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
30
27
  value: any;
31
28
  context: TContext;
32
- }> implements ActorRef<TEvent, State<TContext, TEvent, TStateSchema, TTypestate>> {
33
- machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate>;
29
+ }, TResolvedTypesMeta = TypegenDisabled> implements ActorRef<TEvent, State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>> {
30
+ machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate, any, any, TResolvedTypesMeta>;
34
31
  /**
35
32
  * The default interpreter options:
36
33
  *
37
34
  * - `clock` uses the global `setTimeout` and `clearTimeout` functions
38
35
  * - `logger` uses the global `console.log()` method
39
36
  */
40
- static defaultOptions: InterpreterOptions;
37
+ static defaultOptions: {
38
+ execute: boolean;
39
+ deferEvents: boolean;
40
+ clock: Clock;
41
+ logger: any;
42
+ devTools: boolean;
43
+ };
41
44
  /**
42
45
  * The current state of the interpreted machine.
43
46
  */
@@ -77,9 +80,9 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
77
80
  * @param machine The machine to be interpreted
78
81
  * @param options Interpreter options
79
82
  */
80
- constructor(machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate>, options?: Partial<InterpreterOptions>);
81
- get initialState(): State<TContext, TEvent, TStateSchema, TTypestate>;
82
- get state(): State<TContext, TEvent, TStateSchema, TTypestate>;
83
+ constructor(machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate, any, any, TResolvedTypesMeta>, options?: InterpreterOptions);
84
+ get initialState(): State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
85
+ get state(): State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
83
86
  static interpret: typeof interpret;
84
87
  /**
85
88
  * Executes the actions of the given state, with that state's `context` and `event`.
@@ -87,56 +90,56 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
87
90
  * @param state The state whose actions will be executed
88
91
  * @param actionsConfig The action implementations to use
89
92
  */
90
- execute(state: State<TContext, TEvent, TStateSchema, TTypestate>, actionsConfig?: MachineOptions<TContext, TEvent>['actions']): void;
93
+ execute(state: State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>, actionsConfig?: MachineOptions<TContext, TEvent>['actions']): void;
91
94
  private update;
92
- onTransition(listener: StateListener<TContext, TEvent, TStateSchema, TTypestate>): this;
93
- subscribe(nextListener?: (state: State<TContext, TEvent, any, TTypestate>) => void, errorListener?: (error: any) => void, completeListener?: () => void): Subscription;
94
- subscribe(observer: Observer<State<TContext, TEvent, any, TTypestate>>): Subscription;
95
+ onTransition(listener: StateListener<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>): this;
96
+ subscribe(nextListener?: (state: State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>) => void, errorListener?: (error: any) => void, completeListener?: () => void): Subscription;
97
+ subscribe(observer: Observer<State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>>): Subscription;
95
98
  /**
96
99
  * Adds an event listener that is notified whenever an event is sent to the running interpreter.
97
100
  * @param listener The event listener
98
101
  */
99
- onEvent(listener: EventListener): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
102
+ onEvent(listener: EventListener): this;
100
103
  /**
101
104
  * Adds an event listener that is notified whenever a `send` event occurs.
102
105
  * @param listener The event listener
103
106
  */
104
- onSend(listener: EventListener): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
107
+ onSend(listener: EventListener): this;
105
108
  /**
106
109
  * Adds a context listener that is notified whenever the state context changes.
107
110
  * @param listener The context listener
108
111
  */
109
- onChange(listener: ContextListener<TContext>): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
112
+ onChange(listener: ContextListener<TContext>): this;
110
113
  /**
111
114
  * Adds a listener that is notified when the machine is stopped.
112
115
  * @param listener The listener
113
116
  */
114
- onStop(listener: Listener): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
117
+ onStop(listener: Listener): this;
115
118
  /**
116
119
  * Adds a state listener that is notified when the statechart has reached its final state.
117
120
  * @param listener The state listener
118
121
  */
119
- onDone(listener: EventListener<DoneEvent>): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
122
+ onDone(listener: EventListener<DoneEvent>): this;
120
123
  /**
121
124
  * Removes a listener.
122
125
  * @param listener The listener to remove
123
126
  */
124
- off(listener: (...args: any[]) => void): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
127
+ off(listener: (...args: any[]) => void): this;
125
128
  /**
126
129
  * Alias for Interpreter.prototype.start
127
130
  */
128
- init: (initialState?: StateValue | State<TContext, TEvent, TStateSchema, TTypestate> | undefined) => Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
131
+ init: (initialState?: StateValue | State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta> | StateConfig<TContext, TEvent> | undefined) => this;
129
132
  /**
130
133
  * Starts the interpreter from the given state, or the initial state.
131
134
  * @param initialState The state to start the statechart from
132
135
  */
133
- start(initialState?: State<TContext, TEvent, TStateSchema, TTypestate> | StateValue): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
136
+ start(initialState?: State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta> | StateConfig<TContext, TEvent> | StateValue): this;
134
137
  /**
135
138
  * Stops the interpreter and unsubscribe all listeners.
136
139
  *
137
140
  * This will also notify the `onStop` listeners.
138
141
  */
139
- stop(): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
142
+ stop(): this;
140
143
  /**
141
144
  * Sends an event to the running interpreter to trigger a transition.
142
145
  *
@@ -146,7 +149,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
146
149
  *
147
150
  * @param event The event(s) to send
148
151
  */
149
- send: (event: SingleOrArray<Event<TEvent>> | SCXML.Event<TEvent>, payload?: EventData | undefined) => State<TContext, TEvent, TStateSchema, TTypestate>;
152
+ send: (event: SingleOrArray<Event<TEvent>> | SCXML.Event<TEvent>, payload?: EventData | undefined) => State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
150
153
  private batch;
151
154
  /**
152
155
  * Returns a send function bound to this interpreter instance.
@@ -162,7 +165,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
162
165
  *
163
166
  * @param event The event to determine the next state
164
167
  */
165
- nextState(event: Event<TEvent> | SCXML.Event<TEvent>): State<TContext, TEvent, TStateSchema, TTypestate>;
168
+ nextState(event: Event<TEvent> | SCXML.Event<TEvent>): State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
166
169
  private forward;
167
170
  private defer;
168
171
  private cancel;
@@ -186,11 +189,11 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
186
189
  toJSON(): {
187
190
  id: string;
188
191
  };
189
- [Symbol.observable](): Subscribable<State<TContext, TEvent, TStateSchema, TTypestate>>;
190
- getSnapshot(): State<TContext, TEvent, TStateSchema, TTypestate>;
192
+ [Symbol.observable](): Subscribable<State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>>;
193
+ getSnapshot(): State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
191
194
  }
192
195
  export declare function spawn<T extends Behavior<any, any>>(entity: T, nameOrOptions?: string | SpawnOptions): ActorRefFrom<T>;
193
- export declare function spawn<TC, TE extends EventObject>(entity: StateMachine<TC, any, TE>, nameOrOptions?: string | SpawnOptions): ActorRefFrom<StateMachine<TC, any, TE>>;
196
+ export declare function spawn<TC, TE extends EventObject>(entity: StateMachine<TC, any, TE, any, any, any, any>, nameOrOptions?: string | SpawnOptions): ActorRefFrom<StateMachine<TC, any, TE, any, any, any, any>>;
194
197
  export declare function spawn(entity: Spawnable, nameOrOptions?: string | SpawnOptions): ActorRef<any>;
195
198
  /**
196
199
  * Creates a new Interpreter instance for the given machine with the provided options, if any.
@@ -201,6 +204,6 @@ export declare function spawn(entity: Spawnable, nameOrOptions?: string | SpawnO
201
204
  export declare function interpret<TContext = DefaultContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
202
205
  value: any;
203
206
  context: TContext;
204
- }>(machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate>, options?: Partial<InterpreterOptions>): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
207
+ }, TResolvedTypesMeta = TypegenDisabled>(machine: AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends true ? StateMachine<TContext, TStateSchema, TEvent, TTypestate, any, any, TResolvedTypesMeta> : 'Some implementations missing', options?: InterpreterOptions): Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta>;
205
208
  export {};
206
209
  //# sourceMappingURL=interpreter.d.ts.map
@@ -462,7 +462,7 @@ function () {
462
462
  this.initialized = true;
463
463
  this.status = exports.InterpreterStatus.Running;
464
464
  var resolvedState = initialState === undefined ? this.initialState : serviceScope.provide(this, function () {
465
- return State.isState(initialState) ? _this.machine.resolveState(initialState) : _this.machine.resolveState(State.State.from(initialState, _this.machine.context));
465
+ return State.isStateConfig(initialState) ? _this.machine.resolveState(initialState) : _this.machine.resolveState(State.State.from(initialState, _this.machine.context));
466
466
  });
467
467
 
468
468
  if (this.options.devTools) {
@@ -561,7 +561,9 @@ function () {
561
561
  return this;
562
562
  }
563
563
 
564
- this.state.configuration.forEach(function (stateNode) {
564
+ _tslib.__spreadArray([], _tslib.__read(this.state.configuration), false).sort(function (a, b) {
565
+ return b.order - a.order;
566
+ }).forEach(function (stateNode) {
565
567
  var e_11, _a;
566
568
 
567
569
  try {
@@ -583,6 +585,7 @@ function () {
583
585
  }
584
586
  }); // Stop all children
585
587
 
588
+
586
589
  this.children.forEach(function (child) {
587
590
  if (utils.isFunction(child.stop)) {
588
591
  child.stop();
@@ -1039,7 +1042,8 @@ function () {
1039
1042
  }
1040
1043
  }
1041
1044
  });
1042
- var actor = {
1045
+
1046
+ var actor = _tslib.__assign({
1043
1047
  id: id,
1044
1048
  send: function () {
1045
1049
  return void 0;
@@ -1083,7 +1087,8 @@ function () {
1083
1087
  getSnapshot: function () {
1084
1088
  return resolvedData;
1085
1089
  }
1086
- };
1090
+ }, utils.interopSymbols);
1091
+
1087
1092
  this.children.set(id, actor);
1088
1093
  return actor;
1089
1094
  };
@@ -1127,7 +1132,7 @@ function () {
1127
1132
  return this.spawnPromise(callbackStop, id);
1128
1133
  }
1129
1134
 
1130
- var actor = {
1135
+ var actor = _tslib.__assign({
1131
1136
  id: id,
1132
1137
  send: function (event) {
1133
1138
  return receivers.forEach(function (receiver) {
@@ -1157,7 +1162,8 @@ function () {
1157
1162
  getSnapshot: function () {
1158
1163
  return emitted;
1159
1164
  }
1160
- };
1165
+ }, utils.interopSymbols);
1166
+
1161
1167
  this.children.set(id, actor);
1162
1168
  return actor;
1163
1169
  };
@@ -1185,7 +1191,8 @@ function () {
1185
1191
  origin: id
1186
1192
  }));
1187
1193
  });
1188
- var actor = {
1194
+
1195
+ var actor = _tslib.__assign({
1189
1196
  id: id,
1190
1197
  send: function () {
1191
1198
  return void 0;
@@ -1204,7 +1211,8 @@ function () {
1204
1211
  id: id
1205
1212
  };
1206
1213
  }
1207
- };
1214
+ }, utils.interopSymbols);
1215
+
1208
1216
  this.children.set(id, actor);
1209
1217
  return actor;
1210
1218
  };
@@ -1232,7 +1240,7 @@ function () {
1232
1240
  };
1233
1241
 
1234
1242
  Interpreter.prototype.spawnEffect = function (id, dispose) {
1235
- this.children.set(id, {
1243
+ this.children.set(id, _tslib.__assign({
1236
1244
  id: id,
1237
1245
  send: function () {
1238
1246
  return void 0;
@@ -1253,7 +1261,7 @@ function () {
1253
1261
  id: id
1254
1262
  };
1255
1263
  }
1256
- });
1264
+ }, utils.interopSymbols));
1257
1265
  };
1258
1266
 
1259
1267
  Interpreter.prototype.attachDev = function () {
package/lib/model.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { EventObject, BaseActionObject } from './types';
2
- import { Cast, UnionFromCreatorsReturnTypes, FinalModelCreators, Model, ModelCreators, Prop, IsNever } from './model.types';
1
+ import type { Cast, EventObject, BaseActionObject, Prop, IsNever } from './types';
2
+ import { UnionFromCreatorsReturnTypes, FinalModelCreators, Model, ModelCreators } from './model.types';
3
3
  export declare function createModel<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject>(initialContext: TContext): Model<TContext, TEvent, TAction, void>;
4
4
  export declare function createModel<TContext, TModelCreators extends ModelCreators<TModelCreators>, TFinalModelCreators = FinalModelCreators<TModelCreators>, TComputedEvent = UnionFromCreatorsReturnTypes<Prop<TFinalModelCreators, 'events'>>, TComputedAction = UnionFromCreatorsReturnTypes<Prop<TFinalModelCreators, 'actions'>>>(initialContext: TContext, creators: TModelCreators): Model<TContext, Cast<TComputedEvent, EventObject>, IsNever<TComputedAction> extends true ? BaseActionObject : Cast<TComputedAction, BaseActionObject>, TFinalModelCreators>;
5
5
  //# sourceMappingURL=model.d.ts.map
@@ -1,18 +1,17 @@
1
- import { EventObject, Assigner, ExtractEvent, PropertyAssigner, AssignAction, MachineConfig, MachineOptions, StateMachine, BaseActionObject } from './types';
2
- export declare type AnyFunction = (...args: any[]) => any;
3
- export declare type IsNever<T> = [T] extends [never] ? true : false;
4
- export declare type Cast<T extends any, TCastType extends any> = T extends TCastType ? T : TCastType;
5
- export declare type Compute<A extends any> = {
6
- [K in keyof A]: A[K];
7
- } & unknown;
8
- export declare type Prop<T, K> = K extends keyof T ? T[K] : never;
1
+ import { AnyFunction, AssignAction, Assigner, BaseActionObject, Compute, EventObject, ExtractEvent, MachineConfig, Prop, PropertyAssigner, StateMachine, InternalMachineOptions, ServiceMap } from './types';
2
+ import { ResolveTypegenMeta, TypegenConstraint, TypegenDisabled } from './typegenTypes';
9
3
  export interface Model<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TModelCreators = void> {
10
4
  initialContext: TContext;
11
5
  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>>;
12
6
  events: Prop<TModelCreators, 'events'>;
13
7
  actions: Prop<TModelCreators, 'actions'>;
14
8
  reset: () => AssignAction<TContext, any>;
15
- createMachine: (config: MachineConfig<TContext, any, TEvent, TAction>, implementations?: Partial<MachineOptions<TContext, TEvent, TAction>>) => StateMachine<TContext, any, TEvent>;
9
+ createMachine: {
10
+ <TServiceMap extends ServiceMap = ServiceMap, TTypesMeta extends TypegenConstraint = TypegenDisabled>(config: MachineConfig<TContext, any, TEvent, TAction, TServiceMap, TTypesMeta>, implementations?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TServiceMap>>): StateMachine<TContext, any, TEvent, {
11
+ value: any;
12
+ context: TContext;
13
+ }, TAction, TServiceMap, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TServiceMap>>;
14
+ };
16
15
  }
17
16
  export declare type ModelContextFrom<TModel extends Model<any, any, any, any>> = TModel extends Model<infer TContext, any, any, any> ? TContext : never;
18
17
  export declare type ModelEventsFrom<TModel extends Model<any, any, any, any> | undefined> = TModel extends Model<any, infer TEvent, any, any> ? TEvent : EventObject;
package/lib/schema.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export declare function createSchema<T>(schema?: any): T;
2
+ export declare const t: typeof createSchema;
2
3
  //# sourceMappingURL=schema.d.ts.map
package/lib/schema.js CHANGED
@@ -5,5 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  function createSchema(schema) {
6
6
  return schema;
7
7
  }
8
+ var t = createSchema;
8
9
 
9
10
  exports.createSchema = createSchema;
11
+ exports.t = t;
package/lib/scxml.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { StateNode } from './index';
1
+ import { StateMachine } from './index';
2
2
  export interface ScxmlToMachineOptions {
3
3
  delimiter?: string;
4
4
  }
5
- export declare function toMachine(xml: string, options: ScxmlToMachineOptions): StateNode;
5
+ export declare function toMachine(xml: string, options: ScxmlToMachineOptions): StateMachine<any, any, any, any, any, any, any>;
6
6
  //# sourceMappingURL=scxml.d.ts.map
@@ -1,15 +1,16 @@
1
- import { EventObject, StateNode, StateValue } from '.';
1
+ import { EventObject, StateValue } from './types';
2
+ import { StateNode } from './StateNode';
2
3
  declare type Configuration<TC, TE extends EventObject> = Iterable<StateNode<TC, any, TE>>;
3
4
  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, any>) => boolean;
5
+ export declare const isLeafNode: (stateNode: StateNode<any, any, any, any, any, any>) => boolean;
5
6
  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, 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>>): Set<StateNode<TC, any, TE, any>>;
7
+ export declare function getAllStateNodes<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE, any, any, any>): Array<StateNode<TC, any, TE, any, any, any>>;
8
+ export declare function getConfiguration<TC, TE extends EventObject>(prevStateNodes: Iterable<StateNode<TC, any, TE, any, any, any>>, stateNodes: Iterable<StateNode<TC, any, TE, any, any, any>>): Set<StateNode<TC, any, TE, any, any, any>>;
8
9
  export declare function getAdjList<TC, TE extends EventObject>(configuration: Configuration<TC, TE>): AdjList<TC, TE>;
9
10
  export declare function getValue<TC, TE extends EventObject>(rootNode: StateNode<TC, any, TE, any>, configuration: Configuration<TC, TE>): StateValue;
10
11
  export declare function has<T>(iterable: Iterable<T>, item: T): boolean;
11
12
  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, any>>, stateNode: StateNode<TC, any, TE, any>): boolean;
13
+ export declare function isInFinalState<TC, TE extends EventObject>(configuration: Array<StateNode<TC, any, TE, any, any, any>>, stateNode: StateNode<TC, any, TE, any, any, any>): boolean;
13
14
  export declare function getMeta(configuration?: StateNode[]): Record<string, any>;
14
15
  export declare function getTagsFromConfiguration(configuration: StateNode<any, any, any, any>[]): Set<string>;
15
16
  export {};
@@ -0,0 +1,121 @@
1
+ import { BaseActionObject, EventObject, IndexByType, IsNever, Prop, Values, IsAny, ServiceMap, Cast } from './types';
2
+ export interface TypegenDisabled {
3
+ '@@xstate/typegen': false;
4
+ }
5
+ export interface TypegenEnabled {
6
+ '@@xstate/typegen': true;
7
+ }
8
+ export interface TypegenMeta extends TypegenEnabled {
9
+ /**
10
+ * Allows you to specify all the results of state.matches
11
+ */
12
+ matchesStates: string | {};
13
+ /**
14
+ * Allows you to specify all tags used by the machine
15
+ */
16
+ tags: string;
17
+ /**
18
+ * Allows you to specify all the missing implementations
19
+ * of the machine
20
+ */
21
+ missingImplementations: {
22
+ actions: string;
23
+ delays: string;
24
+ guards: string;
25
+ services: string;
26
+ };
27
+ /**
28
+ * A map for the internal events of the machine.
29
+ *
30
+ * key: 'done.invoke.myService'
31
+ * value: {
32
+ * type: 'done.invoke.myService';
33
+ * data: unknown;
34
+ * __tip: 'Declare the type in event types!';
35
+ * }
36
+ */
37
+ internalEvents: {};
38
+ /**
39
+ * Maps the name of the service to the event type
40
+ * of the done.invoke action
41
+ *
42
+ * key: 'invokeSrc'
43
+ * value: 'done.invoke.invokeName'
44
+ */
45
+ invokeSrcNameMap: Record<string, string>;
46
+ /**
47
+ * Keeps track of which events lead to which
48
+ * actions.
49
+ *
50
+ * Key: 'EVENT_NAME'
51
+ * Value: 'actionName' | 'otherActionName'
52
+ */
53
+ eventsCausingActions: Record<string, string>;
54
+ /**
55
+ * Keeps track of which events lead to which
56
+ * delays.
57
+ *
58
+ * Key: 'EVENT_NAME'
59
+ * Value: 'delayName' | 'otherDelayName'
60
+ */
61
+ eventsCausingDelays: Record<string, string>;
62
+ /**
63
+ * Keeps track of which events lead to which
64
+ * guards.
65
+ *
66
+ * Key: 'EVENT_NAME'
67
+ * Value: 'guardName' | 'otherGuardName'
68
+ */
69
+ eventsCausingGuards: Record<string, string>;
70
+ /**
71
+ * Keeps track of which events lead to which
72
+ * services.
73
+ *
74
+ * Key: 'EVENT_NAME'
75
+ * Value: 'serviceName' | 'otherServiceName'
76
+ */
77
+ eventsCausingServices: Record<string, string>;
78
+ }
79
+ export interface ResolvedTypegenMeta extends TypegenMeta {
80
+ indexedActions: Record<string, BaseActionObject>;
81
+ indexedEvents: Record<string, EventObject>;
82
+ }
83
+ export declare type TypegenConstraint = TypegenEnabled | TypegenDisabled;
84
+ export declare type AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta, TMissingImplementations = Prop<TResolvedTypesMeta, 'missingImplementations'>> = IsAny<TResolvedTypesMeta> extends true ? true : TResolvedTypesMeta extends TypegenEnabled ? IsNever<Values<{
85
+ [K in keyof TMissingImplementations]: TMissingImplementations[K];
86
+ }>> extends true ? true : false : true;
87
+ export declare type MarkAllImplementationsAsProvided<TResolvedTypesMeta> = TResolvedTypesMeta & {
88
+ missingImplementations: {
89
+ actions: never;
90
+ delays: never;
91
+ guards: never;
92
+ services: never;
93
+ };
94
+ };
95
+ declare type GenerateServiceEvent<TServiceName, TEventType, TServiceMap extends ServiceMap> = TEventType extends any ? {
96
+ type: TEventType;
97
+ } & Prop<TServiceMap, TServiceName> : never;
98
+ declare type GenerateServiceEvents<TServiceMap extends ServiceMap, TInvokeSrcNameMap> = string extends keyof TServiceMap ? never : Cast<{
99
+ [K in keyof TInvokeSrcNameMap]: GenerateServiceEvent<K, TInvokeSrcNameMap[K], TServiceMap>;
100
+ }[keyof TInvokeSrcNameMap], EventObject>;
101
+ declare type MergeWithInternalEvents<TIndexedEvents, TInternalEvents> = TIndexedEvents & Pick<TInternalEvents, Exclude<keyof TInternalEvents, keyof TIndexedEvents>>;
102
+ declare type AllowAllEvents = {
103
+ eventsCausingActions: Record<string, string>;
104
+ eventsCausingDelays: Record<string, string>;
105
+ eventsCausingGuards: Record<string, string>;
106
+ eventsCausingServices: Record<string, string>;
107
+ };
108
+ export declare type ResolveTypegenMeta<TTypesMeta extends TypegenConstraint, TEvent extends EventObject, TAction extends BaseActionObject, TServiceMap extends ServiceMap> = TTypesMeta extends TypegenEnabled ? TTypesMeta & {
109
+ indexedActions: IndexByType<TAction>;
110
+ indexedEvents: MergeWithInternalEvents<IndexByType<(string extends TEvent['type'] ? never : TEvent) | GenerateServiceEvents<TServiceMap, Prop<TTypesMeta, 'invokeSrcNameMap'>>>, Prop<TTypesMeta, 'internalEvents'>>;
111
+ } : MarkAllImplementationsAsProvided<TypegenDisabled> & AllowAllEvents & {
112
+ indexedActions: IndexByType<TAction>;
113
+ indexedEvents: Record<string, TEvent> & {
114
+ __XSTATE_ALLOW_ANY_INVOKE_DATA_HACK__: {
115
+ data: any;
116
+ };
117
+ };
118
+ invokeSrcNameMap: Record<string, '__XSTATE_ALLOW_ANY_INVOKE_DATA_HACK__'>;
119
+ };
120
+ export {};
121
+ //# sourceMappingURL=typegenTypes.d.ts.map
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });