@fun-tools/store 1.0.1 → 1.0.2
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/README.md +491 -231
- package/dist/chunk-BEP626V3.js +245 -0
- package/dist/chunk-BEP626V3.js.map +1 -0
- package/dist/core/index.cjs +273 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +2 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.cjs +154 -91
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +51 -42
- package/dist/index.d.ts +51 -42
- package/dist/index.js +6 -177
- package/dist/index.js.map +1 -1
- package/dist/react/index.cjs +273 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +2 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.js +11 -0
- package/dist/react/index.js.map +1 -0
- package/package.json +49 -40
package/dist/index.cjs
CHANGED
|
@@ -18,89 +18,151 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
20
|
// src/index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
configStore: () => configStore,
|
|
23
24
|
createStore: () => createStore,
|
|
24
25
|
createStoreProvider: () => createStoreProvider
|
|
25
26
|
});
|
|
26
|
-
module.exports = __toCommonJS(
|
|
27
|
+
module.exports = __toCommonJS(src_exports);
|
|
27
28
|
|
|
28
|
-
// src/createStore
|
|
29
|
+
// src/react/createStore.ts
|
|
29
30
|
var import_react = require("react");
|
|
30
31
|
|
|
31
|
-
// src/
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
return (
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
// src/utils/functions/runAction.ts
|
|
33
|
+
function runAction(action, val) {
|
|
34
|
+
if (typeof action === "function") {
|
|
35
|
+
return action(val);
|
|
36
|
+
}
|
|
37
|
+
return action;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// src/core/configStore/cookAutoBuildHandlers/Handlers/array.handlers.ts
|
|
41
|
+
function arrayHandlers(getState, setState) {
|
|
42
|
+
if (!Array.isArray(getState())) return {};
|
|
43
|
+
return {
|
|
44
|
+
push: (val) => {
|
|
45
|
+
setState([...getState(), val]);
|
|
46
|
+
return val;
|
|
47
|
+
},
|
|
48
|
+
pop: () => {
|
|
49
|
+
const state = getState();
|
|
50
|
+
setState([...state.slice(0, -1)]);
|
|
51
|
+
return state[state.length - 1];
|
|
52
|
+
},
|
|
53
|
+
shift: () => {
|
|
54
|
+
const state = getState();
|
|
55
|
+
setState([...state.slice(1)]);
|
|
56
|
+
return state[0];
|
|
57
|
+
},
|
|
58
|
+
unShift: (val) => {
|
|
59
|
+
const state = getState();
|
|
60
|
+
setState([val, ...state]);
|
|
37
61
|
return val;
|
|
38
|
-
}
|
|
62
|
+
},
|
|
63
|
+
update: (index, val) => {
|
|
64
|
+
const state = getState();
|
|
65
|
+
const newState = [...state];
|
|
66
|
+
newState[index] = runAction(val, state[index]);
|
|
67
|
+
setState(newState);
|
|
68
|
+
return newState[index];
|
|
69
|
+
},
|
|
70
|
+
remove: (index) => {
|
|
71
|
+
const state = getState();
|
|
72
|
+
const removed = state[index];
|
|
73
|
+
const newState = state.filter((_, i) => i !== index);
|
|
74
|
+
setState([...newState]);
|
|
75
|
+
return removed;
|
|
76
|
+
}
|
|
39
77
|
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// src/core/configStore/cookAutoBuildHandlers/Handlers/bool.handlers.ts
|
|
81
|
+
function boolHandlers(getState, setState) {
|
|
82
|
+
if (typeof getState() !== "boolean") return {};
|
|
83
|
+
return {
|
|
84
|
+
toggle: () => {
|
|
85
|
+
const state = getState();
|
|
86
|
+
setState(!state);
|
|
87
|
+
return state;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// src/core/configStore/cookAutoBuildHandlers/Handlers/object.handler.ts
|
|
93
|
+
function objectHandlers(getState, setState) {
|
|
94
|
+
if (typeof getState() !== "object") return {};
|
|
95
|
+
return {
|
|
96
|
+
update: (_path, val) => {
|
|
97
|
+
const state = getState();
|
|
98
|
+
const path = _path.toString().split(".");
|
|
99
|
+
const fn = (obj, index = 0) => {
|
|
100
|
+
var _a;
|
|
101
|
+
if (path.length === index) {
|
|
102
|
+
return runAction(val, obj);
|
|
103
|
+
}
|
|
104
|
+
const key = path[index];
|
|
105
|
+
return {
|
|
106
|
+
...obj,
|
|
107
|
+
[key]: fn((_a = obj == null ? void 0 : obj[key]) != null ? _a : {}, index + 1)
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
const newState = fn(state);
|
|
111
|
+
setState(newState);
|
|
112
|
+
return newState;
|
|
113
|
+
},
|
|
114
|
+
updateMany: (val) => {
|
|
115
|
+
const state = getState();
|
|
116
|
+
const fn = (target, source) => {
|
|
117
|
+
if (typeof source !== "object" || source === null) return source;
|
|
118
|
+
if (Array.isArray(source)) return source;
|
|
119
|
+
const result = { ...target };
|
|
120
|
+
for (const key in source) {
|
|
121
|
+
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
122
|
+
result[key] = fn(target[key], source[key]);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
};
|
|
127
|
+
const newState = fn(state, val);
|
|
128
|
+
setState(newState);
|
|
129
|
+
return newState;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// src/core/configStore/cookAutoBuildHandlers/index.ts
|
|
135
|
+
function cookAutoBuildHandlers(states, notify) {
|
|
40
136
|
const defaultStates = JSON.parse(JSON.stringify(states));
|
|
41
137
|
return Object.fromEntries(
|
|
42
138
|
Object.entries(states).map(([key, val]) => {
|
|
139
|
+
const getState = () => states[key];
|
|
140
|
+
const setState = (newStates) => {
|
|
141
|
+
states[key] = newStates;
|
|
142
|
+
notify();
|
|
143
|
+
};
|
|
43
144
|
const handlers = {
|
|
44
|
-
set:
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
reset:
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
...Array.isArray(val) ? {
|
|
51
|
-
push: withCallback((val2) => {
|
|
52
|
-
states[key] = [...states[key], val2];
|
|
53
|
-
}),
|
|
54
|
-
pop: withCallback(() => {
|
|
55
|
-
states[key] = states[key].slice(0, -1);
|
|
56
|
-
}),
|
|
57
|
-
shift: withCallback(() => {
|
|
58
|
-
states[key] = states[key].slice(1);
|
|
59
|
-
}),
|
|
60
|
-
unshift: withCallback((val2) => {
|
|
61
|
-
states[key] = [val2, ...states[key]];
|
|
62
|
-
}),
|
|
63
|
-
filter: withCallback((cb2) => {
|
|
64
|
-
states[key] = states[key].filter(cb2);
|
|
65
|
-
}),
|
|
66
|
-
map: withCallback((cb2) => {
|
|
67
|
-
states[key] = states[key].map(cb2);
|
|
68
|
-
})
|
|
69
|
-
} : val && typeof val === "object" ? {
|
|
70
|
-
update: withCallback((_path, val2) => {
|
|
71
|
-
let temp = states[key];
|
|
72
|
-
const path = _path.split(".");
|
|
73
|
-
const fn = (obj, index = 0) => {
|
|
74
|
-
var _a;
|
|
75
|
-
if (path.length === index) return val2;
|
|
76
|
-
const key2 = path[index];
|
|
77
|
-
return {
|
|
78
|
-
...obj,
|
|
79
|
-
[key2]: fn((_a = obj == null ? void 0 : obj[key2]) != null ? _a : {}, index + 1)
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
states[key] = fn(states[key]);
|
|
83
|
-
}),
|
|
84
|
-
updateMany: withCallback((val2) => {
|
|
85
|
-
const fn = (target, source) => {
|
|
86
|
-
if (typeof source !== "object" || source === null) return source;
|
|
87
|
-
if (Array.isArray(source)) return source;
|
|
88
|
-
const result = { ...target };
|
|
89
|
-
for (const key2 in source) {
|
|
90
|
-
if (Object.prototype.hasOwnProperty.call(target, key2)) {
|
|
91
|
-
result[key2] = fn(target[key2], source[key2]);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return result;
|
|
95
|
-
};
|
|
96
|
-
states[key] = fn(states[key], val2);
|
|
97
|
-
})
|
|
98
|
-
} : {}
|
|
145
|
+
set: (action) => {
|
|
146
|
+
setState(runAction(action, getState()));
|
|
147
|
+
},
|
|
148
|
+
reset: () => {
|
|
149
|
+
setState(defaultStates[key]);
|
|
150
|
+
},
|
|
151
|
+
...Array.isArray(val) ? arrayHandlers(getState, setState) : typeof val === "object" ? objectHandlers(getState, setState) : typeof val === "boolean" ? boolHandlers(getState, setState) : {}
|
|
99
152
|
};
|
|
100
153
|
return [key, handlers];
|
|
101
154
|
})
|
|
102
155
|
);
|
|
103
156
|
}
|
|
157
|
+
|
|
158
|
+
// src/utils/functions/mapObject.ts
|
|
159
|
+
function mapObject(obj, cb) {
|
|
160
|
+
return Object.fromEntries(
|
|
161
|
+
Object.entries(obj).map(([key, val]) => [key, cb(val)])
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// src/utils/functions/shallowEqual.ts
|
|
104
166
|
function shallowEqual(a, b) {
|
|
105
167
|
if (a === b) return true;
|
|
106
168
|
if (typeof a !== "object" || typeof b !== "object") return false;
|
|
@@ -115,31 +177,23 @@ function shallowEqual(a, b) {
|
|
|
115
177
|
return true;
|
|
116
178
|
}
|
|
117
179
|
|
|
118
|
-
// src/
|
|
119
|
-
function
|
|
180
|
+
// src/core/configStore/index.ts
|
|
181
|
+
function configStore({
|
|
120
182
|
states,
|
|
121
183
|
syncHandlers,
|
|
122
184
|
asyncHandlers
|
|
123
185
|
}) {
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
async (action) => {
|
|
136
|
-
await cb(states, action);
|
|
137
|
-
notify();
|
|
138
|
-
}
|
|
139
|
-
]),
|
|
140
|
-
...Object.entries(cookAutoBuildHandlers(states, notify))
|
|
141
|
-
])
|
|
142
|
-
);
|
|
186
|
+
const handlers = Object.freeze({
|
|
187
|
+
...mapObject(syncHandlers != null ? syncHandlers : {}, (handler) => (...args) => {
|
|
188
|
+
handler(states, ...args);
|
|
189
|
+
notify();
|
|
190
|
+
}),
|
|
191
|
+
...mapObject(asyncHandlers != null ? asyncHandlers : {}, (handler) => async (...args) => {
|
|
192
|
+
await handler(states, ...args);
|
|
193
|
+
notify();
|
|
194
|
+
}),
|
|
195
|
+
...cookAutoBuildHandlers(states, notify)
|
|
196
|
+
});
|
|
143
197
|
const consumers = /* @__PURE__ */ new Set();
|
|
144
198
|
function consume(consumer) {
|
|
145
199
|
consumers.add(consumer);
|
|
@@ -158,6 +212,16 @@ function createStore({
|
|
|
158
212
|
snapshotCache.set(selector, newSnapshot);
|
|
159
213
|
return Object.freeze(newSnapshot);
|
|
160
214
|
}
|
|
215
|
+
return {
|
|
216
|
+
handlers,
|
|
217
|
+
consume,
|
|
218
|
+
getSnapshot
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// src/react/createStore.ts
|
|
223
|
+
function createStore(option) {
|
|
224
|
+
const { handlers, consume, getSnapshot } = configStore(option);
|
|
161
225
|
function useStore(selector) {
|
|
162
226
|
return (0, import_react.useSyncExternalStore)(
|
|
163
227
|
consume,
|
|
@@ -165,16 +229,14 @@ function createStore({
|
|
|
165
229
|
() => getSnapshot(selector)
|
|
166
230
|
);
|
|
167
231
|
}
|
|
168
|
-
|
|
169
|
-
return allHandlers;
|
|
170
|
-
}
|
|
232
|
+
const useHandlers = () => handlers;
|
|
171
233
|
return {
|
|
172
234
|
useStore,
|
|
173
235
|
useHandlers
|
|
174
236
|
};
|
|
175
237
|
}
|
|
176
238
|
|
|
177
|
-
// src/createStoreProvider
|
|
239
|
+
// src/react/createStoreProvider.tsx
|
|
178
240
|
var import_react2 = require("react");
|
|
179
241
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
180
242
|
function createStoreProvider(props) {
|
|
@@ -204,6 +266,7 @@ function createStoreProvider(props) {
|
|
|
204
266
|
}
|
|
205
267
|
// Annotate the CommonJS export names for ESM import in node:
|
|
206
268
|
0 && (module.exports = {
|
|
269
|
+
configStore,
|
|
207
270
|
createStore,
|
|
208
271
|
createStoreProvider
|
|
209
272
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/createStore/index.ts","../src/createStore/utils.ts","../src/createStoreProvider/index.tsx"],"sourcesContent":["export { default as createStore } from \"./createStore\";\r\nexport { default as createStoreProvider } from \"./createStoreProvider\";\r\n\r\nexport * from \"./createStore/types\";","import { useSyncExternalStore } from \"react\";\r\nimport { cookAutoBuildHandlers, shallowEqual } from \"./utils\";\r\nimport { \r\n AsyncHandler, CreateStoreContextProps, \r\n CreateStoreReturn, \r\n HandlerRecord, States, SyncHandler \r\n} from \"./types\";\r\n\r\n\r\n\r\nexport default function createStore<\r\n S extends States,\r\n SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>,\r\n AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>\r\n>({\r\n states, syncHandlers, asyncHandlers\r\n}: CreateStoreContextProps<S, SH, AH>): CreateStoreReturn<S, SH, AH> {\r\n\r\n const allHandlers: HandlerRecord<S, SH, AH> = Object.freeze(\r\n Object.fromEntries([\r\n ...Object.entries(syncHandlers ?? {}).map(([key, cb]) => [\r\n key, (action?: any) => {cb(states, action); notify();}\r\n ]),\r\n ...Object.entries(asyncHandlers ?? {}).map(([key, cb]) => [\r\n key, async (action?: any) => {await cb(states, action); notify();}\r\n ]),\r\n ...Object.entries(cookAutoBuildHandlers(states, notify))\r\n ])\r\n ) as HandlerRecord<S, SH, AH>\r\n\r\n\r\n const consumers = new Set<() => void>();\r\n\r\n \r\n function consume(consumer: () => void) {\r\n consumers.add(consumer);\r\n return () => consumers.delete(consumer);\r\n }\r\n\r\n\r\n function notify() {\r\n consumers.forEach(con => con());\r\n }\r\n\r\n\r\n const snapshotCache = new WeakMap<(state: S) => object, object>();\r\n\r\n\r\n function getSnapshot<T extends object>(selector: (state: S) => T): T {\r\n const newSnapshot = selector(states);\r\n const cachedSnapshot = snapshotCache.get(selector);\r\n\r\n if(cachedSnapshot && shallowEqual(newSnapshot, cachedSnapshot)) {\r\n return cachedSnapshot as T;\r\n }\r\n \r\n snapshotCache.set(selector, newSnapshot);\r\n return Object.freeze(newSnapshot);\r\n }\r\n \r\n \r\n function useStore<T extends object>(selector: (state: S) => T): T {\r\n return useSyncExternalStore(\r\n consume,\r\n () => getSnapshot(selector),\r\n () => getSnapshot(selector)\r\n )\r\n }\r\n\r\n\r\n function useHandlers(): HandlerRecord<S, SH, AH> {\r\n return allHandlers;\r\n }\r\n\r\n\r\n return {\r\n useStore,\r\n useHandlers\r\n }\r\n}","import { AutoBuildHandler, AutoBuildHandlerRecord, States } from \"./types\";\r\n\r\nexport function cookAutoBuildHandlers<S extends States>(states: S, cb: () => void): AutoBuildHandlerRecord<S> {\r\n\r\n const withCallback = <R>(fun: (...args: any[]) => R) => {\r\n return (...args: any[]): R => {\r\n const val = fun(...args);\r\n cb();\r\n return val;\r\n }\r\n }\r\n\r\n\r\n const defaultStates: S = JSON.parse(JSON.stringify(states));\r\n\r\n \r\n return Object.fromEntries(\r\n Object.entries(states).map(([key, val]: [keyof S, S[keyof S]]) => {\r\n const handlers: AutoBuildHandler<S[keyof S]> = {\r\n set: withCallback((action) => {\r\n states[key] = typeof action === 'function' ? action(states[key]) : action;\r\n }),\r\n\r\n reset: withCallback(() => {\r\n states[key] = defaultStates[key];\r\n }),\r\n \r\n ...(\r\n Array.isArray(val) ? {\r\n push: withCallback((val) => {\r\n states[key] = [...states[key], val] as S[keyof S]\r\n }),\r\n \r\n pop: withCallback(() => {\r\n states[key] = states[key].slice(0, -1)\r\n }),\r\n\r\n shift: withCallback(() => {\r\n states[key] = states[key].slice(1)\r\n }),\r\n \r\n unshift: withCallback((val) => {\r\n states[key] = [val, ...states[key]] as S[keyof S]\r\n }),\r\n\r\n filter: withCallback((cb) => {\r\n states[key] = states[key].filter(cb)\r\n }),\r\n\r\n map: withCallback((cb) => {\r\n states[key] = states[key].map(cb)\r\n })\r\n\r\n } : val && typeof val === \"object\" ? {\r\n update: withCallback((_path, val) => {\r\n let temp: any = states[key];\r\n const path = _path.split('.');\r\n\r\n const fn = (obj: any, index = 0): S[keyof S] => {\r\n if (path.length === index) return val;\r\n const key = path[index];\r\n\r\n return {\r\n ...obj,\r\n [key]: fn(obj?.[key] ?? {}, index + 1)\r\n };\r\n }\r\n\r\n states[key] = fn(states[key]);\r\n }),\r\n\r\n updateMany: withCallback((val) => {\r\n const fn = (target: any, source: any) => {\r\n if (typeof source !== \"object\" || source === null) return source;\r\n if (Array.isArray(source)) return source;\r\n\r\n const result = { ...target };\r\n\r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(target, key)) {\r\n result[key] = fn(target[key], source[key]);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n states[key] = fn(states[key], val);\r\n })\r\n } : {}\r\n )\r\n } as unknown as AutoBuildHandler<S[keyof S]>\r\n \r\n return [key, handlers]\r\n })\r\n ) as unknown as AutoBuildHandlerRecord<S>\r\n}\r\n\r\n\r\nexport function shallowEqual(a: any, b: any) {\r\n if(a === b) return true;\r\n \r\n if(typeof a !== 'object' || typeof b !== 'object') return false;\r\n\r\n if(Array.isArray(a) !== Array.isArray(b)) return false;\r\n\r\n const key1 = Object.keys(a);\r\n const key2 = Object.keys(b);\r\n\r\n if(key1.length !== key2.length) return false;\r\n\r\n for(let key of key1) {\r\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\r\n if (!Object.is(a[key], b[key])) return false;\r\n }\r\n\r\n return true;\r\n}","import React, { createContext, ReactNode, useContext, useRef } from \"react\";\r\nimport createStore from \"../createStore\";\r\nimport { AsyncHandler, CreateStoreContextProps, CreateStoreReturn, HandlerRecord, States, SyncHandler } from \"../createStore/types\";\r\n\r\n\r\n\r\nexport default function createStoreProvider<\r\n S extends States,\r\n SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>,\r\n AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>\r\n>(props: CreateStoreContextProps<S, SH, AH>) { \r\n\r\n const Context = createContext<CreateStoreReturn<S, SH, AH> | null>(null);\r\n \r\n function Provider({children}: {children: ReactNode}): React.JSX.Element {\r\n const store = useRef<CreateStoreReturn<S, SH, AH> | null>(null);\r\n\r\n if(!store.current) {\r\n store.current = createStore(props);\r\n }\r\n\r\n return (\r\n <Context.Provider value={store.current}>\r\n {children}\r\n </Context.Provider>\r\n )\r\n }\r\n\r\n \r\n function useStore<T extends object>(selector: (states: S) => T): T {\r\n const store = useContext(Context);\r\n if(!store) throw Error('Store Provider is missing !!');\r\n return store.useStore<T>(selector);\r\n }\r\n\r\n\r\n function useHandlers(): HandlerRecord<S, SH, AH> {\r\n const store = useContext(Context);\r\n if(!store) throw Error('Store Provider is missing !!');\r\n return store.useHandlers();\r\n }\r\n\r\n\r\n return {\r\n Provider,\r\n useStore,\r\n useHandlers\r\n } \r\n}"],"mappings":"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","names":["val","cb","key","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/react/createStore.ts","../src/utils/functions/runAction.ts","../src/core/configStore/cookAutoBuildHandlers/Handlers/array.handlers.ts","../src/core/configStore/cookAutoBuildHandlers/Handlers/bool.handlers.ts","../src/core/configStore/cookAutoBuildHandlers/Handlers/object.handler.ts","../src/core/configStore/cookAutoBuildHandlers/index.ts","../src/utils/functions/mapObject.ts","../src/utils/functions/shallowEqual.ts","../src/core/configStore/index.ts","../src/react/createStoreProvider.tsx"],"sourcesContent":["export * from './react';\r\nexport * from './core';","import { useSyncExternalStore } from \"react\";\r\nimport configStore from \"../core/configStore\";\r\nimport { ConfigStoreProps, GSH, GAH, States, UseHandlers } from \"../core/configStore/types\";\r\n\r\nexport default function createStore<\r\n S extends States, \r\n SH extends GSH<S> = GSH<S>, \r\n AH extends GAH<S> = GAH<S>\r\n>(option: ConfigStoreProps<S, SH, AH>) {\r\n const {handlers, consume, getSnapshot} = configStore<S, SH, AH>(option);\r\n\r\n function useStore<T>(selector: (state: S) => T): T {\r\n return useSyncExternalStore(\r\n consume,\r\n () => getSnapshot(selector),\r\n () => getSnapshot(selector)\r\n )\r\n }\r\n\r\n const useHandlers = (): UseHandlers<S, SH, AH> => handlers;\r\n\r\n return {\r\n useStore,\r\n useHandlers\r\n }\r\n}\r\n\r\nexport type CreateStore<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>> = ReturnType<typeof createStore<S, SH, AH>>","export type Action<T> = ((val: T) => T) | T;\r\n\r\nexport default function runAction<T>(action: Action<T>, val: T): T {\r\n if(typeof action === 'function') {\r\n return (action as (val: T) => T)(val);\r\n }\r\n\r\n return action;\r\n}","import runAction, { Action } from \"@/utils/functions/runAction\";\r\n\r\n\r\nexport type ArrayHandlers<S extends Array<any>, V = S extends Array<infer T> ? T : never> = S extends Array<V> ? {\r\n push: (val: V) => V;\r\n pop: () => V;\r\n shift: () => V;\r\n unShift: (val: V) => V;\r\n update: (index: number, val: Action<V>) => V;\r\n remove: (index: number) => V;\r\n} : {}\r\n\r\n\r\nexport default function arrayHandlers<S extends Array<any>, V = S extends Array<infer T> ? T : never>(\r\n getState: () => S, setState: (value: S) => void\r\n): ArrayHandlers<S, V> {\r\n\r\n if(!Array.isArray(getState())) return {} as ArrayHandlers<S, V>;\r\n\r\n return {\r\n push: (val: V) => {\r\n setState([...getState(), val] as S);\r\n return val;\r\n },\r\n\r\n pop: () => {\r\n const state = getState();\r\n setState([...state.slice(0, -1)] as S);\r\n return state[state.length - 1];\r\n },\r\n\r\n shift: () => {\r\n const state = getState();\r\n setState([...state.slice(1)] as S);\r\n return state[0];\r\n },\r\n\r\n unShift: (val: V) => {\r\n const state = getState();\r\n setState([val, ...state] as S);\r\n return val;\r\n },\r\n\r\n update: (index: number, val: Action<V>) => {\r\n const state = getState();\r\n const newState = [...state];\r\n newState[index] = runAction(val, state[index]);\r\n setState(newState as S);\r\n return newState[index];\r\n },\r\n\r\n remove: (index: number) => {\r\n const state = getState();\r\n const removed = state[index];\r\n const newState = state.filter((_, i) => i !== index);\r\n setState([...newState] as S);\r\n return removed;\r\n }\r\n }\r\n}","\r\n\r\nexport type BoolHandlers<S> = S extends boolean ? {\r\n toggle: () => boolean;\r\n} : {};\r\n\r\nexport default function boolHandlers<S extends boolean>(getState: () => S, setState: (value: S) => void): BoolHandlers<S> {\r\n\r\n if(typeof getState() !== 'boolean') return {} as BoolHandlers<S>;\r\n\r\n return {\r\n toggle: () => {\r\n const state = getState();\r\n setState(!state as S);\r\n\r\n return state;\r\n }\r\n }\r\n}\r\n","import { OBJECT_KEYS, OBJECT_VALUE, SUB_OBJECT } from \"@/utils/types/object.type\";\r\nimport runAction, { Action } from \"@/utils/functions/runAction\";\r\n\r\n\r\nexport type ObjectHandlers<S> = S extends object ? {\r\n update: <K extends OBJECT_KEYS<S>>(_path: K, val: Action<OBJECT_VALUE<S, K>>) => S;\r\n updateMany: (val: SUB_OBJECT<S>) => S;\r\n} : {};\r\n\r\nexport default function objectHandlers<S extends object>(getState: () => S, setState: (value: S) => void): ObjectHandlers<S> {\r\n\r\n if(typeof getState() !== 'object') return {} as ObjectHandlers<S>;\r\n\r\n return {\r\n update: <K extends OBJECT_KEYS<S>>(_path: K, val: Action<OBJECT_VALUE<S, K>>): S => {\r\n const state = getState();\r\n\r\n const path = _path.toString().split('.');\r\n\r\n const fn = (obj: any, index = 0): S | OBJECT_VALUE<S, K> => {\r\n if (path.length === index) {\r\n return runAction(val, obj);\r\n }\r\n const key = path[index];\r\n\r\n return {\r\n ...obj,\r\n [key]: fn(obj?.[key] ?? {}, index + 1)\r\n };\r\n }\r\n\r\n const newState = fn(state) as S;\r\n setState(newState);\r\n\r\n return newState\r\n },\r\n\r\n updateMany: (val: SUB_OBJECT<S>): S => {\r\n const state = getState();\r\n \r\n const fn = (target: any, source: any) => {\r\n if (typeof source !== \"object\" || source === null) return source;\r\n if (Array.isArray(source)) return source;\r\n\r\n const result = { ...target };\r\n\r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(target, key)) {\r\n result[key] = fn(target[key], source[key]);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n const newState = fn(state, val) as S;\r\n setState(newState);\r\n\r\n return newState;\r\n }\r\n } as ObjectHandlers<S>\r\n}","import runAction, { Action } from \"@/utils/functions/runAction\";\r\nimport arrayHandlers from \"./Handlers/array.handlers\";\r\nimport boolHandlers from \"./Handlers/bool.handlers\";\r\nimport objectHandlers from \"./Handlers/object.handler\";\r\n\r\nfunction cookAutoBuildHandlers<S extends Record<string, any>>(states: S, notify: () => void) {\r\n\r\n const defaultStates: S = JSON.parse(JSON.stringify(states));\r\n \r\n return Object.fromEntries(\r\n Object.entries(states).map(([key, val]: [keyof S, S[keyof S]]) => {\r\n\r\n const getState = () => states[key];\r\n\r\n const setState = (newStates: S[keyof S]) => {\r\n states[key] = newStates;\r\n notify();\r\n }\r\n\r\n const handlers = {\r\n set: (action: Action<typeof val>) => {\r\n setState(runAction(action, getState()));\r\n },\r\n\r\n reset: () => {\r\n setState(defaultStates[key]);\r\n },\r\n \r\n ...(\r\n Array.isArray(val) ? arrayHandlers(getState, setState)\r\n : typeof val === \"object\" ? objectHandlers(getState, setState)\r\n : typeof val === 'boolean' ? boolHandlers(getState, setState)\r\n : {}\r\n )\r\n }\r\n \r\n return [key, handlers]\r\n })\r\n )\r\n}\r\n\r\n\r\ntype CookAutoBuildHandlers<S extends Record<string, any>> = ReturnType<typeof cookAutoBuildHandlers<S>>\r\n\r\nexport {\r\n CookAutoBuildHandlers,\r\n cookAutoBuildHandlers as default\r\n}","\r\nexport default function mapObject<O extends object, R>(obj: O, cb: (val: any) => R) {\r\n return Object.fromEntries(\r\n Object.entries(obj).map(([key, val]) => (\r\n [key, cb(val)]\r\n ))\r\n ) as { [K in keyof O]: R };\r\n}","export default function shallowEqual(a: any, b: any) {\r\n if(a === b) return true;\r\n \r\n if(typeof a !== 'object' || typeof b !== 'object') return false;\r\n\r\n if(Array.isArray(a) !== Array.isArray(b)) return false;\r\n\r\n const key1 = Object.keys(a);\r\n const key2 = Object.keys(b);\r\n\r\n if(key1.length !== key2.length) return false;\r\n\r\n for(let key of key1) {\r\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\r\n if (!Object.is(a[key], b[key])) return false;\r\n }\r\n\r\n return true;\r\n}","import cookAutoBuildHandlers from \"./cookAutoBuildHandlers\";\r\nimport mapObject from \"@/utils/functions/mapObject\";\r\nimport shallowEqual from \"@/utils/functions/shallowEqual\";\r\nimport { \r\n ConfigStoreProps, GAH, GSH, States,\r\n UseHandlers, \r\n} from \"./types\";\r\n\r\n\r\n\r\nexport default function configStore<\r\n S extends States, \r\n SH extends GSH<S> = GSH<S>,\r\n AH extends GAH<S> = GAH<S>\r\n>({\r\n states, syncHandlers, asyncHandlers\r\n}: ConfigStoreProps<S, SH, AH>) {\r\n\r\n \r\n const handlers = Object.freeze({\r\n ...mapObject(syncHandlers ?? {}, (handler: any) => (...args: any[]) => { handler(states, ...args); notify(); }),\r\n ...mapObject(asyncHandlers ?? {}, (handler: any) => async (...args: any[]) => { await handler(states, ...args); notify(); }),\r\n ...cookAutoBuildHandlers(states, notify),\r\n }) as UseHandlers<S, SH, AH>;\r\n\r\n\r\n const consumers = new Set<() => void>();\r\n\r\n \r\n function consume(consumer: () => void) {\r\n consumers.add(consumer);\r\n return () => consumers.delete(consumer);\r\n }\r\n\r\n\r\n function notify() {\r\n consumers.forEach(con => con());\r\n }\r\n\r\n\r\n const snapshotCache = new WeakMap<(state: S) => any, any>();\r\n\r\n\r\n function getSnapshot<T>(selector: (state: S) => T): T {\r\n const newSnapshot = selector(states);\r\n const cachedSnapshot = snapshotCache.get(selector);\r\n\r\n if(cachedSnapshot && shallowEqual(newSnapshot, cachedSnapshot)) {\r\n return cachedSnapshot as T;\r\n }\r\n \r\n snapshotCache.set(selector, newSnapshot);\r\n return Object.freeze(newSnapshot);\r\n }\r\n\r\n\r\n return {\r\n handlers,\r\n consume,\r\n getSnapshot\r\n }\r\n}","import React, { createContext, ReactNode, useContext, useRef } from \"react\";\r\nimport { ConfigStoreProps, GSH, GAH, UseHandlers } from \"../core/configStore/types\";\r\nimport createStore, { CreateStore } from \"./createStore\";\r\n\r\n\r\n\r\nexport default function createStoreProvider<\r\n S extends Record<string, any>, \r\n SH extends GSH<S> = GSH<S>, \r\n AH extends GAH<S> = GAH<S>\r\n>(props: ConfigStoreProps<S, SH, AH>) { \r\n\r\n const Context = createContext<CreateStore<S, SH, AH> | null>(null);\r\n \r\n function Provider({children}: {children: ReactNode}): React.JSX.Element {\r\n const store = useRef<CreateStore<S, SH, AH> | null>(null);\r\n\r\n if(!store.current) {\r\n store.current = createStore(props);\r\n }\r\n\r\n return (\r\n <Context.Provider value={store.current}>\r\n {children}\r\n </Context.Provider>\r\n )\r\n }\r\n\r\n \r\n function useStore<T>(selector: (states: S) => T): T {\r\n const store = useContext(Context);\r\n if(!store) throw Error('Store Provider is missing !!');\r\n return store.useStore(selector);\r\n }\r\n\r\n\r\n function useHandlers(): UseHandlers<S, SH, AH> {\r\n const store = useContext(Context);\r\n if(!store) throw Error('Store Provider is missing !!');\r\n return store.useHandlers();\r\n }\r\n\r\n\r\n return {\r\n Provider,\r\n useStore,\r\n useHandlers\r\n } \r\n}\r\n\r\n\r\nexport type CreateStoreProvider<S extends Record<string, any>> = ReturnType<typeof createStoreProvider<S>>"],"mappings":"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","names":["import_react"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,63 +1,72 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
2
|
|
|
3
|
+
type Action<T> = ((val: T) => T) | T;
|
|
4
|
+
|
|
5
|
+
type ArrayHandlers<S extends Array<any>, V = S extends Array<infer T> ? T : never> = S extends Array<V> ? {
|
|
6
|
+
push: (val: V) => V;
|
|
7
|
+
pop: () => V;
|
|
8
|
+
shift: () => V;
|
|
9
|
+
unShift: (val: V) => V;
|
|
10
|
+
update: (index: number, val: Action<V>) => V;
|
|
11
|
+
remove: (index: number) => V;
|
|
12
|
+
} : {};
|
|
13
|
+
|
|
14
|
+
type BoolHandlers<S> = S extends boolean ? {
|
|
15
|
+
toggle: () => boolean;
|
|
16
|
+
} : {};
|
|
17
|
+
|
|
3
18
|
type OBJECT_KEYS<T extends object> = {
|
|
4
19
|
[K in keyof T]: K extends string | number ? T[K] extends object ? K | `${K}.${OBJECT_KEYS<T[K]>}` : K : never;
|
|
5
20
|
}[keyof T];
|
|
6
21
|
type OBJECT_VALUE<O extends Record<string, any>, P extends string | number> = (P extends `${infer K}.${infer P}` ? K extends keyof O ? OBJECT_VALUE<O[K], P> : never : P extends keyof O ? O[P] : never);
|
|
22
|
+
type SUB_OBJECT<O extends Record<string, any>> = {
|
|
23
|
+
[K in keyof O]?: O[K] extends Record<string, any> ? SUB_OBJECT<O[K]> : O[K];
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
type ObjectHandlers<S> = S extends object ? {
|
|
27
|
+
update: <K extends OBJECT_KEYS<S>>(_path: K, val: Action<OBJECT_VALUE<S, K>>) => S;
|
|
28
|
+
updateMany: (val: SUB_OBJECT<S>) => S;
|
|
29
|
+
} : {};
|
|
7
30
|
|
|
8
31
|
type States = Record<string, any>;
|
|
9
|
-
type
|
|
10
|
-
type Handler<S, V> = (V extends (state: S) => infer R ? ((state: S) => R) : V extends (state: S, action: infer A) => infer R ? ((state: S, action: A) => R) : never);
|
|
11
|
-
type SyncHandler<S> = Handler<S, (state: S, action: any) => any>;
|
|
12
|
-
type AsyncHandler<S> = Handler<S, (state: S, action: any) => Promise<any>>;
|
|
13
|
-
type SyncHandlerRecord<S, SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>> = {
|
|
14
|
-
[K in keyof SH]: Handler<S, SH[K]>;
|
|
15
|
-
};
|
|
16
|
-
type AsyncHandlerRecord<S, AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>> = {
|
|
17
|
-
[K in keyof AH]: Handler<S, AH[K]>;
|
|
18
|
-
};
|
|
19
|
-
type CreateStoreContextProps<S extends States, SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>, AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>> = {
|
|
32
|
+
type ConfigStoreProps<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>> = {
|
|
20
33
|
states: S;
|
|
21
34
|
syncHandlers?: SH;
|
|
22
35
|
asyncHandlers?: AH;
|
|
23
36
|
};
|
|
24
|
-
type
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
pop: () => T | null;
|
|
30
|
-
shift: () => T | null;
|
|
31
|
-
unshift: (val: T) => void;
|
|
32
|
-
filter: (cb: (item: T) => boolean) => void;
|
|
33
|
-
map: (cb: (item: T) => T) => void;
|
|
34
|
-
} : V extends States ? {
|
|
35
|
-
update: (key: OBJECT_KEYS<V>, val: OBJECT_VALUE<V, OBJECT_KEYS<V>>) => void;
|
|
36
|
-
updateMany: (val: Partial<V>) => void;
|
|
37
|
-
} : {});
|
|
38
|
-
type AutoBuildHandlerRecord<S extends States> = {
|
|
39
|
-
[K in keyof S]: AutoBuildHandler<S[K]>;
|
|
40
|
-
};
|
|
41
|
-
type ExtractActionType<T> = T extends (state: States, action: infer A) => void ? A : never;
|
|
42
|
-
type ReturnHandlers<S, V> = (V extends (state: S) => infer R ? (() => R) : V extends (state: S, action: infer A) => infer R ? ((action: A) => R) : never);
|
|
43
|
-
type HandlerRecord<S extends States, SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>, AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>> = AutoBuildHandlerRecord<S> & {
|
|
44
|
-
[K in keyof SH]: ReturnHandlers<S, SH[K]>;
|
|
45
|
-
} & {
|
|
46
|
-
[K in keyof AH]: ReturnHandlers<S, AH[K]>;
|
|
37
|
+
type CookedHandler<S, V> = (V extends (first: any, ...args: infer A) => infer R ? ((...args: A) => R) : never);
|
|
38
|
+
type GSH<S> = Record<string, (states: S, ...args: any[]) => any>;
|
|
39
|
+
type GAH<S> = Record<string, (states: S, ...args: any[]) => Promise<any>>;
|
|
40
|
+
type SyncHandlerRecord<S extends States, H extends GSH<S>> = {
|
|
41
|
+
[K in keyof H]: CookedHandler<S, H[K]>;
|
|
47
42
|
};
|
|
48
|
-
type
|
|
49
|
-
|
|
50
|
-
useHandlers: () => HandlerRecord<S, SH, AH>;
|
|
43
|
+
type AsyncHandlerRecord<S extends States, H extends GAH<S>> = {
|
|
44
|
+
[K in keyof H]: CookedHandler<S, H[K]>;
|
|
51
45
|
};
|
|
46
|
+
type UseHandlers<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>> = (SyncHandlerRecord<S, SH> & AsyncHandlerRecord<S, AH> & ({
|
|
47
|
+
[K in keyof S]: {
|
|
48
|
+
set: (action: Action<S[K]>) => void;
|
|
49
|
+
reset: () => void;
|
|
50
|
+
} & (S[K] extends Array<infer T> ? (ArrayHandlers<S[K], T>) : S[K] extends object ? (ObjectHandlers<S[K]>) : S[K] extends boolean ? (BoolHandlers<S[K]>) : {});
|
|
51
|
+
}));
|
|
52
52
|
|
|
53
|
-
declare function createStore<S extends States, SH extends
|
|
53
|
+
declare function createStore<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>>(option: ConfigStoreProps<S, SH, AH>): {
|
|
54
|
+
useStore: <T>(selector: (state: S) => T) => T;
|
|
55
|
+
useHandlers: () => UseHandlers<S, SH, AH>;
|
|
56
|
+
};
|
|
54
57
|
|
|
55
|
-
declare function createStoreProvider<S extends
|
|
58
|
+
declare function createStoreProvider<S extends Record<string, any>, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>>(props: ConfigStoreProps<S, SH, AH>): {
|
|
56
59
|
Provider: ({ children }: {
|
|
57
60
|
children: ReactNode;
|
|
58
61
|
}) => React.JSX.Element;
|
|
59
|
-
useStore: <T
|
|
60
|
-
useHandlers: () =>
|
|
62
|
+
useStore: <T>(selector: (states: S) => T) => T;
|
|
63
|
+
useHandlers: () => UseHandlers<S, SH, AH>;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
declare function configStore<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>>({ states, syncHandlers, asyncHandlers }: ConfigStoreProps<S, SH, AH>): {
|
|
67
|
+
handlers: UseHandlers<S, SH, AH>;
|
|
68
|
+
consume: (consumer: () => void) => () => boolean;
|
|
69
|
+
getSnapshot: <T>(selector: (state: S) => T) => T;
|
|
61
70
|
};
|
|
62
71
|
|
|
63
|
-
export {
|
|
72
|
+
export { configStore, createStore, createStoreProvider };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,63 +1,72 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
2
|
|
|
3
|
+
type Action<T> = ((val: T) => T) | T;
|
|
4
|
+
|
|
5
|
+
type ArrayHandlers<S extends Array<any>, V = S extends Array<infer T> ? T : never> = S extends Array<V> ? {
|
|
6
|
+
push: (val: V) => V;
|
|
7
|
+
pop: () => V;
|
|
8
|
+
shift: () => V;
|
|
9
|
+
unShift: (val: V) => V;
|
|
10
|
+
update: (index: number, val: Action<V>) => V;
|
|
11
|
+
remove: (index: number) => V;
|
|
12
|
+
} : {};
|
|
13
|
+
|
|
14
|
+
type BoolHandlers<S> = S extends boolean ? {
|
|
15
|
+
toggle: () => boolean;
|
|
16
|
+
} : {};
|
|
17
|
+
|
|
3
18
|
type OBJECT_KEYS<T extends object> = {
|
|
4
19
|
[K in keyof T]: K extends string | number ? T[K] extends object ? K | `${K}.${OBJECT_KEYS<T[K]>}` : K : never;
|
|
5
20
|
}[keyof T];
|
|
6
21
|
type OBJECT_VALUE<O extends Record<string, any>, P extends string | number> = (P extends `${infer K}.${infer P}` ? K extends keyof O ? OBJECT_VALUE<O[K], P> : never : P extends keyof O ? O[P] : never);
|
|
22
|
+
type SUB_OBJECT<O extends Record<string, any>> = {
|
|
23
|
+
[K in keyof O]?: O[K] extends Record<string, any> ? SUB_OBJECT<O[K]> : O[K];
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
type ObjectHandlers<S> = S extends object ? {
|
|
27
|
+
update: <K extends OBJECT_KEYS<S>>(_path: K, val: Action<OBJECT_VALUE<S, K>>) => S;
|
|
28
|
+
updateMany: (val: SUB_OBJECT<S>) => S;
|
|
29
|
+
} : {};
|
|
7
30
|
|
|
8
31
|
type States = Record<string, any>;
|
|
9
|
-
type
|
|
10
|
-
type Handler<S, V> = (V extends (state: S) => infer R ? ((state: S) => R) : V extends (state: S, action: infer A) => infer R ? ((state: S, action: A) => R) : never);
|
|
11
|
-
type SyncHandler<S> = Handler<S, (state: S, action: any) => any>;
|
|
12
|
-
type AsyncHandler<S> = Handler<S, (state: S, action: any) => Promise<any>>;
|
|
13
|
-
type SyncHandlerRecord<S, SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>> = {
|
|
14
|
-
[K in keyof SH]: Handler<S, SH[K]>;
|
|
15
|
-
};
|
|
16
|
-
type AsyncHandlerRecord<S, AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>> = {
|
|
17
|
-
[K in keyof AH]: Handler<S, AH[K]>;
|
|
18
|
-
};
|
|
19
|
-
type CreateStoreContextProps<S extends States, SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>, AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>> = {
|
|
32
|
+
type ConfigStoreProps<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>> = {
|
|
20
33
|
states: S;
|
|
21
34
|
syncHandlers?: SH;
|
|
22
35
|
asyncHandlers?: AH;
|
|
23
36
|
};
|
|
24
|
-
type
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
pop: () => T | null;
|
|
30
|
-
shift: () => T | null;
|
|
31
|
-
unshift: (val: T) => void;
|
|
32
|
-
filter: (cb: (item: T) => boolean) => void;
|
|
33
|
-
map: (cb: (item: T) => T) => void;
|
|
34
|
-
} : V extends States ? {
|
|
35
|
-
update: (key: OBJECT_KEYS<V>, val: OBJECT_VALUE<V, OBJECT_KEYS<V>>) => void;
|
|
36
|
-
updateMany: (val: Partial<V>) => void;
|
|
37
|
-
} : {});
|
|
38
|
-
type AutoBuildHandlerRecord<S extends States> = {
|
|
39
|
-
[K in keyof S]: AutoBuildHandler<S[K]>;
|
|
40
|
-
};
|
|
41
|
-
type ExtractActionType<T> = T extends (state: States, action: infer A) => void ? A : never;
|
|
42
|
-
type ReturnHandlers<S, V> = (V extends (state: S) => infer R ? (() => R) : V extends (state: S, action: infer A) => infer R ? ((action: A) => R) : never);
|
|
43
|
-
type HandlerRecord<S extends States, SH extends Record<string, SyncHandler<S>> = Record<string, SyncHandler<S>>, AH extends Record<string, AsyncHandler<S>> = Record<string, AsyncHandler<S>>> = AutoBuildHandlerRecord<S> & {
|
|
44
|
-
[K in keyof SH]: ReturnHandlers<S, SH[K]>;
|
|
45
|
-
} & {
|
|
46
|
-
[K in keyof AH]: ReturnHandlers<S, AH[K]>;
|
|
37
|
+
type CookedHandler<S, V> = (V extends (first: any, ...args: infer A) => infer R ? ((...args: A) => R) : never);
|
|
38
|
+
type GSH<S> = Record<string, (states: S, ...args: any[]) => any>;
|
|
39
|
+
type GAH<S> = Record<string, (states: S, ...args: any[]) => Promise<any>>;
|
|
40
|
+
type SyncHandlerRecord<S extends States, H extends GSH<S>> = {
|
|
41
|
+
[K in keyof H]: CookedHandler<S, H[K]>;
|
|
47
42
|
};
|
|
48
|
-
type
|
|
49
|
-
|
|
50
|
-
useHandlers: () => HandlerRecord<S, SH, AH>;
|
|
43
|
+
type AsyncHandlerRecord<S extends States, H extends GAH<S>> = {
|
|
44
|
+
[K in keyof H]: CookedHandler<S, H[K]>;
|
|
51
45
|
};
|
|
46
|
+
type UseHandlers<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>> = (SyncHandlerRecord<S, SH> & AsyncHandlerRecord<S, AH> & ({
|
|
47
|
+
[K in keyof S]: {
|
|
48
|
+
set: (action: Action<S[K]>) => void;
|
|
49
|
+
reset: () => void;
|
|
50
|
+
} & (S[K] extends Array<infer T> ? (ArrayHandlers<S[K], T>) : S[K] extends object ? (ObjectHandlers<S[K]>) : S[K] extends boolean ? (BoolHandlers<S[K]>) : {});
|
|
51
|
+
}));
|
|
52
52
|
|
|
53
|
-
declare function createStore<S extends States, SH extends
|
|
53
|
+
declare function createStore<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>>(option: ConfigStoreProps<S, SH, AH>): {
|
|
54
|
+
useStore: <T>(selector: (state: S) => T) => T;
|
|
55
|
+
useHandlers: () => UseHandlers<S, SH, AH>;
|
|
56
|
+
};
|
|
54
57
|
|
|
55
|
-
declare function createStoreProvider<S extends
|
|
58
|
+
declare function createStoreProvider<S extends Record<string, any>, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>>(props: ConfigStoreProps<S, SH, AH>): {
|
|
56
59
|
Provider: ({ children }: {
|
|
57
60
|
children: ReactNode;
|
|
58
61
|
}) => React.JSX.Element;
|
|
59
|
-
useStore: <T
|
|
60
|
-
useHandlers: () =>
|
|
62
|
+
useStore: <T>(selector: (states: S) => T) => T;
|
|
63
|
+
useHandlers: () => UseHandlers<S, SH, AH>;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
declare function configStore<S extends States, SH extends GSH<S> = GSH<S>, AH extends GAH<S> = GAH<S>>({ states, syncHandlers, asyncHandlers }: ConfigStoreProps<S, SH, AH>): {
|
|
67
|
+
handlers: UseHandlers<S, SH, AH>;
|
|
68
|
+
consume: (consumer: () => void) => () => boolean;
|
|
69
|
+
getSnapshot: <T>(selector: (state: S) => T) => T;
|
|
61
70
|
};
|
|
62
71
|
|
|
63
|
-
export {
|
|
72
|
+
export { configStore, createStore, createStoreProvider };
|