xstate 5.0.0-beta.28 → 5.0.0-beta.30

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 (60) hide show
  1. package/actions/dist/xstate-actions.cjs.js +3 -3
  2. package/actions/dist/xstate-actions.development.cjs.js +3 -3
  3. package/actions/dist/xstate-actions.development.esm.js +3 -3
  4. package/actions/dist/xstate-actions.esm.js +3 -3
  5. package/actions/dist/xstate-actions.umd.min.js +1 -1
  6. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  7. package/actors/dist/xstate-actors.cjs.js +104 -139
  8. package/actors/dist/xstate-actors.cjs.mjs +1 -3
  9. package/actors/dist/xstate-actors.development.cjs.js +104 -139
  10. package/actors/dist/xstate-actors.development.cjs.mjs +1 -3
  11. package/actors/dist/xstate-actors.development.esm.js +105 -138
  12. package/actors/dist/xstate-actors.esm.js +105 -138
  13. package/actors/dist/xstate-actors.umd.min.js +1 -1
  14. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  15. package/dist/declarations/src/State.d.ts +4 -6
  16. package/dist/declarations/src/StateMachine.d.ts +28 -21
  17. package/dist/declarations/src/StateNode.d.ts +1 -1
  18. package/dist/declarations/src/actions/assign.d.ts +4 -4
  19. package/dist/declarations/src/actions/cancel.d.ts +4 -4
  20. package/dist/declarations/src/actions/choose.d.ts +3 -3
  21. package/dist/declarations/src/actions/log.d.ts +4 -4
  22. package/dist/declarations/src/actions/pure.d.ts +1 -1
  23. package/dist/declarations/src/actions/raise.d.ts +2 -2
  24. package/dist/declarations/src/actions/send.d.ts +7 -7
  25. package/dist/declarations/src/actions/stop.d.ts +4 -4
  26. package/dist/declarations/src/actors/callback.d.ts +8 -8
  27. package/dist/declarations/src/actors/index.d.ts +3 -5
  28. package/dist/declarations/src/actors/observable.d.ts +12 -13
  29. package/dist/declarations/src/actors/promise.d.ts +11 -14
  30. package/dist/declarations/src/actors/transition.d.ts +10 -7
  31. package/dist/declarations/src/index.d.ts +1 -1
  32. package/dist/declarations/src/interpreter.d.ts +4 -4
  33. package/dist/declarations/src/stateUtils.d.ts +5 -6
  34. package/dist/declarations/src/types.d.ts +92 -70
  35. package/dist/{interpreter-a1432c7d.development.cjs.js → interpreter-7f1dc557.development.cjs.js} +9 -30
  36. package/dist/{interpreter-a77bb0ec.development.esm.js → interpreter-945c4b96.development.esm.js} +10 -28
  37. package/dist/{interpreter-672794ae.cjs.js → interpreter-a2c1e529.cjs.js} +9 -30
  38. package/dist/{interpreter-b5203bcb.esm.js → interpreter-b8f53c4b.esm.js} +10 -28
  39. package/dist/{raise-b9c9a234.esm.js → raise-0b7dde8b.esm.js} +13 -11
  40. package/dist/{raise-a60c9290.development.esm.js → raise-6e4f5cf7.development.esm.js} +13 -11
  41. package/dist/{raise-74b72ca5.development.cjs.js → raise-7cae872b.development.cjs.js} +13 -11
  42. package/dist/{raise-436a57a2.cjs.js → raise-e79b1f86.cjs.js} +13 -11
  43. package/dist/{send-e8b55d00.development.cjs.js → send-19a256f0.development.cjs.js} +2 -2
  44. package/dist/{send-e63b7b83.development.esm.js → send-a1d772da.development.esm.js} +2 -2
  45. package/dist/{send-35e1a689.cjs.js → send-e7063201.cjs.js} +2 -2
  46. package/dist/{send-4192e7bc.esm.js → send-f4fb3ba5.esm.js} +2 -2
  47. package/dist/xstate.cjs.js +20 -31
  48. package/dist/xstate.cjs.mjs +0 -2
  49. package/dist/xstate.development.cjs.js +20 -31
  50. package/dist/xstate.development.cjs.mjs +0 -2
  51. package/dist/xstate.development.esm.js +24 -33
  52. package/dist/xstate.esm.js +24 -33
  53. package/dist/xstate.umd.min.js +1 -1
  54. package/dist/xstate.umd.min.js.map +1 -1
  55. package/guards/dist/xstate-guards.cjs.js +2 -2
  56. package/guards/dist/xstate-guards.development.cjs.js +2 -2
  57. package/guards/dist/xstate-guards.development.esm.js +2 -2
  58. package/guards/dist/xstate-guards.esm.js +2 -2
  59. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  60. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var interpreter = require('../../dist/interpreter-672794ae.cjs.js');
5
+ var interpreter = require('../../dist/interpreter-a2c1e529.cjs.js');
6
6
  require('../../dev/dist/xstate-dev.cjs.js');
7
7
 
8
8
  /**
@@ -11,21 +11,28 @@ require('../../dev/dist/xstate-dev.cjs.js');
11
11
  * A transition function is a function that takes the current state and an event and returns the next state.
12
12
  *
13
13
  * @param transition The transition function that returns the next state given the current state and event.
14
- * @param initialState The initial state of the transition function.
14
+ * @param initialContext The initial state of the transition function.
15
15
  * @returns Actor logic
16
16
  */
17
- function fromTransition(transition, initialState) {
17
+ function fromTransition(transition, initialContext) {
18
18
  return {
19
19
  config: transition,
20
20
  transition: (state, event, actorContext) => {
21
- return transition(state, event, actorContext);
21
+ return {
22
+ ...state,
23
+ context: transition(state.context, event, actorContext)
24
+ };
22
25
  },
23
26
  getInitialState: (_, input) => {
24
- return typeof initialState === 'function' ? initialState({
25
- input
26
- }) : initialState;
27
+ return {
28
+ status: 'active',
29
+ output: undefined,
30
+ error: undefined,
31
+ context: typeof initialContext === 'function' ? initialContext({
32
+ input
33
+ }) : initialContext
34
+ };
27
35
  },
28
- getSnapshot: state => state,
29
36
  getPersistedState: state => state,
30
37
  restoreState: state => state
31
38
  };
@@ -48,58 +55,52 @@ function fromCallback(invokeCallback) {
48
55
  }) => {
49
56
  if (event.type === interpreter.XSTATE_INIT) {
50
57
  const sendBack = eventForParent => {
51
- if (state.canceled) {
58
+ if (state.status === 'stopped') {
52
59
  return;
53
60
  }
54
61
  self._parent?.send(eventForParent);
55
62
  };
56
63
  const receive = newListener => {
57
- state.receivers.add(newListener);
64
+ state._receivers.add(newListener);
58
65
  };
59
- state.dispose = invokeCallback({
66
+ state._dispose = invokeCallback({
60
67
  input: state.input,
61
68
  system,
62
69
  self: self,
63
70
  sendBack,
64
71
  receive
65
72
  });
66
- if (interpreter.isPromiseLike(state.dispose)) {
67
- state.dispose.then(resolved => {
68
- self._parent?.send(interpreter.createDoneActorEvent(id, resolved));
69
- state.canceled = true;
70
- }, errorData => {
71
- state.canceled = true;
72
- self._parent?.send(interpreter.createErrorActorEvent(id, errorData));
73
- });
74
- }
75
73
  return state;
76
74
  }
77
75
  if (event.type === interpreter.XSTATE_STOP) {
78
- state.canceled = true;
79
- if (typeof state.dispose === 'function') {
80
- state.dispose();
76
+ state = {
77
+ ...state,
78
+ status: 'stopped',
79
+ error: undefined
80
+ };
81
+ if (typeof state._dispose === 'function') {
82
+ state._dispose();
81
83
  }
82
84
  return state;
83
85
  }
84
- state.receivers.forEach(receiver => receiver(event));
86
+ state._receivers.forEach(receiver => receiver(event));
85
87
  return state;
86
88
  },
87
89
  getInitialState: (_, input) => {
88
90
  return {
89
- canceled: false,
90
- receivers: new Set(),
91
- dispose: undefined,
92
- input
91
+ status: 'active',
92
+ output: undefined,
93
+ error: undefined,
94
+ input,
95
+ _receivers: new Set(),
96
+ _dispose: undefined
93
97
  };
94
98
  },
95
- getSnapshot: () => undefined,
96
99
  getPersistedState: ({
97
- input,
98
- canceled
99
- }) => ({
100
- input,
101
- canceled
102
- })
100
+ _dispose,
101
+ _receivers,
102
+ ...rest
103
+ }) => rest
103
104
  };
104
105
  }
105
106
 
@@ -109,62 +110,66 @@ function fromObservable(observableCreator) {
109
110
  const completeEventType = '$$xstate.complete';
110
111
  return {
111
112
  config: observableCreator,
112
- transition: (state, event, {
113
+ transition: (snapshot, event, {
113
114
  self,
114
115
  id,
115
116
  defer
116
117
  }) => {
117
- if (state.status !== 'active') {
118
- return state;
118
+ if (snapshot.status !== 'active') {
119
+ return snapshot;
119
120
  }
120
121
  switch (event.type) {
121
122
  case nextEventType:
122
- // match the exact timing of events sent by machines
123
- // send actions are not executed immediately
124
- defer(() => {
125
- self._parent?.send({
126
- type: `xstate.snapshot.${id}`,
127
- data: event.data
123
+ {
124
+ const newSnapshot = {
125
+ ...snapshot,
126
+ context: event.data
127
+ };
128
+ // match the exact timing of events sent by machines
129
+ // send actions are not executed immediately
130
+ defer(() => {
131
+ self._parent?.send({
132
+ type: `xstate.snapshot.${id}`,
133
+ data: newSnapshot
134
+ });
128
135
  });
129
- });
130
- return {
131
- ...state,
132
- data: event.data
133
- };
136
+ return newSnapshot;
137
+ }
134
138
  case errorEventType:
135
139
  return {
136
- ...state,
140
+ ...snapshot,
137
141
  status: 'error',
142
+ error: event.data,
138
143
  input: undefined,
139
- data: event.data,
140
- // TODO: if we keep this as `data` we should reflect this in the type
141
- subscription: undefined
144
+ _subscription: undefined
142
145
  };
143
146
  case completeEventType:
144
147
  return {
145
- ...state,
148
+ ...snapshot,
146
149
  status: 'done',
147
150
  input: undefined,
148
- subscription: undefined
151
+ _subscription: undefined
149
152
  };
150
153
  case interpreter.XSTATE_STOP:
151
- state.subscription.unsubscribe();
154
+ snapshot._subscription.unsubscribe();
152
155
  return {
153
- ...state,
154
- status: 'canceled',
156
+ ...snapshot,
157
+ status: 'stopped',
155
158
  input: undefined,
156
- subscription: undefined
159
+ _subscription: undefined
157
160
  };
158
161
  default:
159
- return state;
162
+ return snapshot;
160
163
  }
161
164
  },
162
165
  getInitialState: (_, input) => {
163
166
  return {
164
- subscription: undefined,
165
167
  status: 'active',
166
- data: undefined,
167
- input
168
+ output: undefined,
169
+ error: undefined,
170
+ context: undefined,
171
+ input,
172
+ _subscription: undefined
168
173
  };
169
174
  },
170
175
  start: (state, {
@@ -175,7 +180,7 @@ function fromObservable(observableCreator) {
175
180
  // Do not restart a completed observable
176
181
  return;
177
182
  }
178
- state.subscription = observableCreator({
183
+ state._subscription = observableCreator({
179
184
  input: state.input,
180
185
  system,
181
186
  self
@@ -199,20 +204,13 @@ function fromObservable(observableCreator) {
199
204
  }
200
205
  });
201
206
  },
202
- getSnapshot: state => state.data,
203
207
  getPersistedState: ({
204
- status,
205
- data,
206
- input
207
- }) => ({
208
- status,
209
- data,
210
- input
211
- }),
212
- getStatus: state => state,
208
+ _subscription,
209
+ ...state
210
+ }) => state,
213
211
  restoreState: state => ({
214
212
  ...state,
215
- subscription: undefined
213
+ _subscription: undefined
216
214
  })
217
215
  };
218
216
  }
@@ -242,25 +240,24 @@ function fromEventObservable(lazyObservable) {
242
240
  return {
243
241
  ...state,
244
242
  status: 'error',
243
+ error: event.data,
245
244
  input: undefined,
246
- data: event.data,
247
- // TODO: if we keep this as `data` we should reflect this in the type
248
- subscription: undefined
245
+ _subscription: undefined
249
246
  };
250
247
  case completeEventType:
251
248
  return {
252
249
  ...state,
253
250
  status: 'done',
254
251
  input: undefined,
255
- subscription: undefined
252
+ _subscription: undefined
256
253
  };
257
254
  case interpreter.XSTATE_STOP:
258
- state.subscription.unsubscribe();
255
+ state._subscription.unsubscribe();
259
256
  return {
260
257
  ...state,
261
- status: 'canceled',
258
+ status: 'stopped',
262
259
  input: undefined,
263
- subscription: undefined
260
+ _subscription: undefined
264
261
  };
265
262
  default:
266
263
  return state;
@@ -268,10 +265,12 @@ function fromEventObservable(lazyObservable) {
268
265
  },
269
266
  getInitialState: (_, input) => {
270
267
  return {
271
- subscription: undefined,
272
268
  status: 'active',
273
- data: undefined,
274
- input
269
+ output: undefined,
270
+ error: undefined,
271
+ context: undefined,
272
+ input,
273
+ _subscription: undefined
275
274
  };
276
275
  },
277
276
  start: (state, {
@@ -282,7 +281,7 @@ function fromEventObservable(lazyObservable) {
282
281
  // Do not restart a completed observable
283
282
  return;
284
283
  }
285
- state.subscription = lazyObservable({
284
+ state._subscription = lazyObservable({
286
285
  input: state.input,
287
286
  system,
288
287
  self
@@ -303,20 +302,13 @@ function fromEventObservable(lazyObservable) {
303
302
  }
304
303
  });
305
304
  },
306
- getSnapshot: _ => undefined,
307
305
  getPersistedState: ({
308
- status,
309
- data,
310
- input
311
- }) => ({
312
- status,
313
- data,
314
- input
315
- }),
316
- getStatus: state => state,
306
+ _subscription,
307
+ ...state
308
+ }) => state,
317
309
  restoreState: state => ({
318
310
  ...state,
319
- subscription: undefined
311
+ _subscription: undefined
320
312
  })
321
313
  };
322
314
  }
@@ -335,24 +327,26 @@ promiseCreator) {
335
327
  }
336
328
  switch (event.type) {
337
329
  case resolveEventType:
338
- return {
339
- ...state,
340
- status: 'done',
341
- data: event.data,
342
- input: undefined
343
- };
330
+ {
331
+ const resolvedValue = event.data;
332
+ return {
333
+ ...state,
334
+ status: 'done',
335
+ output: resolvedValue,
336
+ input: undefined
337
+ };
338
+ }
344
339
  case rejectEventType:
345
340
  return {
346
341
  ...state,
347
342
  status: 'error',
348
- data: event.data,
349
- // TODO: if we keep this as `data` we should reflect this in the type
343
+ error: event.data,
350
344
  input: undefined
351
345
  };
352
346
  case interpreter.XSTATE_STOP:
353
347
  return {
354
348
  ...state,
355
- status: 'canceled',
349
+ status: 'stopped',
356
350
  input: undefined
357
351
  };
358
352
  default:
@@ -374,8 +368,7 @@ promiseCreator) {
374
368
  self
375
369
  }));
376
370
  resolvedPromise.then(response => {
377
- // TODO: remove this condition once dead letter queue lands
378
- if (self._state.status !== 'active') {
371
+ if (self.getSnapshot().status !== 'active') {
379
372
  return;
380
373
  }
381
374
  self.send({
@@ -383,8 +376,7 @@ promiseCreator) {
383
376
  data: response
384
377
  });
385
378
  }, errorData => {
386
- // TODO: remove this condition once dead letter queue lands
387
- if (self._state.status !== 'active') {
379
+ if (self.getSnapshot().status !== 'active') {
388
380
  return;
389
381
  }
390
382
  self.send({
@@ -396,42 +388,17 @@ promiseCreator) {
396
388
  getInitialState: (_, input) => {
397
389
  return {
398
390
  status: 'active',
399
- data: undefined,
391
+ output: undefined,
392
+ error: undefined,
400
393
  input
401
394
  };
402
395
  },
403
- getSnapshot: state => state.data,
404
- getStatus: state => state,
405
396
  getPersistedState: state => state,
406
397
  restoreState: state => state
407
398
  };
408
399
  return logic;
409
400
  }
410
401
 
411
- function isActorRef(item) {
412
- return !!item && typeof item === 'object' && typeof item.send === 'function';
413
- }
414
-
415
- // TODO: refactor the return type, this could be written in a better way
416
- // but it's best to avoid unneccessary breaking changes now
417
- // @deprecated use `interpret(actorLogic)` instead
418
- function toActorRef(actorRefLike) {
419
- return {
420
- subscribe: () => ({
421
- unsubscribe: () => void 0
422
- }),
423
- id: 'anonymous',
424
- sessionId: '',
425
- getSnapshot: () => undefined,
426
- // TODO: this isn't safe
427
- [interpreter.symbolObservable]: function () {
428
- return this;
429
- },
430
- status: interpreter.ActorStatus.Running,
431
- stop: () => void 0,
432
- ...actorRefLike
433
- };
434
- }
435
402
  const emptyLogic = fromTransition(_ => undefined, undefined);
436
403
  function createEmptyActor() {
437
404
  return interpreter.createActor(emptyLogic);
@@ -443,5 +410,3 @@ exports.fromEventObservable = fromEventObservable;
443
410
  exports.fromObservable = fromObservable;
444
411
  exports.fromPromise = fromPromise;
445
412
  exports.fromTransition = fromTransition;
446
- exports.isActorRef = isActorRef;
447
- exports.toActorRef = toActorRef;
@@ -4,7 +4,5 @@ export {
4
4
  fromEventObservable,
5
5
  fromObservable,
6
6
  fromPromise,
7
- fromTransition,
8
- isActorRef,
9
- toActorRef
7
+ fromTransition
10
8
  } from "./xstate-actors.cjs.js";