as-model 0.2.9 → 0.3.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/README.md +558 -558
- package/index.d.ts +64 -47
- package/package.json +68 -68
package/index.d.ts
CHANGED
|
@@ -27,10 +27,18 @@ declare type ValidInstance<S, T extends ModelInstance> = {
|
|
|
27
27
|
: T[K];
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
export declare type Model<S, T extends ModelInstance> = (
|
|
30
|
+
export declare type Model<S = any, T extends ModelInstance = ModelInstance> = (
|
|
31
31
|
state: S
|
|
32
32
|
) => ValidInstance<S, T>;
|
|
33
33
|
|
|
34
|
+
export type PickState<R extends Model> = R extends (state: infer S) => any
|
|
35
|
+
? S
|
|
36
|
+
: never;
|
|
37
|
+
|
|
38
|
+
export type Instance<R extends Model> = R extends (state: any) => infer T
|
|
39
|
+
? T
|
|
40
|
+
: never;
|
|
41
|
+
|
|
34
42
|
export declare type Action<S = any, T extends ModelInstance = ModelInstance> = {
|
|
35
43
|
type: null | string;
|
|
36
44
|
method: null | ((...args: any[]) => any);
|
|
@@ -51,11 +59,11 @@ export declare type Dispatch = (action: Action) => any;
|
|
|
51
59
|
export declare interface Key<
|
|
52
60
|
S = any,
|
|
53
61
|
T extends ModelInstance = any,
|
|
54
|
-
R extends (instance: () => T) => any =
|
|
62
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
55
63
|
> extends Model<S, T> {
|
|
56
64
|
(s: S): T;
|
|
57
65
|
source: Model<S, T>;
|
|
58
|
-
|
|
66
|
+
wrapper: R;
|
|
59
67
|
modelKeyIdentifier: () => boolean;
|
|
60
68
|
[k: string]: any;
|
|
61
69
|
defaultState?: S;
|
|
@@ -87,7 +95,7 @@ export declare interface Config {
|
|
|
87
95
|
export declare interface StoreIndex<
|
|
88
96
|
S = any,
|
|
89
97
|
T extends ModelInstance = any,
|
|
90
|
-
R extends (instance: () => T) => any =
|
|
98
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
91
99
|
> {
|
|
92
100
|
key: Key<S, T, R>;
|
|
93
101
|
}
|
|
@@ -95,11 +103,11 @@ export declare interface StoreIndex<
|
|
|
95
103
|
export declare interface Store<
|
|
96
104
|
S = any,
|
|
97
105
|
T extends ModelInstance = any,
|
|
98
|
-
R extends (instance: () => T) => any =
|
|
106
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
99
107
|
> extends StoreIndex<S, T, R> {
|
|
100
108
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
101
109
|
getToken: () => Token;
|
|
102
|
-
getInstance: () => ReturnType<R>;
|
|
110
|
+
getInstance: () => R extends undefined ? T : ReturnType<R>;
|
|
103
111
|
getStoreInstance: () => T;
|
|
104
112
|
update: (args?: {
|
|
105
113
|
model?: Model<S, T>;
|
|
@@ -119,9 +127,9 @@ export declare function createStore<
|
|
|
119
127
|
S,
|
|
120
128
|
T extends ModelInstance,
|
|
121
129
|
D extends S,
|
|
122
|
-
R extends (instance: () => T) => any =
|
|
130
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
123
131
|
>(
|
|
124
|
-
model: Model<S, T> | Key<S, T, R> | ModelUsage<
|
|
132
|
+
model: Model<S, T> | Key<S, T, R> | ModelUsage<Model<S, T>, R>,
|
|
125
133
|
state?: D
|
|
126
134
|
): Store<S, T, R>;
|
|
127
135
|
|
|
@@ -130,7 +138,7 @@ export declare function createStore<
|
|
|
130
138
|
export declare interface ModelKey<
|
|
131
139
|
S = any,
|
|
132
140
|
T extends ModelInstance = any,
|
|
133
|
-
R extends (instance: () => T) => any =
|
|
141
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
134
142
|
> extends Key<S, T, R> {
|
|
135
143
|
(s: S): T;
|
|
136
144
|
createStore: <D extends S>(state?: D) => Store<S, T, R>;
|
|
@@ -141,9 +149,9 @@ export declare function createKey<
|
|
|
141
149
|
S,
|
|
142
150
|
T extends ModelInstance,
|
|
143
151
|
D extends S,
|
|
144
|
-
R extends (instance: () => T) => any =
|
|
152
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
145
153
|
>(
|
|
146
|
-
model: Model<S, T> | ModelUsage<
|
|
154
|
+
model: Model<S, T> | ModelUsage<Model<S, T>, R>,
|
|
147
155
|
state?: D
|
|
148
156
|
): ModelKey<S, T, R>;
|
|
149
157
|
|
|
@@ -153,7 +161,7 @@ export declare interface StoreCollection {
|
|
|
153
161
|
find: <
|
|
154
162
|
S,
|
|
155
163
|
T extends ModelInstance,
|
|
156
|
-
R extends (instance: () => T) => any =
|
|
164
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
157
165
|
>(
|
|
158
166
|
key: Key<S, T, R> | StoreIndex<S, T, R>
|
|
159
167
|
) => Store<S, T, R> | null;
|
|
@@ -169,30 +177,40 @@ export declare function createStores(
|
|
|
169
177
|
/** model API * */
|
|
170
178
|
|
|
171
179
|
export declare type ModelUsage<
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
M extends Model<S, T>,
|
|
175
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
180
|
+
M extends Model,
|
|
181
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
176
182
|
> = M & {
|
|
177
|
-
createKey: <D extends
|
|
178
|
-
|
|
179
|
-
|
|
183
|
+
createKey: <D extends PickState<M>>(
|
|
184
|
+
state?: D
|
|
185
|
+
) => ModelKey<PickState<M>, Instance<M>, R>;
|
|
186
|
+
createStore: <D extends PickState<M>>(
|
|
187
|
+
state?: D
|
|
188
|
+
) => Store<PickState<M>, Instance<M>, R>;
|
|
189
|
+
produce: <
|
|
190
|
+
C extends (instance: () => Instance<M>) => any = (
|
|
191
|
+
instance: () => Instance<M>
|
|
192
|
+
) => Instance<M>
|
|
193
|
+
>(
|
|
180
194
|
s: C
|
|
181
|
-
) => ModelUsage<
|
|
195
|
+
) => ModelUsage<M, C>;
|
|
182
196
|
wrapper: R;
|
|
183
|
-
extends: <E extends Record<string, any>>(e: E) => ModelUsage<
|
|
197
|
+
extends: <E extends Record<string, any>>(e: E) => ModelUsage<M, R> & E;
|
|
184
198
|
};
|
|
185
199
|
|
|
186
200
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
187
201
|
export declare interface model {
|
|
202
|
+
<M extends Model>(modelFn: M): ModelUsage<M, undefined>;
|
|
203
|
+
<M extends Model, R extends (instance: () => Instance<M>) => any>(
|
|
204
|
+
modelFn: M,
|
|
205
|
+
s: R
|
|
206
|
+
): ModelUsage<M, R>;
|
|
188
207
|
<
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
208
|
+
M extends Model,
|
|
209
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
192
210
|
>(
|
|
193
|
-
modelFn:
|
|
211
|
+
modelFn: M,
|
|
194
212
|
s?: R
|
|
195
|
-
): ModelUsage<
|
|
213
|
+
): ModelUsage<M, R>;
|
|
196
214
|
createField: <P extends () => any>(
|
|
197
215
|
callback: P,
|
|
198
216
|
deps?: any[]
|
|
@@ -212,12 +230,12 @@ export interface SignalOptions {
|
|
|
212
230
|
declare interface SignalStore<
|
|
213
231
|
S = any,
|
|
214
232
|
T extends ModelInstance = any,
|
|
215
|
-
R extends (instance: () => T) => any =
|
|
233
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
216
234
|
> extends StoreIndex<S, T, R> {
|
|
217
235
|
getToken: () => Token;
|
|
218
236
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
219
237
|
getSignal: () => {
|
|
220
|
-
(options?: SignalOptions): ReturnType<R>;
|
|
238
|
+
(options?: SignalOptions): R extends undefined ? T : ReturnType<R>;
|
|
221
239
|
startStatistics: () => void;
|
|
222
240
|
stopStatistics: () => void;
|
|
223
241
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
@@ -228,20 +246,20 @@ declare interface SignalStore<
|
|
|
228
246
|
export declare function createSignal<
|
|
229
247
|
S,
|
|
230
248
|
T extends ModelInstance,
|
|
231
|
-
R extends (instance: () => T) => any =
|
|
249
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
232
250
|
>(store: Store<S, T, R>): SignalStore<S, T, R>;
|
|
233
251
|
|
|
234
252
|
/** createSelector * */
|
|
235
253
|
|
|
236
254
|
declare type SelectMethod<
|
|
237
255
|
T extends ModelInstance = any,
|
|
238
|
-
R extends (instance: () => T) => any =
|
|
256
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
239
257
|
> = {
|
|
240
|
-
(): ReturnType<R>;
|
|
241
|
-
<C extends (instance: () => ReturnType<R>) => any>(
|
|
258
|
+
(): R extends undefined ? T : ReturnType<R>;
|
|
259
|
+
<C extends (instance: () => R extends undefined ? T : ReturnType<R>) => any>(
|
|
242
260
|
selector: C
|
|
243
261
|
): ReturnType<C>;
|
|
244
|
-
<C extends (instance: () => ReturnType<R>) => any>(
|
|
262
|
+
<C extends (instance: () => R extends undefined ? T : ReturnType<R>) => any>(
|
|
245
263
|
selector?: C
|
|
246
264
|
): ReturnType<R> | ReturnType<C>;
|
|
247
265
|
};
|
|
@@ -250,7 +268,7 @@ declare type SelectMethod<
|
|
|
250
268
|
declare interface SelectorStore<
|
|
251
269
|
S = any,
|
|
252
270
|
T extends ModelInstance = any,
|
|
253
|
-
R extends (instance: () => T) => any =
|
|
271
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
254
272
|
> extends StoreIndex<S, T, R> {
|
|
255
273
|
getToken: () => Token;
|
|
256
274
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
@@ -264,7 +282,7 @@ declare interface SelectorOption<T = any> {
|
|
|
264
282
|
export declare function createSelector<
|
|
265
283
|
S,
|
|
266
284
|
T extends ModelInstance,
|
|
267
|
-
R extends (instance: () => T) => any =
|
|
285
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
268
286
|
>(store: Store<S, T, R>, opts?: SelectorOption): SelectorStore<S, T, R>;
|
|
269
287
|
|
|
270
288
|
/** config * */
|
|
@@ -273,18 +291,18 @@ export declare function config(configuration: Config): {
|
|
|
273
291
|
S,
|
|
274
292
|
T extends ModelInstance,
|
|
275
293
|
D extends S,
|
|
276
|
-
R extends (instance: () => T) => any =
|
|
294
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
277
295
|
>(
|
|
278
|
-
model: Model<S, T> | Key<S, T, R> | ModelUsage<S, T
|
|
296
|
+
model: Model<S, T> | Key<S, T, R> | ModelUsage<Model<S, T>, R>,
|
|
279
297
|
state?: D
|
|
280
298
|
) => Store<S, T, R>;
|
|
281
299
|
createKey: <
|
|
282
300
|
S,
|
|
283
301
|
T extends ModelInstance,
|
|
284
302
|
D extends S,
|
|
285
|
-
R extends (instance: () => T) => any =
|
|
303
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
286
304
|
>(
|
|
287
|
-
model: Model<S, T> | ModelUsage<S, T
|
|
305
|
+
model: Model<S, T> | ModelUsage<Model<S, T>, R>,
|
|
288
306
|
state?: D
|
|
289
307
|
) => ModelKey<S, T, R>;
|
|
290
308
|
createStores: (...modelKeys: (ModelKey | StoreIndex)[]) => StoreCollection;
|
|
@@ -297,28 +315,27 @@ export declare const validations: {
|
|
|
297
315
|
isModelKey: <
|
|
298
316
|
S,
|
|
299
317
|
T extends ModelInstance,
|
|
300
|
-
R extends (
|
|
318
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
301
319
|
>(
|
|
302
320
|
data: any
|
|
303
321
|
) => data is ModelKey<S, T, R>;
|
|
304
322
|
isModelStore: <
|
|
305
323
|
S,
|
|
306
324
|
T extends ModelInstance,
|
|
307
|
-
R extends (
|
|
325
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
308
326
|
>(
|
|
309
327
|
data: any
|
|
310
328
|
) => data is Store<S, T, R>;
|
|
311
329
|
isModelUsage: <
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
R extends (ins: () => T) => any = (ins: () => T) => T
|
|
330
|
+
M extends Model,
|
|
331
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
315
332
|
>(
|
|
316
|
-
data:
|
|
317
|
-
) => data is ModelUsage<
|
|
333
|
+
data: M
|
|
334
|
+
) => data is ModelUsage<typeof data, R>;
|
|
318
335
|
isStoreIndex: <
|
|
319
336
|
S,
|
|
320
337
|
T extends ModelInstance,
|
|
321
|
-
R extends (
|
|
338
|
+
R extends undefined | ((instance: () => T) => any) = undefined
|
|
322
339
|
>(
|
|
323
340
|
data: any
|
|
324
341
|
) => data is StoreIndex<S, T, R>;
|
package/package.json
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
{
|
|
2
|
-
"private": false,
|
|
3
|
-
"name": "as-model",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"description": "This is a model state management tool",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"author": "Jimmy.Harding",
|
|
8
|
-
"homepage": "https://github.com/filefoxper/a-model",
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "https://github.com/filefoxper/a-model"
|
|
12
|
-
},
|
|
13
|
-
"main": "dist/index.js",
|
|
14
|
-
"module": "esm/index.js",
|
|
15
|
-
"files": [
|
|
16
|
-
"dist",
|
|
17
|
-
"esm",
|
|
18
|
-
"index.d.ts"
|
|
19
|
-
],
|
|
20
|
-
"scripts": {
|
|
21
|
-
"build": "node ./build.js",
|
|
22
|
-
"docs": "docsify serve ./docs",
|
|
23
|
-
"lint": "eslint src --fix --ext .ts,.tsx ",
|
|
24
|
-
"lint-init": "eslint --init",
|
|
25
|
-
"test": "jest --coverage"
|
|
26
|
-
},
|
|
27
|
-
"typings": "index.d.ts",
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"@babel/cli": "^7.27.2",
|
|
30
|
-
"@babel/core": "^7.27.4",
|
|
31
|
-
"@babel/eslint-parser": "^7.27.5",
|
|
32
|
-
"@babel/plugin-transform-runtime": "^7.27.4",
|
|
33
|
-
"@babel/preset-env": "^7.27.2",
|
|
34
|
-
"@babel/preset-typescript": "^7.27.1",
|
|
35
|
-
"@babel/runtime": "^7.27.6",
|
|
36
|
-
"@pmnps/plugin-publish": "4.5.0",
|
|
37
|
-
"@types/jest": "^29.5.14",
|
|
38
|
-
"babel-jest": "29.7.0",
|
|
39
|
-
"esbuild": "^0.25.0",
|
|
40
|
-
"esbuild-plugin-es5": "2.1.1",
|
|
41
|
-
"eslint": "^8.49.0",
|
|
42
|
-
"eslint-config-airbnb": "^19.0.4",
|
|
43
|
-
"eslint-config-airbnb-typescript": "^17.1.0",
|
|
44
|
-
"eslint-config-prettier": "^9.0.0",
|
|
45
|
-
"eslint-import-resolver-typescript": "^3.6.0",
|
|
46
|
-
"eslint-plugin-import": "^2.28.1",
|
|
47
|
-
"eslint-plugin-jsx-a11y": "^6.7.1",
|
|
48
|
-
"eslint-plugin-prettier": "^5.0.0",
|
|
49
|
-
"eslint-plugin-react": "^7.33.2",
|
|
50
|
-
"eslint-plugin-react-hooks": "^4.6.0",
|
|
51
|
-
"eslint-plugin-unused-imports": "^2.0.0",
|
|
52
|
-
"eslint-webpack-plugin": "^4.0.1",
|
|
53
|
-
"jest": "29.7.0",
|
|
54
|
-
"jest-environment-jsdom": "29.7.0",
|
|
55
|
-
"pmnps": "^4.5.3",
|
|
56
|
-
"prettier": "^3.0.3",
|
|
57
|
-
"prettier-eslint": "^15.0.1",
|
|
58
|
-
"prettier-eslint-cli": "^7.1.0",
|
|
59
|
-
"ts-node": "^10.8.1",
|
|
60
|
-
"typescript": "^4.9.5"
|
|
61
|
-
},
|
|
62
|
-
"keywords": [
|
|
63
|
-
"model",
|
|
64
|
-
"state",
|
|
65
|
-
"state-management",
|
|
66
|
-
"typescript"
|
|
67
|
-
]
|
|
68
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"private": false,
|
|
3
|
+
"name": "as-model",
|
|
4
|
+
"version": "0.3.0",
|
|
5
|
+
"description": "This is a model state management tool",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Jimmy.Harding",
|
|
8
|
+
"homepage": "https://github.com/filefoxper/a-model",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/filefoxper/a-model"
|
|
12
|
+
},
|
|
13
|
+
"main": "dist/index.js",
|
|
14
|
+
"module": "esm/index.js",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"esm",
|
|
18
|
+
"index.d.ts"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "node ./build.js",
|
|
22
|
+
"docs": "docsify serve ./docs",
|
|
23
|
+
"lint": "eslint src --fix --ext .ts,.tsx ",
|
|
24
|
+
"lint-init": "eslint --init",
|
|
25
|
+
"test": "jest --coverage"
|
|
26
|
+
},
|
|
27
|
+
"typings": "index.d.ts",
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@babel/cli": "^7.27.2",
|
|
30
|
+
"@babel/core": "^7.27.4",
|
|
31
|
+
"@babel/eslint-parser": "^7.27.5",
|
|
32
|
+
"@babel/plugin-transform-runtime": "^7.27.4",
|
|
33
|
+
"@babel/preset-env": "^7.27.2",
|
|
34
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
35
|
+
"@babel/runtime": "^7.27.6",
|
|
36
|
+
"@pmnps/plugin-publish": "4.5.0",
|
|
37
|
+
"@types/jest": "^29.5.14",
|
|
38
|
+
"babel-jest": "29.7.0",
|
|
39
|
+
"esbuild": "^0.25.0",
|
|
40
|
+
"esbuild-plugin-es5": "2.1.1",
|
|
41
|
+
"eslint": "^8.49.0",
|
|
42
|
+
"eslint-config-airbnb": "^19.0.4",
|
|
43
|
+
"eslint-config-airbnb-typescript": "^17.1.0",
|
|
44
|
+
"eslint-config-prettier": "^9.0.0",
|
|
45
|
+
"eslint-import-resolver-typescript": "^3.6.0",
|
|
46
|
+
"eslint-plugin-import": "^2.28.1",
|
|
47
|
+
"eslint-plugin-jsx-a11y": "^6.7.1",
|
|
48
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
49
|
+
"eslint-plugin-react": "^7.33.2",
|
|
50
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
51
|
+
"eslint-plugin-unused-imports": "^2.0.0",
|
|
52
|
+
"eslint-webpack-plugin": "^4.0.1",
|
|
53
|
+
"jest": "29.7.0",
|
|
54
|
+
"jest-environment-jsdom": "29.7.0",
|
|
55
|
+
"pmnps": "^4.5.3",
|
|
56
|
+
"prettier": "^3.0.3",
|
|
57
|
+
"prettier-eslint": "^15.0.1",
|
|
58
|
+
"prettier-eslint-cli": "^7.1.0",
|
|
59
|
+
"ts-node": "^10.8.1",
|
|
60
|
+
"typescript": "^4.9.5"
|
|
61
|
+
},
|
|
62
|
+
"keywords": [
|
|
63
|
+
"model",
|
|
64
|
+
"state",
|
|
65
|
+
"state-management",
|
|
66
|
+
"typescript"
|
|
67
|
+
]
|
|
68
|
+
}
|