@gravity-ui/data-source 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +752 -15
  2. package/build/cjs/core/index.d.ts +1 -0
  3. package/build/cjs/core/index.js.map +1 -1
  4. package/build/cjs/core/types/DataManager.d.ts +5 -0
  5. package/build/cjs/core/types/DataManager.js.map +1 -1
  6. package/build/cjs/core/types/Normalizer.d.ts +29 -0
  7. package/build/cjs/core/types/Normalizer.js +6 -0
  8. package/build/cjs/core/types/Normalizer.js.map +1 -0
  9. package/build/cjs/react/DataManagerProvider.d.ts +7 -0
  10. package/build/cjs/react/DataManagerProvider.js +19 -0
  11. package/build/cjs/react/DataManagerProvider.js.map +1 -0
  12. package/build/cjs/react/__tests__/DataManagerContext.test.js +7 -6
  13. package/build/cjs/react/__tests__/DataManagerContext.test.js.map +1 -1
  14. package/build/cjs/react/__tests__/withDataManager.test.js +3 -0
  15. package/build/cjs/react/__tests__/withDataManager.test.js.map +1 -1
  16. package/build/cjs/react/index.d.ts +2 -0
  17. package/build/cjs/react/index.js +8 -0
  18. package/build/cjs/react/index.js.map +1 -1
  19. package/build/cjs/react-query/ClientDataManager.d.ts +16 -3
  20. package/build/cjs/react-query/ClientDataManager.js +158 -13
  21. package/build/cjs/react-query/ClientDataManager.js.map +1 -1
  22. package/build/cjs/react-query/DataSourceProvider.d.ts +7 -0
  23. package/build/cjs/react-query/DataSourceProvider.js +35 -0
  24. package/build/cjs/react-query/DataSourceProvider.js.map +1 -0
  25. package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js +177 -0
  26. package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
  27. package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js +100 -0
  28. package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
  29. package/build/cjs/react-query/__tests__/subscriptions.test.js +1180 -0
  30. package/build/cjs/react-query/__tests__/subscriptions.test.js.map +1 -0
  31. package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js +659 -0
  32. package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
  33. package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js +229 -0
  34. package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
  35. package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js +195 -0
  36. package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
  37. package/build/cjs/react-query/impl/infinite/hooks.js +4 -1
  38. package/build/cjs/react-query/impl/infinite/hooks.js.map +1 -1
  39. package/build/cjs/react-query/impl/infinite/types.d.ts +2 -2
  40. package/build/cjs/react-query/impl/infinite/types.js.map +1 -1
  41. package/build/cjs/react-query/impl/infinite/utils.js +6 -1
  42. package/build/cjs/react-query/impl/infinite/utils.js.map +1 -1
  43. package/build/cjs/react-query/impl/plain/hooks.js +4 -1
  44. package/build/cjs/react-query/impl/plain/hooks.js.map +1 -1
  45. package/build/cjs/react-query/impl/plain/types.d.ts +2 -2
  46. package/build/cjs/react-query/impl/plain/types.js.map +1 -1
  47. package/build/cjs/react-query/impl/plain/utils.js +6 -1
  48. package/build/cjs/react-query/impl/plain/utils.js.map +1 -1
  49. package/build/cjs/react-query/index.d.ts +2 -0
  50. package/build/cjs/react-query/index.js +7 -0
  51. package/build/cjs/react-query/index.js.map +1 -1
  52. package/build/cjs/react-query/types/normalizer.d.ts +21 -0
  53. package/build/cjs/react-query/types/normalizer.js +6 -0
  54. package/build/cjs/react-query/types/normalizer.js.map +1 -0
  55. package/build/cjs/react-query/types/options.d.ts +12 -0
  56. package/build/cjs/react-query/types/options.js.map +1 -1
  57. package/build/cjs/react-query/types/query-meta.d.ts +12 -0
  58. package/build/cjs/react-query/utils/__tests__/checkMutationObjectsKeys.test.js +295 -0
  59. package/build/cjs/react-query/utils/__tests__/checkMutationObjectsKeys.test.js.map +1 -0
  60. package/build/cjs/react-query/utils/checkMutationObjectsKeys.d.ts +17 -0
  61. package/build/cjs/react-query/utils/checkMutationObjectsKeys.js +88 -0
  62. package/build/cjs/react-query/utils/checkMutationObjectsKeys.js.map +1 -0
  63. package/build/cjs/react-query/utils/normalize.d.ts +22 -0
  64. package/build/cjs/react-query/utils/normalize.js +150 -0
  65. package/build/cjs/react-query/utils/normalize.js.map +1 -0
  66. package/build/cjs/react-query/utils/parseQueryKey.d.ts +2 -0
  67. package/build/cjs/react-query/utils/parseQueryKey.js +10 -0
  68. package/build/cjs/react-query/utils/parseQueryKey.js.map +1 -0
  69. package/build/cjs/react-query/utils/warn.d.ts +1 -0
  70. package/build/cjs/react-query/utils/warn.js +15 -0
  71. package/build/cjs/react-query/utils/warn.js.map +1 -0
  72. package/build/cjs/react-query/utils/warnDisabledRefetch.d.ts +1 -0
  73. package/build/cjs/react-query/utils/warnDisabledRefetch.js +11 -0
  74. package/build/cjs/react-query/utils/warnDisabledRefetch.js.map +1 -0
  75. package/build/esm/core/index.d.ts +1 -0
  76. package/build/esm/core/index.js.map +1 -1
  77. package/build/esm/core/types/DataManager.d.ts +5 -0
  78. package/build/esm/core/types/DataManager.js.map +1 -1
  79. package/build/esm/core/types/Normalizer.d.ts +29 -0
  80. package/build/esm/core/types/Normalizer.js +2 -0
  81. package/build/esm/core/types/Normalizer.js.map +1 -0
  82. package/build/esm/react/DataManagerProvider.d.ts +7 -0
  83. package/build/esm/react/DataManagerProvider.js +12 -0
  84. package/build/esm/react/DataManagerProvider.js.map +1 -0
  85. package/build/esm/react/__tests__/DataManagerContext.test.js +7 -6
  86. package/build/esm/react/__tests__/DataManagerContext.test.js.map +1 -1
  87. package/build/esm/react/__tests__/withDataManager.test.js +3 -0
  88. package/build/esm/react/__tests__/withDataManager.test.js.map +1 -1
  89. package/build/esm/react/index.d.ts +2 -0
  90. package/build/esm/react/index.js +1 -0
  91. package/build/esm/react/index.js.map +1 -1
  92. package/build/esm/react-query/ClientDataManager.d.ts +16 -3
  93. package/build/esm/react-query/ClientDataManager.js +152 -7
  94. package/build/esm/react-query/ClientDataManager.js.map +1 -1
  95. package/build/esm/react-query/DataSourceProvider.d.ts +7 -0
  96. package/build/esm/react-query/DataSourceProvider.js +28 -0
  97. package/build/esm/react-query/DataSourceProvider.js.map +1 -0
  98. package/build/esm/react-query/__tests__/createQueryNormalizer.test.js +174 -0
  99. package/build/esm/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
  100. package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js +98 -0
  101. package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
  102. package/build/esm/react-query/__tests__/subscriptions.test.js +1176 -0
  103. package/build/esm/react-query/__tests__/subscriptions.test.js.map +1 -0
  104. package/build/esm/react-query/__tests__/threeLevelIntegration.test.js +656 -0
  105. package/build/esm/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
  106. package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js +227 -0
  107. package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
  108. package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js +192 -0
  109. package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
  110. package/build/esm/react-query/impl/infinite/hooks.js +5 -2
  111. package/build/esm/react-query/impl/infinite/hooks.js.map +1 -1
  112. package/build/esm/react-query/impl/infinite/types.d.ts +2 -2
  113. package/build/esm/react-query/impl/infinite/types.js.map +1 -1
  114. package/build/esm/react-query/impl/infinite/utils.js +6 -1
  115. package/build/esm/react-query/impl/infinite/utils.js.map +1 -1
  116. package/build/esm/react-query/impl/plain/hooks.js +5 -2
  117. package/build/esm/react-query/impl/plain/hooks.js.map +1 -1
  118. package/build/esm/react-query/impl/plain/types.d.ts +2 -2
  119. package/build/esm/react-query/impl/plain/types.js.map +1 -1
  120. package/build/esm/react-query/impl/plain/utils.js +6 -1
  121. package/build/esm/react-query/impl/plain/utils.js.map +1 -1
  122. package/build/esm/react-query/index.d.ts +2 -0
  123. package/build/esm/react-query/index.js +1 -0
  124. package/build/esm/react-query/index.js.map +1 -1
  125. package/build/esm/react-query/types/normalizer.d.ts +21 -0
  126. package/build/esm/react-query/types/normalizer.js +2 -0
  127. package/build/esm/react-query/types/normalizer.js.map +1 -0
  128. package/build/esm/react-query/types/options.d.ts +12 -0
  129. package/build/esm/react-query/types/options.js.map +1 -1
  130. package/build/esm/react-query/types/query-meta.d.ts +12 -0
  131. package/build/esm/react-query/utils/__tests__/checkMutationObjectsKeys.test.js +292 -0
  132. package/build/esm/react-query/utils/__tests__/checkMutationObjectsKeys.test.js.map +1 -0
  133. package/build/esm/react-query/utils/checkMutationObjectsKeys.d.ts +17 -0
  134. package/build/esm/react-query/utils/checkMutationObjectsKeys.js +81 -0
  135. package/build/esm/react-query/utils/checkMutationObjectsKeys.js.map +1 -0
  136. package/build/esm/react-query/utils/normalize.d.ts +22 -0
  137. package/build/esm/react-query/utils/normalize.js +143 -0
  138. package/build/esm/react-query/utils/normalize.js.map +1 -0
  139. package/build/esm/react-query/utils/parseQueryKey.d.ts +2 -0
  140. package/build/esm/react-query/utils/parseQueryKey.js +4 -0
  141. package/build/esm/react-query/utils/parseQueryKey.js.map +1 -0
  142. package/build/esm/react-query/utils/warn.d.ts +1 -0
  143. package/build/esm/react-query/utils/warn.js +9 -0
  144. package/build/esm/react-query/utils/warn.js.map +1 -0
  145. package/build/esm/react-query/utils/warnDisabledRefetch.d.ts +1 -0
  146. package/build/esm/react-query/utils/warnDisabledRefetch.js +5 -0
  147. package/build/esm/react-query/utils/warnDisabledRefetch.js.map +1 -0
  148. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_checkMutationObjectsKeys","_interopRequireDefault","e","__esModule","default","createMockNormalizer","objects","normalizer","createNormalizer","Object","keys","forEach","key","id","replace","setQuery","concat","describe","it","result","checkMutationObjectsKeys","expect","toEqual","needsRefetch","details","name","value","a","b","c","email","age","toBe","toHaveLength","missingKeys","toContain","field1","field2","field3","arrayContaining","oldField","anotherField","newField","extra","field","getNormalizationObjectKey","obj","_typeof","String","_id","undefined","mutationData","i","push"],"sources":["checkMutationObjectsKeys.test.ts"],"sourcesContent":["import type {Data} from '@normy/core';\nimport {createNormalizer} from '@normy/core';\n\nimport {checkMutationObjectsKeys} from '../checkMutationObjectsKeys';\n\nconst createMockNormalizer = (objects: Record<string, Record<string, unknown>>) => {\n const normalizer = createNormalizer({});\n\n // Manually set normalized data for testing\n Object.keys(objects).forEach((key) => {\n const id = key.replace('@@', '');\n // Use object as-is, id is already included in objects[key]\n normalizer.setQuery(`test-${id}`, objects[key] as Data);\n });\n\n return normalizer;\n};\n\ndescribe('checkMutationObjectsKeys', () => {\n describe('when mutation data has no normalizable objects', () => {\n it('should return needsRefetch: false for primitive values', () => {\n const normalizer = createMockNormalizer({});\n\n const result = checkMutationObjectsKeys('string value', normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n\n it('should return needsRefetch: false for null', () => {\n const normalizer = createMockNormalizer({});\n\n const result = checkMutationObjectsKeys(null, normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n\n it('should return needsRefetch: false for empty array', () => {\n const normalizer = createMockNormalizer({});\n\n const result = checkMutationObjectsKeys([], normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n\n it('should return needsRefetch: false for object without id', () => {\n const normalizer = createMockNormalizer({});\n\n const result = checkMutationObjectsKeys({name: 'test'}, normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n });\n\n describe('when mutation object is not in normalized store', () => {\n it('should return needsRefetch: false for new object', () => {\n const normalizer = createMockNormalizer({});\n\n const result = checkMutationObjectsKeys({id: 'new-id', name: 'test'}, normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n });\n\n describe('when mutation has same keys as normalized data', () => {\n it('should return needsRefetch: false for identical keys', () => {\n const normalizer = createMockNormalizer({\n '@@1': {id: '1', name: 'test', value: 100},\n });\n\n const result = checkMutationObjectsKeys(\n {id: '1', name: 'updated', value: 200},\n normalizer,\n );\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n\n it('should return needsRefetch: false when keys are same but in different order', () => {\n const normalizer = createMockNormalizer({\n '@@1': {id: '1', a: 1, b: 2, c: 3},\n });\n\n const result = checkMutationObjectsKeys({c: 30, a: 10, b: 20, id: '1'}, normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n });\n\n describe('when mutation has fewer keys than normalized data', () => {\n it('should return needsRefetch: true with missing keys', () => {\n const normalizer = createMockNormalizer({\n '@@1': {id: '1', name: 'test', email: 'test@example.com', age: 25},\n });\n\n const result = checkMutationObjectsKeys({id: '1', name: 'updated'}, normalizer);\n\n expect(result.needsRefetch).toBe(true);\n expect(result.details).toHaveLength(1);\n expect(result.details[0].id).toBe('1');\n expect(result.details[0].missingKeys).toContain('email');\n expect(result.details[0].missingKeys).toContain('age');\n });\n\n it('should return needsRefetch: true when only id is present', () => {\n const normalizer = createMockNormalizer({\n '@@1': {id: '1', field1: 'a', field2: 'b', field3: 'c'},\n });\n\n const result = checkMutationObjectsKeys({id: '1'}, normalizer);\n\n expect(result.needsRefetch).toBe(true);\n expect(result.details[0].missingKeys).toEqual(\n expect.arrayContaining(['field1', 'field2', 'field3']),\n );\n });\n });\n\n describe('when mutation has different keys than normalized data', () => {\n it('should return needsRefetch: true when mutation has fewer keys even if some are different', () => {\n const normalizer = createMockNormalizer({\n '@@1': {id: '1', oldField: 'old', anotherField: 'value'},\n });\n\n // Mutation has fewer keys (2 vs 3), so needsRefetch should be true\n const result = checkMutationObjectsKeys({id: '1', newField: 'new'}, normalizer);\n\n expect(result.needsRefetch).toBe(true);\n expect(result.details[0].missingKeys).toContain('oldField');\n expect(result.details[0].missingKeys).toContain('anotherField');\n });\n });\n\n describe('with array of objects', () => {\n it('should check all objects in array', () => {\n const normalizer = createMockNormalizer({\n '@@1': {id: '1', name: 'first', extra: 'data'},\n '@@2': {id: '2', name: 'second', extra: 'data'},\n });\n\n const result = checkMutationObjectsKeys(\n [\n {id: '1', name: 'updated'},\n {id: '2', name: 'updated'},\n ],\n normalizer,\n );\n\n expect(result.needsRefetch).toBe(true);\n expect(result.details).toHaveLength(2);\n expect(result.details[0].id).toBe('1');\n expect(result.details[1].id).toBe('2');\n });\n\n it('should handle nested arrays', () => {\n const normalizer = createMockNormalizer({\n '@@1': {id: '1', field: 'a', extra: 'b'},\n '@@2': {id: '2', field: 'c', extra: 'd'},\n });\n\n const result = checkMutationObjectsKeys(\n [[{id: '1', field: 'updated'}], [{id: '2', field: 'updated'}]],\n normalizer,\n );\n\n expect(result.needsRefetch).toBe(true);\n expect(result.details).toHaveLength(2);\n });\n });\n\n describe('with custom getNormalizationObjectKey', () => {\n it('should use custom key function', () => {\n const normalizer = createNormalizer({\n getNormalizationObjectKey: (obj) =>\n obj && typeof obj === 'object' && '_id' in obj\n ? String((obj as {_id: unknown})._id)\n : undefined,\n });\n\n // Set query with custom key\n normalizer.setQuery('test', {_id: 'custom-1', name: 'test', extra: 'field'});\n\n const result = checkMutationObjectsKeys(\n {_id: 'custom-1', name: 'updated'},\n normalizer,\n {\n getNormalizationObjectKey: (obj) =>\n '_id' in obj ? String(obj._id) : undefined,\n },\n );\n\n expect(result.needsRefetch).toBe(true);\n expect(result.details[0].id).toBe('custom-1');\n });\n });\n\n describe('edge cases', () => {\n it('should handle object with undefined id', () => {\n const normalizer = createMockNormalizer({});\n\n const result = checkMutationObjectsKeys({id: undefined, name: 'test'}, normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n\n it('should handle object with numeric id', () => {\n const normalizer = createMockNormalizer({\n '@@123': {id: '123', value: 'test', extra: 'field'},\n });\n\n const result = checkMutationObjectsKeys({id: '123', value: 'updated'}, normalizer);\n\n expect(result.needsRefetch).toBe(true);\n });\n\n it('should handle large number of objects', () => {\n const objects: Record<string, Record<string, unknown>> = {};\n const mutationData: Array<{id: string; name: string}> = [];\n\n for (let i = 0; i < 100; i++) {\n objects[`@@${i}`] = {id: String(i), name: `item-${i}`, extra: 'field'};\n mutationData.push({id: String(i), name: `updated-${i}`});\n }\n\n const normalizer = createMockNormalizer(objects);\n\n const result = checkMutationObjectsKeys(mutationData, normalizer);\n\n expect(result.needsRefetch).toBe(true);\n expect(result.details).toHaveLength(100);\n });\n\n it('should handle empty object', () => {\n const normalizer = createMockNormalizer({});\n\n const result = checkMutationObjectsKeys({}, normalizer);\n\n expect(result).toEqual({\n needsRefetch: false,\n details: [],\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import type { Normalizer } from '../../core';
2
+ type DataObject = Record<string, unknown>;
3
+ type NormalizableObject = DataObject & {
4
+ id?: string;
5
+ };
6
+ export interface AffectedObject {
7
+ id: string;
8
+ missingKeys: string[];
9
+ }
10
+ export interface MutationObjectsKeysResult {
11
+ needsRefetch: boolean;
12
+ details: AffectedObject[];
13
+ }
14
+ export declare const checkMutationObjectsKeys: (mutationData: unknown, normalizer: Normalizer, config?: {
15
+ getNormalizationObjectKey?: (obj: NormalizableObject) => string | undefined;
16
+ }) => MutationObjectsKeysResult;
17
+ export {};
@@ -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,22 @@
1
+ import type { Data } from '@normy/core';
2
+ import type { QueryClient } from '@tanstack/react-query';
3
+ import type { Normalizer, NormalizerConfig } from '../../core/types/Normalizer';
4
+ export declare const createQueryNormalizer: (normalizer: Normalizer | undefined, queryClient: QueryClient, config: boolean | NormalizerConfig | undefined, optimisticUpdate: (mutationData: Data) => void, invalidateData: (data: Data) => void) => {
5
+ /** Get normalized data */
6
+ getNormalizedData: () => import("@normy/core/types/types").NormalizedData;
7
+ /** Set normalized data (for manual updates, WebSocket, etc.) */
8
+ setNormalizedData: (data: Data) => void;
9
+ /** Clear all normalized data */
10
+ clear: () => void;
11
+ /** Get object by ID */
12
+ getObjectById: <T extends Data>(id: string, exampleObject?: T) => T | undefined;
13
+ /** Get query fragment */
14
+ getQueryFragment: <T extends Data>(fragment: Data, exampleObject?: T) => T | undefined;
15
+ /** Get dependent queries by data */
16
+ getDependentQueries: (mutationData: Data) => (readonly unknown[])[];
17
+ /** Get dependent queries by IDs */
18
+ getDependentQueriesByIds: (ids: ReadonlyArray<string>) => (readonly unknown[])[];
19
+ /** Subscribe to QueryCache changes */
20
+ subscribe: () => void;
21
+ unsubscribe: () => void;
22
+ } | undefined;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createQueryNormalizer = void 0;
7
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var shouldInvalidateData = function shouldInvalidateData(globalConfig, mutationConfig) {
10
+ if (mutationConfig === false) {
11
+ return false;
12
+ }
13
+ if (!globalConfig) {
14
+ return false;
15
+ }
16
+ return true;
17
+ };
18
+ var shouldUpdateOptimistically = function shouldUpdateOptimistically(globalConfig, mutationConfig) {
19
+ if (mutationConfig === false) {
20
+ return false;
21
+ }
22
+ if (typeof mutationConfig === 'boolean' && mutationConfig || (0, _typeof2.default)(mutationConfig) === 'object' && mutationConfig) {
23
+ return true;
24
+ }
25
+ if (!globalConfig) {
26
+ return false;
27
+ }
28
+ return true;
29
+ };
30
+ var getOptimisticProps = function getOptimisticProps(globalConfig, mutationConfig) {
31
+ var globalAutoRollback = (0, _typeof2.default)(globalConfig) === 'object' ? globalConfig.autoCalculateRollback : undefined;
32
+ var mutationAutoRollback = (0, _typeof2.default)(mutationConfig) === 'object' ? mutationConfig.autoCalculateRollback : undefined;
33
+ var globalDevLogging = (0, _typeof2.default)(globalConfig) === 'object' ? globalConfig.devLogging : undefined;
34
+ var mutationDevLogging = (0, _typeof2.default)(mutationConfig) === 'object' ? mutationConfig.devLogging : undefined;
35
+ return {
36
+ autoRollback: mutationAutoRollback !== null && mutationAutoRollback !== void 0 ? mutationAutoRollback : globalAutoRollback,
37
+ devLogging: mutationDevLogging !== null && mutationDevLogging !== void 0 ? mutationDevLogging : globalDevLogging
38
+ };
39
+ };
40
+ var createQueryNormalizer = exports.createQueryNormalizer = function createQueryNormalizer(normalizer, queryClient, config, optimisticUpdate, invalidateData) {
41
+ if (!normalizer || !config) {
42
+ return undefined;
43
+ }
44
+ var globalOptimistic = (0, _typeof2.default)(config) === 'object' && 'optimistic' in config ? config.optimistic : false;
45
+ var globalInvalidateData = (0, _typeof2.default)(config) === 'object' && 'invalidate' in config ? config.invalidate : false;
46
+ var unsubscribeQueryCache = null;
47
+ var unsubscribeMutationCache = null;
48
+ return {
49
+ /** Get normalized data */
50
+ getNormalizedData: normalizer.getNormalizedData,
51
+ /** Set normalized data (for manual updates, WebSocket, etc.) */
52
+ setNormalizedData: function setNormalizedData(data) {
53
+ return optimisticUpdate(data);
54
+ },
55
+ /** Clear all normalized data */
56
+ clear: normalizer.clearNormalizedData,
57
+ /** Get object by ID */
58
+ getObjectById: normalizer.getObjectById,
59
+ /** Get query fragment */
60
+ getQueryFragment: normalizer.getQueryFragment,
61
+ /** Get dependent queries by data */
62
+ getDependentQueries: function getDependentQueries(mutationData) {
63
+ return normalizer.getDependentQueries(mutationData).map(function (key) {
64
+ return JSON.parse(key);
65
+ });
66
+ },
67
+ /** Get dependent queries by IDs */
68
+ getDependentQueriesByIds: function getDependentQueriesByIds(ids) {
69
+ return normalizer.getDependentQueriesByIds(ids).map(function (key) {
70
+ return JSON.parse(key);
71
+ });
72
+ },
73
+ /** Subscribe to QueryCache changes */
74
+ subscribe: function subscribe() {
75
+ // Subscribe to QueryCache (query additions/updates/removals)
76
+ unsubscribeQueryCache = queryClient.getQueryCache().subscribe(function (event) {
77
+ var _queryOptions$normali;
78
+ var queryKeyStr = JSON.stringify(event.query.queryKey);
79
+ if (event.type === 'removed') {
80
+ normalizer.removeQuery(queryKeyStr);
81
+ return;
82
+ }
83
+
84
+ // Check if the query should be normalized
85
+ // At this point options are already merged (DataSource + Hook)
86
+ var queryOptions = event.query.options;
87
+ var queryNormalize = (_queryOptions$normali = queryOptions === null || queryOptions === void 0 ? void 0 : queryOptions.normalize) !== null && _queryOptions$normali !== void 0 ? _queryOptions$normali : true;
88
+ if (!queryNormalize) {
89
+ return;
90
+ }
91
+ if (event.type === 'added' && event.query.state.data !== undefined) {
92
+ normalizer.setQuery(queryKeyStr, event.query.state.data);
93
+ } else if (event.type === 'updated' && event.action.type === 'success' && event.action.data !== undefined) {
94
+ normalizer.setQuery(queryKeyStr, event.action.data);
95
+ }
96
+ });
97
+
98
+ // Subscribe to MutationCache for normalization + optimistic updates
99
+ unsubscribeMutationCache = queryClient.getMutationCache().subscribe(function (event) {
100
+ var _event$mutation;
101
+ // Cast to extended type with additional configs, if available
102
+ var mutationOptions = (_event$mutation = event.mutation) === null || _event$mutation === void 0 ? void 0 : _event$mutation.options;
103
+ var mutationQueryNormalize = mutationOptions === null || mutationOptions === void 0 ? void 0 : mutationOptions.normalize;
104
+ var mutationQueryOptimistic = mutationOptions === null || mutationOptions === void 0 ? void 0 : mutationOptions.optimistic;
105
+ var mutationQueryInvalidateData = mutationOptions === null || mutationOptions === void 0 ? void 0 : mutationOptions.invalidate;
106
+ if (shouldInvalidateData(globalInvalidateData, mutationQueryInvalidateData)) {
107
+ if (event.type === 'updated' && event.action.type === 'success' && event.action.data) {
108
+ invalidateData(event.action.data);
109
+ }
110
+ }
111
+ if (!mutationQueryNormalize || !shouldUpdateOptimistically(globalOptimistic, mutationQueryOptimistic)) {
112
+ return;
113
+ }
114
+ var _getOptimisticProps = getOptimisticProps(globalOptimistic, mutationQueryOptimistic),
115
+ autoRollback = _getOptimisticProps.autoRollback,
116
+ devLogging = _getOptimisticProps.devLogging;
117
+ if (event.type === 'updated' && event.action.type === 'success' && event.action.data) {
118
+ optimisticUpdate(event.action.data);
119
+ } else if (event.type === 'updated' && event.action.type === 'pending') {
120
+ var context = event.mutation.state.context;
121
+ if (context !== null && context !== void 0 && context.optimisticData) {
122
+ if (!context.rollbackData && mutationQueryOptimistic && autoRollback !== false) {
123
+ context.rollbackData = normalizer.getCurrentData(context.optimisticData);
124
+ if (devLogging) {
125
+ console.log('[OptimisticUpdate] Auto-calculated rollbackData:', context.rollbackData);
126
+ }
127
+ }
128
+ optimisticUpdate(context.optimisticData);
129
+ }
130
+ } else if (event.type === 'updated' && event.action.type === 'error') {
131
+ var _context = event.mutation.state.context;
132
+ if (_context !== null && _context !== void 0 && _context.rollbackData) {
133
+ if (devLogging) {
134
+ console.log('[OptimisticUpdate] Rolling back changes');
135
+ }
136
+ optimisticUpdate(_context.rollbackData);
137
+ }
138
+ }
139
+ });
140
+ },
141
+ unsubscribe: function unsubscribe() {
142
+ var _unsubscribeQueryCach, _unsubscribeMutationC;
143
+ (_unsubscribeQueryCach = unsubscribeQueryCache) === null || _unsubscribeQueryCach === void 0 || _unsubscribeQueryCach();
144
+ (_unsubscribeMutationC = unsubscribeMutationCache) === null || _unsubscribeMutationC === void 0 || _unsubscribeMutationC();
145
+ unsubscribeQueryCache = null;
146
+ unsubscribeMutationCache = null;
147
+ }
148
+ };
149
+ };
150
+ // #sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["shouldInvalidateData","globalConfig","mutationConfig","shouldUpdateOptimistically","_typeof","getOptimisticProps","globalAutoRollback","autoCalculateRollback","undefined","mutationAutoRollback","globalDevLogging","devLogging","mutationDevLogging","autoRollback","createQueryNormalizer","exports","normalizer","queryClient","config","optimisticUpdate","invalidateData","globalOptimistic","optimistic","globalInvalidateData","invalidate","unsubscribeQueryCache","unsubscribeMutationCache","getNormalizedData","setNormalizedData","data","clear","clearNormalizedData","getObjectById","getQueryFragment","getDependentQueries","mutationData","map","key","JSON","parse","getDependentQueriesByIds","ids","subscribe","getQueryCache","event","_queryOptions$normali","queryKeyStr","stringify","query","queryKey","type","removeQuery","queryOptions","options","queryNormalize","normalize","state","setQuery","action","getMutationCache","_event$mutation","mutationOptions","mutation","mutationQueryNormalize","mutationQueryOptimistic","mutationQueryInvalidateData","_getOptimisticProps","context","optimisticData","rollbackData","getCurrentData","console","log","_context","unsubscribe","_unsubscribeQueryCach","_unsubscribeMutationC"],"sources":["normalize.ts"],"sourcesContent":["import type {Data} from '@normy/core';\nimport type {QueryClient, QueryKey} from '@tanstack/react-query';\n\nimport type {Normalizer, NormalizerConfig, OptimisticConfig} from '../../core/types/Normalizer';\nimport type {QueryDataAdditionalOptions} from '../types/options';\n\ninterface QueryNormalizeOptions {\n normalize?: boolean;\n optimistic?: boolean | OptimisticConfig;\n invalidate?: boolean;\n}\n\nconst shouldInvalidateData = (globalConfig?: boolean, mutationConfig?: boolean): boolean => {\n if (mutationConfig === false) {\n return false;\n }\n\n if (!globalConfig) {\n return false;\n }\n\n return true;\n};\n\nconst shouldUpdateOptimistically = (\n globalConfig?: boolean | OptimisticConfig,\n mutationConfig?: boolean | OptimisticConfig,\n): boolean => {\n if (mutationConfig === false) {\n return false;\n }\n\n if (\n (typeof mutationConfig === 'boolean' && mutationConfig) ||\n (typeof mutationConfig === 'object' && mutationConfig)\n ) {\n return true;\n }\n\n if (!globalConfig) {\n return false;\n }\n\n return true;\n};\n\nconst getOptimisticProps = (\n globalConfig?: boolean | OptimisticConfig,\n mutationConfig?: boolean | OptimisticConfig,\n) => {\n const globalAutoRollback =\n typeof globalConfig === 'object' ? globalConfig.autoCalculateRollback : undefined;\n const mutationAutoRollback =\n typeof mutationConfig === 'object' ? mutationConfig.autoCalculateRollback : undefined;\n const globalDevLogging = typeof globalConfig === 'object' ? globalConfig.devLogging : undefined;\n const mutationDevLogging =\n typeof mutationConfig === 'object' ? mutationConfig.devLogging : undefined;\n\n return {\n autoRollback: mutationAutoRollback ?? globalAutoRollback,\n devLogging: mutationDevLogging ?? globalDevLogging,\n };\n};\n\nexport const createQueryNormalizer = (\n normalizer: Normalizer | undefined,\n queryClient: QueryClient,\n config: boolean | NormalizerConfig | undefined,\n optimisticUpdate: (mutationData: Data) => void,\n invalidateData: (data: Data) => void,\n) => {\n if (!normalizer || !config) {\n return undefined;\n }\n\n const globalOptimistic =\n typeof config === 'object' && 'optimistic' in config ? config.optimistic : false;\n\n const globalInvalidateData =\n typeof config === 'object' && 'invalidate' in config ? config.invalidate : false;\n\n let unsubscribeQueryCache: (() => void) | null = null;\n let unsubscribeMutationCache: (() => void) | null = null;\n\n return {\n /** Get normalized data */\n getNormalizedData: normalizer.getNormalizedData,\n /** Set normalized data (for manual updates, WebSocket, etc.) */\n setNormalizedData: (data: Data) => optimisticUpdate(data),\n /** Clear all normalized data */\n clear: normalizer.clearNormalizedData,\n /** Get object by ID */\n getObjectById: normalizer.getObjectById,\n /** Get query fragment */\n getQueryFragment: normalizer.getQueryFragment,\n /** Get dependent queries by data */\n getDependentQueries: (mutationData: Data) =>\n normalizer.getDependentQueries(mutationData).map((key) => JSON.parse(key) as QueryKey),\n /** Get dependent queries by IDs */\n getDependentQueriesByIds: (ids: ReadonlyArray<string>) =>\n normalizer.getDependentQueriesByIds(ids).map((key) => JSON.parse(key) as QueryKey),\n /** Subscribe to QueryCache changes */\n subscribe: () => {\n // Subscribe to QueryCache (query additions/updates/removals)\n unsubscribeQueryCache = queryClient.getQueryCache().subscribe((event) => {\n const queryKeyStr = JSON.stringify(event.query.queryKey);\n\n if (event.type === 'removed') {\n normalizer.removeQuery(queryKeyStr);\n\n return;\n }\n\n // Check if the query should be normalized\n // At this point options are already merged (DataSource + Hook)\n const queryOptions = event.query.options as QueryDataAdditionalOptions;\n\n const queryNormalize = queryOptions?.normalize ?? true;\n\n if (!queryNormalize) {\n return;\n }\n\n if (event.type === 'added' && event.query.state.data !== undefined) {\n normalizer.setQuery(queryKeyStr, event.query.state.data as Data);\n } else if (\n event.type === 'updated' &&\n event.action.type === 'success' &&\n event.action.data !== undefined\n ) {\n normalizer.setQuery(queryKeyStr, event.action.data as Data);\n }\n });\n\n // Subscribe to MutationCache for normalization + optimistic updates\n unsubscribeMutationCache = queryClient.getMutationCache().subscribe((event) => {\n // Cast to extended type with additional configs, if available\n const mutationOptions = event.mutation?.options as\n | QueryNormalizeOptions\n | undefined;\n\n const mutationQueryNormalize = mutationOptions?.normalize;\n const mutationQueryOptimistic = mutationOptions?.optimistic;\n const mutationQueryInvalidateData = mutationOptions?.invalidate;\n\n if (shouldInvalidateData(globalInvalidateData, mutationQueryInvalidateData)) {\n if (\n event.type === 'updated' &&\n event.action.type === 'success' &&\n event.action.data\n ) {\n invalidateData(event.action.data as Data);\n }\n }\n\n if (\n !mutationQueryNormalize ||\n !shouldUpdateOptimistically(globalOptimistic, mutationQueryOptimistic)\n ) {\n return;\n }\n\n const {autoRollback, devLogging} = getOptimisticProps(\n globalOptimistic,\n mutationQueryOptimistic,\n );\n\n if (\n event.type === 'updated' &&\n event.action.type === 'success' &&\n event.action.data\n ) {\n optimisticUpdate(event.action.data as Data);\n } else if (event.type === 'updated' && event.action.type === 'pending') {\n const context = event.mutation.state.context as {\n optimisticData?: Data;\n rollbackData?: Data;\n };\n\n if (context?.optimisticData) {\n if (\n !context.rollbackData &&\n mutationQueryOptimistic &&\n autoRollback !== false\n ) {\n context.rollbackData = normalizer.getCurrentData(\n context.optimisticData,\n );\n\n if (devLogging) {\n console.log(\n '[OptimisticUpdate] Auto-calculated rollbackData:',\n context.rollbackData,\n );\n }\n }\n\n optimisticUpdate(context.optimisticData);\n }\n } else if (event.type === 'updated' && event.action.type === 'error') {\n const context = event.mutation.state.context as {\n rollbackData?: Data;\n };\n\n if (context?.rollbackData) {\n if (devLogging) {\n console.log('[OptimisticUpdate] Rolling back changes');\n }\n\n optimisticUpdate(context.rollbackData);\n }\n }\n });\n },\n unsubscribe: () => {\n unsubscribeQueryCache?.();\n unsubscribeMutationCache?.();\n unsubscribeQueryCache = null;\n unsubscribeMutationCache = null;\n },\n };\n};\n"],"mappings":";;;;;;;;AAYA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,YAAsB,EAAEC,cAAwB,EAAc;EACxF,IAAIA,cAAc,KAAK,KAAK,EAAE;IAC1B,OAAO,KAAK;EAChB;EAEA,IAAI,CAACD,YAAY,EAAE;IACf,OAAO,KAAK;EAChB;EAEA,OAAO,IAAI;AACf,CAAC;AAED,IAAME,0BAA0B,GAAG,SAA7BA,0BAA0BA,CAC5BF,YAAyC,EACzCC,cAA2C,EACjC;EACV,IAAIA,cAAc,KAAK,KAAK,EAAE;IAC1B,OAAO,KAAK;EAChB;EAEA,IACK,OAAOA,cAAc,KAAK,SAAS,IAAIA,cAAc,IACrD,IAAAE,gBAAA,EAAOF,cAAc,MAAK,QAAQ,IAAIA,cAAe,EACxD;IACE,OAAO,IAAI;EACf;EAEA,IAAI,CAACD,YAAY,EAAE;IACf,OAAO,KAAK;EAChB;EAEA,OAAO,IAAI;AACf,CAAC;AAED,IAAMI,kBAAkB,GAAG,SAArBA,kBAAkBA,CACpBJ,YAAyC,EACzCC,cAA2C,EAC1C;EACD,IAAMI,kBAAkB,GACpB,IAAAF,gBAAA,EAAOH,YAAY,MAAK,QAAQ,GAAGA,YAAY,CAACM,qBAAqB,GAAGC,SAAS;EACrF,IAAMC,oBAAoB,GACtB,IAAAL,gBAAA,EAAOF,cAAc,MAAK,QAAQ,GAAGA,cAAc,CAACK,qBAAqB,GAAGC,SAAS;EACzF,IAAME,gBAAgB,GAAG,IAAAN,gBAAA,EAAOH,YAAY,MAAK,QAAQ,GAAGA,YAAY,CAACU,UAAU,GAAGH,SAAS;EAC/F,IAAMI,kBAAkB,GACpB,IAAAR,gBAAA,EAAOF,cAAc,MAAK,QAAQ,GAAGA,cAAc,CAACS,UAAU,GAAGH,SAAS;EAE9E,OAAO;IACHK,YAAY,EAAEJ,oBAAoB,aAApBA,oBAAoB,cAApBA,oBAAoB,GAAIH,kBAAkB;IACxDK,UAAU,EAAEC,kBAAkB,aAAlBA,kBAAkB,cAAlBA,kBAAkB,GAAIF;EACtC,CAAC;AACL,CAAC;AAEM,IAAMI,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,SAAxBA,qBAAqBA,CAC9BE,UAAkC,EAClCC,WAAwB,EACxBC,MAA8C,EAC9CC,gBAA8C,EAC9CC,cAAoC,EACnC;EACD,IAAI,CAACJ,UAAU,IAAI,CAACE,MAAM,EAAE;IACxB,OAAOV,SAAS;EACpB;EAEA,IAAMa,gBAAgB,GAClB,IAAAjB,gBAAA,EAAOc,MAAM,MAAK,QAAQ,IAAI,YAAY,IAAIA,MAAM,GAAGA,MAAM,CAACI,UAAU,GAAG,KAAK;EAEpF,IAAMC,oBAAoB,GACtB,IAAAnB,gBAAA,EAAOc,MAAM,MAAK,QAAQ,IAAI,YAAY,IAAIA,MAAM,GAAGA,MAAM,CAACM,UAAU,GAAG,KAAK;EAEpF,IAAIC,qBAA0C,GAAG,IAAI;EACrD,IAAIC,wBAA6C,GAAG,IAAI;EAExD,OAAO;IACH;IACAC,iBAAiB,EAAEX,UAAU,CAACW,iBAAiB;IAC/C;IACAC,iBAAiB,EAAE,SAAnBA,iBAAiBA,CAAGC,IAAU;MAAA,OAAKV,gBAAgB,CAACU,IAAI,CAAC;IAAA;IACzD;IACAC,KAAK,EAAEd,UAAU,CAACe,mBAAmB;IACrC;IACAC,aAAa,EAAEhB,UAAU,CAACgB,aAAa;IACvC;IACAC,gBAAgB,EAAEjB,UAAU,CAACiB,gBAAgB;IAC7C;IACAC,mBAAmB,EAAE,SAArBA,mBAAmBA,CAAGC,YAAkB;MAAA,OACpCnB,UAAU,CAACkB,mBAAmB,CAACC,YAAY,CAAC,CAACC,GAAG,CAAC,UAACC,GAAG;QAAA,OAAKC,IAAI,CAACC,KAAK,CAACF,GAAG,CAAC;MAAA,CAAY,CAAC;IAAA;IAC1F;IACAG,wBAAwB,EAAE,SAA1BA,wBAAwBA,CAAGC,GAA0B;MAAA,OACjDzB,UAAU,CAACwB,wBAAwB,CAACC,GAAG,CAAC,CAACL,GAAG,CAAC,UAACC,GAAG;QAAA,OAAKC,IAAI,CAACC,KAAK,CAACF,GAAG,CAAC;MAAA,CAAY,CAAC;IAAA;IACtF;IACAK,SAAS,EAAE,SAAXA,SAASA,CAAA,EAAQ;MACb;MACAjB,qBAAqB,GAAGR,WAAW,CAAC0B,aAAa,CAAC,CAAC,CAACD,SAAS,CAAC,UAACE,KAAK,EAAK;QAAA,IAAAC,qBAAA;QACrE,IAAMC,WAAW,GAAGR,IAAI,CAACS,SAAS,CAACH,KAAK,CAACI,KAAK,CAACC,QAAQ,CAAC;QAExD,IAAIL,KAAK,CAACM,IAAI,KAAK,SAAS,EAAE;UAC1BlC,UAAU,CAACmC,WAAW,CAACL,WAAW,CAAC;UAEnC;QACJ;;QAEA;QACA;QACA,IAAMM,YAAY,GAAGR,KAAK,CAACI,KAAK,CAACK,OAAqC;QAEtE,IAAMC,cAAc,IAAAT,qBAAA,GAAGO,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEG,SAAS,cAAAV,qBAAA,cAAAA,qBAAA,GAAI,IAAI;QAEtD,IAAI,CAACS,cAAc,EAAE;UACjB;QACJ;QAEA,IAAIV,KAAK,CAACM,IAAI,KAAK,OAAO,IAAIN,KAAK,CAACI,KAAK,CAACQ,KAAK,CAAC3B,IAAI,KAAKrB,SAAS,EAAE;UAChEQ,UAAU,CAACyC,QAAQ,CAACX,WAAW,EAAEF,KAAK,CAACI,KAAK,CAACQ,KAAK,CAAC3B,IAAY,CAAC;QACpE,CAAC,MAAM,IACHe,KAAK,CAACM,IAAI,KAAK,SAAS,IACxBN,KAAK,CAACc,MAAM,CAACR,IAAI,KAAK,SAAS,IAC/BN,KAAK,CAACc,MAAM,CAAC7B,IAAI,KAAKrB,SAAS,EACjC;UACEQ,UAAU,CAACyC,QAAQ,CAACX,WAAW,EAAEF,KAAK,CAACc,MAAM,CAAC7B,IAAY,CAAC;QAC/D;MACJ,CAAC,CAAC;;MAEF;MACAH,wBAAwB,GAAGT,WAAW,CAAC0C,gBAAgB,CAAC,CAAC,CAACjB,SAAS,CAAC,UAACE,KAAK,EAAK;QAAA,IAAAgB,eAAA;QAC3E;QACA,IAAMC,eAAe,IAAAD,eAAA,GAAGhB,KAAK,CAACkB,QAAQ,cAAAF,eAAA,uBAAdA,eAAA,CAAgBP,OAEzB;QAEf,IAAMU,sBAAsB,GAAGF,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEN,SAAS;QACzD,IAAMS,uBAAuB,GAAGH,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEvC,UAAU;QAC3D,IAAM2C,2BAA2B,GAAGJ,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAErC,UAAU;QAE/D,IAAIxB,oBAAoB,CAACuB,oBAAoB,EAAE0C,2BAA2B,CAAC,EAAE;UACzE,IACIrB,KAAK,CAACM,IAAI,KAAK,SAAS,IACxBN,KAAK,CAACc,MAAM,CAACR,IAAI,KAAK,SAAS,IAC/BN,KAAK,CAACc,MAAM,CAAC7B,IAAI,EACnB;YACET,cAAc,CAACwB,KAAK,CAACc,MAAM,CAAC7B,IAAY,CAAC;UAC7C;QACJ;QAEA,IACI,CAACkC,sBAAsB,IACvB,CAAC5D,0BAA0B,CAACkB,gBAAgB,EAAE2C,uBAAuB,CAAC,EACxE;UACE;QACJ;QAEA,IAAAE,mBAAA,GAAmC7D,kBAAkB,CACjDgB,gBAAgB,EAChB2C,uBACJ,CAAC;UAHMnD,YAAY,GAAAqD,mBAAA,CAAZrD,YAAY;UAAEF,UAAU,GAAAuD,mBAAA,CAAVvD,UAAU;QAK/B,IACIiC,KAAK,CAACM,IAAI,KAAK,SAAS,IACxBN,KAAK,CAACc,MAAM,CAACR,IAAI,KAAK,SAAS,IAC/BN,KAAK,CAACc,MAAM,CAAC7B,IAAI,EACnB;UACEV,gBAAgB,CAACyB,KAAK,CAACc,MAAM,CAAC7B,IAAY,CAAC;QAC/C,CAAC,MAAM,IAAIe,KAAK,CAACM,IAAI,KAAK,SAAS,IAAIN,KAAK,CAACc,MAAM,CAACR,IAAI,KAAK,SAAS,EAAE;UACpE,IAAMiB,OAAO,GAAGvB,KAAK,CAACkB,QAAQ,CAACN,KAAK,CAACW,OAGpC;UAED,IAAIA,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEC,cAAc,EAAE;YACzB,IACI,CAACD,OAAO,CAACE,YAAY,IACrBL,uBAAuB,IACvBnD,YAAY,KAAK,KAAK,EACxB;cACEsD,OAAO,CAACE,YAAY,GAAGrD,UAAU,CAACsD,cAAc,CAC5CH,OAAO,CAACC,cACZ,CAAC;cAED,IAAIzD,UAAU,EAAE;gBACZ4D,OAAO,CAACC,GAAG,CACP,kDAAkD,EAClDL,OAAO,CAACE,YACZ,CAAC;cACL;YACJ;YAEAlD,gBAAgB,CAACgD,OAAO,CAACC,cAAc,CAAC;UAC5C;QACJ,CAAC,MAAM,IAAIxB,KAAK,CAACM,IAAI,KAAK,SAAS,IAAIN,KAAK,CAACc,MAAM,CAACR,IAAI,KAAK,OAAO,EAAE;UAClE,IAAMuB,QAAO,GAAG7B,KAAK,CAACkB,QAAQ,CAACN,KAAK,CAACW,OAEpC;UAED,IAAIM,QAAO,aAAPA,QAAO,eAAPA,QAAO,CAAEJ,YAAY,EAAE;YACvB,IAAI1D,UAAU,EAAE;cACZ4D,OAAO,CAACC,GAAG,CAAC,yCAAyC,CAAC;YAC1D;YAEArD,gBAAgB,CAACsD,QAAO,CAACJ,YAAY,CAAC;UAC1C;QACJ;MACJ,CAAC,CAAC;IACN,CAAC;IACDK,WAAW,EAAE,SAAbA,WAAWA,CAAA,EAAQ;MAAA,IAAAC,qBAAA,EAAAC,qBAAA;MACf,CAAAD,qBAAA,GAAAlD,qBAAqB,cAAAkD,qBAAA,eAArBA,qBAAA,CAAwB,CAAC;MACzB,CAAAC,qBAAA,GAAAlD,wBAAwB,cAAAkD,qBAAA,eAAxBA,qBAAA,CAA2B,CAAC;MAC5BnD,qBAAqB,GAAG,IAAI;MAC5BC,wBAAwB,GAAG,IAAI;IACnC;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { QueryKey } from '@tanstack/react-query';
2
+ export declare const parseQueryKey: (queryKeyString: string) => QueryKey;
@@ -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":[]}
@@ -0,0 +1 @@
1
+ export declare function warn(msg: string): void;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.warn = warn;
7
+ function warn(msg) {
8
+ if (!msg || process.env.NODE_ENV === 'production') {
9
+ return;
10
+ }
11
+
12
+ // eslint-disable-next-line no-console
13
+ console.warn(msg);
14
+ }
15
+ // #sourceMappingURL=warn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["warn","msg","process","env","NODE_ENV","console"],"sources":["warn.ts"],"sourcesContent":["export function warn(msg: string) {\n if (!msg || process.env.NODE_ENV === 'production') {\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(msg);\n}\n"],"mappings":";;;;;;AAAO,SAASA,IAAIA,CAACC,GAAW,EAAE;EAC9B,IAAI,CAACA,GAAG,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;IAC/C;EACJ;;EAEA;EACAC,OAAO,CAACL,IAAI,CAACC,GAAG,CAAC;AACrB","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const warnDisabledRefetch: () => void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.warnDisabledRefetch = void 0;
7
+ var _warn = require("./warn");
8
+ var warnDisabledRefetch = exports.warnDisabledRefetch = function warnDisabledRefetch() {
9
+ (0, _warn.warn)('Disabled refetch is called');
10
+ };
11
+ // #sourceMappingURL=warnDisabledRefetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_warn","require","warnDisabledRefetch","exports","warn"],"sources":["warnDisabledRefetch.ts"],"sourcesContent":["import {warn} from './warn';\n\nexport const warnDisabledRefetch = () => {\n warn('Disabled refetch is called');\n};\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEO,IAAMC,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,SAAtBA,mBAAmBA,CAAA,EAAS;EACrC,IAAAE,UAAI,EAAC,4BAA4B,CAAC;AACtC,CAAC","ignoreList":[]}
@@ -2,6 +2,7 @@ export type { DataSourceKey, DataSourceTag, DataSource, AnyDataSource, DataSourc
2
2
  export type { DataManager } from './types/DataManager';
3
3
  export type { DataLoaderStatus } from './types/DataLoaderStatus';
4
4
  export type { InvalidateRepeatOptions, InvalidateOptions } from './types/DataManagerOptions';
5
+ export type { Normalizer, NormalizerConfig, OptimisticConfig } from './types/Normalizer';
5
6
  export { idle } from './constants';
6
7
  export { composeKey } from './utils/composeKey';
7
8
  export { composeFullKey } from './utils/composeFullKey';
@@ -1 +1 @@
1
- {"version":3,"names":["idle","composeKey","composeFullKey","getError","getStatus","hasTag","mergeStatuses","skipContext","withCatch","isCancellable","isAbortable","withCancellation"],"sources":["index.ts"],"sourcesContent":["export type {\n DataSourceKey,\n DataSourceTag,\n DataSource,\n AnyDataSource,\n DataSourceContext,\n DataSourceParams,\n DataSourceRequest,\n DataSourceResponse,\n DataSourceData,\n DataSourceError,\n DataSourceOptions,\n DataSourceState,\n DataSourceFetchContext,\n ActualParams,\n ActualData,\n} from './types/DataSource';\nexport type {DataManager} from './types/DataManager';\nexport type {DataLoaderStatus} from './types/DataLoaderStatus';\nexport type {InvalidateRepeatOptions, InvalidateOptions} from './types/DataManagerOptions';\n\nexport {idle} from './constants';\n\nexport {composeKey} from './utils/composeKey';\nexport {composeFullKey} from './utils/composeFullKey';\nexport {getError} from './utils/getError';\nexport {getStatus} from './utils/getStatus';\nexport {hasTag} from './utils/hasTag';\nexport {mergeStatuses} from './utils/mergeStatuses';\nexport {skipContext} from './utils/skipContext';\nexport {withCatch} from './utils/withCatch';\nexport type {Cancellable} from './utils/withCancellation';\nexport {isCancellable, isAbortable, withCancellation} from './utils/withCancellation';\n"],"mappings":"AAqBA,SAAQA,IAAI,QAAO,aAAa;AAEhC,SAAQC,UAAU,QAAO,oBAAoB;AAC7C,SAAQC,cAAc,QAAO,wBAAwB;AACrD,SAAQC,QAAQ,QAAO,kBAAkB;AACzC,SAAQC,SAAS,QAAO,mBAAmB;AAC3C,SAAQC,MAAM,QAAO,gBAAgB;AACrC,SAAQC,aAAa,QAAO,uBAAuB;AACnD,SAAQC,WAAW,QAAO,qBAAqB;AAC/C,SAAQC,SAAS,QAAO,mBAAmB;AAE3C,SAAQC,aAAa,EAAEC,WAAW,EAAEC,gBAAgB,QAAO,0BAA0B","ignoreList":[]}
1
+ {"version":3,"names":["idle","composeKey","composeFullKey","getError","getStatus","hasTag","mergeStatuses","skipContext","withCatch","isCancellable","isAbortable","withCancellation"],"sources":["index.ts"],"sourcesContent":["export type {\n DataSourceKey,\n DataSourceTag,\n DataSource,\n AnyDataSource,\n DataSourceContext,\n DataSourceParams,\n DataSourceRequest,\n DataSourceResponse,\n DataSourceData,\n DataSourceError,\n DataSourceOptions,\n DataSourceState,\n DataSourceFetchContext,\n ActualParams,\n ActualData,\n} from './types/DataSource';\nexport type {DataManager} from './types/DataManager';\nexport type {DataLoaderStatus} from './types/DataLoaderStatus';\nexport type {InvalidateRepeatOptions, InvalidateOptions} from './types/DataManagerOptions';\nexport type {Normalizer, NormalizerConfig, OptimisticConfig} from './types/Normalizer';\n\nexport {idle} from './constants';\n\nexport {composeKey} from './utils/composeKey';\nexport {composeFullKey} from './utils/composeFullKey';\nexport {getError} from './utils/getError';\nexport {getStatus} from './utils/getStatus';\nexport {hasTag} from './utils/hasTag';\nexport {mergeStatuses} from './utils/mergeStatuses';\nexport {skipContext} from './utils/skipContext';\nexport {withCatch} from './utils/withCatch';\nexport type {Cancellable} from './utils/withCancellation';\nexport {isCancellable, isAbortable, withCancellation} from './utils/withCancellation';\n"],"mappings":"AAsBA,SAAQA,IAAI,QAAO,aAAa;AAEhC,SAAQC,UAAU,QAAO,oBAAoB;AAC7C,SAAQC,cAAc,QAAO,wBAAwB;AACrD,SAAQC,QAAQ,QAAO,kBAAkB;AACzC,SAAQC,SAAS,QAAO,mBAAmB;AAC3C,SAAQC,MAAM,QAAO,gBAAgB;AACrC,SAAQC,aAAa,QAAO,uBAAuB;AACnD,SAAQC,WAAW,QAAO,qBAAqB;AAC/C,SAAQC,SAAS,QAAO,mBAAmB;AAE3C,SAAQC,aAAa,EAAEC,WAAW,EAAEC,gBAAgB,QAAO,0BAA0B","ignoreList":[]}
@@ -1,6 +1,11 @@
1
+ import type { Data } from '@normy/core';
1
2
  import type { InvalidateOptions } from './DataManagerOptions';
2
3
  import type { AnyDataSource, DataSourceParams, DataSourceTag } from './DataSource';
4
+ import type { Normalizer } from './Normalizer';
3
5
  export interface DataManager {
6
+ normalizer?: Normalizer;
7
+ optimisticUpdate(mutationData: Data): void;
8
+ invalidateData(data: Data): void;
4
9
  invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions): Promise<void>;
5
10
  invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions): Promise<void>;
6
11
  invalidateSource<TDataSource extends AnyDataSource>(dataSource: TDataSource, invalidateOptions?: InvalidateOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["DataManager.ts"],"sourcesContent":["import type {InvalidateOptions} from './DataManagerOptions';\nimport type {AnyDataSource, DataSourceParams, DataSourceTag} from './DataSource';\n\nexport interface DataManager {\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions): Promise<void>;\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions): Promise<void>;\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ): Promise<void>;\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource): Promise<void>;\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ): Promise<void>;\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ): Promise<void>;\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ): Promise<void>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["DataManager.ts"],"sourcesContent":["import type {Data} from '@normy/core';\n\nimport type {InvalidateOptions} from './DataManagerOptions';\nimport type {AnyDataSource, DataSourceParams, DataSourceTag} from './DataSource';\nimport type {Normalizer} from './Normalizer';\n\nexport interface DataManager {\n normalizer?: Normalizer;\n\n optimisticUpdate(mutationData: Data): void;\n\n invalidateData(data: Data): void;\n\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions): Promise<void>;\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions): Promise<void>;\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ): Promise<void>;\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource): Promise<void>;\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ): Promise<void>;\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ): Promise<void>;\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ): Promise<void>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ import type { NormalizerConfig as NormalizeConfigBase } from '@normy/core';
2
+ import type { Data, NormalizedData } from '@normy/core/types/types';
3
+ export interface OptimisticConfig {
4
+ /** Automatically calculate rollback data, defaults to true */
5
+ autoCalculateRollback?: boolean;
6
+ /** Whether debug logging is enabled */
7
+ devLogging?: boolean;
8
+ }
9
+ export interface NormalizerConfig extends NormalizeConfigBase {
10
+ initialData?: NormalizedData;
11
+ optimistic?: boolean | OptimisticConfig;
12
+ invalidate?: boolean;
13
+ }
14
+ export interface Normalizer {
15
+ getNormalizedData: () => NormalizedData;
16
+ clearNormalizedData: () => void;
17
+ setQuery: (queryKey: string, queryData: Data) => void;
18
+ removeQuery: (queryKey: string) => void;
19
+ getQueriesToUpdate: (mutationData: Data) => {
20
+ queryKey: string;
21
+ data: Data;
22
+ }[];
23
+ getObjectById: <T extends Data>(id: string, exampleObject?: T) => T | undefined;
24
+ getQueryFragment: <T extends Data>(fragment: Data, exampleObject?: T) => T | undefined;
25
+ getDependentQueries: (mutationData: Data) => readonly string[];
26
+ getDependentQueriesByIds: (ids: ReadonlyArray<string>) => readonly string[];
27
+ getCurrentData: <T extends Data>(newData: T) => T | undefined;
28
+ log: (...messages: unknown[]) => void;
29
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ // #sourceMappingURL=Normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["Normalizer.ts"],"sourcesContent":["import type {NormalizerConfig as NormalizeConfigBase} from '@normy/core';\nimport type {Data, NormalizedData} from '@normy/core/types/types';\n\nexport interface OptimisticConfig {\n /** Automatically calculate rollback data, defaults to true */\n autoCalculateRollback?: boolean;\n /** Whether debug logging is enabled */\n devLogging?: boolean;\n}\n\nexport interface NormalizerConfig extends NormalizeConfigBase {\n initialData?: NormalizedData;\n optimistic?: boolean | OptimisticConfig;\n invalidate?: boolean;\n}\n\nexport interface Normalizer {\n getNormalizedData: () => NormalizedData;\n clearNormalizedData: () => void;\n setQuery: (queryKey: string, queryData: Data) => void;\n removeQuery: (queryKey: string) => void;\n getQueriesToUpdate: (mutationData: Data) => {\n queryKey: string;\n data: Data;\n }[];\n getObjectById: <T extends Data>(id: string, exampleObject?: T) => T | undefined;\n getQueryFragment: <T extends Data>(fragment: Data, exampleObject?: T) => T | undefined;\n getDependentQueries: (mutationData: Data) => readonly string[];\n getDependentQueriesByIds: (ids: ReadonlyArray<string>) => readonly string[];\n getCurrentData: <T extends Data>(newData: T) => T | undefined;\n log: (...messages: unknown[]) => void;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { DataManager } from '../core';
3
+ export interface DataManagerProviderProps {
4
+ children: React.ReactNode;
5
+ dataManager: DataManager;
6
+ }
7
+ export declare const DataManagerProvider: React.FC<DataManagerProviderProps>;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { DataManagerContext } from './DataManagerContext';
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ export var DataManagerProvider = function DataManagerProvider(_ref) {
5
+ var children = _ref.children,
6
+ dataManager = _ref.dataManager;
7
+ return /*#__PURE__*/_jsx(DataManagerContext.Provider, {
8
+ value: dataManager,
9
+ children: children
10
+ });
11
+ };
12
+ // #sourceMappingURL=DataManagerProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","DataManagerContext","jsx","_jsx","DataManagerProvider","_ref","children","dataManager","Provider","value"],"sources":["DataManagerProvider.tsx"],"sourcesContent":["import React from 'react';\n\nimport type {DataManager} from '../core';\n\nimport {DataManagerContext} from './DataManagerContext';\n\nexport interface DataManagerProviderProps {\n children: React.ReactNode;\n dataManager: DataManager;\n}\n\nexport const DataManagerProvider: React.FC<DataManagerProviderProps> = ({\n children,\n dataManager,\n}) => {\n return (\n <DataManagerContext.Provider value={dataManager}>{children}</DataManagerContext.Provider>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAIzB,SAAQC,kBAAkB,QAAO,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOxD,OAAO,IAAMC,mBAAuD,GAAG,SAA1DA,mBAAuDA,CAAAC,IAAA,EAG9D;EAAA,IAFFC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,WAAW,GAAAF,IAAA,CAAXE,WAAW;EAEX,oBACIJ,IAAA,CAACF,kBAAkB,CAACO,QAAQ;IAACC,KAAK,EAAEF,WAAY;IAAAD,QAAA,EAAEA;EAAQ,CAA8B,CAAC;AAEjG,CAAC","ignoreList":[]}
@@ -5,6 +5,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
5
5
  describe('useDataManager', function () {
6
6
  it('should return dataManager from context', function () {
7
7
  var mockDataManager = {
8
+ normalizer: undefined,
9
+ optimisticUpdate: jest.fn(),
10
+ invalidateData: jest.fn(),
8
11
  invalidateTag: jest.fn(),
9
12
  invalidateTags: jest.fn(),
10
13
  invalidateSource: jest.fn(),
@@ -29,15 +32,13 @@ describe('useDataManager', function () {
29
32
  expect(result.current).toBe(mockDataManager);
30
33
  });
31
34
  it('should throw an error when dataManager is not provided', function () {
32
- try {
35
+ var consoleSpy = jest.spyOn(console, 'error').mockImplementation();
36
+ expect(function () {
33
37
  renderHook(function () {
34
38
  return useDataManager();
35
39
  });
36
- } catch (error) {
37
- expect(error).toBeInstanceOf(Error);
38
- // Just to be sure that the error is from the right place
39
- expect(error.message).toBe('DataManager is not provided by context. Use DataManagerContext.Provider to do it');
40
- }
40
+ }).toThrow('DataManager is not provided by context. Use DataManagerContext.Provider to do it');
41
+ consoleSpy.mockRestore();
41
42
  });
42
43
  });
43
44
  // #sourceMappingURL=DataManagerContext.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","renderHook","DataManagerContext","useDataManager","jsx","_jsx","describe","it","mockDataManager","invalidateTag","jest","fn","invalidateTags","invalidateSource","resetSource","invalidateParams","resetParams","invalidateSourceTags","wrapper","_ref","children","Provider","value","_renderHook","result","expect","current","toBe","error","toBeInstanceOf","Error","message"],"sources":["DataManagerContext.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {renderHook} from '@testing-library/react';\n\nimport type {DataManager} from '../../core';\nimport {DataManagerContext, useDataManager} from '../DataManagerContext';\n\ndescribe('useDataManager', () => {\n it('should return dataManager from context', () => {\n const mockDataManager: DataManager = {\n invalidateTag: jest.fn(),\n invalidateTags: jest.fn(),\n invalidateSource: jest.fn(),\n resetSource: jest.fn(),\n invalidateParams: jest.fn(),\n resetParams: jest.fn(),\n invalidateSourceTags: jest.fn(),\n };\n\n const wrapper: React.FC<{children: React.ReactNode}> = ({children}) => (\n <DataManagerContext.Provider value={mockDataManager}>\n {children}\n </DataManagerContext.Provider>\n );\n\n const {result} = renderHook(() => useDataManager(), {wrapper});\n\n expect(result.current).toBe(mockDataManager);\n });\n\n it('should throw an error when dataManager is not provided', () => {\n try {\n renderHook(() => useDataManager());\n } catch (error) {\n expect(error).toBeInstanceOf(Error);\n // Just to be sure that the error is from the right place\n expect((error as Error).message).toBe(\n 'DataManager is not provided by context. Use DataManagerContext.Provider to do it',\n );\n }\n });\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,UAAU,QAAO,wBAAwB;AAGjD,SAAQC,kBAAkB,EAAEC,cAAc,QAAO,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzEC,QAAQ,CAAC,gBAAgB,EAAE,YAAM;EAC7BC,EAAE,CAAC,wCAAwC,EAAE,YAAM;IAC/C,IAAMC,eAA4B,GAAG;MACjCC,aAAa,EAAEC,IAAI,CAACC,EAAE,CAAC,CAAC;MACxBC,cAAc,EAAEF,IAAI,CAACC,EAAE,CAAC,CAAC;MACzBE,gBAAgB,EAAEH,IAAI,CAACC,EAAE,CAAC,CAAC;MAC3BG,WAAW,EAAEJ,IAAI,CAACC,EAAE,CAAC,CAAC;MACtBI,gBAAgB,EAAEL,IAAI,CAACC,EAAE,CAAC,CAAC;MAC3BK,WAAW,EAAEN,IAAI,CAACC,EAAE,CAAC,CAAC;MACtBM,oBAAoB,EAAEP,IAAI,CAACC,EAAE,CAAC;IAClC,CAAC;IAED,IAAMO,OAA8C,GAAG,SAAjDA,OAA8CA,CAAAC,IAAA;MAAA,IAAKC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;MAAA,oBAC7Df,IAAA,CAACH,kBAAkB,CAACmB,QAAQ;QAACC,KAAK,EAAEd,eAAgB;QAAAY,QAAA,EAC/CA;MAAQ,CACgB,CAAC;IAAA,CACjC;IAED,IAAAG,WAAA,GAAiBtB,UAAU,CAAC;QAAA,OAAME,cAAc,CAAC,CAAC;MAAA,GAAE;QAACe,OAAO,EAAPA;MAAO,CAAC,CAAC;MAAvDM,MAAM,GAAAD,WAAA,CAANC,MAAM;IAEbC,MAAM,CAACD,MAAM,CAACE,OAAO,CAAC,CAACC,IAAI,CAACnB,eAAe,CAAC;EAChD,CAAC,CAAC;EAEFD,EAAE,CAAC,wDAAwD,EAAE,YAAM;IAC/D,IAAI;MACAN,UAAU,CAAC;QAAA,OAAME,cAAc,CAAC,CAAC;MAAA,EAAC;IACtC,CAAC,CAAC,OAAOyB,KAAK,EAAE;MACZH,MAAM,CAACG,KAAK,CAAC,CAACC,cAAc,CAACC,KAAK,CAAC;MACnC;MACAL,MAAM,CAAEG,KAAK,CAAWG,OAAO,CAAC,CAACJ,IAAI,CACjC,kFACJ,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","renderHook","DataManagerContext","useDataManager","jsx","_jsx","describe","it","mockDataManager","normalizer","undefined","optimisticUpdate","jest","fn","invalidateData","invalidateTag","invalidateTags","invalidateSource","resetSource","invalidateParams","resetParams","invalidateSourceTags","wrapper","_ref","children","Provider","value","_renderHook","result","expect","current","toBe","consoleSpy","spyOn","console","mockImplementation","toThrow","mockRestore"],"sources":["DataManagerContext.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {renderHook} from '@testing-library/react';\n\nimport type {DataManager} from '../../core';\nimport {DataManagerContext, useDataManager} from '../DataManagerContext';\n\ndescribe('useDataManager', () => {\n it('should return dataManager from context', () => {\n const mockDataManager: DataManager = {\n normalizer: undefined,\n optimisticUpdate: jest.fn(),\n invalidateData: jest.fn(),\n invalidateTag: jest.fn(),\n invalidateTags: jest.fn(),\n invalidateSource: jest.fn(),\n resetSource: jest.fn(),\n invalidateParams: jest.fn(),\n resetParams: jest.fn(),\n invalidateSourceTags: jest.fn(),\n };\n\n const wrapper: React.FC<{children: React.ReactNode}> = ({children}) => (\n <DataManagerContext.Provider value={mockDataManager}>\n {children}\n </DataManagerContext.Provider>\n );\n\n const {result} = renderHook(() => useDataManager(), {wrapper});\n\n expect(result.current).toBe(mockDataManager);\n });\n\n it('should throw an error when dataManager is not provided', () => {\n const consoleSpy = jest.spyOn(console, 'error').mockImplementation();\n\n expect(() => {\n renderHook(() => useDataManager());\n }).toThrow(\n 'DataManager is not provided by context. Use DataManagerContext.Provider to do it',\n );\n\n consoleSpy.mockRestore();\n });\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,UAAU,QAAO,wBAAwB;AAGjD,SAAQC,kBAAkB,EAAEC,cAAc,QAAO,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzEC,QAAQ,CAAC,gBAAgB,EAAE,YAAM;EAC7BC,EAAE,CAAC,wCAAwC,EAAE,YAAM;IAC/C,IAAMC,eAA4B,GAAG;MACjCC,UAAU,EAAEC,SAAS;MACrBC,gBAAgB,EAAEC,IAAI,CAACC,EAAE,CAAC,CAAC;MAC3BC,cAAc,EAAEF,IAAI,CAACC,EAAE,CAAC,CAAC;MACzBE,aAAa,EAAEH,IAAI,CAACC,EAAE,CAAC,CAAC;MACxBG,cAAc,EAAEJ,IAAI,CAACC,EAAE,CAAC,CAAC;MACzBI,gBAAgB,EAAEL,IAAI,CAACC,EAAE,CAAC,CAAC;MAC3BK,WAAW,EAAEN,IAAI,CAACC,EAAE,CAAC,CAAC;MACtBM,gBAAgB,EAAEP,IAAI,CAACC,EAAE,CAAC,CAAC;MAC3BO,WAAW,EAAER,IAAI,CAACC,EAAE,CAAC,CAAC;MACtBQ,oBAAoB,EAAET,IAAI,CAACC,EAAE,CAAC;IAClC,CAAC;IAED,IAAMS,OAA8C,GAAG,SAAjDA,OAA8CA,CAAAC,IAAA;MAAA,IAAKC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;MAAA,oBAC7DnB,IAAA,CAACH,kBAAkB,CAACuB,QAAQ;QAACC,KAAK,EAAElB,eAAgB;QAAAgB,QAAA,EAC/CA;MAAQ,CACgB,CAAC;IAAA,CACjC;IAED,IAAAG,WAAA,GAAiB1B,UAAU,CAAC;QAAA,OAAME,cAAc,CAAC,CAAC;MAAA,GAAE;QAACmB,OAAO,EAAPA;MAAO,CAAC,CAAC;MAAvDM,MAAM,GAAAD,WAAA,CAANC,MAAM;IAEbC,MAAM,CAACD,MAAM,CAACE,OAAO,CAAC,CAACC,IAAI,CAACvB,eAAe,CAAC;EAChD,CAAC,CAAC;EAEFD,EAAE,CAAC,wDAAwD,EAAE,YAAM;IAC/D,IAAMyB,UAAU,GAAGpB,IAAI,CAACqB,KAAK,CAACC,OAAO,EAAE,OAAO,CAAC,CAACC,kBAAkB,CAAC,CAAC;IAEpEN,MAAM,CAAC,YAAM;MACT5B,UAAU,CAAC;QAAA,OAAME,cAAc,CAAC,CAAC;MAAA,EAAC;IACtC,CAAC,CAAC,CAACiC,OAAO,CACN,kFACJ,CAAC;IAEDJ,UAAU,CAACK,WAAW,CAAC,CAAC;EAC5B,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}