as-model 0.3.0 → 0.3.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 +558 -558
- package/index.d.ts +102 -111
- package/package.json +68 -68
package/index.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ declare type ValidInstance<S, T extends ModelInstance> = {
|
|
|
27
27
|
: T[K];
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
export declare type Model<S = any, T extends ModelInstance =
|
|
30
|
+
export declare type Model<S = any, T extends ModelInstance = any> = (
|
|
31
31
|
state: S
|
|
32
32
|
) => ValidInstance<S, T>;
|
|
33
33
|
|
|
@@ -57,22 +57,18 @@ export interface Token {
|
|
|
57
57
|
export declare type Dispatch = (action: Action) => any;
|
|
58
58
|
|
|
59
59
|
export declare interface Key<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
source: Model<S, T>;
|
|
60
|
+
M extends Model = any,
|
|
61
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
62
|
+
> extends M {
|
|
63
|
+
(s: PickState<M>): Instance<M>;
|
|
64
|
+
source: M;
|
|
66
65
|
wrapper: R;
|
|
67
66
|
modelKeyIdentifier: () => boolean;
|
|
68
67
|
[k: string]: any;
|
|
69
|
-
defaultState?:
|
|
68
|
+
defaultState?: PickState<M>;
|
|
70
69
|
}
|
|
71
70
|
|
|
72
|
-
declare interface UpdaterStore<
|
|
73
|
-
S = any,
|
|
74
|
-
T extends ModelInstance = ModelInstance
|
|
75
|
-
> {
|
|
71
|
+
declare interface UpdaterStore<S = any, T extends ModelInstance = any> {
|
|
76
72
|
getState: () => { state: S; instance: T };
|
|
77
73
|
dispatch: (action: Action) => void;
|
|
78
74
|
}
|
|
@@ -93,85 +89,75 @@ export declare interface Config {
|
|
|
93
89
|
/** createStore * */
|
|
94
90
|
|
|
95
91
|
export declare interface StoreIndex<
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
R extends undefined | ((instance: () => T) => any) = undefined
|
|
92
|
+
M extends Model = any,
|
|
93
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = any
|
|
99
94
|
> {
|
|
100
|
-
key: Key<
|
|
95
|
+
key: Key<M, R>;
|
|
101
96
|
}
|
|
102
97
|
|
|
103
98
|
export declare interface Store<
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
> extends StoreIndex<S, T, R> {
|
|
99
|
+
M extends Model = any,
|
|
100
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
101
|
+
> extends StoreIndex<M, R> {
|
|
108
102
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
109
103
|
getToken: () => Token;
|
|
110
|
-
getInstance: () => R extends undefined
|
|
111
|
-
|
|
104
|
+
getInstance: () => R extends undefined
|
|
105
|
+
? Instance<M>
|
|
106
|
+
: ReturnType<R extends undefined ? never : R>;
|
|
107
|
+
getStoreInstance: () => Instance<M>;
|
|
112
108
|
update: (args?: {
|
|
113
|
-
model?:
|
|
114
|
-
key?: Key<
|
|
115
|
-
initialState?:
|
|
116
|
-
state?:
|
|
109
|
+
model?: M;
|
|
110
|
+
key?: Key<M, R>;
|
|
111
|
+
initialState?: PickState<M>;
|
|
112
|
+
state?: PickState<M>;
|
|
117
113
|
}) => void;
|
|
118
114
|
destroy: () => void;
|
|
119
115
|
payload: <P>(
|
|
120
116
|
callback?: (payload: P | undefined) => P | undefined
|
|
121
117
|
) => P | undefined;
|
|
122
118
|
isDestroyed: () => boolean;
|
|
123
|
-
extends: <E extends Record<string, any>>(e: E) => Store<
|
|
119
|
+
extends: <E extends Record<string, any>>(e: E) => Store<M, R> & E;
|
|
124
120
|
}
|
|
125
121
|
|
|
126
122
|
export declare function createStore<
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
>(
|
|
132
|
-
model: Model<S, T> | Key<S, T, R> | ModelUsage<Model<S, T>, R>,
|
|
133
|
-
state?: D
|
|
134
|
-
): Store<S, T, R>;
|
|
123
|
+
M extends Model,
|
|
124
|
+
D extends PickState<M>,
|
|
125
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
126
|
+
>(model: M | Key<M, R> | ModelUsage<M, R>, state?: D): Store<M, R>;
|
|
135
127
|
|
|
136
128
|
/** createKey * */
|
|
137
129
|
|
|
138
130
|
export declare interface ModelKey<
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
extends: <E extends Record<string, any>>(e: E) => ModelKey<S, T, R> & E;
|
|
131
|
+
M extends Model = any,
|
|
132
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
133
|
+
> extends Key<M, R> {
|
|
134
|
+
(s: PickState<M>): Instance<M>;
|
|
135
|
+
createStore: <D extends PickState<M>>(initialState?: D) => Store<M, R>;
|
|
136
|
+
extends: <E extends Record<string, any>>(e: E) => ModelKey<M, R> & E;
|
|
146
137
|
}
|
|
147
138
|
|
|
148
139
|
export declare function createKey<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
>(
|
|
154
|
-
model: Model<S, T> | ModelUsage<Model<S, T>, R>,
|
|
155
|
-
state?: D
|
|
156
|
-
): ModelKey<S, T, R>;
|
|
140
|
+
M extends Model = any,
|
|
141
|
+
D extends PickState<M>,
|
|
142
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
143
|
+
>(model: M | ModelUsage<M, R>, initialState?: D): ModelKey<M, R>;
|
|
157
144
|
|
|
158
145
|
/** createStores * */
|
|
159
146
|
|
|
160
147
|
export declare interface StoreCollection {
|
|
161
148
|
find: <
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
R extends undefined | ((instance: () => T) => any) = undefined
|
|
149
|
+
M extends Model = any,
|
|
150
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
165
151
|
>(
|
|
166
|
-
key: Key<
|
|
167
|
-
) => Store<
|
|
168
|
-
update: (...keys: (ModelKey | StoreIndex)[]) => void;
|
|
152
|
+
key: Key<M, R> | StoreIndex<M, R>
|
|
153
|
+
) => Store<M, R> | null;
|
|
154
|
+
update: (...keys: (ModelKey<any, any> | StoreIndex<any, any>)[]) => void;
|
|
169
155
|
keys: () => Key[];
|
|
170
156
|
destroy: () => void;
|
|
171
157
|
}
|
|
172
158
|
|
|
173
159
|
export declare function createStores(
|
|
174
|
-
...modelKeys: (ModelKey | StoreIndex)[]
|
|
160
|
+
...modelKeys: (ModelKey<any, any> | StoreIndex<any, any>)[]
|
|
175
161
|
): StoreCollection;
|
|
176
162
|
|
|
177
163
|
/** model API * */
|
|
@@ -180,12 +166,8 @@ export declare type ModelUsage<
|
|
|
180
166
|
M extends Model,
|
|
181
167
|
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
182
168
|
> = M & {
|
|
183
|
-
createKey: <D extends PickState<M>>(
|
|
184
|
-
|
|
185
|
-
) => ModelKey<PickState<M>, Instance<M>, R>;
|
|
186
|
-
createStore: <D extends PickState<M>>(
|
|
187
|
-
state?: D
|
|
188
|
-
) => Store<PickState<M>, Instance<M>, R>;
|
|
169
|
+
createKey: <D extends PickState<M>>(state?: D) => ModelKey<M, R>;
|
|
170
|
+
createStore: <D extends PickState<M>>(state?: D) => Store<M, R>;
|
|
189
171
|
produce: <
|
|
190
172
|
C extends (instance: () => Instance<M>) => any = (
|
|
191
173
|
instance: () => Instance<M>
|
|
@@ -228,26 +210,28 @@ export interface SignalOptions {
|
|
|
228
210
|
|
|
229
211
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
230
212
|
declare interface SignalStore<
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
> extends StoreIndex<S, T, R> {
|
|
213
|
+
M extends Model = any,
|
|
214
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
215
|
+
> extends StoreIndex<M, R> {
|
|
235
216
|
getToken: () => Token;
|
|
236
217
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
237
218
|
getSignal: () => {
|
|
238
|
-
(
|
|
219
|
+
(
|
|
220
|
+
options?: SignalOptions
|
|
221
|
+
): R extends undefined
|
|
222
|
+
? Instance<M>
|
|
223
|
+
: ReturnType<R extends undefined ? never : R>;
|
|
239
224
|
startStatistics: () => void;
|
|
240
225
|
stopStatistics: () => void;
|
|
241
226
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
242
|
-
store: Store<
|
|
227
|
+
store: Store<M, R>;
|
|
243
228
|
};
|
|
244
229
|
}
|
|
245
230
|
|
|
246
231
|
export declare function createSignal<
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
>(store: Store<S, T, R>): SignalStore<S, T, R>;
|
|
232
|
+
M extends Model = any,
|
|
233
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
234
|
+
>(store: Store<M, R>): SignalStore<M, R>;
|
|
251
235
|
|
|
252
236
|
/** createSelector * */
|
|
253
237
|
|
|
@@ -255,24 +239,37 @@ declare type SelectMethod<
|
|
|
255
239
|
T extends ModelInstance = any,
|
|
256
240
|
R extends undefined | ((instance: () => T) => any) = undefined
|
|
257
241
|
> = {
|
|
258
|
-
(): R extends undefined ? T : ReturnType<R>;
|
|
259
|
-
<
|
|
242
|
+
(): R extends undefined ? T : ReturnType<R extends undefined ? never : R>;
|
|
243
|
+
<
|
|
244
|
+
C extends (
|
|
245
|
+
instance: () => R extends undefined
|
|
246
|
+
? T
|
|
247
|
+
: ReturnType<R extends undefined ? never : R>
|
|
248
|
+
) => any
|
|
249
|
+
>(
|
|
260
250
|
selector: C
|
|
261
251
|
): ReturnType<C>;
|
|
262
|
-
<
|
|
252
|
+
<
|
|
253
|
+
C extends (
|
|
254
|
+
instance: () => R extends undefined
|
|
255
|
+
? T
|
|
256
|
+
: ReturnType<R extends undefined ? never : R>
|
|
257
|
+
) => any
|
|
258
|
+
>(
|
|
263
259
|
selector?: C
|
|
264
|
-
):
|
|
260
|
+
):
|
|
261
|
+
| (R extends undefined ? T : ReturnType<R extends undefined ? never : R>)
|
|
262
|
+
| ReturnType<C>;
|
|
265
263
|
};
|
|
266
264
|
|
|
267
265
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
268
266
|
declare interface SelectorStore<
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
> extends StoreIndex<S, T, R> {
|
|
267
|
+
M extends Model = any,
|
|
268
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
269
|
+
> extends StoreIndex<M, R> {
|
|
273
270
|
getToken: () => Token;
|
|
274
271
|
subscribe: (dispatcher: Dispatch) => () => void;
|
|
275
|
-
select: SelectMethod<
|
|
272
|
+
select: SelectMethod<Instance<M>, R>;
|
|
276
273
|
}
|
|
277
274
|
|
|
278
275
|
declare interface SelectorOption<T = any> {
|
|
@@ -280,31 +277,28 @@ declare interface SelectorOption<T = any> {
|
|
|
280
277
|
}
|
|
281
278
|
|
|
282
279
|
export declare function createSelector<
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
>(store: Store<S, T, R>, opts?: SelectorOption): SelectorStore<S, T, R>;
|
|
280
|
+
M extends Model = any,
|
|
281
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
282
|
+
>(store: Store<M, R>, opts?: SelectorOption): SelectorStore<M, R>;
|
|
287
283
|
|
|
288
284
|
/** config * */
|
|
289
285
|
export declare function config(configuration: Config): {
|
|
290
286
|
createStore: <
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
R extends undefined | ((instance: () => T) => any) = undefined
|
|
287
|
+
M extends Model,
|
|
288
|
+
D extends PickState<M>,
|
|
289
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
295
290
|
>(
|
|
296
|
-
|
|
291
|
+
modelLike: M | Key<M, R> | ModelUsage<M, R>,
|
|
297
292
|
state?: D
|
|
298
|
-
) => Store<
|
|
293
|
+
) => Store<M, R>;
|
|
299
294
|
createKey: <
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
R extends undefined | ((instance: () => T) => any) = undefined
|
|
295
|
+
M extends Model,
|
|
296
|
+
D extends PickState<M>,
|
|
297
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
304
298
|
>(
|
|
305
|
-
|
|
299
|
+
modelLike: M | ModelUsage<M, R>,
|
|
306
300
|
state?: D
|
|
307
|
-
) => ModelKey<
|
|
301
|
+
) => ModelKey<M, R>;
|
|
308
302
|
createStores: (...modelKeys: (ModelKey | StoreIndex)[]) => StoreCollection;
|
|
309
303
|
model: model;
|
|
310
304
|
};
|
|
@@ -313,32 +307,29 @@ export declare function config(configuration: Config): {
|
|
|
313
307
|
export declare const validations: {
|
|
314
308
|
isInstanceFromNoStateModel: (instance: any) => boolean;
|
|
315
309
|
isModelKey: <
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
R extends undefined | ((instance: () => T) => any) = undefined
|
|
310
|
+
M extends Model,
|
|
311
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
319
312
|
>(
|
|
320
313
|
data: any
|
|
321
|
-
) => data is ModelKey<
|
|
314
|
+
) => data is ModelKey<M, R>;
|
|
322
315
|
isModelStore: <
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
R extends undefined | ((instance: () => T) => any) = undefined
|
|
316
|
+
M extends Model,
|
|
317
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
326
318
|
>(
|
|
327
319
|
data: any
|
|
328
|
-
) => data is Store<
|
|
320
|
+
) => data is Store<M, R>;
|
|
329
321
|
isModelUsage: <
|
|
330
322
|
M extends Model,
|
|
331
|
-
R extends undefined | ((instance: () =>
|
|
323
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
332
324
|
>(
|
|
333
325
|
data: M
|
|
334
326
|
) => data is ModelUsage<typeof data, R>;
|
|
335
327
|
isStoreIndex: <
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
R extends undefined | ((instance: () => T) => any) = undefined
|
|
328
|
+
M extends Model,
|
|
329
|
+
R extends undefined | ((instance: () => Instance<M>) => any) = undefined
|
|
339
330
|
>(
|
|
340
331
|
data: any
|
|
341
|
-
) => data is StoreIndex<
|
|
332
|
+
) => data is StoreIndex<M, R>;
|
|
342
333
|
};
|
|
343
334
|
|
|
344
335
|
/** tools * */
|
package/package.json
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
{
|
|
2
|
-
"private": false,
|
|
3
|
-
"name": "as-model",
|
|
4
|
-
"version": "0.3.
|
|
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.2",
|
|
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
|
+
}
|