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