@isograph/react 0.0.0-main-a840a70e → 0.0.0-main-c09c9dbf

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 (228) hide show
  1. package/.turbo/turbo-compile-libs.log +8 -5
  2. package/.turbo/turbo-tsc.log +2 -2
  3. package/dist/_virtual/{rolldown_runtime.js → rolldown_runtime.cjs} +10 -6
  4. package/dist/core/{FragmentReference.js → FragmentReference.cjs} +1 -1
  5. package/dist/core/{FragmentReference.d.ts → FragmentReference.d.cts} +5 -5
  6. package/dist/core/FragmentReference.d.cts.map +1 -0
  7. package/dist/core/FragmentReference.d.mts.map +1 -1
  8. package/dist/core/{IsographEnvironment.js → IsographEnvironment.cjs} +5 -5
  9. package/dist/core/{IsographEnvironment.d.ts → IsographEnvironment.d.cts} +15 -16
  10. package/dist/core/IsographEnvironment.d.cts.map +1 -0
  11. package/dist/core/IsographEnvironment.d.mts +5 -6
  12. package/dist/core/IsographEnvironment.d.mts.map +1 -1
  13. package/dist/core/IsographEnvironment.mjs +3 -3
  14. package/dist/core/IsographEnvironment.mjs.map +1 -1
  15. package/dist/core/{PromiseWrapper.d.ts → PromiseWrapper.d.cts} +1 -1
  16. package/dist/core/PromiseWrapper.d.cts.map +1 -0
  17. package/dist/core/PromiseWrapper.d.mts.map +1 -1
  18. package/dist/core/PromiseWrapper.mjs.map +1 -1
  19. package/dist/core/{areEqualWithDeepComparison.js → areEqualWithDeepComparison.cjs} +7 -7
  20. package/dist/core/areEqualWithDeepComparison.mjs +7 -7
  21. package/dist/core/areEqualWithDeepComparison.mjs.map +1 -1
  22. package/dist/core/{brand.d.ts → brand.d.cts} +2 -2
  23. package/dist/core/brand.d.cts.map +1 -0
  24. package/dist/core/brand.d.mts +1 -1
  25. package/dist/core/brand.d.mts.map +1 -1
  26. package/dist/core/{cache.js → cache.cjs} +11 -12
  27. package/dist/core/cache.d.cts +44 -0
  28. package/dist/core/cache.d.cts.map +1 -0
  29. package/dist/core/cache.d.mts +27 -19
  30. package/dist/core/cache.d.mts.map +1 -1
  31. package/dist/core/cache.mjs +4 -4
  32. package/dist/core/cache.mjs.map +1 -1
  33. package/dist/core/{check.js → check.cjs} +4 -4
  34. package/dist/core/{check.d.ts → check.d.cts} +4 -4
  35. package/dist/core/check.d.cts.map +1 -0
  36. package/dist/core/check.d.mts.map +1 -1
  37. package/dist/core/check.mjs.map +1 -1
  38. package/dist/core/{componentCache.js → componentCache.cjs} +2 -2
  39. package/dist/core/{entrypoint.d.ts → entrypoint.d.cts} +7 -7
  40. package/dist/core/entrypoint.d.cts.map +1 -0
  41. package/dist/core/entrypoint.d.mts.map +1 -1
  42. package/dist/core/{garbageCollection.js → garbageCollection.cjs} +3 -3
  43. package/dist/core/{garbageCollection.d.ts → garbageCollection.d.cts} +4 -4
  44. package/dist/core/garbageCollection.d.cts.map +1 -0
  45. package/dist/core/garbageCollection.d.mts.map +1 -1
  46. package/dist/core/garbageCollection.mjs.map +1 -1
  47. package/dist/core/{getOrCreateCacheForArtifact.js → getOrCreateCacheForArtifact.cjs} +4 -4
  48. package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -1
  49. package/dist/core/{logging.d.ts → logging.d.cts} +9 -10
  50. package/dist/core/logging.d.cts.map +1 -0
  51. package/dist/core/logging.d.mts +0 -1
  52. package/dist/core/logging.d.mts.map +1 -1
  53. package/dist/core/{makeNetworkRequest.js → makeNetworkRequest.cjs} +15 -15
  54. package/dist/core/{makeNetworkRequest.d.ts → makeNetworkRequest.d.cts} +7 -7
  55. package/dist/core/makeNetworkRequest.d.cts.map +1 -0
  56. package/dist/core/makeNetworkRequest.d.mts.map +1 -1
  57. package/dist/core/makeNetworkRequest.mjs +4 -4
  58. package/dist/core/makeNetworkRequest.mjs.map +1 -1
  59. package/dist/core/{optimisticProxy.js → optimisticProxy.cjs} +2 -2
  60. package/dist/core/{optimisticProxy.d.ts → optimisticProxy.d.cts} +2 -3
  61. package/dist/core/optimisticProxy.d.cts.map +1 -0
  62. package/dist/core/optimisticProxy.d.mts +0 -1
  63. package/dist/core/optimisticProxy.d.mts.map +1 -1
  64. package/dist/core/optimisticProxy.mjs.map +1 -1
  65. package/dist/core/{read.js → read.cjs} +47 -47
  66. package/dist/core/{read.d.ts → read.d.cts} +4 -5
  67. package/dist/core/read.d.cts.map +1 -0
  68. package/dist/core/read.d.mts.map +1 -1
  69. package/dist/core/read.mjs +39 -39
  70. package/dist/core/read.mjs.map +1 -1
  71. package/dist/core/{reader.d.ts → reader.d.cts} +6 -6
  72. package/dist/core/reader.d.cts.map +1 -0
  73. package/dist/core/reader.d.mts.map +1 -1
  74. package/dist/core/{startUpdate.js → startUpdate.cjs} +14 -14
  75. package/dist/core/startUpdate.mjs +6 -6
  76. package/dist/core/startUpdate.mjs.map +1 -1
  77. package/dist/core/{subscribe.js → subscribe.cjs} +3 -3
  78. package/dist/core/{subscribe.d.ts → subscribe.d.cts} +6 -6
  79. package/dist/core/subscribe.d.cts.map +1 -0
  80. package/dist/core/subscribe.d.mts.map +1 -1
  81. package/dist/core/subscribe.mjs.map +1 -1
  82. package/dist/core/{util.d.ts → util.d.cts} +1 -1
  83. package/dist/core/util.d.cts.map +1 -0
  84. package/dist/core/util.d.mts.map +1 -1
  85. package/dist/core/util.mjs.map +1 -1
  86. package/dist/core/{writeData.js → writeData.cjs} +6 -6
  87. package/dist/core/{writeData.d.ts → writeData.d.cts} +6 -6
  88. package/dist/core/writeData.d.cts.map +1 -0
  89. package/dist/core/writeData.d.mts +1 -1
  90. package/dist/core/writeData.d.mts.map +1 -1
  91. package/dist/core/writeData.mjs.map +1 -1
  92. package/dist/{index.js → index.cjs} +29 -29
  93. package/dist/{index.d.ts → index.d.cts} +31 -31
  94. package/dist/loadable-hooks/useClientSideDefer.cjs +14 -0
  95. package/dist/loadable-hooks/{useClientSideDefer.d.ts → useClientSideDefer.d.cts} +4 -4
  96. package/dist/loadable-hooks/useClientSideDefer.d.cts.map +1 -0
  97. package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -1
  98. package/dist/loadable-hooks/{useConnectionSpecPagination.js → useConnectionSpecPagination.cjs} +13 -16
  99. package/dist/loadable-hooks/{useConnectionSpecPagination.d.ts → useConnectionSpecPagination.d.cts} +4 -4
  100. package/dist/loadable-hooks/useConnectionSpecPagination.d.cts.map +1 -0
  101. package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -1
  102. package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -1
  103. package/dist/loadable-hooks/{useImperativeExposedMutationField.d.ts → useImperativeExposedMutationField.d.cts} +1 -1
  104. package/dist/loadable-hooks/useImperativeExposedMutationField.d.cts.map +1 -0
  105. package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -1
  106. package/dist/loadable-hooks/{useImperativeLoadableField.js → useImperativeLoadableField.cjs} +4 -5
  107. package/dist/loadable-hooks/{useImperativeLoadableField.d.ts → useImperativeLoadableField.d.cts} +4 -4
  108. package/dist/loadable-hooks/useImperativeLoadableField.d.cts.map +1 -0
  109. package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -1
  110. package/dist/loadable-hooks/{useSkipLimitPagination.js → useSkipLimitPagination.cjs} +13 -16
  111. package/dist/loadable-hooks/{useSkipLimitPagination.d.ts → useSkipLimitPagination.d.cts} +4 -4
  112. package/dist/loadable-hooks/useSkipLimitPagination.d.cts.map +1 -0
  113. package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -1
  114. package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -1
  115. package/dist/react/{FragmentReader.js → FragmentReader.cjs} +1 -1
  116. package/dist/react/{FragmentReader.d.ts → FragmentReader.d.cts} +5 -5
  117. package/dist/react/FragmentReader.d.cts.map +1 -0
  118. package/dist/react/FragmentReader.d.mts.map +1 -1
  119. package/dist/react/{FragmentRenderer.js → FragmentRenderer.cjs} +2 -2
  120. package/dist/react/{FragmentRenderer.d.ts → FragmentRenderer.d.cts} +5 -5
  121. package/dist/react/FragmentRenderer.d.cts.map +1 -0
  122. package/dist/react/FragmentRenderer.d.mts.map +1 -1
  123. package/dist/react/{IsographEnvironmentProvider.js → IsographEnvironmentProvider.cjs} +1 -1
  124. package/dist/react/{IsographEnvironmentProvider.d.ts → IsographEnvironmentProvider.d.cts} +2 -2
  125. package/dist/react/IsographEnvironmentProvider.d.cts.map +1 -0
  126. package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -1
  127. package/dist/react/{LoadableFieldReader.js → LoadableFieldReader.cjs} +3 -3
  128. package/dist/react/{LoadableFieldReader.d.ts → LoadableFieldReader.d.cts} +5 -5
  129. package/dist/react/LoadableFieldReader.d.cts.map +1 -0
  130. package/dist/react/LoadableFieldReader.d.mts.map +1 -1
  131. package/dist/react/{LoadableFieldRenderer.js → LoadableFieldRenderer.cjs} +3 -3
  132. package/dist/react/{LoadableFieldRenderer.d.ts → LoadableFieldRenderer.d.cts} +5 -5
  133. package/dist/react/LoadableFieldRenderer.d.cts.map +1 -0
  134. package/dist/react/LoadableFieldRenderer.d.mts.map +1 -1
  135. package/dist/react/{RenderAfterCommit__DO_NOT_USE.js → RenderAfterCommit__DO_NOT_USE.cjs} +1 -2
  136. package/dist/react/{RenderAfterCommit__DO_NOT_USE.d.ts → RenderAfterCommit__DO_NOT_USE.d.cts} +1 -2
  137. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.cts.map +1 -0
  138. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +0 -1
  139. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -1
  140. package/dist/react/{createIsographEnvironment.js → createIsographEnvironment.cjs} +2 -2
  141. package/dist/react/{createIsographEnvironment.d.ts → createIsographEnvironment.d.cts} +3 -3
  142. package/dist/react/createIsographEnvironment.d.cts.map +1 -0
  143. package/dist/react/createIsographEnvironment.d.mts +0 -1
  144. package/dist/react/createIsographEnvironment.d.mts.map +1 -1
  145. package/dist/react/{maybeUnwrapNetworkRequest.js → maybeUnwrapNetworkRequest.cjs} +1 -1
  146. package/dist/react/{useImperativeReference.js → useImperativeReference.cjs} +7 -8
  147. package/dist/react/{useImperativeReference.d.ts → useImperativeReference.d.cts} +5 -6
  148. package/dist/react/useImperativeReference.d.cts.map +1 -0
  149. package/dist/react/useImperativeReference.d.mts +0 -1
  150. package/dist/react/useImperativeReference.d.mts.map +1 -1
  151. package/dist/react/useLazyReference.cjs +18 -0
  152. package/dist/react/{useLazyReference.d.ts → useLazyReference.d.cts} +5 -6
  153. package/dist/react/useLazyReference.d.cts.map +1 -0
  154. package/dist/react/useLazyReference.d.mts +0 -1
  155. package/dist/react/useLazyReference.d.mts.map +1 -1
  156. package/dist/react/{useReadAndSubscribe.js → useReadAndSubscribe.cjs} +9 -10
  157. package/dist/react/{useReadAndSubscribe.d.ts → useReadAndSubscribe.d.cts} +4 -5
  158. package/dist/react/useReadAndSubscribe.d.cts.map +1 -0
  159. package/dist/react/useReadAndSubscribe.d.mts +0 -1
  160. package/dist/react/useReadAndSubscribe.d.mts.map +1 -1
  161. package/dist/react/useReadAndSubscribe.mjs.map +1 -1
  162. package/dist/react/{useRerenderOnChange.js → useRerenderOnChange.cjs} +3 -4
  163. package/dist/react/{useRerenderOnChange.d.ts → useRerenderOnChange.d.cts} +4 -4
  164. package/dist/react/useRerenderOnChange.d.cts.map +1 -0
  165. package/dist/react/useRerenderOnChange.d.mts.map +1 -1
  166. package/dist/react/{useResult.js → useResult.cjs} +7 -7
  167. package/dist/react/{useResult.d.ts → useResult.d.cts} +3 -3
  168. package/dist/react/useResult.d.cts.map +1 -0
  169. package/dist/react/useResult.d.mts.map +1 -1
  170. package/package.json +9 -9
  171. package/src/core/IsographEnvironment.ts +8 -4
  172. package/src/core/cache.ts +38 -25
  173. package/src/core/getOrCreateCacheForArtifact.ts +2 -2
  174. package/src/core/writeData.ts +4 -4
  175. package/src/tests/garbageCollection.test.ts +11 -11
  176. package/src/tests/normalizeData.test.ts +11 -3
  177. package/src/tests/optimisticProxy.test.ts +23 -23
  178. package/src/tests/startUpdate.test.ts +2 -2
  179. package/tsconfig.json +5 -4
  180. package/tsconfig.package.json +8 -0
  181. package/tsconfig.package.tsbuildinfo +1 -0
  182. package/tsconfig.test.json +12 -0
  183. package/tsconfig.test.tsbuildinfo +1 -0
  184. package/tsdown.config.ts +8 -0
  185. package/vitest.config.ts +1 -1
  186. package/dist/core/FragmentReference.d.ts.map +0 -1
  187. package/dist/core/IsographEnvironment.d.ts.map +0 -1
  188. package/dist/core/PromiseWrapper.d.ts.map +0 -1
  189. package/dist/core/brand.d.ts.map +0 -1
  190. package/dist/core/cache.d.ts +0 -37
  191. package/dist/core/cache.d.ts.map +0 -1
  192. package/dist/core/check.d.ts.map +0 -1
  193. package/dist/core/entrypoint.d.ts.map +0 -1
  194. package/dist/core/garbageCollection.d.ts.map +0 -1
  195. package/dist/core/logging.d.ts.map +0 -1
  196. package/dist/core/makeNetworkRequest.d.ts.map +0 -1
  197. package/dist/core/optimisticProxy.d.ts.map +0 -1
  198. package/dist/core/read.d.ts.map +0 -1
  199. package/dist/core/reader.d.ts.map +0 -1
  200. package/dist/core/subscribe.d.ts.map +0 -1
  201. package/dist/core/util.d.ts.map +0 -1
  202. package/dist/core/writeData.d.ts.map +0 -1
  203. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +0 -1
  204. package/dist/loadable-hooks/useClientSideDefer.js +0 -15
  205. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +0 -1
  206. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +0 -1
  207. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +0 -1
  208. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +0 -1
  209. package/dist/react/FragmentReader.d.ts.map +0 -1
  210. package/dist/react/FragmentRenderer.d.ts.map +0 -1
  211. package/dist/react/IsographEnvironmentProvider.d.ts.map +0 -1
  212. package/dist/react/LoadableFieldReader.d.ts.map +0 -1
  213. package/dist/react/LoadableFieldRenderer.d.ts.map +0 -1
  214. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +0 -1
  215. package/dist/react/createIsographEnvironment.d.ts.map +0 -1
  216. package/dist/react/useImperativeReference.d.ts.map +0 -1
  217. package/dist/react/useLazyReference.d.ts.map +0 -1
  218. package/dist/react/useLazyReference.js +0 -19
  219. package/dist/react/useReadAndSubscribe.d.ts.map +0 -1
  220. package/dist/react/useRerenderOnChange.d.ts.map +0 -1
  221. package/dist/react/useResult.d.ts.map +0 -1
  222. package/src/tests/tsconfig.json +0 -21
  223. package/tsconfig.pkg.json +0 -16
  224. /package/dist/core/{PromiseWrapper.js → PromiseWrapper.cjs} +0 -0
  225. /package/dist/core/{entrypoint.js → entrypoint.cjs} +0 -0
  226. /package/dist/core/{logging.js → logging.cjs} +0 -0
  227. /package/dist/core/{util.js → util.cjs} +0 -0
  228. /package/dist/loadable-hooks/{useImperativeExposedMutationField.js → useImperativeExposedMutationField.cjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"read.mjs","names":["mutableEncounteredRecords: EncounteredIds","target: { [index: string]: any }","ast","root","variables","networkRequest","entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' }","result: Variables","childVars: Writable<Variables>","data","readData","link","result"],"sources":["../../src/core/read.ts"],"sourcesContent":["import type { CleanupFn, ItemCleanupPair } from '@isograph/disposable-types';\nimport {\n getParentRecordKey,\n insertEmptySetIfMissing,\n onNextChangeToRecord,\n type EncounteredIds,\n} from './cache';\nimport type { FetchOptions } from './check';\nimport { getOrCreateCachedComponent } from './componentCache';\nimport type {\n IsographEntrypoint,\n ReaderWithRefetchQueries,\n RefetchQueryNormalizationArtifactWrapper,\n} from './entrypoint';\nimport type {\n ExtractData,\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type {\n DataTypeValueScalar,\n IsographEnvironment,\n} from './IsographEnvironment';\nimport {\n assertLink,\n getOrLoadIsographArtifact,\n getOrLoadReaderWithRefetchQueries,\n type StoreLink,\n type StoreRecord,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { maybeMakeNetworkRequest } from './makeNetworkRequest';\nimport { getStoreRecordProxy } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport {\n getPromiseState,\n NOT_SET,\n readPromise,\n wrapPromise,\n wrapResolvedValue,\n} from './PromiseWrapper';\nimport type {\n LoadablySelectedField,\n ReaderAst,\n ReaderClientPointer,\n ReaderImperativelyLoadedField,\n ReaderLinkedField,\n ReaderNonLoadableResolverField,\n ReaderScalarField,\n} from './reader';\nimport { getOrCreateCachedStartUpdate } from './startUpdate';\nimport type { Arguments } from './util';\n\nexport type WithEncounteredRecords<T> = {\n readonly encounteredRecords: EncounteredIds;\n readonly item: ExtractData<T>;\n};\n\nexport function readButDoNotEvaluate<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n): WithEncounteredRecords<TReadFromStore> {\n const mutableEncounteredRecords: EncounteredIds = new Map();\n\n // TODO consider moving this to the outside\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const response = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n fragmentReference.root,\n fragmentReference.variables ?? {},\n readerWithRefetchQueries.nestedRefetchQueries,\n fragmentReference.networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n logMessage(environment, () => ({\n kind: 'DoneReading',\n response,\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n root: fragmentReference.root,\n }));\n\n if (response.kind === 'MissingData') {\n // There are two cases here that we care about:\n // 1. the network request is in flight, we haven't suspended on it, and we want\n // to throw if it errors out. So, networkRequestOptions.suspendIfInFlight === false\n // and networkRequestOptions.throwOnNetworkError === true.\n // 2. everything else\n //\n // In the first case, we cannot simply throw onNextChange, because if the network\n // response errors out, we will not update the store, so the onNextChange promise\n // will not resolve.\n if (\n !networkRequestOptions.suspendIfInFlight &&\n networkRequestOptions.throwOnNetworkError\n ) {\n // What are we doing here? If the network response has errored out, we can do\n // two things: throw a rejected promise, or throw an error. Both work identically\n // in the browser. However, during initial SSR on NextJS, throwing a rejected\n // promise results in an infinite loop (including re-issuing the query until the\n // process OOM's or something.) Hence, we throw an error.\n\n const result = fragmentReference.networkRequest.result;\n if (result !== NOT_SET && result.kind === 'Err') {\n throw new Error('NetworkError', { cause: result.error });\n }\n\n throw new Promise((resolve, reject) => {\n onNextChangeToRecord(environment, response.recordLink).then(resolve);\n fragmentReference.networkRequest.promise.catch(reject);\n });\n }\n throw onNextChangeToRecord(environment, response.recordLink);\n } else {\n return {\n encounteredRecords: mutableEncounteredRecords,\n item: response.data,\n };\n }\n}\n\nexport type ReadDataResultSuccess<Data> = {\n readonly kind: 'Success';\n readonly data: Data;\n};\n\nexport type ReadDataResult<Data> =\n | ReadDataResultSuccess<Data>\n | {\n readonly kind: 'MissingData';\n readonly reason: string;\n readonly nestedReason?: ReadDataResult<unknown>;\n readonly recordLink: StoreLink;\n };\n\nfunction readData<TReadFromStore>(\n environment: IsographEnvironment,\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<ExtractData<TReadFromStore>> {\n const encounteredIds = insertEmptySetIfMissing(\n mutableEncounteredRecords,\n root.__typename,\n );\n encounteredIds.add(root.__link);\n let storeRecord = getStoreRecordProxy(environment.store, root);\n if (storeRecord === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No record for root ' + root.__link,\n recordLink: root,\n };\n }\n\n if (storeRecord == null) {\n return {\n kind: 'Success',\n data: null as any,\n };\n }\n\n let target: { [index: string]: any } = {};\n\n for (const field of ast) {\n switch (field.kind) {\n case 'Scalar': {\n const data = readScalarFieldData(field, storeRecord, root, variables);\n\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'Link': {\n target[field.alias] = root;\n break;\n }\n case 'Linked': {\n const data = readLinkedFieldData(\n environment,\n field,\n storeRecord,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n (ast, root) =>\n readData(\n environment,\n ast,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n ),\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'ImperativelyLoadedField': {\n const data = readImperativelyLoadedField(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'Resolver': {\n const data = readResolverFieldData(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'LoadablySelectedField': {\n const data = readLoadablySelectedFieldData(\n environment,\n field,\n root,\n variables,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n }\n }\n return {\n kind: 'Success',\n data: target as any,\n };\n}\n\nexport function readLoadablySelectedFieldData(\n environment: IsographEnvironment,\n field: LoadablySelectedField,\n root: StoreLink,\n variables: Variables,\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n environment,\n field.refetchReaderAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n // TODO we should use the reader AST for this\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(\n localVariables,\n field.queryArguments,\n variables,\n );\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.name +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n () => {\n const fragmentReferenceAndDisposeFromEntrypoint = (\n entrypoint: IsographEntrypoint<any, any, any, {}>,\n ): [FragmentReference<any, any>, CleanupFn] => {\n const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n );\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName,\n readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n };\n\n if (field.entrypoint.kind === 'Entrypoint') {\n return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);\n } else {\n const isographArtifactPromiseWrapper = getOrLoadIsographArtifact(\n environment,\n field.entrypoint.typeAndField,\n field.entrypoint.loader,\n );\n const state = getPromiseState(isographArtifactPromiseWrapper);\n if (state.kind === 'Ok') {\n return fragmentReferenceAndDisposeFromEntrypoint(state.value);\n } else {\n // Promise is pending or thrown\n\n let entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' } = { kind: 'EntrypointNotLoaded' };\n\n const readerWithRefetchQueries = wrapPromise(\n isographArtifactPromiseWrapper.promise.then(\n (entrypoint) =>\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n ).readerWithRefetchQueries.promise,\n ),\n );\n const networkRequest = wrapPromise(\n isographArtifactPromiseWrapper.promise.then((entrypoint) => {\n if (entrypointLoaderState.kind === 'EntrypointNotLoaded') {\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n entrypointLoaderState = {\n kind: 'NetworkRequestStarted',\n disposeNetworkRequest,\n };\n return networkRequest.promise;\n }\n }),\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName: field.name,\n readerArtifactKind: field.entrypoint.readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n\n return [\n fragmentReference,\n () => {\n if (entrypointLoaderState.kind === 'NetworkRequestStarted') {\n entrypointLoaderState.disposeNetworkRequest();\n }\n entrypointLoaderState = { kind: 'Disposed' };\n },\n ];\n }\n }\n },\n ];\n },\n };\n}\n\nfunction filterVariables(\n variables: Variables,\n allowedVariables: string[],\n): Variables {\n const result: Variables = {};\n for (const key of allowedVariables) {\n // @ts-expect-error\n result[key] = variables[key];\n }\n return result;\n}\n\nfunction generateChildVariableMap(\n variables: Variables,\n fieldArguments: Arguments | null,\n): Variables {\n if (fieldArguments == null) {\n return {};\n }\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const childVars: Writable<Variables> = {};\n for (const [name, value] of fieldArguments) {\n if (value.kind === 'Object') {\n childVars[name] = generateChildVariableMap(variables, value.value);\n } else if (value.kind === 'Variable') {\n const variable = variables[value.name];\n // Variable could be null if it was not provided but has a default case,\n // so we allow the loop to continue rather than throwing an error.\n if (variable != null) {\n childVars[name] = variable;\n }\n } else {\n childVars[name] = value.value;\n }\n }\n return childVars;\n}\n\nfunction writeQueryArgsToVariables(\n targetVariables: any,\n queryArgs: Arguments | null,\n variables: Variables,\n) {\n if (queryArgs == null) {\n return;\n }\n for (const [name, argType] of queryArgs) {\n switch (argType.kind) {\n case 'Object': {\n writeQueryArgsToVariables(\n (targetVariables[name] = {}),\n argType.value,\n variables,\n );\n break;\n }\n case 'Variable': {\n targetVariables[name] = variables[argType.name];\n break;\n }\n case 'Enum': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'Literal': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'String': {\n targetVariables[name] = argType.value;\n break;\n }\n }\n }\n}\n\nexport function readResolverFieldData(\n environment: IsographEnvironment,\n field: ReaderNonLoadableResolverField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const usedRefetchQueries = field.usedRefetchQueries;\n const resolverRefetchQueries = usedRefetchQueries.map((index) => {\n const resolverRefetchQuery = nestedRefetchQueries[index];\n if (resolverRefetchQuery == null) {\n throw new Error(\n 'resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.',\n );\n }\n return resolverRefetchQuery;\n });\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: field.readerArtifact(),\n nestedRefetchQueries: resolverRefetchQueries,\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,\n root,\n variables: generateChildVariableMap(variables, field.arguments),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n switch (readerWithRefetchQueries.readerArtifact.kind) {\n case 'EagerReaderArtifact': {\n const data = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n root,\n generateChildVariableMap(variables, field.arguments),\n resolverRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n const firstParameter = {\n data: data.data,\n parameters: variables,\n startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n )\n : undefined,\n };\n return {\n kind: 'Success',\n data: readerWithRefetchQueries.readerArtifact.resolver(firstParameter),\n };\n }\n case 'ComponentReaderArtifact': {\n return {\n kind: 'Success',\n data: getOrCreateCachedComponent(\n environment,\n fragment,\n networkRequestOptions,\n ),\n };\n }\n }\n}\n\nexport function readScalarFieldData(\n field: ReaderScalarField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n): ReadDataResult<DataTypeValueScalar> {\n const storeRecordName = getParentRecordKey(field, variables);\n const value = storeRecord[storeRecordName];\n // TODO consider making scalars into discriminated unions. This probably has\n // to happen for when we handle errors.\n if (value === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No value for ' + storeRecordName + ' on root ' + root.__link,\n recordLink: root,\n };\n }\n return { kind: 'Success', data: value };\n}\n\nexport function readLinkedFieldData(\n environment: IsographEnvironment,\n field: ReaderLinkedField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const storeRecordName = getParentRecordKey(field, variables);\n let value = storeRecord[storeRecordName];\n\n if (field.condition != null) {\n const condition = field.condition();\n const data = readData(condition.readerAst, root);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: condition,\n // TODO this is wrong\n // should map field.condition.usedRefetchQueries\n // but it doesn't exist\n nestedRefetchQueries: [],\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n root,\n fieldName: condition.fieldName,\n readerArtifactKind: condition.kind,\n variables: generateChildVariableMap(\n variables,\n // TODO this is wrong\n // should use field.arguments\n // but it doesn't exist\n [],\n ),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n const link = condition.resolver({\n data: data.data,\n parameters: {},\n ...(condition.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n ),\n }\n : undefined),\n });\n value = link;\n }\n\n if (Array.isArray(value)) {\n const results = [];\n for (const item of value) {\n const link = assertLink(item);\n if (link === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n recordLink: root,\n };\n } else if (link == null) {\n results.push(null);\n continue;\n }\n\n if (isClientPointer(field)) {\n const result = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n continue;\n }\n\n const result = readData(field.selections, link);\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n }\n return {\n kind: 'Success',\n data: results,\n };\n }\n let link = assertLink(value);\n\n if (link === undefined) {\n // TODO make this configurable, and also generated and derived from the schema\n const missingFieldHandler = environment.missingFieldHandler;\n\n const altLink = missingFieldHandler?.(\n storeRecord,\n root,\n field.fieldName,\n field.arguments,\n variables,\n );\n logMessage(environment, () => ({\n kind: 'MissingFieldHandlerCalled',\n root,\n storeRecord,\n fieldName: field.fieldName,\n arguments: field.arguments,\n variables,\n }));\n\n if (altLink === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(value),\n recordLink: root,\n };\n } else {\n link = altLink;\n }\n } else if (link == null) {\n return {\n kind: 'Success',\n data: null,\n };\n }\n\n if (isClientPointer(field)) {\n const data = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n }\n const data = readData(field.selections, link);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n}\n\nfunction isClientPointer(\n field: ReaderLinkedField,\n): field is ReaderClientPointer {\n return field.refetchQueryIndex != null;\n}\n\nexport function readClientPointerData(\n environment: IsographEnvironment,\n field: ReaderClientPointer,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n [\n {\n kind: 'Scalar',\n isFallible: false,\n fieldName: 'id',\n alias: null,\n arguments: null,\n isUpdatable: false,\n },\n ],\n root,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(localVariables, field.arguments, variables);\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.fieldName +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n (): ItemCleanupPair<FragmentReference<any, any>> | undefined => {\n const variables = includeReadOutData(\n filterVariables({ ...args, ...localVariables }, allowedVariables),\n refetchReaderParams.data,\n );\n\n const readerWithRefetchQueries = wrapResolvedValue({\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: {\n kind: 'EagerReaderArtifact',\n fieldName: field.fieldName,\n readerAst: field.selections,\n resolver: ({ data }: { data: any }) => data,\n hasUpdatable: false,\n },\n nestedRefetchQueries,\n } as const);\n\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n refetchQueryArtifact,\n variables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n fieldName: field.fieldName,\n readerArtifactKind: 'EagerReaderArtifact',\n readerWithRefetchQueries: readerWithRefetchQueries,\n root,\n variables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n },\n ];\n },\n };\n}\n\nexport type NetworkRequestReaderOptions = {\n suspendIfInFlight: boolean;\n throwOnNetworkError: boolean;\n};\n\nexport function getNetworkRequestOptionsWithDefaults(\n networkRequestOptions?: Partial<NetworkRequestReaderOptions> | void,\n): NetworkRequestReaderOptions {\n return {\n suspendIfInFlight: networkRequestOptions?.suspendIfInFlight ?? false,\n throwOnNetworkError: networkRequestOptions?.throwOnNetworkError ?? true,\n };\n}\n\n// TODO use a description of the params for this?\n// TODO call stableStringifyArgs on the variable values, as well.\n// This doesn't matter for now, since we are just using primitive values\n// in the demo.\nfunction stableStringifyArgs(args: object) {\n const keys = Object.keys(args);\n keys.sort();\n let s = '';\n for (const key of keys) {\n // @ts-expect-error\n s += `${key}=${JSON.stringify(args[key])};`;\n }\n return s;\n}\n\nexport function readImperativelyLoadedField(\n environment: IsographEnvironment,\n field: ReaderImperativelyLoadedField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n // First, we read the data using the refetch reader AST (i.e. read out the\n // id field).\n const data = readData(\n environment,\n field.refetchReaderArtifact.readerAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n // This is probably indicative of the fact that we are doing redundant checks\n // on the status of this network request...\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n } else {\n const { refetchQueryIndex } = field;\n const refetchQuery = nestedRefetchQueries[refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'Refetch query not found. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n // Second, we allow the user to call the resolver, which will ultimately\n // use the resolver reader AST to get the resolver parameters.\n return {\n kind: 'Success',\n data: (args: any) => [\n // Stable id\n root.__typename + ':' + root.__link + '__' + field.name,\n // Fetcher\n field.refetchReaderArtifact.resolver(\n environment,\n refetchQueryArtifact,\n data.data,\n filterVariables({ ...args, ...variables }, allowedVariables),\n root,\n // TODO these params should be removed\n null,\n [],\n ),\n ],\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"read.mjs","names":[],"sources":["../../src/core/read.ts"],"sourcesContent":["import type { CleanupFn, ItemCleanupPair } from '@isograph/disposable-types';\nimport {\n getParentRecordKey,\n insertEmptySetIfMissing,\n onNextChangeToRecord,\n type EncounteredIds,\n} from './cache';\nimport type { FetchOptions } from './check';\nimport { getOrCreateCachedComponent } from './componentCache';\nimport type {\n IsographEntrypoint,\n ReaderWithRefetchQueries,\n RefetchQueryNormalizationArtifactWrapper,\n} from './entrypoint';\nimport type {\n ExtractData,\n FragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type {\n DataTypeValueScalar,\n IsographEnvironment,\n} from './IsographEnvironment';\nimport {\n assertLink,\n getOrLoadIsographArtifact,\n getOrLoadReaderWithRefetchQueries,\n type StoreLink,\n type StoreRecord,\n} from './IsographEnvironment';\nimport { logMessage } from './logging';\nimport { maybeMakeNetworkRequest } from './makeNetworkRequest';\nimport { getStoreRecordProxy } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport {\n getPromiseState,\n NOT_SET,\n readPromise,\n wrapPromise,\n wrapResolvedValue,\n} from './PromiseWrapper';\nimport type {\n LoadablySelectedField,\n ReaderAst,\n ReaderClientPointer,\n ReaderImperativelyLoadedField,\n ReaderLinkedField,\n ReaderNonLoadableResolverField,\n ReaderScalarField,\n} from './reader';\nimport { getOrCreateCachedStartUpdate } from './startUpdate';\nimport type { Arguments } from './util';\n\nexport type WithEncounteredRecords<T> = {\n readonly encounteredRecords: EncounteredIds;\n readonly item: ExtractData<T>;\n};\n\nexport function readButDoNotEvaluate<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, unknown>,\n networkRequestOptions: NetworkRequestReaderOptions,\n): WithEncounteredRecords<TReadFromStore> {\n const mutableEncounteredRecords: EncounteredIds = new Map();\n\n // TODO consider moving this to the outside\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const response = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n fragmentReference.root,\n fragmentReference.variables ?? {},\n readerWithRefetchQueries.nestedRefetchQueries,\n fragmentReference.networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n logMessage(environment, () => ({\n kind: 'DoneReading',\n response,\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n root: fragmentReference.root,\n }));\n\n if (response.kind === 'MissingData') {\n // There are two cases here that we care about:\n // 1. the network request is in flight, we haven't suspended on it, and we want\n // to throw if it errors out. So, networkRequestOptions.suspendIfInFlight === false\n // and networkRequestOptions.throwOnNetworkError === true.\n // 2. everything else\n //\n // In the first case, we cannot simply throw onNextChange, because if the network\n // response errors out, we will not update the store, so the onNextChange promise\n // will not resolve.\n if (\n !networkRequestOptions.suspendIfInFlight &&\n networkRequestOptions.throwOnNetworkError\n ) {\n // What are we doing here? If the network response has errored out, we can do\n // two things: throw a rejected promise, or throw an error. Both work identically\n // in the browser. However, during initial SSR on NextJS, throwing a rejected\n // promise results in an infinite loop (including re-issuing the query until the\n // process OOM's or something.) Hence, we throw an error.\n\n const result = fragmentReference.networkRequest.result;\n if (result !== NOT_SET && result.kind === 'Err') {\n throw new Error('NetworkError', { cause: result.error });\n }\n\n throw new Promise((resolve, reject) => {\n onNextChangeToRecord(environment, response.recordLink).then(resolve);\n fragmentReference.networkRequest.promise.catch(reject);\n });\n }\n throw onNextChangeToRecord(environment, response.recordLink);\n } else {\n return {\n encounteredRecords: mutableEncounteredRecords,\n item: response.data,\n };\n }\n}\n\nexport type ReadDataResultSuccess<Data> = {\n readonly kind: 'Success';\n readonly data: Data;\n};\n\nexport type ReadDataResult<Data> =\n | ReadDataResultSuccess<Data>\n | {\n readonly kind: 'MissingData';\n readonly reason: string;\n readonly nestedReason?: ReadDataResult<unknown>;\n readonly recordLink: StoreLink;\n };\n\nfunction readData<TReadFromStore>(\n environment: IsographEnvironment,\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<ExtractData<TReadFromStore>> {\n const encounteredIds = insertEmptySetIfMissing(\n mutableEncounteredRecords,\n root.__typename,\n );\n encounteredIds.add(root.__link);\n let storeRecord = getStoreRecordProxy(environment.store, root);\n if (storeRecord === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No record for root ' + root.__link,\n recordLink: root,\n };\n }\n\n if (storeRecord == null) {\n return {\n kind: 'Success',\n data: null as any,\n };\n }\n\n let target: { [index: string]: any } = {};\n\n for (const field of ast) {\n switch (field.kind) {\n case 'Scalar': {\n const data = readScalarFieldData(field, storeRecord, root, variables);\n\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'Link': {\n target[field.alias] = root;\n break;\n }\n case 'Linked': {\n const data = readLinkedFieldData(\n environment,\n field,\n storeRecord,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n (ast, root) =>\n readData(\n environment,\n ast,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n ),\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias ?? field.fieldName] = data.data;\n break;\n }\n case 'ImperativelyLoadedField': {\n const data = readImperativelyLoadedField(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'Resolver': {\n const data = readResolverFieldData(\n environment,\n field,\n root,\n variables,\n nestedRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n case 'LoadablySelectedField': {\n const data = readLoadablySelectedFieldData(\n environment,\n field,\n root,\n variables,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return data;\n }\n target[field.alias] = data.data;\n break;\n }\n }\n }\n return {\n kind: 'Success',\n data: target as any,\n };\n}\n\nexport function readLoadablySelectedFieldData(\n environment: IsographEnvironment,\n field: LoadablySelectedField,\n root: StoreLink,\n variables: Variables,\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n environment,\n field.refetchReaderAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n // TODO we should use the reader AST for this\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(\n localVariables,\n field.queryArguments,\n variables,\n );\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.name +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n () => {\n const fragmentReferenceAndDisposeFromEntrypoint = (\n entrypoint: IsographEntrypoint<any, any, any, {}>,\n ): [FragmentReference<any, any>, CleanupFn] => {\n const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n );\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName,\n readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n };\n\n if (field.entrypoint.kind === 'Entrypoint') {\n return fragmentReferenceAndDisposeFromEntrypoint(field.entrypoint);\n } else {\n const isographArtifactPromiseWrapper = getOrLoadIsographArtifact(\n environment,\n field.entrypoint.typeAndField,\n field.entrypoint.loader,\n );\n const state = getPromiseState(isographArtifactPromiseWrapper);\n if (state.kind === 'Ok') {\n return fragmentReferenceAndDisposeFromEntrypoint(state.value);\n } else {\n // Promise is pending or thrown\n\n let entrypointLoaderState:\n | {\n kind: 'EntrypointNotLoaded';\n }\n | {\n kind: 'NetworkRequestStarted';\n disposeNetworkRequest: CleanupFn;\n }\n | { kind: 'Disposed' } = { kind: 'EntrypointNotLoaded' };\n\n const readerWithRefetchQueries = wrapPromise(\n isographArtifactPromiseWrapper.promise.then(\n (entrypoint) =>\n getOrLoadReaderWithRefetchQueries(\n environment,\n entrypoint.readerWithRefetchQueries,\n ).readerWithRefetchQueries.promise,\n ),\n );\n const networkRequest = wrapPromise(\n isographArtifactPromiseWrapper.promise.then((entrypoint) => {\n if (entrypointLoaderState.kind === 'EntrypointNotLoaded') {\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n entrypoint,\n localVariables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n entrypointLoaderState = {\n kind: 'NetworkRequestStarted',\n disposeNetworkRequest,\n };\n return networkRequest.promise;\n }\n }),\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n readerWithRefetchQueries,\n fieldName: field.name,\n readerArtifactKind: field.entrypoint.readerArtifactKind,\n // TODO localVariables is not guaranteed to have an id field\n root,\n variables: localVariables,\n networkRequest,\n };\n\n return [\n fragmentReference,\n () => {\n if (entrypointLoaderState.kind === 'NetworkRequestStarted') {\n entrypointLoaderState.disposeNetworkRequest();\n }\n entrypointLoaderState = { kind: 'Disposed' };\n },\n ];\n }\n }\n },\n ];\n },\n };\n}\n\nfunction filterVariables(\n variables: Variables,\n allowedVariables: string[],\n): Variables {\n const result: Variables = {};\n for (const key of allowedVariables) {\n // @ts-expect-error\n result[key] = variables[key];\n }\n return result;\n}\n\nfunction generateChildVariableMap(\n variables: Variables,\n fieldArguments: Arguments | null,\n): Variables {\n if (fieldArguments == null) {\n return {};\n }\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const childVars: Writable<Variables> = {};\n for (const [name, value] of fieldArguments) {\n if (value.kind === 'Object') {\n childVars[name] = generateChildVariableMap(variables, value.value);\n } else if (value.kind === 'Variable') {\n const variable = variables[value.name];\n // Variable could be null if it was not provided but has a default case,\n // so we allow the loop to continue rather than throwing an error.\n if (variable != null) {\n childVars[name] = variable;\n }\n } else {\n childVars[name] = value.value;\n }\n }\n return childVars;\n}\n\nfunction writeQueryArgsToVariables(\n targetVariables: any,\n queryArgs: Arguments | null,\n variables: Variables,\n) {\n if (queryArgs == null) {\n return;\n }\n for (const [name, argType] of queryArgs) {\n switch (argType.kind) {\n case 'Object': {\n writeQueryArgsToVariables(\n (targetVariables[name] = {}),\n argType.value,\n variables,\n );\n break;\n }\n case 'Variable': {\n targetVariables[name] = variables[argType.name];\n break;\n }\n case 'Enum': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'Literal': {\n targetVariables[name] = argType.value;\n break;\n }\n case 'String': {\n targetVariables[name] = argType.value;\n break;\n }\n }\n }\n}\n\nexport function readResolverFieldData(\n environment: IsographEnvironment,\n field: ReaderNonLoadableResolverField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n const usedRefetchQueries = field.usedRefetchQueries;\n const resolverRefetchQueries = usedRefetchQueries.map((index) => {\n const resolverRefetchQuery = nestedRefetchQueries[index];\n if (resolverRefetchQuery == null) {\n throw new Error(\n 'resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.',\n );\n }\n return resolverRefetchQuery;\n });\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: field.readerArtifact(),\n nestedRefetchQueries: resolverRefetchQueries,\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,\n root,\n variables: generateChildVariableMap(variables, field.arguments),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n switch (readerWithRefetchQueries.readerArtifact.kind) {\n case 'EagerReaderArtifact': {\n const data = readData(\n environment,\n readerWithRefetchQueries.readerArtifact.readerAst,\n root,\n generateChildVariableMap(variables, field.arguments),\n resolverRefetchQueries,\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n const firstParameter = {\n data: data.data,\n parameters: variables,\n startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n )\n : undefined,\n };\n return {\n kind: 'Success',\n data: readerWithRefetchQueries.readerArtifact.resolver(firstParameter),\n };\n }\n case 'ComponentReaderArtifact': {\n return {\n kind: 'Success',\n data: getOrCreateCachedComponent(\n environment,\n fragment,\n networkRequestOptions,\n ),\n };\n }\n }\n}\n\nexport function readScalarFieldData(\n field: ReaderScalarField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n): ReadDataResult<DataTypeValueScalar> {\n const storeRecordName = getParentRecordKey(field, variables);\n const value = storeRecord[storeRecordName];\n // TODO consider making scalars into discriminated unions. This probably has\n // to happen for when we handle errors.\n if (value === undefined) {\n return {\n kind: 'MissingData',\n reason: 'No value for ' + storeRecordName + ' on root ' + root.__link,\n recordLink: root,\n };\n }\n return { kind: 'Success', data: value };\n}\n\nexport function readLinkedFieldData(\n environment: IsographEnvironment,\n field: ReaderLinkedField,\n storeRecord: StoreRecord,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const storeRecordName = getParentRecordKey(field, variables);\n let value = storeRecord[storeRecordName];\n\n if (field.condition != null) {\n const condition = field.condition();\n const data = readData(condition.readerAst, root);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n\n const readerWithRefetchQueries = {\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: condition,\n // TODO this is wrong\n // should map field.condition.usedRefetchQueries\n // but it doesn't exist\n nestedRefetchQueries: [],\n } satisfies ReaderWithRefetchQueries<any, any>;\n\n const fragment = {\n kind: 'FragmentReference',\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n root,\n fieldName: condition.fieldName,\n readerArtifactKind: condition.kind,\n variables: generateChildVariableMap(\n variables,\n // TODO this is wrong\n // should use field.arguments\n // but it doesn't exist\n [],\n ),\n networkRequest,\n } satisfies FragmentReference<any, any>;\n\n const link = condition.resolver({\n data: data.data,\n parameters: {},\n ...(condition.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragment,\n networkRequestOptions,\n ),\n }\n : undefined),\n });\n value = link;\n }\n\n if (Array.isArray(value)) {\n const results = [];\n for (const item of value) {\n const link = assertLink(item);\n if (link === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n recordLink: root,\n };\n } else if (link == null) {\n results.push(null);\n continue;\n }\n\n if (isClientPointer(field)) {\n const result = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n continue;\n }\n\n const result = readData(field.selections, link);\n if (result.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(item),\n nestedReason: result,\n recordLink: result.recordLink,\n };\n }\n results.push(result.data);\n }\n return {\n kind: 'Success',\n data: results,\n };\n }\n let link = assertLink(value);\n\n if (link === undefined) {\n // TODO make this configurable, and also generated and derived from the schema\n const missingFieldHandler = environment.missingFieldHandler;\n\n const altLink = missingFieldHandler?.(\n storeRecord,\n root,\n field.fieldName,\n field.arguments,\n variables,\n );\n logMessage(environment, () => ({\n kind: 'MissingFieldHandlerCalled',\n root,\n storeRecord,\n fieldName: field.fieldName,\n arguments: field.arguments,\n variables,\n }));\n\n if (altLink === undefined) {\n return {\n kind: 'MissingData',\n reason:\n 'No link for ' +\n storeRecordName +\n ' on root ' +\n root.__link +\n '. Link is ' +\n JSON.stringify(value),\n recordLink: root,\n };\n } else {\n link = altLink;\n }\n } else if (link == null) {\n return {\n kind: 'Success',\n data: null,\n };\n }\n\n if (isClientPointer(field)) {\n const data = readClientPointerData(\n environment,\n field,\n link,\n variables,\n nestedRefetchQueries,\n readData,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason:\n 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n }\n const data = readData(field.selections, link);\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n }\n return data;\n}\n\nfunction isClientPointer(\n field: ReaderLinkedField,\n): field is ReaderClientPointer {\n return field.refetchQueryIndex != null;\n}\n\nexport function readClientPointerData(\n environment: IsographEnvironment,\n field: ReaderClientPointer,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n readData: <TReadFromStore>(\n ast: ReaderAst<TReadFromStore>,\n root: StoreLink,\n ) => ReadDataResult<object>,\n): ReadDataResult<unknown> {\n const refetchReaderParams = readData(\n [\n {\n kind: 'Scalar',\n isFallible: false,\n fieldName: 'id',\n alias: null,\n arguments: null,\n isUpdatable: false,\n },\n ],\n root,\n );\n\n if (refetchReaderParams.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: refetchReaderParams,\n recordLink: refetchReaderParams.recordLink,\n };\n }\n\n const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n return {\n kind: 'Success',\n data: (\n args: any,\n // TODO get the associated type for FetchOptions from the loadably selected field\n fetchOptions?: FetchOptions<any, never>,\n ) => {\n const includeReadOutData = (variables: any, readOutData: any) => {\n variables.id = readOutData.id;\n return variables;\n };\n const localVariables = includeReadOutData(\n args ?? {},\n refetchReaderParams.data,\n );\n writeQueryArgsToVariables(localVariables, field.arguments, variables);\n\n return [\n // Stable id\n root.__typename +\n ':' +\n root.__link +\n '/' +\n field.fieldName +\n '/' +\n stableStringifyArgs(localVariables),\n // Fetcher\n (): ItemCleanupPair<FragmentReference<any, any>> | undefined => {\n const variables = includeReadOutData(\n filterVariables({ ...args, ...localVariables }, allowedVariables),\n refetchReaderParams.data,\n );\n\n const readerWithRefetchQueries = wrapResolvedValue({\n kind: 'ReaderWithRefetchQueries',\n readerArtifact: {\n kind: 'EagerReaderArtifact',\n fieldName: field.fieldName,\n readerAst: field.selections,\n resolver: ({ data }: { data: any }) => data,\n hasUpdatable: false,\n },\n nestedRefetchQueries,\n } as const);\n\n const [networkRequest, disposeNetworkRequest] =\n maybeMakeNetworkRequest(\n environment,\n refetchQueryArtifact,\n variables,\n readerWithRefetchQueries,\n fetchOptions ?? null,\n );\n\n const fragmentReference: FragmentReference<any, any> = {\n kind: 'FragmentReference',\n fieldName: field.fieldName,\n readerArtifactKind: 'EagerReaderArtifact',\n readerWithRefetchQueries: readerWithRefetchQueries,\n root,\n variables,\n networkRequest,\n };\n return [fragmentReference, disposeNetworkRequest];\n },\n ];\n },\n };\n}\n\nexport type NetworkRequestReaderOptions = {\n suspendIfInFlight: boolean;\n throwOnNetworkError: boolean;\n};\n\nexport function getNetworkRequestOptionsWithDefaults(\n networkRequestOptions?: Partial<NetworkRequestReaderOptions> | void,\n): NetworkRequestReaderOptions {\n return {\n suspendIfInFlight: networkRequestOptions?.suspendIfInFlight ?? false,\n throwOnNetworkError: networkRequestOptions?.throwOnNetworkError ?? true,\n };\n}\n\n// TODO use a description of the params for this?\n// TODO call stableStringifyArgs on the variable values, as well.\n// This doesn't matter for now, since we are just using primitive values\n// in the demo.\nfunction stableStringifyArgs(args: object) {\n const keys = Object.keys(args);\n keys.sort();\n let s = '';\n for (const key of keys) {\n // @ts-expect-error\n s += `${key}=${JSON.stringify(args[key])};`;\n }\n return s;\n}\n\nexport function readImperativelyLoadedField(\n environment: IsographEnvironment,\n field: ReaderImperativelyLoadedField,\n root: StoreLink,\n variables: Variables,\n nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],\n networkRequest: PromiseWrapper<void, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n mutableEncounteredRecords: EncounteredIds,\n): ReadDataResult<unknown> {\n // First, we read the data using the refetch reader AST (i.e. read out the\n // id field).\n const data = readData(\n environment,\n field.refetchReaderArtifact.readerAst,\n root,\n variables,\n // Refetch fields just read the id, and don't need refetch query artifacts\n [],\n // This is probably indicative of the fact that we are doing redundant checks\n // on the status of this network request...\n networkRequest,\n networkRequestOptions,\n mutableEncounteredRecords,\n );\n if (data.kind === 'MissingData') {\n return {\n kind: 'MissingData',\n reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,\n nestedReason: data,\n recordLink: data.recordLink,\n };\n } else {\n const { refetchQueryIndex } = field;\n const refetchQuery = nestedRefetchQueries[refetchQueryIndex];\n if (refetchQuery == null) {\n throw new Error(\n 'Refetch query not found. This is indicative of a bug in Isograph.',\n );\n }\n const refetchQueryArtifact = refetchQuery.artifact;\n const allowedVariables = refetchQuery.allowedVariables;\n\n // Second, we allow the user to call the resolver, which will ultimately\n // use the resolver reader AST to get the resolver parameters.\n return {\n kind: 'Success',\n data: (args: any) => [\n // Stable id\n root.__typename + ':' + root.__link + '__' + field.name,\n // Fetcher\n field.refetchReaderArtifact.resolver(\n environment,\n refetchQueryArtifact,\n data.data,\n filterVariables({ ...args, ...variables }, allowedVariables),\n root,\n // TODO these params should be removed\n null,\n [],\n ),\n ],\n };\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { FetchOptions } from "./check.js";
2
- import { Arguments } from "./util.js";
3
- import { ComponentOrFieldName, IsographEnvironment, StoreLink } from "./IsographEnvironment.js";
4
- import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.js";
5
- import { IsographEntrypoint, IsographEntrypointLoader, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from "./entrypoint.js";
1
+ import { FetchOptions } from "./check.cjs";
2
+ import { Arguments } from "./util.cjs";
3
+ import { ComponentOrFieldName, IsographEnvironment, StoreLink } from "./IsographEnvironment.cjs";
4
+ import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.cjs";
5
+ import { IsographEntrypoint, IsographEntrypointLoader, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from "./entrypoint.cjs";
6
6
  import { Factory } from "@isograph/disposable-types";
7
7
 
8
8
  //#region src/core/reader.d.ts
@@ -88,4 +88,4 @@ type StableId = string;
88
88
  type LoadableField<TReadFromStore extends UnknownTReadFromStore, TResult, TArgs = ExtractParameters<TReadFromStore>> = (args: TArgs | void, fetchOptions: FetchOptions<TResult, never>) => [StableId, Factory<FragmentReference<TReadFromStore, TResult>>];
89
89
  //#endregion
90
90
  export { ComponentReaderArtifact, EagerReaderArtifact, LoadableField, LoadablySelectedField, ReaderAst, ReaderAstNode, ReaderImperativelyLoadedField, ReaderLinkField, ReaderLinkedField, ReaderNonLoadableResolverField, ReaderScalarField, RefetchReaderArtifact, ResolverFirstParameter, StableId, StartUpdate, TopLevelReaderArtifact };
91
- //# sourceMappingURL=reader.d.ts.map
91
+ //# sourceMappingURL=reader.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.cts","names":[],"sources":["../../src/core/reader.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reader.d.mts","names":[],"sources":["../../src/core/reader.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.d.mts","names":[],"sources":["../../src/core/reader.ts"],"mappings":";;;;;;;;KAiBY,sBAAA,wBACa,qBAAA,6CAEC,MAAA,CAAO,WAAA,YAE7B,mBAAA,CAAoB,cAAA,EAAgB,iBAAA,IACpC,uBAAA,CAAwB,cAAA,EAAgB,eAAA;AAAA,KAEhC,mBAAA,wBACa,qBAAA;EAAA,SAGd,IAAA;EAAA,SACA,SAAA,EAAW,oBAAA;EAAA,SACX,SAAA,EAAW,SAAA,CAAU,cAAA;EAAA,SACrB,QAAA,GACP,IAAA,EAAM,sBAAA,CAAuB,cAAA,MAC1B,iBAAA;EAAA,SACI,YAAA;AAAA;AAAA,KAGC,uBAAA,wBACa,qBAAA,0BACC,MAAA,oBAA0B,MAAA,CAAO,WAAA;EAAA,SAEhD,IAAA;EAAA,SACA,SAAA,EAAW,oBAAA;EAAA,SACX,SAAA,EAAW,SAAA,CAAU,cAAA;EAAA,SACrB,QAAA,GACP,IAAA,EAAM,sBAAA,CAAuB,cAAA,GAC7B,YAAA,EAAc,eAAA,KACX,KAAA,CAAM,SAAA;EAAA,SACF,YAAA;AAAA;AAAA,KAGC,sBAAA,wBACa,qBAAA,IACrB,IAAA,CAAK,cAAA;AAAA,KAEG,WAAA,mBACV,OAAA,GAAU,iBAAA;EAAqB,aAAA,EAAe,aAAA;AAAA;AAAA,KAGpC,qBAAA;EAAA,SACD,IAAA;EAAA,SACA,SAAA,EAAW,SAAA;EAAA,SACX,QAAA,GACP,WAAA,EAAa,mBAAA,EACb,QAAA,EAAU,iCAAA,EAEV,SAAA,OAEA,iBAAA,OACA,QAAA,EAAU,SAAA,EACV,cAAA,EAAgB,sBAAA,wBAEhB,oBAAA,EAAsB,wCAAA;AAAA;AAAA,KAId,aAAA,GACR,iBAAA,GACA,iBAAA,GACA,8BAAA,GACA,6BAAA,GACA,qBAAA,GACA,eAAA;AAAA,KAGQ,SAAA,mBAA4B,aAAA,CAAc,aAAA;AAAA,KAE1C,iBAAA;EAAA,SACD,IAAA;EAAA,SACA,UAAA;EAAA,SACA,SAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA,EAAW,SAAA;EAAA,SACX,WAAA;AAAA;AAAA,KAGC,eAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGC,iBAAA;EAAA,SACD,IAAA;EAAA,SACA,UAAA;EAAA,SACA,SAAA;EAAA,SACA,KAAA;EAAA,SACA,UAAA,EAAY,SAAA;EAAA,SACZ,SAAA,EAAW,SAAA;EAAA,SACX,SAAA,SACE,mBAAA;IACH,IAAA;IAAW,UAAA;IAAiB,WAAA,GAAc,WAAA;EAAA,GAC5C,SAAA,WAAoB,SAAA,aAAsB,SAAA;EAAA,SAGvC,WAAA;EAlFsB;;;EAAA,SAsFtB,iBAAA;AAAA;AAAA,KAOC,8BAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;EAAA,SAEA,cAAA,QAAsB,sBAAA;EAAA,SACtB,SAAA,EAAW,SAAA;EAAA,SACX,kBAAA;AAAA;AAAA,KAGC,6BAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;EAAA,SACA,qBAAA,EAAuB,qBAAA;EAAA,SACvB,iBAAA;EAAA,SACA,IAAA;AAAA;AAAA,KAGC,qBAAA;EAAA,SACD,IAAA;EAAA,SACA,KAAA;EAAA,SAKA,IAAA;EAAA,SACA,cAAA,EAAgB,SAAA;EAAA,SAChB,gBAAA,EAAkB,SAAA;EAAA,SAGlB,UAAA,EACL,kBAAA,uBACA,wBAAA;AAAA;AAAA,KAGM,QAAA;AAAA,KAUA,aAAA,wBACa,qBAAA,mBAEf,iBAAA,CAAkB,cAAA,MAE1B,IAAA,EAAM,KAAA,SAKN,YAAA,EAAc,YAAA,CAAa,OAAA,cACvB,QAAA,EAAU,OAAA,CAAQ,iBAAA,CAAkB,cAAA,EAAgB,OAAA"}
@@ -1,11 +1,11 @@
1
- const require_PromiseWrapper = require('./PromiseWrapper.js');
2
- const require_IsographEnvironment = require('./IsographEnvironment.js');
3
- const require_logging = require('./logging.js');
4
- const require_FragmentReference = require('./FragmentReference.js');
5
- const require_read = require('./read.js');
6
- const require_subscribe = require('./subscribe.js');
7
- const require_optimisticProxy = require('./optimisticProxy.js');
8
- const require_cache = require('./cache.js');
1
+ const require_PromiseWrapper = require('./PromiseWrapper.cjs');
2
+ const require_IsographEnvironment = require('./IsographEnvironment.cjs');
3
+ const require_logging = require('./logging.cjs');
4
+ const require_FragmentReference = require('./FragmentReference.cjs');
5
+ const require_read = require('./read.cjs');
6
+ const require_subscribe = require('./subscribe.cjs');
7
+ const require_optimisticProxy = require('./optimisticProxy.cjs');
8
+ const require_cache = require('./cache.cjs');
9
9
 
10
10
  //#region src/core/startUpdate.ts
11
11
  function getOrCreateCachedStartUpdate(environment, fragmentReference, networkRequestOptions) {
@@ -69,8 +69,8 @@ function readUpdatableData(environment, storeLayer, ast, root, variables, nested
69
69
  if (data.kind === "MissingData") throw new Error(data.reason);
70
70
  return data.data;
71
71
  }, field.isUpdatable ? (newValue) => {
72
- const storeRecord$1 = require_optimisticProxy.getOrInsertRecord(storeLayer.data, root);
73
- storeRecord$1[storeRecordName] = newValue;
72
+ const storeRecord = require_optimisticProxy.getOrInsertRecord(storeLayer.data, root);
73
+ storeRecord[storeRecordName] = newValue;
74
74
  require_cache.insertEmptySetIfMissing(mutableUpdatedIds, root.__typename).add(root.__link);
75
75
  } : void 0);
76
76
  break;
@@ -78,13 +78,13 @@ function readUpdatableData(environment, storeLayer, ast, root, variables, nested
78
78
  case "Linked": {
79
79
  const storeRecordName = require_cache.getParentRecordKey(field, variables);
80
80
  defineCachedProperty(target, field.alias ?? field.fieldName, mutableState, () => {
81
- const data = require_read.readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast$1, root$1) => readUpdatableData(environment, storeLayer, ast$1, root$1, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableState, mutableUpdatedIds));
81
+ const data = require_read.readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast, root) => readUpdatableData(environment, storeLayer, ast, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableState, mutableUpdatedIds));
82
82
  if (data.kind === "MissingData") throw new Error(data.reason);
83
83
  return data.data;
84
84
  }, "isUpdatable" in field && field.isUpdatable ? (newValue) => {
85
- const storeRecord$1 = require_optimisticProxy.getOrInsertRecord(storeLayer.data, root);
86
- if (Array.isArray(newValue)) storeRecord$1[storeRecordName] = newValue.map((node) => require_IsographEnvironment.assertLink(node?.__link));
87
- else storeRecord$1[storeRecordName] = require_IsographEnvironment.assertLink(newValue?.__link);
85
+ const storeRecord = require_optimisticProxy.getOrInsertRecord(storeLayer.data, root);
86
+ if (Array.isArray(newValue)) storeRecord[storeRecordName] = newValue.map((node) => require_IsographEnvironment.assertLink(node?.__link));
87
+ else storeRecord[storeRecordName] = require_IsographEnvironment.assertLink(newValue?.__link);
88
88
  require_cache.insertEmptySetIfMissing(mutableUpdatedIds, root.__typename).add(root.__link);
89
89
  } : void 0);
90
90
  break;
@@ -69,8 +69,8 @@ function readUpdatableData(environment, storeLayer, ast, root, variables, nested
69
69
  if (data.kind === "MissingData") throw new Error(data.reason);
70
70
  return data.data;
71
71
  }, field.isUpdatable ? (newValue) => {
72
- const storeRecord$1 = getOrInsertRecord(storeLayer.data, root);
73
- storeRecord$1[storeRecordName] = newValue;
72
+ const storeRecord = getOrInsertRecord(storeLayer.data, root);
73
+ storeRecord[storeRecordName] = newValue;
74
74
  insertEmptySetIfMissing(mutableUpdatedIds, root.__typename).add(root.__link);
75
75
  } : void 0);
76
76
  break;
@@ -78,13 +78,13 @@ function readUpdatableData(environment, storeLayer, ast, root, variables, nested
78
78
  case "Linked": {
79
79
  const storeRecordName = getParentRecordKey(field, variables);
80
80
  defineCachedProperty(target, field.alias ?? field.fieldName, mutableState, () => {
81
- const data = readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast$1, root$1) => readUpdatableData(environment, storeLayer, ast$1, root$1, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableState, mutableUpdatedIds));
81
+ const data = readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, (ast, root) => readUpdatableData(environment, storeLayer, ast, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableState, mutableUpdatedIds));
82
82
  if (data.kind === "MissingData") throw new Error(data.reason);
83
83
  return data.data;
84
84
  }, "isUpdatable" in field && field.isUpdatable ? (newValue) => {
85
- const storeRecord$1 = getOrInsertRecord(storeLayer.data, root);
86
- if (Array.isArray(newValue)) storeRecord$1[storeRecordName] = newValue.map((node) => assertLink(node?.__link));
87
- else storeRecord$1[storeRecordName] = assertLink(newValue?.__link);
85
+ const storeRecord = getOrInsertRecord(storeLayer.data, root);
86
+ if (Array.isArray(newValue)) storeRecord[storeRecordName] = newValue.map((node) => assertLink(node?.__link));
87
+ else storeRecord[storeRecordName] = assertLink(newValue?.__link);
88
88
  insertEmptySetIfMissing(mutableUpdatedIds, root.__typename).add(root.__link);
89
89
  } : void 0);
90
90
  break;
@@ -1 +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":"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"}
1
+ {"version":3,"file":"startUpdate.mjs","names":[],"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":"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"}
@@ -1,6 +1,6 @@
1
- const require_logging = require('./logging.js');
2
- const require_areEqualWithDeepComparison = require('./areEqualWithDeepComparison.js');
3
- const require_read = require('./read.js');
1
+ const require_logging = require('./logging.cjs');
2
+ const require_areEqualWithDeepComparison = require('./areEqualWithDeepComparison.cjs');
3
+ const require_read = require('./read.cjs');
4
4
 
5
5
  //#region src/core/subscribe.ts
6
6
  function subscribe(environment, encounteredDataAndRecords, fragmentReference, callback, readerAst) {
@@ -1,12 +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";
1
+ import { ReaderAst } from "./reader.cjs";
2
+ import { WithEncounteredRecords } from "./read.cjs";
3
+ import { IsographEnvironment } from "./IsographEnvironment.cjs";
4
+ import { FragmentReference, UnknownTReadFromStore } from "./FragmentReference.cjs";
5
+ import { EncounteredIds } from "./cache.cjs";
6
6
 
7
7
  //#region src/core/subscribe.d.ts
8
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
9
  declare function callSubscriptions(environment: IsographEnvironment, recordsEncounteredWhenNormalizing: EncounteredIds): void;
10
10
  //#endregion
11
11
  export { callSubscriptions, subscribe };
12
- //# sourceMappingURL=subscribe.d.ts.map
12
+ //# sourceMappingURL=subscribe.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.d.cts","names":[],"sources":["../../src/core/subscribe.ts"],"mappings":";;;;;;;iBAcgB,SAAA,wBAAiC,qBAAA,CAAA,CAC/C,WAAA,EAAa,mBAAA,EACb,yBAAA,EAA2B,sBAAA,CAAuB,cAAA,GAClD,iBAAA,EAAmB,iBAAA,CAAkB,cAAA,QACrC,QAAA,GACE,4BAAA,EAA8B,sBAAA,CAAuB,cAAA,YAEvD,SAAA,EAAW,SAAA,CAAU,cAAA;AAAA,iBAyCP,iBAAA,CACd,WAAA,EAAa,mBAAA,EACb,iCAAA,EAAmC,cAAA"}
@@ -1 +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"}
1
+ {"version":3,"file":"subscribe.d.mts","names":[],"sources":["../../src/core/subscribe.ts"],"mappings":";;;;;;;iBAcgB,SAAA,wBAAiC,qBAAA,CAAA,CAC/C,WAAA,EAAa,mBAAA,EACb,yBAAA,EAA2B,sBAAA,CAAuB,cAAA,GAClD,iBAAA,EAAmB,iBAAA,CAAkB,cAAA,QACrC,QAAA,GACE,4BAAA,EAA8B,sBAAA,CAAuB,cAAA,YAEvD,SAAA,EAAW,SAAA,CAAU,cAAA;AAAA,iBAyCP,iBAAA,CACd,WAAA,EAAa,mBAAA,EACb,iCAAA,EAAmC,cAAA"}
@@ -1 +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"}
1
+ {"version":3,"file":"subscribe.mjs","names":[],"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,MAAM,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"}
@@ -24,4 +24,4 @@ type ArgumentValue = {
24
24
  };
25
25
  //#endregion
26
26
  export { Argument, ArgumentName, ArgumentValue, Arguments, CombineWithIntrinsicAttributes, ExtractSecondParam };
27
- //# sourceMappingURL=util.d.ts.map
27
+ //# sourceMappingURL=util.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.cts","names":[],"sources":["../../src/core/util.ts"],"mappings":";;;KAEY,kBAAA,YAA8B,IAAA,OAAW,IAAA,iBACnD,CAAA,WAAW,IAAA,OAAW,IAAA,qBAAwB,CAAA;AAAA,KACpC,8BAAA,MACV,CAAA,SAAU,MAAA,CAAO,WAAA,WACb,KAAA,CAAM,GAAA,CAAI,mBAAA,GACV,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,mBAAA;AAAA,KAER,SAAA,GAAY,QAAA;AAAA,KACZ,QAAA,IAAY,YAAA,EAAc,aAAA;AAAA,KAC1B,YAAA;AAAA,KACA,aAAA;EAAA,SAEG,IAAA;EAAA,SACA,IAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA,EAAO,SAAA;AAAA"}
@@ -1 +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,QAAI;EACZ,SAAA,KAAA,EAAY,MAAA;AACxB,CAAA,GAAY;;;;;kBAmBU"}
1
+ {"version":3,"file":"util.d.mts","names":[],"sources":["../../src/core/util.ts"],"mappings":";;;KAEY,kBAAA,YAA8B,IAAA,OAAW,IAAA,iBACnD,CAAA,WAAW,IAAA,OAAW,IAAA,qBAAwB,CAAA;AAAA,KACpC,8BAAA,MACV,CAAA,SAAU,MAAA,CAAO,WAAA,WACb,KAAA,CAAM,GAAA,CAAI,mBAAA,GACV,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,mBAAA;AAAA,KAER,SAAA,GAAY,QAAA;AAAA,KACZ,QAAA,IAAY,YAAA,EAAc,aAAA;AAAA,KAC1B,YAAA;AAAA,KACA,aAAA;EAAA,SAEG,IAAA;EAAA,SACA,IAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,KAAA,EAAO,SAAA;AAAA"}
@@ -1 +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"}
1
+ {"version":3,"file":"util.mjs","names":[],"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,MAAM,SAAmC,EAAE;AAC3C,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAE/B,QAAO,KAAK,MAAM,WAAW,MAAM,KAAK,IAAI;AAE9C,QAAO"}
@@ -1,9 +1,9 @@
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');
1
+ const require_IsographEnvironment = require('./IsographEnvironment.cjs');
2
+ const require_logging = require('./logging.cjs');
3
+ const require_makeNetworkRequest = require('./makeNetworkRequest.cjs');
4
+ const require_subscribe = require('./subscribe.cjs');
5
+ const require_optimisticProxy = require('./optimisticProxy.cjs');
6
+ const require_cache = require('./cache.cjs');
7
7
 
8
8
  //#region src/core/writeData.ts
9
9
  function writeData(environment, entrypoint, data, variables) {
@@ -1,11 +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";
1
+ import { IsographEnvironment } from "./IsographEnvironment.cjs";
2
+ import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.cjs";
3
+ import { NetworkResponseObject } from "./cache.cjs";
4
+ import { IsographEntrypoint, NormalizationAst } from "./entrypoint.cjs";
5
+ import { ItemCleanupPair } from "@isograph/disposable-types";
6
6
 
7
7
  //#region src/core/writeData.d.ts
8
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
9
  //#endregion
10
10
  export { writeData };
11
- //# sourceMappingURL=writeData.d.ts.map
11
+ //# sourceMappingURL=writeData.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeData.d.cts","names":[],"sources":["../../src/core/writeData.ts"],"mappings":";;;;;;;iBAsBgB,SAAA,wBACS,qBAAA,2BACE,qBAAA,oBAAA,CAGzB,WAAA,EAAa,mBAAA,EACb,UAAA,EAAY,kBAAA,CACV,cAAA,EACA,iBAAA,EACA,gBAAA,EACA,gBAAA,GAEF,IAAA,EAAM,gBAAA,EACN,SAAA,EAAW,iBAAA,CAAkB,cAAA,IAC5B,eAAA,CAAgB,iBAAA,CAAkB,cAAA,EAAgB,iBAAA"}
@@ -2,7 +2,7 @@ import { IsographEnvironment } from "./IsographEnvironment.mjs";
2
2
  import { ExtractParameters, FragmentReference, UnknownTReadFromStore } from "./FragmentReference.mjs";
3
3
  import { NetworkResponseObject } from "./cache.mjs";
4
4
  import { IsographEntrypoint, NormalizationAst } from "./entrypoint.mjs";
5
- import { ItemCleanupPair } from "@isograph/isograph-disposable-types/dist";
5
+ import { ItemCleanupPair } from "@isograph/disposable-types";
6
6
 
7
7
  //#region src/core/writeData.d.ts
8
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>>;