@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":"useReadAndSubscribe.mjs","names":["componentFunction: IsographComponentFunction"],"sources":["../../src/react/useReadAndSubscribe.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n type ExtractData,\n type FragmentReference,\n stableIdForFragmentReference,\n type UnknownTReadFromStore,\n} from '../core/FragmentReference';\nimport type { IsographComponentFunction } from '../core/IsographEnvironment';\nimport { logMessage } from '../core/logging';\nimport { readPromise } from '../core/PromiseWrapper';\nimport {\n type NetworkRequestReaderOptions,\n readButDoNotEvaluate,\n type WithEncounteredRecords,\n} from '../core/read';\nimport type { ReaderAst } from '../core/reader';\nimport { subscribe } from '../core/subscribe';\nimport { useIsographEnvironment } from './IsographEnvironmentProvider';\nimport { maybeUnwrapNetworkRequest } from './maybeUnwrapNetworkRequest';\nimport { useRerenderOnChange } from './useRerenderOnChange';\n\n/**\n * Read the data from a fragment reference and subscribe to updates.\n */\nexport function useReadAndSubscribe<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n fragmentReference: FragmentReference<TReadFromStore, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readerAst: ReaderAst<TReadFromStore>,\n): ExtractData<TReadFromStore> {\n const environment = useIsographEnvironment();\n const [readOutDataAndRecords, setReadOutDataAndRecords] = useState(() =>\n readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions),\n );\n useRerenderOnChange(\n readOutDataAndRecords,\n fragmentReference,\n setReadOutDataAndRecords,\n readerAst,\n );\n return readOutDataAndRecords.item;\n}\n\nexport function useSubscribeToMultiple<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n items: ReadonlyArray<{\n records: WithEncounteredRecords<TReadFromStore>;\n callback: (updatedRecords: WithEncounteredRecords<TReadFromStore>) => void;\n fragmentReference: FragmentReference<TReadFromStore, any>;\n readerAst: ReaderAst<TReadFromStore>;\n }>,\n) {\n const environment = useIsographEnvironment();\n useEffect(\n () => {\n const cleanupFns = items.map(\n ({ records, callback, fragmentReference, readerAst }) => {\n return subscribe(\n environment,\n records,\n fragmentReference,\n callback,\n readerAst,\n );\n },\n );\n return () => {\n cleanupFns.forEach((loader) => {\n loader();\n });\n };\n },\n // By analogy to useReadAndSubscribe, we can have an empty dependency array?\n // Maybe callback has to be depended on. I don't know!\n // TODO find out\n [\n items\n .map(({ fragmentReference }) => {\n stableIdForFragmentReference(fragmentReference);\n })\n .join('.'),\n ],\n );\n}\n\nexport const componentFunction: IsographComponentFunction = (\n environment,\n fragmentReference,\n networkRequestOptions,\n startUpdate,\n) => {\n function Component(additionalRuntimeProps: { [key: string]: any }) {\n maybeUnwrapNetworkRequest(\n fragmentReference.networkRequest,\n networkRequestOptions,\n );\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const data = useReadAndSubscribe(\n fragmentReference,\n networkRequestOptions,\n readerWithRefetchQueries.readerArtifact.readerAst,\n );\n\n logMessage(environment, () => ({\n kind: 'ComponentRerendered',\n componentName: fragmentReference.fieldName,\n rootLink: fragmentReference.root,\n }));\n\n return readerWithRefetchQueries.readerArtifact.resolver(\n // @ts-expect-error\n {\n data,\n parameters: fragmentReference.variables,\n startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? startUpdate\n : undefined,\n },\n additionalRuntimeProps,\n );\n }\n const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;\n Component.displayName = `${fragmentReference.fieldName} ${idString} @component`;\n return Component;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwBA,SAAgB,oBAGd,mBACA,uBACA,WAC6B;CAC7B,MAAM,cAAc,wBAAwB;CAC5C,MAAM,CAAC,uBAAuB,4BAA4B,eACxD,qBAAqB,aAAa,mBAAmB,sBAAsB,CAC5E;AACD,qBACE,uBACA,mBACA,0BACA,UACD;AACD,QAAO,sBAAsB;;AAG/B,SAAgB,uBAGd,OAMA;CACA,MAAM,cAAc,wBAAwB;AAC5C,iBACQ;EACJ,MAAM,aAAa,MAAM,KACtB,EAAE,SAAS,UAAU,mBAAmB,gBAAgB;AACvD,UAAO,UACL,aACA,SACA,mBACA,UACA,UACD;IAEJ;AACD,eAAa;AACX,cAAW,SAAS,WAAW;AAC7B,YAAQ;KACR;;IAMN,CACE,MACG,KAAK,EAAE,wBAAwB;AAC9B,+BAA6B,kBAAkB;GAC/C,CACD,KAAK,IAAI,CACb,CACF;;AAGH,MAAaA,qBACX,aACA,mBACA,uBACA,gBACG;CACH,SAAS,UAAU,wBAAgD;AACjE,4BACE,kBAAkB,gBAClB,sBACD;EACD,MAAM,2BAA2B,YAC/B,kBAAkB,yBACnB;EAED,MAAM,OAAO,oBACX,mBACA,uBACA,yBAAyB,eAAe,UACzC;AAED,aAAW,oBAAoB;GAC7B,MAAM;GACN,eAAe,kBAAkB;GACjC,UAAU,kBAAkB;GAC7B,EAAE;AAEH,SAAO,yBAAyB,eAAe,SAE7C;GACE;GACA,YAAY,kBAAkB;GAC9B,aAAa,yBAAyB,eAAe,eACjD,cACA;GACL,EACD,uBACD;;CAEH,MAAM,WAAW,UAAU,kBAAkB,KAAK,WAAW,QAAQ,kBAAkB,KAAK,OAAO;AACnG,WAAU,cAAc,GAAG,kBAAkB,UAAU,GAAG,SAAS;AACnE,QAAO"}
1
+ {"version":3,"file":"useReadAndSubscribe.mjs","names":[],"sources":["../../src/react/useReadAndSubscribe.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n type ExtractData,\n type FragmentReference,\n stableIdForFragmentReference,\n type UnknownTReadFromStore,\n} from '../core/FragmentReference';\nimport type { IsographComponentFunction } from '../core/IsographEnvironment';\nimport { logMessage } from '../core/logging';\nimport { readPromise } from '../core/PromiseWrapper';\nimport {\n type NetworkRequestReaderOptions,\n readButDoNotEvaluate,\n type WithEncounteredRecords,\n} from '../core/read';\nimport type { ReaderAst } from '../core/reader';\nimport { subscribe } from '../core/subscribe';\nimport { useIsographEnvironment } from './IsographEnvironmentProvider';\nimport { maybeUnwrapNetworkRequest } from './maybeUnwrapNetworkRequest';\nimport { useRerenderOnChange } from './useRerenderOnChange';\n\n/**\n * Read the data from a fragment reference and subscribe to updates.\n */\nexport function useReadAndSubscribe<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n fragmentReference: FragmentReference<TReadFromStore, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readerAst: ReaderAst<TReadFromStore>,\n): ExtractData<TReadFromStore> {\n const environment = useIsographEnvironment();\n const [readOutDataAndRecords, setReadOutDataAndRecords] = useState(() =>\n readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions),\n );\n useRerenderOnChange(\n readOutDataAndRecords,\n fragmentReference,\n setReadOutDataAndRecords,\n readerAst,\n );\n return readOutDataAndRecords.item;\n}\n\nexport function useSubscribeToMultiple<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n items: ReadonlyArray<{\n records: WithEncounteredRecords<TReadFromStore>;\n callback: (updatedRecords: WithEncounteredRecords<TReadFromStore>) => void;\n fragmentReference: FragmentReference<TReadFromStore, any>;\n readerAst: ReaderAst<TReadFromStore>;\n }>,\n) {\n const environment = useIsographEnvironment();\n useEffect(\n () => {\n const cleanupFns = items.map(\n ({ records, callback, fragmentReference, readerAst }) => {\n return subscribe(\n environment,\n records,\n fragmentReference,\n callback,\n readerAst,\n );\n },\n );\n return () => {\n cleanupFns.forEach((loader) => {\n loader();\n });\n };\n },\n // By analogy to useReadAndSubscribe, we can have an empty dependency array?\n // Maybe callback has to be depended on. I don't know!\n // TODO find out\n [\n items\n .map(({ fragmentReference }) => {\n stableIdForFragmentReference(fragmentReference);\n })\n .join('.'),\n ],\n );\n}\n\nexport const componentFunction: IsographComponentFunction = (\n environment,\n fragmentReference,\n networkRequestOptions,\n startUpdate,\n) => {\n function Component(additionalRuntimeProps: { [key: string]: any }) {\n maybeUnwrapNetworkRequest(\n fragmentReference.networkRequest,\n networkRequestOptions,\n );\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const data = useReadAndSubscribe(\n fragmentReference,\n networkRequestOptions,\n readerWithRefetchQueries.readerArtifact.readerAst,\n );\n\n logMessage(environment, () => ({\n kind: 'ComponentRerendered',\n componentName: fragmentReference.fieldName,\n rootLink: fragmentReference.root,\n }));\n\n return readerWithRefetchQueries.readerArtifact.resolver(\n // @ts-expect-error\n {\n data,\n parameters: fragmentReference.variables,\n startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? startUpdate\n : undefined,\n },\n additionalRuntimeProps,\n );\n }\n const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;\n Component.displayName = `${fragmentReference.fieldName} ${idString} @component`;\n return Component;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwBA,SAAgB,oBAGd,mBACA,uBACA,WAC6B;CAC7B,MAAM,cAAc,wBAAwB;CAC5C,MAAM,CAAC,uBAAuB,4BAA4B,eACxD,qBAAqB,aAAa,mBAAmB,sBAAsB,CAC5E;AACD,qBACE,uBACA,mBACA,0BACA,UACD;AACD,QAAO,sBAAsB;;AAG/B,SAAgB,uBAGd,OAMA;CACA,MAAM,cAAc,wBAAwB;AAC5C,iBACQ;EACJ,MAAM,aAAa,MAAM,KACtB,EAAE,SAAS,UAAU,mBAAmB,gBAAgB;AACvD,UAAO,UACL,aACA,SACA,mBACA,UACA,UACD;IAEJ;AACD,eAAa;AACX,cAAW,SAAS,WAAW;AAC7B,YAAQ;KACR;;IAMN,CACE,MACG,KAAK,EAAE,wBAAwB;AAC9B,+BAA6B,kBAAkB;GAC/C,CACD,KAAK,IAAI,CACb,CACF;;AAGH,MAAa,qBACX,aACA,mBACA,uBACA,gBACG;CACH,SAAS,UAAU,wBAAgD;AACjE,4BACE,kBAAkB,gBAClB,sBACD;EACD,MAAM,2BAA2B,YAC/B,kBAAkB,yBACnB;EAED,MAAM,OAAO,oBACX,mBACA,uBACA,yBAAyB,eAAe,UACzC;AAED,aAAW,oBAAoB;GAC7B,MAAM;GACN,eAAe,kBAAkB;GACjC,UAAU,kBAAkB;GAC7B,EAAE;AAEH,SAAO,yBAAyB,eAAe,SAE7C;GACE;GACA,YAAY,kBAAkB;GAC9B,aAAa,yBAAyB,eAAe,eACjD,cACA;GACL,EACD,uBACD;;CAEH,MAAM,WAAW,UAAU,kBAAkB,KAAK,WAAW,QAAQ,kBAAkB,KAAK,OAAO;AACnG,WAAU,cAAc,GAAG,kBAAkB,UAAU,GAAG,SAAS;AACnE,QAAO"}
@@ -1,8 +1,7 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
2
- const require_subscribe = require('../core/subscribe.js');
3
- const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.js');
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_subscribe = require('../core/subscribe.cjs');
3
+ const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.cjs');
4
4
  let react = require("react");
5
- react = require_rolldown_runtime.__toESM(react);
6
5
 
7
6
  //#region src/react/useRerenderOnChange.ts
8
7
  function useRerenderOnChange(encounteredDataAndRecords, fragmentReference, setEncounteredDataAndRecords, readerAst) {
@@ -1,6 +1,6 @@
1
- import { ReaderAst } from "../core/reader.js";
2
- import { WithEncounteredRecords } from "../core/read.js";
3
- import { FragmentReference } from "../core/FragmentReference.js";
1
+ import { ReaderAst } from "../core/reader.cjs";
2
+ import { WithEncounteredRecords } from "../core/read.cjs";
3
+ import { FragmentReference } from "../core/FragmentReference.cjs";
4
4
 
5
5
  //#region src/react/useRerenderOnChange.d.ts
6
6
  declare function useRerenderOnChange<TReadFromStore extends {
@@ -9,4 +9,4 @@ declare function useRerenderOnChange<TReadFromStore extends {
9
9
  }>(encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<any, any>, setEncounteredDataAndRecords: (data: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): void;
10
10
  //#endregion
11
11
  export { useRerenderOnChange };
12
- //# sourceMappingURL=useRerenderOnChange.d.ts.map
12
+ //# sourceMappingURL=useRerenderOnChange.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRerenderOnChange.d.cts","names":[],"sources":["../../src/react/useRerenderOnChange.ts"],"mappings":";;;;;iBASgB,mBAAA;EACW,UAAA;EAAoB,IAAA;AAAA,EAAA,CAE7C,yBAAA,EAA2B,sBAAA,CAAuB,cAAA,GAClD,iBAAA,EAAmB,iBAAA,YACnB,4BAAA,GACE,IAAA,EAAM,sBAAA,CAAuB,cAAA,YAE/B,SAAA,EAAW,SAAA,CAAU,cAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRerenderOnChange.d.mts","names":[],"sources":["../../src/react/useRerenderOnChange.ts"],"sourcesContent":[],"mappings":";;;;;iBASgB;;EAAA,IAAA,EAAA,MAAA;CAGoC,CAAA,CAAA,yBAAA,EAAvB,sBAAuB,CAAA,cAAA,CAAA,EAAA,iBAAA,EAC/B,iBAD+B,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,4BAAA,EAAA,CAAA,IAAA,EAG1C,sBAH0C,CAGnB,cAHmB,CAAA,EAAA,GAAA,IAAA,EAAA,SAAA,EAKvC,SALuC,CAK7B,cAL6B,CAAA,CAAA,EAAA,IAAA"}
1
+ {"version":3,"file":"useRerenderOnChange.d.mts","names":[],"sources":["../../src/react/useRerenderOnChange.ts"],"mappings":";;;;;iBASgB,mBAAA;EACW,UAAA;EAAoB,IAAA;AAAA,EAAA,CAE7C,yBAAA,EAA2B,sBAAA,CAAuB,cAAA,GAClD,iBAAA,EAAmB,iBAAA,YACnB,4BAAA,GACE,IAAA,EAAM,sBAAA,CAAuB,cAAA,YAE/B,SAAA,EAAW,SAAA,CAAU,cAAA"}
@@ -1,10 +1,10 @@
1
- const require_PromiseWrapper = require('../core/PromiseWrapper.js');
2
- const require_startUpdate = require('../core/startUpdate.js');
3
- const require_componentCache = require('../core/componentCache.js');
4
- const require_read = require('../core/read.js');
5
- const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.js');
6
- const require_maybeUnwrapNetworkRequest = require('./maybeUnwrapNetworkRequest.js');
7
- const require_useReadAndSubscribe = require('./useReadAndSubscribe.js');
1
+ const require_PromiseWrapper = require('../core/PromiseWrapper.cjs');
2
+ const require_startUpdate = require('../core/startUpdate.cjs');
3
+ const require_componentCache = require('../core/componentCache.cjs');
4
+ const require_read = require('../core/read.cjs');
5
+ const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.cjs');
6
+ const require_maybeUnwrapNetworkRequest = require('./maybeUnwrapNetworkRequest.cjs');
7
+ const require_useReadAndSubscribe = require('./useReadAndSubscribe.cjs');
8
8
 
9
9
  //#region src/react/useResult.ts
10
10
  function useResult(fragmentReference, partialNetworkRequestOptions) {
@@ -1,8 +1,8 @@
1
- import { NetworkRequestReaderOptions } from "../core/read.js";
2
- import { FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.js";
1
+ import { NetworkRequestReaderOptions } from "../core/read.cjs";
2
+ import { FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.cjs";
3
3
 
4
4
  //#region src/react/useResult.d.ts
5
5
  declare function useResult<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue>(fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>, partialNetworkRequestOptions?: Partial<NetworkRequestReaderOptions> | void): TClientFieldValue;
6
6
  //#endregion
7
7
  export { useResult };
8
- //# sourceMappingURL=useResult.d.ts.map
8
+ //# sourceMappingURL=useResult.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResult.d.cts","names":[],"sources":["../../src/react/useResult.ts"],"mappings":";;;;iBAegB,SAAA,wBACS,qBAAA,oBAAA,CAGvB,iBAAA,EAAmB,iBAAA,CAAkB,cAAA,EAAgB,iBAAA,GACrD,4BAAA,GAA+B,OAAA,CAAQ,2BAAA,WACtC,iBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useResult.d.mts","names":[],"sources":["../../src/react/useResult.ts"],"sourcesContent":[],"mappings":";;;;iBAegB,iCACS,6DAGJ,kBAAkB,gBAAgB,mDACtB,QAAQ,sCACtC"}
1
+ {"version":3,"file":"useResult.d.mts","names":[],"sources":["../../src/react/useResult.ts"],"mappings":";;;;iBAegB,SAAA,wBACS,qBAAA,oBAAA,CAGvB,iBAAA,EAAmB,iBAAA,CAAkB,cAAA,EAAgB,iBAAA,GACrD,4BAAA,GAA+B,OAAA,CAAQ,2BAAA,WACtC,iBAAA"}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-a840a70e",
3
+ "version": "0.0.0-main-c09c9dbf",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
6
+ "main": "./dist/index.cjs",
7
+ "types": "./dist/index.d.cts",
8
8
  "author": "Isograph Labs",
9
9
  "license": "MIT",
10
10
  "dependencies": {
11
- "@isograph/reference-counted-pointer": "0.0.0-main-a840a70e",
12
- "@isograph/disposable-types": "0.0.0-main-a840a70e",
13
- "@isograph/react-disposable-state": "0.0.0-main-a840a70e"
11
+ "@isograph/react-disposable-state": "0.0.0-main-c09c9dbf",
12
+ "@isograph/reference-counted-pointer": "0.0.0-main-c09c9dbf",
13
+ "@isograph/disposable-types": "0.0.0-main-c09c9dbf"
14
14
  },
15
15
  "peerDependencies": {
16
16
  "react": "^18.0.0 || ^19.0.0"
@@ -32,8 +32,8 @@
32
32
  "module": "./dist/index.mjs",
33
33
  "exports": {
34
34
  ".": {
35
- "import": "./dist/index.mjs",
36
- "require": "./dist/index.js"
35
+ "require": "./dist/index.cjs",
36
+ "import": "./dist/index.mjs"
37
37
  },
38
38
  "./package.json": "./package.json"
39
39
  },
@@ -43,7 +43,7 @@
43
43
  "test": "vitest run",
44
44
  "test-watch": "vitest watch",
45
45
  "coverage": "vitest run --coverage",
46
- "tsc": "tsc",
46
+ "tsc": "tsc -b",
47
47
  "tsc-force": "tsc --build --clean && tsc --build --force",
48
48
  "iso": "../../target/debug/isograph_cli --config ./isograph.config.json"
49
49
  }
@@ -1,6 +1,10 @@
1
1
  import type { ParentCache } from '@isograph/react-disposable-state';
2
2
  import type { Brand } from './brand';
3
- import type { LinkedParentRecordKey, ScalarParentRecordKey } from './cache';
3
+ import type {
4
+ LinkedParentRecordKey,
5
+ ParentRecordKey,
6
+ ScalarParentRecordKey,
7
+ } from './cache';
4
8
  import type {
5
9
  IsographEntrypoint,
6
10
  IsographOperation,
@@ -144,9 +148,9 @@ export type DataTypeValueLinked =
144
148
  | readonly DataTypeValueLinked[];
145
149
 
146
150
  export type StoreRecord = {
147
- [index: ScalarParentRecordKey]: DataTypeValueScalar;
148
- [index: LinkedParentRecordKey]: DataTypeValueLinked;
149
- } & {
151
+ [key: ScalarParentRecordKey]: DataTypeValueScalar;
152
+ [key: LinkedParentRecordKey]: DataTypeValueLinked;
153
+ readonly [key: ParentRecordKey]: DataTypeValueScalar | DataTypeValueLinked;
150
154
  // TODO __typename?: T, which is restricted to being a concrete string
151
155
  // TODO this shouldn't always be named id
152
156
  readonly __typename?: TypeName;
package/src/core/cache.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { type Factory, ParentCache } from '@isograph/react-disposable-state';
2
- import type { Brand } from './brand';
3
2
  import type {
4
3
  NormalizationAstNodes,
5
4
  NormalizationInlineFragment,
@@ -61,12 +60,16 @@ export type NetworkResponseValue =
61
60
  export type NetworkResponseObject = {
62
61
  // N.B. undefined is here to support optional id's, but
63
62
  // undefined should not *actually* be present in the network response.
64
- readonly [K in
65
- | ScalarNetworkResponseKey
66
- | LinkedNetworkResponseKey]: K extends ScalarNetworkResponseKey
67
- ? undefined | NetworkResponsePlural<NetworkResponseScalarValue>
68
- : undefined | NetworkResponsePlural<NetworkResponseObject>;
69
- } & {
63
+ readonly [key: ScalarNetworkResponseKey]:
64
+ | undefined
65
+ | NetworkResponsePlural<NetworkResponseScalarValue>;
66
+ readonly [key: LinkedNetworkResponseKey]:
67
+ | undefined
68
+ | NetworkResponsePlural<NetworkResponseObject>;
69
+ readonly [key: NetworkResponseKey]:
70
+ | undefined
71
+ | NetworkResponsePlural<NetworkResponseScalarValue>
72
+ | NetworkResponsePlural<NetworkResponseObject>;
70
73
  readonly id?: DataId;
71
74
  readonly __typename?: TypeName;
72
75
  };
@@ -433,15 +436,20 @@ function normalizeNetworkResponseObject(
433
436
  return newStoreRecordId;
434
437
  }
435
438
 
436
- declare const LinkedParentRecordKeyBrand: unique symbol;
437
- export type LinkedParentRecordKey = string & {
438
- brand?: Brand<undefined, typeof LinkedParentRecordKeyBrand>;
439
- };
439
+ export type ParentRecordKey = string;
440
440
 
441
- declare const ScalarParentRecordKeyBrand: unique symbol;
442
- export type ScalarParentRecordKey = string & {
443
- brand?: Brand<undefined, typeof ScalarParentRecordKeyBrand>;
444
- };
441
+ /**
442
+ * these don't actually start with the different prefixes, but they let
443
+ * us use multiple indexes, e.g.
444
+ * {
445
+ * readonly [key: `NOT_AN_ACTUAL_TYPE_LinkedParentRecordKey_${string} `]: ...
446
+ * readonly [key: `NOT_AN_ACTUAL_TYPE_ScalarParentRecordKey_${string} `]: ...
447
+ * }
448
+ */
449
+ export type LinkedParentRecordKey =
450
+ `NOT_AN_ACTUAL_TYPE_LinkedParentRecordKey_${string}`;
451
+ export type ScalarParentRecordKey =
452
+ `NOT_AN_ACTUAL_TYPE_ScalarParentRecordKey_${string}`;
445
453
 
446
454
  export function getParentRecordKey(
447
455
  astNode: NormalizationLinkedField | ReaderLinkedField,
@@ -458,7 +466,7 @@ export function getParentRecordKey(
458
466
  | ReaderLinkedField
459
467
  | ReaderScalarField,
460
468
  variables: Variables,
461
- ): string {
469
+ ): ParentRecordKey {
462
470
  let parentRecordKey = astNode.fieldName;
463
471
  const fieldParameters = astNode.arguments;
464
472
  if (fieldParameters != null) {
@@ -512,15 +520,20 @@ function getStoreKeyChunkForArgument(argument: Argument, variables: Variables) {
512
520
  return `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${chunk}`;
513
521
  }
514
522
 
515
- declare const LinkedNetworkResponseKeyBrand: unique symbol;
516
- export type LinkedNetworkResponseKey = string & {
517
- brand?: Brand<undefined, typeof LinkedNetworkResponseKeyBrand>;
518
- };
523
+ export type NetworkResponseKey = string;
519
524
 
520
- declare const ScalarNetworkResponseKeyBrand: unique symbol;
521
- export type ScalarNetworkResponseKey = string & {
522
- brand?: Brand<undefined, typeof ScalarNetworkResponseKeyBrand>;
523
- };
525
+ /**
526
+ * these don't actually start with the different prefixes, but they let
527
+ * us use multiple indexes, e.g.
528
+ * {
529
+ * readonly [key: `NOT_AN_ACTUAL_TYPE_LinkedNetworkResponseKey_${string} `]: ...
530
+ * readonly [key: `NOT_AN_ACTUAL_TYPE_ScalarNetworkResponseKey_${string} `]: ...
531
+ * }
532
+ */
533
+ export type LinkedNetworkResponseKey =
534
+ `NOT_AN_ACTUAL_TYPE_LinkedNetworkResponseKey_${string}`;
535
+ export type ScalarNetworkResponseKey =
536
+ `NOT_AN_ACTUAL_TYPE_ScalarNetworkResponseKey_${string}`;
524
537
 
525
538
  function getNetworkResponseKey(
526
539
  astNode: NormalizationLinkedField,
@@ -530,7 +543,7 @@ function getNetworkResponseKey(
530
543
  ): ScalarNetworkResponseKey;
531
544
  function getNetworkResponseKey(
532
545
  astNode: NormalizationLinkedField | NormalizationScalarField,
533
- ): string {
546
+ ): NetworkResponseKey {
534
547
  let networkResponseKey = astNode.fieldName;
535
548
  const fieldParameters = astNode.arguments;
536
549
 
@@ -1,5 +1,5 @@
1
- import type { ItemCleanupPair } from '@isograph/isograph-disposable-types/dist';
2
- import type { ParentCache } from '@isograph/isograph-react-disposable-state/dist';
1
+ import type { ItemCleanupPair } from '@isograph/disposable-types';
2
+ import type { ParentCache } from '@isograph/react-disposable-state';
3
3
  import {
4
4
  type NetworkResponseObject,
5
5
  getOrCreateItemInSuspenseCache,
@@ -1,15 +1,14 @@
1
- import type { ItemCleanupPair } from '@isograph/isograph-disposable-types/dist';
2
- import { callSubscriptions } from './subscribe';
1
+ import type { ItemCleanupPair } from '@isograph/disposable-types';
3
2
  import {
4
- type NetworkResponseObject,
5
3
  type EncounteredIds,
4
+ type NetworkResponseObject,
6
5
  normalizeData,
7
6
  } from './cache';
8
7
  import type { IsographEntrypoint, NormalizationAst } from './entrypoint';
9
8
  import type {
10
- UnknownTReadFromStore,
11
9
  ExtractParameters,
12
10
  FragmentReference,
11
+ UnknownTReadFromStore,
13
12
  } from './FragmentReference';
14
13
  import {
15
14
  type IsographEnvironment,
@@ -19,6 +18,7 @@ import {
19
18
  import { logMessage } from './logging';
20
19
  import { retainQueryWithoutMakingNetworkRequest } from './makeNetworkRequest';
21
20
  import { addNetworkResponseStoreLayer } from './optimisticProxy';
21
+ import { callSubscriptions } from './subscribe';
22
22
 
23
23
  export function writeData<
24
24
  TReadFromStore extends UnknownTReadFromStore,
@@ -7,9 +7,9 @@ import {
7
7
  } from '../core/garbageCollection';
8
8
  import { ROOT_ID, type BaseStoreLayerData } from '../core/IsographEnvironment';
9
9
  import { wrapResolvedValue } from '../core/PromiseWrapper';
10
+ import { createIsographEnvironment } from '../react/createIsographEnvironment';
10
11
  import { meNameSuccessorRetainedQuery } from './meNameSuccessor';
11
12
  import { nodeFieldRetainedQuery } from './nodeQuery';
12
- import { createIsographEnvironment } from '../react/createIsographEnvironment';
13
13
 
14
14
  const getDefaultStore = (): BaseStoreLayerData => ({
15
15
  Query: {
@@ -71,13 +71,13 @@ describe('garbage collection', () => {
71
71
  null as any,
72
72
  );
73
73
 
74
- expect(store.Economist?.[1]).not.toBe(undefined);
74
+ expect(store['Economist']?.[1]).not.toBe(undefined);
75
75
 
76
76
  // TODO enable babel so we don't have to do this
77
77
  retainQuery(environment, meNameRetainedQuery);
78
78
  garbageCollectEnvironment(environment);
79
79
 
80
- expect(store.Economist?.[1]).toBe(undefined);
80
+ expect(store['Economist']?.[1]).toBe(undefined);
81
81
  });
82
82
 
83
83
  test('Referenced records should not be garbage collected', () => {
@@ -88,13 +88,13 @@ describe('garbage collection', () => {
88
88
  null as any,
89
89
  );
90
90
 
91
- expect(store.Economist?.[0]).not.toBe(undefined);
91
+ expect(store['Economist']?.[0]).not.toBe(undefined);
92
92
 
93
93
  // TODO enable babel so we don't have to do this
94
94
  retainQuery(environment, meNameRetainedQuery);
95
95
  garbageCollectEnvironment(environment);
96
96
 
97
- expect(store.Economist?.[0]).not.toBe(undefined);
97
+ expect(store['Economist']?.[0]).not.toBe(undefined);
98
98
  });
99
99
 
100
100
  test('Referenced records should not be garbage collected, and this should work with variables', () => {
@@ -105,12 +105,12 @@ describe('garbage collection', () => {
105
105
  null as any,
106
106
  );
107
107
 
108
- expect(store.Economist?.[0]).not.toBe(undefined);
108
+ expect(store['Economist']?.[0]).not.toBe(undefined);
109
109
 
110
110
  retainQuery(environment, nodeFieldRetainedQuery);
111
111
  garbageCollectEnvironment(environment);
112
112
 
113
- expect(store.Economist?.[0]).not.toBe(undefined);
113
+ expect(store['Economist']?.[0]).not.toBe(undefined);
114
114
  });
115
115
 
116
116
  test('Referenced records should not be garbage collected, and this should work through multiple levels', () => {
@@ -124,9 +124,9 @@ describe('garbage collection', () => {
124
124
  retainQuery(environment, meNameSuccessorRetainedQuery);
125
125
  garbageCollectEnvironment(environment);
126
126
 
127
- expect(store.Economist?.[0]).not.toBe(undefined);
128
- expect(store.Economist?.[1]).not.toBe(undefined);
129
- expect(store.Economist?.[2]).not.toBe(undefined);
127
+ expect(store['Economist']?.[0]).not.toBe(undefined);
128
+ expect(store['Economist']?.[1]).not.toBe(undefined);
129
+ expect(store['Economist']?.[2]).not.toBe(undefined);
130
130
  });
131
131
 
132
132
  test('ROOT_ID should be garbage collected, if there are no retained queries', () => {
@@ -139,6 +139,6 @@ describe('garbage collection', () => {
139
139
  garbageCollectEnvironment(environment);
140
140
 
141
141
  expect(store.Query?.[ROOT_ID]).toBe(undefined);
142
- expect(store.Economist?.[0]).toBe(undefined);
142
+ expect(store['Economist']?.[0]).toBe(undefined);
143
143
  });
144
144
  });
@@ -8,6 +8,7 @@ import {
8
8
  } from '../core/IsographEnvironment';
9
9
  import { normalizeData } from '../core/cache';
10
10
  import { getOrCreateCacheForArtifact } from '../core/getOrCreateCacheForArtifact';
11
+ import type { StoreLayer } from '../core/optimisticProxy';
11
12
  import {
12
13
  readButDoNotEvaluate,
13
14
  type WithEncounteredRecords,
@@ -36,11 +37,18 @@ const normalizeUndefinedFieldEntrypoint = iso(
36
37
  `entrypoint Query.normalizeUndefinedField`,
37
38
  );
38
39
 
40
+ function getBaseStoreLayer(node: StoreLayer) {
41
+ if (node.kind === 'BaseStoreLayer') {
42
+ return node;
43
+ }
44
+ return getBaseStoreLayer(node.parentStoreLayer);
45
+ }
46
+
39
47
  describe('normalize undefined field', () => {
40
48
  test('should normalize scalar field to null', () => {
41
49
  normalizeData(
42
50
  environment,
43
- environment.store,
51
+ getBaseStoreLayer(environment.store),
44
52
  normalizeUndefinedFieldEntrypoint.networkRequestInfo.normalizationAst
45
53
  .selections,
46
54
  {
@@ -74,7 +82,7 @@ describe('normalize undefined field', () => {
74
82
  test('should normalize linked field to null', () => {
75
83
  normalizeData(
76
84
  environment,
77
- environment.store,
85
+ getBaseStoreLayer(environment.store),
78
86
  normalizeUndefinedFieldEntrypoint.networkRequestInfo.normalizationAst
79
87
  .selections,
80
88
  {},
@@ -111,7 +119,7 @@ describe('nested Query', () => {
111
119
  test('should be normalized', () => {
112
120
  normalizeData(
113
121
  environment,
114
- environment.store,
122
+ getBaseStoreLayer(environment.store),
115
123
  entrypoint.networkRequestInfo.normalizationAst.selections,
116
124
  {
117
125
  query: { node____id___v_id: { __typename: 'Economist', id: '1' } },
@@ -64,7 +64,7 @@ describe('optimisticLayer', () => {
64
64
  getStoreRecordProxy(environment.store, {
65
65
  __link: '__ROOT',
66
66
  __typename: 'Query',
67
- })?.counter,
67
+ })?.['counter'],
68
68
  ).toBe(4);
69
69
  });
70
70
  });
@@ -88,7 +88,7 @@ describe('optimisticLayer', () => {
88
88
  getStoreRecordProxy(environment.store, {
89
89
  __link: '__ROOT',
90
90
  __typename: 'Query',
91
- })?.counter,
91
+ })?.['counter'],
92
92
  ).toBe(3);
93
93
  });
94
94
  });
@@ -103,7 +103,7 @@ describe('optimisticLayer', () => {
103
103
  getStoreRecordProxy(environment.store, {
104
104
  __link: '__ROOT',
105
105
  __typename: 'Query',
106
- })?.counter,
106
+ })?.['counter'],
107
107
  ).toBe(3);
108
108
  });
109
109
  });
@@ -235,7 +235,7 @@ describe('optimisticLayer', () => {
235
235
  getStoreRecordProxy(environment.store, {
236
236
  __link: '__ROOT',
237
237
  __typename: 'Query',
238
- })?.counter,
238
+ })?.['counter'],
239
239
  ).toBe(5);
240
240
  });
241
241
 
@@ -256,7 +256,7 @@ describe('optimisticLayer', () => {
256
256
  getStoreRecordProxy(environment.store, {
257
257
  __link: '__ROOT',
258
258
  __typename: 'Query',
259
- })?.counter,
259
+ })?.['counter'],
260
260
  ).toBe(12);
261
261
  });
262
262
 
@@ -281,7 +281,7 @@ describe('optimisticLayer', () => {
281
281
  getStoreRecordProxy(environment.store, {
282
282
  __link: '__ROOT',
283
283
  __typename: 'Query',
284
- })?.counter,
284
+ })?.['counter'],
285
285
  ).toBe(13);
286
286
  });
287
287
 
@@ -306,7 +306,7 @@ describe('optimisticLayer', () => {
306
306
  getStoreRecordProxy(environment.store, {
307
307
  __link: '__ROOT',
308
308
  __typename: 'Query',
309
- })?.counter,
309
+ })?.['counter'],
310
310
  ).toBe(16);
311
311
  });
312
312
 
@@ -330,7 +330,7 @@ describe('optimisticLayer', () => {
330
330
  getStoreRecordProxy(environment.store, {
331
331
  __link: '__ROOT',
332
332
  __typename: 'Query',
333
- })?.counter,
333
+ })?.['counter'],
334
334
  ).toBe(6);
335
335
  });
336
336
  });
@@ -360,7 +360,7 @@ describe('optimisticLayer', () => {
360
360
  getStoreRecordProxy(environment.store, {
361
361
  __link: '__ROOT',
362
362
  __typename: 'Query',
363
- })?.counter,
363
+ })?.['counter'],
364
364
  ).toBe(12);
365
365
  });
366
366
 
@@ -387,7 +387,7 @@ describe('optimisticLayer', () => {
387
387
  getStoreRecordProxy(environment.store, {
388
388
  __link: '__ROOT',
389
389
  __typename: 'Query',
390
- })?.counter,
390
+ })?.['counter'],
391
391
  ).toBe(12);
392
392
  });
393
393
 
@@ -415,7 +415,7 @@ describe('optimisticLayer', () => {
415
415
  getStoreRecordProxy(environment.store, {
416
416
  __link: '__ROOT',
417
417
  __typename: 'Query',
418
- })?.counter,
418
+ })?.['counter'],
419
419
  ).toBe(12);
420
420
  });
421
421
  });
@@ -444,7 +444,7 @@ describe('optimisticLayer', () => {
444
444
  getStoreRecordProxy(environment.store, {
445
445
  __link: '__ROOT',
446
446
  __typename: 'Query',
447
- })?.counter,
447
+ })?.['counter'],
448
448
  ).toBe(5);
449
449
  });
450
450
  test("doesn't merge child nodes if has parent nodes", () => {
@@ -474,7 +474,7 @@ describe('optimisticLayer', () => {
474
474
  getStoreRecordProxy(environment.store, {
475
475
  __link: '__ROOT',
476
476
  __typename: 'Query',
477
- })?.counter,
477
+ })?.['counter'],
478
478
  ).toBe(6);
479
479
  });
480
480
  });
@@ -541,7 +541,7 @@ describe('optimisticLayer', () => {
541
541
  getStoreRecordProxy(environment.store, {
542
542
  __link: '__ROOT',
543
543
  __typename: 'Query',
544
- })?.counter,
544
+ })?.['counter'],
545
545
  ).toBe(0);
546
546
  });
547
547
 
@@ -562,7 +562,7 @@ describe('optimisticLayer', () => {
562
562
  getStoreRecordProxy(environment.store, {
563
563
  __link: '__ROOT',
564
564
  __typename: 'Query',
565
- })?.counter,
565
+ })?.['counter'],
566
566
  ).toBe(12);
567
567
  });
568
568
 
@@ -587,7 +587,7 @@ describe('optimisticLayer', () => {
587
587
  getStoreRecordProxy(environment.store, {
588
588
  __link: '__ROOT',
589
589
  __typename: 'Query',
590
- })?.counter,
590
+ })?.['counter'],
591
591
  ).toBe(13);
592
592
  });
593
593
 
@@ -612,7 +612,7 @@ describe('optimisticLayer', () => {
612
612
  getStoreRecordProxy(environment.store, {
613
613
  __link: '__ROOT',
614
614
  __typename: 'Query',
615
- })?.counter,
615
+ })?.['counter'],
616
616
  ).toBe(15);
617
617
  });
618
618
 
@@ -636,7 +636,7 @@ describe('optimisticLayer', () => {
636
636
  getStoreRecordProxy(environment.store, {
637
637
  __link: '__ROOT',
638
638
  __typename: 'Query',
639
- })?.counter,
639
+ })?.['counter'],
640
640
  ).toBe(1);
641
641
  });
642
642
  });
@@ -666,7 +666,7 @@ describe('optimisticLayer', () => {
666
666
  getStoreRecordProxy(environment.store, {
667
667
  __link: '__ROOT',
668
668
  __typename: 'Query',
669
- })?.counter,
669
+ })?.['counter'],
670
670
  ).toBe(12);
671
671
  });
672
672
 
@@ -693,7 +693,7 @@ describe('optimisticLayer', () => {
693
693
  getStoreRecordProxy(environment.store, {
694
694
  __link: '__ROOT',
695
695
  __typename: 'Query',
696
- })?.counter,
696
+ })?.['counter'],
697
697
  ).toBe(12);
698
698
  });
699
699
 
@@ -721,7 +721,7 @@ describe('optimisticLayer', () => {
721
721
  getStoreRecordProxy(environment.store, {
722
722
  __link: '__ROOT',
723
723
  __typename: 'Query',
724
- })?.counter,
724
+ })?.['counter'],
725
725
  ).toBe(12);
726
726
  });
727
727
  });
@@ -747,7 +747,7 @@ describe('optimisticLayer', () => {
747
747
  getStoreRecordProxy(environment.store, {
748
748
  __link: '__ROOT',
749
749
  __typename: 'Query',
750
- })?.counter,
750
+ })?.['counter'],
751
751
  ).toBe(1);
752
752
  });
753
753
 
@@ -775,7 +775,7 @@ describe('optimisticLayer', () => {
775
775
  getStoreRecordProxy(environment.store, {
776
776
  __link: '__ROOT',
777
777
  __typename: 'Query',
778
- })?.counter,
778
+ })?.['counter'],
779
779
  ).toBe(2);
780
780
  });
781
781
  });