@isograph/react 0.0.0-main-3de26263 → 0.0.0-main-709dc2bb

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 (260) hide show
  1. package/.turbo/turbo-compile-libs.log +9 -2
  2. package/dist/_virtual/rolldown_runtime.js +25 -0
  3. package/dist/core/FragmentReference.d.mts +38 -0
  4. package/dist/core/FragmentReference.d.mts.map +1 -0
  5. package/dist/core/FragmentReference.d.ts +31 -29
  6. package/dist/core/FragmentReference.d.ts.map +1 -1
  7. package/dist/core/FragmentReference.js +7 -5
  8. package/dist/core/FragmentReference.mjs +10 -0
  9. package/dist/core/FragmentReference.mjs.map +1 -0
  10. package/dist/core/IsographEnvironment.d.mts +89 -0
  11. package/dist/core/IsographEnvironment.d.mts.map +1 -0
  12. package/dist/core/IsographEnvironment.d.ts +76 -81
  13. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  14. package/dist/core/IsographEnvironment.js +59 -82
  15. package/dist/core/IsographEnvironment.mjs +67 -0
  16. package/dist/core/IsographEnvironment.mjs.map +1 -0
  17. package/dist/core/PromiseWrapper.d.mts +36 -0
  18. package/dist/core/PromiseWrapper.d.mts.map +1 -0
  19. package/dist/core/PromiseWrapper.d.ts +26 -23
  20. package/dist/core/PromiseWrapper.d.ts.map +1 -1
  21. package/dist/core/PromiseWrapper.js +45 -43
  22. package/dist/core/PromiseWrapper.mjs +49 -0
  23. package/dist/core/PromiseWrapper.mjs.map +1 -0
  24. package/dist/core/areEqualWithDeepComparison.js +56 -93
  25. package/dist/core/areEqualWithDeepComparison.mjs +62 -0
  26. package/dist/core/areEqualWithDeepComparison.mjs.map +1 -0
  27. package/dist/core/brand.d.mts +19 -0
  28. package/dist/core/brand.d.mts.map +1 -0
  29. package/dist/core/brand.d.ts +6 -6
  30. package/dist/core/brand.d.ts.map +1 -1
  31. package/dist/core/cache.d.mts +20 -0
  32. package/dist/core/cache.d.mts.map +1 -0
  33. package/dist/core/cache.d.ts +18 -24
  34. package/dist/core/cache.d.ts.map +1 -1
  35. package/dist/core/cache.js +203 -306
  36. package/dist/core/cache.mjs +237 -0
  37. package/dist/core/cache.mjs.map +1 -0
  38. package/dist/core/check.d.mts +28 -0
  39. package/dist/core/check.d.mts.map +1 -0
  40. package/dist/core/check.d.ts +21 -19
  41. package/dist/core/check.d.ts.map +1 -1
  42. package/dist/core/check.js +80 -122
  43. package/dist/core/check.mjs +84 -0
  44. package/dist/core/check.mjs.map +1 -0
  45. package/dist/core/componentCache.js +9 -10
  46. package/dist/core/componentCache.mjs +12 -0
  47. package/dist/core/componentCache.mjs.map +1 -0
  48. package/dist/core/entrypoint.d.mts +99 -0
  49. package/dist/core/entrypoint.d.mts.map +1 -0
  50. package/dist/core/entrypoint.d.ts +83 -80
  51. package/dist/core/entrypoint.d.ts.map +1 -1
  52. package/dist/core/entrypoint.js +6 -5
  53. package/dist/core/entrypoint.mjs +8 -0
  54. package/dist/core/entrypoint.mjs.map +1 -0
  55. package/dist/core/garbageCollection.d.mts +18 -0
  56. package/dist/core/garbageCollection.d.mts.map +1 -0
  57. package/dist/core/garbageCollection.d.ts +15 -16
  58. package/dist/core/garbageCollection.d.ts.map +1 -1
  59. package/dist/core/garbageCollection.js +76 -120
  60. package/dist/core/garbageCollection.mjs +89 -0
  61. package/dist/core/garbageCollection.mjs.map +1 -0
  62. package/dist/core/getOrCreateCacheForArtifact.js +35 -38
  63. package/dist/core/getOrCreateCacheForArtifact.mjs +38 -0
  64. package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -0
  65. package/dist/core/logging.d.mts +95 -0
  66. package/dist/core/logging.d.mts.map +1 -0
  67. package/dist/core/logging.d.ts +66 -61
  68. package/dist/core/logging.d.ts.map +1 -1
  69. package/dist/core/logging.js +17 -18
  70. package/dist/core/logging.mjs +20 -0
  71. package/dist/core/logging.mjs.map +1 -0
  72. package/dist/core/makeNetworkRequest.d.mts +13 -0
  73. package/dist/core/makeNetworkRequest.d.mts.map +1 -0
  74. package/dist/core/makeNetworkRequest.d.ts +12 -10
  75. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  76. package/dist/core/makeNetworkRequest.js +180 -260
  77. package/dist/core/makeNetworkRequest.mjs +195 -0
  78. package/dist/core/makeNetworkRequest.mjs.map +1 -0
  79. package/dist/core/optimisticProxy.d.mts +43 -0
  80. package/dist/core/optimisticProxy.d.mts.map +1 -0
  81. package/dist/core/optimisticProxy.d.ts +37 -53
  82. package/dist/core/optimisticProxy.d.ts.map +1 -1
  83. package/dist/core/optimisticProxy.js +245 -353
  84. package/dist/core/optimisticProxy.mjs +268 -0
  85. package/dist/core/optimisticProxy.mjs.map +1 -0
  86. package/dist/core/read.d.mts +29 -0
  87. package/dist/core/read.d.mts.map +1 -0
  88. package/dist/core/read.d.ts +23 -29
  89. package/dist/core/read.d.ts.map +1 -1
  90. package/dist/core/read.js +435 -634
  91. package/dist/core/read.mjs +456 -0
  92. package/dist/core/read.mjs.map +1 -0
  93. package/dist/core/reader.d.mts +89 -0
  94. package/dist/core/reader.d.mts.map +1 -0
  95. package/dist/core/reader.d.ts +78 -79
  96. package/dist/core/reader.d.ts.map +1 -1
  97. package/dist/core/startUpdate.js +115 -149
  98. package/dist/core/startUpdate.mjs +125 -0
  99. package/dist/core/startUpdate.mjs.map +1 -0
  100. package/dist/core/subscribe.d.mts +12 -0
  101. package/dist/core/subscribe.d.mts.map +1 -0
  102. package/dist/core/subscribe.d.ts +11 -7
  103. package/dist/core/subscribe.d.ts.map +1 -1
  104. package/dist/core/subscribe.js +67 -109
  105. package/dist/core/subscribe.mjs +79 -0
  106. package/dist/core/subscribe.mjs.map +1 -0
  107. package/dist/core/util.d.mts +27 -0
  108. package/dist/core/util.d.mts.map +1 -0
  109. package/dist/core/util.d.ts +21 -24
  110. package/dist/core/util.d.ts.map +1 -1
  111. package/dist/core/util.js +17 -23
  112. package/dist/core/util.mjs +21 -0
  113. package/dist/core/util.mjs.map +1 -0
  114. package/dist/core/writeData.d.mts +11 -0
  115. package/dist/core/writeData.d.mts.map +1 -0
  116. package/dist/core/writeData.d.ts +10 -6
  117. package/dist/core/writeData.d.ts.map +1 -1
  118. package/dist/core/writeData.js +39 -34
  119. package/dist/core/writeData.mjs +42 -0
  120. package/dist/core/writeData.mjs.map +1 -0
  121. package/dist/index.d.mts +32 -0
  122. package/dist/index.d.ts +32 -32
  123. package/dist/index.js +70 -72
  124. package/dist/index.mjs +31 -0
  125. package/dist/loadable-hooks/useClientSideDefer.d.mts +12 -0
  126. package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -0
  127. package/dist/loadable-hooks/useClientSideDefer.d.ts +9 -13
  128. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
  129. package/dist/loadable-hooks/useClientSideDefer.js +13 -44
  130. package/dist/loadable-hooks/useClientSideDefer.mjs +14 -0
  131. package/dist/loadable-hooks/useClientSideDefer.mjs.map +1 -0
  132. package/dist/loadable-hooks/useConnectionSpecPagination.d.mts +33 -0
  133. package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -0
  134. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +26 -22
  135. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
  136. package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -176
  137. package/dist/loadable-hooks/useConnectionSpecPagination.mjs +134 -0
  138. package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -0
  139. package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts +8 -0
  140. package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -0
  141. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +6 -3
  142. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
  143. package/dist/loadable-hooks/useImperativeExposedMutationField.js +9 -12
  144. package/dist/loadable-hooks/useImperativeExposedMutationField.mjs +11 -0
  145. package/dist/loadable-hooks/useImperativeExposedMutationField.mjs.map +1 -0
  146. package/dist/loadable-hooks/useImperativeLoadableField.d.mts +19 -0
  147. package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -0
  148. package/dist/loadable-hooks/useImperativeLoadableField.d.ts +15 -11
  149. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
  150. package/dist/loadable-hooks/useImperativeLoadableField.js +16 -12
  151. package/dist/loadable-hooks/useImperativeLoadableField.mjs +17 -0
  152. package/dist/loadable-hooks/useImperativeLoadableField.mjs.map +1 -0
  153. package/dist/loadable-hooks/useSkipLimitPagination.d.mts +24 -0
  154. package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -0
  155. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +19 -15
  156. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
  157. package/dist/loadable-hooks/useSkipLimitPagination.js +118 -164
  158. package/dist/loadable-hooks/useSkipLimitPagination.mjs +119 -0
  159. package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -0
  160. package/dist/react/FragmentReader.d.mts +18 -0
  161. package/dist/react/FragmentReader.d.mts.map +1 -0
  162. package/dist/react/FragmentReader.d.ts +16 -8
  163. package/dist/react/FragmentReader.d.ts.map +1 -1
  164. package/dist/react/FragmentReader.js +8 -7
  165. package/dist/react/FragmentReader.mjs +10 -0
  166. package/dist/react/FragmentReader.mjs.map +1 -0
  167. package/dist/react/FragmentRenderer.d.mts +20 -0
  168. package/dist/react/FragmentRenderer.d.mts.map +1 -0
  169. package/dist/react/FragmentRenderer.d.ts +18 -14
  170. package/dist/react/FragmentRenderer.d.ts.map +1 -1
  171. package/dist/react/FragmentRenderer.js +11 -33
  172. package/dist/react/FragmentRenderer.mjs +12 -0
  173. package/dist/react/FragmentRenderer.mjs.map +1 -0
  174. package/dist/react/IsographEnvironmentProvider.d.mts +17 -0
  175. package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -0
  176. package/dist/react/IsographEnvironmentProvider.d.ts +15 -9
  177. package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
  178. package/dist/react/IsographEnvironmentProvider.js +15 -39
  179. package/dist/react/IsographEnvironmentProvider.mjs +17 -0
  180. package/dist/react/IsographEnvironmentProvider.mjs.map +1 -0
  181. package/dist/react/LoadableFieldReader.d.mts +21 -0
  182. package/dist/react/LoadableFieldReader.d.mts.map +1 -0
  183. package/dist/react/LoadableFieldReader.d.ts +15 -13
  184. package/dist/react/LoadableFieldReader.d.ts.map +1 -1
  185. package/dist/react/LoadableFieldReader.js +13 -47
  186. package/dist/react/LoadableFieldReader.mjs +14 -0
  187. package/dist/react/LoadableFieldReader.mjs.map +1 -0
  188. package/dist/react/LoadableFieldRenderer.d.mts +22 -0
  189. package/dist/react/LoadableFieldRenderer.d.mts.map +1 -0
  190. package/dist/react/LoadableFieldRenderer.d.ts +16 -14
  191. package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
  192. package/dist/react/LoadableFieldRenderer.js +13 -70
  193. package/dist/react/LoadableFieldRenderer.mjs +14 -0
  194. package/dist/react/LoadableFieldRenderer.mjs.map +1 -0
  195. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +18 -0
  196. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -0
  197. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +11 -3
  198. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -1
  199. package/dist/react/RenderAfterCommit__DO_NOT_USE.js +17 -13
  200. package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs +18 -0
  201. package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs.map +1 -0
  202. package/dist/react/createIsographEnvironment.d.mts +9 -0
  203. package/dist/react/createIsographEnvironment.d.mts.map +1 -0
  204. package/dist/react/createIsographEnvironment.d.ts +7 -3
  205. package/dist/react/createIsographEnvironment.d.ts.map +1 -1
  206. package/dist/react/createIsographEnvironment.js +8 -6
  207. package/dist/react/createIsographEnvironment.mjs +11 -0
  208. package/dist/react/createIsographEnvironment.mjs.map +1 -0
  209. package/dist/react/maybeUnwrapNetworkRequest.js +9 -12
  210. package/dist/react/maybeUnwrapNetworkRequest.mjs +12 -0
  211. package/dist/react/maybeUnwrapNetworkRequest.mjs.map +1 -0
  212. package/dist/react/useImperativeReference.d.mts +15 -0
  213. package/dist/react/useImperativeReference.d.mts.map +1 -0
  214. package/dist/react/useImperativeReference.d.ts +13 -11
  215. package/dist/react/useImperativeReference.d.ts.map +1 -1
  216. package/dist/react/useImperativeReference.js +34 -30
  217. package/dist/react/useImperativeReference.mjs +35 -0
  218. package/dist/react/useImperativeReference.mjs.map +1 -0
  219. package/dist/react/useLazyReference.d.mts +13 -0
  220. package/dist/react/useLazyReference.d.mts.map +1 -0
  221. package/dist/react/useLazyReference.d.ts +11 -9
  222. package/dist/react/useLazyReference.d.ts.map +1 -1
  223. package/dist/react/useLazyReference.js +17 -40
  224. package/dist/react/useLazyReference.mjs +18 -0
  225. package/dist/react/useLazyReference.mjs.map +1 -0
  226. package/dist/react/useReadAndSubscribe.d.mts +20 -0
  227. package/dist/react/useReadAndSubscribe.d.mts.map +1 -0
  228. package/dist/react/useReadAndSubscribe.d.ts +14 -11
  229. package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
  230. package/dist/react/useReadAndSubscribe.js +54 -63
  231. package/dist/react/useReadAndSubscribe.mjs +59 -0
  232. package/dist/react/useReadAndSubscribe.mjs.map +1 -0
  233. package/dist/react/useRerenderOnChange.d.mts +12 -0
  234. package/dist/react/useRerenderOnChange.d.mts.map +1 -0
  235. package/dist/react/useRerenderOnChange.d.ts +10 -6
  236. package/dist/react/useRerenderOnChange.d.ts.map +1 -1
  237. package/dist/react/useRerenderOnChange.js +16 -20
  238. package/dist/react/useRerenderOnChange.mjs +17 -0
  239. package/dist/react/useRerenderOnChange.mjs.map +1 -0
  240. package/dist/react/useResult.d.mts +8 -0
  241. package/dist/react/useResult.d.mts.map +1 -0
  242. package/dist/react/useResult.d.ts +7 -3
  243. package/dist/react/useResult.d.ts.map +1 -1
  244. package/dist/react/useResult.js +27 -30
  245. package/dist/react/useResult.mjs +30 -0
  246. package/dist/react/useResult.mjs.map +1 -0
  247. package/package.json +16 -8
  248. package/dist/core/areEqualWithDeepComparison.d.ts +0 -3
  249. package/dist/core/areEqualWithDeepComparison.d.ts.map +0 -1
  250. package/dist/core/brand.js +0 -2
  251. package/dist/core/componentCache.d.ts +0 -5
  252. package/dist/core/componentCache.d.ts.map +0 -1
  253. package/dist/core/getOrCreateCacheForArtifact.d.ts +0 -8
  254. package/dist/core/getOrCreateCacheForArtifact.d.ts.map +0 -1
  255. package/dist/core/reader.js +0 -2
  256. package/dist/core/startUpdate.d.ts +0 -9
  257. package/dist/core/startUpdate.d.ts.map +0 -1
  258. package/dist/index.d.ts.map +0 -1
  259. package/dist/react/maybeUnwrapNetworkRequest.d.ts +0 -4
  260. package/dist/react/maybeUnwrapNetworkRequest.d.ts.map +0 -1
package/dist/core/read.js CHANGED
@@ -1,660 +1,461 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.readButDoNotEvaluate = readButDoNotEvaluate;
4
- exports.readLoadablySelectedFieldData = readLoadablySelectedFieldData;
5
- exports.readResolverFieldData = readResolverFieldData;
6
- exports.readScalarFieldData = readScalarFieldData;
7
- exports.readLinkedFieldData = readLinkedFieldData;
8
- exports.readClientPointerData = readClientPointerData;
9
- exports.getNetworkRequestOptionsWithDefaults = getNetworkRequestOptionsWithDefaults;
10
- exports.readImperativelyLoadedField = readImperativelyLoadedField;
11
- const cache_1 = require("./cache");
12
- const componentCache_1 = require("./componentCache");
13
- const IsographEnvironment_1 = require("./IsographEnvironment");
14
- const logging_1 = require("./logging");
15
- const makeNetworkRequest_1 = require("./makeNetworkRequest");
16
- const optimisticProxy_1 = require("./optimisticProxy");
17
- const PromiseWrapper_1 = require("./PromiseWrapper");
18
- const startUpdate_1 = require("./startUpdate");
1
+ const require_PromiseWrapper = require('./PromiseWrapper.js');
2
+ const require_IsographEnvironment = require('./IsographEnvironment.js');
3
+ const require_logging = require('./logging.js');
4
+ const require_startUpdate = require('./startUpdate.js');
5
+ const require_componentCache = require('./componentCache.js');
6
+ const require_makeNetworkRequest = require('./makeNetworkRequest.js');
7
+ const require_optimisticProxy = require('./optimisticProxy.js');
8
+ const require_cache = require('./cache.js');
9
+
10
+ //#region src/core/read.ts
19
11
  function readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions) {
20
- var _a;
21
- const mutableEncounteredRecords = new Map();
22
- // TODO consider moving this to the outside
23
- const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
24
- const response = readData(environment, readerWithRefetchQueries.readerArtifact.readerAst, fragmentReference.root, (_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {}, readerWithRefetchQueries.nestedRefetchQueries, fragmentReference.networkRequest, networkRequestOptions, mutableEncounteredRecords);
25
- (0, logging_1.logMessage)(environment, () => ({
26
- kind: 'DoneReading',
27
- response,
28
- fieldName: readerWithRefetchQueries.readerArtifact.fieldName,
29
- root: fragmentReference.root,
30
- }));
31
- if (response.kind === 'MissingData') {
32
- // There are two cases here that we care about:
33
- // 1. the network request is in flight, we haven't suspended on it, and we want
34
- // to throw if it errors out. So, networkRequestOptions.suspendIfInFlight === false
35
- // and networkRequestOptions.throwOnNetworkError === true.
36
- // 2. everything else
37
- //
38
- // In the first case, we cannot simply throw onNextChange, because if the network
39
- // response errors out, we will not update the store, so the onNextChange promise
40
- // will not resolve.
41
- if (!networkRequestOptions.suspendIfInFlight &&
42
- networkRequestOptions.throwOnNetworkError) {
43
- // What are we doing here? If the network response has errored out, we can do
44
- // two things: throw a rejected promise, or throw an error. Both work identically
45
- // in the browser. However, during initial SSR on NextJS, throwing a rejected
46
- // promise results in an infinite loop (including re-issuing the query until the
47
- // process OOM's or something.) Hence, we throw an error.
48
- const result = fragmentReference.networkRequest.result;
49
- if (result !== PromiseWrapper_1.NOT_SET && result.kind === 'Err') {
50
- throw new Error('NetworkError', { cause: result.error });
51
- }
52
- throw new Promise((resolve, reject) => {
53
- (0, cache_1.onNextChangeToRecord)(environment, response.recordLink).then(resolve);
54
- fragmentReference.networkRequest.promise.catch(reject);
55
- });
56
- }
57
- throw (0, cache_1.onNextChangeToRecord)(environment, response.recordLink);
58
- }
59
- else {
60
- return {
61
- encounteredRecords: mutableEncounteredRecords,
62
- item: response.data,
63
- };
64
- }
12
+ const mutableEncounteredRecords = /* @__PURE__ */ new Map();
13
+ const readerWithRefetchQueries = require_PromiseWrapper.readPromise(fragmentReference.readerWithRefetchQueries);
14
+ const response = readData(environment, readerWithRefetchQueries.readerArtifact.readerAst, fragmentReference.root, fragmentReference.variables ?? {}, readerWithRefetchQueries.nestedRefetchQueries, fragmentReference.networkRequest, networkRequestOptions, mutableEncounteredRecords);
15
+ require_logging.logMessage(environment, () => ({
16
+ kind: "DoneReading",
17
+ response,
18
+ fieldName: readerWithRefetchQueries.readerArtifact.fieldName,
19
+ root: fragmentReference.root
20
+ }));
21
+ if (response.kind === "MissingData") {
22
+ if (!networkRequestOptions.suspendIfInFlight && networkRequestOptions.throwOnNetworkError) {
23
+ const result = fragmentReference.networkRequest.result;
24
+ if (result !== require_PromiseWrapper.NOT_SET && result.kind === "Err") throw new Error("NetworkError", { cause: result.error });
25
+ throw new Promise((resolve, reject) => {
26
+ require_cache.onNextChangeToRecord(environment, response.recordLink).then(resolve);
27
+ fragmentReference.networkRequest.promise.catch(reject);
28
+ });
29
+ }
30
+ throw require_cache.onNextChangeToRecord(environment, response.recordLink);
31
+ } else return {
32
+ encounteredRecords: mutableEncounteredRecords,
33
+ item: response.data
34
+ };
65
35
  }
66
36
  function readData(environment, ast, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords) {
67
- var _a, _b;
68
- const encounteredIds = (0, cache_1.insertEmptySetIfMissing)(mutableEncounteredRecords, root.__typename);
69
- encounteredIds.add(root.__link);
70
- let storeRecord = (0, optimisticProxy_1.getStoreRecordProxy)(environment.store, root);
71
- if (storeRecord === undefined) {
72
- return {
73
- kind: 'MissingData',
74
- reason: 'No record for root ' + root.__link,
75
- recordLink: root,
76
- };
77
- }
78
- if (storeRecord == null) {
79
- return {
80
- kind: 'Success',
81
- data: null,
82
- };
83
- }
84
- let target = {};
85
- for (const field of ast) {
86
- switch (field.kind) {
87
- case 'Scalar': {
88
- const data = readScalarFieldData(field, storeRecord, root, variables);
89
- if (data.kind === 'MissingData') {
90
- return data;
91
- }
92
- target[(_a = field.alias) !== null && _a !== void 0 ? _a : field.fieldName] = data.data;
93
- break;
94
- }
95
- case 'Link': {
96
- target[field.alias] = root;
97
- break;
98
- }
99
- case 'Linked': {
100
- const data = readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast, root) => readData(environment, ast, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords));
101
- if (data.kind === 'MissingData') {
102
- return data;
103
- }
104
- target[(_b = field.alias) !== null && _b !== void 0 ? _b : field.fieldName] = data.data;
105
- break;
106
- }
107
- case 'ImperativelyLoadedField': {
108
- const data = readImperativelyLoadedField(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
109
- if (data.kind === 'MissingData') {
110
- return data;
111
- }
112
- target[field.alias] = data.data;
113
- break;
114
- }
115
- case 'Resolver': {
116
- const data = readResolverFieldData(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
117
- if (data.kind === 'MissingData') {
118
- return data;
119
- }
120
- target[field.alias] = data.data;
121
- break;
122
- }
123
- case 'LoadablySelectedField': {
124
- const data = readLoadablySelectedFieldData(environment, field, root, variables, networkRequest, networkRequestOptions, mutableEncounteredRecords);
125
- if (data.kind === 'MissingData') {
126
- return data;
127
- }
128
- target[field.alias] = data.data;
129
- break;
130
- }
131
- }
132
- }
133
- return {
134
- kind: 'Success',
135
- data: target,
136
- };
37
+ require_cache.insertEmptySetIfMissing(mutableEncounteredRecords, root.__typename).add(root.__link);
38
+ let storeRecord = require_optimisticProxy.getStoreRecordProxy(environment.store, root);
39
+ if (storeRecord === void 0) return {
40
+ kind: "MissingData",
41
+ reason: "No record for root " + root.__link,
42
+ recordLink: root
43
+ };
44
+ if (storeRecord == null) return {
45
+ kind: "Success",
46
+ data: null
47
+ };
48
+ let target = {};
49
+ for (const field of ast) switch (field.kind) {
50
+ case "Scalar": {
51
+ const data = readScalarFieldData(field, storeRecord, root, variables);
52
+ if (data.kind === "MissingData") return data;
53
+ target[field.alias ?? field.fieldName] = data.data;
54
+ break;
55
+ }
56
+ case "Link":
57
+ target[field.alias] = root;
58
+ break;
59
+ case "Linked": {
60
+ const data = readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast$1, root$1) => readData(environment, ast$1, root$1, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords));
61
+ if (data.kind === "MissingData") return data;
62
+ target[field.alias ?? field.fieldName] = data.data;
63
+ break;
64
+ }
65
+ case "ImperativelyLoadedField": {
66
+ const data = readImperativelyLoadedField(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
67
+ if (data.kind === "MissingData") return data;
68
+ target[field.alias] = data.data;
69
+ break;
70
+ }
71
+ case "Resolver": {
72
+ const data = readResolverFieldData(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
73
+ if (data.kind === "MissingData") return data;
74
+ target[field.alias] = data.data;
75
+ break;
76
+ }
77
+ case "LoadablySelectedField": {
78
+ const data = readLoadablySelectedFieldData(environment, field, root, variables, networkRequest, networkRequestOptions, mutableEncounteredRecords);
79
+ if (data.kind === "MissingData") return data;
80
+ target[field.alias] = data.data;
81
+ break;
82
+ }
83
+ }
84
+ return {
85
+ kind: "Success",
86
+ data: target
87
+ };
137
88
  }
138
89
  function readLoadablySelectedFieldData(environment, field, root, variables, networkRequest, networkRequestOptions, mutableEncounteredRecords) {
139
- const refetchReaderParams = readData(environment, field.refetchReaderAst, root, variables,
140
- // Refetch fields just read the id, and don't need refetch query artifacts
141
- [], networkRequest, networkRequestOptions, mutableEncounteredRecords);
142
- if (refetchReaderParams.kind === 'MissingData') {
143
- return {
144
- kind: 'MissingData',
145
- reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
146
- nestedReason: refetchReaderParams,
147
- recordLink: refetchReaderParams.recordLink,
148
- };
149
- }
150
- return {
151
- kind: 'Success',
152
- data: (args,
153
- // TODO get the associated type for FetchOptions from the loadably selected field
154
- fetchOptions) => {
155
- // TODO we should use the reader AST for this
156
- const includeReadOutData = (variables, readOutData) => {
157
- variables.id = readOutData.id;
158
- return variables;
159
- };
160
- const localVariables = includeReadOutData(args !== null && args !== void 0 ? args : {}, refetchReaderParams.data);
161
- writeQueryArgsToVariables(localVariables, field.queryArguments, variables);
162
- return [
163
- // Stable id
164
- root.__typename +
165
- ':' +
166
- root.__link +
167
- '/' +
168
- field.name +
169
- '/' +
170
- stableStringifyArgs(localVariables),
171
- // Fetcher
172
- () => {
173
- const fragmentReferenceAndDisposeFromEntrypoint = (entrypoint) => {
174
- const { fieldName, readerArtifactKind, readerWithRefetchQueries } = (0, IsographEnvironment_1.getOrLoadReaderWithRefetchQueries)(environment, entrypoint.readerWithRefetchQueries);
175
- const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, entrypoint, localVariables, readerWithRefetchQueries, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : null);
176
- const fragmentReference = {
177
- kind: 'FragmentReference',
178
- readerWithRefetchQueries,
179
- fieldName,
180
- readerArtifactKind,
181
- // TODO localVariables is not guaranteed to have an id field
182
- root,
183
- variables: localVariables,
184
- networkRequest,
185
- };
186
- return [fragmentReference, disposeNetworkRequest];
187
- };
188
- if (field.entrypoint.kind === 'Entrypoint') {
189
- return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);
190
- }
191
- else {
192
- const isographArtifactPromiseWrapper = (0, IsographEnvironment_1.getOrLoadIsographArtifact)(environment, field.entrypoint.typeAndField, field.entrypoint.loader);
193
- const state = (0, PromiseWrapper_1.getPromiseState)(isographArtifactPromiseWrapper);
194
- if (state.kind === 'Ok') {
195
- return fragmentReferenceAndDisposeFromEntrypoint(state.value);
196
- }
197
- else {
198
- // Promise is pending or thrown
199
- let entrypointLoaderState = { kind: 'EntrypointNotLoaded' };
200
- const readerWithRefetchQueries = (0, PromiseWrapper_1.wrapPromise)(isographArtifactPromiseWrapper.promise.then((entrypoint) => (0, IsographEnvironment_1.getOrLoadReaderWithRefetchQueries)(environment, entrypoint.readerWithRefetchQueries).readerWithRefetchQueries.promise));
201
- const networkRequest = (0, PromiseWrapper_1.wrapPromise)(isographArtifactPromiseWrapper.promise.then((entrypoint) => {
202
- if (entrypointLoaderState.kind === 'EntrypointNotLoaded') {
203
- const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, entrypoint, localVariables, readerWithRefetchQueries, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : null);
204
- entrypointLoaderState = {
205
- kind: 'NetworkRequestStarted',
206
- disposeNetworkRequest,
207
- };
208
- return networkRequest.promise;
209
- }
210
- }));
211
- const fragmentReference = {
212
- kind: 'FragmentReference',
213
- readerWithRefetchQueries,
214
- fieldName: field.name,
215
- readerArtifactKind: field.entrypoint.readerArtifactKind,
216
- // TODO localVariables is not guaranteed to have an id field
217
- root,
218
- variables: localVariables,
219
- networkRequest,
220
- };
221
- return [
222
- fragmentReference,
223
- () => {
224
- if (entrypointLoaderState.kind === 'NetworkRequestStarted') {
225
- entrypointLoaderState.disposeNetworkRequest();
226
- }
227
- entrypointLoaderState = { kind: 'Disposed' };
228
- },
229
- ];
230
- }
231
- }
232
- },
233
- ];
234
- },
235
- };
90
+ const refetchReaderParams = readData(environment, field.refetchReaderAst, root, variables, [], networkRequest, networkRequestOptions, mutableEncounteredRecords);
91
+ if (refetchReaderParams.kind === "MissingData") return {
92
+ kind: "MissingData",
93
+ reason: "Missing data for " + field.alias + " on root " + root.__link,
94
+ nestedReason: refetchReaderParams,
95
+ recordLink: refetchReaderParams.recordLink
96
+ };
97
+ return {
98
+ kind: "Success",
99
+ data: (args, fetchOptions) => {
100
+ const includeReadOutData = (variables$1, readOutData) => {
101
+ variables$1.id = readOutData.id;
102
+ return variables$1;
103
+ };
104
+ const localVariables = includeReadOutData(args ?? {}, refetchReaderParams.data);
105
+ writeQueryArgsToVariables(localVariables, field.queryArguments, variables);
106
+ return [root.__typename + ":" + root.__link + "/" + field.name + "/" + stableStringifyArgs(localVariables), () => {
107
+ const fragmentReferenceAndDisposeFromEntrypoint = (entrypoint) => {
108
+ const { fieldName, readerArtifactKind, readerWithRefetchQueries } = require_IsographEnvironment.getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries);
109
+ const [networkRequest$1, disposeNetworkRequest] = require_makeNetworkRequest.maybeMakeNetworkRequest(environment, entrypoint, localVariables, readerWithRefetchQueries, fetchOptions ?? null);
110
+ return [{
111
+ kind: "FragmentReference",
112
+ readerWithRefetchQueries,
113
+ fieldName,
114
+ readerArtifactKind,
115
+ root,
116
+ variables: localVariables,
117
+ networkRequest: networkRequest$1
118
+ }, disposeNetworkRequest];
119
+ };
120
+ if (field.entrypoint.kind === "Entrypoint") return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);
121
+ else {
122
+ const isographArtifactPromiseWrapper = require_IsographEnvironment.getOrLoadIsographArtifact(environment, field.entrypoint.typeAndField, field.entrypoint.loader);
123
+ const state = require_PromiseWrapper.getPromiseState(isographArtifactPromiseWrapper);
124
+ if (state.kind === "Ok") return fragmentReferenceAndDisposeFromEntrypoint(state.value);
125
+ else {
126
+ let entrypointLoaderState = { kind: "EntrypointNotLoaded" };
127
+ const readerWithRefetchQueries = require_PromiseWrapper.wrapPromise(isographArtifactPromiseWrapper.promise.then((entrypoint) => require_IsographEnvironment.getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries).readerWithRefetchQueries.promise));
128
+ const networkRequest$1 = require_PromiseWrapper.wrapPromise(isographArtifactPromiseWrapper.promise.then((entrypoint) => {
129
+ if (entrypointLoaderState.kind === "EntrypointNotLoaded") {
130
+ const [networkRequest$2, disposeNetworkRequest] = require_makeNetworkRequest.maybeMakeNetworkRequest(environment, entrypoint, localVariables, readerWithRefetchQueries, fetchOptions ?? null);
131
+ entrypointLoaderState = {
132
+ kind: "NetworkRequestStarted",
133
+ disposeNetworkRequest
134
+ };
135
+ return networkRequest$2.promise;
136
+ }
137
+ }));
138
+ return [{
139
+ kind: "FragmentReference",
140
+ readerWithRefetchQueries,
141
+ fieldName: field.name,
142
+ readerArtifactKind: field.entrypoint.readerArtifactKind,
143
+ root,
144
+ variables: localVariables,
145
+ networkRequest: networkRequest$1
146
+ }, () => {
147
+ if (entrypointLoaderState.kind === "NetworkRequestStarted") entrypointLoaderState.disposeNetworkRequest();
148
+ entrypointLoaderState = { kind: "Disposed" };
149
+ }];
150
+ }
151
+ }
152
+ }];
153
+ }
154
+ };
236
155
  }
237
156
  function filterVariables(variables, allowedVariables) {
238
- const result = {};
239
- for (const key of allowedVariables) {
240
- // @ts-expect-error
241
- result[key] = variables[key];
242
- }
243
- return result;
157
+ const result = {};
158
+ for (const key of allowedVariables) result[key] = variables[key];
159
+ return result;
244
160
  }
245
161
  function generateChildVariableMap(variables, fieldArguments) {
246
- if (fieldArguments == null) {
247
- return {};
248
- }
249
- const childVars = {};
250
- for (const [name, value] of fieldArguments) {
251
- if (value.kind === 'Object') {
252
- childVars[name] = generateChildVariableMap(variables, value.value);
253
- }
254
- else if (value.kind === 'Variable') {
255
- const variable = variables[value.name];
256
- // Variable could be null if it was not provided but has a default case,
257
- // so we allow the loop to continue rather than throwing an error.
258
- if (variable != null) {
259
- childVars[name] = variable;
260
- }
261
- }
262
- else {
263
- childVars[name] = value.value;
264
- }
265
- }
266
- return childVars;
162
+ if (fieldArguments == null) return {};
163
+ const childVars = {};
164
+ for (const [name, value] of fieldArguments) if (value.kind === "Object") childVars[name] = generateChildVariableMap(variables, value.value);
165
+ else if (value.kind === "Variable") {
166
+ const variable = variables[value.name];
167
+ if (variable != null) childVars[name] = variable;
168
+ } else childVars[name] = value.value;
169
+ return childVars;
267
170
  }
268
171
  function writeQueryArgsToVariables(targetVariables, queryArgs, variables) {
269
- if (queryArgs == null) {
270
- return;
271
- }
272
- for (const [name, argType] of queryArgs) {
273
- switch (argType.kind) {
274
- case 'Object': {
275
- writeQueryArgsToVariables((targetVariables[name] = {}), argType.value, variables);
276
- break;
277
- }
278
- case 'Variable': {
279
- targetVariables[name] = variables[argType.name];
280
- break;
281
- }
282
- case 'Enum': {
283
- targetVariables[name] = argType.value;
284
- break;
285
- }
286
- case 'Literal': {
287
- targetVariables[name] = argType.value;
288
- break;
289
- }
290
- case 'String': {
291
- targetVariables[name] = argType.value;
292
- break;
293
- }
294
- }
295
- }
172
+ if (queryArgs == null) return;
173
+ for (const [name, argType] of queryArgs) switch (argType.kind) {
174
+ case "Object":
175
+ writeQueryArgsToVariables(targetVariables[name] = {}, argType.value, variables);
176
+ break;
177
+ case "Variable":
178
+ targetVariables[name] = variables[argType.name];
179
+ break;
180
+ case "Enum":
181
+ targetVariables[name] = argType.value;
182
+ break;
183
+ case "Literal":
184
+ targetVariables[name] = argType.value;
185
+ break;
186
+ case "String":
187
+ targetVariables[name] = argType.value;
188
+ break;
189
+ }
296
190
  }
297
191
  function readResolverFieldData(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords) {
298
- const usedRefetchQueries = field.usedRefetchQueries;
299
- const resolverRefetchQueries = usedRefetchQueries.map((index) => {
300
- const resolverRefetchQuery = nestedRefetchQueries[index];
301
- if (resolverRefetchQuery == null) {
302
- throw new Error('resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.');
303
- }
304
- return resolverRefetchQuery;
305
- });
306
- const readerWithRefetchQueries = {
307
- kind: 'ReaderWithRefetchQueries',
308
- readerArtifact: field.readerArtifact,
309
- nestedRefetchQueries: resolverRefetchQueries,
310
- };
311
- const fragment = {
312
- kind: 'FragmentReference',
313
- readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)(readerWithRefetchQueries),
314
- fieldName: field.readerArtifact.fieldName,
315
- readerArtifactKind: field.readerArtifact.kind,
316
- root,
317
- variables: generateChildVariableMap(variables, field.arguments),
318
- networkRequest,
319
- };
320
- switch (field.readerArtifact.kind) {
321
- case 'EagerReaderArtifact': {
322
- const data = readData(environment, field.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
323
- if (data.kind === 'MissingData') {
324
- return {
325
- kind: 'MissingData',
326
- reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
327
- nestedReason: data,
328
- recordLink: data.recordLink,
329
- };
330
- }
331
- const firstParameter = {
332
- data: data.data,
333
- parameters: variables,
334
- startUpdate: field.readerArtifact.hasUpdatable
335
- ? (0, startUpdate_1.getOrCreateCachedStartUpdate)(environment, fragment, networkRequestOptions)
336
- : undefined,
337
- };
338
- return {
339
- kind: 'Success',
340
- data: field.readerArtifact.resolver(firstParameter),
341
- };
342
- }
343
- case 'ComponentReaderArtifact': {
344
- return {
345
- kind: 'Success',
346
- data: (0, componentCache_1.getOrCreateCachedComponent)(environment, fragment, networkRequestOptions),
347
- };
348
- }
349
- }
192
+ const resolverRefetchQueries = field.usedRefetchQueries.map((index) => {
193
+ const resolverRefetchQuery = nestedRefetchQueries[index];
194
+ if (resolverRefetchQuery == null) throw new Error("resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.");
195
+ return resolverRefetchQuery;
196
+ });
197
+ const fragment = {
198
+ kind: "FragmentReference",
199
+ readerWithRefetchQueries: require_PromiseWrapper.wrapResolvedValue({
200
+ kind: "ReaderWithRefetchQueries",
201
+ readerArtifact: field.readerArtifact,
202
+ nestedRefetchQueries: resolverRefetchQueries
203
+ }),
204
+ fieldName: field.readerArtifact.fieldName,
205
+ readerArtifactKind: field.readerArtifact.kind,
206
+ root,
207
+ variables: generateChildVariableMap(variables, field.arguments),
208
+ networkRequest
209
+ };
210
+ switch (field.readerArtifact.kind) {
211
+ case "EagerReaderArtifact": {
212
+ const data = readData(environment, field.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
213
+ if (data.kind === "MissingData") return {
214
+ kind: "MissingData",
215
+ reason: "Missing data for " + field.alias + " on root " + root.__link,
216
+ nestedReason: data,
217
+ recordLink: data.recordLink
218
+ };
219
+ const firstParameter = {
220
+ data: data.data,
221
+ parameters: variables,
222
+ startUpdate: field.readerArtifact.hasUpdatable ? require_startUpdate.getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) : void 0
223
+ };
224
+ return {
225
+ kind: "Success",
226
+ data: field.readerArtifact.resolver(firstParameter)
227
+ };
228
+ }
229
+ case "ComponentReaderArtifact": return {
230
+ kind: "Success",
231
+ data: require_componentCache.getOrCreateCachedComponent(environment, fragment, networkRequestOptions)
232
+ };
233
+ }
350
234
  }
351
235
  function readScalarFieldData(field, storeRecord, root, variables) {
352
- const storeRecordName = (0, cache_1.getParentRecordKey)(field, variables);
353
- const value = storeRecord[storeRecordName];
354
- // TODO consider making scalars into discriminated unions. This probably has
355
- // to happen for when we handle errors.
356
- if (value === undefined) {
357
- return {
358
- kind: 'MissingData',
359
- reason: 'No value for ' + storeRecordName + ' on root ' + root.__link,
360
- recordLink: root,
361
- };
362
- }
363
- return { kind: 'Success', data: value };
236
+ const storeRecordName = require_cache.getParentRecordKey(field, variables);
237
+ const value = storeRecord[storeRecordName];
238
+ if (value === void 0) return {
239
+ kind: "MissingData",
240
+ reason: "No value for " + storeRecordName + " on root " + root.__link,
241
+ recordLink: root
242
+ };
243
+ return {
244
+ kind: "Success",
245
+ data: value
246
+ };
364
247
  }
365
- function readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, readData) {
366
- const storeRecordName = (0, cache_1.getParentRecordKey)(field, variables);
367
- let value = storeRecord[storeRecordName];
368
- if (field.condition != null) {
369
- const data = readData(field.condition.readerAst, root);
370
- if (data.kind === 'MissingData') {
371
- return {
372
- kind: 'MissingData',
373
- reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,
374
- nestedReason: data,
375
- recordLink: data.recordLink,
376
- };
377
- }
378
- const readerWithRefetchQueries = {
379
- kind: 'ReaderWithRefetchQueries',
380
- readerArtifact: field.condition,
381
- // TODO this is wrong
382
- // should map field.condition.usedRefetchQueries
383
- // but it doesn't exist
384
- nestedRefetchQueries: [],
385
- };
386
- const fragment = {
387
- kind: 'FragmentReference',
388
- readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)(readerWithRefetchQueries),
389
- root,
390
- fieldName: field.condition.fieldName,
391
- readerArtifactKind: field.condition.kind,
392
- variables: generateChildVariableMap(variables,
393
- // TODO this is wrong
394
- // should use field.arguments
395
- // but it doesn't exist
396
- []),
397
- networkRequest,
398
- };
399
- const condition = field.condition.resolver(Object.assign({ data: data.data, parameters: {} }, (field.condition.hasUpdatable
400
- ? {
401
- startUpdate: (0, startUpdate_1.getOrCreateCachedStartUpdate)(environment, fragment, networkRequestOptions),
402
- }
403
- : undefined)));
404
- value = condition;
405
- }
406
- if (Array.isArray(value)) {
407
- const results = [];
408
- for (const item of value) {
409
- const link = (0, IsographEnvironment_1.assertLink)(item);
410
- if (link === undefined) {
411
- return {
412
- kind: 'MissingData',
413
- reason: 'No link for ' +
414
- storeRecordName +
415
- ' on root ' +
416
- root.__link +
417
- '. Link is ' +
418
- JSON.stringify(item),
419
- recordLink: root,
420
- };
421
- }
422
- else if (link == null) {
423
- results.push(null);
424
- continue;
425
- }
426
- if (isClientPointer(field)) {
427
- const result = readClientPointerData(environment, field, link, variables, nestedRefetchQueries, readData);
428
- if (result.kind === 'MissingData') {
429
- return {
430
- kind: 'MissingData',
431
- reason: 'Missing data for ' +
432
- storeRecordName +
433
- ' on root ' +
434
- root.__link +
435
- '. Link is ' +
436
- JSON.stringify(item),
437
- nestedReason: result,
438
- recordLink: result.recordLink,
439
- };
440
- }
441
- results.push(result.data);
442
- continue;
443
- }
444
- const result = readData(field.selections, link);
445
- if (result.kind === 'MissingData') {
446
- return {
447
- kind: 'MissingData',
448
- reason: 'Missing data for ' +
449
- storeRecordName +
450
- ' on root ' +
451
- root.__link +
452
- '. Link is ' +
453
- JSON.stringify(item),
454
- nestedReason: result,
455
- recordLink: result.recordLink,
456
- };
457
- }
458
- results.push(result.data);
459
- }
460
- return {
461
- kind: 'Success',
462
- data: results,
463
- };
464
- }
465
- let link = (0, IsographEnvironment_1.assertLink)(value);
466
- if (link === undefined) {
467
- // TODO make this configurable, and also generated and derived from the schema
468
- const missingFieldHandler = environment.missingFieldHandler;
469
- const altLink = missingFieldHandler === null || missingFieldHandler === void 0 ? void 0 : missingFieldHandler(storeRecord, root, field.fieldName, field.arguments, variables);
470
- (0, logging_1.logMessage)(environment, () => ({
471
- kind: 'MissingFieldHandlerCalled',
472
- root,
473
- storeRecord,
474
- fieldName: field.fieldName,
475
- arguments: field.arguments,
476
- variables,
477
- }));
478
- if (altLink === undefined) {
479
- return {
480
- kind: 'MissingData',
481
- reason: 'No link for ' +
482
- storeRecordName +
483
- ' on root ' +
484
- root.__link +
485
- '. Link is ' +
486
- JSON.stringify(value),
487
- recordLink: root,
488
- };
489
- }
490
- else {
491
- link = altLink;
492
- }
493
- }
494
- else if (link == null) {
495
- return {
496
- kind: 'Success',
497
- data: null,
498
- };
499
- }
500
- if (isClientPointer(field)) {
501
- const data = readClientPointerData(environment, field, link, variables, nestedRefetchQueries, readData);
502
- if (data.kind === 'MissingData') {
503
- return {
504
- kind: 'MissingData',
505
- reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,
506
- nestedReason: data,
507
- recordLink: data.recordLink,
508
- };
509
- }
510
- return data;
511
- }
512
- const data = readData(field.selections, link);
513
- if (data.kind === 'MissingData') {
514
- return {
515
- kind: 'MissingData',
516
- reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,
517
- nestedReason: data,
518
- recordLink: data.recordLink,
519
- };
520
- }
521
- return data;
248
+ function readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, readData$1) {
249
+ const storeRecordName = require_cache.getParentRecordKey(field, variables);
250
+ let value = storeRecord[storeRecordName];
251
+ if (field.condition != null) {
252
+ const data$1 = readData$1(field.condition.readerAst, root);
253
+ if (data$1.kind === "MissingData") return {
254
+ kind: "MissingData",
255
+ reason: "Missing data for " + storeRecordName + " on root " + root.__link,
256
+ nestedReason: data$1,
257
+ recordLink: data$1.recordLink
258
+ };
259
+ const fragment = {
260
+ kind: "FragmentReference",
261
+ readerWithRefetchQueries: require_PromiseWrapper.wrapResolvedValue({
262
+ kind: "ReaderWithRefetchQueries",
263
+ readerArtifact: field.condition,
264
+ nestedRefetchQueries: []
265
+ }),
266
+ root,
267
+ fieldName: field.condition.fieldName,
268
+ readerArtifactKind: field.condition.kind,
269
+ variables: generateChildVariableMap(variables, []),
270
+ networkRequest
271
+ };
272
+ value = field.condition.resolver({
273
+ data: data$1.data,
274
+ parameters: {},
275
+ ...field.condition.hasUpdatable ? { startUpdate: require_startUpdate.getOrCreateCachedStartUpdate(environment, fragment, networkRequestOptions) } : void 0
276
+ });
277
+ }
278
+ if (Array.isArray(value)) {
279
+ const results = [];
280
+ for (const item of value) {
281
+ const link$1 = require_IsographEnvironment.assertLink(item);
282
+ if (link$1 === void 0) return {
283
+ kind: "MissingData",
284
+ reason: "No link for " + storeRecordName + " on root " + root.__link + ". Link is " + JSON.stringify(item),
285
+ recordLink: root
286
+ };
287
+ else if (link$1 == null) {
288
+ results.push(null);
289
+ continue;
290
+ }
291
+ if (isClientPointer(field)) {
292
+ const result$1 = readClientPointerData(environment, field, link$1, variables, nestedRefetchQueries, readData$1);
293
+ if (result$1.kind === "MissingData") return {
294
+ kind: "MissingData",
295
+ reason: "Missing data for " + storeRecordName + " on root " + root.__link + ". Link is " + JSON.stringify(item),
296
+ nestedReason: result$1,
297
+ recordLink: result$1.recordLink
298
+ };
299
+ results.push(result$1.data);
300
+ continue;
301
+ }
302
+ const result = readData$1(field.selections, link$1);
303
+ if (result.kind === "MissingData") return {
304
+ kind: "MissingData",
305
+ reason: "Missing data for " + storeRecordName + " on root " + root.__link + ". Link is " + JSON.stringify(item),
306
+ nestedReason: result,
307
+ recordLink: result.recordLink
308
+ };
309
+ results.push(result.data);
310
+ }
311
+ return {
312
+ kind: "Success",
313
+ data: results
314
+ };
315
+ }
316
+ let link = require_IsographEnvironment.assertLink(value);
317
+ if (link === void 0) {
318
+ const missingFieldHandler = environment.missingFieldHandler;
319
+ const altLink = missingFieldHandler?.(storeRecord, root, field.fieldName, field.arguments, variables);
320
+ require_logging.logMessage(environment, () => ({
321
+ kind: "MissingFieldHandlerCalled",
322
+ root,
323
+ storeRecord,
324
+ fieldName: field.fieldName,
325
+ arguments: field.arguments,
326
+ variables
327
+ }));
328
+ if (altLink === void 0) return {
329
+ kind: "MissingData",
330
+ reason: "No link for " + storeRecordName + " on root " + root.__link + ". Link is " + JSON.stringify(value),
331
+ recordLink: root
332
+ };
333
+ else link = altLink;
334
+ } else if (link == null) return {
335
+ kind: "Success",
336
+ data: null
337
+ };
338
+ if (isClientPointer(field)) {
339
+ const data$1 = readClientPointerData(environment, field, link, variables, nestedRefetchQueries, readData$1);
340
+ if (data$1.kind === "MissingData") return {
341
+ kind: "MissingData",
342
+ reason: "Missing data for " + storeRecordName + " on root " + root.__link,
343
+ nestedReason: data$1,
344
+ recordLink: data$1.recordLink
345
+ };
346
+ return data$1;
347
+ }
348
+ const data = readData$1(field.selections, link);
349
+ if (data.kind === "MissingData") return {
350
+ kind: "MissingData",
351
+ reason: "Missing data for " + storeRecordName + " on root " + root.__link,
352
+ nestedReason: data,
353
+ recordLink: data.recordLink
354
+ };
355
+ return data;
522
356
  }
523
357
  function isClientPointer(field) {
524
- return field.refetchQueryIndex != null;
358
+ return field.refetchQueryIndex != null;
525
359
  }
526
- function readClientPointerData(environment, field, root, variables, nestedRefetchQueries, readData) {
527
- const refetchReaderParams = readData([
528
- {
529
- kind: 'Scalar',
530
- fieldName: 'id',
531
- alias: null,
532
- arguments: null,
533
- isUpdatable: false,
534
- },
535
- ], root);
536
- if (refetchReaderParams.kind === 'MissingData') {
537
- return {
538
- kind: 'MissingData',
539
- reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
540
- nestedReason: refetchReaderParams,
541
- recordLink: refetchReaderParams.recordLink,
542
- };
543
- }
544
- const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];
545
- if (refetchQuery == null) {
546
- throw new Error('refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.');
547
- }
548
- const refetchQueryArtifact = refetchQuery.artifact;
549
- const allowedVariables = refetchQuery.allowedVariables;
550
- return {
551
- kind: 'Success',
552
- data: (args,
553
- // TODO get the associated type for FetchOptions from the loadably selected field
554
- fetchOptions) => {
555
- const includeReadOutData = (variables, readOutData) => {
556
- variables.id = readOutData.id;
557
- return variables;
558
- };
559
- const localVariables = includeReadOutData(args !== null && args !== void 0 ? args : {}, refetchReaderParams.data);
560
- writeQueryArgsToVariables(localVariables, field.arguments, variables);
561
- return [
562
- // Stable id
563
- root.__typename +
564
- ':' +
565
- root.__link +
566
- '/' +
567
- field.fieldName +
568
- '/' +
569
- stableStringifyArgs(localVariables),
570
- // Fetcher
571
- () => {
572
- const variables = includeReadOutData(filterVariables(Object.assign(Object.assign({}, args), localVariables), allowedVariables), refetchReaderParams.data);
573
- const readerWithRefetchQueries = (0, PromiseWrapper_1.wrapResolvedValue)({
574
- kind: 'ReaderWithRefetchQueries',
575
- readerArtifact: {
576
- kind: 'EagerReaderArtifact',
577
- fieldName: field.fieldName,
578
- readerAst: field.selections,
579
- resolver: ({ data }) => data,
580
- hasUpdatable: false,
581
- },
582
- nestedRefetchQueries,
583
- });
584
- const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, refetchQueryArtifact, variables, readerWithRefetchQueries, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : null);
585
- const fragmentReference = {
586
- kind: 'FragmentReference',
587
- fieldName: field.fieldName,
588
- readerArtifactKind: 'EagerReaderArtifact',
589
- readerWithRefetchQueries: readerWithRefetchQueries,
590
- root,
591
- variables,
592
- networkRequest,
593
- };
594
- return [fragmentReference, disposeNetworkRequest];
595
- },
596
- ];
597
- },
598
- };
360
+ function readClientPointerData(environment, field, root, variables, nestedRefetchQueries, readData$1) {
361
+ const refetchReaderParams = readData$1([{
362
+ kind: "Scalar",
363
+ fieldName: "id",
364
+ alias: null,
365
+ arguments: null,
366
+ isUpdatable: false
367
+ }], root);
368
+ if (refetchReaderParams.kind === "MissingData") return {
369
+ kind: "MissingData",
370
+ reason: "Missing data for " + field.alias + " on root " + root.__link,
371
+ nestedReason: refetchReaderParams,
372
+ recordLink: refetchReaderParams.recordLink
373
+ };
374
+ const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];
375
+ if (refetchQuery == null) throw new Error("refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.");
376
+ const refetchQueryArtifact = refetchQuery.artifact;
377
+ const allowedVariables = refetchQuery.allowedVariables;
378
+ return {
379
+ kind: "Success",
380
+ data: (args, fetchOptions) => {
381
+ const includeReadOutData = (variables$1, readOutData) => {
382
+ variables$1.id = readOutData.id;
383
+ return variables$1;
384
+ };
385
+ const localVariables = includeReadOutData(args ?? {}, refetchReaderParams.data);
386
+ writeQueryArgsToVariables(localVariables, field.arguments, variables);
387
+ return [root.__typename + ":" + root.__link + "/" + field.fieldName + "/" + stableStringifyArgs(localVariables), () => {
388
+ const variables$1 = includeReadOutData(filterVariables({
389
+ ...args,
390
+ ...localVariables
391
+ }, allowedVariables), refetchReaderParams.data);
392
+ const readerWithRefetchQueries = require_PromiseWrapper.wrapResolvedValue({
393
+ kind: "ReaderWithRefetchQueries",
394
+ readerArtifact: {
395
+ kind: "EagerReaderArtifact",
396
+ fieldName: field.fieldName,
397
+ readerAst: field.selections,
398
+ resolver: ({ data }) => data,
399
+ hasUpdatable: false
400
+ },
401
+ nestedRefetchQueries
402
+ });
403
+ const [networkRequest, disposeNetworkRequest] = require_makeNetworkRequest.maybeMakeNetworkRequest(environment, refetchQueryArtifact, variables$1, readerWithRefetchQueries, fetchOptions ?? null);
404
+ return [{
405
+ kind: "FragmentReference",
406
+ fieldName: field.fieldName,
407
+ readerArtifactKind: "EagerReaderArtifact",
408
+ readerWithRefetchQueries,
409
+ root,
410
+ variables: variables$1,
411
+ networkRequest
412
+ }, disposeNetworkRequest];
413
+ }];
414
+ }
415
+ };
599
416
  }
600
417
  function getNetworkRequestOptionsWithDefaults(networkRequestOptions) {
601
- var _a, _b;
602
- return {
603
- suspendIfInFlight: (_a = networkRequestOptions === null || networkRequestOptions === void 0 ? void 0 : networkRequestOptions.suspendIfInFlight) !== null && _a !== void 0 ? _a : false,
604
- throwOnNetworkError: (_b = networkRequestOptions === null || networkRequestOptions === void 0 ? void 0 : networkRequestOptions.throwOnNetworkError) !== null && _b !== void 0 ? _b : true,
605
- };
418
+ return {
419
+ suspendIfInFlight: networkRequestOptions?.suspendIfInFlight ?? false,
420
+ throwOnNetworkError: networkRequestOptions?.throwOnNetworkError ?? true
421
+ };
606
422
  }
607
- // TODO use a description of the params for this?
608
- // TODO call stableStringifyArgs on the variable values, as well.
609
- // This doesn't matter for now, since we are just using primitive values
610
- // in the demo.
611
423
  function stableStringifyArgs(args) {
612
- const keys = Object.keys(args);
613
- keys.sort();
614
- let s = '';
615
- for (const key of keys) {
616
- // @ts-expect-error
617
- s += `${key}=${JSON.stringify(args[key])};`;
618
- }
619
- return s;
424
+ const keys = Object.keys(args);
425
+ keys.sort();
426
+ let s = "";
427
+ for (const key of keys) s += `${key}=${JSON.stringify(args[key])};`;
428
+ return s;
620
429
  }
621
430
  function readImperativelyLoadedField(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords) {
622
- // First, we read the data using the refetch reader AST (i.e. read out the
623
- // id field).
624
- const data = readData(environment, field.refetchReaderArtifact.readerAst, root, variables,
625
- // Refetch fields just read the id, and don't need refetch query artifacts
626
- [],
627
- // This is probably indicative of the fact that we are doing redundant checks
628
- // on the status of this network request...
629
- networkRequest, networkRequestOptions, mutableEncounteredRecords);
630
- if (data.kind === 'MissingData') {
631
- return {
632
- kind: 'MissingData',
633
- reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
634
- nestedReason: data,
635
- recordLink: data.recordLink,
636
- };
637
- }
638
- else {
639
- const { refetchQueryIndex } = field;
640
- const refetchQuery = nestedRefetchQueries[refetchQueryIndex];
641
- if (refetchQuery == null) {
642
- throw new Error('Refetch query not found. This is indicative of a bug in Isograph.');
643
- }
644
- const refetchQueryArtifact = refetchQuery.artifact;
645
- const allowedVariables = refetchQuery.allowedVariables;
646
- // Second, we allow the user to call the resolver, which will ultimately
647
- // use the resolver reader AST to get the resolver parameters.
648
- return {
649
- kind: 'Success',
650
- data: (args) => [
651
- // Stable id
652
- root.__typename + ':' + root.__link + '__' + field.name,
653
- // Fetcher
654
- field.refetchReaderArtifact.resolver(environment, refetchQueryArtifact, data.data, filterVariables(Object.assign(Object.assign({}, args), variables), allowedVariables), root,
655
- // TODO these params should be removed
656
- null, []),
657
- ],
658
- };
659
- }
431
+ const data = readData(environment, field.refetchReaderArtifact.readerAst, root, variables, [], networkRequest, networkRequestOptions, mutableEncounteredRecords);
432
+ if (data.kind === "MissingData") return {
433
+ kind: "MissingData",
434
+ reason: "Missing data for " + field.alias + " on root " + root.__link,
435
+ nestedReason: data,
436
+ recordLink: data.recordLink
437
+ };
438
+ else {
439
+ const { refetchQueryIndex } = field;
440
+ const refetchQuery = nestedRefetchQueries[refetchQueryIndex];
441
+ if (refetchQuery == null) throw new Error("Refetch query not found. This is indicative of a bug in Isograph.");
442
+ const refetchQueryArtifact = refetchQuery.artifact;
443
+ const allowedVariables = refetchQuery.allowedVariables;
444
+ return {
445
+ kind: "Success",
446
+ data: (args) => [root.__typename + ":" + root.__link + "__" + field.name, field.refetchReaderArtifact.resolver(environment, refetchQueryArtifact, data.data, filterVariables({
447
+ ...args,
448
+ ...variables
449
+ }, allowedVariables), root, null, [])]
450
+ };
451
+ }
660
452
  }
453
+
454
+ //#endregion
455
+ exports.getNetworkRequestOptionsWithDefaults = getNetworkRequestOptionsWithDefaults;
456
+ exports.readButDoNotEvaluate = readButDoNotEvaluate;
457
+ exports.readImperativelyLoadedField = readImperativelyLoadedField;
458
+ exports.readLinkedFieldData = readLinkedFieldData;
459
+ exports.readLoadablySelectedFieldData = readLoadablySelectedFieldData;
460
+ exports.readResolverFieldData = readResolverFieldData;
461
+ exports.readScalarFieldData = readScalarFieldData;