react-redux-cache 0.21.0 → 0.22.1

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.
@@ -1,367 +1,206 @@
1
- import type {Actions} from './createActions'
2
- import type {Selectors} from './createSelectors'
3
-
4
- export type Key = string | number | symbol
5
-
6
- export type Dict<T> = Record<Key, T>
7
-
1
+ import type { Actions } from './createActions';
2
+ import type { Selectors } from './createSelectors';
3
+ export type Key = string | number | symbol;
4
+ export type Mutable = {
5
+ /**
6
+ * Used only when mutable cache enabled. Always incremented when collection changed by reducer to allow subscribe on changes.
7
+ * Should not be used for comparing different collections as supposed to be compared only with previously saved changeKey of the same collection.
8
+ */
9
+ _changeKey?: number;
10
+ };
11
+ export type Dict<T> = Record<Key, T> & Mutable;
8
12
  export type OptionalPartial<T, K extends keyof T> = Partial<{
9
- [A in K]: Partial<T[A]>
10
- }> &
11
- Omit<T, K>
12
-
13
+ [A in K]: Partial<T[A]>;
14
+ }> & Omit<T, K>;
13
15
  /** Entity changes to be merged to the state. */
14
16
  export type EntityChanges<T extends Typenames> = {
15
- /** Entities that will be merged with existing. */
16
- merge?: PartialEntitiesMap<T>
17
- /** Entities that will replace existing. */
18
- replace?: Partial<EntitiesMap<T>>
19
- /** Ids of entities that will be removed. */
20
- remove?: EntityIds<T>
21
- /** Alias for `merge` to support normalizr. */
22
- entities?: EntityChanges<T>['merge']
23
- }
24
-
17
+ /** Entities that will be merged with existing. */
18
+ merge?: PartialEntitiesMap<T>;
19
+ /** Entities that will replace existing. */
20
+ replace?: Partial<EntitiesMap<T>>;
21
+ /** Ids of entities that will be removed. */
22
+ remove?: EntityIds<T>;
23
+ /** Alias for `merge` to support normalizr. */
24
+ entities?: EntityChanges<T>['merge'];
25
+ };
25
26
  export type Store<S = unknown> = {
26
- dispatch: (action: ReturnType<Actions[keyof Actions]>) => unknown
27
- getState: () => S
28
- }
29
-
27
+ dispatch: (action: ReturnType<Actions[keyof Actions]>) => unknown;
28
+ getState: () => S;
29
+ };
30
30
  /** Record of typename and its corresponding entity type */
31
- export type Typenames = Record<string, object>
32
-
31
+ export type Typenames = Record<string, object>;
33
32
  export type Cache<N extends string, T extends Typenames, QP, QR, MP, MR> = {
34
- /** Used as prefix for actions and in default cacheStateSelector for selecting cache state from store root state. */
35
- name: N
36
- /** Cache options. */
37
- options: CacheOptions
38
- /** Default options for queries and mutations. */
39
- globals: Globals<N, T, QP, QR, MP, MR>
40
- /** Hooks to access and subscribe to the store. Imported from react-redux if not overridden. */
41
- storeHooks: {
42
- useStore: () => Store
43
- useSelector: <R>(selector: (state: unknown) => R, comparer?: (x: R, y: R) => boolean) => R
44
- }
45
- /** Should return cache state from store root state. Default implementation returns `state[name]`. */
46
- cacheStateSelector: (state: any) => CacheState<T, QP, QR, MP, MR>
47
- /** Queries. */
48
- queries: {
49
- [QK in keyof (QP & QR)]: QK extends keyof (QP | QR)
50
- ? QueryInfo<N, T, QP[QK], QR[QK], QP, QR, MP, MR>
51
- : never
52
- }
53
- /** Mutations. */
54
- mutations: {
55
- [MK in keyof (MP & MR)]: MK extends keyof (MP | MR)
56
- ? MutationInfo<N, T, MP[MK], MR[MK], QP, QR, MP, MR>
57
- : never
58
- }
59
- }
60
-
61
- export type QueryStateComparer<T extends Typenames, P, R> = (
62
- x: QueryState<T, P, R> | undefined,
63
- y: QueryState<T, P, R> | undefined
64
- ) => boolean
65
-
33
+ /** Used as prefix for actions and in default cacheStateSelector for selecting cache state from store root state. */
34
+ name: N;
35
+ /** Cache options. */
36
+ options: CacheOptions;
37
+ /** Default options for queries and mutations. */
38
+ globals: Globals<N, T, QP, QR, MP, MR>;
39
+ /** Hooks to access and subscribe to the store. Imported from react-redux if not overridden. */
40
+ storeHooks: {
41
+ useStore: () => Store;
42
+ useSelector: <R>(selector: (state: unknown) => R, comparer?: (x: R, y: R) => boolean) => R;
43
+ };
44
+ /** Should return cache state from store root state. Default implementation returns `state[name]`. */
45
+ cacheStateSelector: (state: any) => CacheState<T, QP, QR, MP, MR>;
46
+ /** Queries. */
47
+ queries: {
48
+ [QK in keyof (QP & QR)]: QK extends keyof (QP | QR) ? QueryInfo<N, T, QP[QK], QR[QK], QP, QR, MP, MR> : never;
49
+ };
50
+ /** Mutations. */
51
+ mutations: {
52
+ [MK in keyof (MP & MR)]: MK extends keyof (MP | MR) ? MutationInfo<N, T, MP[MK], MR[MK], QP, QR, MP, MR> : never;
53
+ };
54
+ };
55
+ export type QueryStateComparer<T extends Typenames, P, R> = (x: QueryState<T, P, R> | undefined, y: QueryState<T, P, R> | undefined) => boolean;
66
56
  export type Globals<N extends string, T extends Typenames, QP, QR, MP, MR> = {
67
- /** Handles errors, not handled by onError from queries and mutations. @Default undefined. */
68
- onError?: (
69
- error: unknown,
70
- key: string,
71
- params: unknown,
72
- store: Store,
73
- actions: Actions<N, T, QP, QR, MP, MR>,
74
- selectors: Selectors<N, T, QP, QR, MP, MR>
75
- ) => void
76
- /** Query options. */
77
- queries: {
78
- /** Determines when useQuery fetch triggers should start fetching. Fetch is performed if function returns true.
79
- * Fetch triggers are: 1) mount 2) cache key change 3) skipFetch value change to false.
80
- * @Default FetchPolicy.NoCacheOrExpired */
81
- fetchPolicy: (
82
- expired: boolean,
83
- params: unknown,
84
- state: QueryState<T, unknown, unknown>,
85
- store: Store,
86
- selectors: Selectors<N, T, QP, QR, MP, MR>
87
- ) => boolean
88
- /** Disables any fetches when set to true. Triggers fetch when changed to false. @Default false */
89
- skipFetch: boolean
90
- /** If set, this value updates expiresAt value of query state when query result is received. @Default undefined */
91
- secondsToLive?: number
92
- /** Either comparer function, or array of keys to subscribe by useQuery's useSelector. @Default compares result, loading, params, error. */
93
- selectorComparer?: QueryStateComparer<T, unknown, unknown> | (keyof QueryState<T, unknown, unknown>)[]
94
- }
95
- }
96
-
57
+ /** Handles errors, not handled by onError from queries and mutations. @Default undefined. */
58
+ onError?: (error: unknown, key: string, params: unknown, store: Store, actions: Actions<N, T, QP, QR, MP, MR>, selectors: Selectors<N, T, QP, QR, MP, MR>) => void;
59
+ /** Query options. */
60
+ queries: {
61
+ /** Determines when useQuery fetch triggers should start fetching. Fetch is performed if function returns true.
62
+ * Fetch triggers are: 1) mount 2) cache key change 3) skipFetch value change to false.
63
+ * @Default FetchPolicy.NoCacheOrExpired */
64
+ fetchPolicy: (expired: boolean, params: unknown, state: QueryState<T, unknown, unknown>, store: Store, selectors: Selectors<N, T, QP, QR, MP, MR>) => boolean;
65
+ /** Disables any fetches when set to true. Triggers fetch when changed to false. @Default false */
66
+ skipFetch: boolean;
67
+ /** If set, this value updates expiresAt value of query state when query result is received. @Default undefined */
68
+ secondsToLive?: number;
69
+ /** Either comparer function, or array of keys to subscribe by useQuery's useSelector. @Default compares result, loading, params, error. */
70
+ selectorComparer?: QueryStateComparer<T, unknown, unknown> | (keyof QueryState<T, unknown, unknown>)[];
71
+ };
72
+ };
97
73
  export type CacheOptions = {
98
- /** Enables additional validation with logging to console.warn. Recommended to enable in dev/testing mode. @Default true in dev mode. */
99
- additionalValidation: boolean
100
- /** Enables debug logs. @Default false */
101
- logsEnabled: boolean
102
- /**
103
- * Enables deep comparison before merging entities to the state.
104
- * Re-rendering is a heavier operation than comparison, so disabling it can lead to performance drop.
105
- * Makes sense to disable only if merging equal results & entities to the state is a rare case.
106
- * @Default true
107
- */
108
- deepComparisonEnabled: boolean
109
- }
110
-
74
+ /**
75
+ * BETA: Optimization that makes state collections mutable.
76
+ * Subscription to mutable collecitons will work only when subscribed to both collection and its change key - collections
77
+ * still can be replaced with the new ones instead of mutating e.g. when clearing state.
78
+ * @Default false
79
+ * */
80
+ mutableCollections: boolean;
81
+ /** Enables additional validation with logging to console.warn. Recommended to enable in dev/testing mode. @Default true in dev mode. */
82
+ additionalValidation: boolean;
83
+ /** Enables debug logs. @Default false */
84
+ logsEnabled: boolean;
85
+ /**
86
+ * Enables deep comparison before merging entities to the state.
87
+ * Re-rendering is a heavier operation than comparison, so disabling it can lead to performance drop.
88
+ * Makes sense to disable only if merging equal results & entities to the state is a rare case.
89
+ * @Default true
90
+ */
91
+ deepComparisonEnabled: boolean;
92
+ };
111
93
  export type PartialEntitiesMap<T extends Typenames> = {
112
- [K in keyof T]?: Dict<Partial<T[K]>>
113
- }
114
-
94
+ [K in keyof T]?: Dict<Partial<T[K]>>;
95
+ };
115
96
  export type EntitiesMap<T extends Typenames> = {
116
- [K in keyof T]?: Dict<T[K]>
117
- }
118
-
97
+ [K in keyof T]?: Dict<T[K]>;
98
+ };
119
99
  export type EntityIds<T extends Typenames> = {
120
- [K in keyof T]?: Key[]
121
- }
122
-
100
+ [K in keyof T]?: Key[];
101
+ };
123
102
  export type CacheState<T extends Typenames, QP, QR, MP, MR> = {
124
- entities: EntitiesMap<T>
125
- queries: {
126
- [QK in keyof (QP | QR)]: Dict<QueryState<T, QP[QK], QR[QK]> | undefined>
127
- }
128
- mutations: {
129
- [MK in keyof (MP | MR)]: MutationState<T, MP[MK], MR[MK]>
130
- }
131
- }
132
-
133
- export type QueryInfo<
134
- N extends string,
135
- T extends Typenames = Typenames,
136
- P = unknown,
137
- R = unknown,
138
- QP = unknown,
139
- QR = unknown,
140
- MP = unknown,
141
- MR = unknown
142
- > = Partial<Pick<Globals<N, T, QP, QR, MP, MR>['queries'], 'skipFetch' | 'secondsToLive'>> & {
143
- query: NormalizedQuery<T, P, R>
144
- /** Determines when useQuery fetch triggers should start fetching. Fetch is performed if function returns true.
145
- * Fetch triggers are: 1) mount 2) cache key change 3) skipFetch value change to false.
146
- * @Default FetchPolicy.NoCacheOrExpired */
147
- fetchPolicy?: (
148
- expired: boolean,
149
- params: P,
150
- queryState: QueryState<T, P, R>,
151
- store: Store,
152
- selectors: Selectors<N, T, QP, QR, MP, MR>
153
- ) => boolean
154
- /** Merges results before saving to the store. Default implementation is using the latest result. */
155
- mergeResults?: (
156
- oldResult: R | undefined,
157
- response: NormalizedQueryResponse<T, R>,
158
- params: P | undefined,
159
- store: Store,
160
- actions: Actions<N, T, QP, QR, MP, MR>,
161
- selectors: Selectors<N, T, QP, QR, MP, MR>
162
- ) => R
163
- /**
164
- * Cache key is used for storing the query state and for performing a fetch when it changes. Queries with the same cache key share their state.
165
- * Default implementation uses `String()` or `JSON.stringify` depending on type.
166
- * It is recommended to override it when default implementation is not optimal or when keys in params object can be sorted in random order etc.
167
- */
168
- getCacheKey?: (params: P) => Key
169
- /** Called after fetch completed either successfully or not. */
170
- onCompleted?: (
171
- response: NormalizedQueryResponse<T, R> | undefined,
172
- error: unknown | undefined,
173
- params: P | undefined,
174
- store: Store,
175
- actions: Actions<N, T, QP, QR, MP, MR>,
176
- selectors: Selectors<N, T, QP, QR, MP, MR>
177
- ) => void
178
- /** Called after fetch finished successfully. */
179
- onSuccess?: (
180
- response: NormalizedQueryResponse<T, R>,
181
- params: P | undefined,
182
- store: Store,
183
- actions: Actions<N, T, QP, QR, MP, MR>,
184
- selectors: Selectors<N, T, QP, QR, MP, MR>
185
- ) => void
186
- /** Called after fetch finished with error. Should return true if error was handled and does not require global onError handling. */
187
- onError?: (
188
- error: unknown,
189
- params: P | undefined,
190
- store: Store,
191
- actions: Actions<N, T, QP, QR, MP, MR>,
192
- selectors: Selectors<N, T, QP, QR, MP, MR>
193
- ) => boolean | void | null | undefined
194
- /** Either comparer function, or array of keys to subscribe by useQuery's useSelector. Default compares params, result, loading, error. */
195
- selectorComparer?: QueryStateComparer<T, P, R> | (keyof QueryState<T, P, R>)[]
196
- }
197
-
103
+ entities: EntitiesMap<T> & Mutable;
104
+ queries: {
105
+ [QK in keyof (QP | QR)]: Dict<QueryState<T, QP[QK], QR[QK]> | undefined>;
106
+ } & Mutable;
107
+ mutations: {
108
+ [MK in keyof (MP | MR)]: MutationState<T, MP[MK], MR[MK]>;
109
+ } & Mutable;
110
+ };
111
+ export type QueryInfo<N extends string, T extends Typenames = Typenames, P = unknown, R = unknown, QP = unknown, QR = unknown, MP = unknown, MR = unknown> = Partial<Pick<Globals<N, T, QP, QR, MP, MR>['queries'], 'skipFetch' | 'secondsToLive'>> & {
112
+ query: NormalizedQuery<T, P, R>;
113
+ /** Determines when useQuery fetch triggers should start fetching. Fetch is performed if function returns true.
114
+ * Fetch triggers are: 1) mount 2) cache key change 3) skipFetch value change to false.
115
+ * @Default FetchPolicy.NoCacheOrExpired */
116
+ fetchPolicy?: (expired: boolean, params: P, queryState: QueryState<T, P, R>, store: Store, selectors: Selectors<N, T, QP, QR, MP, MR>) => boolean;
117
+ /** Merges results before saving to the store. Default implementation is using the latest result. */
118
+ mergeResults?: (oldResult: R | undefined, response: NormalizedQueryResponse<T, R>, params: P | undefined, store: Store, actions: Actions<N, T, QP, QR, MP, MR>, selectors: Selectors<N, T, QP, QR, MP, MR>) => R;
119
+ /**
120
+ * Cache key is used for storing the query state and for performing a fetch when it changes. Queries with the same cache key share their state.
121
+ * Default implementation uses `String()` or `JSON.stringify` depending on type.
122
+ * It is recommended to override it when default implementation is not optimal or when keys in params object can be sorted in random order etc.
123
+ */
124
+ getCacheKey?: (params: P) => Key;
125
+ /** Called after fetch completed either successfully or not. */
126
+ onCompleted?: (response: NormalizedQueryResponse<T, R> | undefined, error: unknown | undefined, params: P | undefined, store: Store, actions: Actions<N, T, QP, QR, MP, MR>, selectors: Selectors<N, T, QP, QR, MP, MR>) => void;
127
+ /** Called after fetch finished successfully. */
128
+ onSuccess?: (response: NormalizedQueryResponse<T, R>, params: P | undefined, store: Store, actions: Actions<N, T, QP, QR, MP, MR>, selectors: Selectors<N, T, QP, QR, MP, MR>) => void;
129
+ /** Called after fetch finished with error. Should return true if error was handled and does not require global onError handling. */
130
+ onError?: (error: unknown, params: P | undefined, store: Store, actions: Actions<N, T, QP, QR, MP, MR>, selectors: Selectors<N, T, QP, QR, MP, MR>) => boolean | void | null | undefined;
131
+ /** Either comparer function, or array of keys to subscribe by useQuery's useSelector. Default compares params, result, loading, error. */
132
+ selectorComparer?: QueryStateComparer<T, P, R> | (keyof QueryState<T, P, R>)[];
133
+ };
198
134
  export type Query<P = unknown, R = unknown> = (
199
- /** Query parameters */
200
- params: P,
201
- /** Store */
202
- store: Store
203
- ) => Promise<QueryResponse<R>>
204
-
205
- export type NormalizedQuery<T extends Typenames = Typenames, P = unknown, R = unknown> = (
206
- ...args: Parameters<Query<P, R>>
207
- ) => Promise<NormalizedQueryResponse<T, R>>
208
-
135
+ /** Query parameters */
136
+ params: P,
137
+ /** Store */
138
+ store: Store) => Promise<QueryResponse<R>>;
139
+ export type NormalizedQuery<T extends Typenames = Typenames, P = unknown, R = unknown> = (...args: Parameters<Query<P, R>>) => Promise<NormalizedQueryResponse<T, R>>;
209
140
  export type QueryState<T extends Typenames, P, R> = MutationState<T, P, R> & {
210
- /**
211
- * Timestamp in milliseconds, after which state is considered expired.
212
- * Hooks may refetch the query again when component mounts, cache key or skip option change, depending on the fetch policy.
213
- * Client query calls also start making fetch if onlyIfExpired argument is truthy.
214
- * */
215
- expiresAt?: number
216
- }
217
-
218
- export type UseQueryOptions<
219
- N extends string,
220
- T extends Typenames,
221
- QK extends keyof (QP & QR),
222
- QP,
223
- QR,
224
- MP,
225
- MR
226
- > = {
227
- query: QK
228
- params: QK extends keyof (QP | QR) ? QP[QK] : never
229
- } & Pick<
230
- QueryInfo<
231
- N,
232
- T,
233
- QK extends keyof (QP | QR) ? QP[QK] : never,
234
- QK extends keyof (QP | QR) ? QR[QK] : never,
235
- QP,
236
- QR,
237
- MP,
238
- MR
239
- >,
240
- | 'fetchPolicy'
241
- | 'skipFetch'
242
- | 'secondsToLive'
243
- | 'selectorComparer'
244
- | 'mergeResults'
245
- | 'onCompleted'
246
- | 'onSuccess'
247
- | 'onError'
248
- >
249
-
250
- export type QueryOptions<
251
- N extends string,
252
- T extends Typenames,
253
- QP,
254
- QR,
255
- QK extends keyof (QP & QR),
256
- MP,
257
- MR
258
- > = Pick<
259
- UseQueryOptions<N, T, QK, QP, QR, MP, MR>,
260
- | 'query'
261
- | 'params'
262
- | 'skipFetch'
263
- | 'secondsToLive'
264
- | 'mergeResults'
265
- | 'onCompleted'
266
- | 'onSuccess'
267
- | 'onError'
268
- > & {
269
- /** If set to true, query will run only if it is expired or result not yet cached. */
270
- onlyIfExpired?: boolean
271
- }
272
-
141
+ /**
142
+ * Timestamp in milliseconds, after which state is considered expired.
143
+ * Hooks may refetch the query again when component mounts, cache key or skip option change, depending on the fetch policy.
144
+ * Client query calls also start making fetch if onlyIfExpired argument is truthy.
145
+ * */
146
+ expiresAt?: number;
147
+ };
148
+ export type UseQueryOptions<N extends string, T extends Typenames, QK extends keyof (QP & QR), QP, QR, MP, MR> = {
149
+ query: QK;
150
+ params: QK extends keyof (QP | QR) ? QP[QK] : never;
151
+ } & Pick<QueryInfo<N, T, QK extends keyof (QP | QR) ? QP[QK] : never, QK extends keyof (QP | QR) ? QR[QK] : never, QP, QR, MP, MR>, 'fetchPolicy' | 'skipFetch' | 'secondsToLive' | 'selectorComparer' | 'mergeResults' | 'onCompleted' | 'onSuccess' | 'onError'>;
152
+ export type QueryOptions<N extends string, T extends Typenames, QP, QR, QK extends keyof (QP & QR), MP, MR> = Pick<UseQueryOptions<N, T, QK, QP, QR, MP, MR>, 'query' | 'params' | 'skipFetch' | 'secondsToLive' | 'mergeResults' | 'onCompleted' | 'onSuccess' | 'onError'> & {
153
+ /** If set to true, query will run only if it is expired or result not yet cached. */
154
+ onlyIfExpired?: boolean;
155
+ };
273
156
  export type QueryResponse<R = unknown> = {
274
- result: R
275
- /** If defined, overrides this value in the query state, ignoring `secondsToLive` option. */
276
- expiresAt?: number
277
- }
278
-
279
- export type NormalizedQueryResponse<T extends Typenames = Typenames, R = unknown> = EntityChanges<T> &
280
- QueryResponse<R>
281
-
157
+ result: R;
158
+ /** If defined, overrides this value in the query state, ignoring `secondsToLive` option. */
159
+ expiresAt?: number;
160
+ };
161
+ export type NormalizedQueryResponse<T extends Typenames = Typenames, R = unknown> = EntityChanges<T> & QueryResponse<R>;
282
162
  /** Result is always returned, even if cancelled or finished with error. */
283
163
  export type QueryResult<R = unknown> = {
284
- error?: unknown
285
- /**
286
- * Fetch cancelled reason.
287
- * @value loading - already loading. Result of current fetch is returned.
288
- * @value not-expired - not expired yet. Current state result is returned.
289
- */
290
- cancelled?: 'loading' | 'not-expired'
291
- result?: R
292
- }
293
-
294
- export type MutationInfo<
295
- N extends string,
296
- T extends Typenames = Typenames,
297
- P = unknown,
298
- R = unknown,
299
- QP = unknown,
300
- QR = unknown,
301
- MP = unknown,
302
- MR = unknown
303
- > = Pick<QueryInfo<N, T, P, R, QP, QR, MP, MR>, 'onCompleted' | 'onSuccess' | 'onError'> & {
304
- mutation: NormalizedMutation<T, P, R>
305
- }
306
-
164
+ error?: unknown;
165
+ /**
166
+ * Fetch cancelled reason.
167
+ * @value loading - already loading. Result of current fetch is returned.
168
+ * @value not-expired - not expired yet. Current state result is returned.
169
+ */
170
+ cancelled?: 'loading' | 'not-expired';
171
+ result?: R;
172
+ };
173
+ export type MutationInfo<N extends string, T extends Typenames = Typenames, P = unknown, R = unknown, QP = unknown, QR = unknown, MP = unknown, MR = unknown> = Pick<QueryInfo<N, T, P, R, QP, QR, MP, MR>, 'onCompleted' | 'onSuccess' | 'onError'> & {
174
+ mutation: NormalizedMutation<T, P, R>;
175
+ };
307
176
  export type Mutation<P = unknown, R = unknown> = (
308
- /** Mutation parameters */
309
- params: P,
310
- /** Store */
311
- store: Store,
312
- /** Signal is aborted for current mutation when the same mutation was called once again. */
313
- abortSignal: AbortSignal
314
- ) => Promise<MutationResponse<R>>
315
-
316
- export type NormalizedMutation<T extends Typenames = Typenames, P = unknown, R = unknown> = (
317
- ...args: Parameters<Mutation<P, R>>
318
- ) => Promise<NormalizedMutationResponse<T, R>>
319
-
320
- export type MutateOptions<
321
- N extends string,
322
- T extends Typenames,
323
- QP,
324
- QR,
325
- MP,
326
- MR,
327
- MK extends keyof (MP & MR)
328
- > = Pick<
329
- MutationInfo<
330
- N,
331
- T,
332
- MK extends keyof (MP | MR) ? MP[MK] : never,
333
- MK extends keyof (MP | MR) ? MR[MK] : never,
334
- QP,
335
- QR,
336
- MP,
337
- MR
338
- >,
339
- 'onCompleted' | 'onSuccess' | 'onError'
340
- > & {
341
- mutation: MK
342
- params: MK extends keyof (MP | MR) ? MP[MK] : never
343
- }
344
-
177
+ /** Mutation parameters */
178
+ params: P,
179
+ /** Store */
180
+ store: Store,
181
+ /** Signal is aborted for current mutation when the same mutation was called once again. */
182
+ abortSignal: AbortSignal) => Promise<MutationResponse<R>>;
183
+ export type NormalizedMutation<T extends Typenames = Typenames, P = unknown, R = unknown> = (...args: Parameters<Mutation<P, R>>) => Promise<NormalizedMutationResponse<T, R>>;
184
+ export type MutateOptions<N extends string, T extends Typenames, QP, QR, MP, MR, MK extends keyof (MP & MR)> = Pick<MutationInfo<N, T, MK extends keyof (MP | MR) ? MP[MK] : never, MK extends keyof (MP | MR) ? MR[MK] : never, QP, QR, MP, MR>, 'onCompleted' | 'onSuccess' | 'onError'> & {
185
+ mutation: MK;
186
+ params: MK extends keyof (MP | MR) ? MP[MK] : never;
187
+ };
345
188
  export type MutationResponse<R = unknown> = {
346
- result?: R
347
- }
348
-
349
- export type NormalizedMutationResponse<T extends Typenames = Typenames, R = unknown> = EntityChanges<T> &
350
- MutationResponse<R>
351
-
189
+ result?: R;
190
+ };
191
+ export type NormalizedMutationResponse<T extends Typenames = Typenames, R = unknown> = EntityChanges<T> & MutationResponse<R>;
352
192
  export type MutationResult<R = unknown> = {
353
- error?: unknown
354
- aborted?: true
355
- result?: R
356
- }
357
-
193
+ error?: unknown;
194
+ aborted?: true;
195
+ result?: R;
196
+ };
358
197
  export type MutationState<T extends Typenames, P, R> = {
359
- /** Set when fetch is currently in progress. */
360
- loading?: Promise<NormalizedQueryResponse<T, R>>
361
- /** Result of the latest successfull response. */
362
- result?: R
363
- /** Error of the latest response. */
364
- error?: Error
365
- /** Parameters of the latest request. */
366
- params?: P
367
- }
198
+ /** Set when fetch is currently in progress. */
199
+ loading?: Promise<NormalizedQueryResponse<T, R>>;
200
+ /** Result of the latest successfull response. */
201
+ result?: R;
202
+ /** Error of the latest response. */
203
+ error?: Error;
204
+ /** Parameters of the latest request. */
205
+ params?: P;
206
+ };
@@ -1,39 +1,4 @@
1
- import {Actions} from './createActions'
2
- import {Selectors} from './createSelectors'
3
- import {Cache, Key, MutateOptions, MutationState, Store, Typenames} from './types'
4
-
5
- export declare const useMutation: <
6
- N extends string,
7
- T extends Typenames,
8
- QP,
9
- QR,
10
- MP,
11
- MR,
12
- MK extends keyof (MP & MR)
13
- >(
14
- cache: Pick<Cache<N, T, QP, QR, MP, MR>, 'options' | 'globals' | 'mutations' | 'storeHooks'>,
15
- actions: Actions<N, T, QP, QR, MP, MR>,
16
- selectors: Selectors<N, T, QP, QR, MP, MR>,
17
- options: Omit<MutateOptions<N, T, QP, QR, MP, MR, MK>, 'params'>,
18
- abortControllers: WeakMap<Store, Record<Key, AbortController>>
19
- ) => readonly [
20
- (
21
- params: MK extends keyof MP & keyof MR ? MP[MK] : never
22
- ) => Promise<
23
- import('./types').MutationResult<
24
- MK extends infer T_1
25
- ? T_1 extends MK
26
- ? T_1 extends keyof MP & keyof MR
27
- ? MR[T_1]
28
- : never
29
- : never
30
- : never
31
- >
32
- >,
33
- MutationState<
34
- T,
35
- MK extends keyof MP & keyof MR ? MP[MK] : never,
36
- MK extends keyof MP & keyof MR ? MP[MK] : never
37
- >,
38
- () => boolean
39
- ]
1
+ import { Actions } from './createActions';
2
+ import { Selectors } from './createSelectors';
3
+ import { Cache, Key, MutateOptions, MutationState, Store, Typenames } from './types';
4
+ export declare const useMutation: <N extends string, T extends Typenames, QP, QR, MP, MR, MK extends keyof (MP & MR)>(cache: Pick<Cache<N, T, QP, QR, MP, MR>, "options" | "globals" | "mutations" | "storeHooks">, actions: Actions<N, T, QP, QR, MP, MR>, selectors: Selectors<N, T, QP, QR, MP, MR>, options: Omit<MutateOptions<N, T, QP, QR, MP, MR, MK>, "params">, abortControllers: WeakMap<Store, Record<Key, AbortController>>) => readonly [(params: MK extends keyof MP & keyof MR ? MP[MK] : never) => Promise<import("./types").MutationResult<MK extends infer T_1 ? T_1 extends MK ? T_1 extends keyof MP & keyof MR ? MR[T_1] : never : never : never>>, MutationState<T, MK extends keyof MP & keyof MR ? MP[MK] : never, MK extends keyof MP & keyof MR ? MP[MK] : never>, () => boolean];
@@ -1,40 +1,4 @@
1
- import {Actions} from './createActions'
2
- import {Selectors} from './createSelectors'
3
- import {Cache, QueryOptions, QueryState, Typenames, UseQueryOptions} from './types'
4
-
5
- export declare const useQuery: <
6
- N extends string,
7
- T extends Typenames,
8
- QP,
9
- QR,
10
- MP,
11
- MR,
12
- QK extends keyof (QP & QR)
13
- >(
14
- cache: Pick<Cache<N, T, QP, QR, MP, MR>, 'options' | 'globals' | 'queries' | 'storeHooks'>,
15
- actions: Actions<N, T, QP, QR, MP, MR>,
16
- selectors: Selectors<N, T, QP, QR, MP, MR>,
17
- options: UseQueryOptions<N, T, QK, QP, QR, MP, MR>
18
- ) => readonly [
19
- Omit<
20
- QueryState<
21
- T,
22
- QK extends keyof QP & keyof QR ? QP[QK] : never,
23
- QK extends keyof QP & keyof QR ? QR[QK] : never
24
- >,
25
- 'expiresAt'
26
- >,
27
- (
28
- options?: Partial<Pick<QueryOptions<N, T, QP, QR, QK, MP, MR>, 'params' | 'onlyIfExpired'>>
29
- ) => Promise<
30
- import('./types').QueryResult<
31
- QK extends infer T_1
32
- ? T_1 extends QK
33
- ? T_1 extends keyof QP & keyof QR
34
- ? QR[T_1]
35
- : never
36
- : never
37
- : never
38
- >
39
- >
40
- ]
1
+ import { Actions } from './createActions';
2
+ import { Selectors } from './createSelectors';
3
+ import { Cache, QueryOptions, QueryState, Typenames, UseQueryOptions } from './types';
4
+ export declare const useQuery: <N extends string, T extends Typenames, QP, QR, MP, MR, QK extends keyof (QP & QR)>(cache: Pick<Cache<N, T, QP, QR, MP, MR>, "options" | "globals" | "queries" | "storeHooks">, actions: Actions<N, T, QP, QR, MP, MR>, selectors: Selectors<N, T, QP, QR, MP, MR>, options: UseQueryOptions<N, T, QK, QP, QR, MP, MR>) => readonly [Omit<QueryState<T, QK extends keyof QP & keyof QR ? QP[QK] : never, QK extends keyof QP & keyof QR ? QR[QK] : never>, "expiresAt">, (options?: Partial<Pick<QueryOptions<N, T, QP, QR, QK, MP, MR>, "params" | "onlyIfExpired">>) => Promise<import("./types").QueryResult<QK extends infer T_1 ? T_1 extends QK ? T_1 extends keyof QP & keyof QR ? QR[T_1] : never : never : never>>];