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