@isograph/react 0.0.0-main-3a36e9fb → 0.0.0-main-beecd3bf

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 (52) hide show
  1. package/dist/core/FragmentReference.js +1 -1
  2. package/dist/core/IsographEnvironment.d.ts +7 -5
  3. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  4. package/dist/core/IsographEnvironment.js +7 -15
  5. package/dist/core/cache.d.ts +6 -2
  6. package/dist/core/cache.d.ts.map +1 -1
  7. package/dist/core/cache.js +75 -19
  8. package/dist/core/check.d.ts +1 -1
  9. package/dist/core/check.d.ts.map +1 -1
  10. package/dist/core/check.js +9 -4
  11. package/dist/core/entrypoint.d.ts +2 -0
  12. package/dist/core/entrypoint.d.ts.map +1 -1
  13. package/dist/core/garbageCollection.d.ts +2 -1
  14. package/dist/core/garbageCollection.d.ts.map +1 -1
  15. package/dist/core/garbageCollection.js +45 -11
  16. package/dist/core/logging.d.ts +2 -2
  17. package/dist/core/logging.d.ts.map +1 -1
  18. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  19. package/dist/core/makeNetworkRequest.js +8 -2
  20. package/dist/core/read.d.ts +4 -3
  21. package/dist/core/read.d.ts.map +1 -1
  22. package/dist/core/read.js +13 -10
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -2
  26. package/dist/react/useImperativeReference.js +1 -1
  27. package/package.json +4 -4
  28. package/schema.graphql +1 -0
  29. package/src/core/FragmentReference.ts +1 -1
  30. package/src/core/IsographEnvironment.ts +15 -25
  31. package/src/core/cache.ts +106 -25
  32. package/src/core/check.ts +10 -5
  33. package/src/core/entrypoint.ts +2 -0
  34. package/src/core/garbageCollection.ts +71 -20
  35. package/src/core/logging.ts +2 -2
  36. package/src/core/makeNetworkRequest.ts +8 -1
  37. package/src/core/read.ts +25 -16
  38. package/src/index.ts +0 -1
  39. package/src/react/useImperativeReference.ts +1 -1
  40. package/src/tests/__isograph/Query/meName/entrypoint.ts +1 -0
  41. package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +1 -0
  42. package/src/tests/__isograph/Query/nodeField/entrypoint.ts +1 -0
  43. package/src/tests/__isograph/Query/subquery/entrypoint.ts +67 -0
  44. package/src/tests/__isograph/Query/subquery/output_type.ts +3 -0
  45. package/src/tests/__isograph/Query/subquery/param_type.ts +12 -0
  46. package/src/tests/__isograph/Query/subquery/parameters_type.ts +3 -0
  47. package/src/tests/__isograph/Query/subquery/resolver_reader.ts +47 -0
  48. package/src/tests/__isograph/iso.ts +10 -0
  49. package/src/tests/garbageCollection.test.ts +43 -36
  50. package/src/tests/meNameSuccessor.ts +5 -0
  51. package/src/tests/nodeQuery.ts +2 -0
  52. package/src/tests/normalizeData.test.ts +120 -0
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stableIdForFragmentReference = stableIdForFragmentReference;
4
4
  function stableIdForFragmentReference(fragmentReference) {
5
5
  var _a;
6
- return `${fragmentReference.root.__link}/TODO_FRAGMENT_NAME/${serializeVariables((_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {})}`;
6
+ return `${fragmentReference.root.__typename}/${fragmentReference.root.__link}/TODO_FRAGMENT_NAME/${serializeVariables((_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {})}`;
7
7
  }
8
8
  function serializeVariables(variables) {
9
9
  let s = '';
@@ -62,6 +62,7 @@ export type MissingFieldHandler = (storeRecord: StoreRecord, root: Link, fieldNa
62
62
  export type IsographNetworkFunction = (queryText: string, variables: Variables) => Promise<any>;
63
63
  export type Link = {
64
64
  readonly __link: DataId;
65
+ readonly __typename: TypeName;
65
66
  };
66
67
  export type DataTypeValue = undefined | number | boolean | string | null | Link | DataTypeValue[];
67
68
  export type StoreRecord = {
@@ -72,14 +73,15 @@ export type TypeName = string;
72
73
  export type DataId = string;
73
74
  export declare const ROOT_ID: DataId & '__ROOT';
74
75
  export type IsographStore = {
75
- [index: DataId]: StoreRecord | null;
76
- readonly __ROOT: StoreRecord;
76
+ [index: TypeName]: {
77
+ [index: DataId]: StoreRecord | null;
78
+ } | null;
79
+ readonly Query: {
80
+ readonly __ROOT: StoreRecord;
81
+ };
77
82
  };
78
83
  export declare function createIsographEnvironment(store: IsographStore, networkFunction: IsographNetworkFunction, missingFieldHandler?: MissingFieldHandler | null, logFunction?: LogFunction | null): IsographEnvironment;
79
84
  export declare function createIsographStore(): IsographStore;
80
- export declare function defaultMissingFieldHandler(_storeRecord: StoreRecord, _root: Link, fieldName: string, arguments_: {
81
- [index: string]: any;
82
- } | null, variables: Variables | null): Link | undefined;
83
85
  export declare function assertLink(link: DataTypeValue): Link | null | undefined;
84
86
  export declare function getLink(maybeLink: DataTypeValue): Link | null;
85
87
  export declare function getOrLoadIsographArtifact(environment: IsographEnvironment, key: string, loader: () => Promise<IsographEntrypoint<any, any>>): PromiseWrapper<IsographEntrypoint<any, any>>;
@@ -1 +1 @@
1
- {"version":3,"file":"IsographEnvironment.d.ts","sourceRoot":"","sources":["../../src/core/IsographEnvironment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IsographEnvironment.d.ts","sourceRoot":"","sources":["../../src/core/IsographEnvironment.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ROOT_ID = void 0;
4
4
  exports.createIsographEnvironment = createIsographEnvironment;
5
5
  exports.createIsographStore = createIsographStore;
6
- exports.defaultMissingFieldHandler = defaultMissingFieldHandler;
7
6
  exports.assertLink = assertLink;
8
7
  exports.getLink = getLink;
9
8
  exports.getOrLoadIsographArtifact = getOrLoadIsographArtifact;
@@ -27,20 +26,11 @@ function createIsographEnvironment(store, networkFunction, missingFieldHandler,
27
26
  }
28
27
  function createIsographStore() {
29
28
  return {
30
- [exports.ROOT_ID]: {},
29
+ Query: {
30
+ [exports.ROOT_ID]: {},
31
+ },
31
32
  };
32
33
  }
33
- function defaultMissingFieldHandler(_storeRecord, _root, fieldName, arguments_, variables) {
34
- if (fieldName === 'node' || fieldName === 'user') {
35
- const variable = arguments_ === null || arguments_ === void 0 ? void 0 : arguments_['id'];
36
- const value = variables === null || variables === void 0 ? void 0 : variables[variable];
37
- // TODO can we handle explicit nulls here too? Probably, after wrapping in objects
38
- if (value != null) {
39
- // @ts-expect-error
40
- return { __link: value };
41
- }
42
- }
43
- }
44
34
  function assertLink(link) {
45
35
  if (Array.isArray(link)) {
46
36
  throw new Error('Unexpected array');
@@ -56,8 +46,10 @@ function assertLink(link) {
56
46
  function getLink(maybeLink) {
57
47
  if (maybeLink != null &&
58
48
  typeof maybeLink === 'object' &&
59
- // @ts-expect-error this is safe
60
- maybeLink.__link != null) {
49
+ '__link' in maybeLink &&
50
+ maybeLink.__link != null &&
51
+ '__typename' in maybeLink &&
52
+ maybeLink.__typename != null) {
61
53
  return maybeLink;
62
54
  }
63
55
  return null;
@@ -1,10 +1,11 @@
1
1
  import { Factory, ParentCache } from '@isograph/react-disposable-state';
2
- import { DataId, Link, type IsographEnvironment } from './IsographEnvironment';
2
+ import { DataId, Link, type IsographEnvironment, type TypeName } from './IsographEnvironment';
3
3
  import { IsographEntrypoint, NormalizationAst, NormalizationLinkedField, NormalizationScalarField, RefetchQueryNormalizationArtifactWrapper } from '../core/entrypoint';
4
4
  import { ReaderLinkedField, ReaderScalarField, type ReaderAst } from './reader';
5
5
  import { WithEncounteredRecords } from './read';
6
6
  import { FragmentReference, Variables, ExtractParameters } from './FragmentReference';
7
7
  import { FetchOptions } from './check';
8
+ export declare const TYPENAME_FIELD_NAME = "__typename";
8
9
  export declare function getOrCreateItemInSuspenseCache<TReadFromStore extends {
9
10
  parameters: object;
10
11
  data: object;
@@ -24,8 +25,9 @@ type NetworkResponseValue = NetworkResponseScalarValue | null | NetworkResponseO
24
25
  export type NetworkResponseObject = {
25
26
  [index: string]: undefined | NetworkResponseValue;
26
27
  id?: DataId;
28
+ __typename?: TypeName;
27
29
  };
28
- export declare function normalizeData(environment: IsographEnvironment, normalizationAst: NormalizationAst, networkResponse: NetworkResponseObject, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[]): Set<DataId>;
30
+ export declare function normalizeData(environment: IsographEnvironment, normalizationAst: NormalizationAst, networkResponse: NetworkResponseObject, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[], root: Link): EncounteredIds;
29
31
  export declare function subscribeToAnyChange(environment: IsographEnvironment, callback: () => void): () => void;
30
32
  export declare function subscribeToAnyChangesToRecord(environment: IsographEnvironment, recordLink: Link, callback: () => void): () => void;
31
33
  export declare function subscribe<TReadFromStore extends {
@@ -33,6 +35,8 @@ export declare function subscribe<TReadFromStore extends {
33
35
  data: object;
34
36
  }>(environment: IsographEnvironment, encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<TReadFromStore, any>, callback: (newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): () => void;
35
37
  export declare function onNextChangeToRecord(environment: IsographEnvironment, recordLink: Link): Promise<void>;
38
+ export type EncounteredIds = Map<TypeName, Set<DataId>>;
39
+ export declare function insertIfNotExists<K, V>(map: Map<K, Set<V>>, key: K): Set<V>;
36
40
  export declare function getParentRecordKey(astNode: NormalizationLinkedField | NormalizationScalarField | ReaderLinkedField | ReaderScalarField, variables: Variables): string;
37
41
  export declare const FIRST_SPLIT_KEY = "____";
38
42
  export declare const SECOND_SPLIT_KEY = "___";
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = void 0;
3
+ exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = exports.TYPENAME_FIELD_NAME = void 0;
4
4
  exports.getOrCreateItemInSuspenseCache = getOrCreateItemInSuspenseCache;
5
5
  exports.stableCopy = stableCopy;
6
6
  exports.getOrCreateCacheForArtifact = getOrCreateCacheForArtifact;
@@ -9,6 +9,7 @@ exports.subscribeToAnyChange = subscribeToAnyChange;
9
9
  exports.subscribeToAnyChangesToRecord = subscribeToAnyChangesToRecord;
10
10
  exports.subscribe = subscribe;
11
11
  exports.onNextChangeToRecord = onNextChangeToRecord;
12
+ exports.insertIfNotExists = insertIfNotExists;
12
13
  exports.getParentRecordKey = getParentRecordKey;
13
14
  const react_disposable_state_1 = require("@isograph/react-disposable-state");
14
15
  const IsographEnvironment_1 = require("./IsographEnvironment");
@@ -18,7 +19,7 @@ const makeNetworkRequest_1 = require("./makeNetworkRequest");
18
19
  const PromiseWrapper_1 = require("./PromiseWrapper");
19
20
  const logging_1 = require("./logging");
20
21
  const check_1 = require("./check");
21
- const TYPENAME_FIELD_NAME = '__typename';
22
+ exports.TYPENAME_FIELD_NAME = '__typename';
22
23
  function getOrCreateItemInSuspenseCache(environment, index, factory) {
23
24
  // TODO this is probably a useless message, we should remove it
24
25
  (0, logging_1.logMessage)(environment, {
@@ -68,7 +69,7 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOp
68
69
  readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
69
70
  nestedRefetchQueries: entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
70
71
  }),
71
- root: { __link: IsographEnvironment_1.ROOT_ID },
72
+ root: { __link: IsographEnvironment_1.ROOT_ID, __typename: entrypoint.concreteType },
72
73
  variables,
73
74
  networkRequest: networkRequest,
74
75
  },
@@ -78,15 +79,19 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOp
78
79
  };
79
80
  return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
80
81
  }
81
- function normalizeData(environment, normalizationAst, networkResponse, variables, nestedRefetchQueries) {
82
- const encounteredIds = new Set();
82
+ function normalizeData(environment, normalizationAst, networkResponse, variables, nestedRefetchQueries, root) {
83
+ var _a, _b;
84
+ var _c, _d, _e;
85
+ const encounteredIds = new Map();
83
86
  (0, logging_1.logMessage)(environment, {
84
87
  kind: 'AboutToNormalize',
85
88
  normalizationAst,
86
89
  networkResponse,
87
90
  variables,
88
91
  });
89
- normalizeDataIntoRecord(environment, normalizationAst, networkResponse, environment.store.__ROOT, { __link: IsographEnvironment_1.ROOT_ID }, variables, nestedRefetchQueries, encounteredIds);
92
+ const recordsById = ((_a = (_c = environment.store)[_d = root.__typename]) !== null && _a !== void 0 ? _a : (_c[_d] = {}));
93
+ const newStoreRecord = ((_b = recordsById[_e = root.__link]) !== null && _b !== void 0 ? _b : (recordsById[_e] = {}));
94
+ normalizeDataIntoRecord(environment, normalizationAst, networkResponse, newStoreRecord, root, variables, nestedRefetchQueries, encounteredIds);
90
95
  (0, logging_1.logMessage)(environment, {
91
96
  kind: 'AfterNormalization',
92
97
  store: environment.store,
@@ -147,6 +152,7 @@ function withErrorHandling(f) {
147
152
  }
148
153
  function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
149
154
  environment.subscriptions.forEach(withErrorHandling((subscription) => {
155
+ var _a;
150
156
  switch (subscription.kind) {
151
157
  case 'FragmentSubscription': {
152
158
  // TODO if there are multiple components subscribed to the same
@@ -189,7 +195,8 @@ function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
189
195
  return;
190
196
  }
191
197
  case 'AnyChangesToRecord': {
192
- if (recordsEncounteredWhenNormalizing.has(subscription.recordLink.__link)) {
198
+ if ((_a = recordsEncounteredWhenNormalizing
199
+ .get(subscription.recordLink.__typename)) === null || _a === void 0 ? void 0 : _a.has(subscription.recordLink.__link)) {
193
200
  subscription.callback();
194
201
  }
195
202
  return;
@@ -203,7 +210,20 @@ function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
203
210
  }
204
211
  }));
205
212
  }
206
- function hasOverlappingIds(set1, set2) {
213
+ function hasOverlappingIds(ids1, ids2) {
214
+ for (const [typeName, set1] of ids1.entries()) {
215
+ const set2 = ids2.get(typeName);
216
+ if (set2 === undefined) {
217
+ continue;
218
+ }
219
+ if (isNotDisjointFrom(set1, set2)) {
220
+ return true;
221
+ }
222
+ }
223
+ return false;
224
+ }
225
+ // TODO use a polyfill library
226
+ function isNotDisjointFrom(set1, set2) {
207
227
  for (const id of set1) {
208
228
  if (set2.has(id)) {
209
229
  return true;
@@ -245,10 +265,19 @@ function normalizeDataIntoRecord(environment, normalizationAst, networkResponseP
245
265
  }
246
266
  }
247
267
  if (recordHasBeenUpdated) {
248
- mutableEncounteredIds.add(targetParentRecordLink.__link);
268
+ let encounteredRecordsIds = insertIfNotExists(mutableEncounteredIds, targetParentRecordLink.__typename);
269
+ encounteredRecordsIds.add(targetParentRecordLink.__link);
249
270
  }
250
271
  return recordHasBeenUpdated;
251
272
  }
273
+ function insertIfNotExists(map, key) {
274
+ let result = map.get(key);
275
+ if (result === undefined) {
276
+ result = new Set();
277
+ map.set(key, result);
278
+ }
279
+ return result;
280
+ }
252
281
  function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreRecord, variables) {
253
282
  const networkResponseKey = getNetworkResponseKey(astNode);
254
283
  const networkResponseData = networkResponseParentRecord[networkResponseKey];
@@ -267,6 +296,7 @@ function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreR
267
296
  * Mutate targetParentRecord with a given linked field ast node.
268
297
  */
269
298
  function normalizeLinkedField(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds) {
299
+ var _a, _b;
270
300
  const networkResponseKey = getNetworkResponseKey(astNode);
271
301
  const networkResponseData = networkResponseParentRecord[networkResponseKey];
272
302
  const parentRecordKey = getParentRecordKey(astNode, variables);
@@ -289,18 +319,32 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
289
319
  continue;
290
320
  }
291
321
  const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseObject, targetParentRecordLink, variables, i, nestedRefetchQueries, mutableEncounteredIds);
292
- dataIds.push({ __link: newStoreRecordId });
322
+ const __typename = (_a = astNode.concreteType) !== null && _a !== void 0 ? _a : networkResponseObject[exports.TYPENAME_FIELD_NAME];
323
+ if (__typename == null) {
324
+ throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
325
+ 'This is indicative of a bug in Isograph.');
326
+ }
327
+ dataIds.push({
328
+ __link: newStoreRecordId,
329
+ __typename,
330
+ });
293
331
  }
294
332
  targetParentRecord[parentRecordKey] = dataIds;
295
333
  return !dataIdsAreTheSame(existingValue, dataIds);
296
334
  }
297
335
  else {
298
336
  const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, null, nestedRefetchQueries, mutableEncounteredIds);
337
+ let __typename = (_b = astNode.concreteType) !== null && _b !== void 0 ? _b : networkResponseData[exports.TYPENAME_FIELD_NAME];
338
+ if (__typename == null) {
339
+ throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
340
+ 'This is indicative of a bug in Isograph.');
341
+ }
299
342
  targetParentRecord[parentRecordKey] = {
300
343
  __link: newStoreRecordId,
344
+ __typename,
301
345
  };
302
346
  const link = (0, IsographEnvironment_1.getLink)(existingValue);
303
- return (link === null || link === void 0 ? void 0 : link.__link) !== newStoreRecordId;
347
+ return (link === null || link === void 0 ? void 0 : link.__link) !== newStoreRecordId || link.__typename !== __typename;
304
348
  }
305
349
  }
306
350
  /**
@@ -308,21 +352,22 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
308
352
  */
309
353
  function normalizeInlineFragment(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds) {
310
354
  const typeToRefineTo = astNode.type;
311
- if (networkResponseParentRecord[TYPENAME_FIELD_NAME] === typeToRefineTo) {
355
+ if (networkResponseParentRecord[exports.TYPENAME_FIELD_NAME] === typeToRefineTo) {
312
356
  const hasBeenModified = normalizeDataIntoRecord(environment, astNode.selections, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds);
313
357
  return hasBeenModified;
314
358
  }
315
359
  return false;
316
360
  }
317
361
  function dataIdsAreTheSame(existingValue, newDataIds) {
318
- var _a;
362
+ var _a, _b;
319
363
  if (Array.isArray(existingValue)) {
320
364
  if (newDataIds.length !== existingValue.length) {
321
365
  return false;
322
366
  }
323
367
  for (let i = 0; i < newDataIds.length; i++) {
324
368
  const maybeLink = (0, IsographEnvironment_1.getLink)(existingValue[i]);
325
- if (((_a = newDataIds[i]) === null || _a === void 0 ? void 0 : _a.__link) !== (maybeLink === null || maybeLink === void 0 ? void 0 : maybeLink.__link)) {
369
+ if (((_a = newDataIds[i]) === null || _a === void 0 ? void 0 : _a.__link) !== (maybeLink === null || maybeLink === void 0 ? void 0 : maybeLink.__link) ||
370
+ ((_b = newDataIds[i]) === null || _b === void 0 ? void 0 : _b.__typename) !== (maybeLink === null || maybeLink === void 0 ? void 0 : maybeLink.__typename)) {
326
371
  return false;
327
372
  }
328
373
  }
@@ -333,11 +378,17 @@ function dataIdsAreTheSame(existingValue, newDataIds) {
333
378
  }
334
379
  }
335
380
  function normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, index, nestedRefetchQueries, mutableEncounteredIds) {
336
- var _a;
381
+ var _a, _b, _c;
382
+ var _d;
337
383
  const newStoreRecordId = getDataIdOfNetworkResponse(targetParentRecordLink, networkResponseData, astNode, variables, index);
338
- const newStoreRecord = (_a = environment.store[newStoreRecordId]) !== null && _a !== void 0 ? _a : {};
339
- environment.store[newStoreRecordId] = newStoreRecord;
340
- normalizeDataIntoRecord(environment, astNode.selections, networkResponseData, newStoreRecord, { __link: newStoreRecordId }, variables, nestedRefetchQueries, mutableEncounteredIds);
384
+ const __typename = (_a = astNode.concreteType) !== null && _a !== void 0 ? _a : networkResponseData[exports.TYPENAME_FIELD_NAME];
385
+ if (__typename == null) {
386
+ throw new Error('Unexpected missing __typename in network response object. ' +
387
+ 'This is indicative of a bug in Isograph.');
388
+ }
389
+ const recordsById = ((_b = (_d = environment.store)[__typename]) !== null && _b !== void 0 ? _b : (_d[__typename] = {}));
390
+ const newStoreRecord = ((_c = recordsById[newStoreRecordId]) !== null && _c !== void 0 ? _c : (recordsById[newStoreRecordId] = {}));
391
+ normalizeDataIntoRecord(environment, astNode.selections, networkResponseData, newStoreRecord, { __link: newStoreRecordId, __typename: __typename }, variables, nestedRefetchQueries, mutableEncounteredIds);
341
392
  return newStoreRecordId;
342
393
  }
343
394
  function isScalarOrEmptyArray(data) {
@@ -440,13 +491,18 @@ exports.FIRST_SPLIT_KEY = '____';
440
491
  exports.SECOND_SPLIT_KEY = '___';
441
492
  // Returns a key to look up an item in the store
442
493
  function getDataIdOfNetworkResponse(parentRecordLink, dataToNormalize, astNode, variables, index) {
494
+ // If we are dealing with nested Query, use __ROOT as id
495
+ // TODO do not hard code this value here
496
+ if (astNode.concreteType === 'Query') {
497
+ return IsographEnvironment_1.ROOT_ID;
498
+ }
443
499
  // Check whether the dataToNormalize has an id field. If so, that is the key.
444
500
  // If not, we construct an id from the parentRecordId and the field parameters.
445
501
  const dataId = dataToNormalize.id;
446
502
  if (dataId != null) {
447
503
  return dataId;
448
504
  }
449
- let storeKey = `${parentRecordLink.__link}.${astNode.fieldName}`;
505
+ let storeKey = `${parentRecordLink.__typename}:${parentRecordLink.__link}.${astNode.fieldName}`;
450
506
  if (index != null) {
451
507
  storeKey += `.${index}`;
452
508
  }
@@ -12,5 +12,5 @@ export type CheckResult = {
12
12
  kind: 'MissingData';
13
13
  record: Link;
14
14
  };
15
- export declare function check(environment: IsographEnvironment, normalizationAst: NormalizationAst, variables: Variables): CheckResult;
15
+ export declare function check(environment: IsographEnvironment, normalizationAst: NormalizationAst, variables: Variables, root: Link): CheckResult;
16
16
  //# sourceMappingURL=check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAEL,mBAAmB,EACnB,IAAI,EAGL,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,CAAC;AAEvD,eAAO,MAAM,0BAA0B,EAAE,WAA2B,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC;CACd,CAAC;AAEN,wBAAgB,KAAK,CACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,GACnB,WAAW,CAab"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAEL,mBAAmB,EACnB,IAAI,EAEL,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,CAAC;AAEvD,eAAO,MAAM,0BAA0B,EAAE,WAA2B,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC;CACd,CAAC;AAEN,wBAAgB,KAAK,CACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,GACT,WAAW,CAgBb"}
@@ -6,8 +6,12 @@ const cache_1 = require("./cache");
6
6
  const IsographEnvironment_1 = require("./IsographEnvironment");
7
7
  const logging_1 = require("./logging");
8
8
  exports.DEFAULT_SHOULD_FETCH_VALUE = 'IfNecessary';
9
- function check(environment, normalizationAst, variables) {
10
- const checkResult = checkFromRecord(environment, normalizationAst, variables, environment.store[IsographEnvironment_1.ROOT_ID], { __link: IsographEnvironment_1.ROOT_ID });
9
+ function check(environment, normalizationAst, variables, root) {
10
+ var _a, _b;
11
+ var _c, _d, _e;
12
+ const recordsById = ((_a = (_c = environment.store)[_d = root.__typename]) !== null && _a !== void 0 ? _a : (_c[_d] = {}));
13
+ const newStoreRecord = ((_b = recordsById[_e = root.__link]) !== null && _b !== void 0 ? _b : (recordsById[_e] = {}));
14
+ const checkResult = checkFromRecord(environment, normalizationAst, variables, newStoreRecord, root);
11
15
  (0, logging_1.logMessage)(environment, {
12
16
  kind: 'EnvironmentCheck',
13
17
  result: checkResult,
@@ -15,6 +19,7 @@ function check(environment, normalizationAst, variables) {
15
19
  return checkResult;
16
20
  }
17
21
  function checkFromRecord(environment, normalizationAst, variables, record, recordLink) {
22
+ var _a, _b;
18
23
  normalizationAstLoop: for (const normalizationAstNode of normalizationAst) {
19
24
  switch (normalizationAstNode.kind) {
20
25
  case 'Scalar': {
@@ -49,7 +54,7 @@ function checkFromRecord(environment, normalizationAst, variables, record, recor
49
54
  throw new Error('Unexpected non-link in the Isograph store. ' +
50
55
  'This is indicative of a bug in Isograph.');
51
56
  }
52
- const linkedRecord = environment.store[link.__link];
57
+ const linkedRecord = (_a = environment.store[link.__typename]) === null || _a === void 0 ? void 0 : _a[link.__link];
53
58
  if (linkedRecord === undefined) {
54
59
  return {
55
60
  kind: 'MissingData',
@@ -74,7 +79,7 @@ function checkFromRecord(environment, normalizationAst, variables, record, recor
74
79
  throw new Error('Unexpected non-link in the Isograph store. ' +
75
80
  'This is indicative of a bug in Isograph.');
76
81
  }
77
- const linkedRecord = environment.store[link.__link];
82
+ const linkedRecord = (_b = environment.store[link.__typename]) === null || _b === void 0 ? void 0 : _b[link.__link];
78
83
  if (linkedRecord === undefined) {
79
84
  return {
80
85
  kind: 'MissingData',
@@ -21,6 +21,7 @@ export type IsographEntrypoint<TReadFromStore extends {
21
21
  readonly kind: 'Entrypoint';
22
22
  readonly networkRequestInfo: NetworkRequestInfo;
23
23
  readonly readerWithRefetchQueries: ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>;
24
+ readonly concreteType: TypeName;
24
25
  };
25
26
  export type IsographEntrypointLoader<TReadFromStore extends {
26
27
  parameters: object;
@@ -52,6 +53,7 @@ export type NormalizationInlineFragment = {
52
53
  export type RefetchQueryNormalizationArtifact = {
53
54
  readonly kind: 'RefetchQuery';
54
55
  readonly networkRequestInfo: NetworkRequestInfo;
56
+ readonly concreteType: TypeName;
55
57
  };
56
58
  export type RefetchQueryNormalizationArtifactWrapper = {
57
59
  readonly artifact: RefetchQueryNormalizationArtifact;
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../src/core/entrypoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../src/core/entrypoint.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { IsographEnvironment } from './IsographEnvironment';
1
+ import { IsographEnvironment, type Link } from './IsographEnvironment';
2
2
  import { NormalizationAst } from './entrypoint';
3
3
  export type RetainedQuery = {
4
4
  readonly normalizationAst: NormalizationAst;
5
5
  readonly variables: {};
6
+ readonly root: Link;
6
7
  };
7
8
  type DidUnretainSomeQuery = boolean;
8
9
  export declare function unretainQuery(environment: IsographEnvironment, retainedQuery: RetainedQuery): DidUnretainSomeQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/core/garbageCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EAKpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;CACxB,CAAC;AAEF,KAAK,oBAAoB,GAAG,OAAO,CAAC;AACpC,wBAAgB,aAAa,CAC3B,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,aAAa,GAC3B,oBAAoB,CAUtB;AAED,wBAAgB,WAAW,CACzB,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,aAAa,QAM7B;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,mBAAmB,QAezE"}
1
+ {"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/core/garbageCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EAInB,KAAK,IAAI,EAEV,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB,CAAC;AAEF,KAAK,oBAAoB,GAAG,OAAO,CAAC;AACpC,wBAAgB,aAAa,CAC3B,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,aAAa,GAC3B,oBAAoB,CAUtB;AAED,wBAAgB,WAAW,CACzB,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,aAAa,QAM7B;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,mBAAmB,QA+BzE"}
@@ -21,47 +21,81 @@ function retainQuery(environment, queryToRetain) {
21
21
  // id + variables
22
22
  }
23
23
  function garbageCollectEnvironment(environment) {
24
- const retainedIds = new Set([IsographEnvironment_1.ROOT_ID]);
24
+ const retainedIds = {};
25
25
  for (const query of environment.retainedQueries) {
26
26
  recordReachableIds(environment.store, query, retainedIds);
27
27
  }
28
28
  for (const query of environment.gcBuffer) {
29
29
  recordReachableIds(environment.store, query, retainedIds);
30
30
  }
31
- for (const dataId in environment.store) {
32
- if (!retainedIds.has(dataId)) {
33
- delete environment.store[dataId];
31
+ for (const typeName in environment.store) {
32
+ const dataById = environment.store[typeName];
33
+ if (dataById == null)
34
+ continue;
35
+ const retainedTypeIds = retainedIds[typeName];
36
+ // delete all objects
37
+ if (retainedTypeIds == undefined || retainedTypeIds.size == 0) {
38
+ delete environment.store[typeName];
39
+ continue;
40
+ }
41
+ for (const dataId in dataById) {
42
+ if (!retainedTypeIds.has(dataId)) {
43
+ delete dataById[dataId];
44
+ }
45
+ }
46
+ if (Object.keys(dataById).length === 0) {
47
+ delete environment.store[typeName];
34
48
  }
35
49
  }
36
50
  }
37
51
  function recordReachableIds(store, retainedQuery, mutableRetainedIds) {
38
- recordReachableIdsFromRecord(store, store[IsographEnvironment_1.ROOT_ID], mutableRetainedIds, retainedQuery.normalizationAst, retainedQuery.variables);
52
+ var _a, _b;
53
+ var _c;
54
+ const record = (_a = store[retainedQuery.root.__typename]) === null || _a === void 0 ? void 0 : _a[retainedQuery.root.__link];
55
+ const retainedRecordsIds = ((_b = mutableRetainedIds[_c = retainedQuery.root.__typename]) !== null && _b !== void 0 ? _b : (mutableRetainedIds[_c] = new Set()));
56
+ retainedRecordsIds.add(retainedQuery.root.__link);
57
+ if (record) {
58
+ recordReachableIdsFromRecord(store, record, mutableRetainedIds, retainedQuery.normalizationAst, retainedQuery.variables);
59
+ }
39
60
  }
40
61
  function recordReachableIdsFromRecord(store, currentRecord, mutableRetainedIds, selections, variables) {
62
+ var _a;
41
63
  for (const selection of selections) {
42
64
  switch (selection.kind) {
43
65
  case 'Linked':
44
66
  const linkKey = (0, cache_1.getParentRecordKey)(selection, variables !== null && variables !== void 0 ? variables : {});
45
67
  const linkedFieldOrFields = currentRecord[linkKey];
46
- const ids = [];
68
+ const links = [];
47
69
  if (Array.isArray(linkedFieldOrFields)) {
48
70
  for (const maybeLink of linkedFieldOrFields) {
49
71
  const link = (0, IsographEnvironment_1.assertLink)(maybeLink);
50
72
  if (link != null) {
51
- ids.push(link.__link);
73
+ links.push(link);
52
74
  }
53
75
  }
54
76
  }
55
77
  else {
56
78
  const link = (0, IsographEnvironment_1.assertLink)(linkedFieldOrFields);
57
79
  if (link != null) {
58
- ids.push(link.__link);
80
+ links.push(link);
59
81
  }
60
82
  }
61
- for (const nextRecordId of ids) {
62
- const nextRecord = store[nextRecordId];
83
+ let typeStore = selection.concreteType !== null
84
+ ? store[selection.concreteType]
85
+ : null;
86
+ if (typeStore == null && selection.concreteType !== null) {
87
+ continue;
88
+ }
89
+ for (const nextRecordLink of links) {
90
+ let __typename = nextRecordLink.__typename;
91
+ const resolvedTypeStore = typeStore !== null && typeStore !== void 0 ? typeStore : store[__typename];
92
+ if (resolvedTypeStore == null) {
93
+ continue;
94
+ }
95
+ const nextRecord = resolvedTypeStore[nextRecordLink.__link];
63
96
  if (nextRecord != null) {
64
- mutableRetainedIds.add(nextRecordId);
97
+ const retainedRecordsIds = ((_a = mutableRetainedIds[__typename]) !== null && _a !== void 0 ? _a : (mutableRetainedIds[__typename] = new Set()));
98
+ retainedRecordsIds.add(nextRecordLink.__link);
65
99
  recordReachableIdsFromRecord(store, nextRecord, mutableRetainedIds, selection.selections, variables);
66
100
  }
67
101
  }
@@ -2,7 +2,7 @@ import { CleanupFn } from '@isograph/disposable-types';
2
2
  import { IsographEnvironment, IsographStore, StoreRecord, type Link } from './IsographEnvironment';
3
3
  import { IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifact } from './entrypoint';
4
4
  import { FragmentReference, Variables } from './FragmentReference';
5
- import { NetworkResponseObject } from './cache';
5
+ import { NetworkResponseObject, type EncounteredIds } from './cache';
6
6
  import { Arguments } from './util';
7
7
  import { ReadDataResult } from './read';
8
8
  import { CheckResult } from './check';
@@ -19,7 +19,7 @@ export type LogMessage = {
19
19
  } | {
20
20
  kind: 'AfterNormalization';
21
21
  store: IsographStore;
22
- encounteredIds: Set<string>;
22
+ encounteredIds: EncounteredIds;
23
23
  } | {
24
24
  kind: 'DeepEqualityCheck';
25
25
  fragmentReference: FragmentReference<any, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/core/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,IAAI,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,0BAA0B,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,qBAAqB,CAAC;IACvC,SAAS,EAAE,SAAS,CAAC;CACtB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;CACtB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;CAChB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EACJ,iCAAiC,GACjC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAEhC,eAAe,EAAE,GAAG,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,2BAA2B,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;CACtB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;CAC/B,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,GAAG,CAAC;CACjB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;AAG3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,wBAAgB,UAAU,CACxB,WAAW,EAAE,mBAAmB,EAChC,OAAO,EAAE,UAAU,QAOpB;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,mBAAmB,EAChC,GAAG,EAAE,WAAW,GACf,SAAS,CAMX"}
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/core/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,IAAI,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,0BAA0B,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,qBAAqB,CAAC;IACvC,SAAS,EAAE,SAAS,CAAC;CACtB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;CAChC,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;CACtB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;CAChB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EACJ,iCAAiC,GACjC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAEhC,eAAe,EAAE,GAAG,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,2BAA2B,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;CACtB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;CAC/B,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,GAAG,CAAC;CACjB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;AAG3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,wBAAgB,UAAU,CACxB,WAAW,EAAE,mBAAmB,EAChC,OAAO,EAAE,UAAU,QAOpB;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,mBAAmB,EAChC,GAAG,EAAE,WAAW,GACf,SAAS,CAMX"}
@@ -1 +1 @@
1
- {"version":3,"file":"makeNetworkRequest.d.ts","sourceRoot":"","sources":["../../src/core/makeNetworkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,QAAQ,EACR,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAS,WAAW,EAAE,MAAM,SAAS,CAAC;AAI7C,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,iCAAiC,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1E,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACvB,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAqBjD;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,iCAAiC,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1E,SAAS,EAAE,SAAS,GACnB,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CA0EjD"}
1
+ {"version":3,"file":"makeNetworkRequest.d.ts","sourceRoot":"","sources":["../../src/core/makeNetworkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,OAAO,EAAE,mBAAmB,EAAW,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,QAAQ,EACR,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAS,WAAW,EAAE,MAAM,SAAS,CAAC;AAI7C,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,iCAAiC,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1E,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACvB,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAyBjD;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,iCAAiC,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1E,SAAS,EAAE,SAAS,GACnB,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CA6EjD"}