@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.
- package/README.md +752 -15
- package/build/cjs/core/index.d.ts +1 -0
- package/build/cjs/core/index.js.map +1 -1
- package/build/cjs/core/types/DataManager.d.ts +5 -0
- package/build/cjs/core/types/DataManager.js.map +1 -1
- package/build/cjs/core/types/Normalizer.d.ts +29 -0
- package/build/cjs/core/types/Normalizer.js +6 -0
- package/build/cjs/core/types/Normalizer.js.map +1 -0
- package/build/cjs/react/DataManagerProvider.d.ts +7 -0
- package/build/cjs/react/DataManagerProvider.js +19 -0
- package/build/cjs/react/DataManagerProvider.js.map +1 -0
- package/build/cjs/react/__tests__/DataManagerContext.test.js +7 -6
- package/build/cjs/react/__tests__/DataManagerContext.test.js.map +1 -1
- package/build/cjs/react/__tests__/withDataManager.test.js +3 -0
- package/build/cjs/react/__tests__/withDataManager.test.js.map +1 -1
- package/build/cjs/react/index.d.ts +2 -0
- package/build/cjs/react/index.js +8 -0
- package/build/cjs/react/index.js.map +1 -1
- package/build/cjs/react-query/ClientDataManager.d.ts +16 -3
- package/build/cjs/react-query/ClientDataManager.js +158 -13
- package/build/cjs/react-query/ClientDataManager.js.map +1 -1
- package/build/cjs/react-query/DataSourceProvider.d.ts +7 -0
- package/build/cjs/react-query/DataSourceProvider.js +35 -0
- package/build/cjs/react-query/DataSourceProvider.js.map +1 -0
- package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js +177 -0
- package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js +100 -0
- package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/subscriptions.test.js +1180 -0
- package/build/cjs/react-query/__tests__/subscriptions.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js +659 -0
- package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js +229 -0
- package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js +195 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
- package/build/cjs/react-query/impl/infinite/hooks.js +4 -1
- package/build/cjs/react-query/impl/infinite/hooks.js.map +1 -1
- package/build/cjs/react-query/impl/infinite/types.d.ts +2 -2
- package/build/cjs/react-query/impl/infinite/types.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 +4 -1
- package/build/cjs/react-query/impl/plain/hooks.js.map +1 -1
- package/build/cjs/react-query/impl/plain/types.d.ts +2 -2
- package/build/cjs/react-query/impl/plain/types.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/index.d.ts +2 -0
- package/build/cjs/react-query/index.js +7 -0
- package/build/cjs/react-query/index.js.map +1 -1
- package/build/cjs/react-query/types/normalizer.d.ts +21 -0
- package/build/cjs/react-query/types/normalizer.js +6 -0
- package/build/cjs/react-query/types/normalizer.js.map +1 -0
- package/build/cjs/react-query/types/options.d.ts +12 -0
- 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/normalize.d.ts +22 -0
- package/build/cjs/react-query/utils/normalize.js +150 -0
- package/build/cjs/react-query/utils/normalize.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/cjs/react-query/utils/warn.d.ts +1 -0
- package/build/cjs/react-query/utils/warn.js +15 -0
- package/build/cjs/react-query/utils/warn.js.map +1 -0
- package/build/cjs/react-query/utils/warnDisabledRefetch.d.ts +1 -0
- package/build/cjs/react-query/utils/warnDisabledRefetch.js +11 -0
- package/build/cjs/react-query/utils/warnDisabledRefetch.js.map +1 -0
- package/build/esm/core/index.d.ts +1 -0
- package/build/esm/core/index.js.map +1 -1
- package/build/esm/core/types/DataManager.d.ts +5 -0
- package/build/esm/core/types/DataManager.js.map +1 -1
- package/build/esm/core/types/Normalizer.d.ts +29 -0
- package/build/esm/core/types/Normalizer.js +2 -0
- package/build/esm/core/types/Normalizer.js.map +1 -0
- package/build/esm/react/DataManagerProvider.d.ts +7 -0
- package/build/esm/react/DataManagerProvider.js +12 -0
- package/build/esm/react/DataManagerProvider.js.map +1 -0
- package/build/esm/react/__tests__/DataManagerContext.test.js +7 -6
- package/build/esm/react/__tests__/DataManagerContext.test.js.map +1 -1
- package/build/esm/react/__tests__/withDataManager.test.js +3 -0
- package/build/esm/react/__tests__/withDataManager.test.js.map +1 -1
- package/build/esm/react/index.d.ts +2 -0
- package/build/esm/react/index.js +1 -0
- package/build/esm/react/index.js.map +1 -1
- package/build/esm/react-query/ClientDataManager.d.ts +16 -3
- package/build/esm/react-query/ClientDataManager.js +152 -7
- package/build/esm/react-query/ClientDataManager.js.map +1 -1
- package/build/esm/react-query/DataSourceProvider.d.ts +7 -0
- package/build/esm/react-query/DataSourceProvider.js +28 -0
- package/build/esm/react-query/DataSourceProvider.js.map +1 -0
- package/build/esm/react-query/__tests__/createQueryNormalizer.test.js +174 -0
- package/build/esm/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
- package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js +98 -0
- package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
- package/build/esm/react-query/__tests__/subscriptions.test.js +1176 -0
- package/build/esm/react-query/__tests__/subscriptions.test.js.map +1 -0
- package/build/esm/react-query/__tests__/threeLevelIntegration.test.js +656 -0
- package/build/esm/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
- package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js +227 -0
- package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js +192 -0
- package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
- package/build/esm/react-query/impl/infinite/hooks.js +5 -2
- package/build/esm/react-query/impl/infinite/hooks.js.map +1 -1
- package/build/esm/react-query/impl/infinite/types.d.ts +2 -2
- package/build/esm/react-query/impl/infinite/types.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 +5 -2
- package/build/esm/react-query/impl/plain/hooks.js.map +1 -1
- package/build/esm/react-query/impl/plain/types.d.ts +2 -2
- package/build/esm/react-query/impl/plain/types.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/index.d.ts +2 -0
- package/build/esm/react-query/index.js +1 -0
- package/build/esm/react-query/index.js.map +1 -1
- package/build/esm/react-query/types/normalizer.d.ts +21 -0
- package/build/esm/react-query/types/normalizer.js +2 -0
- package/build/esm/react-query/types/normalizer.js.map +1 -0
- package/build/esm/react-query/types/options.d.ts +12 -0
- 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/normalize.d.ts +22 -0
- package/build/esm/react-query/utils/normalize.js +143 -0
- package/build/esm/react-query/utils/normalize.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/build/esm/react-query/utils/warn.d.ts +1 -0
- package/build/esm/react-query/utils/warn.js +9 -0
- package/build/esm/react-query/utils/warn.js.map +1 -0
- package/build/esm/react-query/utils/warnDisabledRefetch.d.ts +1 -0
- package/build/esm/react-query/utils/warnDisabledRefetch.js +5 -0
- package/build/esm/react-query/utils/warnDisabledRefetch.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,659 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
4
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _ClientDataManager = require("../ClientDataManager");
|
|
8
|
+
var _DataSourceProvider = require("../DataSourceProvider");
|
|
9
|
+
var _useQueryData = require("../hooks/useQueryData");
|
|
10
|
+
var _factory = require("../impl/plain/factory");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
describe('Normalization Configuration Integration', function () {
|
|
14
|
+
var queryClient;
|
|
15
|
+
var dataManager;
|
|
16
|
+
beforeEach(function () {
|
|
17
|
+
dataManager = new _ClientDataManager.ClientDataManager({
|
|
18
|
+
normalizerConfig: {
|
|
19
|
+
devLogging: false
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
queryClient = dataManager.queryClient;
|
|
23
|
+
});
|
|
24
|
+
afterEach(function () {
|
|
25
|
+
var _dataManager$queryNor;
|
|
26
|
+
(_dataManager$queryNor = dataManager.queryNormalizer) === null || _dataManager$queryNor === void 0 || _dataManager$queryNor.unsubscribe();
|
|
27
|
+
queryClient.clear();
|
|
28
|
+
});
|
|
29
|
+
describe('ClientDataManager configuration', function () {
|
|
30
|
+
it('should use custom getNormalizationObjectKey from config', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2() {
|
|
31
|
+
var customGetKey, customDataManager, queryKey, normalized;
|
|
32
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
|
|
33
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
34
|
+
case 0:
|
|
35
|
+
customGetKey = jest.fn(function (obj) {
|
|
36
|
+
return "custom:".concat(obj.id);
|
|
37
|
+
});
|
|
38
|
+
customDataManager = new _ClientDataManager.ClientDataManager({
|
|
39
|
+
normalizerConfig: {
|
|
40
|
+
getNormalizationObjectKey: customGetKey,
|
|
41
|
+
devLogging: false
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
customDataManager.queryNormalizer.subscribe();
|
|
45
|
+
queryKey = ['users'];
|
|
46
|
+
_context2.next = 6;
|
|
47
|
+
return customDataManager.queryClient.fetchQuery({
|
|
48
|
+
queryKey: queryKey,
|
|
49
|
+
queryFn: function () {
|
|
50
|
+
var _queryFn = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
|
|
51
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
52
|
+
while (1) switch (_context.prev = _context.next) {
|
|
53
|
+
case 0:
|
|
54
|
+
return _context.abrupt("return", [{
|
|
55
|
+
id: '1',
|
|
56
|
+
name: 'User 1'
|
|
57
|
+
}]);
|
|
58
|
+
case 1:
|
|
59
|
+
case "end":
|
|
60
|
+
return _context.stop();
|
|
61
|
+
}
|
|
62
|
+
}, _callee);
|
|
63
|
+
}));
|
|
64
|
+
function queryFn() {
|
|
65
|
+
return _queryFn.apply(this, arguments);
|
|
66
|
+
}
|
|
67
|
+
return queryFn;
|
|
68
|
+
}(),
|
|
69
|
+
normalize: true
|
|
70
|
+
});
|
|
71
|
+
case 6:
|
|
72
|
+
normalized = customDataManager.queryNormalizer.getNormalizedData();
|
|
73
|
+
expect(normalized.objects['@@custom:1']).toBeDefined();
|
|
74
|
+
expect(customGetKey).toHaveBeenCalled();
|
|
75
|
+
customDataManager.queryNormalizer.unsubscribe();
|
|
76
|
+
customDataManager.queryClient.clear();
|
|
77
|
+
case 11:
|
|
78
|
+
case "end":
|
|
79
|
+
return _context2.stop();
|
|
80
|
+
}
|
|
81
|
+
}, _callee2);
|
|
82
|
+
})));
|
|
83
|
+
it('should use custom getArrayType from config', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee4() {
|
|
84
|
+
var customGetArrayType, customDataManager, queryKey;
|
|
85
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee4$(_context4) {
|
|
86
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
87
|
+
case 0:
|
|
88
|
+
customGetArrayType = jest.fn(function (_ref3) {
|
|
89
|
+
var arrayKey = _ref3.arrayKey;
|
|
90
|
+
return "custom:".concat(arrayKey);
|
|
91
|
+
});
|
|
92
|
+
customDataManager = new _ClientDataManager.ClientDataManager({
|
|
93
|
+
normalizerConfig: {
|
|
94
|
+
getArrayType: customGetArrayType,
|
|
95
|
+
devLogging: false
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
customDataManager.queryNormalizer.subscribe();
|
|
99
|
+
queryKey = ['items'];
|
|
100
|
+
_context4.next = 6;
|
|
101
|
+
return customDataManager.queryClient.fetchQuery({
|
|
102
|
+
queryKey: queryKey,
|
|
103
|
+
queryFn: function () {
|
|
104
|
+
var _queryFn2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee3() {
|
|
105
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee3$(_context3) {
|
|
106
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
107
|
+
case 0:
|
|
108
|
+
return _context3.abrupt("return", {
|
|
109
|
+
items: [{
|
|
110
|
+
id: '1',
|
|
111
|
+
name: 'Item 1'
|
|
112
|
+
}]
|
|
113
|
+
});
|
|
114
|
+
case 1:
|
|
115
|
+
case "end":
|
|
116
|
+
return _context3.stop();
|
|
117
|
+
}
|
|
118
|
+
}, _callee3);
|
|
119
|
+
}));
|
|
120
|
+
function queryFn() {
|
|
121
|
+
return _queryFn2.apply(this, arguments);
|
|
122
|
+
}
|
|
123
|
+
return queryFn;
|
|
124
|
+
}(),
|
|
125
|
+
normalize: true
|
|
126
|
+
});
|
|
127
|
+
case 6:
|
|
128
|
+
expect(customGetArrayType).toHaveBeenCalled();
|
|
129
|
+
customDataManager.queryNormalizer.unsubscribe();
|
|
130
|
+
customDataManager.queryClient.clear();
|
|
131
|
+
case 9:
|
|
132
|
+
case "end":
|
|
133
|
+
return _context4.stop();
|
|
134
|
+
}
|
|
135
|
+
}, _callee4);
|
|
136
|
+
})));
|
|
137
|
+
});
|
|
138
|
+
describe('Query-level normalization control', function () {
|
|
139
|
+
it('should normalize when query has normalize: true', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee6() {
|
|
140
|
+
var queryKey, normalized;
|
|
141
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee6$(_context6) {
|
|
142
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
143
|
+
case 0:
|
|
144
|
+
dataManager.queryNormalizer.subscribe();
|
|
145
|
+
queryKey = ['users-normalized'];
|
|
146
|
+
_context6.next = 4;
|
|
147
|
+
return dataManager.queryClient.fetchQuery({
|
|
148
|
+
queryKey: queryKey,
|
|
149
|
+
queryFn: function () {
|
|
150
|
+
var _queryFn3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee5() {
|
|
151
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee5$(_context5) {
|
|
152
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
153
|
+
case 0:
|
|
154
|
+
return _context5.abrupt("return", [{
|
|
155
|
+
id: '1',
|
|
156
|
+
name: 'User 1'
|
|
157
|
+
}]);
|
|
158
|
+
case 1:
|
|
159
|
+
case "end":
|
|
160
|
+
return _context5.stop();
|
|
161
|
+
}
|
|
162
|
+
}, _callee5);
|
|
163
|
+
}));
|
|
164
|
+
function queryFn() {
|
|
165
|
+
return _queryFn3.apply(this, arguments);
|
|
166
|
+
}
|
|
167
|
+
return queryFn;
|
|
168
|
+
}(),
|
|
169
|
+
normalize: true
|
|
170
|
+
});
|
|
171
|
+
case 4:
|
|
172
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data SHOULD be normalized
|
|
173
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
174
|
+
case 6:
|
|
175
|
+
case "end":
|
|
176
|
+
return _context6.stop();
|
|
177
|
+
}
|
|
178
|
+
}, _callee6);
|
|
179
|
+
})));
|
|
180
|
+
it('should NOT normalize when query has normalize: false', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee8() {
|
|
181
|
+
var queryKey, normalized;
|
|
182
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee8$(_context8) {
|
|
183
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
184
|
+
case 0:
|
|
185
|
+
dataManager.queryNormalizer.subscribe();
|
|
186
|
+
queryKey = ['users-not-normalized'];
|
|
187
|
+
_context8.next = 4;
|
|
188
|
+
return dataManager.queryClient.fetchQuery({
|
|
189
|
+
queryKey: queryKey,
|
|
190
|
+
queryFn: function () {
|
|
191
|
+
var _queryFn4 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee7() {
|
|
192
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee7$(_context7) {
|
|
193
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
194
|
+
case 0:
|
|
195
|
+
return _context7.abrupt("return", [{
|
|
196
|
+
id: '2',
|
|
197
|
+
name: 'User 2'
|
|
198
|
+
}]);
|
|
199
|
+
case 1:
|
|
200
|
+
case "end":
|
|
201
|
+
return _context7.stop();
|
|
202
|
+
}
|
|
203
|
+
}, _callee7);
|
|
204
|
+
}));
|
|
205
|
+
function queryFn() {
|
|
206
|
+
return _queryFn4.apply(this, arguments);
|
|
207
|
+
}
|
|
208
|
+
return queryFn;
|
|
209
|
+
}(),
|
|
210
|
+
normalize: false
|
|
211
|
+
});
|
|
212
|
+
case 4:
|
|
213
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data should NOT be normalized
|
|
214
|
+
expect(normalized.objects['@@2']).toBeUndefined();
|
|
215
|
+
case 6:
|
|
216
|
+
case "end":
|
|
217
|
+
return _context8.stop();
|
|
218
|
+
}
|
|
219
|
+
}, _callee8);
|
|
220
|
+
})));
|
|
221
|
+
it('should normalize by default when normalize option is not provided', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee10() {
|
|
222
|
+
var queryKey, normalized;
|
|
223
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee10$(_context10) {
|
|
224
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
225
|
+
case 0:
|
|
226
|
+
dataManager.queryNormalizer.subscribe();
|
|
227
|
+
queryKey = ['users-default'];
|
|
228
|
+
_context10.next = 4;
|
|
229
|
+
return dataManager.queryClient.fetchQuery({
|
|
230
|
+
queryKey: queryKey,
|
|
231
|
+
queryFn: function () {
|
|
232
|
+
var _queryFn5 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee9() {
|
|
233
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee9$(_context9) {
|
|
234
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
235
|
+
case 0:
|
|
236
|
+
return _context9.abrupt("return", [{
|
|
237
|
+
id: '3',
|
|
238
|
+
name: 'User 3'
|
|
239
|
+
}]);
|
|
240
|
+
case 1:
|
|
241
|
+
case "end":
|
|
242
|
+
return _context9.stop();
|
|
243
|
+
}
|
|
244
|
+
}, _callee9);
|
|
245
|
+
}));
|
|
246
|
+
function queryFn() {
|
|
247
|
+
return _queryFn5.apply(this, arguments);
|
|
248
|
+
}
|
|
249
|
+
return queryFn;
|
|
250
|
+
}()
|
|
251
|
+
});
|
|
252
|
+
case 4:
|
|
253
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data SHOULD be normalized (default behavior is now true)
|
|
254
|
+
expect(normalized.objects['@@3']).toBeDefined();
|
|
255
|
+
case 6:
|
|
256
|
+
case "end":
|
|
257
|
+
return _context10.stop();
|
|
258
|
+
}
|
|
259
|
+
}, _callee10);
|
|
260
|
+
})));
|
|
261
|
+
});
|
|
262
|
+
describe('DataSourceProvider integration', function () {
|
|
263
|
+
it('should auto-subscribe queryNormalizer on mount', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee12() {
|
|
264
|
+
var wrapper, dataSource, _renderHook, result, normalized;
|
|
265
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee12$(_context12) {
|
|
266
|
+
while (1) switch (_context12.prev = _context12.next) {
|
|
267
|
+
case 0:
|
|
268
|
+
wrapper = function wrapper(_ref8) {
|
|
269
|
+
var children = _ref8.children;
|
|
270
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DataSourceProvider.DataSourceProvider, {
|
|
271
|
+
dataManager: dataManager,
|
|
272
|
+
children: children
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
dataSource = (0, _factory.makePlainQueryDataSource)({
|
|
276
|
+
name: 'users',
|
|
277
|
+
fetch: function () {
|
|
278
|
+
var _fetch = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee11() {
|
|
279
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee11$(_context11) {
|
|
280
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
281
|
+
case 0:
|
|
282
|
+
return _context11.abrupt("return", [{
|
|
283
|
+
id: '1',
|
|
284
|
+
name: 'User 1'
|
|
285
|
+
}]);
|
|
286
|
+
case 1:
|
|
287
|
+
case "end":
|
|
288
|
+
return _context11.stop();
|
|
289
|
+
}
|
|
290
|
+
}, _callee11);
|
|
291
|
+
}));
|
|
292
|
+
function fetch() {
|
|
293
|
+
return _fetch.apply(this, arguments);
|
|
294
|
+
}
|
|
295
|
+
return fetch;
|
|
296
|
+
}(),
|
|
297
|
+
options: {
|
|
298
|
+
normalize: true
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
_renderHook = (0, _react2.renderHook)(function () {
|
|
302
|
+
return (0, _useQueryData.useQueryData)(dataSource, {});
|
|
303
|
+
}, {
|
|
304
|
+
wrapper: wrapper
|
|
305
|
+
}), result = _renderHook.result;
|
|
306
|
+
_context12.next = 5;
|
|
307
|
+
return (0, _react2.waitFor)(function () {
|
|
308
|
+
return expect(result.current.status).toBe('success');
|
|
309
|
+
});
|
|
310
|
+
case 5:
|
|
311
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data should be normalized because DataSourceProvider subscribes automatically
|
|
312
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
313
|
+
case 7:
|
|
314
|
+
case "end":
|
|
315
|
+
return _context12.stop();
|
|
316
|
+
}
|
|
317
|
+
}, _callee12);
|
|
318
|
+
})));
|
|
319
|
+
it('should work with multiple queries', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee15() {
|
|
320
|
+
var wrapper, dataSource1, dataSource2, _renderHook2, result1, _renderHook3, result2, normalized;
|
|
321
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee15$(_context15) {
|
|
322
|
+
while (1) switch (_context15.prev = _context15.next) {
|
|
323
|
+
case 0:
|
|
324
|
+
wrapper = function wrapper(_ref10) {
|
|
325
|
+
var children = _ref10.children;
|
|
326
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DataSourceProvider.DataSourceProvider, {
|
|
327
|
+
dataManager: dataManager,
|
|
328
|
+
children: children
|
|
329
|
+
});
|
|
330
|
+
};
|
|
331
|
+
dataSource1 = (0, _factory.makePlainQueryDataSource)({
|
|
332
|
+
name: 'users',
|
|
333
|
+
fetch: function () {
|
|
334
|
+
var _fetch2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee13() {
|
|
335
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee13$(_context13) {
|
|
336
|
+
while (1) switch (_context13.prev = _context13.next) {
|
|
337
|
+
case 0:
|
|
338
|
+
return _context13.abrupt("return", [{
|
|
339
|
+
id: '1',
|
|
340
|
+
name: 'User 1'
|
|
341
|
+
}]);
|
|
342
|
+
case 1:
|
|
343
|
+
case "end":
|
|
344
|
+
return _context13.stop();
|
|
345
|
+
}
|
|
346
|
+
}, _callee13);
|
|
347
|
+
}));
|
|
348
|
+
function fetch() {
|
|
349
|
+
return _fetch2.apply(this, arguments);
|
|
350
|
+
}
|
|
351
|
+
return fetch;
|
|
352
|
+
}(),
|
|
353
|
+
options: {
|
|
354
|
+
normalize: true
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
dataSource2 = (0, _factory.makePlainQueryDataSource)({
|
|
358
|
+
name: 'posts',
|
|
359
|
+
fetch: function () {
|
|
360
|
+
var _fetch3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee14() {
|
|
361
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee14$(_context14) {
|
|
362
|
+
while (1) switch (_context14.prev = _context14.next) {
|
|
363
|
+
case 0:
|
|
364
|
+
return _context14.abrupt("return", [{
|
|
365
|
+
id: '2',
|
|
366
|
+
title: 'Post 1'
|
|
367
|
+
}]);
|
|
368
|
+
case 1:
|
|
369
|
+
case "end":
|
|
370
|
+
return _context14.stop();
|
|
371
|
+
}
|
|
372
|
+
}, _callee14);
|
|
373
|
+
}));
|
|
374
|
+
function fetch() {
|
|
375
|
+
return _fetch3.apply(this, arguments);
|
|
376
|
+
}
|
|
377
|
+
return fetch;
|
|
378
|
+
}(),
|
|
379
|
+
options: {
|
|
380
|
+
normalize: true
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
_renderHook2 = (0, _react2.renderHook)(function () {
|
|
384
|
+
return (0, _useQueryData.useQueryData)(dataSource1, {});
|
|
385
|
+
}, {
|
|
386
|
+
wrapper: wrapper
|
|
387
|
+
}), result1 = _renderHook2.result;
|
|
388
|
+
_renderHook3 = (0, _react2.renderHook)(function () {
|
|
389
|
+
return (0, _useQueryData.useQueryData)(dataSource2, {});
|
|
390
|
+
}, {
|
|
391
|
+
wrapper: wrapper
|
|
392
|
+
}), result2 = _renderHook3.result;
|
|
393
|
+
_context15.next = 7;
|
|
394
|
+
return (0, _react2.waitFor)(function () {
|
|
395
|
+
expect(result1.current.status).toBe('success');
|
|
396
|
+
expect(result2.current.status).toBe('success');
|
|
397
|
+
});
|
|
398
|
+
case 7:
|
|
399
|
+
normalized = dataManager.queryNormalizer.getNormalizedData();
|
|
400
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
401
|
+
expect(normalized.objects['@@2']).toBeDefined();
|
|
402
|
+
case 10:
|
|
403
|
+
case "end":
|
|
404
|
+
return _context15.stop();
|
|
405
|
+
}
|
|
406
|
+
}, _callee15);
|
|
407
|
+
})));
|
|
408
|
+
});
|
|
409
|
+
describe('Optimistic updates configuration', function () {
|
|
410
|
+
it('should enable optimistic updates when configured', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee16() {
|
|
411
|
+
var dmWithOptimistic, queryKey, initialData, data;
|
|
412
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee16$(_context16) {
|
|
413
|
+
while (1) switch (_context16.prev = _context16.next) {
|
|
414
|
+
case 0:
|
|
415
|
+
dmWithOptimistic = new _ClientDataManager.ClientDataManager({
|
|
416
|
+
normalizerConfig: {
|
|
417
|
+
devLogging: false,
|
|
418
|
+
optimistic: true
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
expect(dmWithOptimistic.queryNormalizer).toBeDefined();
|
|
422
|
+
dmWithOptimistic.queryNormalizer.subscribe();
|
|
423
|
+
queryKey = ['users'];
|
|
424
|
+
initialData = [{
|
|
425
|
+
id: '1',
|
|
426
|
+
name: 'Old'
|
|
427
|
+
}];
|
|
428
|
+
dmWithOptimistic.queryClient.setQueryData(queryKey, initialData);
|
|
429
|
+
dmWithOptimistic.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
430
|
+
|
|
431
|
+
// Manual optimistic update via setNormalizedData
|
|
432
|
+
dmWithOptimistic.queryNormalizer.setNormalizedData({
|
|
433
|
+
id: '1',
|
|
434
|
+
name: 'New'
|
|
435
|
+
});
|
|
436
|
+
data = dmWithOptimistic.queryClient.getQueryData(queryKey);
|
|
437
|
+
expect(data[0].name).toBe('New');
|
|
438
|
+
dmWithOptimistic.queryNormalizer.unsubscribe();
|
|
439
|
+
dmWithOptimistic.queryClient.clear();
|
|
440
|
+
case 12:
|
|
441
|
+
case "end":
|
|
442
|
+
return _context16.stop();
|
|
443
|
+
}
|
|
444
|
+
}, _callee16);
|
|
445
|
+
})));
|
|
446
|
+
it('should work with optimistic config object', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee17() {
|
|
447
|
+
var dmWithOptimisticConfig;
|
|
448
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee17$(_context17) {
|
|
449
|
+
while (1) switch (_context17.prev = _context17.next) {
|
|
450
|
+
case 0:
|
|
451
|
+
dmWithOptimisticConfig = new _ClientDataManager.ClientDataManager({
|
|
452
|
+
normalizerConfig: {
|
|
453
|
+
devLogging: false,
|
|
454
|
+
optimistic: {
|
|
455
|
+
autoCalculateRollback: true,
|
|
456
|
+
devLogging: false
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
expect(dmWithOptimisticConfig.queryNormalizer).toBeDefined();
|
|
461
|
+
expect(dmWithOptimisticConfig.normalizer).toBeDefined();
|
|
462
|
+
dmWithOptimisticConfig.queryClient.clear();
|
|
463
|
+
case 4:
|
|
464
|
+
case "end":
|
|
465
|
+
return _context17.stop();
|
|
466
|
+
}
|
|
467
|
+
}, _callee17);
|
|
468
|
+
})));
|
|
469
|
+
});
|
|
470
|
+
describe('Invalidate configuration', function () {
|
|
471
|
+
it('should support invalidate option in global config', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee18() {
|
|
472
|
+
var dmWithInvalidate;
|
|
473
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee18$(_context18) {
|
|
474
|
+
while (1) switch (_context18.prev = _context18.next) {
|
|
475
|
+
case 0:
|
|
476
|
+
dmWithInvalidate = new _ClientDataManager.ClientDataManager({
|
|
477
|
+
normalizerConfig: {
|
|
478
|
+
devLogging: false,
|
|
479
|
+
invalidate: true
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
expect(dmWithInvalidate.queryNormalizer).toBeDefined();
|
|
483
|
+
expect(dmWithInvalidate.normalizer).toBeDefined();
|
|
484
|
+
dmWithInvalidate.queryClient.clear();
|
|
485
|
+
case 4:
|
|
486
|
+
case "end":
|
|
487
|
+
return _context18.stop();
|
|
488
|
+
}
|
|
489
|
+
}, _callee18);
|
|
490
|
+
})));
|
|
491
|
+
it('should support both optimistic and invalidate options', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee19() {
|
|
492
|
+
var dmWithBoth;
|
|
493
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee19$(_context19) {
|
|
494
|
+
while (1) switch (_context19.prev = _context19.next) {
|
|
495
|
+
case 0:
|
|
496
|
+
dmWithBoth = new _ClientDataManager.ClientDataManager({
|
|
497
|
+
normalizerConfig: {
|
|
498
|
+
devLogging: false,
|
|
499
|
+
optimistic: true,
|
|
500
|
+
invalidate: true
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
expect(dmWithBoth.queryNormalizer).toBeDefined();
|
|
504
|
+
expect(dmWithBoth.normalizer).toBeDefined();
|
|
505
|
+
dmWithBoth.queryClient.clear();
|
|
506
|
+
case 4:
|
|
507
|
+
case "end":
|
|
508
|
+
return _context19.stop();
|
|
509
|
+
}
|
|
510
|
+
}, _callee19);
|
|
511
|
+
})));
|
|
512
|
+
});
|
|
513
|
+
describe('ClientDataManager.update()', function () {
|
|
514
|
+
it('should work with array of objects for optimistic update', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee20() {
|
|
515
|
+
var dm, queryKey, initialData, data;
|
|
516
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee20$(_context20) {
|
|
517
|
+
while (1) switch (_context20.prev = _context20.next) {
|
|
518
|
+
case 0:
|
|
519
|
+
dm = new _ClientDataManager.ClientDataManager({
|
|
520
|
+
normalizerConfig: {
|
|
521
|
+
devLogging: false,
|
|
522
|
+
optimistic: true
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
dm.queryNormalizer.subscribe();
|
|
526
|
+
queryKey = ['users'];
|
|
527
|
+
initialData = [{
|
|
528
|
+
id: '1',
|
|
529
|
+
name: 'User 1'
|
|
530
|
+
}, {
|
|
531
|
+
id: '2',
|
|
532
|
+
name: 'User 2'
|
|
533
|
+
}];
|
|
534
|
+
dm.queryClient.setQueryData(queryKey, initialData);
|
|
535
|
+
dm.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
536
|
+
|
|
537
|
+
// Update both objects
|
|
538
|
+
dm.update([{
|
|
539
|
+
id: '1',
|
|
540
|
+
name: 'Updated 1'
|
|
541
|
+
}, {
|
|
542
|
+
id: '2',
|
|
543
|
+
name: 'Updated 2'
|
|
544
|
+
}]);
|
|
545
|
+
data = dm.queryClient.getQueryData(queryKey);
|
|
546
|
+
expect(data[0].name).toBe('Updated 1');
|
|
547
|
+
expect(data[1].name).toBe('Updated 2');
|
|
548
|
+
dm.queryNormalizer.unsubscribe();
|
|
549
|
+
dm.queryClient.clear();
|
|
550
|
+
case 12:
|
|
551
|
+
case "end":
|
|
552
|
+
return _context20.stop();
|
|
553
|
+
}
|
|
554
|
+
}, _callee20);
|
|
555
|
+
})));
|
|
556
|
+
it('should call invalidateData when invalidate option is enabled', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee21() {
|
|
557
|
+
var dm, queryKey, initialData, cache, invalidateSpy;
|
|
558
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee21$(_context21) {
|
|
559
|
+
while (1) switch (_context21.prev = _context21.next) {
|
|
560
|
+
case 0:
|
|
561
|
+
dm = new _ClientDataManager.ClientDataManager({
|
|
562
|
+
normalizerConfig: {
|
|
563
|
+
devLogging: false,
|
|
564
|
+
invalidate: true
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
dm.queryNormalizer.subscribe();
|
|
568
|
+
queryKey = ['users'];
|
|
569
|
+
initialData = [{
|
|
570
|
+
id: '1',
|
|
571
|
+
name: 'User 1'
|
|
572
|
+
}];
|
|
573
|
+
dm.queryClient.setQueryData(queryKey, initialData);
|
|
574
|
+
dm.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
575
|
+
|
|
576
|
+
// Set query state to success so it can be invalidated
|
|
577
|
+
cache = dm.queryClient.getQueryCache().find({
|
|
578
|
+
queryKey: queryKey
|
|
579
|
+
});
|
|
580
|
+
cache === null || cache === void 0 || cache.setState({
|
|
581
|
+
status: 'success',
|
|
582
|
+
fetchStatus: 'idle',
|
|
583
|
+
isInvalidated: false
|
|
584
|
+
});
|
|
585
|
+
invalidateSpy = jest.spyOn(dm, 'invalidateData');
|
|
586
|
+
dm.update({
|
|
587
|
+
id: '1',
|
|
588
|
+
name: 'Updated'
|
|
589
|
+
});
|
|
590
|
+
expect(invalidateSpy).toHaveBeenCalled();
|
|
591
|
+
invalidateSpy.mockRestore();
|
|
592
|
+
dm.queryNormalizer.unsubscribe();
|
|
593
|
+
dm.queryClient.clear();
|
|
594
|
+
case 14:
|
|
595
|
+
case "end":
|
|
596
|
+
return _context21.stop();
|
|
597
|
+
}
|
|
598
|
+
}, _callee21);
|
|
599
|
+
})));
|
|
600
|
+
it('should trigger refetch when mutation has fewer keys and normy returns empty queriesToUpdate', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee22() {
|
|
601
|
+
var dm, queryKey, initialData, cache, originalGetQueriesToUpdate, invalidateSpy;
|
|
602
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee22$(_context22) {
|
|
603
|
+
while (1) switch (_context22.prev = _context22.next) {
|
|
604
|
+
case 0:
|
|
605
|
+
// checkMutationObjectsKeys is called only when getQueriesToUpdate returns []
|
|
606
|
+
// This happens when normy can't compute a diff (e.g., structure mismatch)
|
|
607
|
+
dm = new _ClientDataManager.ClientDataManager({
|
|
608
|
+
normalizerConfig: {
|
|
609
|
+
devLogging: false,
|
|
610
|
+
invalidate: true // Need to enable invalidate for refetch to work
|
|
611
|
+
}
|
|
612
|
+
});
|
|
613
|
+
dm.queryNormalizer.subscribe();
|
|
614
|
+
queryKey = ['users']; // Store data with more keys
|
|
615
|
+
initialData = [{
|
|
616
|
+
id: '1',
|
|
617
|
+
name: 'User 1',
|
|
618
|
+
email: 'user@test.com',
|
|
619
|
+
age: 25
|
|
620
|
+
}];
|
|
621
|
+
dm.queryClient.setQueryData(queryKey, initialData);
|
|
622
|
+
dm.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
623
|
+
|
|
624
|
+
// Set query state to success so it can be invalidated
|
|
625
|
+
cache = dm.queryClient.getQueryCache().find({
|
|
626
|
+
queryKey: queryKey
|
|
627
|
+
});
|
|
628
|
+
cache === null || cache === void 0 || cache.setState({
|
|
629
|
+
status: 'success',
|
|
630
|
+
fetchStatus: 'idle',
|
|
631
|
+
isInvalidated: false
|
|
632
|
+
});
|
|
633
|
+
|
|
634
|
+
// Mock getQueriesToUpdate to return empty array (simulating normy can't compute diff)
|
|
635
|
+
originalGetQueriesToUpdate = dm.normalizer.getQueriesToUpdate;
|
|
636
|
+
dm.normalizer.getQueriesToUpdate = jest.fn().mockReturnValue([]);
|
|
637
|
+
invalidateSpy = jest.spyOn(dm.queryClient, 'invalidateQueries'); // Update with fewer keys - should trigger refetch via checkMutationObjectsKeys
|
|
638
|
+
dm.update({
|
|
639
|
+
id: '1',
|
|
640
|
+
name: 'Updated'
|
|
641
|
+
});
|
|
642
|
+
|
|
643
|
+
// Check if invalidation was triggered due to fewer keys
|
|
644
|
+
expect(invalidateSpy).toHaveBeenCalled();
|
|
645
|
+
|
|
646
|
+
// Restore mocks
|
|
647
|
+
dm.normalizer.getQueriesToUpdate = originalGetQueriesToUpdate;
|
|
648
|
+
invalidateSpy.mockRestore();
|
|
649
|
+
dm.queryNormalizer.unsubscribe();
|
|
650
|
+
dm.queryClient.clear();
|
|
651
|
+
case 17:
|
|
652
|
+
case "end":
|
|
653
|
+
return _context22.stop();
|
|
654
|
+
}
|
|
655
|
+
}, _callee22);
|
|
656
|
+
})));
|
|
657
|
+
});
|
|
658
|
+
});
|
|
659
|
+
// #sourceMappingURL=threeLevelIntegration.test.js.map
|