reactish-state 0.8.0 → 0.9.0
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/index.js +56 -39
- package/dist/es/index.js +1 -1
- package/dist/es/react/useSnapshot.js +4 -2
- package/dist/es/vanilla/selector.js +40 -31
- package/dist/es/vanilla/state.js +12 -7
- package/dist/middleware/cjs/index.js +65 -24
- package/dist/middleware/es/_virtual/_rollupPluginBabelHelpers.js +16 -0
- package/dist/middleware/es/applyMiddleware.js +8 -4
- package/dist/middleware/es/immer.js +6 -2
- package/dist/middleware/es/persist.js +10 -8
- package/dist/middleware/es/reduxDevtools.js +28 -10
- package/dist/plugin/cjs/index.js +43 -0
- package/dist/plugin/es/applyPlugin.js +15 -0
- package/dist/plugin/es/index.js +2 -0
- package/dist/plugin/es/reduxDevtools.js +26 -0
- package/package.json +1 -1
- package/types/common.d.ts +15 -3
- package/types/index.d.ts +1 -2
- package/types/middleware/reduxDevtools.d.ts +4 -1
- package/types/plugin/applyPlugin.d.ts +3 -0
- package/types/plugin/index.d.ts +2 -0
- package/types/plugin/reduxDevtools.d.ts +6 -0
- package/types/react/useSnapshot.d.ts +1 -1
- package/types/vanilla/selector.d.ts +10 -6
- package/types/vanilla/state.d.ts +4 -6
- package/types/middleware/logger.d.ts +0 -3
package/dist/cjs/index.js
CHANGED
|
@@ -20,16 +20,21 @@ var createState = function createState(_temp) {
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
|
|
23
|
+
var subscribe = function subscribe(listener) {
|
|
24
|
+
listeners.add(listener);
|
|
25
|
+
return function () {
|
|
26
|
+
listeners["delete"](listener);
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
if (middleware) set = middleware({
|
|
30
|
+
set: set,
|
|
31
|
+
get: get,
|
|
32
|
+
subscribe: subscribe
|
|
33
|
+
}, config);
|
|
24
34
|
return {
|
|
25
35
|
get: get,
|
|
26
36
|
set: set,
|
|
27
|
-
subscribe:
|
|
28
|
-
listeners.add(listener);
|
|
29
|
-
return function () {
|
|
30
|
-
listeners["delete"](listener);
|
|
31
|
-
};
|
|
32
|
-
},
|
|
37
|
+
subscribe: subscribe,
|
|
33
38
|
actions: actionCreator && actionCreator(set, get)
|
|
34
39
|
};
|
|
35
40
|
};
|
|
@@ -42,44 +47,56 @@ var isEqual = function isEqual(args1, args2) {
|
|
|
42
47
|
}
|
|
43
48
|
return true;
|
|
44
49
|
};
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
items.length = lastIndex;
|
|
52
|
-
var cache;
|
|
53
|
-
return {
|
|
54
|
-
get: function get() {
|
|
55
|
-
var args = items.map(function (item) {
|
|
56
|
-
return item.get();
|
|
57
|
-
});
|
|
58
|
-
if (cache && isEqual(args, cache.args)) return cache.ret;
|
|
59
|
-
var ret = selectorFunc.apply(void 0, args);
|
|
60
|
-
cache = {
|
|
61
|
-
args: args,
|
|
62
|
-
ret: ret
|
|
63
|
-
};
|
|
64
|
-
return ret;
|
|
65
|
-
},
|
|
66
|
-
subscribe: function subscribe(listener) {
|
|
67
|
-
var unsubscribers = items.map(function (item) {
|
|
68
|
-
return item.subscribe(listener);
|
|
69
|
-
});
|
|
70
|
-
return function () {
|
|
71
|
-
return unsubscribers.forEach(function (unsubscribe) {
|
|
72
|
-
return unsubscribe();
|
|
73
|
-
});
|
|
74
|
-
};
|
|
50
|
+
var createSelector = function createSelector(_temp) {
|
|
51
|
+
var _ref = _temp === void 0 ? {} : _temp,
|
|
52
|
+
plugin = _ref.plugin;
|
|
53
|
+
return function () {
|
|
54
|
+
for (var _len = arguments.length, items = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
55
|
+
items[_key] = arguments[_key];
|
|
75
56
|
}
|
|
57
|
+
var length = items.length;
|
|
58
|
+
var cutoff = typeof items[length - 1] === 'function' ? length - 1 : length - 2;
|
|
59
|
+
var selectorFunc = items[cutoff];
|
|
60
|
+
var config = items[cutoff + 1];
|
|
61
|
+
items.length = cutoff;
|
|
62
|
+
var cache;
|
|
63
|
+
var selector = {
|
|
64
|
+
get: function get() {
|
|
65
|
+
var args = items.map(function (item) {
|
|
66
|
+
return item.get();
|
|
67
|
+
});
|
|
68
|
+
if (cache && isEqual(args, cache.args)) return cache.ret;
|
|
69
|
+
var ret = selectorFunc.apply(void 0, args);
|
|
70
|
+
cache = {
|
|
71
|
+
args: args,
|
|
72
|
+
ret: ret
|
|
73
|
+
};
|
|
74
|
+
return ret;
|
|
75
|
+
},
|
|
76
|
+
subscribe: function subscribe(listener) {
|
|
77
|
+
var unsubscribers = items.map(function (item) {
|
|
78
|
+
return item.subscribe(listener);
|
|
79
|
+
});
|
|
80
|
+
return function () {
|
|
81
|
+
return unsubscribers.forEach(function (unsubscribe) {
|
|
82
|
+
return unsubscribe();
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
plugin == null ? void 0 : plugin(selector, config);
|
|
88
|
+
return selector;
|
|
76
89
|
};
|
|
77
90
|
};
|
|
91
|
+
var selector = /*#__PURE__*/createSelector();
|
|
78
92
|
|
|
79
|
-
var useSnapshot = function useSnapshot(
|
|
80
|
-
|
|
93
|
+
var useSnapshot = function useSnapshot(_ref) {
|
|
94
|
+
var subscribe = _ref.subscribe,
|
|
95
|
+
get = _ref.get;
|
|
96
|
+
return shim.useSyncExternalStore(subscribe, get, get);
|
|
81
97
|
};
|
|
82
98
|
|
|
99
|
+
exports.createSelector = createSelector;
|
|
83
100
|
exports.createState = createState;
|
|
84
101
|
exports.selector = selector;
|
|
85
102
|
exports.state = state;
|
package/dist/es/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { useSyncExternalStore } from 'use-sync-external-store/shim';
|
|
2
2
|
|
|
3
|
-
var useSnapshot = function useSnapshot(
|
|
4
|
-
|
|
3
|
+
var useSnapshot = function useSnapshot(_ref) {
|
|
4
|
+
var subscribe = _ref.subscribe,
|
|
5
|
+
get = _ref.get;
|
|
6
|
+
return useSyncExternalStore(subscribe, get, get);
|
|
5
7
|
};
|
|
6
8
|
|
|
7
9
|
export { useSnapshot };
|
|
@@ -4,38 +4,47 @@ var isEqual = function isEqual(args1, args2) {
|
|
|
4
4
|
}
|
|
5
5
|
return true;
|
|
6
6
|
};
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
items.length = lastIndex;
|
|
14
|
-
var cache;
|
|
15
|
-
return {
|
|
16
|
-
get: function get() {
|
|
17
|
-
var args = items.map(function (item) {
|
|
18
|
-
return item.get();
|
|
19
|
-
});
|
|
20
|
-
if (cache && isEqual(args, cache.args)) return cache.ret;
|
|
21
|
-
var ret = selectorFunc.apply(void 0, args);
|
|
22
|
-
cache = {
|
|
23
|
-
args: args,
|
|
24
|
-
ret: ret
|
|
25
|
-
};
|
|
26
|
-
return ret;
|
|
27
|
-
},
|
|
28
|
-
subscribe: function subscribe(listener) {
|
|
29
|
-
var unsubscribers = items.map(function (item) {
|
|
30
|
-
return item.subscribe(listener);
|
|
31
|
-
});
|
|
32
|
-
return function () {
|
|
33
|
-
return unsubscribers.forEach(function (unsubscribe) {
|
|
34
|
-
return unsubscribe();
|
|
35
|
-
});
|
|
36
|
-
};
|
|
7
|
+
var createSelector = function createSelector(_temp) {
|
|
8
|
+
var _ref = _temp === void 0 ? {} : _temp,
|
|
9
|
+
plugin = _ref.plugin;
|
|
10
|
+
return function () {
|
|
11
|
+
for (var _len = arguments.length, items = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
12
|
+
items[_key] = arguments[_key];
|
|
37
13
|
}
|
|
14
|
+
var length = items.length;
|
|
15
|
+
var cutoff = typeof items[length - 1] === 'function' ? length - 1 : length - 2;
|
|
16
|
+
var selectorFunc = items[cutoff];
|
|
17
|
+
var config = items[cutoff + 1];
|
|
18
|
+
items.length = cutoff;
|
|
19
|
+
var cache;
|
|
20
|
+
var selector = {
|
|
21
|
+
get: function get() {
|
|
22
|
+
var args = items.map(function (item) {
|
|
23
|
+
return item.get();
|
|
24
|
+
});
|
|
25
|
+
if (cache && isEqual(args, cache.args)) return cache.ret;
|
|
26
|
+
var ret = selectorFunc.apply(void 0, args);
|
|
27
|
+
cache = {
|
|
28
|
+
args: args,
|
|
29
|
+
ret: ret
|
|
30
|
+
};
|
|
31
|
+
return ret;
|
|
32
|
+
},
|
|
33
|
+
subscribe: function subscribe(listener) {
|
|
34
|
+
var unsubscribers = items.map(function (item) {
|
|
35
|
+
return item.subscribe(listener);
|
|
36
|
+
});
|
|
37
|
+
return function () {
|
|
38
|
+
return unsubscribers.forEach(function (unsubscribe) {
|
|
39
|
+
return unsubscribe();
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
plugin == null ? void 0 : plugin(selector, config);
|
|
45
|
+
return selector;
|
|
38
46
|
};
|
|
39
47
|
};
|
|
48
|
+
var selector = /*#__PURE__*/createSelector();
|
|
40
49
|
|
|
41
|
-
export { selector };
|
|
50
|
+
export { createSelector, selector };
|
package/dist/es/vanilla/state.js
CHANGED
|
@@ -16,16 +16,21 @@ var createState = function createState(_temp) {
|
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
|
-
|
|
19
|
+
var subscribe = function subscribe(listener) {
|
|
20
|
+
listeners.add(listener);
|
|
21
|
+
return function () {
|
|
22
|
+
listeners["delete"](listener);
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
if (middleware) set = middleware({
|
|
26
|
+
set: set,
|
|
27
|
+
get: get,
|
|
28
|
+
subscribe: subscribe
|
|
29
|
+
}, config);
|
|
20
30
|
return {
|
|
21
31
|
get: get,
|
|
22
32
|
set: set,
|
|
23
|
-
subscribe:
|
|
24
|
-
listeners.add(listener);
|
|
25
|
-
return function () {
|
|
26
|
-
listeners["delete"](listener);
|
|
27
|
-
};
|
|
28
|
-
},
|
|
33
|
+
subscribe: subscribe,
|
|
29
34
|
actions: actionCreator && actionCreator(set, get)
|
|
30
35
|
};
|
|
31
36
|
};
|
|
@@ -2,20 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
var immer$1 = require('immer');
|
|
4
4
|
|
|
5
|
+
function _extends() {
|
|
6
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
7
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
8
|
+
var source = arguments[i];
|
|
9
|
+
for (var key in source) {
|
|
10
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
11
|
+
target[key] = source[key];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return target;
|
|
16
|
+
};
|
|
17
|
+
return _extends.apply(this, arguments);
|
|
18
|
+
}
|
|
19
|
+
|
|
5
20
|
var applyMiddleware = function applyMiddleware() {
|
|
6
21
|
for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
7
22
|
middlewares[_key] = arguments[_key];
|
|
8
23
|
}
|
|
9
|
-
return function (
|
|
10
|
-
return middlewares.reduceRight(function (
|
|
11
|
-
return
|
|
12
|
-
|
|
24
|
+
return function (api, config) {
|
|
25
|
+
return middlewares.reduceRight(function (set, middleware) {
|
|
26
|
+
return middleware(_extends({}, api, {
|
|
27
|
+
set: set
|
|
28
|
+
}), config);
|
|
29
|
+
}, api.set);
|
|
13
30
|
};
|
|
14
31
|
};
|
|
15
32
|
|
|
16
|
-
var immer = function immer(
|
|
33
|
+
var immer = function immer(_ref) {
|
|
34
|
+
var set = _ref.set;
|
|
17
35
|
return function (value) {
|
|
18
|
-
|
|
36
|
+
for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
37
|
+
rest[_key - 1] = arguments[_key];
|
|
38
|
+
}
|
|
39
|
+
return set.apply(void 0, [typeof value === 'function' ? immer$1.produce(value) : value].concat(rest));
|
|
19
40
|
};
|
|
20
41
|
};
|
|
21
42
|
|
|
@@ -27,39 +48,59 @@ var persist = function persist(_temp) {
|
|
|
27
48
|
return localStorage;
|
|
28
49
|
} : _ref$getStorage;
|
|
29
50
|
var states = [];
|
|
30
|
-
var middleware = function middleware(
|
|
31
|
-
var
|
|
51
|
+
var middleware = function middleware(_ref2, config) {
|
|
52
|
+
var set = _ref2.set,
|
|
53
|
+
get = _ref2.get;
|
|
54
|
+
var key = (config == null ? void 0 : config.key) || '';
|
|
32
55
|
if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the config object when the `persist` middleware is used.');
|
|
33
56
|
if (prefix) key = prefix + key;
|
|
34
57
|
states.push([key, set]);
|
|
35
|
-
return function (
|
|
36
|
-
set(
|
|
58
|
+
return function () {
|
|
59
|
+
set.apply(void 0, arguments);
|
|
37
60
|
getStorage().setItem(key, JSON.stringify(get()));
|
|
38
61
|
};
|
|
39
62
|
};
|
|
40
63
|
middleware.hydrate = function () {
|
|
41
|
-
states.forEach(function (
|
|
42
|
-
var key =
|
|
43
|
-
set =
|
|
64
|
+
states.forEach(function (_ref3) {
|
|
65
|
+
var key = _ref3[0],
|
|
66
|
+
set = _ref3[1];
|
|
44
67
|
var value = getStorage().getItem(key);
|
|
45
|
-
value && set(JSON.parse(value));
|
|
68
|
+
value && set(JSON.parse(value), "HYDRATE_" + key);
|
|
46
69
|
});
|
|
47
70
|
states.length = 0;
|
|
48
71
|
};
|
|
49
72
|
return middleware;
|
|
50
73
|
};
|
|
51
74
|
|
|
52
|
-
var reduxDevtools = function reduxDevtools(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
75
|
+
var reduxDevtools = function reduxDevtools(_temp) {
|
|
76
|
+
var _ref = _temp === void 0 ? {} : _temp,
|
|
77
|
+
name = _ref.name;
|
|
78
|
+
var devtoolsExt;
|
|
79
|
+
if (typeof window === 'undefined' || !(devtoolsExt = window.__REDUX_DEVTOOLS_EXTENSION__)) return function (_ref2) {
|
|
80
|
+
var set = _ref2.set;
|
|
81
|
+
return set;
|
|
82
|
+
};
|
|
83
|
+
var devtools = devtoolsExt.connect({
|
|
84
|
+
name: name
|
|
56
85
|
});
|
|
57
|
-
|
|
58
|
-
return function (
|
|
59
|
-
set
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
86
|
+
var mergedState = {};
|
|
87
|
+
return function (_ref3, config) {
|
|
88
|
+
var set = _ref3.set,
|
|
89
|
+
get = _ref3.get;
|
|
90
|
+
var key = config == null ? void 0 : config.key;
|
|
91
|
+
if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the config object when the `reduxDevtools` middleware is used.');
|
|
92
|
+
mergedState[key] = get();
|
|
93
|
+
devtools.init(mergedState);
|
|
94
|
+
return function (value, action) {
|
|
95
|
+
set.apply(null, arguments);
|
|
96
|
+
mergedState[key] = get();
|
|
97
|
+
devtools.send(typeof action === 'string' ? {
|
|
98
|
+
type: action
|
|
99
|
+
} : action || {
|
|
100
|
+
type: "SET_" + key,
|
|
101
|
+
value: value
|
|
102
|
+
}, mergedState);
|
|
103
|
+
};
|
|
63
104
|
};
|
|
64
105
|
};
|
|
65
106
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function _extends() {
|
|
2
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
3
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
4
|
+
var source = arguments[i];
|
|
5
|
+
for (var key in source) {
|
|
6
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
7
|
+
target[key] = source[key];
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return target;
|
|
12
|
+
};
|
|
13
|
+
return _extends.apply(this, arguments);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { _extends as extends };
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
|
|
1
3
|
var applyMiddleware = function applyMiddleware() {
|
|
2
4
|
for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
3
5
|
middlewares[_key] = arguments[_key];
|
|
4
6
|
}
|
|
5
|
-
return function (
|
|
6
|
-
return middlewares.reduceRight(function (
|
|
7
|
-
return
|
|
8
|
-
|
|
7
|
+
return function (api, config) {
|
|
8
|
+
return middlewares.reduceRight(function (set, middleware) {
|
|
9
|
+
return middleware(_extends({}, api, {
|
|
10
|
+
set: set
|
|
11
|
+
}), config);
|
|
12
|
+
}, api.set);
|
|
9
13
|
};
|
|
10
14
|
};
|
|
11
15
|
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { produce } from 'immer';
|
|
2
2
|
|
|
3
|
-
var immer = function immer(
|
|
3
|
+
var immer = function immer(_ref) {
|
|
4
|
+
var set = _ref.set;
|
|
4
5
|
return function (value) {
|
|
5
|
-
|
|
6
|
+
for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
7
|
+
rest[_key - 1] = arguments[_key];
|
|
8
|
+
}
|
|
9
|
+
return set.apply(void 0, [typeof value === 'function' ? produce(value) : value].concat(rest));
|
|
6
10
|
};
|
|
7
11
|
};
|
|
8
12
|
|
|
@@ -6,22 +6,24 @@ var persist = function persist(_temp) {
|
|
|
6
6
|
return localStorage;
|
|
7
7
|
} : _ref$getStorage;
|
|
8
8
|
var states = [];
|
|
9
|
-
var middleware = function middleware(
|
|
10
|
-
var
|
|
9
|
+
var middleware = function middleware(_ref2, config) {
|
|
10
|
+
var set = _ref2.set,
|
|
11
|
+
get = _ref2.get;
|
|
12
|
+
var key = (config == null ? void 0 : config.key) || '';
|
|
11
13
|
if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the config object when the `persist` middleware is used.');
|
|
12
14
|
if (prefix) key = prefix + key;
|
|
13
15
|
states.push([key, set]);
|
|
14
|
-
return function (
|
|
15
|
-
set(
|
|
16
|
+
return function () {
|
|
17
|
+
set.apply(void 0, arguments);
|
|
16
18
|
getStorage().setItem(key, JSON.stringify(get()));
|
|
17
19
|
};
|
|
18
20
|
};
|
|
19
21
|
middleware.hydrate = function () {
|
|
20
|
-
states.forEach(function (
|
|
21
|
-
var key =
|
|
22
|
-
set =
|
|
22
|
+
states.forEach(function (_ref3) {
|
|
23
|
+
var key = _ref3[0],
|
|
24
|
+
set = _ref3[1];
|
|
23
25
|
var value = getStorage().getItem(key);
|
|
24
|
-
value && set(JSON.parse(value));
|
|
26
|
+
value && set(JSON.parse(value), "HYDRATE_" + key);
|
|
25
27
|
});
|
|
26
28
|
states.length = 0;
|
|
27
29
|
};
|
|
@@ -1,14 +1,32 @@
|
|
|
1
|
-
var reduxDevtools = function reduxDevtools(
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var reduxDevtools = function reduxDevtools(_temp) {
|
|
2
|
+
var _ref = _temp === void 0 ? {} : _temp,
|
|
3
|
+
name = _ref.name;
|
|
4
|
+
var devtoolsExt;
|
|
5
|
+
if (typeof window === 'undefined' || !(devtoolsExt = window.__REDUX_DEVTOOLS_EXTENSION__)) return function (_ref2) {
|
|
6
|
+
var set = _ref2.set;
|
|
7
|
+
return set;
|
|
8
|
+
};
|
|
9
|
+
var devtools = devtoolsExt.connect({
|
|
10
|
+
name: name
|
|
5
11
|
});
|
|
6
|
-
|
|
7
|
-
return function (
|
|
8
|
-
set
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
var mergedState = {};
|
|
13
|
+
return function (_ref3, config) {
|
|
14
|
+
var set = _ref3.set,
|
|
15
|
+
get = _ref3.get;
|
|
16
|
+
var key = config == null ? void 0 : config.key;
|
|
17
|
+
if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the config object when the `reduxDevtools` middleware is used.');
|
|
18
|
+
mergedState[key] = get();
|
|
19
|
+
devtools.init(mergedState);
|
|
20
|
+
return function (value, action) {
|
|
21
|
+
set.apply(null, arguments);
|
|
22
|
+
mergedState[key] = get();
|
|
23
|
+
devtools.send(typeof action === 'string' ? {
|
|
24
|
+
type: action
|
|
25
|
+
} : action || {
|
|
26
|
+
type: "SET_" + key,
|
|
27
|
+
value: value
|
|
28
|
+
}, mergedState);
|
|
29
|
+
};
|
|
12
30
|
};
|
|
13
31
|
};
|
|
14
32
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var applyPlugin = function applyPlugin() {
|
|
4
|
+
for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
5
|
+
plugins[_key] = arguments[_key];
|
|
6
|
+
}
|
|
7
|
+
return function () {
|
|
8
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
9
|
+
args[_key2] = arguments[_key2];
|
|
10
|
+
}
|
|
11
|
+
return plugins.forEach(function (plugin) {
|
|
12
|
+
return plugin.apply(void 0, args);
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
var reduxDevtools = function reduxDevtools(_temp) {
|
|
18
|
+
var _ref = _temp === void 0 ? {} : _temp,
|
|
19
|
+
name = _ref.name;
|
|
20
|
+
var devtoolsExt;
|
|
21
|
+
if (typeof window === 'undefined' || !(devtoolsExt = window.__REDUX_DEVTOOLS_EXTENSION__)) return function () {
|
|
22
|
+
/*do nothing*/
|
|
23
|
+
};
|
|
24
|
+
var devtools = devtoolsExt.connect({
|
|
25
|
+
name: name
|
|
26
|
+
});
|
|
27
|
+
var mergedState = {};
|
|
28
|
+
return function (_ref2, config) {
|
|
29
|
+
var get = _ref2.get,
|
|
30
|
+
subscribe = _ref2.subscribe;
|
|
31
|
+
var key = config == null ? void 0 : config.key;
|
|
32
|
+
if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the config object when the `reduxDevtools` plugin is used.');
|
|
33
|
+
var updateState = function updateState() {
|
|
34
|
+
mergedState[key] = get();
|
|
35
|
+
devtools.init(mergedState);
|
|
36
|
+
};
|
|
37
|
+
updateState();
|
|
38
|
+
subscribe(updateState);
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
exports.applyPlugin = applyPlugin;
|
|
43
|
+
exports.reduxDevtools = reduxDevtools;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var applyPlugin = function applyPlugin() {
|
|
2
|
+
for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
3
|
+
plugins[_key] = arguments[_key];
|
|
4
|
+
}
|
|
5
|
+
return function () {
|
|
6
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
7
|
+
args[_key2] = arguments[_key2];
|
|
8
|
+
}
|
|
9
|
+
return plugins.forEach(function (plugin) {
|
|
10
|
+
return plugin.apply(void 0, args);
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { applyPlugin };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var reduxDevtools = function reduxDevtools(_temp) {
|
|
2
|
+
var _ref = _temp === void 0 ? {} : _temp,
|
|
3
|
+
name = _ref.name;
|
|
4
|
+
var devtoolsExt;
|
|
5
|
+
if (typeof window === 'undefined' || !(devtoolsExt = window.__REDUX_DEVTOOLS_EXTENSION__)) return function () {
|
|
6
|
+
/*do nothing*/
|
|
7
|
+
};
|
|
8
|
+
var devtools = devtoolsExt.connect({
|
|
9
|
+
name: name
|
|
10
|
+
});
|
|
11
|
+
var mergedState = {};
|
|
12
|
+
return function (_ref2, config) {
|
|
13
|
+
var get = _ref2.get,
|
|
14
|
+
subscribe = _ref2.subscribe;
|
|
15
|
+
var key = config == null ? void 0 : config.key;
|
|
16
|
+
if (!key) throw new Error('[reactish-state] state should be provided with a string `key` in the config object when the `reduxDevtools` plugin is used.');
|
|
17
|
+
var updateState = function updateState() {
|
|
18
|
+
mergedState[key] = get();
|
|
19
|
+
devtools.init(mergedState);
|
|
20
|
+
};
|
|
21
|
+
updateState();
|
|
22
|
+
subscribe(updateState);
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { reduxDevtools };
|
package/package.json
CHANGED
package/types/common.d.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
export declare type Getter<T> = () => T;
|
|
2
|
-
export declare type Setter<T> = (newValue: T | ((value: T) => T)
|
|
2
|
+
export declare type Setter<T> = (newValue: T | ((value: T) => T), action?: string | {
|
|
3
|
+
type: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}) => void;
|
|
3
6
|
export declare type Listener = () => void;
|
|
7
|
+
export declare type Subscriber = (listener: Listener) => () => void;
|
|
4
8
|
export interface Reactish<T> {
|
|
5
9
|
get: Getter<T>;
|
|
6
|
-
subscribe:
|
|
10
|
+
subscribe: Subscriber;
|
|
11
|
+
}
|
|
12
|
+
export interface Config {
|
|
13
|
+
key?: string;
|
|
7
14
|
}
|
|
8
15
|
export interface Middleware {
|
|
9
|
-
<T
|
|
16
|
+
<T>(api: Reactish<T> & {
|
|
17
|
+
set: Setter<T>;
|
|
18
|
+
}, config?: Config): Setter<T>;
|
|
19
|
+
}
|
|
20
|
+
export interface Plugin {
|
|
21
|
+
<T>(reactish: Reactish<T>, config?: Config): void;
|
|
10
22
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { state, createState } from './vanilla/state';
|
|
2
|
-
export { selector } from './vanilla/selector';
|
|
2
|
+
export { selector, createSelector } from './vanilla/selector';
|
|
3
3
|
export { useSnapshot } from './react/useSnapshot';
|
|
4
|
-
export type { StateCreator } from './vanilla/state';
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import type { Reactish,
|
|
1
|
+
import type { Reactish, Plugin, Config } from '../common';
|
|
2
2
|
declare type ReactishArray = Reactish<unknown>[];
|
|
3
3
|
declare type ReactishValueArray<R extends ReactishArray> = {
|
|
4
4
|
[index in keyof R]: ReturnType<R[index]['get']>;
|
|
5
5
|
};
|
|
6
6
|
declare type SelectorFunc<R extends ReactishArray, T> = (...args: ReactishValueArray<R>) => T;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
7
|
+
interface Selector {
|
|
8
|
+
<R extends ReactishArray, T>(...items: [...R, SelectorFunc<R, T>]): Reactish<T>;
|
|
9
|
+
<R extends ReactishArray, T>(...items: [...R, SelectorFunc<R, T>, Config]): Reactish<T>;
|
|
10
|
+
}
|
|
11
|
+
declare const createSelector: ({ plugin }?: {
|
|
12
|
+
plugin?: Plugin | undefined;
|
|
13
|
+
}) => Selector;
|
|
14
|
+
declare const selector: Selector;
|
|
15
|
+
export { selector, createSelector };
|
package/types/vanilla/state.d.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import type { Setter,
|
|
1
|
+
import type { Reactish, Setter, Config, Middleware } from '../common';
|
|
2
2
|
declare type ActionCreator<T, A> = ((set: Setter<T>, get: () => T) => A) | null | undefined;
|
|
3
3
|
interface State<T, A = unknown, C extends ActionCreator<T, A> = undefined> extends Reactish<T> {
|
|
4
4
|
set: Setter<T>;
|
|
5
5
|
actions: C extends undefined ? never : A;
|
|
6
6
|
}
|
|
7
|
-
declare
|
|
8
|
-
declare const createState: <T, X>({ middleware }?: {
|
|
7
|
+
declare const createState: ({ middleware }?: {
|
|
9
8
|
middleware?: Middleware | undefined;
|
|
10
|
-
}) => <A>(initialValue: T, actionCreator?: ActionCreator<T, A>, config?:
|
|
11
|
-
declare const state:
|
|
12
|
-
export type { StateCreator };
|
|
9
|
+
}) => <T, A>(initialValue: T, actionCreator?: ActionCreator<T, A>, config?: Config) => State<T, A, ActionCreator<T, A>>;
|
|
10
|
+
declare const state: <T, A>(initialValue: T, actionCreator?: ActionCreator<T, A>, config?: Config) => State<T, A, ActionCreator<T, A>>;
|
|
13
11
|
export { state, createState };
|