as-model 0.1.21 → 0.1.23
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/index.js +3 -2
- package/esm/updater/index.js +3 -2
- package/index.d.ts +311 -311
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -610,7 +610,8 @@
|
|
|
610
610
|
var isInitialize = !u.initialized || hasInitialState;
|
|
611
611
|
var token = createToken();
|
|
612
612
|
if (u.controlled) {
|
|
613
|
-
var
|
|
613
|
+
var controlledState = hasInitialState && !hasState ? args.initialState : state;
|
|
614
|
+
var instance = model2(controlledState);
|
|
614
615
|
return _object_spread_props(_object_spread({}, u), {
|
|
615
616
|
state,
|
|
616
617
|
instance,
|
|
@@ -620,7 +621,7 @@
|
|
|
620
621
|
if (u.isDestroyed) {
|
|
621
622
|
return u;
|
|
622
623
|
}
|
|
623
|
-
if (!u.initialized && !
|
|
624
|
+
if (!u.initialized && !hasState && !hasInitialState) {
|
|
624
625
|
throw new Error("The updater has not been initialized, it should be updated with a state for initializing.");
|
|
625
626
|
}
|
|
626
627
|
if (isInitialize) {
|
package/esm/updater/index.js
CHANGED
|
@@ -46,13 +46,14 @@ function createUpdateFn(updater, middleWare) {
|
|
|
46
46
|
const isInitialize = !u.initialized || hasInitialState;
|
|
47
47
|
const token = createToken();
|
|
48
48
|
if (u.controlled) {
|
|
49
|
-
const
|
|
49
|
+
const controlledState = hasInitialState && !hasState ? args.initialState : state;
|
|
50
|
+
const instance = model(controlledState);
|
|
50
51
|
return __spreadProps(__spreadValues({}, u), { state, instance, model });
|
|
51
52
|
}
|
|
52
53
|
if (u.isDestroyed) {
|
|
53
54
|
return u;
|
|
54
55
|
}
|
|
55
|
-
if (!u.initialized && !
|
|
56
|
+
if (!u.initialized && !hasState && !hasInitialState) {
|
|
56
57
|
throw new Error(
|
|
57
58
|
"The updater has not been initialized, it should be updated with a state for initializing."
|
|
58
59
|
);
|
package/index.d.ts
CHANGED
|
@@ -1,311 +1,311 @@
|
|
|
1
|
-
declare interface ModelInstance {
|
|
2
|
-
[key: string]: any;
|
|
3
|
-
[key: number]: any;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export declare type FieldStructure<R = any> = {
|
|
7
|
-
callback: () => R;
|
|
8
|
-
deps: any[] | undefined;
|
|
9
|
-
identifier: (d: any) => d is FieldStructure<R>;
|
|
10
|
-
value: R;
|
|
11
|
-
get: () => R;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export declare type MethodStructure<
|
|
15
|
-
R extends (...args: any[]) => any = (...args: any[]) => any
|
|
16
|
-
> = R & {
|
|
17
|
-
identifier: (d: any) => d is MethodStructure;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
declare type ValidInstance<S, T extends ModelInstance> = {
|
|
21
|
-
[K in keyof T]: T[K] extends
|
|
22
|
-
| ((...args: any[]) => S)
|
|
23
|
-
| (((...args: any[]) => any) & { identifier: (d: any) => boolean })
|
|
24
|
-
? T[K]
|
|
25
|
-
: T[K] extends (...args: any[]) => any
|
|
26
|
-
? never
|
|
27
|
-
: T[K];
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export declare type Model<S, T extends ModelInstance> = (
|
|
31
|
-
state: S
|
|
32
|
-
) => ValidInstance<S, T>;
|
|
33
|
-
|
|
34
|
-
export declare type Action<S = any, T extends ModelInstance = ModelInstance> = {
|
|
35
|
-
type: null | string;
|
|
36
|
-
method: null | ((...args: any[]) => any);
|
|
37
|
-
params?: any[];
|
|
38
|
-
state: S;
|
|
39
|
-
prevState?: S;
|
|
40
|
-
instance: T;
|
|
41
|
-
prevInstance?: T;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export interface Token {
|
|
45
|
-
isDifferent: (token: Token) => boolean;
|
|
46
|
-
value: unknown;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export declare type Dispatch = (action: Action) => any;
|
|
50
|
-
|
|
51
|
-
export declare interface Key<
|
|
52
|
-
S = any,
|
|
53
|
-
T extends ModelInstance = any,
|
|
54
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
55
|
-
> extends Model<S, T> {
|
|
56
|
-
(s: S): T;
|
|
57
|
-
source: Model<S, T>;
|
|
58
|
-
selector: R;
|
|
59
|
-
modelKeyIdentifier: () => boolean;
|
|
60
|
-
[k: string]: any;
|
|
61
|
-
defaultState?: S;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
declare interface UpdaterStore<
|
|
65
|
-
S = any,
|
|
66
|
-
T extends ModelInstance = ModelInstance
|
|
67
|
-
> {
|
|
68
|
-
getState: () => { state: S; instance: T };
|
|
69
|
-
dispatch: (action: Action) => void;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export declare type MiddleWare = (
|
|
73
|
-
store: UpdaterStore
|
|
74
|
-
) => (next: Dispatch) => (action: Action) => void;
|
|
75
|
-
|
|
76
|
-
export declare interface Config {
|
|
77
|
-
middleWares?: MiddleWare[];
|
|
78
|
-
controlled?: boolean;
|
|
79
|
-
notify?: (
|
|
80
|
-
notifier: (action: Action) => { errors: any[] | undefined },
|
|
81
|
-
action: Action
|
|
82
|
-
) => any;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** createStore * */
|
|
86
|
-
|
|
87
|
-
export declare interface StoreIndex<
|
|
88
|
-
S = any,
|
|
89
|
-
T extends ModelInstance = any,
|
|
90
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
91
|
-
> {
|
|
92
|
-
key: Key<S, T, R>;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export declare interface Store<
|
|
96
|
-
S = any,
|
|
97
|
-
T extends ModelInstance = any,
|
|
98
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
99
|
-
> extends StoreIndex<S, T, R> {
|
|
100
|
-
subscribe: (dispatcher: Dispatch) => () => void;
|
|
101
|
-
getToken: () => Token;
|
|
102
|
-
getInstance: () => T;
|
|
103
|
-
update: (args?: {
|
|
104
|
-
model?: Model<S, T>;
|
|
105
|
-
key?: Key<S, T, R>;
|
|
106
|
-
initialState?: S;
|
|
107
|
-
state?: S;
|
|
108
|
-
}) => void;
|
|
109
|
-
destroy: () => void;
|
|
110
|
-
payload: <P>(
|
|
111
|
-
callback?: (payload: P | undefined) => P | undefined
|
|
112
|
-
) => P | undefined;
|
|
113
|
-
isDestroyed: () => boolean;
|
|
114
|
-
extends: <E extends Record<string, any>>(e: E) => Store<S, T, R> & E;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export declare function createStore<
|
|
118
|
-
S,
|
|
119
|
-
T extends ModelInstance,
|
|
120
|
-
D extends S,
|
|
121
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
122
|
-
>(
|
|
123
|
-
model: Model<S, T> | Key<S, T, R> | ModelUsage<S, T, R>,
|
|
124
|
-
state?: D
|
|
125
|
-
): Store<S, T, R>;
|
|
126
|
-
|
|
127
|
-
/** createKey * */
|
|
128
|
-
|
|
129
|
-
export declare interface ModelKey<
|
|
130
|
-
S = any,
|
|
131
|
-
T extends ModelInstance = any,
|
|
132
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
133
|
-
> extends Key<S, T, R> {
|
|
134
|
-
(s: S): T;
|
|
135
|
-
createStore: <D extends S>(state?: D) => Store<S, T, R>;
|
|
136
|
-
extends: <E extends Record<string, any>>(e: E) => ModelKey<S, T, R> & E;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export declare function createKey<
|
|
140
|
-
S,
|
|
141
|
-
T extends ModelInstance,
|
|
142
|
-
D extends S,
|
|
143
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
144
|
-
>(model: Model<S, T> | ModelUsage<S, T, R>, state?: D): ModelKey<S, T, R>;
|
|
145
|
-
|
|
146
|
-
/** createStores * */
|
|
147
|
-
|
|
148
|
-
export declare interface StoreCollection {
|
|
149
|
-
find: <
|
|
150
|
-
S,
|
|
151
|
-
T extends ModelInstance,
|
|
152
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
153
|
-
>(
|
|
154
|
-
key: Key<S, T, R> | StoreIndex<S, T, R>
|
|
155
|
-
) => Store<S, T, R> | null;
|
|
156
|
-
update: (...keys: (ModelKey | StoreIndex)[]) => void;
|
|
157
|
-
keys: () => Key[];
|
|
158
|
-
destroy: () => void;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
export declare function createStores(
|
|
162
|
-
...modelKeys: (ModelKey | StoreIndex)[]
|
|
163
|
-
): StoreCollection;
|
|
164
|
-
|
|
165
|
-
/** model API * */
|
|
166
|
-
|
|
167
|
-
export declare interface ModelUsage<
|
|
168
|
-
S,
|
|
169
|
-
T extends ModelInstance,
|
|
170
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
171
|
-
> {
|
|
172
|
-
(s: S): ValidInstance<S, T>;
|
|
173
|
-
createKey: <D extends S>(state?: D) => ModelKey<S, T, R>;
|
|
174
|
-
createStore: <D extends S>(state?: D) => Store<S, T, R>;
|
|
175
|
-
select: <C extends (instance: () => T) => any = (instance: () => T) => T>(
|
|
176
|
-
s: C
|
|
177
|
-
) => ModelUsage<S, T, C>;
|
|
178
|
-
selector: R;
|
|
179
|
-
extends: <E extends Record<string, any>>(e: E) => ModelUsage<S, T, R> & E;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
183
|
-
export declare interface model {
|
|
184
|
-
<
|
|
185
|
-
S,
|
|
186
|
-
T extends ModelInstance,
|
|
187
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
188
|
-
>(
|
|
189
|
-
modelFn: Model<S, T>,
|
|
190
|
-
s?: R
|
|
191
|
-
): ModelUsage<S, T, R>;
|
|
192
|
-
createField: <P extends () => any>(
|
|
193
|
-
callback: P,
|
|
194
|
-
deps?: any[]
|
|
195
|
-
) => FieldStructure<ReturnType<P>>;
|
|
196
|
-
createMethod: <P extends (...args: any[]) => any = (...args: any[]) => any>(
|
|
197
|
-
method: P
|
|
198
|
-
) => MethodStructure<P>;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/** createSignal * */
|
|
202
|
-
|
|
203
|
-
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
204
|
-
declare interface SignalStore<
|
|
205
|
-
S = any,
|
|
206
|
-
T extends ModelInstance = any,
|
|
207
|
-
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
208
|
-
> extends StoreIndex<S, T, R> {
|
|
209
|
-
getToken: () => Token;
|
|
210
|
-
subscribe: (dispatcher: Dispatch) => () => void;
|
|
211
|
-
getSignal: () => {
|
|
212
|
-
(): T;
|
|
213
|
-
startStatistics: () => void;
|
|
214
|
-
stopStatistics: () => void;
|
|
215
|
-
subscribe: (dispatcher: Dispatch) => () => void;
|
|
216
|
-
store: Store<S, T, R>;
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
export declare function createSignal<
|
|
221
|
-
S,
|
|
222
|
-
T extends ModelInstance,
|
|
223
|
-
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
224
|
-
>(store: Store<S, T, R>): SignalStore<S, T, R>;
|
|
225
|
-
|
|
226
|
-
/** createSelector * */
|
|
227
|
-
|
|
228
|
-
declare type SelectMethod<
|
|
229
|
-
T extends ModelInstance = any,
|
|
230
|
-
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
231
|
-
> = {
|
|
232
|
-
(): ReturnType<R>;
|
|
233
|
-
<C extends (instance: () => T) => any>(selector: C): ReturnType<C>;
|
|
234
|
-
<C extends (instance: () => T) => any>(
|
|
235
|
-
selector?: C
|
|
236
|
-
): ReturnType<R> | ReturnType<C>;
|
|
237
|
-
};
|
|
238
|
-
|
|
239
|
-
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
240
|
-
declare interface SelectorStore<
|
|
241
|
-
S = any,
|
|
242
|
-
T extends ModelInstance = any,
|
|
243
|
-
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
244
|
-
> extends StoreIndex<S, T, R> {
|
|
245
|
-
getToken: () => Token;
|
|
246
|
-
subscribe: (dispatcher: Dispatch) => () => void;
|
|
247
|
-
select: SelectMethod<T, R>;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
declare interface SelectorOption<T = any> {
|
|
251
|
-
equality?: (current: T, next: T) => boolean;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
export declare function createSelector<
|
|
255
|
-
S,
|
|
256
|
-
T extends ModelInstance,
|
|
257
|
-
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
258
|
-
>(store: Store<S, T, R>, opts?: SelectorOption): SelectorStore<S, T, R>;
|
|
259
|
-
|
|
260
|
-
/** config * */
|
|
261
|
-
export declare function config(configuration: Config): {
|
|
262
|
-
createStore: <
|
|
263
|
-
S,
|
|
264
|
-
T extends ModelInstance,
|
|
265
|
-
D extends S,
|
|
266
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
267
|
-
>(
|
|
268
|
-
model: Model<S, T> | Key<S, T, R> | ModelUsage<S, T, R>,
|
|
269
|
-
state?: D
|
|
270
|
-
) => Store<S, T, R>;
|
|
271
|
-
createKey: <
|
|
272
|
-
S,
|
|
273
|
-
T extends ModelInstance,
|
|
274
|
-
D extends S,
|
|
275
|
-
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
276
|
-
>(
|
|
277
|
-
model: Model<S, T> | ModelUsage<S, T, R>,
|
|
278
|
-
state?: D
|
|
279
|
-
) => ModelKey<S, T, R>;
|
|
280
|
-
createStores: (...modelKeys: (ModelKey | StoreIndex)[]) => StoreCollection;
|
|
281
|
-
model: model;
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
/** validations * */
|
|
285
|
-
export declare const validations: {
|
|
286
|
-
isInstanceFromNoStateModel: (instance: any) => boolean;
|
|
287
|
-
isModelKey: <
|
|
288
|
-
S,
|
|
289
|
-
T extends ModelInstance,
|
|
290
|
-
R extends (ins: () => T) => any = (ins: () => T) => T
|
|
291
|
-
>(
|
|
292
|
-
data: any
|
|
293
|
-
) => data is ModelKey<S, T, R>;
|
|
294
|
-
isModelStore: <
|
|
295
|
-
S,
|
|
296
|
-
T extends ModelInstance,
|
|
297
|
-
R extends (ins: () => T) => any = (ins: () => T) => T
|
|
298
|
-
>(
|
|
299
|
-
data: any
|
|
300
|
-
) => data is Store<S, T, R>;
|
|
301
|
-
isModelUsage: <
|
|
302
|
-
S,
|
|
303
|
-
T extends ModelInstance,
|
|
304
|
-
R extends (ins: () => T) => any = (ins: () => T) => T
|
|
305
|
-
>(
|
|
306
|
-
data: any
|
|
307
|
-
) => data is ModelUsage<S, T, R>;
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
/** tools * */
|
|
311
|
-
export declare function shallowEqual(prev: any, current: any): boolean;
|
|
1
|
+
declare interface ModelInstance {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
[key: number]: any;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export declare type FieldStructure<R = any> = {
|
|
7
|
+
callback: () => R;
|
|
8
|
+
deps: any[] | undefined;
|
|
9
|
+
identifier: (d: any) => d is FieldStructure<R>;
|
|
10
|
+
value: R;
|
|
11
|
+
get: () => R;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export declare type MethodStructure<
|
|
15
|
+
R extends (...args: any[]) => any = (...args: any[]) => any
|
|
16
|
+
> = R & {
|
|
17
|
+
identifier: (d: any) => d is MethodStructure;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
declare type ValidInstance<S, T extends ModelInstance> = {
|
|
21
|
+
[K in keyof T]: T[K] extends
|
|
22
|
+
| ((...args: any[]) => S)
|
|
23
|
+
| (((...args: any[]) => any) & { identifier: (d: any) => boolean })
|
|
24
|
+
? T[K]
|
|
25
|
+
: T[K] extends (...args: any[]) => any
|
|
26
|
+
? never
|
|
27
|
+
: T[K];
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export declare type Model<S, T extends ModelInstance> = (
|
|
31
|
+
state: S
|
|
32
|
+
) => ValidInstance<S, T>;
|
|
33
|
+
|
|
34
|
+
export declare type Action<S = any, T extends ModelInstance = ModelInstance> = {
|
|
35
|
+
type: null | string;
|
|
36
|
+
method: null | ((...args: any[]) => any);
|
|
37
|
+
params?: any[];
|
|
38
|
+
state: S;
|
|
39
|
+
prevState?: S;
|
|
40
|
+
instance: T;
|
|
41
|
+
prevInstance?: T;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export interface Token {
|
|
45
|
+
isDifferent: (token: Token) => boolean;
|
|
46
|
+
value: unknown;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export declare type Dispatch = (action: Action) => any;
|
|
50
|
+
|
|
51
|
+
export declare interface Key<
|
|
52
|
+
S = any,
|
|
53
|
+
T extends ModelInstance = any,
|
|
54
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
55
|
+
> extends Model<S, T> {
|
|
56
|
+
(s: S): T;
|
|
57
|
+
source: Model<S, T>;
|
|
58
|
+
selector: R;
|
|
59
|
+
modelKeyIdentifier: () => boolean;
|
|
60
|
+
[k: string]: any;
|
|
61
|
+
defaultState?: S;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
declare interface UpdaterStore<
|
|
65
|
+
S = any,
|
|
66
|
+
T extends ModelInstance = ModelInstance
|
|
67
|
+
> {
|
|
68
|
+
getState: () => { state: S; instance: T };
|
|
69
|
+
dispatch: (action: Action) => void;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export declare type MiddleWare = (
|
|
73
|
+
store: UpdaterStore
|
|
74
|
+
) => (next: Dispatch) => (action: Action) => void;
|
|
75
|
+
|
|
76
|
+
export declare interface Config {
|
|
77
|
+
middleWares?: MiddleWare[];
|
|
78
|
+
controlled?: boolean;
|
|
79
|
+
notify?: (
|
|
80
|
+
notifier: (action: Action) => { errors: any[] | undefined },
|
|
81
|
+
action: Action
|
|
82
|
+
) => any;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** createStore * */
|
|
86
|
+
|
|
87
|
+
export declare interface StoreIndex<
|
|
88
|
+
S = any,
|
|
89
|
+
T extends ModelInstance = any,
|
|
90
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
91
|
+
> {
|
|
92
|
+
key: Key<S, T, R>;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export declare interface Store<
|
|
96
|
+
S = any,
|
|
97
|
+
T extends ModelInstance = any,
|
|
98
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
99
|
+
> extends StoreIndex<S, T, R> {
|
|
100
|
+
subscribe: (dispatcher: Dispatch) => () => void;
|
|
101
|
+
getToken: () => Token;
|
|
102
|
+
getInstance: () => T;
|
|
103
|
+
update: (args?: {
|
|
104
|
+
model?: Model<S, T>;
|
|
105
|
+
key?: Key<S, T, R>;
|
|
106
|
+
initialState?: S;
|
|
107
|
+
state?: S;
|
|
108
|
+
}) => void;
|
|
109
|
+
destroy: () => void;
|
|
110
|
+
payload: <P>(
|
|
111
|
+
callback?: (payload: P | undefined) => P | undefined
|
|
112
|
+
) => P | undefined;
|
|
113
|
+
isDestroyed: () => boolean;
|
|
114
|
+
extends: <E extends Record<string, any>>(e: E) => Store<S, T, R> & E;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export declare function createStore<
|
|
118
|
+
S,
|
|
119
|
+
T extends ModelInstance,
|
|
120
|
+
D extends S,
|
|
121
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
122
|
+
>(
|
|
123
|
+
model: Model<S, T> | Key<S, T, R> | ModelUsage<S, T, R>,
|
|
124
|
+
state?: D
|
|
125
|
+
): Store<S, T, R>;
|
|
126
|
+
|
|
127
|
+
/** createKey * */
|
|
128
|
+
|
|
129
|
+
export declare interface ModelKey<
|
|
130
|
+
S = any,
|
|
131
|
+
T extends ModelInstance = any,
|
|
132
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
133
|
+
> extends Key<S, T, R> {
|
|
134
|
+
(s: S): T;
|
|
135
|
+
createStore: <D extends S>(state?: D) => Store<S, T, R>;
|
|
136
|
+
extends: <E extends Record<string, any>>(e: E) => ModelKey<S, T, R> & E;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export declare function createKey<
|
|
140
|
+
S,
|
|
141
|
+
T extends ModelInstance,
|
|
142
|
+
D extends S,
|
|
143
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
144
|
+
>(model: Model<S, T> | ModelUsage<S, T, R>, state?: D): ModelKey<S, T, R>;
|
|
145
|
+
|
|
146
|
+
/** createStores * */
|
|
147
|
+
|
|
148
|
+
export declare interface StoreCollection {
|
|
149
|
+
find: <
|
|
150
|
+
S,
|
|
151
|
+
T extends ModelInstance,
|
|
152
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
153
|
+
>(
|
|
154
|
+
key: Key<S, T, R> | StoreIndex<S, T, R>
|
|
155
|
+
) => Store<S, T, R> | null;
|
|
156
|
+
update: (...keys: (ModelKey | StoreIndex)[]) => void;
|
|
157
|
+
keys: () => Key[];
|
|
158
|
+
destroy: () => void;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export declare function createStores(
|
|
162
|
+
...modelKeys: (ModelKey | StoreIndex)[]
|
|
163
|
+
): StoreCollection;
|
|
164
|
+
|
|
165
|
+
/** model API * */
|
|
166
|
+
|
|
167
|
+
export declare interface ModelUsage<
|
|
168
|
+
S,
|
|
169
|
+
T extends ModelInstance,
|
|
170
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
171
|
+
> {
|
|
172
|
+
(s: S): ValidInstance<S, T>;
|
|
173
|
+
createKey: <D extends S>(state?: D) => ModelKey<S, T, R>;
|
|
174
|
+
createStore: <D extends S>(state?: D) => Store<S, T, R>;
|
|
175
|
+
select: <C extends (instance: () => T) => any = (instance: () => T) => T>(
|
|
176
|
+
s: C
|
|
177
|
+
) => ModelUsage<S, T, C>;
|
|
178
|
+
selector: R;
|
|
179
|
+
extends: <E extends Record<string, any>>(e: E) => ModelUsage<S, T, R> & E;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
183
|
+
export declare interface model {
|
|
184
|
+
<
|
|
185
|
+
S,
|
|
186
|
+
T extends ModelInstance,
|
|
187
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
188
|
+
>(
|
|
189
|
+
modelFn: Model<S, T>,
|
|
190
|
+
s?: R
|
|
191
|
+
): ModelUsage<S, T, R>;
|
|
192
|
+
createField: <P extends () => any>(
|
|
193
|
+
callback: P,
|
|
194
|
+
deps?: any[]
|
|
195
|
+
) => FieldStructure<ReturnType<P>>;
|
|
196
|
+
createMethod: <P extends (...args: any[]) => any = (...args: any[]) => any>(
|
|
197
|
+
method: P
|
|
198
|
+
) => MethodStructure<P>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** createSignal * */
|
|
202
|
+
|
|
203
|
+
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
204
|
+
declare interface SignalStore<
|
|
205
|
+
S = any,
|
|
206
|
+
T extends ModelInstance = any,
|
|
207
|
+
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
208
|
+
> extends StoreIndex<S, T, R> {
|
|
209
|
+
getToken: () => Token;
|
|
210
|
+
subscribe: (dispatcher: Dispatch) => () => void;
|
|
211
|
+
getSignal: () => {
|
|
212
|
+
(): T;
|
|
213
|
+
startStatistics: () => void;
|
|
214
|
+
stopStatistics: () => void;
|
|
215
|
+
subscribe: (dispatcher: Dispatch) => () => void;
|
|
216
|
+
store: Store<S, T, R>;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export declare function createSignal<
|
|
221
|
+
S,
|
|
222
|
+
T extends ModelInstance,
|
|
223
|
+
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
224
|
+
>(store: Store<S, T, R>): SignalStore<S, T, R>;
|
|
225
|
+
|
|
226
|
+
/** createSelector * */
|
|
227
|
+
|
|
228
|
+
declare type SelectMethod<
|
|
229
|
+
T extends ModelInstance = any,
|
|
230
|
+
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
231
|
+
> = {
|
|
232
|
+
(): ReturnType<R>;
|
|
233
|
+
<C extends (instance: () => T) => any>(selector: C): ReturnType<C>;
|
|
234
|
+
<C extends (instance: () => T) => any>(
|
|
235
|
+
selector?: C
|
|
236
|
+
): ReturnType<R> | ReturnType<C>;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
240
|
+
declare interface SelectorStore<
|
|
241
|
+
S = any,
|
|
242
|
+
T extends ModelInstance = any,
|
|
243
|
+
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
244
|
+
> extends StoreIndex<S, T, R> {
|
|
245
|
+
getToken: () => Token;
|
|
246
|
+
subscribe: (dispatcher: Dispatch) => () => void;
|
|
247
|
+
select: SelectMethod<T, R>;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
declare interface SelectorOption<T = any> {
|
|
251
|
+
equality?: (current: T, next: T) => boolean;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export declare function createSelector<
|
|
255
|
+
S,
|
|
256
|
+
T extends ModelInstance,
|
|
257
|
+
R extends (instance: () => T) => any = (instance: () => T) => any
|
|
258
|
+
>(store: Store<S, T, R>, opts?: SelectorOption): SelectorStore<S, T, R>;
|
|
259
|
+
|
|
260
|
+
/** config * */
|
|
261
|
+
export declare function config(configuration: Config): {
|
|
262
|
+
createStore: <
|
|
263
|
+
S,
|
|
264
|
+
T extends ModelInstance,
|
|
265
|
+
D extends S,
|
|
266
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
267
|
+
>(
|
|
268
|
+
model: Model<S, T> | Key<S, T, R> | ModelUsage<S, T, R>,
|
|
269
|
+
state?: D
|
|
270
|
+
) => Store<S, T, R>;
|
|
271
|
+
createKey: <
|
|
272
|
+
S,
|
|
273
|
+
T extends ModelInstance,
|
|
274
|
+
D extends S,
|
|
275
|
+
R extends (instance: () => T) => any = (instance: () => T) => T
|
|
276
|
+
>(
|
|
277
|
+
model: Model<S, T> | ModelUsage<S, T, R>,
|
|
278
|
+
state?: D
|
|
279
|
+
) => ModelKey<S, T, R>;
|
|
280
|
+
createStores: (...modelKeys: (ModelKey | StoreIndex)[]) => StoreCollection;
|
|
281
|
+
model: model;
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
/** validations * */
|
|
285
|
+
export declare const validations: {
|
|
286
|
+
isInstanceFromNoStateModel: (instance: any) => boolean;
|
|
287
|
+
isModelKey: <
|
|
288
|
+
S,
|
|
289
|
+
T extends ModelInstance,
|
|
290
|
+
R extends (ins: () => T) => any = (ins: () => T) => T
|
|
291
|
+
>(
|
|
292
|
+
data: any
|
|
293
|
+
) => data is ModelKey<S, T, R>;
|
|
294
|
+
isModelStore: <
|
|
295
|
+
S,
|
|
296
|
+
T extends ModelInstance,
|
|
297
|
+
R extends (ins: () => T) => any = (ins: () => T) => T
|
|
298
|
+
>(
|
|
299
|
+
data: any
|
|
300
|
+
) => data is Store<S, T, R>;
|
|
301
|
+
isModelUsage: <
|
|
302
|
+
S,
|
|
303
|
+
T extends ModelInstance,
|
|
304
|
+
R extends (ins: () => T) => any = (ins: () => T) => T
|
|
305
|
+
>(
|
|
306
|
+
data: any
|
|
307
|
+
) => data is ModelUsage<S, T, R>;
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
/** tools * */
|
|
311
|
+
export declare function shallowEqual(prev: any, current: any): boolean;
|