xstate 5.0.0-beta.26 → 5.0.0-beta.28

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 (71) hide show
  1. package/README.md +9 -7
  2. package/actions/dist/xstate-actions.cjs.js +14 -18
  3. package/actions/dist/xstate-actions.cjs.mjs +0 -6
  4. package/actions/dist/xstate-actions.development.cjs.js +14 -18
  5. package/actions/dist/xstate-actions.development.cjs.mjs +0 -6
  6. package/actions/dist/xstate-actions.development.esm.js +3 -1
  7. package/actions/dist/xstate-actions.esm.js +3 -1
  8. package/actions/dist/xstate-actions.umd.min.js +1 -1
  9. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  10. package/actors/dist/xstate-actors.cjs.js +439 -14
  11. package/actors/dist/xstate-actors.cjs.mjs +0 -5
  12. package/actors/dist/xstate-actors.development.cjs.js +439 -14
  13. package/actors/dist/xstate-actors.development.cjs.mjs +0 -5
  14. package/actors/dist/xstate-actors.development.esm.js +435 -1
  15. package/actors/dist/xstate-actors.esm.js +435 -1
  16. package/actors/dist/xstate-actors.umd.min.js +1 -1
  17. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  18. package/dist/declarations/src/Machine.d.ts +4 -3
  19. package/dist/declarations/src/State.d.ts +1 -1
  20. package/dist/declarations/src/StateNode.d.ts +3 -12
  21. package/dist/declarations/src/actions/assign.d.ts +11 -11
  22. package/dist/declarations/src/actions/cancel.d.ts +5 -12
  23. package/dist/declarations/src/actions/choose.d.ts +9 -7
  24. package/dist/declarations/src/actions/log.d.ts +5 -20
  25. package/dist/declarations/src/actions/pure.d.ts +11 -9
  26. package/dist/declarations/src/actions/raise.d.ts +6 -5
  27. package/dist/declarations/src/actions/send.d.ts +7 -12
  28. package/dist/declarations/src/actions/stop.d.ts +5 -12
  29. package/dist/declarations/src/actions.d.ts +8 -42
  30. package/dist/declarations/src/actors/index.d.ts +2 -22
  31. package/dist/declarations/src/actors/promise.d.ts +2 -1
  32. package/dist/declarations/src/constants.d.ts +8 -0
  33. package/dist/declarations/src/guards.d.ts +2 -2
  34. package/dist/declarations/src/index.d.ts +11 -18
  35. package/dist/declarations/src/spawn.d.ts +25 -0
  36. package/dist/declarations/src/stateUtils.d.ts +1 -1
  37. package/dist/declarations/src/typegenTypes.d.ts +5 -5
  38. package/dist/declarations/src/types.d.ts +81 -108
  39. package/dist/declarations/src/utils.d.ts +2 -3
  40. package/dist/interpreter-672794ae.cjs.js +792 -0
  41. package/dist/interpreter-a1432c7d.development.cjs.js +800 -0
  42. package/dist/interpreter-a77bb0ec.development.esm.js +765 -0
  43. package/dist/interpreter-b5203bcb.esm.js +757 -0
  44. package/dist/raise-436a57a2.cjs.js +1458 -0
  45. package/dist/raise-74b72ca5.development.cjs.js +1498 -0
  46. package/dist/raise-a60c9290.development.esm.js +1468 -0
  47. package/dist/raise-b9c9a234.esm.js +1428 -0
  48. package/dist/send-35e1a689.cjs.js +349 -0
  49. package/dist/send-4192e7bc.esm.js +339 -0
  50. package/dist/send-e63b7b83.development.esm.js +364 -0
  51. package/dist/send-e8b55d00.development.cjs.js +374 -0
  52. package/dist/xstate.cjs.js +140 -160
  53. package/dist/xstate.cjs.mjs +4 -2
  54. package/dist/xstate.development.cjs.js +140 -160
  55. package/dist/xstate.development.cjs.mjs +4 -2
  56. package/dist/xstate.development.esm.js +75 -95
  57. package/dist/xstate.esm.js +75 -95
  58. package/dist/xstate.umd.min.js +1 -1
  59. package/dist/xstate.umd.min.js.map +1 -1
  60. package/guards/dist/xstate-guards.cjs.js +7 -6
  61. package/guards/dist/xstate-guards.development.cjs.js +7 -6
  62. package/guards/dist/xstate-guards.development.esm.js +2 -1
  63. package/guards/dist/xstate-guards.esm.js +2 -1
  64. package/guards/dist/xstate-guards.umd.min.js +1 -1
  65. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  66. package/package.json +1 -1
  67. package/dist/actions-0971b43d.development.cjs.js +0 -3168
  68. package/dist/actions-319cefe7.cjs.js +0 -3095
  69. package/dist/actions-5943a9db.esm.js +0 -3018
  70. package/dist/actions-cf69419d.development.esm.js +0 -3091
  71. package/dist/declarations/src/constantPrefixes.d.ts +0 -6
@@ -2,21 +2,446 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var actors_dist_xstateActors = require('../../dist/actions-319cefe7.cjs.js');
5
+ var interpreter = require('../../dist/interpreter-672794ae.cjs.js');
6
6
  require('../../dev/dist/xstate-dev.cjs.js');
7
7
 
8
+ /**
9
+ * Returns actor logic from a transition function and its initial state.
10
+ *
11
+ * A transition function is a function that takes the current state and an event and returns the next state.
12
+ *
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.
15
+ * @returns Actor logic
16
+ */
17
+ function fromTransition(transition, initialState) {
18
+ return {
19
+ config: transition,
20
+ transition: (state, event, actorContext) => {
21
+ return transition(state, event, actorContext);
22
+ },
23
+ getInitialState: (_, input) => {
24
+ return typeof initialState === 'function' ? initialState({
25
+ input
26
+ }) : initialState;
27
+ },
28
+ getSnapshot: state => state,
29
+ getPersistedState: state => state,
30
+ restoreState: state => state
31
+ };
32
+ }
8
33
 
34
+ function fromCallback(invokeCallback) {
35
+ return {
36
+ config: invokeCallback,
37
+ start: (_state, {
38
+ self
39
+ }) => {
40
+ self.send({
41
+ type: interpreter.XSTATE_INIT
42
+ });
43
+ },
44
+ transition: (state, event, {
45
+ self,
46
+ id,
47
+ system
48
+ }) => {
49
+ if (event.type === interpreter.XSTATE_INIT) {
50
+ const sendBack = eventForParent => {
51
+ if (state.canceled) {
52
+ return;
53
+ }
54
+ self._parent?.send(eventForParent);
55
+ };
56
+ const receive = newListener => {
57
+ state.receivers.add(newListener);
58
+ };
59
+ state.dispose = invokeCallback({
60
+ input: state.input,
61
+ system,
62
+ self: self,
63
+ sendBack,
64
+ receive
65
+ });
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
+ return state;
76
+ }
77
+ if (event.type === interpreter.XSTATE_STOP) {
78
+ state.canceled = true;
79
+ if (typeof state.dispose === 'function') {
80
+ state.dispose();
81
+ }
82
+ return state;
83
+ }
84
+ state.receivers.forEach(receiver => receiver(event));
85
+ return state;
86
+ },
87
+ getInitialState: (_, input) => {
88
+ return {
89
+ canceled: false,
90
+ receivers: new Set(),
91
+ dispose: undefined,
92
+ input
93
+ };
94
+ },
95
+ getSnapshot: () => undefined,
96
+ getPersistedState: ({
97
+ input,
98
+ canceled
99
+ }) => ({
100
+ input,
101
+ canceled
102
+ })
103
+ };
104
+ }
9
105
 
10
- exports.createEmptyActor = actors_dist_xstateActors.createEmptyActor;
11
- exports.fromCallback = actors_dist_xstateActors.fromCallback;
12
- exports.fromEventObservable = actors_dist_xstateActors.fromEventObservable;
13
- exports.fromObservable = actors_dist_xstateActors.fromObservable;
14
- exports.fromPromise = actors_dist_xstateActors.fromPromise;
15
- exports.fromTransition = actors_dist_xstateActors.fromTransition;
16
- exports.isActorRef = actors_dist_xstateActors.isActorRef;
17
- exports.isSignal = actors_dist_xstateActors.isSignal;
18
- exports.startSignal = actors_dist_xstateActors.startSignal;
19
- exports.startSignalType = actors_dist_xstateActors.startSignalType;
20
- exports.stopSignal = actors_dist_xstateActors.stopSignal;
21
- exports.stopSignalType = actors_dist_xstateActors.stopSignalType;
22
- exports.toActorRef = actors_dist_xstateActors.toActorRef;
106
+ function fromObservable(observableCreator) {
107
+ const nextEventType = '$$xstate.next';
108
+ const errorEventType = '$$xstate.error';
109
+ const completeEventType = '$$xstate.complete';
110
+ return {
111
+ config: observableCreator,
112
+ transition: (state, event, {
113
+ self,
114
+ id,
115
+ defer
116
+ }) => {
117
+ if (state.status !== 'active') {
118
+ return state;
119
+ }
120
+ switch (event.type) {
121
+ 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
128
+ });
129
+ });
130
+ return {
131
+ ...state,
132
+ data: event.data
133
+ };
134
+ case errorEventType:
135
+ return {
136
+ ...state,
137
+ status: 'error',
138
+ input: undefined,
139
+ data: event.data,
140
+ // TODO: if we keep this as `data` we should reflect this in the type
141
+ subscription: undefined
142
+ };
143
+ case completeEventType:
144
+ return {
145
+ ...state,
146
+ status: 'done',
147
+ input: undefined,
148
+ subscription: undefined
149
+ };
150
+ case interpreter.XSTATE_STOP:
151
+ state.subscription.unsubscribe();
152
+ return {
153
+ ...state,
154
+ status: 'canceled',
155
+ input: undefined,
156
+ subscription: undefined
157
+ };
158
+ default:
159
+ return state;
160
+ }
161
+ },
162
+ getInitialState: (_, input) => {
163
+ return {
164
+ subscription: undefined,
165
+ status: 'active',
166
+ data: undefined,
167
+ input
168
+ };
169
+ },
170
+ start: (state, {
171
+ self,
172
+ system
173
+ }) => {
174
+ if (state.status === 'done') {
175
+ // Do not restart a completed observable
176
+ return;
177
+ }
178
+ state.subscription = observableCreator({
179
+ input: state.input,
180
+ system,
181
+ self
182
+ }).subscribe({
183
+ next: value => {
184
+ self.send({
185
+ type: nextEventType,
186
+ data: value
187
+ });
188
+ },
189
+ error: err => {
190
+ self.send({
191
+ type: errorEventType,
192
+ data: err
193
+ });
194
+ },
195
+ complete: () => {
196
+ self.send({
197
+ type: completeEventType
198
+ });
199
+ }
200
+ });
201
+ },
202
+ getSnapshot: state => state.data,
203
+ getPersistedState: ({
204
+ status,
205
+ data,
206
+ input
207
+ }) => ({
208
+ status,
209
+ data,
210
+ input
211
+ }),
212
+ getStatus: state => state,
213
+ restoreState: state => ({
214
+ ...state,
215
+ subscription: undefined
216
+ })
217
+ };
218
+ }
219
+
220
+ /**
221
+ * Creates event observable logic that listens to an observable
222
+ * that delivers event objects.
223
+ *
224
+ *
225
+ * @param lazyObservable A function that creates an observable
226
+ * @returns Event observable logic
227
+ */
228
+
229
+ function fromEventObservable(lazyObservable) {
230
+ const errorEventType = '$$xstate.error';
231
+ const completeEventType = '$$xstate.complete';
232
+
233
+ // TODO: event types
234
+ return {
235
+ config: lazyObservable,
236
+ transition: (state, event) => {
237
+ if (state.status !== 'active') {
238
+ return state;
239
+ }
240
+ switch (event.type) {
241
+ case errorEventType:
242
+ return {
243
+ ...state,
244
+ status: 'error',
245
+ input: undefined,
246
+ data: event.data,
247
+ // TODO: if we keep this as `data` we should reflect this in the type
248
+ subscription: undefined
249
+ };
250
+ case completeEventType:
251
+ return {
252
+ ...state,
253
+ status: 'done',
254
+ input: undefined,
255
+ subscription: undefined
256
+ };
257
+ case interpreter.XSTATE_STOP:
258
+ state.subscription.unsubscribe();
259
+ return {
260
+ ...state,
261
+ status: 'canceled',
262
+ input: undefined,
263
+ subscription: undefined
264
+ };
265
+ default:
266
+ return state;
267
+ }
268
+ },
269
+ getInitialState: (_, input) => {
270
+ return {
271
+ subscription: undefined,
272
+ status: 'active',
273
+ data: undefined,
274
+ input
275
+ };
276
+ },
277
+ start: (state, {
278
+ self,
279
+ system
280
+ }) => {
281
+ if (state.status === 'done') {
282
+ // Do not restart a completed observable
283
+ return;
284
+ }
285
+ state.subscription = lazyObservable({
286
+ input: state.input,
287
+ system,
288
+ self
289
+ }).subscribe({
290
+ next: value => {
291
+ self._parent?.send(value);
292
+ },
293
+ error: err => {
294
+ self.send({
295
+ type: errorEventType,
296
+ data: err
297
+ });
298
+ },
299
+ complete: () => {
300
+ self.send({
301
+ type: completeEventType
302
+ });
303
+ }
304
+ });
305
+ },
306
+ getSnapshot: _ => undefined,
307
+ getPersistedState: ({
308
+ status,
309
+ data,
310
+ input
311
+ }) => ({
312
+ status,
313
+ data,
314
+ input
315
+ }),
316
+ getStatus: state => state,
317
+ restoreState: state => ({
318
+ ...state,
319
+ subscription: undefined
320
+ })
321
+ };
322
+ }
323
+
324
+ const resolveEventType = '$$xstate.resolve';
325
+ const rejectEventType = '$$xstate.reject';
326
+ function fromPromise(
327
+ // TODO: add types
328
+ promiseCreator) {
329
+ // TODO: add event types
330
+ const logic = {
331
+ config: promiseCreator,
332
+ transition: (state, event) => {
333
+ if (state.status !== 'active') {
334
+ return state;
335
+ }
336
+ switch (event.type) {
337
+ case resolveEventType:
338
+ return {
339
+ ...state,
340
+ status: 'done',
341
+ data: event.data,
342
+ input: undefined
343
+ };
344
+ case rejectEventType:
345
+ return {
346
+ ...state,
347
+ status: 'error',
348
+ data: event.data,
349
+ // TODO: if we keep this as `data` we should reflect this in the type
350
+ input: undefined
351
+ };
352
+ case interpreter.XSTATE_STOP:
353
+ return {
354
+ ...state,
355
+ status: 'canceled',
356
+ input: undefined
357
+ };
358
+ default:
359
+ return state;
360
+ }
361
+ },
362
+ start: (state, {
363
+ self,
364
+ system
365
+ }) => {
366
+ // TODO: determine how to allow customizing this so that promises
367
+ // can be restarted if necessary
368
+ if (state.status !== 'active') {
369
+ return;
370
+ }
371
+ const resolvedPromise = Promise.resolve(promiseCreator({
372
+ input: state.input,
373
+ system,
374
+ self
375
+ }));
376
+ resolvedPromise.then(response => {
377
+ // TODO: remove this condition once dead letter queue lands
378
+ if (self._state.status !== 'active') {
379
+ return;
380
+ }
381
+ self.send({
382
+ type: resolveEventType,
383
+ data: response
384
+ });
385
+ }, errorData => {
386
+ // TODO: remove this condition once dead letter queue lands
387
+ if (self._state.status !== 'active') {
388
+ return;
389
+ }
390
+ self.send({
391
+ type: rejectEventType,
392
+ data: errorData
393
+ });
394
+ });
395
+ },
396
+ getInitialState: (_, input) => {
397
+ return {
398
+ status: 'active',
399
+ data: undefined,
400
+ input
401
+ };
402
+ },
403
+ getSnapshot: state => state.data,
404
+ getStatus: state => state,
405
+ getPersistedState: state => state,
406
+ restoreState: state => state
407
+ };
408
+ return logic;
409
+ }
410
+
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
+ const emptyLogic = fromTransition(_ => undefined, undefined);
436
+ function createEmptyActor() {
437
+ return interpreter.createActor(emptyLogic);
438
+ }
439
+
440
+ exports.createEmptyActor = createEmptyActor;
441
+ exports.fromCallback = fromCallback;
442
+ exports.fromEventObservable = fromEventObservable;
443
+ exports.fromObservable = fromObservable;
444
+ exports.fromPromise = fromPromise;
445
+ exports.fromTransition = fromTransition;
446
+ exports.isActorRef = isActorRef;
447
+ exports.toActorRef = toActorRef;
@@ -6,10 +6,5 @@ export {
6
6
  fromPromise,
7
7
  fromTransition,
8
8
  isActorRef,
9
- isSignal,
10
- startSignal,
11
- startSignalType,
12
- stopSignal,
13
- stopSignalType,
14
9
  toActorRef
15
10
  } from "./xstate-actors.cjs.js";