@astral/mobx-query 1.7.1 → 1.8.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/AuxiliaryQuery/AuxiliaryQuery.d.ts +1 -1
- package/InfiniteQuery/InfiniteQuery.js +0 -2
- package/MobxQuery/MobxQuery.d.ts +32 -9
- package/MobxQuery/MobxQuery.js +30 -11
- package/index.d.ts +3 -2
- package/index.js +1 -2
- package/package.json +1 -1
|
@@ -30,7 +30,7 @@ export declare class AuxiliaryQuery<TResult, TError = void> {
|
|
|
30
30
|
* Метод ответственный за создание единого промиса,
|
|
31
31
|
* для устранения гонки запросов
|
|
32
32
|
*/
|
|
33
|
-
getUnifiedPromise: (executor: Executor<TResult>, onSuccess?: (
|
|
33
|
+
getUnifiedPromise: (executor: Executor<TResult>, onSuccess?: (data: TResult) => void) => Promise<TResult>;
|
|
34
34
|
private setSuccess;
|
|
35
35
|
private checkBackgroundAndSet;
|
|
36
36
|
/**
|
package/MobxQuery/MobxQuery.d.ts
CHANGED
|
@@ -24,20 +24,27 @@ type MobxQueryParams = {
|
|
|
24
24
|
*/
|
|
25
25
|
enabledAutoFetch?: boolean;
|
|
26
26
|
};
|
|
27
|
-
type CreateQueryParams<TResult, TError, TIsBackground extends boolean> = Omit<QueryParams<TResult, TError, TIsBackground>, 'dataStorage' | 'statusStorage' | 'backgroundStatusStorage' | 'submitValidity'> & {
|
|
27
|
+
export type CreateQueryParams<TResult, TError, TIsBackground extends boolean> = Omit<QueryParams<TResult, TError, TIsBackground>, 'dataStorage' | 'statusStorage' | 'backgroundStatusStorage' | 'submitValidity'> & {
|
|
28
28
|
/**
|
|
29
29
|
* Режим фонового обновления
|
|
30
30
|
* @default false
|
|
31
31
|
*/
|
|
32
32
|
isBackground?: TIsBackground;
|
|
33
33
|
};
|
|
34
|
-
type CreateInfiniteQueryParams<TResult, TError, TIsBackground extends boolean> = Omit<InfiniteQueryParams<TResult, TError, TIsBackground>, 'dataStorage' | 'statusStorage' | 'backgroundStatusStorage' | 'submitValidity'> & {
|
|
34
|
+
export type CreateInfiniteQueryParams<TResult, TError, TIsBackground extends boolean> = Omit<InfiniteQueryParams<TResult, TError, TIsBackground>, 'dataStorage' | 'statusStorage' | 'backgroundStatusStorage' | 'submitValidity'> & {
|
|
35
35
|
/**
|
|
36
36
|
* Режим фонового обновления
|
|
37
37
|
* @default false
|
|
38
38
|
*/
|
|
39
39
|
isBackground?: TIsBackground;
|
|
40
40
|
};
|
|
41
|
+
export type CreateMutationParams<TResult, TError> = MutationParams<TResult, TError>;
|
|
42
|
+
/**
|
|
43
|
+
* Стратегия инвалидации кэша
|
|
44
|
+
* @property 'partial-match' - Проверяет наличие хотя бы одной части ключа в кэше
|
|
45
|
+
* @property 'chain-match' - Проверяет наличие полной связки ключей в кэше
|
|
46
|
+
*/
|
|
47
|
+
type InvalidateStrategy = 'partial-match' | 'chain-match';
|
|
41
48
|
/**
|
|
42
49
|
* Сервис, позволяющий кэшировать данные.
|
|
43
50
|
*/
|
|
@@ -74,10 +81,26 @@ export declare class MobxQuery<TDefaultError = void> {
|
|
|
74
81
|
private serialize;
|
|
75
82
|
constructor({ onError, fetchPolicy, enabledAutoFetch, }?: MobxQueryParams);
|
|
76
83
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
|
|
80
|
-
|
|
84
|
+
* Проверяет пересечение ключей в зависимости от стратегии
|
|
85
|
+
* @param invalidatedKeys - Ключи для инвалидации
|
|
86
|
+
* @param queryKeys - Ключи запроса
|
|
87
|
+
* @param strategy - Стратегия проверки:
|
|
88
|
+
* - 'chain-match' - все ключи из invalidatedKeys должны присутствовать в queryKeys
|
|
89
|
+
* - 'partial-match' - хотя бы один ключ из invalidatedKeys должен быть в queryKeys
|
|
90
|
+
*/
|
|
91
|
+
private checkTouchedElement;
|
|
92
|
+
/**
|
|
93
|
+
* Метод для инвалидации по списку ключей, предполагается использование из домена
|
|
94
|
+
* @param invalidatedKeys - Массив ключей для инвалидации
|
|
95
|
+
* @param strategy - Стратегия инвалидации. 'chain-match' - инвалидировать при совпадении связки ключей в кэше, 'partial-match' - инвалидировать при частичном совпадении ключей. По умолчанию 'partial-match'
|
|
96
|
+
* @example
|
|
97
|
+
* // Инвалидация по частичному совпадению ключей
|
|
98
|
+
* mobxQuery.invalidate(['users', '1']); // Инвалидирует все query, содержащие ключ 'users' или '1'
|
|
99
|
+
*
|
|
100
|
+
* // Инвалидация по совпадению связки ключей
|
|
101
|
+
* mobxQuery.invalidate(['users', '1'], 'chain-match'); // Инвалидирует только query с точным набором ключей ['users', '1']
|
|
102
|
+
*/
|
|
103
|
+
invalidate: (invalidatedKeys: CacheKey[], strategy?: InvalidateStrategy) => void;
|
|
81
104
|
private submitValidity;
|
|
82
105
|
/**
|
|
83
106
|
* Метод инвалидации всех query
|
|
@@ -96,14 +119,14 @@ export declare class MobxQuery<TDefaultError = void> {
|
|
|
96
119
|
/**
|
|
97
120
|
* Метод создания стора, кешируется
|
|
98
121
|
*/
|
|
99
|
-
createQuery: <TResult, TError = TDefaultError, TIsBackground extends boolean = false>(key: CacheKey[], executor: QueryExecutor<TResult>, params?: CreateQueryParams<TResult, TError, TIsBackground>
|
|
122
|
+
createQuery: <TResult, TError = TDefaultError, TIsBackground extends boolean = false>(key: CacheKey[], executor: QueryExecutor<TResult>, params?: CreateQueryParams<TResult, TError, TIsBackground>) => Query<TResult, TError, TIsBackground>;
|
|
100
123
|
/**
|
|
101
124
|
* Метод создания инфинит стора, кешируется
|
|
102
125
|
*/
|
|
103
|
-
createInfiniteQuery: <TResult, TError = TDefaultError, TIsBackground extends boolean = false>(key: CacheKey[], executor: InfiniteExecutor<TResult>, params?: CreateInfiniteQueryParams<TResult, TError, TIsBackground>
|
|
126
|
+
createInfiniteQuery: <TResult, TError = TDefaultError, TIsBackground extends boolean = false>(key: CacheKey[], executor: InfiniteExecutor<TResult>, params?: CreateInfiniteQueryParams<TResult, TError, TIsBackground>) => InfiniteQuery<TResult, TError, TIsBackground>;
|
|
104
127
|
/**
|
|
105
128
|
* Метод создания мутации, не кешируется
|
|
106
129
|
*/
|
|
107
|
-
createMutation: <TResult, TError = TDefaultError, TExecutorParams = void>(executor: MutationExecutor<TResult, TExecutorParams>, params?:
|
|
130
|
+
createMutation: <TResult, TError = TDefaultError, TExecutorParams = void>(executor: MutationExecutor<TResult, TExecutorParams>, params?: CreateMutationParams<TResult, TError>) => Mutation<TResult, TError, TExecutorParams>;
|
|
108
131
|
}
|
|
109
132
|
export {};
|
package/MobxQuery/MobxQuery.js
CHANGED
|
@@ -27,20 +27,39 @@ export class MobxQuery {
|
|
|
27
27
|
this.statusStorageFactory = new StatusStorageFactory();
|
|
28
28
|
this.serialize = (data) => JSON.stringify(data);
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
30
|
+
* Проверяет пересечение ключей в зависимости от стратегии
|
|
31
|
+
* @param invalidatedKeys - Ключи для инвалидации
|
|
32
|
+
* @param queryKeys - Ключи запроса
|
|
33
|
+
* @param strategy - Стратегия проверки:
|
|
34
|
+
* - 'chain-match' - все ключи из invalidatedKeys должны присутствовать в queryKeys
|
|
35
|
+
* - 'partial-match' - хотя бы один ключ из invalidatedKeys должен быть в queryKeys
|
|
32
36
|
*/
|
|
33
|
-
this.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
this.checkTouchedElement = (invalidatedKeys, queryKeys, strategy) => {
|
|
38
|
+
const serializedInvalidatedKeys = invalidatedKeys.map(this.serialize);
|
|
39
|
+
if (strategy === 'chain-match') {
|
|
40
|
+
return serializedInvalidatedKeys.every((invalidatedKey) => queryKeys.some((queryKey) => invalidatedKey === this.serialize(queryKey)));
|
|
41
|
+
}
|
|
42
|
+
return queryKeys.some((queryKey) => serializedInvalidatedKeys.find((invalidatedKey) => invalidatedKey === this.serialize(queryKey)));
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Метод для инвалидации по списку ключей, предполагается использование из домена
|
|
46
|
+
* @param invalidatedKeys - Массив ключей для инвалидации
|
|
47
|
+
* @param strategy - Стратегия инвалидации. 'chain-match' - инвалидировать при совпадении связки ключей в кэше, 'partial-match' - инвалидировать при частичном совпадении ключей. По умолчанию 'partial-match'
|
|
48
|
+
* @example
|
|
49
|
+
* // Инвалидация по частичному совпадению ключей
|
|
50
|
+
* mobxQuery.invalidate(['users', '1']); // Инвалидирует все query, содержащие ключ 'users' или '1'
|
|
51
|
+
*
|
|
52
|
+
* // Инвалидация по совпадению связки ключей
|
|
53
|
+
* mobxQuery.invalidate(['users', '1'], 'chain-match'); // Инвалидирует только query с точным набором ключей ['users', '1']
|
|
54
|
+
*/
|
|
55
|
+
this.invalidate = (invalidatedKeys, strategy = 'partial-match') => {
|
|
56
|
+
for (const keyHash of this.keys.keys()) {
|
|
57
|
+
const queryKeys = this.keys.get(keyHash);
|
|
58
|
+
if (!queryKeys) {
|
|
39
59
|
return;
|
|
40
60
|
}
|
|
41
61
|
// Проверяем, есть ли пересечение между закешированными ключами и набором ключей для инвалидации
|
|
42
|
-
|
|
43
|
-
if (hasTouchedElement) {
|
|
62
|
+
if (this.checkTouchedElement(invalidatedKeys, queryKeys, strategy)) {
|
|
44
63
|
const query = this.queriesMap.get(keyHash);
|
|
45
64
|
if (query) {
|
|
46
65
|
query.invalidate();
|
|
@@ -49,7 +68,7 @@ export class MobxQuery {
|
|
|
49
68
|
this.queriesMap.convertToWeak(keyHash);
|
|
50
69
|
}
|
|
51
70
|
}
|
|
52
|
-
}
|
|
71
|
+
}
|
|
53
72
|
};
|
|
54
73
|
// Метод для подтверждения того, что квери успешно получил валидные данные
|
|
55
74
|
this.submitValidity = (keyHash) => {
|
package/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { Mutation } from './Mutation';
|
|
2
2
|
export { Query } from './Query';
|
|
3
|
-
export {
|
|
4
|
-
export { MobxQuery } from './MobxQuery';
|
|
3
|
+
export { type InfiniteParams } from './InfiniteQuery';
|
|
4
|
+
export { MobxQuery, type CreateQueryParams, type CreateInfiniteQueryParams, type CreateMutationParams, } from './MobxQuery';
|
|
5
|
+
export { type CacheKey, type FetchPolicy } from './types';
|
package/index.js
CHANGED