react-redux-cache 0.11.0 → 0.12.0-rc.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 CHANGED
@@ -207,7 +207,7 @@ Perfect implementation is when the backend already returns normalized data.
207
207
 
208
208
  // Example of query with normalization (recommended)
209
209
 
210
- export const getUser = async (id) => {
210
+ export const getUser = (async (id) => {
211
211
  // Result can be get by any way - fetch, axios etc, even with database connection.
212
212
  // There is no limitation here.
213
213
  const response = await ...
@@ -215,24 +215,24 @@ export const getUser = async (id) => {
215
215
  // In this example normalizr package is used, but it is not necessary.
216
216
  return normalize(response, getUserSchema)
217
217
  // satisfies keyword is used here for proper typing of params and returned value.
218
- } satisfies Query<number, CacheTypenames>
218
+ }) satisfies NormalizedQuery<CacheTypenames, number>
219
219
 
220
220
  // Example of query without normalization (not recommended), with selecting access token from the store
221
221
 
222
- export const getBank = (id, {getState}) => {
222
+ export const getBank = (async (id, {getState}) => {
223
223
  const token = tokenSelector(getState())
224
224
  const result: Bank = ...
225
225
  return {result} // result is bank object, no entities passed
226
- } satisfies Query<string>
226
+ }) satisfies Query<string>
227
227
 
228
228
  // Example of mutation with normalization
229
229
 
230
- export const removeUser = async (id, _, abortSignal) => {
230
+ export const removeUser = (async (id, _, abortSignal) => {
231
231
  await ...
232
232
  return {
233
233
  remove: { users: [id] },
234
234
  }
235
- } satisfies Query<number, CacheTypenames>
235
+ }) satisfies NormalizedQuery<CacheTypenames, number>
236
236
  ```
237
237
 
238
238
  ### Usage
@@ -3,7 +3,7 @@ export type ActionMap<N extends string, T extends Typenames, QP, QR, MP, MR> = R
3
3
  export declare const createActions: <N extends string, T extends Typenames, QP, QR, MP, MR>(name: N) => {
4
4
  /** Updates query state, and optionally merges entity changes in a single action. */
5
5
  updateQueryStateAndEntities: {
6
- <K extends keyof QP & keyof QR>(queryKey: K, queryCacheKey: Key, state?: Partial<QueryState<QP[K], QR[K]>> | undefined, entityChanges?: EntityChanges<T> | undefined): {
6
+ <K extends keyof (QP | QR)>(queryKey: K, queryCacheKey: Key, state?: Partial<QueryState<QP[K], QR[K]>>, entityChanges?: EntityChanges<T>): {
7
7
  type: `@rrc/${N}/updateQueryStateAndEntities`;
8
8
  queryKey: K;
9
9
  queryCacheKey: Key;
@@ -14,10 +14,10 @@ export declare const createActions: <N extends string, T extends Typenames, QP,
14
14
  };
15
15
  /** Updates mutation state, and optionally merges entity changes in a single action. */
16
16
  updateMutationStateAndEntities: {
17
- <K_1 extends keyof MP & keyof MR>(mutationKey: K_1, state?: Partial<MutationState<MP[K_1], MR[K_1]>> | undefined, entityChanges?: EntityChanges<T> | undefined): {
17
+ <K extends keyof (MP | MR)>(mutationKey: K, state?: Partial<MutationState<MP[K], MR[K]>>, entityChanges?: EntityChanges<T>): {
18
18
  type: `@rrc/${N}/updateMutationStateAndEntities`;
19
- mutationKey: K_1;
20
- state: Partial<MutationState<MP[K_1], MR[K_1]>> | undefined;
19
+ mutationKey: K;
20
+ state: Partial<MutationState<MP[K], MR[K]>> | undefined;
21
21
  entityChanges: EntityChanges<T> | undefined;
22
22
  };
23
23
  type: `@rrc/${N}/updateMutationStateAndEntities`;
@@ -32,22 +32,22 @@ export declare const createActions: <N extends string, T extends Typenames, QP,
32
32
  };
33
33
  /** Invalidates query states. */
34
34
  invalidateQuery: {
35
- <K_2 extends keyof QP & keyof QR>(queries: {
35
+ <K extends keyof (QP | QR)>(queries: {
36
36
  /** Query key */
37
- query: K_2;
37
+ query: K;
38
38
  /** Query cache key */
39
- cacheKey?: Key | undefined;
39
+ cacheKey?: Key;
40
40
  /** Unix timestamp at which query expires. Is set to the query state. @default Date.now() */
41
- expiresAt?: number | undefined;
41
+ expiresAt?: number;
42
42
  }[]): {
43
43
  type: `@rrc/${N}/invalidateQuery`;
44
44
  queries: {
45
45
  /** Query key */
46
- query: K_2;
46
+ query: K;
47
47
  /** Query cache key */
48
- cacheKey?: Key | undefined;
48
+ cacheKey?: Key;
49
49
  /** Unix timestamp at which query expires. Is set to the query state. @default Date.now() */
50
- expiresAt?: number | undefined;
50
+ expiresAt?: number;
51
51
  }[];
52
52
  };
53
53
  type: `@rrc/${N}/invalidateQuery`;
@@ -55,27 +55,27 @@ export declare const createActions: <N extends string, T extends Typenames, QP,
55
55
  /** Clear states for provided query keys and cache keys.
56
56
  * If cache key for query key is not provided, the whole state for query key is cleared. */
57
57
  clearQueryState: {
58
- <K_3 extends keyof QP & keyof QR>(queries: {
58
+ <K extends keyof (QP | QR)>(queries: {
59
59
  /** Query key */
60
- query: K_3;
60
+ query: K;
61
61
  /** Query cache key */
62
- cacheKey?: Key | undefined;
62
+ cacheKey?: Key;
63
63
  }[]): {
64
64
  type: `@rrc/${N}/clearQueryState`;
65
65
  queries: {
66
66
  /** Query key */
67
- query: K_3;
67
+ query: K;
68
68
  /** Query cache key */
69
- cacheKey?: Key | undefined;
69
+ cacheKey?: Key;
70
70
  }[];
71
71
  };
72
72
  type: `@rrc/${N}/clearQueryState`;
73
73
  };
74
74
  /** Clear states for provided mutation keys. */
75
75
  clearMutationState: {
76
- <K_4 extends keyof MP & keyof MR>(mutationKeys: K_4[]): {
76
+ <K extends keyof (MP | MR)>(mutationKeys: K[]): {
77
77
  type: `@rrc/${N}/clearMutationState`;
78
- mutationKeys: K_4[];
78
+ mutationKeys: K[];
79
79
  };
80
80
  type: `@rrc/${N}/clearMutationState`;
81
81
  };
@@ -11,14 +11,14 @@ import { applyEntityChanges } from './utilsAndConstants';
11
11
  * })
12
12
  */
13
13
  export declare const withTypenames: <T extends Typenames = Typenames>() => {
14
- createCache: <N extends string, QP, QR, MP, MR>(partialCache: OptionalPartial<Cache<N, T, QP, QR, MP, MR>, "queries" | "options" | "mutations" | "cacheStateSelector" | "globals">) => {
14
+ createCache: <N extends string, QP, QR, MP, MR>(partialCache: OptionalPartial<Cache<N, T, QP, QR, MP, MR>, "options" | "queries" | "mutations" | "cacheStateSelector" | "globals">) => {
15
15
  /** Keeps all options, passed while creating the cache. */
16
16
  cache: Cache<N, T, QP, QR, MP, MR>;
17
17
  /** Reducer of the cache, should be added to redux store. */
18
18
  reducer: (state: {
19
19
  entities: import("./types").EntitiesMap<T>;
20
- queries: QP | QR extends infer T_1 ? { [QK in keyof T_1]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; } : never;
21
- mutations: MP | MR extends infer T_2 ? { [MK in keyof T_2]: MutationState<MP[MK], MR[MK]>; } : never;
20
+ queries: { [QK in keyof (QP | QR)]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; };
21
+ mutations: { [MK in keyof (MP | MR)]: MutationState<MP[MK], MR[MK]>; };
22
22
  } | undefined, action: {
23
23
  type: `@rrc/${N}/updateQueryStateAndEntities`;
24
24
  queryKey: keyof QP & keyof QR;
@@ -37,22 +37,22 @@ export declare const withTypenames: <T extends Typenames = Typenames>() => {
37
37
  type: `@rrc/${N}/invalidateQuery`;
38
38
  queries: {
39
39
  query: keyof QP & keyof QR;
40
- cacheKey?: Key | undefined;
41
- expiresAt?: number | undefined;
40
+ cacheKey?: Key;
41
+ expiresAt?: number;
42
42
  }[];
43
43
  } | {
44
44
  type: `@rrc/${N}/clearQueryState`;
45
45
  queries: {
46
46
  query: keyof QP & keyof QR;
47
- cacheKey?: Key | undefined;
47
+ cacheKey?: Key;
48
48
  }[];
49
49
  } | {
50
50
  type: `@rrc/${N}/clearMutationState`;
51
51
  mutationKeys: (keyof MP & keyof MR)[];
52
52
  }) => {
53
53
  entities: import("./types").EntitiesMap<T>;
54
- queries: QP | QR extends infer T_3 ? { [QK in keyof T_3]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; } : never;
55
- mutations: MP | MR extends infer T_4 ? { [MK in keyof T_4]: MutationState<MP[MK], MR[MK]>; } : never;
54
+ queries: { [QK in keyof (QP | QR)]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; };
55
+ mutations: { [MK in keyof (MP | MR)]: MutationState<MP[MK], MR[MK]>; };
56
56
  };
57
57
  actions: {
58
58
  updateQueryStateAndEntities: {
@@ -66,10 +66,10 @@ export declare const withTypenames: <T extends Typenames = Typenames>() => {
66
66
  type: `@rrc/${N}/updateQueryStateAndEntities`;
67
67
  };
68
68
  updateMutationStateAndEntities: {
69
- <K_1 extends keyof MP & keyof MR>(mutationKey: K_1, state?: Partial<MutationState<MP[K_1], MR[K_1]>> | undefined, entityChanges?: import("./types").EntityChanges<T> | undefined): {
69
+ <K extends keyof MP & keyof MR>(mutationKey: K, state?: Partial<MutationState<MP[K], MR[K]>> | undefined, entityChanges?: import("./types").EntityChanges<T> | undefined): {
70
70
  type: `@rrc/${N}/updateMutationStateAndEntities`;
71
- mutationKey: K_1;
72
- state: Partial<MutationState<MP[K_1], MR[K_1]>> | undefined;
71
+ mutationKey: K;
72
+ state: Partial<MutationState<MP[K], MR[K]>> | undefined;
73
73
  entityChanges: import("./types").EntityChanges<T> | undefined;
74
74
  };
75
75
  type: `@rrc/${N}/updateMutationStateAndEntities`;
@@ -82,90 +82,90 @@ export declare const withTypenames: <T extends Typenames = Typenames>() => {
82
82
  type: `@rrc/${N}/mergeEntityChanges`;
83
83
  };
84
84
  invalidateQuery: {
85
- <K_2 extends keyof QP & keyof QR>(queries: {
86
- query: K_2;
87
- cacheKey?: Key | undefined;
88
- expiresAt?: number | undefined;
85
+ <K extends keyof QP & keyof QR>(queries: {
86
+ query: K;
87
+ cacheKey?: Key;
88
+ expiresAt?: number;
89
89
  }[]): {
90
90
  type: `@rrc/${N}/invalidateQuery`;
91
91
  queries: {
92
- query: K_2;
93
- cacheKey?: Key | undefined;
94
- expiresAt?: number | undefined;
92
+ query: K;
93
+ cacheKey?: Key;
94
+ expiresAt?: number;
95
95
  }[];
96
96
  };
97
97
  type: `@rrc/${N}/invalidateQuery`;
98
98
  };
99
99
  clearQueryState: {
100
- <K_3 extends keyof QP & keyof QR>(queries: {
101
- query: K_3;
102
- cacheKey?: Key | undefined;
100
+ <K extends keyof QP & keyof QR>(queries: {
101
+ query: K;
102
+ cacheKey?: Key;
103
103
  }[]): {
104
104
  type: `@rrc/${N}/clearQueryState`;
105
105
  queries: {
106
- query: K_3;
107
- cacheKey?: Key | undefined;
106
+ query: K;
107
+ cacheKey?: Key;
108
108
  }[];
109
109
  };
110
110
  type: `@rrc/${N}/clearQueryState`;
111
111
  };
112
112
  clearMutationState: {
113
- <K_4 extends keyof MP & keyof MR>(mutationKeys: K_4[]): {
113
+ <K extends keyof MP & keyof MR>(mutationKeys: K[]): {
114
114
  type: `@rrc/${N}/clearMutationState`;
115
- mutationKeys: K_4[];
115
+ mutationKeys: K[];
116
116
  };
117
117
  type: `@rrc/${N}/clearMutationState`;
118
118
  };
119
119
  };
120
120
  selectors: {
121
121
  /** Selects query state. */
122
- selectQueryState: <QK_1 extends keyof QP | keyof QR>(state: unknown, query: QK_1, cacheKey: Key) => QueryState<QK_1 extends keyof QP & keyof QR ? QP[QK_1] : never, QK_1 extends keyof QP & keyof QR ? QR[QK_1] : never>;
122
+ selectQueryState: <QK extends keyof (QP & QR)>(state: unknown, query: QK, cacheKey: Key) => QueryState<QK extends keyof (QP | QR) ? QP[QK] : never, QK extends keyof (QP | QR) ? QR[QK] : never>;
123
123
  /** Selects query latest result. */
124
- selectQueryResult: <QK_2 extends keyof QP | keyof QR>(state: unknown, query: QK_2, cacheKey: Key) => (QK_2 extends keyof QP & keyof QR ? QR[QK_2] : never) | undefined;
124
+ selectQueryResult: <QK extends keyof (QP & QR)>(state: unknown, query: QK, cacheKey: Key) => (QK extends keyof QP & keyof QR ? QR[QK] : never) | undefined;
125
125
  /** Selects query loading state. */
126
- selectQueryLoading: <QK_3 extends keyof QP | keyof QR>(state: unknown, query: QK_3, cacheKey: Key) => boolean;
126
+ selectQueryLoading: <QK extends keyof (QP & QR)>(state: unknown, query: QK, cacheKey: Key) => boolean;
127
127
  /** Selects query latest error. */
128
- selectQueryError: <QK_4 extends keyof QP | keyof QR>(state: unknown, query: QK_4, cacheKey: Key) => Error | undefined;
128
+ selectQueryError: <QK extends keyof (QP & QR)>(state: unknown, query: QK, cacheKey: Key) => Error | undefined;
129
129
  /** Selects query latest params. */
130
- selectQueryParams: <QK_5 extends keyof QP | keyof QR>(state: unknown, query: QK_5, cacheKey: Key) => (QK_5 extends keyof QP & keyof QR ? QP[QK_5] : never) | undefined;
130
+ selectQueryParams: <QK extends keyof (QP & QR)>(state: unknown, query: QK, cacheKey: Key) => (QK extends keyof QP & keyof QR ? QP[QK] : never) | undefined;
131
131
  /** Selects query latest expiresAt. */
132
- selectQueryExpiresAt: <QK_6 extends keyof QP | keyof QR>(state: unknown, query: QK_6, cacheKey: Key) => number | undefined;
132
+ selectQueryExpiresAt: <QK extends keyof (QP & QR)>(state: unknown, query: QK, cacheKey: Key) => number | undefined;
133
133
  /** Selects mutation state. */
134
- selectMutationState: <MK_1 extends keyof MP | keyof MR>(state: unknown, mutation: MK_1) => MutationState<MK_1 extends keyof MP & keyof MR ? MP[MK_1] : never, MK_1 extends keyof MP & keyof MR ? MR[MK_1] : never>;
134
+ selectMutationState: <MK extends keyof (MP & MR)>(state: unknown, mutation: MK) => MutationState<MK extends keyof (MP | MR) ? MP[MK] : never, MK extends keyof (MP | MR) ? MR[MK] : never>;
135
135
  /** Selects mutation latest result. */
136
- selectMutationResult: <MK_2 extends keyof MP | keyof MR>(state: unknown, mutation: MK_2) => (MK_2 extends keyof MP & keyof MR ? MR[MK_2] : never) | undefined;
136
+ selectMutationResult: <MK extends keyof (MP & MR)>(state: unknown, mutation: MK) => (MK extends keyof MP & keyof MR ? MR[MK] : never) | undefined;
137
137
  /** Selects mutation loading state. */
138
- selectMutationLoading: <MK_3 extends keyof MP | keyof MR>(state: unknown, mutation: MK_3) => boolean;
138
+ selectMutationLoading: <MK extends keyof (MP & MR)>(state: unknown, mutation: MK) => boolean;
139
139
  /** Selects mutation latest error. */
140
- selectMutationError: <MK_4 extends keyof MP | keyof MR>(state: unknown, mutation: MK_4) => Error | undefined;
140
+ selectMutationError: <MK extends keyof (MP & MR)>(state: unknown, mutation: MK) => Error | undefined;
141
141
  /** Selects mutation latest params. */
142
- selectMutationParams: <MK_5 extends keyof MP | keyof MR>(state: unknown, mutation: MK_5) => (MK_5 extends keyof MP & keyof MR ? MP[MK_5] : never) | undefined;
142
+ selectMutationParams: <MK extends keyof (MP & MR)>(state: unknown, mutation: MK) => (MK extends keyof MP & keyof MR ? MP[MK] : never) | undefined;
143
143
  /** Selects entity by id and typename. */
144
144
  selectEntityById: <TN extends keyof T>(state: unknown, id: Key | null | undefined, typename: TN) => T[TN] | undefined;
145
145
  /** Selects all entities. */
146
146
  selectEntities: (state: unknown) => import("./types").EntitiesMap<T>;
147
147
  /** Selects all entities of provided typename. */
148
- selectEntitiesByTypename: <TN_1 extends keyof T>(state: unknown, typename: TN_1) => import("./types").EntitiesMap<T>[TN_1];
148
+ selectEntitiesByTypename: <TN extends keyof T>(state: unknown, typename: TN) => import("./types").EntitiesMap<T>[TN];
149
149
  };
150
150
  hooks: {
151
151
  /** Returns client object with query and mutate functions. */
152
152
  useClient: () => {
153
- query: <QK_7 extends keyof QP | keyof QR>(options: QueryOptions<T, QP, QR, QK_7>) => Promise<QueryResult<QK_7 extends keyof QP & keyof QR ? QR[QK_7] : never>>;
154
- mutate: <MK_6 extends keyof MP | keyof MR>(options: MutateOptions<T, MP, MR, MK_6>) => Promise<MutationResult<MK_6 extends keyof MP & keyof MR ? MR[MK_6] : never>>;
153
+ query: <QK extends keyof (QP & QR)>(options: QueryOptions<T, QP, QR, QK>) => Promise<QueryResult<QK extends keyof QP & keyof QR ? QR[QK] : never>>;
154
+ mutate: <MK extends keyof (MP & MR)>(options: MutateOptions<T, MP, MR, MK>) => Promise<MutationResult<MK extends keyof MP & keyof MR ? MR[MK] : never>>;
155
155
  };
156
156
  /** Fetches query when params change and subscribes to query state changes (except `expiresAt` field). */
157
- useQuery: <QK_8 extends keyof QP | keyof QR>(options: import("./types").UseQueryOptions<T, QP, QR, QK_8>) => readonly [Omit<QueryState<QK_8 extends keyof QP & keyof QR ? QP[QK_8] : never, QK_8 extends keyof QP & keyof QR ? QR[QK_8] : never>, "expiresAt">, (options?: Partial<Pick<QueryOptions<T, QP, QR, QK_8>, "params" | "onlyIfExpired">> | undefined) => Promise<QueryResult<QK_8 extends infer T_5 ? T_5 extends QK_8 ? T_5 extends keyof QP & keyof QR ? QR[T_5] : never : never : never>>];
157
+ useQuery: <QK extends keyof (QP & QR)>(options: Parameters<typeof useQuery<N, T, QP, QR, MP, MR, QK>>[2]) => readonly [Omit<QueryState<QK extends keyof QP & keyof QR ? QP[QK] : never, QK extends keyof QP & keyof QR ? QR[QK] : never>, "expiresAt">, (options?: Partial<Pick<QueryOptions<T, QP, QR, QK>, "params" | "onlyIfExpired">> | undefined) => Promise<QueryResult<QK extends infer T_1 ? T_1 extends QK ? T_1 extends keyof QP & keyof QR ? QR[T_1] : never : never : never>>];
158
158
  /** Subscribes to provided mutation state and provides mutate function. */
159
- useMutation: <MK_7 extends keyof MP | keyof MR>(options: Omit<MutateOptions<T, MP, MR, MK_7>, "params">) => readonly [(params: MK_7 extends keyof MP & keyof MR ? MP[MK_7] : never) => Promise<MutationResult<MK_7 extends infer T_6 ? T_6 extends MK_7 ? T_6 extends keyof MP & keyof MR ? MR[T_6] : never : never : never>>, MutationState<MK_7 extends keyof MP & keyof MR ? MP[MK_7] : never, MK_7 extends keyof MP & keyof MR ? MP[MK_7] : never>, () => boolean];
159
+ useMutation: <MK extends keyof (MP & MR)>(options: Parameters<typeof useMutation<N, T, MP, MR, MK>>[2]) => readonly [(params: MK extends keyof MP & keyof MR ? MP[MK] : never) => Promise<MutationResult<MK extends infer T_1 ? T_1 extends MK ? T_1 extends keyof MP & keyof MR ? MR[T_1] : never : never : never>>, MutationState<MK extends keyof MP & keyof MR ? MP[MK] : never, MK extends keyof MP & keyof MR ? MP[MK] : never>, () => boolean];
160
160
  /** useSelector + selectEntityById. */
161
- useSelectEntityById: <TN_2 extends keyof T>(id: Key | null | undefined, typename: TN_2) => T[TN_2] | undefined;
161
+ useSelectEntityById: <TN extends keyof T>(id: Key | null | undefined, typename: TN) => T[TN] | undefined;
162
162
  };
163
163
  utils: {
164
164
  /**
165
165
  * Apply changes to the entities map.
166
166
  * @return `undefined` if nothing to change, otherwise new entities map with applied changes.
167
167
  */
168
- applyEntityChanges: (entities: import("./types").EntitiesMap<T>, changes: import("./types").EntityChanges<T>) => import("./types").EntitiesMap<T> | undefined;
168
+ applyEntityChanges: (entities: Parameters<typeof applyEntityChanges<T>>[0], changes: Parameters<typeof applyEntityChanges<T>>[1]) => import("./types").EntitiesMap<T> | undefined;
169
169
  };
170
170
  };
171
171
  };
@@ -178,8 +178,8 @@ export declare const createCache: <N extends string, QP, QR, MP, MR>(partialCach
178
178
  /** Reducer of the cache, should be added to redux store. */
179
179
  reducer: (state: {
180
180
  entities: import("./types").EntitiesMap<Typenames>;
181
- queries: QP | QR extends infer T ? { [QK in keyof T]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; } : never;
182
- mutations: MP | MR extends infer T_1 ? { [MK in keyof T_1]: MutationState<MP[MK], MR[MK]>; } : never;
181
+ queries: { [QK in keyof (QP | QR)]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; };
182
+ mutations: { [MK in keyof (MP | MR)]: MutationState<MP[MK], MR[MK]>; };
183
183
  } | undefined, action: {
184
184
  type: `@rrc/${N}/updateQueryStateAndEntities`;
185
185
  queryKey: keyof QP & keyof QR;
@@ -198,22 +198,22 @@ export declare const createCache: <N extends string, QP, QR, MP, MR>(partialCach
198
198
  type: `@rrc/${N}/invalidateQuery`;
199
199
  queries: {
200
200
  query: keyof QP & keyof QR;
201
- cacheKey?: Key | undefined;
202
- expiresAt?: number | undefined;
201
+ cacheKey?: Key;
202
+ expiresAt?: number;
203
203
  }[];
204
204
  } | {
205
205
  type: `@rrc/${N}/clearQueryState`;
206
206
  queries: {
207
207
  query: keyof QP & keyof QR;
208
- cacheKey?: Key | undefined;
208
+ cacheKey?: Key;
209
209
  }[];
210
210
  } | {
211
211
  type: `@rrc/${N}/clearMutationState`;
212
212
  mutationKeys: (keyof MP & keyof MR)[];
213
213
  }) => {
214
214
  entities: import("./types").EntitiesMap<Typenames>;
215
- queries: QP | QR extends infer T_2 ? { [QK in keyof T_2]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; } : never;
216
- mutations: MP | MR extends infer T_3 ? { [MK in keyof T_3]: MutationState<MP[MK], MR[MK]>; } : never;
215
+ queries: { [QK in keyof (QP | QR)]: import("./types").Dict<QueryState<QP[QK], QR[QK]> | undefined>; };
216
+ mutations: { [MK in keyof (MP | MR)]: MutationState<MP[MK], MR[MK]>; };
217
217
  };
218
218
  actions: {
219
219
  updateQueryStateAndEntities: {
@@ -227,10 +227,10 @@ export declare const createCache: <N extends string, QP, QR, MP, MR>(partialCach
227
227
  type: `@rrc/${N}/updateQueryStateAndEntities`;
228
228
  };
229
229
  updateMutationStateAndEntities: {
230
- <K_1 extends keyof MP & keyof MR>(mutationKey: K_1, state?: Partial<MutationState<MP[K_1], MR[K_1]>> | undefined, entityChanges?: import("./types").EntityChanges<Typenames> | undefined): {
230
+ <K extends keyof MP & keyof MR>(mutationKey: K, state?: Partial<MutationState<MP[K], MR[K]>> | undefined, entityChanges?: import("./types").EntityChanges<Typenames> | undefined): {
231
231
  type: `@rrc/${N}/updateMutationStateAndEntities`;
232
- mutationKey: K_1;
233
- state: Partial<MutationState<MP[K_1], MR[K_1]>> | undefined;
232
+ mutationKey: K;
233
+ state: Partial<MutationState<MP[K], MR[K]>> | undefined;
234
234
  entityChanges: import("./types").EntityChanges<Typenames> | undefined;
235
235
  };
236
236
  type: `@rrc/${N}/updateMutationStateAndEntities`;
@@ -243,83 +243,83 @@ export declare const createCache: <N extends string, QP, QR, MP, MR>(partialCach
243
243
  type: `@rrc/${N}/mergeEntityChanges`;
244
244
  };
245
245
  invalidateQuery: {
246
- <K_2 extends keyof QP & keyof QR>(queries: {
247
- query: K_2;
248
- cacheKey?: Key | undefined;
249
- expiresAt?: number | undefined;
246
+ <K extends keyof QP & keyof QR>(queries: {
247
+ query: K;
248
+ cacheKey?: Key;
249
+ expiresAt?: number;
250
250
  }[]): {
251
251
  type: `@rrc/${N}/invalidateQuery`;
252
252
  queries: {
253
- query: K_2;
254
- cacheKey?: Key | undefined;
255
- expiresAt?: number | undefined;
253
+ query: K;
254
+ cacheKey?: Key;
255
+ expiresAt?: number;
256
256
  }[];
257
257
  };
258
258
  type: `@rrc/${N}/invalidateQuery`;
259
259
  };
260
260
  clearQueryState: {
261
- <K_3 extends keyof QP & keyof QR>(queries: {
262
- query: K_3;
263
- cacheKey?: Key | undefined;
261
+ <K extends keyof QP & keyof QR>(queries: {
262
+ query: K;
263
+ cacheKey?: Key;
264
264
  }[]): {
265
265
  type: `@rrc/${N}/clearQueryState`;
266
266
  queries: {
267
- query: K_3;
268
- cacheKey?: Key | undefined;
267
+ query: K;
268
+ cacheKey?: Key;
269
269
  }[];
270
270
  };
271
271
  type: `@rrc/${N}/clearQueryState`;
272
272
  };
273
273
  clearMutationState: {
274
- <K_4 extends keyof MP & keyof MR>(mutationKeys: K_4[]): {
274
+ <K extends keyof MP & keyof MR>(mutationKeys: K[]): {
275
275
  type: `@rrc/${N}/clearMutationState`;
276
- mutationKeys: K_4[];
276
+ mutationKeys: K[];
277
277
  };
278
278
  type: `@rrc/${N}/clearMutationState`;
279
279
  };
280
280
  };
281
281
  selectors: {
282
282
  /** Selects query state. */
283
- selectQueryState: <QK_1 extends keyof QP | keyof QR>(state: unknown, query: QK_1, cacheKey: Key) => QueryState<QK_1 extends keyof QP & keyof QR ? QP[QK_1] : never, QK_1 extends keyof QP & keyof QR ? QR[QK_1] : never>;
283
+ selectQueryState: <QK extends keyof QP | keyof QR>(state: unknown, query: QK, cacheKey: Key) => QueryState<QK extends keyof QP & keyof QR ? QP[QK] : never, QK extends keyof QP & keyof QR ? QR[QK] : never>;
284
284
  /** Selects query latest result. */
285
- selectQueryResult: <QK_2 extends keyof QP | keyof QR>(state: unknown, query: QK_2, cacheKey: Key) => (QK_2 extends keyof QP & keyof QR ? QR[QK_2] : never) | undefined;
285
+ selectQueryResult: <QK extends keyof QP | keyof QR>(state: unknown, query: QK, cacheKey: Key) => (QK extends keyof QP & keyof QR ? QR[QK] : never) | undefined;
286
286
  /** Selects query loading state. */
287
- selectQueryLoading: <QK_3 extends keyof QP | keyof QR>(state: unknown, query: QK_3, cacheKey: Key) => boolean;
287
+ selectQueryLoading: <QK extends keyof QP | keyof QR>(state: unknown, query: QK, cacheKey: Key) => boolean;
288
288
  /** Selects query latest error. */
289
- selectQueryError: <QK_4 extends keyof QP | keyof QR>(state: unknown, query: QK_4, cacheKey: Key) => Error | undefined;
289
+ selectQueryError: <QK extends keyof QP | keyof QR>(state: unknown, query: QK, cacheKey: Key) => Error | undefined;
290
290
  /** Selects query latest params. */
291
- selectQueryParams: <QK_5 extends keyof QP | keyof QR>(state: unknown, query: QK_5, cacheKey: Key) => (QK_5 extends keyof QP & keyof QR ? QP[QK_5] : never) | undefined;
291
+ selectQueryParams: <QK extends keyof QP | keyof QR>(state: unknown, query: QK, cacheKey: Key) => (QK extends keyof QP & keyof QR ? QP[QK] : never) | undefined;
292
292
  /** Selects query latest expiresAt. */
293
- selectQueryExpiresAt: <QK_6 extends keyof QP | keyof QR>(state: unknown, query: QK_6, cacheKey: Key) => number | undefined;
293
+ selectQueryExpiresAt: <QK extends keyof QP | keyof QR>(state: unknown, query: QK, cacheKey: Key) => number | undefined;
294
294
  /** Selects mutation state. */
295
- selectMutationState: <MK_1 extends keyof MP | keyof MR>(state: unknown, mutation: MK_1) => MutationState<MK_1 extends keyof MP & keyof MR ? MP[MK_1] : never, MK_1 extends keyof MP & keyof MR ? MR[MK_1] : never>;
295
+ selectMutationState: <MK extends keyof MP | keyof MR>(state: unknown, mutation: MK) => MutationState<MK extends keyof MP & keyof MR ? MP[MK] : never, MK extends keyof MP & keyof MR ? MR[MK] : never>;
296
296
  /** Selects mutation latest result. */
297
- selectMutationResult: <MK_2 extends keyof MP | keyof MR>(state: unknown, mutation: MK_2) => (MK_2 extends keyof MP & keyof MR ? MR[MK_2] : never) | undefined;
297
+ selectMutationResult: <MK extends keyof MP | keyof MR>(state: unknown, mutation: MK) => (MK extends keyof MP & keyof MR ? MR[MK] : never) | undefined;
298
298
  /** Selects mutation loading state. */
299
- selectMutationLoading: <MK_3 extends keyof MP | keyof MR>(state: unknown, mutation: MK_3) => boolean;
299
+ selectMutationLoading: <MK extends keyof MP | keyof MR>(state: unknown, mutation: MK) => boolean;
300
300
  /** Selects mutation latest error. */
301
- selectMutationError: <MK_4 extends keyof MP | keyof MR>(state: unknown, mutation: MK_4) => Error | undefined;
301
+ selectMutationError: <MK extends keyof MP | keyof MR>(state: unknown, mutation: MK) => Error | undefined;
302
302
  /** Selects mutation latest params. */
303
- selectMutationParams: <MK_5 extends keyof MP | keyof MR>(state: unknown, mutation: MK_5) => (MK_5 extends keyof MP & keyof MR ? MP[MK_5] : never) | undefined;
303
+ selectMutationParams: <MK extends keyof MP | keyof MR>(state: unknown, mutation: MK) => (MK extends keyof MP & keyof MR ? MP[MK] : never) | undefined;
304
304
  /** Selects entity by id and typename. */
305
305
  selectEntityById: <TN extends string>(state: unknown, id: Key | null | undefined, typename: TN) => object | undefined;
306
306
  /** Selects all entities. */
307
307
  selectEntities: (state: unknown) => import("./types").EntitiesMap<Typenames>;
308
308
  /** Selects all entities of provided typename. */
309
- selectEntitiesByTypename: <TN_1 extends string>(state: unknown, typename: TN_1) => import("./types").Dict<object> | undefined;
309
+ selectEntitiesByTypename: <TN extends string>(state: unknown, typename: TN) => import("./types").Dict<object> | undefined;
310
310
  };
311
311
  hooks: {
312
312
  /** Returns client object with query and mutate functions. */
313
313
  useClient: () => {
314
- query: <QK_7 extends keyof QP | keyof QR>(options: QueryOptions<Typenames, QP, QR, QK_7>) => Promise<QueryResult<QK_7 extends keyof QP & keyof QR ? QR[QK_7] : never>>;
315
- mutate: <MK_6 extends keyof MP | keyof MR>(options: MutateOptions<Typenames, MP, MR, MK_6>) => Promise<MutationResult<MK_6 extends keyof MP & keyof MR ? MR[MK_6] : never>>;
314
+ query: <QK extends keyof QP | keyof QR>(options: QueryOptions<Typenames, QP, QR, QK>) => Promise<QueryResult<QK extends keyof QP & keyof QR ? QR[QK] : never>>;
315
+ mutate: <MK extends keyof MP | keyof MR>(options: MutateOptions<Typenames, MP, MR, MK>) => Promise<MutationResult<MK extends keyof MP & keyof MR ? MR[MK] : never>>;
316
316
  };
317
317
  /** Fetches query when params change and subscribes to query state changes (except `expiresAt` field). */
318
- useQuery: <QK_8 extends keyof QP | keyof QR>(options: import("./types").UseQueryOptions<Typenames, QP, QR, QK_8>) => readonly [Omit<QueryState<QK_8 extends keyof QP & keyof QR ? QP[QK_8] : never, QK_8 extends keyof QP & keyof QR ? QR[QK_8] : never>, "expiresAt">, (options?: Partial<Pick<QueryOptions<Typenames, QP, QR, QK_8>, "params" | "onlyIfExpired">> | undefined) => Promise<QueryResult<QK_8 extends infer T_4 ? T_4 extends QK_8 ? T_4 extends keyof QP & keyof QR ? QR[T_4] : never : never : never>>];
318
+ useQuery: <QK extends keyof QP | keyof QR>(options: import("./types").UseQueryOptions<Typenames, QP, QR, QK>) => readonly [Omit<QueryState<QK extends keyof QP & keyof QR ? QP[QK] : never, QK extends keyof QP & keyof QR ? QR[QK] : never>, "expiresAt">, (options?: Partial<Pick<QueryOptions<Typenames, QP, QR, QK>, "params" | "onlyIfExpired">> | undefined) => Promise<QueryResult<QK extends infer T ? T extends QK ? T extends keyof QP & keyof QR ? QR[T] : never : never : never>>];
319
319
  /** Subscribes to provided mutation state and provides mutate function. */
320
- useMutation: <MK_7 extends keyof MP | keyof MR>(options: Omit<MutateOptions<Typenames, MP, MR, MK_7>, "params">) => readonly [(params: MK_7 extends keyof MP & keyof MR ? MP[MK_7] : never) => Promise<MutationResult<MK_7 extends infer T_5 ? T_5 extends MK_7 ? T_5 extends keyof MP & keyof MR ? MR[T_5] : never : never : never>>, MutationState<MK_7 extends keyof MP & keyof MR ? MP[MK_7] : never, MK_7 extends keyof MP & keyof MR ? MP[MK_7] : never>, () => boolean];
320
+ useMutation: <MK extends keyof MP | keyof MR>(options: Omit<MutateOptions<Typenames, MP, MR, MK>, "params">) => readonly [(params: MK extends keyof MP & keyof MR ? MP[MK] : never) => Promise<MutationResult<MK extends infer T ? T extends MK ? T extends keyof MP & keyof MR ? MR[T] : never : never : never>>, MutationState<MK extends keyof MP & keyof MR ? MP[MK] : never, MK extends keyof MP & keyof MR ? MP[MK] : never>, () => boolean];
321
321
  /** useSelector + selectEntityById. */
322
- useSelectEntityById: <TN_2 extends string>(id: Key | null | undefined, typename: TN_2) => object | undefined;
322
+ useSelectEntityById: <TN extends string>(id: Key | null | undefined, typename: TN) => object | undefined;
323
323
  };
324
324
  utils: {
325
325
  /**
@@ -1,42 +1,12 @@
1
1
  import type { ActionMap } from './createActions';
2
2
  import type { CacheOptions, Dict, EntitiesMap, MutationState, QueryState, Typenames } from './types';
3
3
  export type ReduxCacheState<T extends Typenames, QP, QR, MP, MR> = ReturnType<ReturnType<typeof createCacheReducer<string, T, QP, QR, MP, MR>>>;
4
- export declare const createCacheReducer: <N extends string, T extends Typenames, QP, QR, MP, MR>(actions: ActionMap<N, T, QP, QR, MP, MR>, queryKeys: (keyof QP & keyof QR)[], cacheOptions: CacheOptions) => (state: {
4
+ export declare const createCacheReducer: <N extends string, T extends Typenames, QP, QR, MP, MR>(actions: ActionMap<N, T, QP, QR, MP, MR>, queryKeys: (keyof (QP | QR))[], cacheOptions: CacheOptions) => (state: {
5
5
  entities: EntitiesMap<T>;
6
- queries: QP | QR extends infer T_1 ? { [QK in keyof T_1]: Dict<QueryState<QP[QK], QR[QK]> | undefined>; } : never;
7
- mutations: MP | MR extends infer T_2 ? { [MK in keyof T_2]: MutationState<MP[MK], MR[MK]>; } : never;
8
- } | undefined, action: {
9
- type: `@rrc/${N}/updateQueryStateAndEntities`;
10
- queryKey: keyof QP & keyof QR;
11
- queryCacheKey: import("./types").Key;
12
- state: Partial<QueryState<QP[keyof QP & keyof QR], QR[keyof QP & keyof QR]>> | undefined;
13
- entityChanges: import("./types").EntityChanges<T> | undefined;
14
- } | {
15
- type: `@rrc/${N}/updateMutationStateAndEntities`;
16
- mutationKey: keyof MP & keyof MR;
17
- state: Partial<MutationState<MP[keyof MP & keyof MR], MR[keyof MP & keyof MR]>> | undefined;
18
- entityChanges: import("./types").EntityChanges<T> | undefined;
19
- } | {
20
- type: `@rrc/${N}/mergeEntityChanges`;
21
- changes: import("./types").EntityChanges<T>;
22
- } | {
23
- type: `@rrc/${N}/invalidateQuery`;
24
- queries: {
25
- query: keyof QP & keyof QR;
26
- cacheKey?: import("./types").Key | undefined;
27
- expiresAt?: number | undefined;
28
- }[];
29
- } | {
30
- type: `@rrc/${N}/clearQueryState`;
31
- queries: {
32
- query: keyof QP & keyof QR;
33
- cacheKey?: import("./types").Key | undefined;
34
- }[];
35
- } | {
36
- type: `@rrc/${N}/clearMutationState`;
37
- mutationKeys: (keyof MP & keyof MR)[];
38
- }) => {
6
+ queries: { [QK in keyof (QP | QR)]: Dict<QueryState<QP[QK], QR[QK]> | undefined>; };
7
+ mutations: { [MK in keyof (MP | MR)]: MutationState<MP[MK], MR[MK]>; };
8
+ } | undefined, action: ReturnType<(typeof actions)[keyof typeof actions]>) => {
39
9
  entities: EntitiesMap<T>;
40
- queries: QP | QR extends infer T_1 ? { [QK in keyof T_1]: Dict<QueryState<QP[QK], QR[QK]> | undefined>; } : never;
41
- mutations: MP | MR extends infer T_2 ? { [MK in keyof T_2]: MutationState<MP[MK], MR[MK]>; } : never;
10
+ queries: { [QK in keyof (QP | QR)]: Dict<QueryState<QP[QK], QR[QK]> | undefined>; };
11
+ mutations: { [MK in keyof (MP | MR)]: MutationState<MP[MK], MR[MK]>; };
42
12
  };
package/dist/index.js CHANGED
@@ -26,7 +26,6 @@ Object.defineProperty(exports, "defaultGetCacheKey", { enumerable: true, get: fu
26
26
  // remove cachePolicy? make skip/enabled a function? skip -> enabled/shouldFetch?
27
27
  // generate full api docs
28
28
  // ! medium
29
- // example rca -> vite
30
29
  // optimistic response
31
30
  // reset [whole] cache to initial / to provided state
32
31
  // globals for success, completions and loading states?
package/dist/mutate.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { Store } from 'redux';
2
2
  import type { ActionMap } from './createActions';
3
3
  import type { Cache, Key, MutationResult, Typenames } from './types';
4
- export declare const mutate: <N extends string, T extends Typenames, QP, QR, MP, MR, MK extends keyof MP | keyof MR>(logTag: string, store: Store, cache: Cache<N, T, QP, QR, MP, MR>, { updateMutationStateAndEntities, }: Pick<ActionMap<N, T, unknown, unknown, MP, MR>, "updateMutationStateAndEntities">, mutationKey: MK, params: MK extends keyof MP & keyof MR ? MP[MK] : never, abortControllers: WeakMap<Store, Record<Key, AbortController>>, onCompleted?: ((response: import("./types").QueryResponse<T, MR[keyof MP & keyof MR & string]> | undefined, error: unknown, params: MP[keyof MP & keyof MR & string] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, MR[keyof MP & keyof MR & number]> | undefined, error: unknown, params: MP[keyof MP & keyof MR & number] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, MR[keyof MP & keyof MR & symbol]> | undefined, error: unknown, params: MP[keyof MP & keyof MR & symbol] | undefined, store: Store<any, import("redux").AnyAction>) => void) | undefined, onSuccess?: ((response: import("./types").QueryResponse<T, MR[keyof MP & keyof MR & string]>, params: MP[keyof MP & keyof MR & string] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, MR[keyof MP & keyof MR & number]>, params: MP[keyof MP & keyof MR & number] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, MR[keyof MP & keyof MR & symbol]>, params: MP[keyof MP & keyof MR & symbol] | undefined, store: Store<any, import("redux").AnyAction>) => void) | undefined, onError?: ((error: unknown, params: MP[keyof MP & keyof MR & string] | undefined, store: Store<any, import("redux").AnyAction>) => boolean | void | null | undefined) | ((error: unknown, params: MP[keyof MP & keyof MR & number] | undefined, store: Store<any, import("redux").AnyAction>) => boolean | void | null | undefined) | ((error: unknown, params: MP[keyof MP & keyof MR & symbol] | undefined, store: Store<any, import("redux").AnyAction>) => boolean | void | null | undefined) | undefined) => Promise<MutationResult<MK extends keyof MP & keyof MR ? MR[MK] : never>>;
4
+ export declare const mutate: <N extends string, T extends Typenames, QP, QR, MP, MR, MK extends keyof (MP & MR)>(logTag: string, store: Store, cache: Cache<N, T, QP, QR, MP, MR>, { updateMutationStateAndEntities, }: Pick<ActionMap<N, T, unknown, unknown, MP, MR>, "updateMutationStateAndEntities">, mutationKey: MK, params: MK extends keyof (MP | MR) ? MP[MK] : never, abortControllers: WeakMap<Store, Record<Key, AbortController>>, onCompleted?: ((response: import("./types").NormalizedQueryResponse<T, MR[keyof MP & keyof MR & string]> | undefined, error: unknown | undefined, params: MP[keyof MP & keyof MR & string] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, MR[keyof MP & keyof MR & number]> | undefined, error: unknown | undefined, params: MP[keyof MP & keyof MR & number] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, MR[keyof MP & keyof MR & symbol]> | undefined, error: unknown | undefined, params: MP[keyof MP & keyof MR & symbol] | undefined, store: Store) => void) | undefined, onSuccess?: ((response: import("./types").NormalizedQueryResponse<T, MR[keyof MP & keyof MR & string]>, params: MP[keyof MP & keyof MR & string] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, MR[keyof MP & keyof MR & number]>, params: MP[keyof MP & keyof MR & number] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, MR[keyof MP & keyof MR & symbol]>, params: MP[keyof MP & keyof MR & symbol] | undefined, store: Store) => void) | undefined, onError?: ((error: unknown, params: MP[keyof MP & keyof MR & string] | undefined, store: Store) => boolean | void | null | undefined) | ((error: unknown, params: MP[keyof MP & keyof MR & number] | undefined, store: Store) => boolean | void | null | undefined) | ((error: unknown, params: MP[keyof MP & keyof MR & symbol] | undefined, store: Store) => boolean | void | null | undefined) | undefined) => Promise<MutationResult<MK extends keyof (MP | MR) ? MR[MK] : never>>;
package/dist/mutate.js CHANGED
@@ -11,8 +11,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.mutate = void 0;
13
13
  const utilsAndConstants_1 = require("./utilsAndConstants");
14
- const mutate = (logTag, store, cache, { updateMutationStateAndEntities, }, mutationKey, params, abortControllers, onCompleted = cache.mutations[mutationKey].onCompleted, onSuccess = cache.mutations[mutationKey].onSuccess, onError = cache.mutations[mutationKey].onError) => __awaiter(void 0, void 0, void 0, function* () {
15
- var _a, _b;
14
+ const mutate = (logTag_1, store_1, cache_1, _a, mutationKey_1, params_1, abortControllers_1, ...args_1) => __awaiter(void 0, [logTag_1, store_1, cache_1, _a, mutationKey_1, params_1, abortControllers_1, ...args_1], void 0, function* (logTag, store, cache, { updateMutationStateAndEntities, }, mutationKey, params, abortControllers, onCompleted = cache.mutations[mutationKey].onCompleted, onSuccess = cache.mutations[mutationKey].onSuccess, onError = cache.mutations[mutationKey].onError) {
15
+ var _b, _c;
16
16
  let abortControllersOfStore = abortControllers.get(store);
17
17
  if (abortControllersOfStore === undefined) {
18
18
  abortControllersOfStore = {};
@@ -68,7 +68,7 @@ const mutate = (logTag, store, cache, { updateMutationStateAndEntities, }, mutat
68
68
  // @ts-expect-error params
69
69
  if (!(onError === null || onError === void 0 ? void 0 : onError(error, params, store))) {
70
70
  // @ts-expect-error queryKey
71
- (_b = (_a = cache.globals).onError) === null || _b === void 0 ? void 0 : _b.call(_a, error, mutationKey, params, store);
71
+ (_c = (_b = cache.globals).onError) === null || _c === void 0 ? void 0 : _c.call(_b, error, mutationKey, params, store);
72
72
  }
73
73
  // @ts-expect-error response
74
74
  onCompleted === null || onCompleted === void 0 ? void 0 : onCompleted(response, error, params, store);
package/dist/query.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { Store } from 'redux';
2
2
  import type { ActionMap } from './createActions';
3
3
  import type { Cache, Key, QueryResult, Typenames } from './types';
4
- export declare const query: <N extends string, T extends Typenames, QP, QR, MP, MR, QK extends keyof QP | keyof QR>(logTag: string, store: Store, cache: Cache<N, T, QP, QR, MP, MR>, { updateQueryStateAndEntities, }: Pick<ActionMap<N, T, QP, QR, unknown, unknown>, "updateQueryStateAndEntities">, queryKey: QK, cacheKey: Key, params: QK extends keyof QP & keyof QR ? QP[QK] : never, secondsToLive: number | undefined, onlyIfExpired: boolean | undefined, mergeResults?: ((oldResult: QR[keyof QP & keyof QR & string] | undefined, response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & string]>, params: QP[keyof QP & keyof QR & string] | undefined, store: Store<any, import("redux").AnyAction>) => QR[keyof QP & keyof QR & string]) | ((oldResult: QR[keyof QP & keyof QR & number] | undefined, response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & number]>, params: QP[keyof QP & keyof QR & number] | undefined, store: Store<any, import("redux").AnyAction>) => QR[keyof QP & keyof QR & number]) | ((oldResult: QR[keyof QP & keyof QR & symbol] | undefined, response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & symbol]>, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store<any, import("redux").AnyAction>) => QR[keyof QP & keyof QR & symbol]) | undefined, onCompleted?: ((response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & string]> | undefined, error: unknown, params: QP[keyof QP & keyof QR & string] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & number]> | undefined, error: unknown, params: QP[keyof QP & keyof QR & number] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & symbol]> | undefined, error: unknown, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store<any, import("redux").AnyAction>) => void) | undefined, onSuccess?: ((response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & string]>, params: QP[keyof QP & keyof QR & string] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & number]>, params: QP[keyof QP & keyof QR & number] | undefined, store: Store<any, import("redux").AnyAction>) => void) | ((response: import("./types").QueryResponse<T, QR[keyof QP & keyof QR & symbol]>, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store<any, import("redux").AnyAction>) => void) | undefined, onError?: ((error: unknown, params: QP[keyof QP & keyof QR & string] | undefined, store: Store<any, import("redux").AnyAction>) => boolean | void | null | undefined) | ((error: unknown, params: QP[keyof QP & keyof QR & number] | undefined, store: Store<any, import("redux").AnyAction>) => boolean | void | null | undefined) | ((error: unknown, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store<any, import("redux").AnyAction>) => boolean | void | null | undefined) | undefined) => Promise<QueryResult<QK extends keyof QP & keyof QR ? QR[QK] : never>>;
4
+ export declare const query: <N extends string, T extends Typenames, QP, QR, MP, MR, QK extends keyof (QP & QR)>(logTag: string, store: Store, cache: Cache<N, T, QP, QR, MP, MR>, { updateQueryStateAndEntities, }: Pick<ActionMap<N, T, QP, QR, unknown, unknown>, "updateQueryStateAndEntities">, queryKey: QK, cacheKey: Key, params: QK extends keyof (QP | QR) ? QP[QK] : never, secondsToLive: number | undefined, onlyIfExpired: boolean | undefined, mergeResults?: ((oldResult: QR[keyof QP & keyof QR & string] | undefined, response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & string]>, params: QP[keyof QP & keyof QR & string] | undefined, store: Store) => QR[keyof QP & keyof QR & string]) | ((oldResult: QR[keyof QP & keyof QR & number] | undefined, response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & number]>, params: QP[keyof QP & keyof QR & number] | undefined, store: Store) => QR[keyof QP & keyof QR & number]) | ((oldResult: QR[keyof QP & keyof QR & symbol] | undefined, response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & symbol]>, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store) => QR[keyof QP & keyof QR & symbol]) | undefined, onCompleted?: ((response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & string]> | undefined, error: unknown | undefined, params: QP[keyof QP & keyof QR & string] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & number]> | undefined, error: unknown | undefined, params: QP[keyof QP & keyof QR & number] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & symbol]> | undefined, error: unknown | undefined, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store) => void) | undefined, onSuccess?: ((response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & string]>, params: QP[keyof QP & keyof QR & string] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & number]>, params: QP[keyof QP & keyof QR & number] | undefined, store: Store) => void) | ((response: import("./types").NormalizedQueryResponse<T, QR[keyof QP & keyof QR & symbol]>, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store) => void) | undefined, onError?: ((error: unknown, params: QP[keyof QP & keyof QR & string] | undefined, store: Store) => boolean | void | null | undefined) | ((error: unknown, params: QP[keyof QP & keyof QR & number] | undefined, store: Store) => boolean | void | null | undefined) | ((error: unknown, params: QP[keyof QP & keyof QR & symbol] | undefined, store: Store) => boolean | void | null | undefined) | undefined) => Promise<QueryResult<QK extends keyof (QP | QR) ? QR[QK] : never>>;
package/dist/types.d.ts CHANGED
@@ -76,15 +76,10 @@ export type EntitiesMap<T extends Typenames> = {
76
76
  export type EntityIds<T extends Typenames> = {
77
77
  [K in keyof T]?: Key[];
78
78
  };
79
- export type Query<P, T extends Typenames = Typenames, R = unknown> = (
80
- /** Query parameters */
81
- params: P,
82
- /** Redux store */
83
- store: Store) => Promise<QueryResponse<T, R>>;
84
- export type QueryInfo<T extends Typenames, P, R> = Partial<Pick<Globals<unknown, unknown>, 'cachePolicy' | 'secondsToLive'>> & {
85
- query: Query<P, T, R>;
79
+ export type QueryInfo<T extends Typenames = Typenames, P = unknown, R = unknown> = Partial<Pick<Globals<unknown, unknown>, 'cachePolicy' | 'secondsToLive'>> & {
80
+ query: NormalizedQuery<T, P, R>;
86
81
  /** Merges results before saving to the store. Default implementation is using the latest result. */
87
- mergeResults?: (oldResult: R | undefined, response: QueryResponse<T, R>, params: P | undefined, store: Store) => R;
82
+ mergeResults?: (oldResult: R | undefined, response: NormalizedQueryResponse<T, R>, params: P | undefined, store: Store) => R;
88
83
  /**
89
84
  * 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.
90
85
  * Default implementation uses `JSON.stringify` or `String()` depending on type.
@@ -92,12 +87,18 @@ export type QueryInfo<T extends Typenames, P, R> = Partial<Pick<Globals<unknown,
92
87
  * */
93
88
  getCacheKey?: (params?: P) => Key;
94
89
  /** Called after fetch finished either successfully or not. */
95
- onCompleted?: (response: QueryResponse<T, R> | undefined, error: unknown | undefined, params: P | undefined, store: Store) => void;
90
+ onCompleted?: (response: NormalizedQueryResponse<T, R> | undefined, error: unknown | undefined, params: P | undefined, store: Store) => void;
96
91
  /** Called after fetch finished without error. */
97
- onSuccess?: (response: QueryResponse<T, R>, params: P | undefined, store: Store) => void;
92
+ onSuccess?: (response: NormalizedQueryResponse<T, R>, params: P | undefined, store: Store) => void;
98
93
  /** Called after fetch finished with error. Should return true if error was handled and does not require global onError handling. */
99
94
  onError?: (error: unknown, params: P | undefined, store: Store) => boolean | void | null | undefined;
100
95
  };
96
+ export type Query<P = unknown, R = unknown> = (
97
+ /** Query parameters */
98
+ params: P,
99
+ /** Redux store */
100
+ store: Store) => Promise<QueryResponse<R>>;
101
+ export type NormalizedQuery<T extends Typenames = Typenames, P = unknown, R = unknown> = (...args: Parameters<Query<P, R>>) => Promise<NormalizedQueryResponse<T, R>>;
101
102
  export type QueryState<P, R> = MutationState<P, R> & {
102
103
  expiresAt?: number;
103
104
  };
@@ -112,34 +113,37 @@ export type QueryOptions<T extends Typenames, QP, QR, QK extends keyof (QP & QR)
112
113
  onlyIfExpired?: boolean;
113
114
  };
114
115
  export type QueryCachePolicy = 'cache-first' | 'cache-and-fetch';
115
- export type QueryResponse<T extends Typenames, R> = EntityChanges<T> & {
116
+ export type QueryResponse<R = unknown> = {
116
117
  result: R;
117
118
  /** If defined, overrides this value for query state, ignoring `secondsToLive`. */
118
119
  expiresAt?: number;
119
120
  };
120
- export type QueryResult<R> = {
121
+ export type NormalizedQueryResponse<T extends Typenames = Typenames, R = unknown> = EntityChanges<T> & QueryResponse<R>;
122
+ export type QueryResult<R = unknown> = {
121
123
  error?: unknown;
122
124
  cancelled?: true;
123
125
  result?: R;
124
126
  };
125
- export type Mutation<P, T extends Typenames = Typenames, R = unknown> = (
127
+ export type MutationInfo<T extends Typenames = Typenames, P = unknown, R = unknown> = Pick<QueryInfo<T, P, R>, 'onCompleted' | 'onSuccess' | 'onError'> & {
128
+ mutation: NormalizedMutation<T, P, R>;
129
+ };
130
+ export type Mutation<P = unknown, R = unknown> = (
126
131
  /** Mutation parameters */
127
132
  params: P,
128
133
  /** Redux store */
129
134
  store: Store,
130
135
  /** Signal is aborted for current mutation when the same mutation was called once again. */
131
- abortSignal: AbortSignal) => Promise<MutationResponse<T, R>>;
132
- export type MutationInfo<T extends Typenames, P, R> = Pick<QueryInfo<T, P, R>, 'onCompleted' | 'onSuccess' | 'onError'> & {
133
- mutation: Mutation<P, T, R>;
134
- };
136
+ abortSignal: AbortSignal) => Promise<MutationResponse<R>>;
137
+ export type NormalizedMutation<T extends Typenames = Typenames, P = unknown, R = unknown> = (...args: Parameters<Mutation<P, R>>) => Promise<NormalizedMutationResponse<T, R>>;
135
138
  export type MutateOptions<T extends Typenames, MP, MR, MK extends keyof (MP & MR)> = Pick<MutationInfo<T, MK extends keyof (MP | MR) ? MP[MK] : never, MK extends keyof (MP | MR) ? MR[MK] : never>, 'onCompleted' | 'onSuccess' | 'onError'> & {
136
139
  mutation: MK;
137
140
  params: MK extends keyof (MP | MR) ? MP[MK] : never;
138
141
  };
139
- export type MutationResponse<T extends Typenames, R> = EntityChanges<T> & {
142
+ export type MutationResponse<R = unknown> = {
140
143
  result?: R;
141
144
  };
142
- export type MutationResult<R> = {
145
+ export type NormalizedMutationResponse<T extends Typenames = Typenames, R = unknown> = EntityChanges<T> & MutationResponse<R>;
146
+ export type MutationResult<R = unknown> = {
143
147
  error?: unknown;
144
148
  aborted?: true;
145
149
  result?: R;
@@ -1,4 +1,4 @@
1
1
  import { Store } from 'redux';
2
2
  import { ActionMap } from './createActions';
3
3
  import { Cache, Key, MutateOptions, MutationState, Typenames } from './types';
4
- export declare const useMutation: <N extends string, T extends Typenames, MP, MR, MK extends keyof MP | keyof MR>(cache: Cache<N, T, unknown, unknown, MP, MR>, actions: Pick<ActionMap<N, T, unknown, unknown, MP, MR>, "updateMutationStateAndEntities">, options: Omit<MutateOptions<T, 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<MK extends keyof MP & keyof MR ? MP[MK] : never, MK extends keyof MP & keyof MR ? MP[MK] : never>, () => boolean];
4
+ export declare const useMutation: <N extends string, T extends Typenames, MP, MR, MK extends keyof (MP & MR)>(cache: Cache<N, T, unknown, unknown, MP, MR>, actions: Pick<ActionMap<N, T, unknown, unknown, MP, MR>, "updateMutationStateAndEntities">, options: Omit<MutateOptions<T, 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<MK extends keyof MP & keyof MR ? MP[MK] : never, MK extends keyof MP & keyof MR ? MP[MK] : never>, () => boolean];
@@ -1,3 +1,3 @@
1
1
  import { ActionMap } from './createActions';
2
2
  import { Cache, QueryOptions, QueryState, Typenames, UseQueryOptions } from './types';
3
- export declare const useQuery: <N extends string, T extends Typenames, QP, QR, MP, MR, QK extends keyof QP | keyof QR>(cache: Cache<N, T, QP, QR, MP, MR>, actions: Pick<ActionMap<N, T, QP, QR, MP, MR>, "updateQueryStateAndEntities">, options: UseQueryOptions<T, QP, QR, QK>) => readonly [Omit<QueryState<QK extends keyof QP & keyof QR ? QP[QK] : never, QK extends keyof QP & keyof QR ? QR[QK] : never>, "expiresAt">, (options?: Partial<Pick<QueryOptions<T, QP, QR, QK>, "params" | "onlyIfExpired">> | undefined) => 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>>];
3
+ export declare const useQuery: <N extends string, T extends Typenames, QP, QR, MP, MR, QK extends keyof (QP & QR)>(cache: Cache<N, T, QP, QR, MP, MR>, actions: Pick<ActionMap<N, T, QP, QR, MP, MR>, "updateQueryStateAndEntities">, options: UseQueryOptions<T, QP, QR, QK>) => readonly [Omit<QueryState<QK extends keyof QP & keyof QR ? QP[QK] : never, QK extends keyof QP & keyof QR ? QR[QK] : never>, "expiresAt">, (options?: Partial<Pick<QueryOptions<T, QP, QR, QK>, "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>>];
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "react-redux-cache",
3
3
  "author": "Alexander Danilov",
4
4
  "license": "MIT",
5
- "version": "0.11.0",
5
+ "version": "0.12.0-rc.0",
6
6
  "description": "Powerful data fetching and caching library that supports normalization, built on top of redux",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
@@ -51,7 +51,7 @@
51
51
  "redux": "4.2.1",
52
52
  "redux-logger": "3.0.6",
53
53
  "ts-jest": "29.1.0",
54
- "typescript": "5.0"
54
+ "typescript": "5.6.3"
55
55
  },
56
56
  "files": [
57
57
  "dist/*"