@xstate/react 4.0.0-beta.4 → 4.0.0-beta.6

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.
@@ -1,70 +1,58 @@
1
- import { _ as _slicedToArray, u as useConstant } from '../../dist/useConstant-9bbaf12a.esm.js';
2
1
  import { interpret, createMachine, InterpreterStatus } from '@xstate/fsm';
3
- import { useRef, useState, useEffect, useCallback } from 'react';
2
+ import { useRef, useEffect, useCallback } from 'react';
4
3
  import useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';
5
4
  import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
5
+ import { u as useConstant } from '../../dist/useConstant-c7ec0fdd.esm.js';
6
6
 
7
7
  function identity(a) {
8
8
  return a;
9
9
  }
10
10
  function useMachine(stateMachine, options) {
11
- var persistedStateRef = useRef();
12
- if (process.env.NODE_ENV !== 'production') {
13
- var _useState = useState(stateMachine),
14
- _useState2 = _slicedToArray(_useState, 1),
15
- initialMachine = _useState2[0];
16
- if (stateMachine !== initialMachine) {
17
- console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\n' + 'Please make sure that you pass the same Machine as argument each time.');
18
- }
19
- }
20
- var _useConstant = useConstant(function () {
21
- var queue = [];
22
- var service = interpret(createMachine(stateMachine.config, options ? options : stateMachine._options));
23
- var send = service.send;
24
- service.send = function (event) {
25
- if (service.status === InterpreterStatus.NotStarted) {
26
- queue.push(event);
27
- return;
28
- }
29
- send(event);
30
- persistedStateRef.current = service.state;
31
- };
32
- return [service, queue];
33
- }),
34
- _useConstant2 = _slicedToArray(_useConstant, 2),
35
- service = _useConstant2[0],
36
- queue = _useConstant2[1];
11
+ const persistedStateRef = useRef();
12
+ const [service, queue] = useConstant(() => {
13
+ const queue = [];
14
+ const service = interpret(createMachine(stateMachine.config, options ? options : stateMachine._options));
15
+ const {
16
+ send
17
+ } = service;
18
+ service.send = event => {
19
+ if (service.status === InterpreterStatus.NotStarted) {
20
+ queue.push(event);
21
+ return;
22
+ }
23
+ send(event);
24
+ persistedStateRef.current = service.state;
25
+ };
26
+ return [service, queue];
27
+ });
37
28
 
38
29
  // TODO: consider using `useInsertionEffect` if available
39
- useIsomorphicLayoutEffect(function () {
30
+ useIsomorphicLayoutEffect(() => {
40
31
  if (options) {
41
32
  service._machine._options = options;
42
33
  }
43
34
  });
44
- var useServiceResult = useService(service);
45
- useEffect(function () {
35
+ const useServiceResult = useService(service);
36
+ useEffect(() => {
46
37
  service.start(persistedStateRef.current);
47
38
  queue.forEach(service.send);
48
39
  persistedStateRef.current = service.state;
49
- return function () {
40
+ return () => {
50
41
  service.stop();
51
42
  };
52
43
  }, []);
53
44
  return useServiceResult;
54
45
  }
55
- var isEqual = function isEqual(_prevState, nextState) {
56
- return nextState.changed === false;
57
- };
46
+ const isEqual = (_prevState, nextState) => nextState.changed === false;
58
47
  function useService(service) {
59
- var getSnapshot = useCallback(function () {
60
- return service.state;
61
- }, [service]);
62
- var subscribe = useCallback(function (handleStoreChange) {
63
- var _service$subscribe = service.subscribe(handleStoreChange),
64
- unsubscribe = _service$subscribe.unsubscribe;
48
+ const getSnapshot = useCallback(() => service.state, [service]);
49
+ const subscribe = useCallback(handleStoreChange => {
50
+ const {
51
+ unsubscribe
52
+ } = service.subscribe(handleStoreChange);
65
53
  return unsubscribe;
66
54
  }, [service]);
67
- var storeSnapshot = useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
55
+ const storeSnapshot = useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
68
56
  return [storeSnapshot, service.send, service];
69
57
  }
70
58
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xstate/react",
3
- "version": "4.0.0-beta.4",
3
+ "version": "4.0.0-beta.6",
4
4
  "description": "XState tools for React",
5
5
  "keywords": [
6
6
  "state",
@@ -19,17 +19,41 @@
19
19
  "module": "dist/xstate-react.esm.js",
20
20
  "exports": {
21
21
  "./fsm": {
22
+ "types": {
23
+ "import": "./fsm/dist/xstate-react-fsm.cjs.mjs",
24
+ "default": "./fsm/dist/xstate-react-fsm.cjs.js"
25
+ },
26
+ "development": {
27
+ "module": "./fsm/dist/xstate-react-fsm.development.esm.js",
28
+ "import": "./fsm/dist/xstate-react-fsm.development.cjs.mjs",
29
+ "default": "./fsm/dist/xstate-react-fsm.development.cjs.js"
30
+ },
22
31
  "module": "./fsm/dist/xstate-react-fsm.esm.js",
23
32
  "import": "./fsm/dist/xstate-react-fsm.cjs.mjs",
24
33
  "default": "./fsm/dist/xstate-react-fsm.cjs.js"
25
34
  },
26
35
  ".": {
36
+ "types": {
37
+ "import": "./dist/xstate-react.cjs.mjs",
38
+ "default": "./dist/xstate-react.cjs.js"
39
+ },
40
+ "development": {
41
+ "module": "./dist/xstate-react.development.esm.js",
42
+ "import": "./dist/xstate-react.development.cjs.mjs",
43
+ "default": "./dist/xstate-react.development.cjs.js"
44
+ },
27
45
  "module": "./dist/xstate-react.esm.js",
28
46
  "import": "./dist/xstate-react.cjs.mjs",
29
47
  "default": "./dist/xstate-react.cjs.js"
30
48
  },
31
49
  "./package.json": "./package.json"
32
50
  },
51
+ "imports": {
52
+ "#is-development": {
53
+ "development": "./src/true.ts",
54
+ "default": "./src/false.ts"
55
+ }
56
+ },
33
57
  "types": "dist/xstate-react.cjs.d.ts",
34
58
  "sideEffects": false,
35
59
  "files": [
@@ -47,7 +71,7 @@
47
71
  "peerDependencies": {
48
72
  "@xstate/fsm": "^3.0.0-beta.2",
49
73
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
50
- "xstate": "^5.0.0-beta.10"
74
+ "xstate": "^5.0.0-beta.14"
51
75
  },
52
76
  "peerDependenciesMeta": {
53
77
  "@xstate/fsm": {
@@ -72,7 +96,7 @@
72
96
  "jsdom-global": "^3.0.2",
73
97
  "react": "^18.0.0",
74
98
  "react-dom": "^18.0.0",
75
- "xstate": "5.0.0-beta.10"
99
+ "xstate": "5.0.0-beta.14"
76
100
  },
77
101
  "preconstruct": {
78
102
  "entrypoints": [
@@ -1 +0,0 @@
1
- export default function useConstant<T>(fn: () => T): T;
@@ -1,91 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
-
5
- function _interopNamespace(e) {
6
- if (e && e.__esModule) return e;
7
- var n = Object.create(null);
8
- if (e) {
9
- Object.keys(e).forEach(function (k) {
10
- if (k !== 'default') {
11
- var d = Object.getOwnPropertyDescriptor(e, k);
12
- Object.defineProperty(n, k, d.get ? d : {
13
- enumerable: true,
14
- get: function () { return e[k]; }
15
- });
16
- }
17
- });
18
- }
19
- n["default"] = e;
20
- return Object.freeze(n);
21
- }
22
-
23
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
24
-
25
- function _arrayWithHoles(arr) {
26
- if (Array.isArray(arr)) return arr;
27
- }
28
-
29
- function _iterableToArrayLimit(arr, i) {
30
- var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
31
- if (null != _i) {
32
- var _s,
33
- _e,
34
- _x,
35
- _r,
36
- _arr = [],
37
- _n = !0,
38
- _d = !1;
39
- try {
40
- if (_x = (_i = _i.call(arr)).next, 0 === i) {
41
- if (Object(_i) !== _i) return;
42
- _n = !1;
43
- } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
44
- } catch (err) {
45
- _d = !0, _e = err;
46
- } finally {
47
- try {
48
- if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;
49
- } finally {
50
- if (_d) throw _e;
51
- }
52
- }
53
- return _arr;
54
- }
55
- }
56
-
57
- function _arrayLikeToArray(arr, len) {
58
- if (len == null || len > arr.length) len = arr.length;
59
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
60
- return arr2;
61
- }
62
-
63
- function _unsupportedIterableToArray(o, minLen) {
64
- if (!o) return;
65
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
66
- var n = Object.prototype.toString.call(o).slice(8, -1);
67
- if (n === "Object" && o.constructor) n = o.constructor.name;
68
- if (n === "Map" || n === "Set") return Array.from(o);
69
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
70
- }
71
-
72
- function _nonIterableRest() {
73
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
74
- }
75
-
76
- function _slicedToArray(arr, i) {
77
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
78
- }
79
-
80
- function useConstant(fn) {
81
- var ref = React__namespace.useRef();
82
- if (!ref.current) {
83
- ref.current = {
84
- v: fn()
85
- };
86
- }
87
- return ref.current.v;
88
- }
89
-
90
- exports._slicedToArray = _slicedToArray;
91
- exports.useConstant = useConstant;
@@ -1,68 +0,0 @@
1
- import * as React from 'react';
2
-
3
- function _arrayWithHoles(arr) {
4
- if (Array.isArray(arr)) return arr;
5
- }
6
-
7
- function _iterableToArrayLimit(arr, i) {
8
- var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
9
- if (null != _i) {
10
- var _s,
11
- _e,
12
- _x,
13
- _r,
14
- _arr = [],
15
- _n = !0,
16
- _d = !1;
17
- try {
18
- if (_x = (_i = _i.call(arr)).next, 0 === i) {
19
- if (Object(_i) !== _i) return;
20
- _n = !1;
21
- } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
22
- } catch (err) {
23
- _d = !0, _e = err;
24
- } finally {
25
- try {
26
- if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;
27
- } finally {
28
- if (_d) throw _e;
29
- }
30
- }
31
- return _arr;
32
- }
33
- }
34
-
35
- function _arrayLikeToArray(arr, len) {
36
- if (len == null || len > arr.length) len = arr.length;
37
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
38
- return arr2;
39
- }
40
-
41
- function _unsupportedIterableToArray(o, minLen) {
42
- if (!o) return;
43
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
44
- var n = Object.prototype.toString.call(o).slice(8, -1);
45
- if (n === "Object" && o.constructor) n = o.constructor.name;
46
- if (n === "Map" || n === "Set") return Array.from(o);
47
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
48
- }
49
-
50
- function _nonIterableRest() {
51
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
52
- }
53
-
54
- function _slicedToArray(arr, i) {
55
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
56
- }
57
-
58
- function useConstant(fn) {
59
- var ref = React.useRef();
60
- if (!ref.current) {
61
- ref.current = {
62
- v: fn()
63
- };
64
- }
65
- return ref.current.v;
66
- }
67
-
68
- export { _slicedToArray as _, useConstant as u };
@@ -1,213 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var React = require('react');
6
- var withSelector = require('use-sync-external-store/shim/with-selector');
7
- var xstate = require('xstate');
8
- var useConstant = require('./useConstant-23e96eea.cjs.dev.js');
9
- var useIsomorphicLayoutEffect = require('use-isomorphic-layout-effect');
10
- var actors = require('xstate/actors');
11
-
12
- function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
13
-
14
- function _interopNamespace(e) {
15
- if (e && e.__esModule) return e;
16
- var n = Object.create(null);
17
- if (e) {
18
- Object.keys(e).forEach(function (k) {
19
- if (k !== 'default') {
20
- var d = Object.getOwnPropertyDescriptor(e, k);
21
- Object.defineProperty(n, k, d.get ? d : {
22
- enumerable: true,
23
- get: function () { return e[k]; }
24
- });
25
- }
26
- });
27
- }
28
- n["default"] = e;
29
- return Object.freeze(n);
30
- }
31
-
32
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
33
- var useIsomorphicLayoutEffect__default = /*#__PURE__*/_interopDefault(useIsomorphicLayoutEffect);
34
-
35
- function useIdleInterpreter(machine, options) {
36
- if (process.env.NODE_ENV !== 'production') {
37
- var _useState = React.useState(machine),
38
- _useState2 = useConstant._slicedToArray(_useState, 1),
39
- initialMachine = _useState2[0];
40
- if (machine.config !== initialMachine.config) {
41
- console.warn("Actor logic has changed between renders. This is not supported and may lead to invalid snapshots.");
42
- }
43
- }
44
- var actorRef = useConstant.useConstant(function () {
45
- return xstate.interpret(machine, options);
46
- });
47
-
48
- // TODO: consider using `useAsapEffect` that would do this in `useInsertionEffect` is that's available
49
- useIsomorphicLayoutEffect__default["default"](function () {
50
- actorRef.behavior.options = machine.options;
51
- });
52
- return actorRef;
53
- }
54
- function useActorRef(machine) {
55
- for (var _len = arguments.length, _ref = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
56
- _ref[_key - 1] = arguments[_key];
57
- }
58
- var _ref$ = _ref[0],
59
- options = _ref$ === void 0 ? {} : _ref$,
60
- observerOrListener = _ref[1];
61
- var service = useIdleInterpreter(machine, options);
62
- React.useEffect(function () {
63
- if (!observerOrListener) {
64
- return;
65
- }
66
- var sub = service.subscribe(xstate.toObserver(observerOrListener));
67
- return function () {
68
- sub.unsubscribe();
69
- };
70
- }, [observerOrListener]);
71
- React.useEffect(function () {
72
- service.start();
73
- return function () {
74
- service.stop();
75
- service.status = xstate.InterpreterStatus.NotStarted;
76
- service._initState();
77
- };
78
- }, []);
79
- return service;
80
- }
81
-
82
- function identity(a) {
83
- return a;
84
- }
85
- var isEqual = function isEqual(prevState, nextState) {
86
- return prevState === nextState || nextState.changed === false;
87
- };
88
- function useActor(behavior) {
89
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
90
- if (process.env.NODE_ENV !== 'production') {
91
- if (actors.isActorRef(behavior)) {
92
- throw new Error("useActor() expects actor logic (e.g. a machine), but received an ActorRef. Use the useSelector(actorRef, ...) hook instead to read the ActorRef's snapshot.");
93
- }
94
- }
95
- var actorRef = useIdleInterpreter(behavior, options);
96
- var getSnapshot = React.useCallback(function () {
97
- return actorRef.getSnapshot();
98
- }, [actorRef]);
99
- var subscribe = React.useCallback(function (handleStoreChange) {
100
- var _actorRef$subscribe = actorRef.subscribe(handleStoreChange),
101
- unsubscribe = _actorRef$subscribe.unsubscribe;
102
- return unsubscribe;
103
- }, [actorRef]);
104
- var actorSnapshot = withSelector.useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
105
- React.useEffect(function () {
106
- actorRef.start();
107
- return function () {
108
- actorRef.stop();
109
- actorRef.status = xstate.InterpreterStatus.NotStarted;
110
- actorRef._initState();
111
- };
112
- }, [actorRef]);
113
- return [actorSnapshot, actorRef.send, actorRef];
114
- }
115
-
116
- function defaultCompare(a, b) {
117
- return a === b;
118
- }
119
- function useSelector(actor, selector) {
120
- var compare = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultCompare;
121
- var subscribe = React.useCallback(function (handleStoreChange) {
122
- var _actor$subscribe = actor.subscribe(handleStoreChange),
123
- unsubscribe = _actor$subscribe.unsubscribe;
124
- return unsubscribe;
125
- }, [actor]);
126
- var boundGetSnapshot = React.useCallback(function () {
127
- return actor.getSnapshot();
128
- }, [actor]);
129
- var selectedSnapshot = withSelector.useSyncExternalStoreWithSelector(subscribe, boundGetSnapshot, boundGetSnapshot, selector, compare);
130
- return selectedSnapshot;
131
- }
132
-
133
- function _typeof(obj) {
134
- "@babel/helpers - typeof";
135
-
136
- return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
137
- return typeof obj;
138
- } : function (obj) {
139
- return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
140
- }, _typeof(obj);
141
- }
142
-
143
- // From https://github.com/reduxjs/react-redux/blob/720f0ba79236cdc3e1115f4ef9a7760a21784b48/src/utils/shallowEqual.ts
144
- function is(x, y) {
145
- if (x === y) {
146
- return x !== 0 || y !== 0 || 1 / x === 1 / y;
147
- } else {
148
- return x !== x && y !== y;
149
- }
150
- }
151
- function shallowEqual(objA, objB) {
152
- if (is(objA, objB)) return true;
153
- if (_typeof(objA) !== 'object' || objA === null || _typeof(objB) !== 'object' || objB === null) {
154
- return false;
155
- }
156
- var keysA = Object.keys(objA);
157
- var keysB = Object.keys(objB);
158
- if (keysA.length !== keysB.length) return false;
159
- for (var i = 0; i < keysA.length; i++) {
160
- if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
161
- return false;
162
- }
163
- }
164
- return true;
165
- }
166
-
167
- function createActorContext(machine, interpreterOptions, observerOrListener) {
168
- var ReactContext = /*#__PURE__*/React__namespace.createContext(null);
169
- var OriginalProvider = ReactContext.Provider;
170
- function Provider(_ref) {
171
- var children = _ref.children,
172
- _ref$machine = _ref.machine,
173
- providedMachine = _ref$machine === void 0 ? machine : _ref$machine;
174
- var actor = useActorRef(providedMachine, interpreterOptions, observerOrListener);
175
- return /*#__PURE__*/React__namespace.createElement(OriginalProvider, {
176
- value: actor,
177
- children: children
178
- });
179
- }
180
- Provider.displayName = "ActorProvider(".concat(machine.id, ")");
181
- function useContext() {
182
- var actor = React__namespace.useContext(ReactContext);
183
- if (!actor) {
184
- throw new Error("You used a hook from \"".concat(Provider.displayName, "\" but it's not inside a <").concat(Provider.displayName, "> component."));
185
- }
186
- return actor;
187
- }
188
- function useSelector$1(selector, compare) {
189
- var actor = useContext();
190
- return useSelector(actor, selector, compare);
191
- }
192
- return {
193
- Provider: Provider,
194
- useActorRef: useContext,
195
- useSelector: useSelector$1
196
- };
197
- }
198
-
199
- /**
200
- *
201
- * @deprecated Use `useActor(...)` instead.
202
- */
203
- function useMachine(machine) {
204
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
205
- return useActor(machine, options);
206
- }
207
-
208
- exports.createActorContext = createActorContext;
209
- exports.shallowEqual = shallowEqual;
210
- exports.useActor = useActor;
211
- exports.useActorRef = useActorRef;
212
- exports.useMachine = useMachine;
213
- exports.useSelector = useSelector;