@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startUpdate.mjs","names":["mutableUpdatedIds: EncounteredIds","startUpdate: StartUpdateStoreLayer['startUpdate']","value:\n | { kind: 'Set'; value: T; validatedAt: number }\n | {\n kind: 'NotSet';\n }","target: { [index: string]: any }","storeRecord","ast","root"],"sources":["../../src/core/startUpdate.ts"],"sourcesContent":["import {\n getParentRecordKey,\n insertEmptySetIfMissing,\n type EncounteredIds,\n} from './cache';\nimport type { RefetchQueryNormalizationArtifactWrapper } from './entrypoint';\nimport {\n stableIdForFragmentReference,\n type ExtractParameters,\n type ExtractStartUpdate,\n type ExtractUpdatableData,\n type FragmentReference,\n type UnknownTReadFromStore,\n} from './FragmentReference';\nimport {\n assertLink,\n type IsographEnvironment,\n type StoreLink,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport {\n addStartUpdateStoreLayer,\n getMutableStoreRecordProxy,\n getOrInsertRecord,\n type StartUpdateStoreLayer,\n type StoreLayer,\n} from './optimisticProxy';\nimport { readPromise, type PromiseWrapper } from './PromiseWrapper';\nimport {\n readImperativelyLoadedField,\n readLinkedFieldData,\n readLoadablySelectedFieldData,\n readResolverFieldData,\n readScalarFieldData,\n type NetworkRequestReaderOptions,\n type ReadDataResultSuccess,\n} from './read';\nimport type { ReaderAst } from './reader';\nimport { callSubscriptions } from './subscribe';\n\nexport function getOrCreateCachedStartUpdate<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n): ExtractStartUpdate<TReadFromStore> {\n return (environment.eagerReaderCache[\n stableIdForFragmentReference(fragmentReference)\n ] ??= createStartUpdate(\n environment,\n fragmentReference,\n networkRequestOptions,\n ));\n}\n\nexport function createStartUpdate<TReadFromStore extends UnknownTReadFromStore>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n): ExtractStartUpdate<TReadFromStore> {\n return (updater) => {\n let mutableUpdatedIds: EncounteredIds = new Map();\n\n const startUpdate: StartUpdateStoreLayer['startUpdate'] = (storeLayer) => {\n mutableUpdatedIds.clear();\n let updatableData = createUpdatableProxy(\n environment,\n storeLayer,\n fragmentReference,\n networkRequestOptions,\n mutableUpdatedIds,\n );\n\n try {\n updater({ updatableData });\n } catch (e) {\n logMessage(environment, () => ({\n kind: 'StartUpdateError',\n error: e,\n }));\n throw e;\n }\n };\n\n environment.store = addStartUpdateStoreLayer(\n environment.store,\n startUpdate,\n );\n\n logMessage(environment, () => ({\n kind: 'StartUpdateComplete',\n updatedIds: mutableUpdatedIds,\n }));\n\n callSubscriptions(environment, mutableUpdatedIds);\n };\n}\n\nexport function createUpdatableProxy<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n storeLayer: StoreLayer,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableUpdatedIds: EncounteredIds,\n): ExtractUpdatableData<TReadFromStore> {\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n return readUpdatableData(\n environment,\n storeLayer,\n readerWithRefetchQueries.readerArtifact.readerAst,\n fragmentReference.root,\n fragmentReference.variables ?? {},\n readerWithRefetchQueries.nestedRefetchQueries,\n fragmentReference.networkRequest,\n networkRequestOptions,\n {\n lastInvalidated: 0,\n },\n mutableUpdatedIds,\n ).data;\n}\n\ntype MutableInvalidationState = {\n lastInvalidated: number;\n};\n\nfunction defineCachedProperty<T>(\n target: T,\n property: PropertyKey,\n mutableState: MutableInvalidationState,\n get: () => any,\n set?: (v: any) => void,\n) {\n let value:\n | { kind: 'Set'; value: T; validatedAt: number }\n | {\n kind: 'NotSet';\n } = {\n kind: 'NotSet',\n };\n\n Object.defineProperty(target, property, {\n configurable: false,\n enumerable: true,\n get: () => {\n if (\n value.kind === 'NotSet' ||\n value.validatedAt < mutableState.lastInvalidated\n ) {\n value = {\n kind: 'Set',\n value: get(),\n validatedAt: mutableState.lastInvalidated,\n };\n }\n return value.value;\n },\n ...(set != null && {\n set: (newValue) => {\n set(newValue);\n mutableState.lastInvalidated++;\n },\n }),\n });\n}\n\nfunction readUpdatableData<TReadFromStore extends UnknownTReadFromStore>(\n environment: IsographEnvironment,\n storeLayer: StoreLayer,\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n variables: ExtractParameters<TReadFromStore>,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableState: MutableInvalidationState,\n mutableUpdatedIds: EncounteredIds,\n): ReadDataResultSuccess<ExtractUpdatableData<TReadFromStore>> {\n const storeRecord = getMutableStoreRecordProxy(storeLayer, root);\n let target: { [index: string]: any } = {};\n\n for (const field of ast) {\n switch (field.kind) {\n case 'Scalar': {\n const storeRecordName = getParentRecordKey(field, variables);\n\n defineCachedProperty(\n target,\n field.alias ?? field.fieldName,\n mutableState,\n () => {\n const data = readScalarFieldData(\n field,\n storeRecord,\n root,\n variables,\n );\n if (data.kind === 'MissingData') {\n throw new Error(data.reason);\n }\n return data.data;\n },\n field.isUpdatable\n ? (newValue) => {\n const storeRecord = getOrInsertRecord(storeLayer.data, root);\n storeRecord[storeRecordName] = newValue;\n const updatedIds = insertEmptySetIfMissing(\n mutableUpdatedIds,\n root.__typename,\n );\n updatedIds.add(root.__link);\n }\n : undefined,\n );\n break;\n }\n case 'Linked': {\n const storeRecordName = getParentRecordKey(field, variables);\n defineCachedProperty(\n target,\n field.alias ?? field.fieldName,\n mutableState,\n () => {\n const data = readLinkedFieldData(\n environment,\n field,\n storeRecord,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n (ast, root) =>\n readUpdatableData(\n environment,\n storeLayer,\n ast,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableState,\n mutableUpdatedIds,\n ),\n );\n if (data.kind === 'MissingData') {\n throw new Error(data.reason);\n }\n return data.data;\n },\n 'isUpdatable' in field && field.isUpdatable\n ? (newValue) => {\n const storeRecord = getOrInsertRecord(storeLayer.data, root);\n if (Array.isArray(newValue)) {\n storeRecord[storeRecordName] = newValue.map((node) =>\n assertLink(node?.__link),\n );\n } else {\n storeRecord[storeRecordName] = assertLink(newValue?.__link);\n }\n const updatedIds = insertEmptySetIfMissing(\n mutableUpdatedIds,\n root.__typename,\n );\n updatedIds.add(root.__link);\n }\n : undefined,\n );\n break;\n }\n case 'ImperativelyLoadedField': {\n defineCachedProperty(target, field.alias, mutableState, () => {\n const data = readImperativelyLoadedField(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n new Map(),\n );\n if (data.kind === 'MissingData') {\n throw new Error(data.reason);\n }\n return data.data;\n });\n break;\n }\n case 'Resolver': {\n defineCachedProperty(target, field.alias, mutableState, () => {\n const data = readResolverFieldData(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n new Map(),\n );\n if (data.kind === 'MissingData') {\n throw new Error(data.reason);\n }\n return data.data;\n });\n break;\n }\n case 'LoadablySelectedField': {\n defineCachedProperty(target, field.alias, mutableState, () => {\n const data = readLoadablySelectedFieldData(\n environment,\n field,\n root,\n variables,\n networkRequest,\n networkRequestOptions,\n new Map(),\n );\n if (data.kind === 'MissingData') {\n throw new Error(data.reason);\n }\n return data.data;\n });\n break;\n }\n case 'Link': {\n target[field.alias] = root;\n break;\n }\n }\n }\n\n return {\n kind: 'Success',\n data: target as any,\n };\n}\n"],"mappings":";;;;;;;;;;AAwCA,SAAgB,6BAGd,aACA,mBACA,uBACoC;AACpC,QAAQ,YAAY,iBAClB,6BAA6B,kBAAkB,MAC3C,kBACJ,aACA,mBACA,sBACD;;AAGH,SAAgB,kBACd,aACA,mBACA,uBACoC;AACpC,SAAQ,YAAY;EAClB,IAAIA,oCAAoC,IAAI,KAAK;EAEjD,MAAMC,eAAqD,eAAe;AACxE,qBAAkB,OAAO;GACzB,IAAI,gBAAgB,qBAClB,aACA,YACA,mBACA,uBACA,kBACD;AAED,OAAI;AACF,YAAQ,EAAE,eAAe,CAAC;YACnB,GAAG;AACV,eAAW,oBAAoB;KAC7B,MAAM;KACN,OAAO;KACR,EAAE;AACH,UAAM;;;AAIV,cAAY,QAAQ,yBAClB,YAAY,OACZ,YACD;AAED,aAAW,oBAAoB;GAC7B,MAAM;GACN,YAAY;GACb,EAAE;AAEH,oBAAkB,aAAa,kBAAkB;;;AAIrD,SAAgB,qBAGd,aACA,YACA,mBACA,uBACA,mBACsC;CACtC,MAAM,2BAA2B,YAC/B,kBAAkB,yBACnB;AAED,QAAO,kBACL,aACA,YACA,yBAAyB,eAAe,WACxC,kBAAkB,MAClB,kBAAkB,aAAa,EAAE,EACjC,yBAAyB,sBACzB,kBAAkB,gBAClB,uBACA,EACE,iBAAiB,GAClB,EACD,kBACD,CAAC;;AAOJ,SAAS,qBACP,QACA,UACA,cACA,KACA,KACA;CACA,IAAIC,QAII,EACN,MAAM,UACP;AAED,QAAO,eAAe,QAAQ,UAAU;EACtC,cAAc;EACd,YAAY;EACZ,WAAW;AACT,OACE,MAAM,SAAS,YACf,MAAM,cAAc,aAAa,gBAEjC,SAAQ;IACN,MAAM;IACN,OAAO,KAAK;IACZ,aAAa,aAAa;IAC3B;AAEH,UAAO,MAAM;;EAEf,GAAI,OAAO,QAAQ,EACjB,MAAM,aAAa;AACjB,OAAI,SAAS;AACb,gBAAa;KAEhB;EACF,CAAC;;AAGJ,SAAS,kBACP,aACA,YACA,KACA,MACA,WACA,sBACA,gBACA,uBACA,cACA,mBAC6D;CAC7D,MAAM,cAAc,2BAA2B,YAAY,KAAK;CAChE,IAAIC,SAAmC,EAAE;AAEzC,MAAK,MAAM,SAAS,IAClB,SAAQ,MAAM,MAAd;EACE,KAAK,UAAU;GACb,MAAM,kBAAkB,mBAAmB,OAAO,UAAU;AAE5D,wBACE,QACA,MAAM,SAAS,MAAM,WACrB,oBACM;IACJ,MAAM,OAAO,oBACX,OACA,aACA,MACA,UACD;AACD,QAAI,KAAK,SAAS,cAChB,OAAM,IAAI,MAAM,KAAK,OAAO;AAE9B,WAAO,KAAK;MAEd,MAAM,eACD,aAAa;IACZ,MAAMC,gBAAc,kBAAkB,WAAW,MAAM,KAAK;AAC5D,kBAAY,mBAAmB;AAK/B,IAJmB,wBACjB,mBACA,KAAK,WACN,CACU,IAAI,KAAK,OAAO;OAE7B,OACL;AACD;;EAEF,KAAK,UAAU;GACb,MAAM,kBAAkB,mBAAmB,OAAO,UAAU;AAC5D,wBACE,QACA,MAAM,SAAS,MAAM,WACrB,oBACM;IACJ,MAAM,OAAO,oBACX,aACA,OACA,aACA,MACA,WACA,sBACA,gBACA,wBACC,OAAK,WACJ,kBACE,aACA,YACAC,OACAC,QACA,WACA,sBACA,gBACA,uBACA,cACA,kBACD,CACJ;AACD,QAAI,KAAK,SAAS,cAChB,OAAM,IAAI,MAAM,KAAK,OAAO;AAE9B,WAAO,KAAK;MAEd,iBAAiB,SAAS,MAAM,eAC3B,aAAa;IACZ,MAAMF,gBAAc,kBAAkB,WAAW,MAAM,KAAK;AAC5D,QAAI,MAAM,QAAQ,SAAS,CACzB,eAAY,mBAAmB,SAAS,KAAK,SAC3C,WAAW,MAAM,OAAO,CACzB;QAED,eAAY,mBAAmB,WAAW,UAAU,OAAO;AAM7D,IAJmB,wBACjB,mBACA,KAAK,WACN,CACU,IAAI,KAAK,OAAO;OAE7B,OACL;AACD;;EAEF,KAAK;AACH,wBAAqB,QAAQ,MAAM,OAAO,oBAAoB;IAC5D,MAAM,OAAO,4BACX,aACA,OACA,MACA,WACA,sBACA,gBACA,uCACA,IAAI,KAAK,CACV;AACD,QAAI,KAAK,SAAS,cAChB,OAAM,IAAI,MAAM,KAAK,OAAO;AAE9B,WAAO,KAAK;KACZ;AACF;EAEF,KAAK;AACH,wBAAqB,QAAQ,MAAM,OAAO,oBAAoB;IAC5D,MAAM,OAAO,sBACX,aACA,OACA,MACA,WACA,sBACA,gBACA,uCACA,IAAI,KAAK,CACV;AACD,QAAI,KAAK,SAAS,cAChB,OAAM,IAAI,MAAM,KAAK,OAAO;AAE9B,WAAO,KAAK;KACZ;AACF;EAEF,KAAK;AACH,wBAAqB,QAAQ,MAAM,OAAO,oBAAoB;IAC5D,MAAM,OAAO,8BACX,aACA,OACA,MACA,WACA,gBACA,uCACA,IAAI,KAAK,CACV;AACD,QAAI,KAAK,SAAS,cAChB,OAAM,IAAI,MAAM,KAAK,OAAO;AAE9B,WAAO,KAAK;KACZ;AACF;EAEF,KAAK;AACH,UAAO,MAAM,SAAS;AACtB;;AAKN,QAAO;EACL,MAAM;EACN,MAAM;EACP"}
@@ -0,0 +1,12 @@
1
+ import { ReaderAst } from "./reader.mjs";
2
+ import { WithEncounteredRecords } from "./read.mjs";
3
+ import { IsographEnvironment } from "./IsographEnvironment.mjs";
4
+ import { FragmentReference, UnknownTReadFromStore } from "./FragmentReference.mjs";
5
+ import { EncounteredIds } from "./cache.mjs";
6
+
7
+ //#region src/core/subscribe.d.ts
8
+ declare function subscribe<TReadFromStore extends UnknownTReadFromStore>(environment: IsographEnvironment, encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<TReadFromStore, any>, callback: (newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): () => void;
9
+ declare function callSubscriptions(environment: IsographEnvironment, recordsEncounteredWhenNormalizing: EncounteredIds): void;
10
+ //#endregion
11
+ export { callSubscriptions, subscribe };
12
+ //# sourceMappingURL=subscribe.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.d.mts","names":[],"sources":["../../src/core/subscribe.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAcgB,iCAAiC,oCAClC,gDACc,uBAAuB,oCAC/B,kBAAkB,+DAEL,uBAAuB,qCAE5C,UAAU;iBAyCP,iBAAA,cACD,wDACsB"}
@@ -0,0 +1,12 @@
1
+ import { ReaderAst } from "./reader.js";
2
+ import { WithEncounteredRecords } from "./read.js";
3
+ import { IsographEnvironment } from "./IsographEnvironment.js";
4
+ import { FragmentReference, UnknownTReadFromStore } from "./FragmentReference.js";
5
+ import { EncounteredIds } from "./cache.js";
6
+
7
+ //#region src/core/subscribe.d.ts
8
+ declare function subscribe<TReadFromStore extends UnknownTReadFromStore>(environment: IsographEnvironment, encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<TReadFromStore, any>, callback: (newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): () => void;
9
+ declare function callSubscriptions(environment: IsographEnvironment, recordsEncounteredWhenNormalizing: EncounteredIds): void;
10
+ //#endregion
11
+ export { callSubscriptions, subscribe };
12
+ //# sourceMappingURL=subscribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.d.ts","names":[],"sources":["../../src/core/subscribe.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAcgB,iCAAiC,oCAClC,gDACc,uBAAuB,oCAC/B,kBAAkB,+DAEL,uBAAuB,qCAE5C,UAAU;iBAyCP,iBAAA,cACD,wDACsB"}
@@ -0,0 +1,79 @@
1
+ const require_logging = require('./logging.js');
2
+ const require_areEqualWithDeepComparison = require('./areEqualWithDeepComparison.js');
3
+ const require_read = require('./read.js');
4
+
5
+ //#region src/core/subscribe.ts
6
+ function subscribe(environment, encounteredDataAndRecords, fragmentReference, callback, readerAst) {
7
+ const fragmentSubscription = {
8
+ kind: "FragmentSubscription",
9
+ callback,
10
+ encounteredDataAndRecords,
11
+ fragmentReference,
12
+ readerAst
13
+ };
14
+ callSubscriptionIfDataChanged(environment, fragmentSubscription);
15
+ environment.subscriptions.add(fragmentSubscription);
16
+ return () => environment.subscriptions.delete(fragmentSubscription);
17
+ }
18
+ function logAnyError(environment, context, f) {
19
+ try {
20
+ f();
21
+ } catch (e) {
22
+ require_logging.logMessage(environment, () => ({
23
+ kind: "ErrorEncounteredInWithErrorHandling",
24
+ error: e,
25
+ context
26
+ }));
27
+ }
28
+ }
29
+ function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
30
+ environment.subscriptions.forEach((subscription) => logAnyError(environment, { situation: "calling subscriptions" }, () => {
31
+ switch (subscription.kind) {
32
+ case "FragmentSubscription":
33
+ if (hasOverlappingIds(recordsEncounteredWhenNormalizing, subscription.encounteredDataAndRecords.encounteredRecords)) callSubscriptionIfDataChanged(environment, subscription);
34
+ return;
35
+ case "AnyRecords":
36
+ logAnyError(environment, { situation: "calling AnyRecords callback" }, () => subscription.callback());
37
+ return;
38
+ case "AnyChangesToRecord":
39
+ if (recordsEncounteredWhenNormalizing.get(subscription.recordLink.__typename)?.has(subscription.recordLink.__link) != null) logAnyError(environment, { situation: "calling AnyChangesToRecord callback" }, () => subscription.callback());
40
+ return;
41
+ }
42
+ }));
43
+ }
44
+ function callSubscriptionIfDataChanged(environment, subscription) {
45
+ const newEncounteredDataAndRecords = require_read.readButDoNotEvaluate(environment, subscription.fragmentReference, {
46
+ suspendIfInFlight: false,
47
+ throwOnNetworkError: false
48
+ });
49
+ const mergedItem = require_areEqualWithDeepComparison.mergeObjectsUsingReaderAst(subscription.readerAst, subscription.encounteredDataAndRecords.item, newEncounteredDataAndRecords.item);
50
+ require_logging.logMessage(environment, () => ({
51
+ kind: "DeepEqualityCheck",
52
+ fragmentReference: subscription.fragmentReference,
53
+ old: subscription.encounteredDataAndRecords.item,
54
+ new: newEncounteredDataAndRecords.item,
55
+ deeplyEqual: mergedItem === subscription.encounteredDataAndRecords.item
56
+ }));
57
+ if (mergedItem !== subscription.encounteredDataAndRecords.item) {
58
+ logAnyError(environment, { situation: "calling FragmentSubscription callback" }, () => {
59
+ subscription.callback(newEncounteredDataAndRecords);
60
+ });
61
+ subscription.encounteredDataAndRecords = newEncounteredDataAndRecords;
62
+ }
63
+ }
64
+ function hasOverlappingIds(ids1, ids2) {
65
+ for (const [typeName, set1] of ids1.entries()) {
66
+ const set2 = ids2.get(typeName);
67
+ if (set2 === void 0) continue;
68
+ if (isNotDisjointFrom(set1, set2)) return true;
69
+ }
70
+ return false;
71
+ }
72
+ function isNotDisjointFrom(set1, set2) {
73
+ for (const id of set1) if (set2.has(id)) return true;
74
+ return false;
75
+ }
76
+
77
+ //#endregion
78
+ exports.callSubscriptions = callSubscriptions;
79
+ exports.subscribe = subscribe;
@@ -0,0 +1,79 @@
1
+ import { logMessage } from "./logging.mjs";
2
+ import { mergeObjectsUsingReaderAst } from "./areEqualWithDeepComparison.mjs";
3
+ import { readButDoNotEvaluate } from "./read.mjs";
4
+
5
+ //#region src/core/subscribe.ts
6
+ function subscribe(environment, encounteredDataAndRecords, fragmentReference, callback, readerAst) {
7
+ const fragmentSubscription = {
8
+ kind: "FragmentSubscription",
9
+ callback,
10
+ encounteredDataAndRecords,
11
+ fragmentReference,
12
+ readerAst
13
+ };
14
+ callSubscriptionIfDataChanged(environment, fragmentSubscription);
15
+ environment.subscriptions.add(fragmentSubscription);
16
+ return () => environment.subscriptions.delete(fragmentSubscription);
17
+ }
18
+ function logAnyError(environment, context, f) {
19
+ try {
20
+ f();
21
+ } catch (e) {
22
+ logMessage(environment, () => ({
23
+ kind: "ErrorEncounteredInWithErrorHandling",
24
+ error: e,
25
+ context
26
+ }));
27
+ }
28
+ }
29
+ function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
30
+ environment.subscriptions.forEach((subscription) => logAnyError(environment, { situation: "calling subscriptions" }, () => {
31
+ switch (subscription.kind) {
32
+ case "FragmentSubscription":
33
+ if (hasOverlappingIds(recordsEncounteredWhenNormalizing, subscription.encounteredDataAndRecords.encounteredRecords)) callSubscriptionIfDataChanged(environment, subscription);
34
+ return;
35
+ case "AnyRecords":
36
+ logAnyError(environment, { situation: "calling AnyRecords callback" }, () => subscription.callback());
37
+ return;
38
+ case "AnyChangesToRecord":
39
+ if (recordsEncounteredWhenNormalizing.get(subscription.recordLink.__typename)?.has(subscription.recordLink.__link) != null) logAnyError(environment, { situation: "calling AnyChangesToRecord callback" }, () => subscription.callback());
40
+ return;
41
+ }
42
+ }));
43
+ }
44
+ function callSubscriptionIfDataChanged(environment, subscription) {
45
+ const newEncounteredDataAndRecords = readButDoNotEvaluate(environment, subscription.fragmentReference, {
46
+ suspendIfInFlight: false,
47
+ throwOnNetworkError: false
48
+ });
49
+ const mergedItem = mergeObjectsUsingReaderAst(subscription.readerAst, subscription.encounteredDataAndRecords.item, newEncounteredDataAndRecords.item);
50
+ logMessage(environment, () => ({
51
+ kind: "DeepEqualityCheck",
52
+ fragmentReference: subscription.fragmentReference,
53
+ old: subscription.encounteredDataAndRecords.item,
54
+ new: newEncounteredDataAndRecords.item,
55
+ deeplyEqual: mergedItem === subscription.encounteredDataAndRecords.item
56
+ }));
57
+ if (mergedItem !== subscription.encounteredDataAndRecords.item) {
58
+ logAnyError(environment, { situation: "calling FragmentSubscription callback" }, () => {
59
+ subscription.callback(newEncounteredDataAndRecords);
60
+ });
61
+ subscription.encounteredDataAndRecords = newEncounteredDataAndRecords;
62
+ }
63
+ }
64
+ function hasOverlappingIds(ids1, ids2) {
65
+ for (const [typeName, set1] of ids1.entries()) {
66
+ const set2 = ids2.get(typeName);
67
+ if (set2 === void 0) continue;
68
+ if (isNotDisjointFrom(set1, set2)) return true;
69
+ }
70
+ return false;
71
+ }
72
+ function isNotDisjointFrom(set1, set2) {
73
+ for (const id of set1) if (set2.has(id)) return true;
74
+ return false;
75
+ }
76
+
77
+ //#endregion
78
+ export { callSubscriptions, subscribe };
79
+ //# sourceMappingURL=subscribe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.mjs","names":["fragmentSubscription: FragmentSubscription<TReadFromStore>"],"sources":["../../src/core/subscribe.ts"],"sourcesContent":["import { mergeObjectsUsingReaderAst } from './areEqualWithDeepComparison';\nimport type { EncounteredIds } from './cache';\nimport type {\n FragmentReference,\n UnknownTReadFromStore,\n} from './FragmentReference';\nimport type {\n FragmentSubscription,\n IsographEnvironment,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { type WithEncounteredRecords, readButDoNotEvaluate } from './read';\nimport type { ReaderAst } from './reader';\n\nexport function subscribe<TReadFromStore extends UnknownTReadFromStore>(\n environment: IsographEnvironment,\n encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,\n fragmentReference: FragmentReference<TReadFromStore, any>,\n callback: (\n newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,\n ) => void,\n readerAst: ReaderAst<TReadFromStore>,\n): () => void {\n const fragmentSubscription: FragmentSubscription<TReadFromStore> = {\n kind: 'FragmentSubscription',\n callback,\n encounteredDataAndRecords,\n fragmentReference,\n readerAst,\n };\n\n // subscribe is called in an effect. (We should actually subscribe during the\n // initial render.) Because it's called in an effect, we might have missed some\n // changes since the initial render! So, at this point, we re-read and call the\n // subscription (i.e. re-render) if the fragment data has changed.\n callSubscriptionIfDataChanged(environment, fragmentSubscription);\n\n environment.subscriptions.add(fragmentSubscription);\n return () => environment.subscriptions.delete(fragmentSubscription);\n}\n\n// Calls to readButDoNotEvaluate can suspend (i.e. throw a promise).\n// Maybe in the future, they will be able to throw errors.\n//\n// That's probably okay to ignore. We don't, however, want to prevent\n// updating other subscriptions if one subscription had missing data.\nfunction logAnyError(\n environment: IsographEnvironment,\n context: any,\n f: () => void,\n) {\n try {\n f();\n } catch (e) {\n logMessage(environment, () => ({\n kind: 'ErrorEncounteredInWithErrorHandling',\n error: e,\n context,\n }));\n }\n}\n\nexport function callSubscriptions(\n environment: IsographEnvironment,\n recordsEncounteredWhenNormalizing: EncounteredIds,\n) {\n environment.subscriptions.forEach((subscription) =>\n logAnyError(environment, { situation: 'calling subscriptions' }, () => {\n switch (subscription.kind) {\n case 'FragmentSubscription': {\n // TODO if there are multiple components subscribed to the same\n // fragment, we will call readButNotEvaluate multiple times. We\n // should fix that.\n if (\n hasOverlappingIds(\n recordsEncounteredWhenNormalizing,\n subscription.encounteredDataAndRecords.encounteredRecords,\n )\n ) {\n callSubscriptionIfDataChanged(environment, subscription);\n }\n return;\n }\n case 'AnyRecords': {\n logAnyError(\n environment,\n { situation: 'calling AnyRecords callback' },\n () => subscription.callback(),\n );\n return;\n }\n case 'AnyChangesToRecord': {\n if (\n recordsEncounteredWhenNormalizing\n .get(subscription.recordLink.__typename)\n ?.has(subscription.recordLink.__link) != null\n ) {\n logAnyError(\n environment,\n { situation: 'calling AnyChangesToRecord callback' },\n () => subscription.callback(),\n );\n }\n return;\n }\n }\n }),\n );\n}\n\nfunction callSubscriptionIfDataChanged<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n subscription: FragmentSubscription<TReadFromStore>,\n) {\n const newEncounteredDataAndRecords = readButDoNotEvaluate(\n environment,\n subscription.fragmentReference,\n // Is this wrong?\n // Reasons to think no:\n // - we are only updating the read-out value, and the network\n // options only affect whether we throw.\n // - the component will re-render, and re-throw on its own, anyway.\n //\n // Reasons to think not:\n // - it seems more efficient to suspend here and not update state,\n // if we expect that the component will just throw anyway\n // - consistency\n // - it's also weird, this is called from makeNetworkRequest, where\n // we don't currently pass network request options\n {\n suspendIfInFlight: false,\n throwOnNetworkError: false,\n },\n );\n\n const mergedItem = mergeObjectsUsingReaderAst(\n subscription.readerAst,\n subscription.encounteredDataAndRecords.item,\n newEncounteredDataAndRecords.item,\n );\n\n logMessage(environment, () => ({\n kind: 'DeepEqualityCheck',\n fragmentReference: subscription.fragmentReference,\n old: subscription.encounteredDataAndRecords.item,\n new: newEncounteredDataAndRecords.item,\n deeplyEqual: mergedItem === subscription.encounteredDataAndRecords.item,\n }));\n\n if (mergedItem !== subscription.encounteredDataAndRecords.item) {\n logAnyError(\n environment,\n { situation: 'calling FragmentSubscription callback' },\n () => {\n subscription.callback(newEncounteredDataAndRecords);\n },\n );\n subscription.encounteredDataAndRecords = newEncounteredDataAndRecords;\n }\n}\n\nfunction hasOverlappingIds(\n ids1: EncounteredIds,\n ids2: EncounteredIds,\n): boolean {\n for (const [typeName, set1] of ids1.entries()) {\n const set2 = ids2.get(typeName);\n if (set2 === undefined) {\n continue;\n }\n\n if (isNotDisjointFrom(set1, set2)) {\n return true;\n }\n }\n return false;\n}\n\n// TODO use a polyfill library\nfunction isNotDisjointFrom<T>(set1: Set<T>, set2: Set<T>): boolean {\n for (const id of set1) {\n if (set2.has(id)) {\n return true;\n }\n }\n return false;\n}\n"],"mappings":";;;;;AAcA,SAAgB,UACd,aACA,2BACA,mBACA,UAGA,WACY;CACZ,MAAMA,uBAA6D;EACjE,MAAM;EACN;EACA;EACA;EACA;EACD;AAMD,+BAA8B,aAAa,qBAAqB;AAEhE,aAAY,cAAc,IAAI,qBAAqB;AACnD,cAAa,YAAY,cAAc,OAAO,qBAAqB;;AAQrE,SAAS,YACP,aACA,SACA,GACA;AACA,KAAI;AACF,KAAG;UACI,GAAG;AACV,aAAW,oBAAoB;GAC7B,MAAM;GACN,OAAO;GACP;GACD,EAAE;;;AAIP,SAAgB,kBACd,aACA,mCACA;AACA,aAAY,cAAc,SAAS,iBACjC,YAAY,aAAa,EAAE,WAAW,yBAAyB,QAAQ;AACrE,UAAQ,aAAa,MAArB;GACE,KAAK;AAIH,QACE,kBACE,mCACA,aAAa,0BAA0B,mBACxC,CAED,+BAA8B,aAAa,aAAa;AAE1D;GAEF,KAAK;AACH,gBACE,aACA,EAAE,WAAW,+BAA+B,QACtC,aAAa,UAAU,CAC9B;AACD;GAEF,KAAK;AACH,QACE,kCACG,IAAI,aAAa,WAAW,WAAW,EACtC,IAAI,aAAa,WAAW,OAAO,IAAI,KAE3C,aACE,aACA,EAAE,WAAW,uCAAuC,QAC9C,aAAa,UAAU,CAC9B;AAEH;;GAGJ,CACH;;AAGH,SAAS,8BAGP,aACA,cACA;CACA,MAAM,+BAA+B,qBACnC,aACA,aAAa,mBAab;EACE,mBAAmB;EACnB,qBAAqB;EACtB,CACF;CAED,MAAM,aAAa,2BACjB,aAAa,WACb,aAAa,0BAA0B,MACvC,6BAA6B,KAC9B;AAED,YAAW,oBAAoB;EAC7B,MAAM;EACN,mBAAmB,aAAa;EAChC,KAAK,aAAa,0BAA0B;EAC5C,KAAK,6BAA6B;EAClC,aAAa,eAAe,aAAa,0BAA0B;EACpE,EAAE;AAEH,KAAI,eAAe,aAAa,0BAA0B,MAAM;AAC9D,cACE,aACA,EAAE,WAAW,yCAAyC,QAChD;AACJ,gBAAa,SAAS,6BAA6B;IAEtD;AACD,eAAa,4BAA4B;;;AAI7C,SAAS,kBACP,MACA,MACS;AACT,MAAK,MAAM,CAAC,UAAU,SAAS,KAAK,SAAS,EAAE;EAC7C,MAAM,OAAO,KAAK,IAAI,SAAS;AAC/B,MAAI,SAAS,OACX;AAGF,MAAI,kBAAkB,MAAM,KAAK,CAC/B,QAAO;;AAGX,QAAO;;AAIT,SAAS,kBAAqB,MAAc,MAAuB;AACjE,MAAK,MAAM,MAAM,KACf,KAAI,KAAK,IAAI,GAAG,CACd,QAAO;AAGX,QAAO"}
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+
3
+ //#region src/core/util.d.ts
4
+ type ExtractSecondParam<T extends (arg1: any, arg2: any) => any> = T extends ((arg1: any, arg2: infer P) => any) ? P : never;
5
+ type CombineWithIntrinsicAttributes<T> = T extends Record<PropertyKey, never> ? React.JSX.IntrinsicAttributes : T & React.JSX.IntrinsicAttributes;
6
+ type Arguments = Argument[];
7
+ type Argument = [ArgumentName, ArgumentValue];
8
+ type ArgumentName = string;
9
+ type ArgumentValue = {
10
+ readonly kind: 'Variable';
11
+ readonly name: string;
12
+ } | {
13
+ readonly kind: 'Literal';
14
+ readonly value: any;
15
+ } | {
16
+ readonly kind: 'String';
17
+ readonly value: string;
18
+ } | {
19
+ readonly kind: 'Enum';
20
+ readonly value: string;
21
+ } | {
22
+ readonly kind: 'Object';
23
+ readonly value: Arguments;
24
+ };
25
+ //#endregion
26
+ export { Argument, ArgumentName, ArgumentValue, Arguments, CombineWithIntrinsicAttributes, ExtractSecondParam };
27
+ //# sourceMappingURL=util.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.mts","names":[],"sources":["../../src/core/util.ts"],"sourcesContent":[],"mappings":";;;KAEY,8DACV,gDAA8C;KACpC,oCACV,UAAU,OAAO,sBACb,KAAA,CAAM,GAAA,CAAI,sBACV,IAAI,KAAA,CAAM,GAAA,CAAI;AALR,KAOA,SAAA,GAAY,QAPM,EAAA;AAElB,KAMA,QAAA,GANA,CAMY,YANZ,EAM0B,aANI,CAAA;AACxC,KAMU,YAAA,GANV,MAAA;AAAiB,KAOP,aAAA,GAPO;EAAP,SAAA,IAAA,EAAA,UAAA;EACN,SAAU,IAAA,EAAA,MAAA;CACV,GAAA;EAAI,SAAU,IAAA,EAAA,SAAA;EAAmB,SAAA,KAAA,EAAA,GAAA;AAEvC,CAAA,GAAY;EACA,SAAA,IAAQ,EAAA,QAAA;EACR,SAAA,KAAA,EAAY,MAAA;AACxB,CAAA,GAAY;;;;;kBAmBU"}
@@ -1,23 +1,27 @@
1
- import type React from 'react';
2
- export type ExtractSecondParam<T extends (arg1: any, arg2: any) => any> = T extends (arg1: any, arg2: infer P) => any ? P : never;
3
- export type CombineWithIntrinsicAttributes<T> = T extends Record<PropertyKey, never> ? React.JSX.IntrinsicAttributes : T & React.JSX.IntrinsicAttributes;
4
- export type Arguments = Argument[];
5
- export type Argument = [ArgumentName, ArgumentValue];
6
- export type ArgumentName = string;
7
- export type ArgumentValue = {
8
- readonly kind: 'Variable';
9
- readonly name: string;
1
+ import React from "react";
2
+
3
+ //#region src/core/util.d.ts
4
+ type ExtractSecondParam<T extends (arg1: any, arg2: any) => any> = T extends ((arg1: any, arg2: infer P) => any) ? P : never;
5
+ type CombineWithIntrinsicAttributes<T> = T extends Record<PropertyKey, never> ? React.JSX.IntrinsicAttributes : T & React.JSX.IntrinsicAttributes;
6
+ type Arguments = Argument[];
7
+ type Argument = [ArgumentName, ArgumentValue];
8
+ type ArgumentName = string;
9
+ type ArgumentValue = {
10
+ readonly kind: 'Variable';
11
+ readonly name: string;
10
12
  } | {
11
- readonly kind: 'Literal';
12
- readonly value: any;
13
+ readonly kind: 'Literal';
14
+ readonly value: any;
13
15
  } | {
14
- readonly kind: 'String';
15
- readonly value: string;
16
+ readonly kind: 'String';
17
+ readonly value: string;
16
18
  } | {
17
- readonly kind: 'Enum';
18
- readonly value: string;
19
+ readonly kind: 'Enum';
20
+ readonly value: string;
19
21
  } | {
20
- readonly kind: 'Object';
21
- readonly value: Arguments;
22
+ readonly kind: 'Object';
23
+ readonly value: Arguments;
22
24
  };
25
+ //#endregion
26
+ export { Argument, ArgumentName, ArgumentValue, Arguments, CombineWithIntrinsicAttributes, ExtractSecondParam };
23
27
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/core/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,IACpE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1D,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAC1C,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAChC,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAC7B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;CACrB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"util.d.ts","names":[],"sources":["../../src/core/util.ts"],"sourcesContent":[],"mappings":";;;KAEY,8DACV,gDAA8C;KACpC,oCACV,UAAU,OAAO,sBACb,KAAA,CAAM,GAAA,CAAI,sBACV,IAAI,KAAA,CAAM,GAAA,CAAI;AALR,KAOA,SAAA,GAAY,QAPM,EAAA;AAElB,KAMA,QAAA,GANA,CAMY,YANZ,EAM0B,aANI,CAAA;AACxC,KAMU,YAAA,GANV,MAAA;AAAiB,KAOP,aAAA,GAPO;EAAP,SAAA,IAAA,EAAA,UAAA;EACN,SAAU,IAAA,EAAA,MAAA;CACV,GAAA;EAAI,SAAU,IAAA,EAAA,SAAA;EAAmB,SAAA,KAAA,EAAA,GAAA;AAEvC,CAAA,GAAY;EACA,SAAA,IAAQ,EAAA,QAAA;EACR,SAAA,KAAA,EAAY,MAAA;AACxB,CAAA,GAAY;;;;;kBAmBU"}
package/dist/core/util.js CHANGED
@@ -1,2 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+
2
+ //#region src/core/util.ts
3
+ function isArray(value) {
4
+ return Array.isArray(value);
5
+ }
6
+ /**
7
+ * Creates a copy of the provided value, ensuring any nested objects have their
8
+ * keys sorted such that equivalent values would have identical JSON.stringify
9
+ * results.
10
+ */
11
+ function stableCopy(value) {
12
+ if (value == null || typeof value !== "object") return value;
13
+ if (isArray(value)) return value.map(stableCopy);
14
+ const keys = Object.keys(value).sort();
15
+ const stable = {};
16
+ for (let i = 0; i < keys.length; i++) stable[keys[i]] = stableCopy(value[keys[i]]);
17
+ return stable;
18
+ }
19
+
20
+ //#endregion
21
+ exports.isArray = isArray;
22
+ exports.stableCopy = stableCopy;
@@ -0,0 +1,21 @@
1
+ //#region src/core/util.ts
2
+ function isArray(value) {
3
+ return Array.isArray(value);
4
+ }
5
+ /**
6
+ * Creates a copy of the provided value, ensuring any nested objects have their
7
+ * keys sorted such that equivalent values would have identical JSON.stringify
8
+ * results.
9
+ */
10
+ function stableCopy(value) {
11
+ if (value == null || typeof value !== "object") return value;
12
+ if (isArray(value)) return value.map(stableCopy);
13
+ const keys = Object.keys(value).sort();
14
+ const stable = {};
15
+ for (let i = 0; i < keys.length; i++) stable[keys[i]] = stableCopy(value[keys[i]]);
16
+ return stable;
17
+ }
18
+
19
+ //#endregion
20
+ export { isArray, stableCopy };
21
+ //# sourceMappingURL=util.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.mjs","names":["stable: { [index: string]: any }"],"sources":["../../src/core/util.ts"],"sourcesContent":["import type React from 'react';\n\nexport type ExtractSecondParam<T extends (arg1: any, arg2: any) => any> =\n T extends (arg1: any, arg2: infer P) => any ? P : never;\nexport type CombineWithIntrinsicAttributes<T> =\n T extends Record<PropertyKey, never>\n ? React.JSX.IntrinsicAttributes\n : T & React.JSX.IntrinsicAttributes;\n\nexport type Arguments = Argument[];\nexport type Argument = [ArgumentName, ArgumentValue];\nexport type ArgumentName = string;\nexport type ArgumentValue =\n | {\n readonly kind: 'Variable';\n readonly name: string;\n }\n | {\n readonly kind: 'Literal';\n readonly value: any;\n }\n | {\n readonly kind: 'String';\n readonly value: string;\n }\n | {\n readonly kind: 'Enum';\n readonly value: string;\n }\n | {\n readonly kind: 'Object';\n readonly value: Arguments;\n };\n\nexport function isArray(value: unknown): value is readonly unknown[] {\n return Array.isArray(value);\n}\n\n/**\n * Creates a copy of the provided value, ensuring any nested objects have their\n * keys sorted such that equivalent values would have identical JSON.stringify\n * results.\n */\nexport function stableCopy<T>(value: T): T {\n if (value == null || typeof value !== 'object') {\n return value;\n }\n if (isArray(value)) {\n // @ts-ignore\n return value.map(stableCopy);\n }\n const keys = Object.keys(value).sort();\n const stable: { [index: string]: any } = {};\n for (let i = 0; i < keys.length; i++) {\n // @ts-ignore\n stable[keys[i]] = stableCopy(value[keys[i]]);\n }\n return stable as any;\n}\n"],"mappings":";AAkCA,SAAgB,QAAQ,OAA6C;AACnE,QAAO,MAAM,QAAQ,MAAM;;;;;;;AAQ7B,SAAgB,WAAc,OAAa;AACzC,KAAI,SAAS,QAAQ,OAAO,UAAU,SACpC,QAAO;AAET,KAAI,QAAQ,MAAM,CAEhB,QAAO,MAAM,IAAI,WAAW;CAE9B,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,MAAM;CACtC,MAAMA,SAAmC,EAAE;AAC3C,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAE/B,QAAO,KAAK,MAAM,WAAW,MAAM,KAAK,IAAI;AAE9C,QAAO"}
@@ -0,0 +1,11 @@
1
+ import { IsographEnvironment } from "./IsographEnvironment.mjs";
2
+ import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.mjs";
3
+ import { NetworkResponseObject } from "./cache.mjs";
4
+ import { IsographEntrypoint, NormalizationAst } from "./entrypoint.mjs";
5
+ import { ItemCleanupPair } from "@isograph/isograph-disposable-types/dist";
6
+
7
+ //#region src/core/writeData.d.ts
8
+ declare function writeData<TReadFromStore extends UnknownTReadFromStore, TRawResponseType extends NetworkResponseObject, TClientFieldValue>(environment: IsographEnvironment, entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue, NormalizationAst, TRawResponseType>, data: TRawResponseType, variables: ExtractParameters<TReadFromStore>): ItemCleanupPair<FragmentReference<TReadFromStore, TClientFieldValue>>;
9
+ //#endregion
10
+ export { writeData };
11
+ //# sourceMappingURL=writeData.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeData.d.mts","names":[],"sources":["../../src/core/writeData.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAsBgB,iCACS,gDACE,uDAGZ,iCACD,mBACV,gBACA,mBACA,kBACA,yBAEI,6BACK,kBAAkB,kBAC5B,gBAAgB,kBAAkB,gBAAgB"}
@@ -0,0 +1,11 @@
1
+ import { IsographEnvironment } from "./IsographEnvironment.js";
2
+ import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.js";
3
+ import { NetworkResponseObject } from "./cache.js";
4
+ import { IsographEntrypoint, NormalizationAst } from "./entrypoint.js";
5
+ import { ItemCleanupPair } from "@isograph/isograph-disposable-types/dist";
6
+
7
+ //#region src/core/writeData.d.ts
8
+ declare function writeData<TReadFromStore extends UnknownTReadFromStore, TRawResponseType extends NetworkResponseObject, TClientFieldValue>(environment: IsographEnvironment, entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue, NormalizationAst, TRawResponseType>, data: TRawResponseType, variables: ExtractParameters<TReadFromStore>): ItemCleanupPair<FragmentReference<TReadFromStore, TClientFieldValue>>;
9
+ //#endregion
10
+ export { writeData };
11
+ //# sourceMappingURL=writeData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeData.d.ts","names":[],"sources":["../../src/core/writeData.ts"],"sourcesContent":[],"mappings":";;;;;;;iBAsBgB,iCACS,gDACE,uDAGZ,iCACD,mBACV,gBACA,mBACA,kBACA,yBAEI,6BACK,kBAAkB,kBAC5B,gBAAgB,kBAAkB,gBAAgB"}
@@ -0,0 +1,41 @@
1
+ const require_IsographEnvironment = require('./IsographEnvironment.js');
2
+ const require_logging = require('./logging.js');
3
+ const require_makeNetworkRequest = require('./makeNetworkRequest.js');
4
+ const require_subscribe = require('./subscribe.js');
5
+ const require_optimisticProxy = require('./optimisticProxy.js');
6
+ const require_cache = require('./cache.js');
7
+
8
+ //#region src/core/writeData.ts
9
+ function writeData(environment, entrypoint, data, variables) {
10
+ const encounteredIds = /* @__PURE__ */ new Map();
11
+ environment.store = require_optimisticProxy.addNetworkResponseStoreLayer(environment.store);
12
+ require_cache.normalizeData(environment, environment.store, entrypoint.networkRequestInfo.normalizationAst.selections, data, variables, {
13
+ __link: require_IsographEnvironment.ROOT_ID,
14
+ __typename: entrypoint.concreteType
15
+ }, encounteredIds);
16
+ require_logging.logMessage(environment, () => ({
17
+ kind: "AfterNormalization",
18
+ store: environment.store,
19
+ encounteredIds
20
+ }));
21
+ require_subscribe.callSubscriptions(environment, encounteredIds);
22
+ const { fieldName, readerArtifactKind, readerWithRefetchQueries } = require_IsographEnvironment.getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries);
23
+ const [networkRequest, disposeNetworkRequest] = require_makeNetworkRequest.retainQueryWithoutMakingNetworkRequest(environment, entrypoint, variables);
24
+ return [{
25
+ kind: "FragmentReference",
26
+ readerWithRefetchQueries,
27
+ fieldName,
28
+ readerArtifactKind,
29
+ root: {
30
+ __link: require_IsographEnvironment.ROOT_ID,
31
+ __typename: entrypoint.concreteType
32
+ },
33
+ variables,
34
+ networkRequest
35
+ }, () => {
36
+ disposeNetworkRequest();
37
+ }];
38
+ }
39
+
40
+ //#endregion
41
+ exports.writeData = writeData;
@@ -0,0 +1,42 @@
1
+ import { ROOT_ID, getOrLoadReaderWithRefetchQueries } from "./IsographEnvironment.mjs";
2
+ import { logMessage } from "./logging.mjs";
3
+ import { retainQueryWithoutMakingNetworkRequest } from "./makeNetworkRequest.mjs";
4
+ import { callSubscriptions } from "./subscribe.mjs";
5
+ import { addNetworkResponseStoreLayer } from "./optimisticProxy.mjs";
6
+ import { normalizeData } from "./cache.mjs";
7
+
8
+ //#region src/core/writeData.ts
9
+ function writeData(environment, entrypoint, data, variables) {
10
+ const encounteredIds = /* @__PURE__ */ new Map();
11
+ environment.store = addNetworkResponseStoreLayer(environment.store);
12
+ normalizeData(environment, environment.store, entrypoint.networkRequestInfo.normalizationAst.selections, data, variables, {
13
+ __link: ROOT_ID,
14
+ __typename: entrypoint.concreteType
15
+ }, encounteredIds);
16
+ logMessage(environment, () => ({
17
+ kind: "AfterNormalization",
18
+ store: environment.store,
19
+ encounteredIds
20
+ }));
21
+ callSubscriptions(environment, encounteredIds);
22
+ const { fieldName, readerArtifactKind, readerWithRefetchQueries } = getOrLoadReaderWithRefetchQueries(environment, entrypoint.readerWithRefetchQueries);
23
+ const [networkRequest, disposeNetworkRequest] = retainQueryWithoutMakingNetworkRequest(environment, entrypoint, variables);
24
+ return [{
25
+ kind: "FragmentReference",
26
+ readerWithRefetchQueries,
27
+ fieldName,
28
+ readerArtifactKind,
29
+ root: {
30
+ __link: ROOT_ID,
31
+ __typename: entrypoint.concreteType
32
+ },
33
+ variables,
34
+ networkRequest
35
+ }, () => {
36
+ disposeNetworkRequest();
37
+ }];
38
+ }
39
+
40
+ //#endregion
41
+ export { writeData };
42
+ //# sourceMappingURL=writeData.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeData.mjs","names":["encounteredIds: EncounteredIds"],"sources":["../../src/core/writeData.ts"],"sourcesContent":["import type { ItemCleanupPair } from '@isograph/isograph-disposable-types/dist';\nimport { callSubscriptions } from './subscribe';\nimport {\n type NetworkResponseObject,\n type EncounteredIds,\n normalizeData,\n} from './cache';\nimport type { IsographEntrypoint, NormalizationAst } from './entrypoint';\nimport type {\n UnknownTReadFromStore,\n ExtractParameters,\n FragmentReference,\n} from './FragmentReference';\nimport {\n type IsographEnvironment,\n ROOT_ID,\n getOrLoadReaderWithRefetchQueries,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { retainQueryWithoutMakingNetworkRequest } from './makeNetworkRequest';\nimport { addNetworkResponseStoreLayer } from './optimisticProxy';\n\nexport function writeData<\n TReadFromStore extends UnknownTReadFromStore,\n TRawResponseType extends NetworkResponseObject,\n TClientFieldValue,\n>(\n environment: IsographEnvironment,\n entrypoint: IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n NormalizationAst,\n TRawResponseType\n >,\n data: TRawResponseType,\n variables: ExtractParameters<TReadFromStore>,\n): ItemCleanupPair<FragmentReference<TReadFromStore, TClientFieldValue>> {\n const encounteredIds: EncounteredIds = new Map();\n environment.store = addNetworkResponseStoreLayer(environment.store);\n normalizeData(\n environment,\n environment.store,\n entrypoint.networkRequestInfo.normalizationAst.selections,\n data,\n variables,\n { __link: ROOT_ID, __typename: entrypoint.concreteType },\n encounteredIds,\n );\n logMessage(environment, () => ({\n kind: 'AfterNormalization',\n store: environment.store,\n encounteredIds,\n }));\n\n callSubscriptions(environment, encounteredIds);\n\n const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n );\n const [networkRequest, disposeNetworkRequest] =\n retainQueryWithoutMakingNetworkRequest(environment, entrypoint, variables);\n\n return [\n {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName,\n readerArtifactKind,\n root: { __link: ROOT_ID, __typename: entrypoint.concreteType },\n variables,\n networkRequest,\n },\n () => {\n disposeNetworkRequest();\n },\n ];\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,UAKd,aACA,YAMA,MACA,WACuE;CACvE,MAAMA,iCAAiC,IAAI,KAAK;AAChD,aAAY,QAAQ,6BAA6B,YAAY,MAAM;AACnE,eACE,aACA,YAAY,OACZ,WAAW,mBAAmB,iBAAiB,YAC/C,MACA,WACA;EAAE,QAAQ;EAAS,YAAY,WAAW;EAAc,EACxD,eACD;AACD,YAAW,oBAAoB;EAC7B,MAAM;EACN,OAAO,YAAY;EACnB;EACD,EAAE;AAEH,mBAAkB,aAAa,eAAe;CAE9C,MAAM,EAAE,WAAW,oBAAoB,6BACrC,kCACE,aACA,WAAW,yBACZ;CACH,MAAM,CAAC,gBAAgB,yBACrB,uCAAuC,aAAa,YAAY,UAAU;AAE5E,QAAO,CACL;EACE,MAAM;EACN;EACA;EACA;EACA,MAAM;GAAE,QAAQ;GAAS,YAAY,WAAW;GAAc;EAC9D;EACA;EACD,QACK;AACJ,yBAAuB;GAE1B"}
@@ -0,0 +1,32 @@
1
+ import { CheckResult, FetchOptions, RequiredFetchOptions, RequiredShouldFetch, ShouldFetch, check } from "./core/check.mjs";
2
+ import { AnyError, NOT_SET, NotSet, PromiseState, PromiseWrapper, Result, getPromiseState, readPromise, wrapPromise, wrapResolvedValue } from "./core/PromiseWrapper.mjs";
3
+ import { Argument, ArgumentName, ArgumentValue, Arguments, CombineWithIntrinsicAttributes, ExtractSecondParam } from "./core/util.mjs";
4
+ import { ComponentReaderArtifact, EagerReaderArtifact, LoadableField, LoadablySelectedField, ReaderAst, ReaderAstNode, ReaderImperativelyLoadedField, ReaderLinkField, ReaderLinkedField, ReaderNonLoadableResolverField, ReaderScalarField, RefetchReaderArtifact, ResolverFirstParameter, StableId, StartUpdate, TopLevelReaderArtifact } from "./core/reader.mjs";
5
+ import { NetworkRequestReaderOptions, ReadDataResult, WithEncounteredRecords, readButDoNotEvaluate } from "./core/read.mjs";
6
+ import { LogFunction, LogMessage, WrappedLogFunction, logMessage, registerLogger } from "./core/logging.mjs";
7
+ import { AnyChangesToRecordSubscription, AnyRecordSubscription, BaseStoreLayerData, CacheMap, ComponentOrFieldName, DataId, DataTypeValue, FieldCache, FragmentSubscription, IsographEnvironment, IsographNetworkFunction, Link, MissingFieldHandler, ROOT_ID, StoreLink, StoreRecord, StringifiedArgs, Subscription, Subscriptions, TypeName, createIsographStore } from "./core/IsographEnvironment.mjs";
8
+ import { ExtractData, ExtractParameters, ExtractStartUpdate, FragmentReference, StableIdForFragmentReference, UnknownTReadFromStore, VariableValue, Variables, stableIdForFragmentReference } from "./core/FragmentReference.mjs";
9
+ import { EncounteredIds, NetworkResponseObject, NetworkResponseScalarValue, NetworkResponseValue, normalizeData } from "./core/cache.mjs";
10
+ import { ExtractClientFieldValue, ExtractProps, ExtractReadFromStore, ExtractResolverResult, FragmentReferenceOfEntrypoint, IsographEntrypoint, IsographEntrypointLoader, IsographOperation, IsographPersistedOperation, IsographPersistedOperationExtraInfo, NetworkRequestInfo, NormalizationAst, NormalizationAstLoader, NormalizationAstNode, NormalizationAstNodes, NormalizationInlineFragment, NormalizationLinkedField, NormalizationScalarField, ReaderWithRefetchQueries, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper, assertIsEntrypoint } from "./core/entrypoint.mjs";
11
+ import { DidUnretainSomeQuery, RetainedQuery, garbageCollectEnvironment, retainQuery, unretainQuery } from "./core/garbageCollection.mjs";
12
+ import { callSubscriptions, subscribe } from "./core/subscribe.mjs";
13
+ import { writeData } from "./core/writeData.mjs";
14
+ import { makeNetworkRequest } from "./core/makeNetworkRequest.mjs";
15
+ import { IsographEnvironmentProvider, IsographEnvironmentProviderProps, useIsographEnvironment } from "./react/IsographEnvironmentProvider.mjs";
16
+ import { UseImperativeReferenceResult, useImperativeReference } from "./react/useImperativeReference.mjs";
17
+ import { FragmentRenderer, IsExactlyIntrinsicAttributes } from "./react/FragmentRenderer.mjs";
18
+ import { FragmentReader } from "./react/FragmentReader.mjs";
19
+ import { LoadableFieldReader } from "./react/LoadableFieldReader.mjs";
20
+ import { LoadableFieldRenderer } from "./react/LoadableFieldRenderer.mjs";
21
+ import { useResult } from "./react/useResult.mjs";
22
+ import { useReadAndSubscribe, useSubscribeToMultiple } from "./react/useReadAndSubscribe.mjs";
23
+ import { useLazyReference } from "./react/useLazyReference.mjs";
24
+ import { useRerenderOnChange } from "./react/useRerenderOnChange.mjs";
25
+ import { RenderAfterCommit__DO_NOT_USE } from "./react/RenderAfterCommit__DO_NOT_USE.mjs";
26
+ import { createIsographEnvironment } from "./react/createIsographEnvironment.mjs";
27
+ import { useClientSideDefer } from "./loadable-hooks/useClientSideDefer.mjs";
28
+ import { UseImperativeLoadableFieldReturn, useImperativeExposedMutationField } from "./loadable-hooks/useImperativeExposedMutationField.mjs";
29
+ import { UseSkipLimitPaginationArgs, UseSkipLimitReturnValue, useSkipLimitPagination } from "./loadable-hooks/useSkipLimitPagination.mjs";
30
+ import { Connection, PageInfo, UseConnectionSpecPaginationArgs, UsePaginationReturnValue, useConnectionSpecPagination } from "./loadable-hooks/useConnectionSpecPagination.mjs";
31
+ import { UseImperativeLoadableFieldReturn as UseImperativeLoadableFieldReturn$1, useImperativeLoadableField } from "./loadable-hooks/useImperativeLoadableField.mjs";
32
+ export { type AnyChangesToRecordSubscription, type AnyError, type AnyRecordSubscription, type Argument, type ArgumentName, type ArgumentValue, type Arguments, type CacheMap, type CheckResult, type CombineWithIntrinsicAttributes, type ComponentOrFieldName, type ComponentReaderArtifact, type Connection, type DataId, type DataTypeValue, type DidUnretainSomeQuery, type EagerReaderArtifact, type EncounteredIds, type ExtractClientFieldValue, type ExtractData, type ExtractParameters, type ExtractProps, type ExtractReadFromStore, type ExtractResolverResult, type ExtractSecondParam, type ExtractStartUpdate, type FetchOptions, type FieldCache, FragmentReader, type FragmentReference, type FragmentReferenceOfEntrypoint, FragmentRenderer, type FragmentSubscription, type IsExactlyIntrinsicAttributes, type IsographEntrypoint, type IsographEntrypointLoader, type IsographEnvironment, IsographEnvironmentProvider, type IsographEnvironmentProviderProps, type IsographNetworkFunction, type IsographOperation, type IsographPersistedOperation, type IsographPersistedOperationExtraInfo, type BaseStoreLayerData as IsographStore, type Link, type LoadableField, LoadableFieldReader, LoadableFieldRenderer, type LogFunction, type LogMessage, type MissingFieldHandler, NOT_SET, type NetworkRequestInfo, type NetworkRequestReaderOptions, type NetworkResponseObject, type NetworkResponseScalarValue, type NetworkResponseValue, type NormalizationAst, type NormalizationAstLoader, type NormalizationAstNode, type NormalizationAstNodes, type NormalizationInlineFragment, type NormalizationLinkedField, type NormalizationScalarField, type NotSet, type PageInfo, type PromiseState, type PromiseWrapper, ROOT_ID, type ReadDataResult, type ReaderAst, type ReaderAstNode, type ReaderImperativelyLoadedField, type ReaderLinkField, type ReaderLinkedField, type LoadablySelectedField as ReaderLoadableField, type ReaderNonLoadableResolverField, type ReaderScalarField, type ReaderWithRefetchQueries, type RefetchQueryNormalizationArtifact, type RefetchQueryNormalizationArtifactWrapper, type RefetchReaderArtifact, RenderAfterCommit__DO_NOT_USE, type RequiredFetchOptions, type RequiredShouldFetch, type ResolverFirstParameter, type Result, type RetainedQuery, type ShouldFetch, type StableId, type StableIdForFragmentReference, type StartUpdate, type StoreLink, type StoreRecord, type StringifiedArgs, type Subscription, type Subscriptions, type TopLevelReaderArtifact, type TypeName, type UnknownTReadFromStore, type UseConnectionSpecPaginationArgs, type UseImperativeLoadableFieldReturn as UseImperativeExposedMutationFieldReturn, type UseImperativeLoadableFieldReturn$1 as UseImperativeLoadableFieldReturn, type UseImperativeReferenceResult, type UsePaginationReturnValue, type UseSkipLimitPaginationArgs, type UseSkipLimitReturnValue, type VariableValue, type Variables, type WithEncounteredRecords, type WrappedLogFunction, assertIsEntrypoint, callSubscriptions, check, createIsographEnvironment, createIsographStore, garbageCollectEnvironment, getPromiseState, logMessage, makeNetworkRequest, normalizeData, readButDoNotEvaluate, readPromise, registerLogger, retainQuery, stableIdForFragmentReference, subscribe, unretainQuery, useClientSideDefer, useConnectionSpecPagination, useImperativeExposedMutationField, useImperativeLoadableField, useImperativeReference, useIsographEnvironment, useLazyReference, useReadAndSubscribe, useRerenderOnChange, useResult, useSkipLimitPagination, useSubscribeToMultiple, wrapPromise, wrapResolvedValue, writeData };