@isograph/react 0.4.3 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/.turbo/turbo-compile-libs.log +10 -3
  2. package/dist/_virtual/rolldown_runtime.js +25 -0
  3. package/dist/core/FragmentReference.d.mts +38 -0
  4. package/dist/core/FragmentReference.d.mts.map +1 -0
  5. package/dist/core/FragmentReference.d.ts +31 -27
  6. package/dist/core/FragmentReference.d.ts.map +1 -1
  7. package/dist/core/FragmentReference.js +8 -6
  8. package/dist/core/FragmentReference.mjs +10 -0
  9. package/dist/core/FragmentReference.mjs.map +1 -0
  10. package/dist/core/IsographEnvironment.d.mts +89 -0
  11. package/dist/core/IsographEnvironment.d.mts.map +1 -0
  12. package/dist/core/IsographEnvironment.d.ts +77 -72
  13. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  14. package/dist/core/IsographEnvironment.js +62 -59
  15. package/dist/core/IsographEnvironment.mjs +67 -0
  16. package/dist/core/IsographEnvironment.mjs.map +1 -0
  17. package/dist/core/PromiseWrapper.d.mts +36 -0
  18. package/dist/core/PromiseWrapper.d.mts.map +1 -0
  19. package/dist/core/PromiseWrapper.d.ts +27 -18
  20. package/dist/core/PromiseWrapper.d.ts.map +1 -1
  21. package/dist/core/PromiseWrapper.js +45 -43
  22. package/dist/core/PromiseWrapper.mjs +49 -0
  23. package/dist/core/PromiseWrapper.mjs.map +1 -0
  24. package/dist/core/areEqualWithDeepComparison.js +56 -108
  25. package/dist/core/areEqualWithDeepComparison.mjs +62 -0
  26. package/dist/core/areEqualWithDeepComparison.mjs.map +1 -0
  27. package/dist/core/brand.d.mts +19 -0
  28. package/dist/core/brand.d.mts.map +1 -0
  29. package/dist/core/brand.d.ts +18 -1
  30. package/dist/core/brand.d.ts.map +1 -1
  31. package/dist/core/cache.d.mts +20 -0
  32. package/dist/core/cache.d.mts.map +1 -0
  33. package/dist/core/cache.d.ts +18 -34
  34. package/dist/core/cache.d.ts.map +1 -1
  35. package/dist/core/cache.js +210 -516
  36. package/dist/core/cache.mjs +237 -0
  37. package/dist/core/cache.mjs.map +1 -0
  38. package/dist/core/check.d.mts +28 -0
  39. package/dist/core/check.d.mts.map +1 -0
  40. package/dist/core/check.d.ts +24 -18
  41. package/dist/core/check.d.ts.map +1 -1
  42. package/dist/core/check.js +80 -124
  43. package/dist/core/check.mjs +84 -0
  44. package/dist/core/check.mjs.map +1 -0
  45. package/dist/core/componentCache.js +10 -34
  46. package/dist/core/componentCache.mjs +12 -0
  47. package/dist/core/componentCache.mjs.map +1 -0
  48. package/dist/core/entrypoint.d.mts +99 -0
  49. package/dist/core/entrypoint.d.mts.map +1 -0
  50. package/dist/core/entrypoint.d.ts +83 -68
  51. package/dist/core/entrypoint.d.ts.map +1 -1
  52. package/dist/core/entrypoint.js +6 -5
  53. package/dist/core/entrypoint.mjs +8 -0
  54. package/dist/core/entrypoint.mjs.map +1 -0
  55. package/dist/core/garbageCollection.d.mts +18 -0
  56. package/dist/core/garbageCollection.d.mts.map +1 -0
  57. package/dist/core/garbageCollection.d.ts +15 -10
  58. package/dist/core/garbageCollection.d.ts.map +1 -1
  59. package/dist/core/garbageCollection.js +82 -99
  60. package/dist/core/garbageCollection.mjs +89 -0
  61. package/dist/core/garbageCollection.mjs.map +1 -0
  62. package/dist/core/getOrCreateCacheForArtifact.js +37 -0
  63. package/dist/core/getOrCreateCacheForArtifact.mjs +38 -0
  64. package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -0
  65. package/dist/core/logging.d.mts +95 -0
  66. package/dist/core/logging.d.mts.map +1 -0
  67. package/dist/core/logging.d.ts +78 -60
  68. package/dist/core/logging.d.ts.map +1 -1
  69. package/dist/core/logging.js +17 -18
  70. package/dist/core/logging.mjs +20 -0
  71. package/dist/core/logging.mjs.map +1 -0
  72. package/dist/core/makeNetworkRequest.d.mts +13 -0
  73. package/dist/core/makeNetworkRequest.d.mts.map +1 -0
  74. package/dist/core/makeNetworkRequest.d.ts +12 -8
  75. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  76. package/dist/core/makeNetworkRequest.js +188 -195
  77. package/dist/core/makeNetworkRequest.mjs +195 -0
  78. package/dist/core/makeNetworkRequest.mjs.map +1 -0
  79. package/dist/core/optimisticProxy.d.mts +43 -0
  80. package/dist/core/optimisticProxy.d.mts.map +1 -0
  81. package/dist/core/optimisticProxy.d.ts +43 -0
  82. package/dist/core/optimisticProxy.d.ts.map +1 -0
  83. package/dist/core/optimisticProxy.js +273 -0
  84. package/dist/core/optimisticProxy.mjs +268 -0
  85. package/dist/core/optimisticProxy.mjs.map +1 -0
  86. package/dist/core/read.d.mts +29 -0
  87. package/dist/core/read.d.mts.map +1 -0
  88. package/dist/core/read.d.ts +23 -27
  89. package/dist/core/read.d.ts.map +1 -1
  90. package/dist/core/read.js +438 -618
  91. package/dist/core/read.mjs +456 -0
  92. package/dist/core/read.mjs.map +1 -0
  93. package/dist/core/reader.d.mts +89 -0
  94. package/dist/core/reader.d.mts.map +1 -0
  95. package/dist/core/reader.d.ts +78 -74
  96. package/dist/core/reader.d.ts.map +1 -1
  97. package/dist/core/startUpdate.js +118 -156
  98. package/dist/core/startUpdate.mjs +125 -0
  99. package/dist/core/startUpdate.mjs.map +1 -0
  100. package/dist/core/subscribe.d.mts +12 -0
  101. package/dist/core/subscribe.d.mts.map +1 -0
  102. package/dist/core/subscribe.d.ts +12 -0
  103. package/dist/core/subscribe.d.ts.map +1 -0
  104. package/dist/core/subscribe.js +79 -0
  105. package/dist/core/subscribe.mjs +79 -0
  106. package/dist/core/subscribe.mjs.map +1 -0
  107. package/dist/core/util.d.mts +27 -0
  108. package/dist/core/util.d.mts.map +1 -0
  109. package/dist/core/util.d.ts +21 -17
  110. package/dist/core/util.d.ts.map +1 -1
  111. package/dist/core/util.js +22 -2
  112. package/dist/core/util.mjs +21 -0
  113. package/dist/core/util.mjs.map +1 -0
  114. package/dist/core/writeData.d.mts +11 -0
  115. package/dist/core/writeData.d.mts.map +1 -0
  116. package/dist/core/writeData.d.ts +11 -0
  117. package/dist/core/writeData.d.ts.map +1 -0
  118. package/dist/core/writeData.js +41 -0
  119. package/dist/core/writeData.mjs +42 -0
  120. package/dist/core/writeData.mjs.map +1 -0
  121. package/dist/index.d.mts +32 -0
  122. package/dist/index.d.ts +32 -29
  123. package/dist/index.js +70 -68
  124. package/dist/index.mjs +31 -0
  125. package/dist/loadable-hooks/useClientSideDefer.d.mts +12 -0
  126. package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -0
  127. package/dist/loadable-hooks/useClientSideDefer.d.ts +10 -8
  128. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
  129. package/dist/loadable-hooks/useClientSideDefer.js +14 -12
  130. package/dist/loadable-hooks/useClientSideDefer.mjs +14 -0
  131. package/dist/loadable-hooks/useClientSideDefer.mjs.map +1 -0
  132. package/dist/loadable-hooks/useConnectionSpecPagination.d.mts +33 -0
  133. package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -0
  134. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +27 -21
  135. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
  136. package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -158
  137. package/dist/loadable-hooks/useConnectionSpecPagination.mjs +134 -0
  138. package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -0
  139. package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts +8 -0
  140. package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -0
  141. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +6 -3
  142. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
  143. package/dist/loadable-hooks/useImperativeExposedMutationField.js +9 -12
  144. package/dist/loadable-hooks/useImperativeExposedMutationField.mjs +11 -0
  145. package/dist/loadable-hooks/useImperativeExposedMutationField.mjs.map +1 -0
  146. package/dist/loadable-hooks/useImperativeLoadableField.d.mts +19 -0
  147. package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -0
  148. package/dist/loadable-hooks/useImperativeLoadableField.d.ts +15 -11
  149. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
  150. package/dist/loadable-hooks/useImperativeLoadableField.js +16 -12
  151. package/dist/loadable-hooks/useImperativeLoadableField.mjs +17 -0
  152. package/dist/loadable-hooks/useImperativeLoadableField.mjs.map +1 -0
  153. package/dist/loadable-hooks/useSkipLimitPagination.d.mts +24 -0
  154. package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -0
  155. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +19 -15
  156. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
  157. package/dist/loadable-hooks/useSkipLimitPagination.js +118 -160
  158. package/dist/loadable-hooks/useSkipLimitPagination.mjs +119 -0
  159. package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -0
  160. package/dist/react/FragmentReader.d.mts +18 -0
  161. package/dist/react/FragmentReader.d.mts.map +1 -0
  162. package/dist/react/FragmentReader.d.ts +16 -7
  163. package/dist/react/FragmentReader.d.ts.map +1 -1
  164. package/dist/react/FragmentReader.js +8 -7
  165. package/dist/react/FragmentReader.mjs +10 -0
  166. package/dist/react/FragmentReader.mjs.map +1 -0
  167. package/dist/react/FragmentRenderer.d.mts +20 -0
  168. package/dist/react/FragmentRenderer.d.mts.map +1 -0
  169. package/dist/react/FragmentRenderer.d.ts +18 -13
  170. package/dist/react/FragmentRenderer.d.ts.map +1 -1
  171. package/dist/react/FragmentRenderer.js +11 -33
  172. package/dist/react/FragmentRenderer.mjs +12 -0
  173. package/dist/react/FragmentRenderer.mjs.map +1 -0
  174. package/dist/react/IsographEnvironmentProvider.d.mts +17 -0
  175. package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -0
  176. package/dist/react/IsographEnvironmentProvider.d.ts +15 -9
  177. package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
  178. package/dist/react/IsographEnvironmentProvider.js +15 -39
  179. package/dist/react/IsographEnvironmentProvider.mjs +17 -0
  180. package/dist/react/IsographEnvironmentProvider.mjs.map +1 -0
  181. package/dist/react/LoadableFieldReader.d.mts +21 -0
  182. package/dist/react/LoadableFieldReader.d.mts.map +1 -0
  183. package/dist/react/LoadableFieldReader.d.ts +20 -11
  184. package/dist/react/LoadableFieldReader.d.ts.map +1 -1
  185. package/dist/react/LoadableFieldReader.js +13 -8
  186. package/dist/react/LoadableFieldReader.mjs +14 -0
  187. package/dist/react/LoadableFieldReader.mjs.map +1 -0
  188. package/dist/react/LoadableFieldRenderer.d.mts +22 -0
  189. package/dist/react/LoadableFieldRenderer.d.mts.map +1 -0
  190. package/dist/react/LoadableFieldRenderer.d.ts +21 -12
  191. package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
  192. package/dist/react/LoadableFieldRenderer.js +13 -35
  193. package/dist/react/LoadableFieldRenderer.mjs +14 -0
  194. package/dist/react/LoadableFieldRenderer.mjs.map +1 -0
  195. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +18 -0
  196. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -0
  197. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +11 -3
  198. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -1
  199. package/dist/react/RenderAfterCommit__DO_NOT_USE.js +17 -13
  200. package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs +18 -0
  201. package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs.map +1 -0
  202. package/dist/react/createIsographEnvironment.d.mts +9 -0
  203. package/dist/react/createIsographEnvironment.d.mts.map +1 -0
  204. package/dist/react/createIsographEnvironment.d.ts +8 -0
  205. package/dist/react/createIsographEnvironment.d.ts.map +1 -0
  206. package/dist/react/createIsographEnvironment.js +10 -0
  207. package/dist/react/createIsographEnvironment.mjs +11 -0
  208. package/dist/react/createIsographEnvironment.mjs.map +1 -0
  209. package/dist/react/maybeUnwrapNetworkRequest.js +11 -0
  210. package/dist/react/maybeUnwrapNetworkRequest.mjs +12 -0
  211. package/dist/react/maybeUnwrapNetworkRequest.mjs.map +1 -0
  212. package/dist/react/useImperativeReference.d.mts +15 -0
  213. package/dist/react/useImperativeReference.d.mts.map +1 -0
  214. package/dist/react/useImperativeReference.d.ts +13 -7
  215. package/dist/react/useImperativeReference.d.ts.map +1 -1
  216. package/dist/react/useImperativeReference.js +34 -32
  217. package/dist/react/useImperativeReference.mjs +35 -0
  218. package/dist/react/useImperativeReference.mjs.map +1 -0
  219. package/dist/react/useLazyReference.d.mts +13 -0
  220. package/dist/react/useLazyReference.d.mts.map +1 -0
  221. package/dist/react/useLazyReference.d.ts +11 -5
  222. package/dist/react/useLazyReference.d.ts.map +1 -1
  223. package/dist/react/useLazyReference.js +17 -40
  224. package/dist/react/useLazyReference.mjs +18 -0
  225. package/dist/react/useLazyReference.mjs.map +1 -0
  226. package/dist/react/useReadAndSubscribe.d.mts +20 -0
  227. package/dist/react/useReadAndSubscribe.d.mts.map +1 -0
  228. package/dist/react/useReadAndSubscribe.d.ts +14 -9
  229. package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
  230. package/dist/react/useReadAndSubscribe.js +57 -39
  231. package/dist/react/useReadAndSubscribe.mjs +59 -0
  232. package/dist/react/useReadAndSubscribe.mjs.map +1 -0
  233. package/dist/react/useRerenderOnChange.d.mts +12 -0
  234. package/dist/react/useRerenderOnChange.d.mts.map +1 -0
  235. package/dist/react/useRerenderOnChange.d.ts +10 -6
  236. package/dist/react/useRerenderOnChange.d.ts.map +1 -1
  237. package/dist/react/useRerenderOnChange.js +16 -20
  238. package/dist/react/useRerenderOnChange.mjs +17 -0
  239. package/dist/react/useRerenderOnChange.mjs.map +1 -0
  240. package/dist/react/useResult.d.mts +8 -0
  241. package/dist/react/useResult.d.mts.map +1 -0
  242. package/dist/react/useResult.d.ts +7 -5
  243. package/dist/react/useResult.d.ts.map +1 -1
  244. package/dist/react/useResult.js +27 -39
  245. package/dist/react/useResult.mjs +30 -0
  246. package/dist/react/useResult.mjs.map +1 -0
  247. package/package.json +26 -19
  248. package/src/core/FragmentReference.ts +13 -7
  249. package/src/core/IsographEnvironment.ts +80 -21
  250. package/src/core/PromiseWrapper.ts +14 -7
  251. package/src/core/areEqualWithDeepComparison.ts +2 -18
  252. package/src/core/brand.ts +18 -0
  253. package/src/core/cache.ts +62 -332
  254. package/src/core/check.ts +30 -26
  255. package/src/core/componentCache.ts +11 -44
  256. package/src/core/entrypoint.ts +50 -9
  257. package/src/core/garbageCollection.ts +81 -28
  258. package/src/core/getOrCreateCacheForArtifact.ts +86 -0
  259. package/src/core/logging.ts +25 -13
  260. package/src/core/makeNetworkRequest.ts +320 -94
  261. package/src/core/optimisticProxy.ts +544 -0
  262. package/src/core/read.ts +251 -198
  263. package/src/core/reader.ts +18 -17
  264. package/src/core/startUpdate.ts +47 -36
  265. package/src/core/subscribe.ts +189 -0
  266. package/src/core/util.ts +26 -0
  267. package/src/core/writeData.ts +79 -0
  268. package/src/index.ts +6 -4
  269. package/src/loadable-hooks/useClientSideDefer.ts +80 -30
  270. package/src/loadable-hooks/useConnectionSpecPagination.ts +54 -35
  271. package/src/loadable-hooks/useImperativeLoadableField.ts +5 -5
  272. package/src/loadable-hooks/useSkipLimitPagination.ts +22 -21
  273. package/src/react/FragmentReader.tsx +3 -1
  274. package/src/react/FragmentRenderer.tsx +8 -1
  275. package/src/react/IsographEnvironmentProvider.tsx +2 -1
  276. package/src/react/LoadableFieldReader.tsx +125 -16
  277. package/src/react/LoadableFieldRenderer.tsx +124 -16
  278. package/src/react/createIsographEnvironment.ts +23 -0
  279. package/src/react/maybeUnwrapNetworkRequest.ts +17 -0
  280. package/src/react/useImperativeReference.ts +25 -15
  281. package/src/react/useLazyReference.ts +20 -10
  282. package/src/react/useReadAndSubscribe.ts +53 -12
  283. package/src/react/useRerenderOnChange.ts +3 -3
  284. package/src/react/useResult.ts +15 -35
  285. package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +1 -1
  286. package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +3 -1
  287. package/src/tests/__isograph/Query/linkedUpdate/raw_response_type.ts +13 -0
  288. package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +1 -1
  289. package/src/tests/__isograph/Query/meName/entrypoint.ts +3 -1
  290. package/src/tests/__isograph/Query/meName/raw_response_type.ts +7 -0
  291. package/src/tests/__isograph/Query/meName/resolver_reader.ts +1 -1
  292. package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +3 -1
  293. package/src/tests/__isograph/Query/meNameSuccessor/raw_response_type.ts +14 -0
  294. package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +1 -1
  295. package/src/tests/__isograph/Query/nodeField/entrypoint.ts +3 -1
  296. package/src/tests/__isograph/Query/nodeField/raw_response_type.ts +7 -0
  297. package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +1 -1
  298. package/src/tests/__isograph/Query/normalizeUndefinedField/entrypoint.ts +33 -0
  299. package/src/tests/__isograph/Query/normalizeUndefinedField/normalization_ast.ts +25 -0
  300. package/src/tests/__isograph/Query/normalizeUndefinedField/output_type.ts +3 -0
  301. package/src/tests/__isograph/Query/normalizeUndefinedField/param_type.ts +9 -0
  302. package/src/tests/__isograph/Query/normalizeUndefinedField/query_text.ts +6 -0
  303. package/src/tests/__isograph/Query/normalizeUndefinedField/raw_response_type.ts +7 -0
  304. package/src/tests/__isograph/Query/normalizeUndefinedField/resolver_reader.ts +38 -0
  305. package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +3 -1
  306. package/src/tests/__isograph/Query/startUpdate/raw_response_type.ts +8 -0
  307. package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +1 -1
  308. package/src/tests/__isograph/Query/subquery/entrypoint.ts +3 -1
  309. package/src/tests/__isograph/Query/subquery/raw_response_type.ts +9 -0
  310. package/src/tests/__isograph/Query/subquery/resolver_reader.ts +1 -1
  311. package/src/tests/__isograph/iso.ts +11 -1
  312. package/src/tests/garbageCollection.test.ts +10 -10
  313. package/src/tests/meNameSuccessor.ts +7 -4
  314. package/src/tests/nodeQuery.ts +6 -4
  315. package/src/tests/normalizeData.test.ts +94 -18
  316. package/src/tests/optimisticProxy.test.ts +862 -0
  317. package/src/tests/startUpdate.test.ts +11 -11
  318. package/vitest.config.ts +5 -0
  319. package/dist/core/areEqualWithDeepComparison.d.ts +0 -3
  320. package/dist/core/areEqualWithDeepComparison.d.ts.map +0 -1
  321. package/dist/core/brand.js +0 -2
  322. package/dist/core/componentCache.d.ts +0 -5
  323. package/dist/core/componentCache.d.ts.map +0 -1
  324. package/dist/core/reader.js +0 -2
  325. package/dist/core/startUpdate.d.ts +0 -8
  326. package/dist/core/startUpdate.d.ts.map +0 -1
  327. package/dist/index.d.ts.map +0 -1
@@ -1,29 +1,27 @@
1
- import { ItemCleanupPair } from '@isograph/disposable-types';
1
+ import type { ItemCleanupPair } from '@isograph/disposable-types';
2
2
  import {
3
3
  UNASSIGNED_STATE,
4
4
  useUpdatableDisposableState,
5
5
  } from '@isograph/react-disposable-state';
6
- import {
7
- createReferenceCountedPointer,
8
- ReferenceCountedPointer,
9
- } from '@isograph/reference-counted-pointer';
6
+ import type { ReferenceCountedPointer } from '@isograph/reference-counted-pointer';
7
+ import { createReferenceCountedPointer } from '@isograph/reference-counted-pointer';
10
8
  import { useState } from 'react';
11
9
  import { subscribeToAnyChange } from '../core/cache';
12
- import { FetchOptions } from '../core/check';
13
- import {
10
+ import type { FetchOptions } from '../core/check';
11
+ import type {
14
12
  FragmentReference,
15
- type UnknownTReadFromStore,
13
+ UnknownTReadFromStore,
16
14
  } from '../core/FragmentReference';
17
15
  import { getPromiseState, readPromise } from '../core/PromiseWrapper';
18
16
  import {
19
17
  readButDoNotEvaluate,
20
18
  type WithEncounteredRecords,
21
19
  } from '../core/read';
22
- import { LoadableField, type ReaderAst } from '../core/reader';
20
+ import type { LoadableField, ReaderAst } from '../core/reader';
23
21
  import { getOrCreateCachedStartUpdate } from '../core/startUpdate';
24
22
  import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
23
+ import { maybeUnwrapNetworkRequest } from '../react/maybeUnwrapNetworkRequest';
25
24
  import { useSubscribeToMultiple } from '../react/useReadAndSubscribe';
26
- import { maybeUnwrapNetworkRequest } from '../react/useResult';
27
25
 
28
26
  export type UsePaginationReturnValue<
29
27
  TReadFromStore extends UnknownTReadFromStore,
@@ -35,13 +33,16 @@ export type UsePaginationReturnValue<
35
33
  results: ReadonlyArray<TItem>;
36
34
  }
37
35
  | {
38
- kind: 'Complete';
36
+ kind: 'HasMoreRecords';
39
37
  fetchMore: (
40
38
  count: number,
41
- fetchOptions?: FetchOptions<Connection<TItem>>,
39
+ fetchOptions?: FetchOptions<Connection<TItem>, never>,
42
40
  ) => void;
43
41
  results: ReadonlyArray<TItem>;
44
- hasNextPage: boolean;
42
+ }
43
+ | {
44
+ kind: 'NoMoreRecords';
45
+ results: ReadonlyArray<TItem>;
45
46
  };
46
47
 
47
48
  type LoadedFragmentReferences<
@@ -134,7 +135,6 @@ export function useConnectionSpecPagination<
134
135
  startUpdate: getOrCreateCachedStartUpdate(
135
136
  environment,
136
137
  fragmentReference,
137
- readerWithRefetchQueries.readerArtifact.fieldName,
138
138
  networkRequestOptions,
139
139
  ),
140
140
  }
@@ -208,7 +208,10 @@ export function useConnectionSpecPagination<
208
208
 
209
209
  const getFetchMore =
210
210
  (after: string | null) =>
211
- (count: number, fetchOptions?: FetchOptions<Connection<TItem>>): void => {
211
+ (
212
+ count: number,
213
+ fetchOptions?: FetchOptions<Connection<TItem>, never>,
214
+ ): void => {
212
215
  const loadedField = loadableField(
213
216
  {
214
217
  after: after,
@@ -259,7 +262,7 @@ export function useConnectionSpecPagination<
259
262
  const mostRecentFragmentReference =
260
263
  mostRecentItem?.[0].getItemIfNotDisposed();
261
264
 
262
- if (mostRecentItem && mostRecentFragmentReference === null) {
265
+ if (mostRecentItem != null && mostRecentFragmentReference == null) {
263
266
  throw new Error(
264
267
  'FragmentReference is unexpectedly disposed. \
265
268
  This is indicative of a bug in Isograph.',
@@ -267,11 +270,15 @@ export function useConnectionSpecPagination<
267
270
  }
268
271
 
269
272
  const networkRequestStatus =
270
- mostRecentFragmentReference &&
271
- getPromiseState(mostRecentFragmentReference.networkRequest);
273
+ mostRecentFragmentReference != null
274
+ ? {
275
+ mostRecentFragmentReference,
276
+ state: getPromiseState(mostRecentFragmentReference.networkRequest),
277
+ }
278
+ : null;
272
279
 
273
280
  const slicedFragmentReferences =
274
- networkRequestStatus?.kind === 'Ok'
281
+ networkRequestStatus?.state?.kind === 'Ok'
275
282
  ? loadedReferences
276
283
  : loadedReferences.slice(0, loadedReferences.length - 1);
277
284
 
@@ -301,16 +308,22 @@ export function useConnectionSpecPagination<
301
308
  subscribeCompletedFragmentReferences(completedFragmentReferences),
302
309
  );
303
310
 
304
- if (!networkRequestStatus) {
305
- return {
306
- kind: 'Complete',
307
- fetchMore: getFetchMore(initialState?.endCursor ?? null),
308
- results: [],
309
- hasNextPage: initialState?.hasNextPage ?? true,
310
- };
311
+ if (networkRequestStatus == null) {
312
+ if (initialState?.hasNextPage ?? true) {
313
+ return {
314
+ kind: 'HasMoreRecords',
315
+ fetchMore: getFetchMore(initialState?.endCursor ?? null),
316
+ results: [],
317
+ };
318
+ } else {
319
+ return {
320
+ kind: 'NoMoreRecords',
321
+ results: [],
322
+ };
323
+ }
311
324
  }
312
325
 
313
- switch (networkRequestStatus.kind) {
326
+ switch (networkRequestStatus.state.kind) {
314
327
  case 'Pending': {
315
328
  const unsubscribe = subscribeToAnyChange(environment, () => {
316
329
  unsubscribe();
@@ -323,23 +336,29 @@ export function useConnectionSpecPagination<
323
336
  return {
324
337
  results: results.edges,
325
338
  kind: 'Pending',
326
- pendingFragment: mostRecentFragmentReference,
339
+ pendingFragment: networkRequestStatus.mostRecentFragmentReference,
327
340
  };
328
341
  }
329
342
  case 'Err': {
330
- throw networkRequestStatus.error;
343
+ throw networkRequestStatus.state.error;
331
344
  }
332
345
  case 'Ok': {
333
346
  const results = readCompletedFragmentReferences(
334
347
  completedFragmentReferences,
335
348
  );
336
349
 
337
- return {
338
- results: results.edges,
339
- hasNextPage: results.pageInfo.hasNextPage,
340
- kind: 'Complete',
341
- fetchMore: getFetchMore(results.pageInfo.endCursor),
342
- };
350
+ if (results.pageInfo.hasNextPage) {
351
+ return {
352
+ kind: 'HasMoreRecords',
353
+ fetchMore: getFetchMore(results.pageInfo.endCursor),
354
+ results: results.edges,
355
+ };
356
+ } else {
357
+ return {
358
+ kind: 'NoMoreRecords',
359
+ results: results.edges,
360
+ };
361
+ }
343
362
  }
344
363
  }
345
364
  }
@@ -2,12 +2,12 @@ import {
2
2
  UNASSIGNED_STATE,
3
3
  useUpdatableDisposableState,
4
4
  } from '@isograph/react-disposable-state';
5
- import { FetchOptions } from '../core/check';
6
- import {
5
+ import type { FetchOptions } from '../core/check';
6
+ import type {
7
7
  ExtractParameters,
8
8
  FragmentReference,
9
9
  } from '../core/FragmentReference';
10
- import { LoadableField } from '../core/reader';
10
+ import type { LoadableField } from '../core/reader';
11
11
 
12
12
  export type UseImperativeLoadableFieldReturn<
13
13
  TReadFromStore extends { data: object; parameters: object },
@@ -19,7 +19,7 @@ export type UseImperativeLoadableFieldReturn<
19
19
  // TODO this should be void iff all args are provided by the query, like in
20
20
  // useClientSideDefer.
21
21
  args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs> | void,
22
- fetchOptions?: FetchOptions<TResult>,
22
+ fetchOptions?: FetchOptions<TResult, never>,
23
23
  ) => void;
24
24
  };
25
25
 
@@ -40,7 +40,7 @@ export function useImperativeLoadableField<
40
40
  return {
41
41
  loadFragmentReference: (
42
42
  args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs> | void,
43
- fetchOptions?: FetchOptions<TResult>,
43
+ fetchOptions?: FetchOptions<TResult, never>,
44
44
  ) => {
45
45
  const [_id, loader] = loadableField(args, fetchOptions ?? {});
46
46
  setState(loader());
@@ -1,29 +1,27 @@
1
- import { ItemCleanupPair } from '@isograph/disposable-types';
1
+ import type { ItemCleanupPair } from '@isograph/disposable-types';
2
2
  import {
3
3
  UNASSIGNED_STATE,
4
4
  useUpdatableDisposableState,
5
5
  } from '@isograph/react-disposable-state';
6
- import {
7
- createReferenceCountedPointer,
8
- ReferenceCountedPointer,
9
- } from '@isograph/reference-counted-pointer';
6
+ import type { ReferenceCountedPointer } from '@isograph/reference-counted-pointer';
7
+ import { createReferenceCountedPointer } from '@isograph/reference-counted-pointer';
10
8
  import { useState } from 'react';
11
9
  import { subscribeToAnyChange } from '../core/cache';
12
- import { FetchOptions } from '../core/check';
13
- import {
10
+ import type { FetchOptions } from '../core/check';
11
+ import type {
14
12
  FragmentReference,
15
- type UnknownTReadFromStore,
13
+ UnknownTReadFromStore,
16
14
  } from '../core/FragmentReference';
17
15
  import { getPromiseState, readPromise } from '../core/PromiseWrapper';
18
16
  import {
19
17
  readButDoNotEvaluate,
20
18
  type WithEncounteredRecords,
21
19
  } from '../core/read';
22
- import { LoadableField, type ReaderAst } from '../core/reader';
20
+ import type { LoadableField, ReaderAst } from '../core/reader';
23
21
  import { getOrCreateCachedStartUpdate } from '../core/startUpdate';
24
22
  import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
23
+ import { maybeUnwrapNetworkRequest } from '../react/maybeUnwrapNetworkRequest';
25
24
  import { useSubscribeToMultiple } from '../react/useReadAndSubscribe';
26
- import { maybeUnwrapNetworkRequest } from '../react/useResult';
27
25
 
28
26
  export type UseSkipLimitReturnValue<
29
27
  TReadFromStore extends UnknownTReadFromStore,
@@ -33,7 +31,7 @@ export type UseSkipLimitReturnValue<
33
31
  readonly kind: 'Complete';
34
32
  readonly fetchMore: (
35
33
  count: number,
36
- fetchOptions?: FetchOptions<ReadonlyArray<TItem>>,
34
+ fetchOptions?: FetchOptions<ReadonlyArray<TItem>, never>,
37
35
  ) => void;
38
36
  readonly results: ReadonlyArray<TItem>;
39
37
  }
@@ -128,7 +126,6 @@ export function useSkipLimitPagination<
128
126
  startUpdate: getOrCreateCachedStartUpdate(
129
127
  environment,
130
128
  fragmentReference,
131
- readerWithRefetchQueries.readerArtifact.kind,
132
129
  networkRequestOptions,
133
130
  ),
134
131
  }
@@ -197,7 +194,7 @@ export function useSkipLimitPagination<
197
194
  (loadedSoFar: number) =>
198
195
  (
199
196
  count: number,
200
- fetchOptions?: FetchOptions<ReadonlyArray<TItem>>,
197
+ fetchOptions?: FetchOptions<ReadonlyArray<TItem>, never>,
201
198
  ): void => {
202
199
  const loadedField = loadableField(
203
200
  {
@@ -249,7 +246,7 @@ export function useSkipLimitPagination<
249
246
  const mostRecentFragmentReference =
250
247
  mostRecentItem?.[0].getItemIfNotDisposed();
251
248
 
252
- if (mostRecentItem && mostRecentFragmentReference === null) {
249
+ if (mostRecentItem != null && mostRecentFragmentReference == null) {
253
250
  throw new Error(
254
251
  'FragmentReference is unexpectedly disposed. \
255
252
  This is indicative of a bug in Isograph.',
@@ -257,11 +254,15 @@ export function useSkipLimitPagination<
257
254
  }
258
255
 
259
256
  const networkRequestStatus =
260
- mostRecentFragmentReference &&
261
- getPromiseState(mostRecentFragmentReference.networkRequest);
257
+ mostRecentFragmentReference != null
258
+ ? {
259
+ mostRecentFragmentReference,
260
+ state: getPromiseState(mostRecentFragmentReference.networkRequest),
261
+ }
262
+ : null;
262
263
 
263
264
  const slicedFragmentReferences =
264
- networkRequestStatus?.kind === 'Ok'
265
+ networkRequestStatus?.state?.kind === 'Ok'
265
266
  ? loadedReferences
266
267
  : loadedReferences.slice(0, loadedReferences.length - 1);
267
268
 
@@ -291,7 +292,7 @@ export function useSkipLimitPagination<
291
292
  subscribeCompletedFragmentReferences(completedFragmentReferences),
292
293
  );
293
294
 
294
- if (!networkRequestStatus) {
295
+ if (networkRequestStatus == null) {
295
296
  return {
296
297
  kind: 'Complete',
297
298
  fetchMore: getFetchMore(initialState?.skip ?? 0),
@@ -299,7 +300,7 @@ export function useSkipLimitPagination<
299
300
  };
300
301
  }
301
302
 
302
- switch (networkRequestStatus.kind) {
303
+ switch (networkRequestStatus.state.kind) {
303
304
  case 'Pending': {
304
305
  const unsubscribe = subscribeToAnyChange(environment, () => {
305
306
  unsubscribe();
@@ -308,12 +309,12 @@ export function useSkipLimitPagination<
308
309
 
309
310
  return {
310
311
  kind: 'Pending',
311
- pendingFragment: mostRecentFragmentReference,
312
+ pendingFragment: networkRequestStatus.mostRecentFragmentReference,
312
313
  results: readCompletedFragmentReferences(completedFragmentReferences),
313
314
  };
314
315
  }
315
316
  case 'Err': {
316
- throw networkRequestStatus.error;
317
+ throw networkRequestStatus.state.error;
317
318
  }
318
319
  case 'Ok': {
319
320
  const results = readCompletedFragmentReferences(
@@ -1,3 +1,4 @@
1
+ import type { NetworkResponseObject } from '../core/cache';
1
2
  import {
2
3
  type ExtractReadFromStore,
3
4
  type IsographEntrypoint,
@@ -8,7 +9,8 @@ import { useResult } from './useResult';
8
9
 
9
10
  export function FragmentReader<
10
11
  TResult,
11
- TEntrypoint extends IsographEntrypoint<any, TResult, any>,
12
+ TRawResponseType extends NetworkResponseObject,
13
+ TEntrypoint extends IsographEntrypoint<any, TResult, any, TRawResponseType>,
12
14
  TChildrenResult,
13
15
  >({
14
16
  fragmentReference,
@@ -6,6 +6,7 @@ import {
6
6
  import { type FragmentReference } from '../core/FragmentReference';
7
7
  import { type NetworkRequestReaderOptions } from '../core/read';
8
8
  import { useResult } from './useResult';
9
+ import type { NetworkResponseObject } from '../core/cache';
9
10
 
10
11
  export type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
11
12
  ? JSX.IntrinsicAttributes extends T
@@ -15,7 +16,13 @@ export type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
15
16
 
16
17
  export function FragmentRenderer<
17
18
  TProps extends Record<any, any>,
18
- TEntrypoint extends IsographEntrypoint<any, React.FC<TProps>, any>,
19
+ TRawResponseType extends NetworkResponseObject,
20
+ TEntrypoint extends IsographEntrypoint<
21
+ any,
22
+ React.FC<TProps>,
23
+ any,
24
+ TRawResponseType
25
+ >,
19
26
  >(
20
27
  props: IsExactlyIntrinsicAttributes<TProps> extends true
21
28
  ? {
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- import { createContext, ReactNode, useContext } from 'react';
2
+ import type { ReactNode } from 'react';
3
+ import { createContext, useContext } from 'react';
3
4
  import { type IsographEnvironment } from '../core/IsographEnvironment';
4
5
 
5
6
  export const IsographEnvironmentContext =
@@ -1,32 +1,49 @@
1
+ import React from 'react';
1
2
  import { type FetchOptions } from '../core/check';
2
- import {
3
- ExtractParameters,
4
- type UnknownTReadFromStore,
5
- } from '../core/FragmentReference';
3
+ import type { ExtractParameters } from '../core/FragmentReference';
4
+ import { type UnknownTReadFromStore } from '../core/FragmentReference';
6
5
  import { type NetworkRequestReaderOptions } from '../core/read';
7
6
  import { type LoadableField } from '../core/reader';
8
7
  import { useClientSideDefer } from '../loadable-hooks/useClientSideDefer';
9
8
  import { useResult } from './useResult';
10
9
 
10
+ type ArgsWithoutProvidedArgs<
11
+ TReadFromStore extends UnknownTReadFromStore,
12
+ TProvidedArgs extends object,
13
+ > = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
14
+
15
+ type MaybeRequiredArgs<
16
+ TReadFromStore extends UnknownTReadFromStore,
17
+ TProvidedArgs extends object,
18
+ > =
19
+ {} extends ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>
20
+ ? {
21
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
22
+ }
23
+ : {
24
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
25
+ };
26
+
11
27
  export function LoadableFieldReader<
12
28
  TReadFromStore extends UnknownTReadFromStore,
13
29
  TResult,
14
30
  TProvidedArgs extends object,
15
31
  TChildrenResult,
16
- >(props: {
17
- loadableField: LoadableField<
18
- TReadFromStore,
19
- TResult,
20
- Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
21
- >;
22
- // TODO we can improve this to not require args if its an empty object
23
- args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
24
- fetchOptions?: FetchOptions<TResult>;
25
- networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
26
- children: (arg: TResult) => TChildrenResult;
27
- }): TChildrenResult {
32
+ >(
33
+ props: {
34
+ loadableField: LoadableField<
35
+ TReadFromStore,
36
+ TResult,
37
+ Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
38
+ >;
39
+ fetchOptions?: FetchOptions<TResult, never>;
40
+ networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
41
+ children: (arg: TResult) => TChildrenResult;
42
+ } & MaybeRequiredArgs<TReadFromStore, TProvidedArgs>,
43
+ ): TChildrenResult {
28
44
  const { fragmentReference } = useClientSideDefer(
29
45
  props.loadableField,
46
+ // @ts-expect-error
30
47
  props.args,
31
48
  props.fetchOptions,
32
49
  );
@@ -38,3 +55,95 @@ export function LoadableFieldReader<
38
55
 
39
56
  return props.children(readOutFragmentData);
40
57
  }
58
+
59
+ // @ts-ignore
60
+ function tsTests() {
61
+ let neverArgs!: LoadableField<
62
+ {
63
+ parameters: Record<string, never>;
64
+ data: {};
65
+ },
66
+ unknown
67
+ >;
68
+
69
+ let optionalArgs!: LoadableField<
70
+ {
71
+ parameters: {
72
+ foo?: string;
73
+ };
74
+ data: {};
75
+ },
76
+ unknown
77
+ >;
78
+
79
+ let requiredArgs!: LoadableField<
80
+ {
81
+ parameters: {
82
+ foo: string;
83
+ };
84
+ data: {};
85
+ },
86
+ unknown
87
+ >;
88
+
89
+ <LoadableFieldReader loadableField={neverArgs} children={() => {}} />;
90
+ <LoadableFieldReader
91
+ loadableField={neverArgs}
92
+ children={() => {}}
93
+ args={{}}
94
+ />;
95
+ <LoadableFieldReader
96
+ loadableField={neverArgs}
97
+ children={() => {}}
98
+ args={{
99
+ // @ts-expect-error
100
+ foo: 'bar',
101
+ }}
102
+ />;
103
+
104
+ <LoadableFieldReader loadableField={optionalArgs} children={() => {}} />;
105
+ <LoadableFieldReader
106
+ loadableField={optionalArgs}
107
+ children={() => {}}
108
+ args={{}}
109
+ />;
110
+ <LoadableFieldReader
111
+ loadableField={optionalArgs}
112
+ children={() => {}}
113
+ args={{
114
+ foo: 'bar',
115
+ }}
116
+ />;
117
+ <LoadableFieldReader
118
+ loadableField={optionalArgs}
119
+ children={() => {}}
120
+ args={{
121
+ // @ts-expect-error
122
+ foo: 12,
123
+ }}
124
+ />;
125
+
126
+ // @ts-expect-error
127
+ <LoadableFieldReader loadableField={requiredArgs} children={() => {}} />;
128
+ <LoadableFieldReader
129
+ loadableField={requiredArgs}
130
+ children={() => {}}
131
+ // @ts-expect-error
132
+ args={{}}
133
+ />;
134
+ <LoadableFieldReader
135
+ loadableField={requiredArgs}
136
+ children={() => {}}
137
+ args={{
138
+ foo: 'bar',
139
+ }}
140
+ />;
141
+ <LoadableFieldReader
142
+ loadableField={requiredArgs}
143
+ children={() => {}}
144
+ args={{
145
+ // @ts-expect-error
146
+ foo: 12,
147
+ }}
148
+ />;
149
+ }