@isograph/react 0.5.0 → 0.5.1

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