@gravity-ui/data-source 0.8.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/react-query/ClientDataManager.d.ts +7 -3
- package/build/cjs/react-query/ClientDataManager.js +107 -29
- package/build/cjs/react-query/ClientDataManager.js.map +1 -1
- package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js +145 -0
- package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js.map +1 -1
- package/build/cjs/react-query/impl/infinite/hooks.js +1 -4
- package/build/cjs/react-query/impl/infinite/hooks.js.map +1 -1
- package/build/cjs/react-query/impl/infinite/utils.js +6 -1
- package/build/cjs/react-query/impl/infinite/utils.js.map +1 -1
- package/build/cjs/react-query/impl/plain/hooks.js +1 -4
- package/build/cjs/react-query/impl/plain/hooks.js.map +1 -1
- package/build/cjs/react-query/impl/plain/utils.js +6 -1
- package/build/cjs/react-query/impl/plain/utils.js.map +1 -1
- package/build/cjs/react-query/types/options.d.ts +0 -5
- package/build/cjs/react-query/types/options.js.map +1 -1
- package/build/cjs/react-query/types/query-meta.d.ts +12 -0
- package/build/cjs/react-query/utils/__tests__/checkMutationObjectsKeys.test.js +295 -0
- package/build/cjs/react-query/utils/__tests__/checkMutationObjectsKeys.test.js.map +1 -0
- package/build/cjs/react-query/utils/checkMutationObjectsKeys.d.ts +17 -0
- package/build/cjs/react-query/utils/checkMutationObjectsKeys.js +88 -0
- package/build/cjs/react-query/utils/checkMutationObjectsKeys.js.map +1 -0
- package/build/cjs/react-query/utils/parseQueryKey.d.ts +2 -0
- package/build/cjs/react-query/utils/parseQueryKey.js +10 -0
- package/build/cjs/react-query/utils/parseQueryKey.js.map +1 -0
- package/build/esm/react-query/ClientDataManager.d.ts +7 -3
- package/build/esm/react-query/ClientDataManager.js +107 -29
- package/build/esm/react-query/ClientDataManager.js.map +1 -1
- package/build/esm/react-query/__tests__/threeLevelIntegration.test.js +145 -0
- package/build/esm/react-query/__tests__/threeLevelIntegration.test.js.map +1 -1
- package/build/esm/react-query/impl/infinite/hooks.js +2 -5
- package/build/esm/react-query/impl/infinite/hooks.js.map +1 -1
- package/build/esm/react-query/impl/infinite/utils.js +6 -1
- package/build/esm/react-query/impl/infinite/utils.js.map +1 -1
- package/build/esm/react-query/impl/plain/hooks.js +2 -5
- package/build/esm/react-query/impl/plain/hooks.js.map +1 -1
- package/build/esm/react-query/impl/plain/utils.js +6 -1
- package/build/esm/react-query/impl/plain/utils.js.map +1 -1
- package/build/esm/react-query/types/options.d.ts +0 -5
- package/build/esm/react-query/types/options.js.map +1 -1
- package/build/esm/react-query/types/query-meta.d.ts +12 -0
- package/build/esm/react-query/utils/__tests__/checkMutationObjectsKeys.test.js +292 -0
- package/build/esm/react-query/utils/__tests__/checkMutationObjectsKeys.test.js.map +1 -0
- package/build/esm/react-query/utils/checkMutationObjectsKeys.d.ts +17 -0
- package/build/esm/react-query/utils/checkMutationObjectsKeys.js +81 -0
- package/build/esm/react-query/utils/checkMutationObjectsKeys.js.map +1 -0
- package/build/esm/react-query/utils/parseQueryKey.d.ts +2 -0
- package/build/esm/react-query/utils/parseQueryKey.js +4 -0
- package/build/esm/react-query/utils/parseQueryKey.js.map +1 -0
- package/package.json +1 -1
- package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js +0 -195
- package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +0 -1
- package/build/cjs/react-query/utils/warn.d.ts +0 -1
- package/build/cjs/react-query/utils/warn.js +0 -15
- package/build/cjs/react-query/utils/warn.js.map +0 -1
- package/build/cjs/react-query/utils/warnDisabledRefetch.d.ts +0 -1
- package/build/cjs/react-query/utils/warnDisabledRefetch.js +0 -11
- package/build/cjs/react-query/utils/warnDisabledRefetch.js.map +0 -1
- package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js +0 -192
- package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +0 -1
- package/build/esm/react-query/utils/warn.d.ts +0 -1
- package/build/esm/react-query/utils/warn.js +0 -9
- package/build/esm/react-query/utils/warn.js.map +0 -1
- package/build/esm/react-query/utils/warnDisabledRefetch.d.ts +0 -1
- package/build/esm/react-query/utils/warnDisabledRefetch.js +0 -5
- package/build/esm/react-query/utils/warnDisabledRefetch.js.map +0 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.checkMutationObjectsKeys = void 0;
|
|
7
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
8
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
|
+
var _core = require("@normy/core");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
var hasFewerKeys = function hasFewerKeys(mutation, existing) {
|
|
12
|
+
var mutationKeys = Object.keys(mutation);
|
|
13
|
+
var existingKeys = Object.keys(existing);
|
|
14
|
+
if (mutationKeys.length >= existingKeys.length) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
for (var _i = 0, _mutationKeys = mutationKeys; _i < _mutationKeys.length; _i++) {
|
|
18
|
+
var key = _mutationKeys[_i];
|
|
19
|
+
if (!existingKeys.includes(key)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
};
|
|
25
|
+
var extractNormalizableObjects = function extractNormalizableObjects(data, getNormalizationObjectKey) {
|
|
26
|
+
var objects = [];
|
|
27
|
+
function extract(item) {
|
|
28
|
+
if (Array.isArray(item)) {
|
|
29
|
+
item.forEach(extract);
|
|
30
|
+
} else if (item !== null && (0, _typeof2.default)(item) === 'object' && !(item instanceof Date)) {
|
|
31
|
+
var obj = item;
|
|
32
|
+
if (getNormalizationObjectKey(obj)) {
|
|
33
|
+
objects.push(obj);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
extract(data);
|
|
38
|
+
return objects;
|
|
39
|
+
};
|
|
40
|
+
var checkMutationObjectsKeys = exports.checkMutationObjectsKeys = function checkMutationObjectsKeys(mutationData, normalizer, config) {
|
|
41
|
+
var getNormalizationObjectKey = (config === null || config === void 0 ? void 0 : config.getNormalizationObjectKey) || function (obj) {
|
|
42
|
+
return obj.id;
|
|
43
|
+
};
|
|
44
|
+
var normalizedState = normalizer.getNormalizedData();
|
|
45
|
+
var mutationObjects = extractNormalizableObjects(mutationData, getNormalizationObjectKey);
|
|
46
|
+
if (mutationObjects.length === 0) {
|
|
47
|
+
return {
|
|
48
|
+
needsRefetch: false,
|
|
49
|
+
details: []
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
var details = [];
|
|
53
|
+
var _iterator = (0, _createForOfIteratorHelper2.default)(mutationObjects),
|
|
54
|
+
_step;
|
|
55
|
+
try {
|
|
56
|
+
var _loop = function _loop() {
|
|
57
|
+
var obj = _step.value;
|
|
58
|
+
var objectKey = getNormalizationObjectKey(obj);
|
|
59
|
+
if (!objectKey) {
|
|
60
|
+
return 1; // continue
|
|
61
|
+
}
|
|
62
|
+
var normalizedKey = (0, _core.getId)(objectKey);
|
|
63
|
+
var existingObject = normalizedState.objects[normalizedKey];
|
|
64
|
+
if (existingObject && hasFewerKeys(obj, existingObject)) {
|
|
65
|
+
var mutationKeys = Object.keys(obj);
|
|
66
|
+
var existingKeys = Object.keys(existingObject);
|
|
67
|
+
details.push({
|
|
68
|
+
id: objectKey,
|
|
69
|
+
missingKeys: existingKeys.filter(function (k) {
|
|
70
|
+
return !mutationKeys.includes(k);
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
76
|
+
if (_loop()) continue;
|
|
77
|
+
}
|
|
78
|
+
} catch (err) {
|
|
79
|
+
_iterator.e(err);
|
|
80
|
+
} finally {
|
|
81
|
+
_iterator.f();
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
needsRefetch: details.length > 0,
|
|
85
|
+
details: details
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
// #sourceMappingURL=checkMutationObjectsKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_core","require","_interopRequireDefault","e","__esModule","default","hasFewerKeys","mutation","existing","mutationKeys","Object","keys","existingKeys","length","_i","_mutationKeys","key","includes","extractNormalizableObjects","data","getNormalizationObjectKey","objects","extract","item","Array","isArray","forEach","_typeof","Date","obj","push","checkMutationObjectsKeys","exports","mutationData","normalizer","config","id","normalizedState","getNormalizedData","mutationObjects","needsRefetch","details","_iterator","_createForOfIteratorHelper","_step","_loop","value","objectKey","normalizedKey","getId","existingObject","missingKeys","filter","k","s","n","done","err","f"],"sources":["checkMutationObjectsKeys.ts"],"sourcesContent":["import {getId} from '@normy/core';\n\nimport type {Normalizer} from '../../core';\n\ntype DataObject = Record<string, unknown>;\ntype NormalizableObject = DataObject & {id?: string};\n\nexport interface AffectedObject {\n id: string;\n missingKeys: string[];\n}\n\nexport interface MutationObjectsKeysResult {\n needsRefetch: boolean;\n details: AffectedObject[];\n}\n\nconst hasFewerKeys = (mutation: DataObject, existing: DataObject): boolean => {\n const mutationKeys = Object.keys(mutation);\n const existingKeys = Object.keys(existing);\n\n if (mutationKeys.length >= existingKeys.length) {\n return false;\n }\n\n for (const key of mutationKeys) {\n if (!existingKeys.includes(key)) {\n return true;\n }\n }\n\n return true;\n};\n\nconst extractNormalizableObjects = (\n data: unknown,\n getNormalizationObjectKey: (obj: NormalizableObject) => string | undefined,\n): NormalizableObject[] => {\n const objects: NormalizableObject[] = [];\n\n function extract(item: unknown): void {\n if (Array.isArray(item)) {\n item.forEach(extract);\n } else if (item !== null && typeof item === 'object' && !(item instanceof Date)) {\n const obj = item as NormalizableObject;\n\n if (getNormalizationObjectKey(obj)) {\n objects.push(obj);\n }\n }\n }\n\n extract(data);\n\n return objects;\n};\n\nexport const checkMutationObjectsKeys = (\n mutationData: unknown,\n normalizer: Normalizer,\n config?: {getNormalizationObjectKey?: (obj: NormalizableObject) => string | undefined},\n): MutationObjectsKeysResult => {\n const getNormalizationObjectKey =\n config?.getNormalizationObjectKey || ((obj: NormalizableObject) => obj.id);\n\n const normalizedState = normalizer.getNormalizedData();\n\n const mutationObjects = extractNormalizableObjects(mutationData, getNormalizationObjectKey);\n\n if (mutationObjects.length === 0) {\n return {\n needsRefetch: false,\n details: [],\n };\n }\n\n const details: AffectedObject[] = [];\n\n for (const obj of mutationObjects) {\n const objectKey = getNormalizationObjectKey(obj);\n\n if (!objectKey) {\n continue;\n }\n\n const normalizedKey = getId(objectKey);\n\n const existingObject = normalizedState.objects[normalizedKey] as DataObject | undefined;\n\n if (existingObject && hasFewerKeys(obj, existingObject)) {\n const mutationKeys = Object.keys(obj);\n const existingKeys = Object.keys(existingObject);\n\n details.push({\n id: objectKey,\n missingKeys: existingKeys.filter((k) => !mutationKeys.includes(k)),\n });\n }\n }\n\n return {\n needsRefetch: details.length > 0,\n details,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parseQueryKey = void 0;
|
|
7
|
+
var parseQueryKey = exports.parseQueryKey = function parseQueryKey(queryKeyString) {
|
|
8
|
+
return JSON.parse(queryKeyString);
|
|
9
|
+
};
|
|
10
|
+
// #sourceMappingURL=parseQueryKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["parseQueryKey","exports","queryKeyString","JSON","parse"],"sources":["parseQueryKey.ts"],"sourcesContent":["import type {QueryKey} from '@tanstack/react-query';\n\nexport const parseQueryKey = (queryKeyString: string): QueryKey => {\n return JSON.parse(queryKeyString) as QueryKey;\n};\n"],"mappings":";;;;;;AAEO,IAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,SAAhBA,aAAaA,CAAIE,cAAsB,EAAe;EAC/D,OAAOC,IAAI,CAACC,KAAK,CAACF,cAAc,CAAC;AACrC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Data } from '@normy/core';
|
|
2
|
-
import type { InvalidateQueryFilters, QueryClientConfig } from '@tanstack/react-query';
|
|
2
|
+
import type { InvalidateQueryFilters, QueryClientConfig, QueryKey } from '@tanstack/react-query';
|
|
3
3
|
import { QueryClient } from '@tanstack/react-query';
|
|
4
4
|
import { type AnyDataSource, type DataManager, type DataSourceParams, type DataSourceTag, type Normalizer, type NormalizerConfig } from '../core';
|
|
5
5
|
import type { InvalidateOptions, InvalidateRepeatOptions } from '../core/types/DataManagerOptions';
|
|
@@ -11,9 +11,11 @@ export declare class ClientDataManager implements DataManager {
|
|
|
11
11
|
readonly queryClient: QueryClient;
|
|
12
12
|
readonly normalizer?: Normalizer | undefined;
|
|
13
13
|
readonly queryNormalizer?: QueryNormalizer | undefined;
|
|
14
|
+
readonly normalizerConfig?: NormalizerConfig | boolean;
|
|
14
15
|
constructor(config?: ClientDataManagerConfig);
|
|
15
|
-
optimisticUpdate(mutationData: Data): void;
|
|
16
|
-
invalidateData(data: Data): void;
|
|
16
|
+
optimisticUpdate(mutationData: Data, queryKey?: QueryKey, queryData?: Data): void;
|
|
17
|
+
invalidateData(data: Data, queryKey?: QueryKey): void;
|
|
18
|
+
update(data: Data): void;
|
|
17
19
|
invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions): Promise<void>;
|
|
18
20
|
invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions): Promise<void>;
|
|
19
21
|
invalidateSource<TDataSource extends AnyDataSource>(dataSource: TDataSource, invalidateOptions?: InvalidateOptions): Promise<void>;
|
|
@@ -24,4 +26,6 @@ export declare class ClientDataManager implements DataManager {
|
|
|
24
26
|
protected invalidateQueries(filters: InvalidateQueryFilters, invalidateOptions?: InvalidateOptions): Promise<void>;
|
|
25
27
|
protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions): void;
|
|
26
28
|
private createNormalize;
|
|
29
|
+
private invalidateQuery;
|
|
30
|
+
private optimisticUpdateQuery;
|
|
27
31
|
}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
1
2
|
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
3
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
4
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
4
5
|
import { createNormalizer } from '@normy/core';
|
|
5
6
|
import { QueryClient } from '@tanstack/react-query';
|
|
6
7
|
import { composeFullKey, hasTag } from '../core';
|
|
8
|
+
import { checkMutationObjectsKeys } from './utils/checkMutationObjectsKeys';
|
|
7
9
|
import { createQueryNormalizer } from './utils/normalize';
|
|
10
|
+
import { parseQueryKey } from './utils/parseQueryKey';
|
|
8
11
|
export var ClientDataManager = /*#__PURE__*/function () {
|
|
9
12
|
function ClientDataManager() {
|
|
10
13
|
var _config$defaultOption,
|
|
@@ -15,6 +18,8 @@ export var ClientDataManager = /*#__PURE__*/function () {
|
|
|
15
18
|
this.queryClient = void 0;
|
|
16
19
|
this.normalizer = void 0;
|
|
17
20
|
this.queryNormalizer = void 0;
|
|
21
|
+
this.normalizerConfig = void 0;
|
|
22
|
+
this.normalizerConfig = config.normalizerConfig;
|
|
18
23
|
this.queryClient = new QueryClient(_objectSpread(_objectSpread({}, config), {}, {
|
|
19
24
|
defaultOptions: _objectSpread(_objectSpread({}, config.defaultOptions), {}, {
|
|
20
25
|
queries: _objectSpread({
|
|
@@ -34,54 +39,94 @@ export var ClientDataManager = /*#__PURE__*/function () {
|
|
|
34
39
|
}
|
|
35
40
|
return _createClass(ClientDataManager, [{
|
|
36
41
|
key: "optimisticUpdate",
|
|
37
|
-
value: function optimisticUpdate(mutationData) {
|
|
42
|
+
value: function optimisticUpdate(mutationData, queryKey, queryData) {
|
|
38
43
|
var _this2 = this;
|
|
39
44
|
if (!this.normalizer) {
|
|
40
45
|
return;
|
|
41
46
|
}
|
|
47
|
+
if (queryKey && queryData) {
|
|
48
|
+
this.optimisticUpdateQuery(queryKey, queryData);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
42
51
|
var queriesToUpdate = this.normalizer.getQueriesToUpdate(mutationData);
|
|
43
52
|
queriesToUpdate.forEach(function (query) {
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
queryKey: queryKey
|
|
47
|
-
});
|
|
48
|
-
var dataUpdatedAt = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.dataUpdatedAt;
|
|
49
|
-
var isInvalidated = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.isInvalidated;
|
|
50
|
-
var error = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.error;
|
|
51
|
-
var status = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.status;
|
|
52
|
-
_this2.queryClient.setQueryData(queryKey, function () {
|
|
53
|
-
return query.data;
|
|
54
|
-
}, {
|
|
55
|
-
updatedAt: dataUpdatedAt
|
|
56
|
-
});
|
|
57
|
-
cachedQuery === null || cachedQuery === void 0 || cachedQuery.setState({
|
|
58
|
-
isInvalidated: isInvalidated,
|
|
59
|
-
error: error,
|
|
60
|
-
status: status
|
|
61
|
-
});
|
|
53
|
+
var parsedQueryKey = parseQueryKey(query.queryKey);
|
|
54
|
+
_this2.optimisticUpdateQuery(parsedQueryKey, query.data);
|
|
62
55
|
});
|
|
63
56
|
}
|
|
64
57
|
}, {
|
|
65
58
|
key: "invalidateData",
|
|
66
|
-
value: function invalidateData(data) {
|
|
59
|
+
value: function invalidateData(data, queryKey) {
|
|
67
60
|
var _this3 = this;
|
|
68
61
|
if (!this.normalizer) {
|
|
69
62
|
return;
|
|
70
63
|
}
|
|
64
|
+
if (queryKey) {
|
|
65
|
+
this.invalidateQuery(queryKey);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
71
68
|
var queriesToUpdate = this.normalizer.getQueriesToUpdate(data);
|
|
72
69
|
queriesToUpdate.forEach(function (query) {
|
|
73
|
-
var
|
|
74
|
-
_this3.
|
|
75
|
-
|
|
70
|
+
var parsedQueryKey = parseQueryKey(query.queryKey);
|
|
71
|
+
_this3.invalidateQuery(parsedQueryKey);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "update",
|
|
76
|
+
value: function update(data) {
|
|
77
|
+
var _this4 = this;
|
|
78
|
+
if (!this.normalizer) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
var _ref = _typeof(this.normalizerConfig) === 'object' ? this.normalizerConfig : {
|
|
82
|
+
optimistic: false,
|
|
83
|
+
invalidate: false
|
|
84
|
+
},
|
|
85
|
+
globalOptimistic = _ref.optimistic,
|
|
86
|
+
globalInvalidate = _ref.invalidate;
|
|
87
|
+
var queriesToUpdate = this.normalizer.getQueriesToUpdate(data);
|
|
88
|
+
if (queriesToUpdate.length === 0) {
|
|
89
|
+
var completeness = checkMutationObjectsKeys(data, this.normalizer);
|
|
90
|
+
var dependentQueries = this.normalizer.getDependentQueries(data);
|
|
91
|
+
if (completeness.needsRefetch) {
|
|
92
|
+
dependentQueries.forEach(function (queryKeyString) {
|
|
93
|
+
var _cachedQuery$meta;
|
|
94
|
+
var parsedQueryKey = parseQueryKey(queryKeyString);
|
|
95
|
+
var cachedQuery = _this4.queryClient.getQueryCache().find({
|
|
96
|
+
queryKey: parsedQueryKey
|
|
97
|
+
});
|
|
98
|
+
var _ref2 = (_cachedQuery$meta = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.meta) !== null && _cachedQuery$meta !== void 0 ? _cachedQuery$meta : {},
|
|
99
|
+
invalidate = _ref2.invalidate;
|
|
100
|
+
if (invalidate === true || invalidate === undefined && globalInvalidate === true) {
|
|
101
|
+
_this4.invalidateData(data, parsedQueryKey);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
queriesToUpdate.forEach(function (query) {
|
|
108
|
+
var _cachedQuery$meta2;
|
|
109
|
+
var parsedQueryKey = parseQueryKey(query.queryKey);
|
|
110
|
+
var cachedQuery = _this4.queryClient.getQueryCache().find({
|
|
111
|
+
queryKey: parsedQueryKey
|
|
76
112
|
});
|
|
113
|
+
var _ref3 = (_cachedQuery$meta2 = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.meta) !== null && _cachedQuery$meta2 !== void 0 ? _cachedQuery$meta2 : {},
|
|
114
|
+
optimistic = _ref3.optimistic,
|
|
115
|
+
invalidate = _ref3.invalidate;
|
|
116
|
+
if (optimistic === true || optimistic === undefined && globalOptimistic === true) {
|
|
117
|
+
_this4.optimisticUpdate(data, parsedQueryKey, query.data);
|
|
118
|
+
}
|
|
119
|
+
if (invalidate === true || invalidate === undefined && globalInvalidate === true) {
|
|
120
|
+
_this4.invalidateData(data, parsedQueryKey);
|
|
121
|
+
}
|
|
77
122
|
});
|
|
78
123
|
}
|
|
79
124
|
}, {
|
|
80
125
|
key: "invalidateTag",
|
|
81
126
|
value: function invalidateTag(tag, invalidateOptions) {
|
|
82
127
|
return this.invalidateQueries({
|
|
83
|
-
predicate: function predicate(
|
|
84
|
-
var queryKey =
|
|
128
|
+
predicate: function predicate(_ref4) {
|
|
129
|
+
var queryKey = _ref4.queryKey;
|
|
85
130
|
return hasTag(queryKey, tag);
|
|
86
131
|
}
|
|
87
132
|
}, invalidateOptions);
|
|
@@ -90,8 +135,8 @@ export var ClientDataManager = /*#__PURE__*/function () {
|
|
|
90
135
|
key: "invalidateTags",
|
|
91
136
|
value: function invalidateTags(tags, invalidateOptions) {
|
|
92
137
|
return this.invalidateQueries({
|
|
93
|
-
predicate: function predicate(
|
|
94
|
-
var queryKey =
|
|
138
|
+
predicate: function predicate(_ref5) {
|
|
139
|
+
var queryKey = _ref5.queryKey;
|
|
95
140
|
return tags.every(function (tag) {
|
|
96
141
|
return hasTag(queryKey, tag);
|
|
97
142
|
});
|
|
@@ -141,9 +186,9 @@ export var ClientDataManager = /*#__PURE__*/function () {
|
|
|
141
186
|
}, {
|
|
142
187
|
key: "invalidateQueries",
|
|
143
188
|
value: function invalidateQueries(filters, invalidateOptions) {
|
|
144
|
-
var
|
|
189
|
+
var _this5 = this;
|
|
145
190
|
var invalidate = function invalidate() {
|
|
146
|
-
return
|
|
191
|
+
return _this5.queryClient.invalidateQueries(filters);
|
|
147
192
|
};
|
|
148
193
|
this.repeatInvalidate(invalidate, invalidateOptions === null || invalidateOptions === void 0 ? void 0 : invalidateOptions.repeat);
|
|
149
194
|
return invalidate();
|
|
@@ -169,6 +214,39 @@ export var ClientDataManager = /*#__PURE__*/function () {
|
|
|
169
214
|
}
|
|
170
215
|
return createNormalizer(config);
|
|
171
216
|
}
|
|
217
|
+
}, {
|
|
218
|
+
key: "invalidateQuery",
|
|
219
|
+
value: function invalidateQuery(queryKey) {
|
|
220
|
+
var cachedQuery = this.queryClient.getQueryCache().find({
|
|
221
|
+
queryKey: queryKey
|
|
222
|
+
});
|
|
223
|
+
if ((cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.fetchStatus) !== 'fetching' && (cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.status) === 'success' && !(cachedQuery !== null && cachedQuery !== void 0 && cachedQuery.state.isInvalidated)) {
|
|
224
|
+
this.queryClient.invalidateQueries({
|
|
225
|
+
queryKey: queryKey
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}, {
|
|
230
|
+
key: "optimisticUpdateQuery",
|
|
231
|
+
value: function optimisticUpdateQuery(queryKey, queryData) {
|
|
232
|
+
var cachedQuery = this.queryClient.getQueryCache().find({
|
|
233
|
+
queryKey: queryKey
|
|
234
|
+
});
|
|
235
|
+
var dataUpdatedAt = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.dataUpdatedAt;
|
|
236
|
+
var isInvalidated = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.isInvalidated;
|
|
237
|
+
var error = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.error;
|
|
238
|
+
var status = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.status;
|
|
239
|
+
this.queryClient.setQueryData(queryKey, function () {
|
|
240
|
+
return queryData;
|
|
241
|
+
}, {
|
|
242
|
+
updatedAt: dataUpdatedAt
|
|
243
|
+
});
|
|
244
|
+
cachedQuery === null || cachedQuery === void 0 || cachedQuery.setState({
|
|
245
|
+
isInvalidated: isInvalidated,
|
|
246
|
+
error: error,
|
|
247
|
+
status: status
|
|
248
|
+
});
|
|
249
|
+
}
|
|
172
250
|
}]);
|
|
173
251
|
}();
|
|
174
252
|
// #sourceMappingURL=ClientDataManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createNormalizer","QueryClient","composeFullKey","hasTag","createQueryNormalizer","ClientDataManager","_config$defaultOption","_config$defaultOption2","_this","config","arguments","length","undefined","_classCallCheck","queryClient","normalizer","queryNormalizer","_objectSpread","defaultOptions","queries","networkMode","mutations","createNormalize","normalizerConfig","data","optimisticUpdate","invalidateData","_createClass","key","value","mutationData","_this2","queriesToUpdate","getQueriesToUpdate","forEach","query","queryKey","JSON","parse","cachedQuery","getQueryCache","find","dataUpdatedAt","state","isInvalidated","error","status","setQueryData","updatedAt","setState","_this3","invalidateQueries","invalidateTag","tag","invalidateOptions","predicate","_ref","invalidateTags","tags","_ref2","every","invalidateSource","dataSource","name","resetSource","resetQueries","invalidateParams","params","exact","resetParams","invalidateSourceTags","slice","filters","_this4","invalidate","repeatInvalidate","repeat","i","count","setTimeout","interval"],"sources":["ClientDataManager.ts"],"sourcesContent":["import type {Data} from '@normy/core';\nimport {createNormalizer} from '@normy/core';\nimport type {InvalidateQueryFilters, QueryClientConfig, QueryKey} from '@tanstack/react-query';\nimport {QueryClient} from '@tanstack/react-query';\n\nimport {\n type AnyDataSource,\n type DataManager,\n type DataSourceParams,\n type DataSourceTag,\n type Normalizer,\n type NormalizerConfig,\n composeFullKey,\n hasTag,\n} from '../core';\nimport type {InvalidateOptions, InvalidateRepeatOptions} from '../core/types/DataManagerOptions';\n\nimport type {QueryNormalizer} from './types/normalizer';\nimport {createQueryNormalizer} from './utils/normalize';\n\nexport interface ClientDataManagerConfig extends QueryClientConfig {\n normalizerConfig?: NormalizerConfig | boolean;\n}\n\nexport class ClientDataManager implements DataManager {\n readonly queryClient: QueryClient;\n readonly normalizer?: Normalizer | undefined;\n readonly queryNormalizer?: QueryNormalizer | undefined;\n\n constructor(config: ClientDataManagerConfig = {}) {\n this.queryClient = new QueryClient({\n ...config,\n defaultOptions: {\n ...config.defaultOptions,\n queries: {\n networkMode: 'always',\n ...config.defaultOptions?.queries,\n },\n mutations: {\n networkMode: 'always',\n ...config.defaultOptions?.mutations,\n },\n },\n });\n\n this.normalizer = this.createNormalize(config.normalizerConfig);\n this.queryNormalizer = createQueryNormalizer(\n this.normalizer,\n this.queryClient,\n config.normalizerConfig,\n (data) => this.optimisticUpdate(data),\n (data) => this.invalidateData(data),\n );\n }\n\n optimisticUpdate(mutationData: Data) {\n if (!this.normalizer) {\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(mutationData);\n\n queriesToUpdate.forEach((query) => {\n const queryKey = JSON.parse(query.queryKey) as QueryKey;\n\n const cachedQuery = this.queryClient.getQueryCache().find({queryKey});\n\n const dataUpdatedAt = cachedQuery?.state.dataUpdatedAt;\n const isInvalidated = cachedQuery?.state.isInvalidated;\n const error = cachedQuery?.state.error;\n const status = cachedQuery?.state.status;\n\n this.queryClient.setQueryData(queryKey, () => query.data, {\n updatedAt: dataUpdatedAt,\n });\n\n cachedQuery?.setState({isInvalidated, error, status});\n });\n }\n\n invalidateData(data: Data): void {\n if (!this.normalizer) {\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(data);\n\n queriesToUpdate.forEach((query) => {\n const queryKey = JSON.parse(query.queryKey) as QueryKey;\n this.queryClient.invalidateQueries({queryKey});\n });\n }\n\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => hasTag(queryKey, tag),\n },\n invalidateOptions,\n );\n }\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => tags.every((tag) => hasTag(queryKey, tag)),\n },\n invalidateOptions,\n );\n }\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // First element is a data source name\n queryKey: [dataSource.name],\n },\n invalidateOptions,\n );\n }\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource) {\n return this.queryClient.resetQueries({\n // First element is a data source name\n queryKey: [dataSource.name],\n });\n }\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n },\n invalidateOptions,\n );\n }\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ) {\n return this.queryClient.resetQueries({\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n });\n }\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // Last element is a full key\n queryKey: composeFullKey(dataSource, params).slice(0, -1),\n },\n invalidateOptions,\n );\n }\n\n protected invalidateQueries(\n filters: InvalidateQueryFilters,\n invalidateOptions?: InvalidateOptions,\n ) {\n const invalidate = () => this.queryClient.invalidateQueries(filters);\n\n this.repeatInvalidate(invalidate, invalidateOptions?.repeat);\n\n return invalidate();\n }\n\n protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions) {\n if (!repeat) {\n return;\n }\n\n for (let i = 1; i <= repeat.count; i++) {\n setTimeout(invalidate, repeat.interval * i);\n }\n }\n\n private createNormalize(\n config: boolean | NormalizerConfig | undefined,\n ): Normalizer | undefined {\n if (!config) {\n return undefined;\n }\n\n if (config === true) {\n return createNormalizer({});\n }\n\n return createNormalizer(config);\n }\n}\n"],"mappings":";;;AACA,SAAQA,gBAAgB,QAAO,aAAa;AAE5C,SAAQC,WAAW,QAAO,uBAAuB;AAEjD,SAOIC,cAAc,EACdC,MAAM,QACH,SAAS;AAIhB,SAAQC,qBAAqB,QAAO,mBAAmB;AAMvD,WAAaC,iBAAiB;EAK1B,SAAAA,kBAAA,EAAkD;IAAA,IAAAC,qBAAA;MAAAC,sBAAA;MAAAC,KAAA;IAAA,IAAtCC,MAA+B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAAG,eAAA,OAAAR,iBAAA;IAAA,KAJvCS,WAAW;IAAA,KACXC,UAAU;IAAA,KACVC,eAAe;IAGpB,IAAI,CAACF,WAAW,GAAG,IAAIb,WAAW,CAAAgB,aAAA,CAAAA,aAAA,KAC3BR,MAAM;MACTS,cAAc,EAAAD,aAAA,CAAAA,aAAA,KACPR,MAAM,CAACS,cAAc;QACxBC,OAAO,EAAAF,aAAA;UACHG,WAAW,EAAE;QAAQ,IAAAd,qBAAA,GAClBG,MAAM,CAACS,cAAc,cAAAZ,qBAAA,uBAArBA,qBAAA,CAAuBa,OAAO,CACpC;QACDE,SAAS,EAAAJ,aAAA;UACLG,WAAW,EAAE;QAAQ,IAAAb,sBAAA,GAClBE,MAAM,CAACS,cAAc,cAAAX,sBAAA,uBAArBA,sBAAA,CAAuBc,SAAS;MACtC;IACJ,EACJ,CAAC;IAEF,IAAI,CAACN,UAAU,GAAG,IAAI,CAACO,eAAe,CAACb,MAAM,CAACc,gBAAgB,CAAC;IAC/D,IAAI,CAACP,eAAe,GAAGZ,qBAAqB,CACxC,IAAI,CAACW,UAAU,EACf,IAAI,CAACD,WAAW,EAChBL,MAAM,CAACc,gBAAgB,EACvB,UAACC,IAAI;MAAA,OAAKhB,KAAI,CAACiB,gBAAgB,CAACD,IAAI,CAAC;IAAA,GACrC,UAACA,IAAI;MAAA,OAAKhB,KAAI,CAACkB,cAAc,CAACF,IAAI,CAAC;IAAA,CACvC,CAAC;EACL;EAAC,OAAAG,YAAA,CAAAtB,iBAAA;IAAAuB,GAAA;IAAAC,KAAA,EAED,SAAAJ,gBAAgBA,CAACK,YAAkB,EAAE;MAAA,IAAAC,MAAA;MACjC,IAAI,CAAC,IAAI,CAAChB,UAAU,EAAE;QAClB;MACJ;MAEA,IAAMiB,eAAe,GAAG,IAAI,CAACjB,UAAU,CAACkB,kBAAkB,CAACH,YAAY,CAAC;MAExEE,eAAe,CAACE,OAAO,CAAC,UAACC,KAAK,EAAK;QAC/B,IAAMC,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAACC,QAAQ,CAAa;QAEvD,IAAMG,WAAW,GAAGR,MAAI,CAACjB,WAAW,CAAC0B,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC;UAACL,QAAQ,EAARA;QAAQ,CAAC,CAAC;QAErE,IAAMM,aAAa,GAAGH,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,KAAK,CAACD,aAAa;QACtD,IAAME,aAAa,GAAGL,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,KAAK,CAACC,aAAa;QACtD,IAAMC,KAAK,GAAGN,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,KAAK,CAACE,KAAK;QACtC,IAAMC,MAAM,GAAGP,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,KAAK,CAACG,MAAM;QAExCf,MAAI,CAACjB,WAAW,CAACiC,YAAY,CAACX,QAAQ,EAAE;UAAA,OAAMD,KAAK,CAACX,IAAI;QAAA,GAAE;UACtDwB,SAAS,EAAEN;QACf,CAAC,CAAC;QAEFH,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEU,QAAQ,CAAC;UAACL,aAAa,EAAbA,aAAa;UAAEC,KAAK,EAALA,KAAK;UAAEC,MAAM,EAANA;QAAM,CAAC,CAAC;MACzD,CAAC,CAAC;IACN;EAAC;IAAAlB,GAAA;IAAAC,KAAA,EAED,SAAAH,cAAcA,CAACF,IAAU,EAAQ;MAAA,IAAA0B,MAAA;MAC7B,IAAI,CAAC,IAAI,CAACnC,UAAU,EAAE;QAClB;MACJ;MAEA,IAAMiB,eAAe,GAAG,IAAI,CAACjB,UAAU,CAACkB,kBAAkB,CAACT,IAAI,CAAC;MAEhEQ,eAAe,CAACE,OAAO,CAAC,UAACC,KAAK,EAAK;QAC/B,IAAMC,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAACC,QAAQ,CAAa;QACvDc,MAAI,CAACpC,WAAW,CAACqC,iBAAiB,CAAC;UAACf,QAAQ,EAARA;QAAQ,CAAC,CAAC;MAClD,CAAC,CAAC;IACN;EAAC;IAAAR,GAAA;IAAAC,KAAA,EAED,SAAAuB,aAAaA,CAACC,GAAkB,EAAEC,iBAAqC,EAAE;MACrE,OAAO,IAAI,CAACH,iBAAiB,CACzB;QACII,SAAS,EAAE,SAAXA,SAASA,CAAAC,IAAA;UAAA,IAAIpB,QAAQ,GAAAoB,IAAA,CAARpB,QAAQ;UAAA,OAAMjC,MAAM,CAACiC,QAAQ,EAAEiB,GAAG,CAAC;QAAA;MACpD,CAAC,EACDC,iBACJ,CAAC;IACL;EAAC;IAAA1B,GAAA;IAAAC,KAAA,EAED,SAAA4B,cAAcA,CAACC,IAAqB,EAAEJ,iBAAqC,EAAE;MACzE,OAAO,IAAI,CAACH,iBAAiB,CACzB;QACII,SAAS,EAAE,SAAXA,SAASA,CAAAI,KAAA;UAAA,IAAIvB,QAAQ,GAAAuB,KAAA,CAARvB,QAAQ;UAAA,OAAMsB,IAAI,CAACE,KAAK,CAAC,UAACP,GAAG;YAAA,OAAKlD,MAAM,CAACiC,QAAQ,EAAEiB,GAAG,CAAC;UAAA,EAAC;QAAA;MACzE,CAAC,EACDC,iBACJ,CAAC;IACL;EAAC;IAAA1B,GAAA;IAAAC,KAAA,EAED,SAAAgC,gBAAgBA,CACZC,UAAuB,EACvBR,iBAAqC,EACvC;MACE,OAAO,IAAI,CAACH,iBAAiB,CACzB;QACI;QACAf,QAAQ,EAAE,CAAC0B,UAAU,CAACC,IAAI;MAC9B,CAAC,EACDT,iBACJ,CAAC;IACL;EAAC;IAAA1B,GAAA;IAAAC,KAAA,EAED,SAAAmC,WAAWA,CAAoCF,UAAuB,EAAE;MACpE,OAAO,IAAI,CAAChD,WAAW,CAACmD,YAAY,CAAC;QACjC;QACA7B,QAAQ,EAAE,CAAC0B,UAAU,CAACC,IAAI;MAC9B,CAAC,CAAC;IACN;EAAC;IAAAnC,GAAA;IAAAC,KAAA,EAED,SAAAqC,gBAAgBA,CACZJ,UAAuB,EACvBK,MAAqC,EACrCb,iBAAqC,EACvC;MACE,OAAO,IAAI,CAACH,iBAAiB,CACzB;QACIf,QAAQ,EAAElC,cAAc,CAAC4D,UAAU,EAAEK,MAAM,CAAC;QAC5CC,KAAK,EAAE;MACX,CAAC,EACDd,iBACJ,CAAC;IACL;EAAC;IAAA1B,GAAA;IAAAC,KAAA,EAED,SAAAwC,WAAWA,CACPP,UAAuB,EACvBK,MAAqC,EACvC;MACE,OAAO,IAAI,CAACrD,WAAW,CAACmD,YAAY,CAAC;QACjC7B,QAAQ,EAAElC,cAAc,CAAC4D,UAAU,EAAEK,MAAM,CAAC;QAC5CC,KAAK,EAAE;MACX,CAAC,CAAC;IACN;EAAC;IAAAxC,GAAA;IAAAC,KAAA,EAED,SAAAyC,oBAAoBA,CAChBR,UAAuB,EACvBK,MAAqC,EACrCb,iBAAqC,EACvC;MACE,OAAO,IAAI,CAACH,iBAAiB,CACzB;QACI;QACAf,QAAQ,EAAElC,cAAc,CAAC4D,UAAU,EAAEK,MAAM,CAAC,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MAC5D,CAAC,EACDjB,iBACJ,CAAC;IACL;EAAC;IAAA1B,GAAA;IAAAC,KAAA,EAED,SAAUsB,iBAAiBA,CACvBqB,OAA+B,EAC/BlB,iBAAqC,EACvC;MAAA,IAAAmB,MAAA;MACE,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAA;QAAA,OAASD,MAAI,CAAC3D,WAAW,CAACqC,iBAAiB,CAACqB,OAAO,CAAC;MAAA;MAEpE,IAAI,CAACG,gBAAgB,CAACD,UAAU,EAAEpB,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAEsB,MAAM,CAAC;MAE5D,OAAOF,UAAU,CAAC,CAAC;IACvB;EAAC;IAAA9C,GAAA;IAAAC,KAAA,EAED,SAAU8C,gBAAgBA,CAACD,UAA+B,EAAEE,MAAgC,EAAE;MAC1F,IAAI,CAACA,MAAM,EAAE;QACT;MACJ;MAEA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAID,MAAM,CAACE,KAAK,EAAED,CAAC,EAAE,EAAE;QACpCE,UAAU,CAACL,UAAU,EAAEE,MAAM,CAACI,QAAQ,GAAGH,CAAC,CAAC;MAC/C;IACJ;EAAC;IAAAjD,GAAA;IAAAC,KAAA,EAED,SAAQP,eAAeA,CACnBb,MAA8C,EACxB;MACtB,IAAI,CAACA,MAAM,EAAE;QACT,OAAOG,SAAS;MACpB;MAEA,IAAIH,MAAM,KAAK,IAAI,EAAE;QACjB,OAAOT,gBAAgB,CAAC,CAAC,CAAC,CAAC;MAC/B;MAEA,OAAOA,gBAAgB,CAACS,MAAM,CAAC;IACnC;EAAC;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createNormalizer","QueryClient","composeFullKey","hasTag","checkMutationObjectsKeys","createQueryNormalizer","parseQueryKey","ClientDataManager","_config$defaultOption","_config$defaultOption2","_this","config","arguments","length","undefined","_classCallCheck","queryClient","normalizer","queryNormalizer","normalizerConfig","_objectSpread","defaultOptions","queries","networkMode","mutations","createNormalize","data","optimisticUpdate","invalidateData","_createClass","key","value","mutationData","queryKey","queryData","_this2","optimisticUpdateQuery","queriesToUpdate","getQueriesToUpdate","forEach","query","parsedQueryKey","_this3","invalidateQuery","update","_this4","_ref","_typeof","optimistic","invalidate","globalOptimistic","globalInvalidate","completeness","dependentQueries","getDependentQueries","needsRefetch","queryKeyString","_cachedQuery$meta","cachedQuery","getQueryCache","find","_ref2","meta","_cachedQuery$meta2","_ref3","invalidateTag","tag","invalidateOptions","invalidateQueries","predicate","_ref4","invalidateTags","tags","_ref5","every","invalidateSource","dataSource","name","resetSource","resetQueries","invalidateParams","params","exact","resetParams","invalidateSourceTags","slice","filters","_this5","repeatInvalidate","repeat","i","count","setTimeout","interval","state","fetchStatus","status","isInvalidated","dataUpdatedAt","error","setQueryData","updatedAt","setState"],"sources":["ClientDataManager.ts"],"sourcesContent":["import type {Data} from '@normy/core';\nimport {createNormalizer} from '@normy/core';\nimport type {InvalidateQueryFilters, QueryClientConfig, QueryKey} from '@tanstack/react-query';\nimport {QueryClient} from '@tanstack/react-query';\n\nimport {\n type AnyDataSource,\n type DataManager,\n type DataSourceParams,\n type DataSourceTag,\n type Normalizer,\n type NormalizerConfig,\n composeFullKey,\n hasTag,\n} from '../core';\nimport type {InvalidateOptions, InvalidateRepeatOptions} from '../core/types/DataManagerOptions';\n\nimport type {QueryNormalizer} from './types/normalizer';\nimport {checkMutationObjectsKeys} from './utils/checkMutationObjectsKeys';\nimport {createQueryNormalizer} from './utils/normalize';\nimport {parseQueryKey} from './utils/parseQueryKey';\n\nexport interface ClientDataManagerConfig extends QueryClientConfig {\n normalizerConfig?: NormalizerConfig | boolean;\n}\n\nexport class ClientDataManager implements DataManager {\n readonly queryClient: QueryClient;\n readonly normalizer?: Normalizer | undefined;\n readonly queryNormalizer?: QueryNormalizer | undefined;\n readonly normalizerConfig?: NormalizerConfig | boolean;\n\n constructor(config: ClientDataManagerConfig = {}) {\n this.normalizerConfig = config.normalizerConfig;\n\n this.queryClient = new QueryClient({\n ...config,\n defaultOptions: {\n ...config.defaultOptions,\n queries: {\n networkMode: 'always',\n ...config.defaultOptions?.queries,\n },\n mutations: {\n networkMode: 'always',\n ...config.defaultOptions?.mutations,\n },\n },\n });\n\n this.normalizer = this.createNormalize(config.normalizerConfig);\n this.queryNormalizer = createQueryNormalizer(\n this.normalizer,\n this.queryClient,\n config.normalizerConfig,\n (data) => this.optimisticUpdate(data),\n (data) => this.invalidateData(data),\n );\n }\n\n optimisticUpdate(mutationData: Data, queryKey?: QueryKey, queryData?: Data) {\n if (!this.normalizer) {\n return;\n }\n\n if (queryKey && queryData) {\n this.optimisticUpdateQuery(queryKey, queryData);\n\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(mutationData);\n\n queriesToUpdate.forEach((query) => {\n const parsedQueryKey = parseQueryKey(query.queryKey);\n\n this.optimisticUpdateQuery(parsedQueryKey, query.data);\n });\n }\n\n invalidateData(data: Data, queryKey?: QueryKey): void {\n if (!this.normalizer) {\n return;\n }\n\n if (queryKey) {\n this.invalidateQuery(queryKey);\n\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(data);\n\n queriesToUpdate.forEach((query) => {\n const parsedQueryKey = parseQueryKey(query.queryKey);\n\n this.invalidateQuery(parsedQueryKey);\n });\n }\n\n update(data: Data) {\n if (!this.normalizer) {\n return;\n }\n\n const {optimistic: globalOptimistic, invalidate: globalInvalidate} =\n typeof this.normalizerConfig === 'object'\n ? this.normalizerConfig\n : {optimistic: false, invalidate: false};\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(data);\n\n if (queriesToUpdate.length === 0) {\n const completeness = checkMutationObjectsKeys(data, this.normalizer);\n const dependentQueries = this.normalizer.getDependentQueries(data);\n\n if (completeness.needsRefetch) {\n dependentQueries.forEach((queryKeyString) => {\n const parsedQueryKey = parseQueryKey(queryKeyString);\n\n const cachedQuery = this.queryClient\n .getQueryCache()\n .find({queryKey: parsedQueryKey});\n\n const {invalidate} = cachedQuery?.meta ?? {};\n\n if (\n invalidate === true ||\n (invalidate === undefined && globalInvalidate === true)\n ) {\n this.invalidateData(data, parsedQueryKey);\n }\n });\n }\n\n return;\n }\n\n queriesToUpdate.forEach((query) => {\n const parsedQueryKey = parseQueryKey(query.queryKey);\n\n const cachedQuery = this.queryClient.getQueryCache().find({queryKey: parsedQueryKey});\n\n const {optimistic, invalidate} = cachedQuery?.meta ?? {};\n\n if (optimistic === true || (optimistic === undefined && globalOptimistic === true)) {\n this.optimisticUpdate(data, parsedQueryKey, query.data);\n }\n\n if (invalidate === true || (invalidate === undefined && globalInvalidate === true)) {\n this.invalidateData(data, parsedQueryKey);\n }\n });\n }\n\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => hasTag(queryKey, tag),\n },\n invalidateOptions,\n );\n }\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => tags.every((tag) => hasTag(queryKey, tag)),\n },\n invalidateOptions,\n );\n }\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // First element is a data source name\n queryKey: [dataSource.name],\n },\n invalidateOptions,\n );\n }\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource) {\n return this.queryClient.resetQueries({\n // First element is a data source name\n queryKey: [dataSource.name],\n });\n }\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n },\n invalidateOptions,\n );\n }\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ) {\n return this.queryClient.resetQueries({\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n });\n }\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // Last element is a full key\n queryKey: composeFullKey(dataSource, params).slice(0, -1),\n },\n invalidateOptions,\n );\n }\n\n protected invalidateQueries(\n filters: InvalidateQueryFilters,\n invalidateOptions?: InvalidateOptions,\n ) {\n const invalidate = () => this.queryClient.invalidateQueries(filters);\n\n this.repeatInvalidate(invalidate, invalidateOptions?.repeat);\n\n return invalidate();\n }\n\n protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions) {\n if (!repeat) {\n return;\n }\n\n for (let i = 1; i <= repeat.count; i++) {\n setTimeout(invalidate, repeat.interval * i);\n }\n }\n\n private createNormalize(\n config: boolean | NormalizerConfig | undefined,\n ): Normalizer | undefined {\n if (!config) {\n return undefined;\n }\n\n if (config === true) {\n return createNormalizer({});\n }\n\n return createNormalizer(config);\n }\n\n private invalidateQuery(queryKey: QueryKey) {\n const cachedQuery = this.queryClient.getQueryCache().find({queryKey});\n\n if (\n cachedQuery?.state.fetchStatus !== 'fetching' &&\n cachedQuery?.state.status === 'success' &&\n !cachedQuery?.state.isInvalidated\n ) {\n this.queryClient.invalidateQueries({queryKey});\n }\n }\n\n private optimisticUpdateQuery(queryKey: QueryKey, queryData: Data) {\n const cachedQuery = this.queryClient.getQueryCache().find({queryKey});\n\n const dataUpdatedAt = cachedQuery?.state.dataUpdatedAt;\n const isInvalidated = cachedQuery?.state.isInvalidated;\n const error = cachedQuery?.state.error;\n const status = cachedQuery?.state.status;\n\n this.queryClient.setQueryData(queryKey, () => queryData, {\n updatedAt: dataUpdatedAt,\n });\n\n cachedQuery?.setState({isInvalidated, error, status});\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -507,5 +507,150 @@ describe('Normalization Configuration Integration', function () {
|
|
|
507
507
|
}, _callee19);
|
|
508
508
|
})));
|
|
509
509
|
});
|
|
510
|
+
describe('ClientDataManager.update()', function () {
|
|
511
|
+
it('should work with array of objects for optimistic update', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee20() {
|
|
512
|
+
var dm, queryKey, initialData, data;
|
|
513
|
+
return _regeneratorRuntime().wrap(function _callee20$(_context20) {
|
|
514
|
+
while (1) switch (_context20.prev = _context20.next) {
|
|
515
|
+
case 0:
|
|
516
|
+
dm = new ClientDataManager({
|
|
517
|
+
normalizerConfig: {
|
|
518
|
+
devLogging: false,
|
|
519
|
+
optimistic: true
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
dm.queryNormalizer.subscribe();
|
|
523
|
+
queryKey = ['users'];
|
|
524
|
+
initialData = [{
|
|
525
|
+
id: '1',
|
|
526
|
+
name: 'User 1'
|
|
527
|
+
}, {
|
|
528
|
+
id: '2',
|
|
529
|
+
name: 'User 2'
|
|
530
|
+
}];
|
|
531
|
+
dm.queryClient.setQueryData(queryKey, initialData);
|
|
532
|
+
dm.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
533
|
+
|
|
534
|
+
// Update both objects
|
|
535
|
+
dm.update([{
|
|
536
|
+
id: '1',
|
|
537
|
+
name: 'Updated 1'
|
|
538
|
+
}, {
|
|
539
|
+
id: '2',
|
|
540
|
+
name: 'Updated 2'
|
|
541
|
+
}]);
|
|
542
|
+
data = dm.queryClient.getQueryData(queryKey);
|
|
543
|
+
expect(data[0].name).toBe('Updated 1');
|
|
544
|
+
expect(data[1].name).toBe('Updated 2');
|
|
545
|
+
dm.queryNormalizer.unsubscribe();
|
|
546
|
+
dm.queryClient.clear();
|
|
547
|
+
case 12:
|
|
548
|
+
case "end":
|
|
549
|
+
return _context20.stop();
|
|
550
|
+
}
|
|
551
|
+
}, _callee20);
|
|
552
|
+
})));
|
|
553
|
+
it('should call invalidateData when invalidate option is enabled', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee21() {
|
|
554
|
+
var dm, queryKey, initialData, cache, invalidateSpy;
|
|
555
|
+
return _regeneratorRuntime().wrap(function _callee21$(_context21) {
|
|
556
|
+
while (1) switch (_context21.prev = _context21.next) {
|
|
557
|
+
case 0:
|
|
558
|
+
dm = new ClientDataManager({
|
|
559
|
+
normalizerConfig: {
|
|
560
|
+
devLogging: false,
|
|
561
|
+
invalidate: true
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
dm.queryNormalizer.subscribe();
|
|
565
|
+
queryKey = ['users'];
|
|
566
|
+
initialData = [{
|
|
567
|
+
id: '1',
|
|
568
|
+
name: 'User 1'
|
|
569
|
+
}];
|
|
570
|
+
dm.queryClient.setQueryData(queryKey, initialData);
|
|
571
|
+
dm.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
572
|
+
|
|
573
|
+
// Set query state to success so it can be invalidated
|
|
574
|
+
cache = dm.queryClient.getQueryCache().find({
|
|
575
|
+
queryKey: queryKey
|
|
576
|
+
});
|
|
577
|
+
cache === null || cache === void 0 || cache.setState({
|
|
578
|
+
status: 'success',
|
|
579
|
+
fetchStatus: 'idle',
|
|
580
|
+
isInvalidated: false
|
|
581
|
+
});
|
|
582
|
+
invalidateSpy = jest.spyOn(dm, 'invalidateData');
|
|
583
|
+
dm.update({
|
|
584
|
+
id: '1',
|
|
585
|
+
name: 'Updated'
|
|
586
|
+
});
|
|
587
|
+
expect(invalidateSpy).toHaveBeenCalled();
|
|
588
|
+
invalidateSpy.mockRestore();
|
|
589
|
+
dm.queryNormalizer.unsubscribe();
|
|
590
|
+
dm.queryClient.clear();
|
|
591
|
+
case 14:
|
|
592
|
+
case "end":
|
|
593
|
+
return _context21.stop();
|
|
594
|
+
}
|
|
595
|
+
}, _callee21);
|
|
596
|
+
})));
|
|
597
|
+
it('should trigger refetch when mutation has fewer keys and normy returns empty queriesToUpdate', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee22() {
|
|
598
|
+
var dm, queryKey, initialData, cache, originalGetQueriesToUpdate, invalidateSpy;
|
|
599
|
+
return _regeneratorRuntime().wrap(function _callee22$(_context22) {
|
|
600
|
+
while (1) switch (_context22.prev = _context22.next) {
|
|
601
|
+
case 0:
|
|
602
|
+
// checkMutationObjectsKeys is called only when getQueriesToUpdate returns []
|
|
603
|
+
// This happens when normy can't compute a diff (e.g., structure mismatch)
|
|
604
|
+
dm = new ClientDataManager({
|
|
605
|
+
normalizerConfig: {
|
|
606
|
+
devLogging: false,
|
|
607
|
+
invalidate: true // Need to enable invalidate for refetch to work
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
dm.queryNormalizer.subscribe();
|
|
611
|
+
queryKey = ['users']; // Store data with more keys
|
|
612
|
+
initialData = [{
|
|
613
|
+
id: '1',
|
|
614
|
+
name: 'User 1',
|
|
615
|
+
email: 'user@test.com',
|
|
616
|
+
age: 25
|
|
617
|
+
}];
|
|
618
|
+
dm.queryClient.setQueryData(queryKey, initialData);
|
|
619
|
+
dm.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
620
|
+
|
|
621
|
+
// Set query state to success so it can be invalidated
|
|
622
|
+
cache = dm.queryClient.getQueryCache().find({
|
|
623
|
+
queryKey: queryKey
|
|
624
|
+
});
|
|
625
|
+
cache === null || cache === void 0 || cache.setState({
|
|
626
|
+
status: 'success',
|
|
627
|
+
fetchStatus: 'idle',
|
|
628
|
+
isInvalidated: false
|
|
629
|
+
});
|
|
630
|
+
|
|
631
|
+
// Mock getQueriesToUpdate to return empty array (simulating normy can't compute diff)
|
|
632
|
+
originalGetQueriesToUpdate = dm.normalizer.getQueriesToUpdate;
|
|
633
|
+
dm.normalizer.getQueriesToUpdate = jest.fn().mockReturnValue([]);
|
|
634
|
+
invalidateSpy = jest.spyOn(dm.queryClient, 'invalidateQueries'); // Update with fewer keys - should trigger refetch via checkMutationObjectsKeys
|
|
635
|
+
dm.update({
|
|
636
|
+
id: '1',
|
|
637
|
+
name: 'Updated'
|
|
638
|
+
});
|
|
639
|
+
|
|
640
|
+
// Check if invalidation was triggered due to fewer keys
|
|
641
|
+
expect(invalidateSpy).toHaveBeenCalled();
|
|
642
|
+
|
|
643
|
+
// Restore mocks
|
|
644
|
+
dm.normalizer.getQueriesToUpdate = originalGetQueriesToUpdate;
|
|
645
|
+
invalidateSpy.mockRestore();
|
|
646
|
+
dm.queryNormalizer.unsubscribe();
|
|
647
|
+
dm.queryClient.clear();
|
|
648
|
+
case 17:
|
|
649
|
+
case "end":
|
|
650
|
+
return _context22.stop();
|
|
651
|
+
}
|
|
652
|
+
}, _callee22);
|
|
653
|
+
})));
|
|
654
|
+
});
|
|
510
655
|
});
|
|
511
656
|
// #sourceMappingURL=threeLevelIntegration.test.js.map
|