reactish-state 2.0.0-alpha.0 → 2.0.1
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.
- package/dist/cjs/_virtual/rolldown_runtime.cjs +31 -0
- package/dist/cjs/index.cjs +14 -16
- package/dist/cjs/middleware/applyMiddleware.cjs +7 -6
- package/dist/cjs/middleware/immer.cjs +6 -6
- package/dist/cjs/middleware/index.cjs +7 -9
- package/dist/cjs/middleware/persist.cjs +29 -37
- package/dist/cjs/middleware/reduxDevtools.cjs +23 -32
- package/dist/cjs/plugin/applyPlugin.cjs +5 -2
- package/dist/cjs/plugin/index.cjs +5 -7
- package/dist/cjs/plugin/reduxDevtools.cjs +19 -24
- package/dist/cjs/react/shim.cjs +14 -4
- package/dist/cjs/react/useSelector.cjs +26 -23
- package/dist/cjs/react/useSnapshot.cjs +9 -10
- package/dist/cjs/shim/index.cjs +3 -5
- package/dist/cjs/shim/reactShim.cjs +6 -4
- package/dist/cjs/utils.cjs +10 -9
- package/dist/cjs/vanilla/selector.cjs +27 -26
- package/dist/cjs/vanilla/state.cjs +35 -33
- package/dist/esm/index.mjs +7 -5
- package/dist/esm/middleware/applyMiddleware.mjs +6 -6
- package/dist/esm/middleware/immer.mjs +5 -5
- package/dist/esm/middleware/index.mjs +5 -3
- package/dist/esm/middleware/persist.mjs +28 -37
- package/dist/esm/middleware/reduxDevtools.mjs +22 -32
- package/dist/esm/plugin/applyPlugin.mjs +4 -2
- package/dist/esm/plugin/index.mjs +4 -2
- package/dist/esm/plugin/reduxDevtools.mjs +18 -24
- package/dist/esm/react/shim.mjs +5 -3
- package/dist/esm/react/useSelector.mjs +25 -23
- package/dist/esm/react/useSnapshot.mjs +9 -10
- package/dist/esm/shim/index.mjs +3 -1
- package/dist/esm/shim/reactShim.mjs +4 -2
- package/dist/esm/utils.mjs +9 -9
- package/dist/esm/vanilla/selector.mjs +26 -25
- package/dist/esm/vanilla/state.mjs +34 -33
- package/package.json +32 -36
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
'use strict';
|
|
3
|
+
//#region rolldown:runtime
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
13
|
+
key = keys[i];
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
15
|
+
__defProp(to, key, {
|
|
16
|
+
get: ((k) => from[k]).bind(null, key),
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
25
|
+
value: mod,
|
|
26
|
+
enumerable: true
|
|
27
|
+
}) : target, mod));
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
|
|
31
|
+
exports.__toESM = __toESM;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var state = require('./vanilla/state.cjs');
|
|
4
|
-
var selector = require('./vanilla/selector.cjs');
|
|
5
|
-
var useSnapshot = require('./react/useSnapshot.cjs');
|
|
6
|
-
var useSelector = require('./react/useSelector.cjs');
|
|
7
|
-
var shim = require('./react/shim.cjs');
|
|
8
|
-
|
|
9
1
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
exports.
|
|
2
|
+
'use strict';
|
|
3
|
+
const require_state = require('./vanilla/state.cjs');
|
|
4
|
+
const require_selector = require('./vanilla/selector.cjs');
|
|
5
|
+
const require_shim = require('./react/shim.cjs');
|
|
6
|
+
const require_useSnapshot = require('./react/useSnapshot.cjs');
|
|
7
|
+
const require_useSelector = require('./react/useSelector.cjs');
|
|
8
|
+
|
|
9
|
+
exports.selector = require_selector.selector;
|
|
10
|
+
exports.selectorBuilder = require_selector.selectorBuilder;
|
|
11
|
+
exports.setReactShim = require_shim.setReactShim;
|
|
12
|
+
exports.state = require_state.state;
|
|
13
|
+
exports.stateBuilder = require_state.stateBuilder;
|
|
14
|
+
exports.useSelector = require_useSelector.useSelector;
|
|
15
|
+
exports.useSnapshot = require_useSnapshot.useSnapshot;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
set
|
|
4
|
+
//#region src/middleware/applyMiddleware.ts
|
|
5
|
+
const applyMiddleware = (middlewares, { fromRight } = {}) => (api) => middlewares[fromRight ? "reduceRight" : "reduce"]((set, middleware) => middleware ? middleware({
|
|
6
|
+
...api,
|
|
7
|
+
set
|
|
8
8
|
}) : set, api.set);
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
//#endregion
|
|
11
|
+
exports.applyMiddleware = applyMiddleware;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
'use strict';
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
'use strict';
|
|
3
|
+
let immer = require("immer");
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}) => (value, context) => set(typeof value === 'function' ? immer$1.produce(value) : value, context);
|
|
5
|
+
//#region src/middleware/immer.ts
|
|
6
|
+
const immer$1 = ({ set }) => (value, context) => set(typeof value === "function" ? (0, immer.produce)(value) : value, context);
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
//#endregion
|
|
9
|
+
exports.immer = immer$1;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var applyMiddleware = require('./applyMiddleware.cjs');
|
|
4
|
-
var persist = require('./persist.cjs');
|
|
5
|
-
var reduxDevtools = require('./reduxDevtools.cjs');
|
|
6
|
-
|
|
7
1
|
|
|
2
|
+
'use strict';
|
|
3
|
+
const require_applyMiddleware = require('./applyMiddleware.cjs');
|
|
4
|
+
const require_persist = require('./persist.cjs');
|
|
5
|
+
const require_reduxDevtools = require('./reduxDevtools.cjs');
|
|
8
6
|
|
|
9
|
-
exports.applyMiddleware =
|
|
10
|
-
exports.persist =
|
|
11
|
-
exports.reduxDevtools =
|
|
7
|
+
exports.applyMiddleware = require_applyMiddleware.applyMiddleware;
|
|
8
|
+
exports.persist = require_persist.persist;
|
|
9
|
+
exports.reduxDevtools = require_reduxDevtools.reduxDevtools;
|
|
@@ -1,41 +1,33 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
const value = getStorage().getItem(key);
|
|
31
|
-
value != null && set(value !== 'undefined' ? JSON.parse(value) : undefined, `HYDRATE_${key}`);
|
|
32
|
-
} catch (_unused2) {
|
|
33
|
-
/* continue regardless of error */
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
states.length = 0;
|
|
37
|
-
}
|
|
38
|
-
};
|
|
4
|
+
//#region src/middleware/persist.ts
|
|
5
|
+
const persist = ({ prefix, getStorage = () => localStorage } = {}) => {
|
|
6
|
+
const states = [];
|
|
7
|
+
return {
|
|
8
|
+
middleware: ({ set, get, meta }) => {
|
|
9
|
+
let key = meta()?.key;
|
|
10
|
+
if (process.env.NODE_ENV !== "production" && !key) throw new Error("[reactish-state] state should be provided with a string `key` in the config object when the `persist` middleware is used.");
|
|
11
|
+
if (prefix) key = prefix + key;
|
|
12
|
+
states.push([key, set]);
|
|
13
|
+
return (...args) => {
|
|
14
|
+
set(...args);
|
|
15
|
+
try {
|
|
16
|
+
getStorage().setItem(key, JSON.stringify(get()));
|
|
17
|
+
} catch {}
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
hydrate: () => {
|
|
21
|
+
states.forEach(([key, set]) => {
|
|
22
|
+
try {
|
|
23
|
+
const value = getStorage().getItem(key);
|
|
24
|
+
if (value != null) set(value !== "undefined" ? JSON.parse(value) : void 0, `HYDRATE_${key}`);
|
|
25
|
+
} catch {}
|
|
26
|
+
});
|
|
27
|
+
states.length = 0;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
39
30
|
};
|
|
40
31
|
|
|
41
|
-
|
|
32
|
+
//#endregion
|
|
33
|
+
exports.persist = persist;
|
|
@@ -1,36 +1,27 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return (value, action) => {
|
|
24
|
-
set(value, action);
|
|
25
|
-
mergedState[key] = get();
|
|
26
|
-
devtools.send(typeof action === 'string' ? {
|
|
27
|
-
type: action
|
|
28
|
-
} : action || {
|
|
29
|
-
type: `SET_${key}`,
|
|
30
|
-
value
|
|
31
|
-
}, mergedState);
|
|
32
|
-
};
|
|
33
|
-
};
|
|
4
|
+
//#region src/middleware/reduxDevtools.ts
|
|
5
|
+
const reduxDevtools = ({ name } = {}) => {
|
|
6
|
+
let devtoolsExt;
|
|
7
|
+
if (process.env.NODE_ENV === "production" || typeof window === "undefined" || !(devtoolsExt = window.__REDUX_DEVTOOLS_EXTENSION__)) return;
|
|
8
|
+
const devtools = devtoolsExt.connect({ name });
|
|
9
|
+
const mergedState = {};
|
|
10
|
+
return ({ set, get, meta }) => {
|
|
11
|
+
const key = meta()?.key;
|
|
12
|
+
if (process.env.NODE_ENV !== "production" && !key) throw new Error("[reactish-state] state should be provided with a string `key` in the config object when the `reduxDevtools` middleware is used.");
|
|
13
|
+
mergedState[key] = get();
|
|
14
|
+
devtools.init(mergedState);
|
|
15
|
+
return (value, action) => {
|
|
16
|
+
set(value, action);
|
|
17
|
+
mergedState[key] = get();
|
|
18
|
+
devtools.send(typeof action === "string" ? { type: action } : action || {
|
|
19
|
+
type: `SET_${key}`,
|
|
20
|
+
value
|
|
21
|
+
}, mergedState);
|
|
22
|
+
};
|
|
23
|
+
};
|
|
34
24
|
};
|
|
35
25
|
|
|
36
|
-
|
|
26
|
+
//#endregion
|
|
27
|
+
exports.reduxDevtools = reduxDevtools;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
//#region src/plugin/applyPlugin.ts
|
|
5
|
+
const applyPlugin = (plugins) => (selector) => plugins.forEach((plugin) => plugin?.(selector));
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
//#endregion
|
|
8
|
+
exports.applyPlugin = applyPlugin;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var applyPlugin = require('./applyPlugin.cjs');
|
|
4
|
-
var reduxDevtools = require('./reduxDevtools.cjs');
|
|
5
|
-
|
|
6
1
|
|
|
2
|
+
'use strict';
|
|
3
|
+
const require_applyPlugin = require('./applyPlugin.cjs');
|
|
4
|
+
const require_reduxDevtools = require('./reduxDevtools.cjs');
|
|
7
5
|
|
|
8
|
-
exports.applyPlugin =
|
|
9
|
-
exports.reduxDevtools =
|
|
6
|
+
exports.applyPlugin = require_applyPlugin.applyPlugin;
|
|
7
|
+
exports.reduxDevtools = require_reduxDevtools.reduxDevtools;
|
|
@@ -1,28 +1,23 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const updateState = () => {
|
|
20
|
-
mergedState[key] = get();
|
|
21
|
-
devtools.init(mergedState);
|
|
22
|
-
};
|
|
23
|
-
updateState();
|
|
24
|
-
subscribe(updateState);
|
|
25
|
-
};
|
|
4
|
+
//#region src/plugin/reduxDevtools.ts
|
|
5
|
+
const reduxDevtools = ({ name } = {}) => {
|
|
6
|
+
let devtoolsExt;
|
|
7
|
+
if (process.env.NODE_ENV === "production" || typeof window === "undefined" || !(devtoolsExt = window.__REDUX_DEVTOOLS_EXTENSION__)) return;
|
|
8
|
+
const devtools = devtoolsExt.connect({ name });
|
|
9
|
+
const mergedState = {};
|
|
10
|
+
return ({ get, subscribe, meta }) => {
|
|
11
|
+
const key = meta()?.key;
|
|
12
|
+
if (process.env.NODE_ENV !== "production" && !key) throw new Error("[reactish-state] selector should be provided with a string `key` in the config object when the `reduxDevtools` plugin is used.");
|
|
13
|
+
const updateState = () => {
|
|
14
|
+
mergedState[key] = get();
|
|
15
|
+
devtools.init(mergedState);
|
|
16
|
+
};
|
|
17
|
+
updateState();
|
|
18
|
+
subscribe(updateState);
|
|
19
|
+
};
|
|
26
20
|
};
|
|
27
21
|
|
|
28
|
-
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.reduxDevtools = reduxDevtools;
|
package/dist/cjs/react/shim.cjs
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
'use strict';
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
'use strict';
|
|
3
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
4
|
+
let react = require("react");
|
|
5
|
+
react = require_rolldown_runtime.__toESM(react);
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
//#region src/react/shim.ts
|
|
8
|
+
let useSyncExternalStore = react.default.useSyncExternalStore;
|
|
6
9
|
const setReactShim = ([shim]) => {
|
|
7
|
-
|
|
10
|
+
useSyncExternalStore = shim;
|
|
8
11
|
};
|
|
9
12
|
|
|
13
|
+
//#endregion
|
|
10
14
|
exports.setReactShim = setReactShim;
|
|
15
|
+
Object.defineProperty(exports, 'useSyncExternalStore', {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () {
|
|
18
|
+
return useSyncExternalStore;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
@@ -1,29 +1,32 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
3
|
+
'use client';
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
6
|
+
const require_utils = require('../utils.cjs');
|
|
7
|
+
const require_useSnapshot = require('./useSnapshot.cjs');
|
|
8
|
+
let react = require("react");
|
|
6
9
|
|
|
10
|
+
//#region src/react/useSelector.ts
|
|
7
11
|
const useSelector = (selectorParamFactory, deps) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
subscribe: context[1]
|
|
26
|
-
});
|
|
12
|
+
const items = selectorParamFactory();
|
|
13
|
+
const cutoff = items.length - 1;
|
|
14
|
+
const selectorFunc = items[cutoff];
|
|
15
|
+
items.length = cutoff;
|
|
16
|
+
const [context] = (0, react.useState)(() => [, require_utils.createSubscriber(items)]);
|
|
17
|
+
return require_useSnapshot.useSnapshot({
|
|
18
|
+
get: () => {
|
|
19
|
+
const [cache] = context;
|
|
20
|
+
const selectorValues = require_utils.getSelectorValues(items);
|
|
21
|
+
const args = selectorValues.concat(deps || selectorFunc);
|
|
22
|
+
if (cache && require_utils.isEqual(args, cache[0])) return cache[1];
|
|
23
|
+
const value = selectorFunc(...selectorValues);
|
|
24
|
+
context[0] = [args, value];
|
|
25
|
+
return value;
|
|
26
|
+
},
|
|
27
|
+
subscribe: context[1]
|
|
28
|
+
});
|
|
27
29
|
};
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
//#endregion
|
|
32
|
+
exports.useSelector = useSelector;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
3
|
+
'use client';
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
const require_shim = require('./shim.cjs');
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if (process.env.NODE_ENV !== 'production' && !shim.useSyncExternalStore) {
|
|
10
|
-
throw new Error('[reactish-state] Shim setup is required for React 16/17. See: https://github.com/szhsin/reactish-state/tree/master?tab=readme-ov-file#react-1617-setup');
|
|
11
|
-
}
|
|
12
|
-
return shim.useSyncExternalStore(subscribe, get, get);
|
|
7
|
+
//#region src/react/useSnapshot.ts
|
|
8
|
+
const useSnapshot = ({ subscribe, get }) => {
|
|
9
|
+
if (process.env.NODE_ENV !== "production" && !require_shim.useSyncExternalStore) throw new Error("[reactish-state] Shim setup is required for React 16/17. See: https://github.com/szhsin/reactish-state/tree/master?tab=readme-ov-file#react-1617-setup");
|
|
10
|
+
return require_shim.useSyncExternalStore(subscribe, get, get);
|
|
13
11
|
};
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
//#endregion
|
|
14
|
+
exports.useSnapshot = useSnapshot;
|
package/dist/cjs/shim/index.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
'use strict';
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
'use strict';
|
|
3
|
+
let use_sync_external_store_shim = require("use-sync-external-store/shim/index.js");
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
//#region src/shim/reactShim.ts
|
|
6
|
+
const reactShim = [use_sync_external_store_shim.useSyncExternalStore];
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
//#endregion
|
|
9
|
+
exports.reactShim = reactShim;
|
package/dist/cjs/utils.cjs
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
4
|
+
//#region src/utils.ts
|
|
3
5
|
const isEqual = (args1, args2) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
return true;
|
|
6
|
+
for (let i = 0; i < args1.length; i++) if (!Object.is(args1[i], args2[i])) return false;
|
|
7
|
+
return true;
|
|
8
8
|
};
|
|
9
|
-
const createSubscriber = items => listener => {
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const createSubscriber = (items) => (listener) => {
|
|
10
|
+
const unsubscribers = items.map((item) => item.subscribe(listener));
|
|
11
|
+
return () => unsubscribers.forEach((unsubscribe) => unsubscribe());
|
|
12
12
|
};
|
|
13
|
-
const getSelectorValues = items => items.map(item => item.get());
|
|
13
|
+
const getSelectorValues = (items) => items.map((item) => item.get());
|
|
14
14
|
|
|
15
|
+
//#endregion
|
|
15
16
|
exports.createSubscriber = createSubscriber;
|
|
16
17
|
exports.getSelectorValues = getSelectorValues;
|
|
17
|
-
exports.isEqual = isEqual;
|
|
18
|
+
exports.isEqual = isEqual;
|
|
@@ -1,30 +1,31 @@
|
|
|
1
|
-
'use strict';
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
'use strict';
|
|
3
|
+
const require_utils = require('../utils.cjs');
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
27
|
-
const selector =
|
|
5
|
+
//#region src/vanilla/selector.ts
|
|
6
|
+
const selectorBuilder = (plugin) => ((...items) => {
|
|
7
|
+
const length = items.length;
|
|
8
|
+
const cutoff = typeof items[length - 1] === "function" ? length - 1 : length - 2;
|
|
9
|
+
const selectorFunc = items[cutoff];
|
|
10
|
+
const metadata = items[cutoff + 1];
|
|
11
|
+
items.length = cutoff;
|
|
12
|
+
let cache;
|
|
13
|
+
const selector$1 = {
|
|
14
|
+
get: () => {
|
|
15
|
+
const args = require_utils.getSelectorValues(items);
|
|
16
|
+
if (cache && require_utils.isEqual(args, cache[0])) return cache[1];
|
|
17
|
+
const value = selectorFunc(...args);
|
|
18
|
+
cache = [args, value];
|
|
19
|
+
return value;
|
|
20
|
+
},
|
|
21
|
+
subscribe: require_utils.createSubscriber(items),
|
|
22
|
+
meta: () => metadata
|
|
23
|
+
};
|
|
24
|
+
plugin?.(selector$1);
|
|
25
|
+
return selector$1;
|
|
26
|
+
});
|
|
27
|
+
const selector = selectorBuilder();
|
|
28
28
|
|
|
29
|
+
//#endregion
|
|
29
30
|
exports.selector = selector;
|
|
30
|
-
exports.selectorBuilder = selectorBuilder;
|
|
31
|
+
exports.selectorBuilder = selectorBuilder;
|
|
@@ -1,37 +1,39 @@
|
|
|
1
|
+
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
};
|
|
34
|
-
const state =
|
|
4
|
+
//#region src/vanilla/state.ts
|
|
5
|
+
const stateBuilder = (middleware) => ((initialValue, actionBuilder, metadata) => {
|
|
6
|
+
let value = initialValue;
|
|
7
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
8
|
+
const get = () => value;
|
|
9
|
+
const readonlyState = {
|
|
10
|
+
get,
|
|
11
|
+
meta: () => metadata,
|
|
12
|
+
subscribe: (listener) => {
|
|
13
|
+
listeners.add(listener);
|
|
14
|
+
return () => listeners.delete(listener);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
let set = (newValue) => {
|
|
18
|
+
const nextValue = typeof newValue === "function" ? newValue(value) : newValue;
|
|
19
|
+
if (!Object.is(value, nextValue)) {
|
|
20
|
+
const prevValue = value;
|
|
21
|
+
value = nextValue;
|
|
22
|
+
listeners.forEach((listener) => listener(nextValue, prevValue));
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
if (middleware) set = middleware({
|
|
26
|
+
...readonlyState,
|
|
27
|
+
set
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
...actionBuilder?.(set, get),
|
|
31
|
+
...readonlyState,
|
|
32
|
+
set
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
const state = stateBuilder();
|
|
35
36
|
|
|
37
|
+
//#endregion
|
|
36
38
|
exports.state = state;
|
|
37
|
-
exports.stateBuilder = stateBuilder;
|
|
39
|
+
exports.stateBuilder = stateBuilder;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { state, stateBuilder } from "./vanilla/state.mjs";
|
|
2
|
+
import { selector, selectorBuilder } from "./vanilla/selector.mjs";
|
|
3
|
+
import { setReactShim } from "./react/shim.mjs";
|
|
4
|
+
import { useSnapshot } from "./react/useSnapshot.mjs";
|
|
5
|
+
import { useSelector } from "./react/useSelector.mjs";
|
|
6
|
+
|
|
7
|
+
export { selector, selectorBuilder, setReactShim, state, stateBuilder, useSelector, useSnapshot };
|