@isograph/react 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/.turbo/turbo-compile-libs.log +5 -0
  2. package/dist/core/FragmentReference.d.ts +17 -8
  3. package/dist/core/FragmentReference.d.ts.map +1 -1
  4. package/dist/core/FragmentReference.js +3 -12
  5. package/dist/core/IsographEnvironment.d.ts +30 -35
  6. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  7. package/dist/core/IsographEnvironment.js +4 -0
  8. package/dist/core/PromiseWrapper.d.ts +6 -7
  9. package/dist/core/PromiseWrapper.d.ts.map +1 -1
  10. package/dist/core/PromiseWrapper.js +6 -12
  11. package/dist/core/areEqualWithDeepComparison.d.ts +1 -3
  12. package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -1
  13. package/dist/core/areEqualWithDeepComparison.js +16 -2
  14. package/dist/core/brand.d.ts +2 -0
  15. package/dist/core/brand.d.ts.map +1 -0
  16. package/dist/core/brand.js +2 -0
  17. package/dist/core/cache.d.ts +16 -24
  18. package/dist/core/cache.d.ts.map +1 -1
  19. package/dist/core/cache.js +105 -72
  20. package/dist/core/check.d.ts +11 -7
  21. package/dist/core/check.d.ts.map +1 -1
  22. package/dist/core/check.js +2 -2
  23. package/dist/core/componentCache.d.ts +1 -1
  24. package/dist/core/componentCache.d.ts.map +1 -1
  25. package/dist/core/componentCache.js +27 -31
  26. package/dist/core/entrypoint.d.ts +43 -28
  27. package/dist/core/entrypoint.d.ts.map +1 -1
  28. package/dist/core/garbageCollection.d.ts +5 -6
  29. package/dist/core/garbageCollection.d.ts.map +1 -1
  30. package/dist/core/garbageCollection.js +1 -1
  31. package/dist/core/logging.d.ts +23 -15
  32. package/dist/core/logging.d.ts.map +1 -1
  33. package/dist/core/logging.js +8 -5
  34. package/dist/core/makeNetworkRequest.d.ts +5 -5
  35. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  36. package/dist/core/makeNetworkRequest.js +113 -28
  37. package/dist/core/read.d.ts +16 -11
  38. package/dist/core/read.d.ts.map +1 -1
  39. package/dist/core/read.js +468 -305
  40. package/dist/core/reader.d.ts +33 -37
  41. package/dist/core/reader.d.ts.map +1 -1
  42. package/dist/core/startUpdate.d.ts +8 -0
  43. package/dist/core/startUpdate.d.ts.map +1 -0
  44. package/dist/core/startUpdate.js +163 -0
  45. package/dist/core/util.d.ts +3 -0
  46. package/dist/core/util.d.ts.map +1 -1
  47. package/dist/index.d.ts +18 -15
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +9 -1
  50. package/dist/loadable-hooks/useClientSideDefer.d.ts +4 -10
  51. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
  52. package/dist/loadable-hooks/useClientSideDefer.js +2 -2
  53. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +8 -15
  54. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
  55. package/dist/loadable-hooks/useConnectionSpecPagination.js +6 -4
  56. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +1 -2
  57. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
  58. package/dist/loadable-hooks/useImperativeLoadableField.d.ts +4 -6
  59. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
  60. package/dist/loadable-hooks/useImperativeLoadableField.js +1 -1
  61. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +6 -13
  62. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
  63. package/dist/loadable-hooks/useSkipLimitPagination.js +11 -9
  64. package/dist/react/FragmentReader.d.ts +7 -14
  65. package/dist/react/FragmentReader.d.ts.map +1 -1
  66. package/dist/react/FragmentReader.js +3 -30
  67. package/dist/react/FragmentRenderer.d.ts +15 -0
  68. package/dist/react/FragmentRenderer.d.ts.map +1 -0
  69. package/dist/react/FragmentRenderer.js +35 -0
  70. package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
  71. package/dist/react/LoadableFieldReader.d.ts +12 -0
  72. package/dist/react/LoadableFieldReader.d.ts.map +1 -0
  73. package/dist/react/LoadableFieldReader.js +10 -0
  74. package/dist/react/LoadableFieldRenderer.d.ts +13 -0
  75. package/dist/react/LoadableFieldRenderer.d.ts.map +1 -0
  76. package/dist/react/LoadableFieldRenderer.js +37 -0
  77. package/dist/react/useImperativeReference.d.ts +7 -10
  78. package/dist/react/useImperativeReference.d.ts.map +1 -1
  79. package/dist/react/useImperativeReference.js +8 -9
  80. package/dist/react/useLazyReference.d.ts +4 -7
  81. package/dist/react/useLazyReference.d.ts.map +1 -1
  82. package/dist/react/useLazyReference.js +26 -5
  83. package/dist/react/useReadAndSubscribe.d.ts +3 -9
  84. package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
  85. package/dist/react/useReadAndSubscribe.js +7 -3
  86. package/dist/react/useRerenderOnChange.d.ts +1 -1
  87. package/dist/react/useRerenderOnChange.d.ts.map +1 -1
  88. package/dist/react/useResult.d.ts +3 -6
  89. package/dist/react/useResult.d.ts.map +1 -1
  90. package/dist/react/useResult.js +10 -8
  91. package/isograph.config.json +1 -0
  92. package/package.json +6 -6
  93. package/src/core/FragmentReference.ts +40 -16
  94. package/src/core/IsographEnvironment.ts +57 -39
  95. package/src/core/PromiseWrapper.ts +15 -18
  96. package/src/core/areEqualWithDeepComparison.ts +22 -2
  97. package/src/core/brand.ts +18 -0
  98. package/src/core/cache.ts +153 -113
  99. package/src/core/check.ts +17 -12
  100. package/src/core/componentCache.ts +47 -50
  101. package/src/core/entrypoint.ts +66 -21
  102. package/src/core/garbageCollection.ts +9 -9
  103. package/src/core/logging.ts +39 -25
  104. package/src/core/makeNetworkRequest.ts +212 -34
  105. package/src/core/read.ts +728 -440
  106. package/src/core/reader.ts +46 -29
  107. package/src/core/startUpdate.ts +334 -0
  108. package/src/core/util.ts +4 -0
  109. package/src/index.ts +89 -8
  110. package/src/loadable-hooks/useClientSideDefer.ts +11 -10
  111. package/src/loadable-hooks/useConnectionSpecPagination.ts +27 -13
  112. package/src/loadable-hooks/useImperativeExposedMutationField.ts +1 -1
  113. package/src/loadable-hooks/useImperativeLoadableField.ts +10 -12
  114. package/src/loadable-hooks/useSkipLimitPagination.ts +38 -19
  115. package/src/react/FragmentReader.tsx +23 -39
  116. package/src/react/FragmentRenderer.tsx +46 -0
  117. package/src/react/IsographEnvironmentProvider.tsx +1 -1
  118. package/src/react/LoadableFieldReader.tsx +40 -0
  119. package/src/react/LoadableFieldRenderer.tsx +41 -0
  120. package/src/react/useImperativeReference.ts +49 -27
  121. package/src/react/useLazyReference.ts +62 -14
  122. package/src/react/useReadAndSubscribe.ts +17 -9
  123. package/src/react/useRerenderOnChange.ts +2 -2
  124. package/src/react/useResult.ts +22 -8
  125. package/src/tests/__isograph/Economist/link/output_type.ts +2 -0
  126. package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +28 -0
  127. package/src/tests/__isograph/Node/link/output_type.ts +3 -0
  128. package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +31 -0
  129. package/src/tests/__isograph/Query/linkedUpdate/normalization_ast.ts +95 -0
  130. package/src/tests/__isograph/Query/linkedUpdate/output_type.ts +3 -0
  131. package/src/tests/__isograph/Query/linkedUpdate/param_type.ts +51 -0
  132. package/src/tests/__isograph/Query/linkedUpdate/query_text.ts +20 -0
  133. package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +93 -0
  134. package/src/tests/__isograph/Query/meName/entrypoint.ts +8 -29
  135. package/src/tests/__isograph/Query/meName/normalization_ast.ts +25 -0
  136. package/src/tests/__isograph/Query/meName/query_text.ts +6 -0
  137. package/src/tests/__isograph/Query/meName/resolver_reader.ts +5 -0
  138. package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +8 -67
  139. package/src/tests/__isograph/Query/meNameSuccessor/normalization_ast.ts +56 -0
  140. package/src/tests/__isograph/Query/meNameSuccessor/query_text.ts +13 -0
  141. package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +10 -0
  142. package/src/tests/__isograph/Query/nodeField/entrypoint.ts +8 -34
  143. package/src/tests/__isograph/Query/nodeField/normalization_ast.ts +30 -0
  144. package/src/tests/__isograph/Query/nodeField/query_text.ts +6 -0
  145. package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +5 -0
  146. package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +31 -0
  147. package/src/tests/__isograph/Query/startUpdate/normalization_ast.ts +51 -0
  148. package/src/tests/__isograph/Query/startUpdate/output_type.ts +3 -0
  149. package/src/tests/__isograph/Query/startUpdate/param_type.ts +26 -0
  150. package/src/tests/__isograph/Query/startUpdate/parameters_type.ts +3 -0
  151. package/src/tests/__isograph/Query/startUpdate/query_text.ts +11 -0
  152. package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +55 -0
  153. package/src/tests/__isograph/Query/subquery/entrypoint.ts +8 -44
  154. package/src/tests/__isograph/Query/subquery/normalization_ast.ts +38 -0
  155. package/src/tests/__isograph/Query/subquery/query_text.ts +8 -0
  156. package/src/tests/__isograph/Query/subquery/resolver_reader.ts +7 -0
  157. package/src/tests/__isograph/iso.ts +24 -3
  158. package/src/tests/__isograph/tsconfig.json +8 -0
  159. package/src/tests/garbageCollection.test.ts +10 -8
  160. package/src/tests/meNameSuccessor.ts +1 -1
  161. package/src/tests/nodeQuery.ts +2 -1
  162. package/src/tests/normalizeData.test.ts +1 -2
  163. package/src/tests/startUpdate.test.ts +205 -0
  164. package/tsconfig.pkg.json +1 -2
@@ -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 = exports.TYPENAME_FIELD_NAME = void 0;
3
+ exports.THIRD_SPLIT_KEY = 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,24 +9,18 @@ exports.subscribeToAnyChange = subscribeToAnyChange;
9
9
  exports.subscribeToAnyChangesToRecord = subscribeToAnyChangesToRecord;
10
10
  exports.subscribe = subscribe;
11
11
  exports.onNextChangeToRecord = onNextChangeToRecord;
12
- exports.insertIfNotExists = insertIfNotExists;
12
+ exports.callSubscriptions = callSubscriptions;
13
+ exports.insertEmptySetIfMissing = insertEmptySetIfMissing;
13
14
  exports.getParentRecordKey = getParentRecordKey;
14
15
  const react_disposable_state_1 = require("@isograph/react-disposable-state");
15
- const IsographEnvironment_1 = require("./IsographEnvironment");
16
- const read_1 = require("./read");
17
16
  const areEqualWithDeepComparison_1 = require("./areEqualWithDeepComparison");
17
+ const IsographEnvironment_1 = require("./IsographEnvironment");
18
+ const logging_1 = require("./logging");
18
19
  const makeNetworkRequest_1 = require("./makeNetworkRequest");
19
20
  const PromiseWrapper_1 = require("./PromiseWrapper");
20
- const logging_1 = require("./logging");
21
+ const read_1 = require("./read");
21
22
  exports.TYPENAME_FIELD_NAME = '__typename';
22
23
  function getOrCreateItemInSuspenseCache(environment, index, factory) {
23
- // TODO this is probably a useless message, we should remove it
24
- (0, logging_1.logMessage)(environment, {
25
- kind: 'GettingSuspenseCacheItem',
26
- index,
27
- availableCacheItems: Object.keys(environment.fragmentCache),
28
- found: !!environment.fragmentCache[index],
29
- });
30
24
  if (environment.fragmentCache[index] == null) {
31
25
  environment.fragmentCache[index] = new react_disposable_state_1.ParentCache(factory);
32
26
  }
@@ -54,18 +48,29 @@ function stableCopy(value) {
54
48
  return stable;
55
49
  }
56
50
  function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOptions) {
57
- const cacheKey = entrypoint.networkRequestInfo.queryText +
58
- JSON.stringify(stableCopy(variables));
51
+ let cacheKey = '';
52
+ switch (entrypoint.networkRequestInfo.operation.kind) {
53
+ case 'Operation':
54
+ cacheKey =
55
+ entrypoint.networkRequestInfo.operation.text +
56
+ JSON.stringify(stableCopy(variables));
57
+ break;
58
+ case 'PersistedOperation':
59
+ cacheKey =
60
+ entrypoint.networkRequestInfo.operation.operationId +
61
+ JSON.stringify(stableCopy(variables));
62
+ break;
63
+ }
59
64
  const factory = () => {
60
- const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, entrypoint, variables, fetchOptions);
65
+ const readerWithRefetchQueries = entrypoint.readerWithRefetchQueries.kind ===
66
+ 'ReaderWithRefetchQueriesLoader'
67
+ ? (0, PromiseWrapper_1.wrapPromise)(entrypoint.readerWithRefetchQueries.loader())
68
+ : (0, PromiseWrapper_1.wrapResolvedValue)(entrypoint.readerWithRefetchQueries);
69
+ const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, entrypoint, variables, readerWithRefetchQueries, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : null);
61
70
  const itemCleanupPair = [
62
71
  {
63
72
  kind: 'FragmentReference',
64
- readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
65
- kind: 'ReaderWithRefetchQueries',
66
- readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
67
- nestedRefetchQueries: entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
68
- }),
73
+ readerWithRefetchQueries,
69
74
  root: { __link: IsographEnvironment_1.ROOT_ID, __typename: entrypoint.concreteType },
70
75
  variables,
71
76
  networkRequest: networkRequest,
@@ -76,24 +81,24 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOp
76
81
  };
77
82
  return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
78
83
  }
79
- function normalizeData(environment, normalizationAst, networkResponse, variables, nestedRefetchQueries, root) {
84
+ function normalizeData(environment, normalizationAst, networkResponse, variables, root) {
80
85
  var _a, _b;
81
86
  var _c, _d, _e;
82
87
  const encounteredIds = new Map();
83
- (0, logging_1.logMessage)(environment, {
88
+ (0, logging_1.logMessage)(environment, () => ({
84
89
  kind: 'AboutToNormalize',
85
90
  normalizationAst,
86
91
  networkResponse,
87
92
  variables,
88
- });
93
+ }));
89
94
  const recordsById = ((_a = (_c = environment.store)[_d = root.__typename]) !== null && _a !== void 0 ? _a : (_c[_d] = {}));
90
95
  const newStoreRecord = ((_b = recordsById[_e = root.__link]) !== null && _b !== void 0 ? _b : (recordsById[_e] = {}));
91
- normalizeDataIntoRecord(environment, normalizationAst, networkResponse, newStoreRecord, root, variables, nestedRefetchQueries, encounteredIds);
92
- (0, logging_1.logMessage)(environment, {
96
+ normalizeDataIntoRecord(environment, normalizationAst, networkResponse, newStoreRecord, root, variables, encounteredIds);
97
+ (0, logging_1.logMessage)(environment, () => ({
93
98
  kind: 'AfterNormalization',
94
99
  store: environment.store,
95
100
  encounteredIds,
96
- });
101
+ }));
97
102
  callSubscriptions(environment, encounteredIds);
98
103
  return encounteredIds;
99
104
  }
@@ -139,16 +144,21 @@ function onNextChangeToRecord(environment, recordLink) {
139
144
  //
140
145
  // That's probably okay to ignore. We don't, however, want to prevent
141
146
  // updating other subscriptions if one subscription had missing data.
142
- function withErrorHandling(f) {
147
+ function withErrorHandling(environment, f) {
143
148
  return (t) => {
144
149
  try {
145
150
  return f(t);
146
151
  }
147
- catch (_a) { }
152
+ catch (e) {
153
+ (0, logging_1.logMessage)(environment, () => ({
154
+ kind: 'ErrorEncounteredInWithErrorHandling',
155
+ error: e,
156
+ }));
157
+ }
148
158
  };
149
159
  }
150
160
  function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
151
- environment.subscriptions.forEach(withErrorHandling((subscription) => {
161
+ environment.subscriptions.forEach(withErrorHandling(environment, (subscription) => {
152
162
  var _a;
153
163
  switch (subscription.kind) {
154
164
  case 'FragmentSubscription': {
@@ -174,13 +184,13 @@ function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
174
184
  throwOnNetworkError: false,
175
185
  });
176
186
  const mergedItem = (0, areEqualWithDeepComparison_1.mergeObjectsUsingReaderAst)(subscription.readerAst, subscription.encounteredDataAndRecords.item, newEncounteredDataAndRecords.item);
177
- (0, logging_1.logMessage)(environment, {
187
+ (0, logging_1.logMessage)(environment, () => ({
178
188
  kind: 'DeepEqualityCheck',
179
189
  fragmentReference: subscription.fragmentReference,
180
190
  old: subscription.encounteredDataAndRecords.item,
181
191
  new: newEncounteredDataAndRecords.item,
182
192
  deeplyEqual: mergedItem === subscription.encounteredDataAndRecords.item,
183
- });
193
+ }));
184
194
  if (mergedItem !== subscription.encounteredDataAndRecords.item) {
185
195
  subscription.callback(newEncounteredDataAndRecords);
186
196
  }
@@ -231,7 +241,7 @@ function isNotDisjointFrom(set1, set2) {
231
241
  /**
232
242
  * Mutate targetParentRecord according to the normalizationAst and networkResponseParentRecord.
233
243
  */
234
- function normalizeDataIntoRecord(environment, normalizationAst, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds) {
244
+ function normalizeDataIntoRecord(environment, normalizationAst, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
235
245
  let recordHasBeenUpdated = false;
236
246
  for (const normalizationNode of normalizationAst) {
237
247
  switch (normalizationNode.kind) {
@@ -242,13 +252,13 @@ function normalizeDataIntoRecord(environment, normalizationAst, networkResponseP
242
252
  break;
243
253
  }
244
254
  case 'Linked': {
245
- const linkedFieldResultedInChange = normalizeLinkedField(environment, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds);
255
+ const linkedFieldResultedInChange = normalizeLinkedField(environment, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
246
256
  recordHasBeenUpdated =
247
257
  recordHasBeenUpdated || linkedFieldResultedInChange;
248
258
  break;
249
259
  }
250
260
  case 'InlineFragment': {
251
- const inlineFragmentResultedInChange = normalizeInlineFragment(environment, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds);
261
+ const inlineFragmentResultedInChange = normalizeInlineFragment(environment, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
252
262
  recordHasBeenUpdated =
253
263
  recordHasBeenUpdated || inlineFragmentResultedInChange;
254
264
  break;
@@ -262,12 +272,12 @@ function normalizeDataIntoRecord(environment, normalizationAst, networkResponseP
262
272
  }
263
273
  }
264
274
  if (recordHasBeenUpdated) {
265
- let encounteredRecordsIds = insertIfNotExists(mutableEncounteredIds, targetParentRecordLink.__typename);
275
+ let encounteredRecordsIds = insertEmptySetIfMissing(mutableEncounteredIds, targetParentRecordLink.__typename);
266
276
  encounteredRecordsIds.add(targetParentRecordLink.__link);
267
277
  }
268
278
  return recordHasBeenUpdated;
269
279
  }
270
- function insertIfNotExists(map, key) {
280
+ function insertEmptySetIfMissing(map, key) {
271
281
  let result = map.get(key);
272
282
  if (result === undefined) {
273
283
  result = new Set();
@@ -292,7 +302,7 @@ function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreR
292
302
  /**
293
303
  * Mutate targetParentRecord with a given linked field ast node.
294
304
  */
295
- function normalizeLinkedField(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds) {
305
+ function normalizeLinkedField(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
296
306
  var _a, _b;
297
307
  const networkResponseKey = getNetworkResponseKey(astNode);
298
308
  const networkResponseData = networkResponseParentRecord[networkResponseKey];
@@ -315,7 +325,7 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
315
325
  dataIds.push(null);
316
326
  continue;
317
327
  }
318
- const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseObject, targetParentRecordLink, variables, i, nestedRefetchQueries, mutableEncounteredIds);
328
+ const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseObject, targetParentRecordLink, variables, i, mutableEncounteredIds);
319
329
  const __typename = (_a = astNode.concreteType) !== null && _a !== void 0 ? _a : networkResponseObject[exports.TYPENAME_FIELD_NAME];
320
330
  if (__typename == null) {
321
331
  throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
@@ -330,7 +340,7 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
330
340
  return !dataIdsAreTheSame(existingValue, dataIds);
331
341
  }
332
342
  else {
333
- const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, null, nestedRefetchQueries, mutableEncounteredIds);
343
+ const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, null, mutableEncounteredIds);
334
344
  let __typename = (_b = astNode.concreteType) !== null && _b !== void 0 ? _b : networkResponseData[exports.TYPENAME_FIELD_NAME];
335
345
  if (__typename == null) {
336
346
  throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
@@ -347,10 +357,10 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
347
357
  /**
348
358
  * Mutate targetParentRecord with a given linked field ast node.
349
359
  */
350
- function normalizeInlineFragment(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds) {
360
+ function normalizeInlineFragment(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
351
361
  const typeToRefineTo = astNode.type;
352
362
  if (networkResponseParentRecord[exports.TYPENAME_FIELD_NAME] === typeToRefineTo) {
353
- const hasBeenModified = normalizeDataIntoRecord(environment, astNode.selections, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds);
363
+ const hasBeenModified = normalizeDataIntoRecord(environment, astNode.selections, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
354
364
  return hasBeenModified;
355
365
  }
356
366
  return false;
@@ -374,7 +384,7 @@ function dataIdsAreTheSame(existingValue, newDataIds) {
374
384
  return false;
375
385
  }
376
386
  }
377
- function normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, index, nestedRefetchQueries, mutableEncounteredIds) {
387
+ function normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, index, mutableEncounteredIds) {
378
388
  var _a, _b, _c;
379
389
  var _d;
380
390
  const newStoreRecordId = getDataIdOfNetworkResponse(targetParentRecordLink, networkResponseData, astNode, variables, index);
@@ -385,7 +395,7 @@ function normalizeNetworkResponseObject(environment, astNode, networkResponseDat
385
395
  }
386
396
  const recordsById = ((_b = (_d = environment.store)[__typename]) !== null && _b !== void 0 ? _b : (_d[__typename] = {}));
387
397
  const newStoreRecord = ((_c = recordsById[newStoreRecordId]) !== null && _c !== void 0 ? _c : (recordsById[newStoreRecordId] = {}));
388
- normalizeDataIntoRecord(environment, astNode.selections, networkResponseData, newStoreRecord, { __link: newStoreRecordId, __typename: __typename }, variables, nestedRefetchQueries, mutableEncounteredIds);
398
+ normalizeDataIntoRecord(environment, astNode.selections, networkResponseData, newStoreRecord, { __link: newStoreRecordId, __typename: __typename }, variables, mutableEncounteredIds);
389
399
  return newStoreRecordId;
390
400
  }
391
401
  function isScalarOrEmptyArray(data) {
@@ -422,6 +432,15 @@ function getParentRecordKey(astNode, variables) {
422
432
  function getStoreKeyChunkForArgumentValue(argumentValue, variables) {
423
433
  var _a;
424
434
  switch (argumentValue.kind) {
435
+ case 'Object': {
436
+ return Object.fromEntries(argumentValue.value.map(([argumentName, argumentValue]) => {
437
+ return [
438
+ argumentName,
439
+ // substitute variables
440
+ getStoreKeyChunkForArgumentValue(argumentValue, variables),
441
+ ];
442
+ }));
443
+ }
425
444
  case 'Literal': {
426
445
  return argumentValue.value;
427
446
  }
@@ -444,48 +463,62 @@ function getStoreKeyChunkForArgumentValue(argumentValue, variables) {
444
463
  }
445
464
  }
446
465
  function getStoreKeyChunkForArgument(argument, variables) {
447
- const chunk = getStoreKeyChunkForArgumentValue(argument[1], variables);
448
- return `${exports.FIRST_SPLIT_KEY}${argument[0]}${exports.SECOND_SPLIT_KEY}${chunk}`;
466
+ const [argumentName, argumentValue] = argument;
467
+ let chunk = getStoreKeyChunkForArgumentValue(argumentValue, variables);
468
+ if (typeof chunk === 'object') {
469
+ chunk = JSON.stringify(stableCopy(chunk));
470
+ }
471
+ return `${exports.FIRST_SPLIT_KEY}${argumentName}${exports.SECOND_SPLIT_KEY}${chunk}`;
449
472
  }
450
473
  function getNetworkResponseKey(astNode) {
451
474
  let networkResponseKey = astNode.fieldName;
452
475
  const fieldParameters = astNode.arguments;
453
476
  if (fieldParameters != null) {
454
- for (const fieldParameter of fieldParameters) {
455
- const [argumentName, argumentValue] = fieldParameter;
456
- let argumentValueChunk;
457
- switch (argumentValue.kind) {
458
- case 'Literal': {
459
- argumentValueChunk = 'l_' + argumentValue.value;
460
- break;
461
- }
462
- case 'Variable': {
463
- argumentValueChunk = 'v_' + argumentValue.name;
464
- break;
465
- }
466
- case 'String': {
467
- argumentValueChunk = 's_' + argumentValue.value;
468
- break;
469
- }
470
- case 'Enum': {
471
- argumentValueChunk = 'e_' + argumentValue.value;
472
- break;
473
- }
474
- default: {
475
- // Ensure we have covered all variants
476
- let _ = argumentValue;
477
- _;
478
- throw new Error('Unexpected case');
479
- }
480
- }
477
+ for (const [argumentName, argumentValue] of fieldParameters) {
478
+ let argumentValueChunk = getArgumentValueChunk(argumentValue);
481
479
  networkResponseKey += `${exports.FIRST_SPLIT_KEY}${argumentName}${exports.SECOND_SPLIT_KEY}${argumentValueChunk}`;
482
480
  }
483
481
  }
484
482
  return networkResponseKey;
485
483
  }
484
+ function getArgumentValueChunk(argumentValue) {
485
+ switch (argumentValue.kind) {
486
+ case 'Object': {
487
+ return ('o_' +
488
+ argumentValue.value
489
+ .map(([argumentName, argumentValue]) => {
490
+ return (argumentName +
491
+ exports.THIRD_SPLIT_KEY +
492
+ getArgumentValueChunk(argumentValue));
493
+ })
494
+ .join('_') +
495
+ '_c');
496
+ }
497
+ case 'Literal': {
498
+ return 'l_' + argumentValue.value;
499
+ }
500
+ case 'Variable': {
501
+ return 'v_' + argumentValue.name;
502
+ }
503
+ case 'String': {
504
+ // replace all non-word characters (alphanumeric & underscore) with underscores
505
+ return 's_' + argumentValue.value.replaceAll(/\W/g, '_');
506
+ }
507
+ case 'Enum': {
508
+ return 'e_' + argumentValue.value;
509
+ }
510
+ default: {
511
+ // Ensure we have covered all variants
512
+ let _ = argumentValue;
513
+ _;
514
+ throw new Error('Unexpected case');
515
+ }
516
+ }
517
+ }
486
518
  // an alias might be pullRequests____first___first____after___cursor
487
519
  exports.FIRST_SPLIT_KEY = '____';
488
520
  exports.SECOND_SPLIT_KEY = '___';
521
+ exports.THIRD_SPLIT_KEY = '__';
489
522
  // Returns a key to look up an item in the store
490
523
  function getDataIdOfNetworkResponse(parentRecordLink, dataToNormalize, astNode, variables, index) {
491
524
  // If we are dealing with nested Query, use __ROOT as id
@@ -1,18 +1,22 @@
1
- import { NormalizationAst } from './entrypoint';
1
+ import { NormalizationAstNodes } from './entrypoint';
2
2
  import { Variables } from './FragmentReference';
3
- import { IsographEnvironment, Link } from './IsographEnvironment';
4
- export type ShouldFetch = 'Yes' | 'No' | 'IfNecessary';
3
+ import { IsographEnvironment, StoreLink } from './IsographEnvironment';
4
+ export type ShouldFetch = RequiredShouldFetch | 'IfNecessary';
5
+ export type RequiredShouldFetch = 'Yes' | 'No';
5
6
  export declare const DEFAULT_SHOULD_FETCH_VALUE: ShouldFetch;
6
- export type FetchOptions = {
7
+ export type FetchOptions<TReadOutData> = {
7
8
  shouldFetch?: ShouldFetch;
8
- onComplete?: () => void;
9
+ onComplete?: (data: TReadOutData) => void;
9
10
  onError?: () => void;
10
11
  };
12
+ export type RequiredFetchOptions<TReadOutData> = {
13
+ shouldFetch: RequiredShouldFetch;
14
+ } & FetchOptions<TReadOutData>;
11
15
  export type CheckResult = {
12
16
  kind: 'EnoughData';
13
17
  } | {
14
18
  kind: 'MissingData';
15
- record: Link;
19
+ record: StoreLink;
16
20
  };
17
- export declare function check(environment: IsographEnvironment, normalizationAst: NormalizationAst, variables: Variables, root: Link): CheckResult;
21
+ export declare function check(environment: IsographEnvironment, normalizationAst: NormalizationAstNodes, variables: Variables, root: StoreLink): CheckResult;
18
22
  //# 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,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;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,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"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAEL,mBAAmB,EACnB,SAAS,EAEV,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,aAAa,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,IAAI,CAAC;AAE/C,eAAO,MAAM,0BAA0B,EAAE,WAA2B,CAAC;AAErE,MAAM,MAAM,YAAY,CAAC,YAAY,IAAI;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,YAAY,IAAI;IAC/C,WAAW,EAAE,mBAAmB,CAAC;CAClC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEN,wBAAgB,KAAK,CACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,qBAAqB,EACvC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,GACd,WAAW,CAgBb"}
@@ -12,10 +12,10 @@ function check(environment, normalizationAst, variables, root) {
12
12
  const recordsById = ((_a = (_c = environment.store)[_d = root.__typename]) !== null && _a !== void 0 ? _a : (_c[_d] = {}));
13
13
  const newStoreRecord = ((_b = recordsById[_e = root.__link]) !== null && _b !== void 0 ? _b : (recordsById[_e] = {}));
14
14
  const checkResult = checkFromRecord(environment, normalizationAst, variables, newStoreRecord, root);
15
- (0, logging_1.logMessage)(environment, {
15
+ (0, logging_1.logMessage)(environment, () => ({
16
16
  kind: 'EnvironmentCheck',
17
17
  result: checkResult,
18
- });
18
+ }));
19
19
  return checkResult;
20
20
  }
21
21
  function checkFromRecord(environment, normalizationAst, variables, record, recordLink) {
@@ -1,5 +1,5 @@
1
- import { IsographEnvironment } from './IsographEnvironment';
2
1
  import { FragmentReference } from './FragmentReference';
2
+ import { IsographEnvironment } from './IsographEnvironment';
3
3
  import { NetworkRequestReaderOptions } from './read';
4
4
  export declare function getOrCreateCachedComponent(environment: IsographEnvironment, componentName: string, fragmentReference: FragmentReference<any, any>, networkRequestOptions: NetworkRequestReaderOptions): React.FC<any>;
5
5
  //# sourceMappingURL=componentCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"componentCache.d.ts","sourceRoot":"","sources":["../../src/core/componentCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,2BAA2B,EAAE,MAAM,QAAQ,CAAC;AAIrD,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9C,qBAAqB,EAAE,2BAA2B,GACjD,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAgDf"}
1
+ {"version":3,"file":"componentCache.d.ts","sourceRoot":"","sources":["../../src/core/componentCache.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,QAAQ,CAAC;AAGrD,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9C,qBAAqB,EAAE,2BAA2B,GACjD,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CA0Cf"}
@@ -1,38 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getOrCreateCachedComponent = getOrCreateCachedComponent;
4
- const cache_1 = require("./cache");
5
4
  const useReadAndSubscribe_1 = require("../react/useReadAndSubscribe");
6
- const PromiseWrapper_1 = require("./PromiseWrapper");
5
+ const FragmentReference_1 = require("./FragmentReference");
7
6
  const logging_1 = require("./logging");
7
+ const PromiseWrapper_1 = require("./PromiseWrapper");
8
+ const startUpdate_1 = require("./startUpdate");
8
9
  function getOrCreateCachedComponent(environment, componentName, fragmentReference, networkRequestOptions) {
9
- var _a, _b, _c;
10
- // cachedComponentsById is a three layer cache: id, then component name, then
11
- // stringified args. These three, together, uniquely identify a read at a given
12
- // time.
13
- const cachedComponentsById = environment.componentCache;
14
- const recordLink = fragmentReference.root.__link;
15
- const componentsByName = ((_a = cachedComponentsById[recordLink]) !== null && _a !== void 0 ? _a : (cachedComponentsById[recordLink] = {}));
16
- componentsByName[componentName] = (_b = componentsByName[componentName]) !== null && _b !== void 0 ? _b : {};
17
- const byArgs = componentsByName[componentName];
18
- const stringifiedArgs = JSON.stringify((0, cache_1.stableCopy)(fragmentReference.variables));
19
- byArgs[stringifiedArgs] =
20
- (_c = byArgs[stringifiedArgs]) !== null && _c !== void 0 ? _c : (() => {
21
- function Component(additionalRuntimeProps) {
22
- const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
23
- const data = (0, useReadAndSubscribe_1.useReadAndSubscribe)(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst);
24
- (0, logging_1.logMessage)(environment, {
25
- kind: 'ComponentRerendered',
26
- componentName,
27
- rootLink: fragmentReference.root,
28
- });
29
- return readerWithRefetchQueries.readerArtifact.resolver({
30
- data,
31
- parameters: fragmentReference.variables,
32
- }, additionalRuntimeProps);
33
- }
34
- Component.displayName = `${componentName} (id: ${fragmentReference.root}) @component`;
35
- return Component;
36
- })();
37
- return byArgs[stringifiedArgs];
10
+ var _a;
11
+ var _b, _c;
12
+ // We create startUpdate outside of component to make it stable
13
+ const startUpdate = (0, startUpdate_1.createStartUpdate)(environment, fragmentReference, networkRequestOptions);
14
+ return ((_a = (_b = environment.componentCache)[_c = (0, FragmentReference_1.stableIdForFragmentReference)(fragmentReference, componentName)]) !== null && _a !== void 0 ? _a : (_b[_c] = (() => {
15
+ function Component(additionalRuntimeProps) {
16
+ const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
17
+ const data = (0, useReadAndSubscribe_1.useReadAndSubscribe)(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst);
18
+ (0, logging_1.logMessage)(environment, () => ({
19
+ kind: 'ComponentRerendered',
20
+ componentName,
21
+ rootLink: fragmentReference.root,
22
+ }));
23
+ return readerWithRefetchQueries.readerArtifact.resolver({
24
+ data,
25
+ parameters: fragmentReference.variables,
26
+ startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable
27
+ ? startUpdate
28
+ : undefined,
29
+ }, additionalRuntimeProps);
30
+ }
31
+ Component.displayName = `${componentName} (id: ${fragmentReference.root}) @component`;
32
+ return Component;
33
+ })()));
38
34
  }
@@ -1,38 +1,56 @@
1
+ import type { UnknownTReadFromStore } from './FragmentReference';
1
2
  import type { TypeName } from './IsographEnvironment';
2
3
  import { TopLevelReaderArtifact } from './reader';
3
4
  import { Arguments } from './util';
4
- export type ReaderWithRefetchQueries<TReadFromStore extends {
5
- parameters: object;
6
- data: object;
7
- }, TClientFieldValue> = {
5
+ export type ReaderWithRefetchQueries<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue> = {
8
6
  readonly kind: 'ReaderWithRefetchQueries';
9
7
  readonly readerArtifact: TopLevelReaderArtifact<TReadFromStore, TClientFieldValue, any>;
10
8
  readonly nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[];
11
9
  };
12
- export type NetworkRequestInfo = {
10
+ export type ReaderWithRefetchQueriesLoader<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue> = {
11
+ readonly kind: 'ReaderWithRefetchQueriesLoader';
12
+ readonly loader: () => Promise<ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>>;
13
+ };
14
+ export type NetworkRequestInfo<TNormalizationAst> = {
13
15
  readonly kind: 'NetworkRequestInfo';
14
- readonly queryText: string;
15
- readonly normalizationAst: NormalizationAst;
16
+ readonly operation: IsographOperation | IsographPersistedOperation;
17
+ readonly normalizationAst: TNormalizationAst;
18
+ };
19
+ export type IsographOperation = {
20
+ readonly kind: 'Operation';
21
+ readonly text: string;
22
+ };
23
+ export type IsographPersistedOperation = {
24
+ readonly kind: 'PersistedOperation';
25
+ readonly operationId: string;
26
+ readonly extraInfo: IsographPersistedOperationExtraInfo | null;
16
27
  };
17
- export type IsographEntrypoint<TReadFromStore extends {
18
- parameters: object;
19
- data: object;
20
- }, TClientFieldValue> = {
28
+ export type IsographPersistedOperationExtraInfo = {
29
+ readonly kind: 'PersistedOperationExtraInfo';
30
+ readonly operationName: string | null;
31
+ readonly operationKind: 'Query' | 'Mutation' | 'Subscription';
32
+ };
33
+ export type IsographEntrypoint<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue, TNormalizationAst extends NormalizationAst | NormalizationAstLoader> = {
21
34
  readonly kind: 'Entrypoint';
22
- readonly networkRequestInfo: NetworkRequestInfo;
23
- readonly readerWithRefetchQueries: ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>;
35
+ readonly networkRequestInfo: NetworkRequestInfo<TNormalizationAst>;
36
+ readonly readerWithRefetchQueries: ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue> | ReaderWithRefetchQueriesLoader<TReadFromStore, TClientFieldValue>;
24
37
  readonly concreteType: TypeName;
25
38
  };
26
- export type IsographEntrypointLoader<TReadFromStore extends {
27
- parameters: object;
28
- data: object;
29
- }, TClientFieldValue> = {
39
+ export type IsographEntrypointLoader<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue> = {
30
40
  readonly kind: 'EntrypointLoader';
31
41
  readonly typeAndField: string;
32
- readonly loader: () => Promise<IsographEntrypoint<TReadFromStore, TClientFieldValue>>;
42
+ readonly loader: () => Promise<IsographEntrypoint<TReadFromStore, TClientFieldValue, NormalizationAst>>;
33
43
  };
34
44
  export type NormalizationAstNode = NormalizationScalarField | NormalizationLinkedField | NormalizationInlineFragment;
35
- export type NormalizationAst = ReadonlyArray<NormalizationAstNode>;
45
+ export type NormalizationAstNodes = ReadonlyArray<NormalizationAstNode>;
46
+ export type NormalizationAst = {
47
+ readonly kind: 'NormalizationAst';
48
+ readonly selections: NormalizationAstNodes;
49
+ };
50
+ export type NormalizationAstLoader = {
51
+ readonly kind: 'NormalizationAstLoader';
52
+ readonly loader: () => Promise<NormalizationAst>;
53
+ };
36
54
  export type NormalizationScalarField = {
37
55
  readonly kind: 'Scalar';
38
56
  readonly fieldName: string;
@@ -42,28 +60,25 @@ export type NormalizationLinkedField = {
42
60
  readonly kind: 'Linked';
43
61
  readonly fieldName: string;
44
62
  readonly arguments: Arguments | null;
45
- readonly selections: NormalizationAst;
63
+ readonly selections: NormalizationAstNodes;
46
64
  readonly concreteType: TypeName | null;
47
65
  };
48
66
  export type NormalizationInlineFragment = {
49
67
  readonly kind: 'InlineFragment';
50
68
  readonly type: string;
51
- readonly selections: NormalizationAst;
69
+ readonly selections: NormalizationAstNodes;
52
70
  };
53
71
  export type RefetchQueryNormalizationArtifact = {
54
72
  readonly kind: 'RefetchQuery';
55
- readonly networkRequestInfo: NetworkRequestInfo;
73
+ readonly networkRequestInfo: NetworkRequestInfo<NormalizationAst>;
56
74
  readonly concreteType: TypeName;
57
75
  };
58
76
  export type RefetchQueryNormalizationArtifactWrapper = {
59
77
  readonly artifact: RefetchQueryNormalizationArtifact;
60
78
  readonly allowedVariables: string[];
61
79
  };
62
- export declare function assertIsEntrypoint<TReadFromStore extends {
63
- parameters: object;
64
- data: object;
65
- }, TClientFieldValue>(value: IsographEntrypoint<TReadFromStore, TClientFieldValue> | ((_: any) => any) | any): asserts value is IsographEntrypoint<TReadFromStore, TClientFieldValue>;
66
- export type ExtractReadFromStore<Type> = Type extends IsographEntrypoint<infer X, any> ? X : never;
67
- export type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, infer X> ? X : never;
80
+ export declare function assertIsEntrypoint<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue, TNormalizationAst extends NormalizationAst | NormalizationAstLoader>(value: IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst> | ((_: any) => any) | any): asserts value is IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>;
81
+ export type ExtractReadFromStore<Type> = Type extends IsographEntrypoint<infer X, any, any> ? X : never;
82
+ export type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, infer X, any> ? X : never;
68
83
  export type ExtractProps<Type> = Type extends React.FC<infer X> ? X : never;
69
84
  //# sourceMappingURL=entrypoint.d.ts.map
@@ -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,13 +1,12 @@
1
- import { IsographEnvironment, type Link } from './IsographEnvironment';
2
- import { NormalizationAst } from './entrypoint';
1
+ import { NormalizationAstNodes } from './entrypoint';
2
+ import { IsographEnvironment, type StoreLink } from './IsographEnvironment';
3
3
  export type RetainedQuery = {
4
- readonly normalizationAst: NormalizationAst;
4
+ readonly normalizationAst: NormalizationAstNodes;
5
5
  readonly variables: {};
6
- readonly root: Link;
6
+ readonly root: StoreLink;
7
7
  };
8
- type DidUnretainSomeQuery = boolean;
8
+ export type DidUnretainSomeQuery = boolean;
9
9
  export declare function unretainQuery(environment: IsographEnvironment, retainedQuery: RetainedQuery): DidUnretainSomeQuery;
10
10
  export declare function retainQuery(environment: IsographEnvironment, queryToRetain: RetainedQuery): void;
11
11
  export declare function garbageCollectEnvironment(environment: IsographEnvironment): void;
12
- export {};
13
12
  //# sourceMappingURL=garbageCollection.d.ts.map