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.
Files changed (3) hide show
  1. package/README.md +558 -558
  2. package/index.d.ts +102 -111
  3. 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 = 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
- S = any,
61
- T extends ModelInstance = any,
62
- R extends undefined | ((instance: () => T) => any) = undefined
63
- > extends Model<S, T> {
64
- (s: S): T;
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?: S;
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
- S = any,
97
- T extends ModelInstance = any,
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<S, T, R>;
95
+ key: Key<M, R>;
101
96
  }
102
97
 
103
98
  export declare interface Store<
104
- S = any,
105
- T extends ModelInstance = any,
106
- R extends undefined | ((instance: () => T) => any) = undefined
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 ? T : ReturnType<R>;
111
- getStoreInstance: () => T;
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?: Model<S, T>;
114
- key?: Key<S, T, R>;
115
- initialState?: S;
116
- state?: S;
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<S, T, R> & E;
119
+ extends: <E extends Record<string, any>>(e: E) => Store<M, R> & E;
124
120
  }
125
121
 
126
122
  export declare function createStore<
127
- S,
128
- T extends ModelInstance,
129
- D extends S,
130
- R extends undefined | ((instance: () => T) => any) = undefined
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
- S = any,
140
- T extends ModelInstance = any,
141
- R extends undefined | ((instance: () => T) => any) = undefined
142
- > extends Key<S, T, R> {
143
- (s: S): T;
144
- createStore: <D extends S>(state?: D) => Store<S, T, R>;
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
- S,
150
- T extends ModelInstance,
151
- D extends S,
152
- R extends undefined | ((instance: () => T) => any) = undefined
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
- S,
163
- T extends ModelInstance,
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<S, T, R> | StoreIndex<S, T, R>
167
- ) => Store<S, T, R> | null;
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
- 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>;
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
- S = any,
232
- T extends ModelInstance = any,
233
- R extends undefined | ((instance: () => T) => any) = undefined
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
- (options?: SignalOptions): R extends undefined ? T : ReturnType<R>;
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<S, T, R>;
227
+ store: Store<M, R>;
243
228
  };
244
229
  }
245
230
 
246
231
  export declare function createSignal<
247
- S,
248
- T extends ModelInstance,
249
- R extends undefined | ((instance: () => T) => any) = undefined
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
- <C extends (instance: () => R extends undefined ? T : ReturnType<R>) => any>(
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
- <C extends (instance: () => R extends undefined ? T : ReturnType<R>) => any>(
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
- ): ReturnType<R> | ReturnType<C>;
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
- S = any,
270
- T extends ModelInstance = any,
271
- R extends undefined | ((instance: () => T) => any) = undefined
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<T, R>;
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
- S,
284
- T extends ModelInstance,
285
- R extends undefined | ((instance: () => T) => any) = undefined
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
- S,
292
- T extends ModelInstance,
293
- D extends S,
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
- model: Model<S, T> | Key<S, T, R> | ModelUsage<Model<S, T>, R>,
291
+ modelLike: M | Key<M, R> | ModelUsage<M, R>,
297
292
  state?: D
298
- ) => Store<S, T, R>;
293
+ ) => Store<M, R>;
299
294
  createKey: <
300
- S,
301
- T extends ModelInstance,
302
- D extends S,
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
- model: Model<S, T> | ModelUsage<Model<S, T>, R>,
299
+ modelLike: M | ModelUsage<M, R>,
306
300
  state?: D
307
- ) => ModelKey<S, T, R>;
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
- S,
317
- T extends ModelInstance,
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<S, T, R>;
314
+ ) => data is ModelKey<M, R>;
322
315
  isModelStore: <
323
- S,
324
- T extends ModelInstance,
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<S, T, R>;
320
+ ) => data is Store<M, R>;
329
321
  isModelUsage: <
330
322
  M extends Model,
331
- R extends undefined | ((instance: () => T) => any) = undefined
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
- S,
337
- T extends ModelInstance,
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<S, T, R>;
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.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.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
+ }