@apollo/client 3.9.0-alpha.4 → 3.9.0-alpha.5

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 (687) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/beige-geese-wink.md +5 -0
  3. package/.changeset/breezy-spiders-tap.md +38 -0
  4. package/.changeset/clean-items-smash.md +5 -0
  5. package/.changeset/cold-llamas-turn.md +8 -0
  6. package/.changeset/config.json +14 -0
  7. package/.changeset/dirty-kids-crash.md +5 -0
  8. package/.changeset/forty-cups-shop.md +5 -0
  9. package/.changeset/friendly-clouds-laugh.md +7 -0
  10. package/.changeset/hot-ducks-burn.md +5 -0
  11. package/.changeset/polite-avocados-warn.md +5 -0
  12. package/.changeset/pre.json +29 -0
  13. package/.changeset/quick-hats-marry.md +5 -0
  14. package/.changeset/shaggy-ears-scream.md +5 -0
  15. package/.changeset/shaggy-sheep-pull.md +5 -0
  16. package/.changeset/sixty-boxes-rest.md +8 -0
  17. package/.changeset/sour-sheep-walk.md +7 -0
  18. package/.changeset/strong-terms-perform.md +46 -0
  19. package/.changeset/thick-mice-collect.md +5 -0
  20. package/.changeset/thirty-ties-arrive.md +26 -0
  21. package/.changeset/violet-lions-draw.md +5 -0
  22. package/.changeset/wild-dolphins-jog.md +5 -0
  23. package/.changeset/yellow-flies-repeat.md +5 -0
  24. package/CHANGELOG.md +3535 -0
  25. package/apollo-client.cjs +475 -398
  26. package/apollo-client.cjs.map +1 -1
  27. package/apollo-client.min.cjs +1 -1
  28. package/cache/cache.cjs +135 -153
  29. package/cache/cache.cjs.map +1 -1
  30. package/cache/cache.cjs.native.js +135 -153
  31. package/cache/core/cache.d.ts +10 -0
  32. package/cache/core/cache.js +17 -5
  33. package/cache/core/cache.js.map +1 -1
  34. package/cache/core/types/Cache.d.ts +1 -1
  35. package/cache/core/types/Cache.js.map +1 -1
  36. package/cache/core/types/DataProxy.d.ts +92 -0
  37. package/cache/core/types/common.d.ts +1 -1
  38. package/cache/core/types/common.js +4 -1
  39. package/cache/core/types/common.js.map +1 -1
  40. package/cache/inmemory/entityStore.d.ts +10 -1
  41. package/cache/inmemory/entityStore.js +190 -29
  42. package/cache/inmemory/entityStore.js.map +1 -1
  43. package/cache/inmemory/fixPolyfills.js +9 -0
  44. package/cache/inmemory/fixPolyfills.js.map +1 -1
  45. package/cache/inmemory/fixPolyfills.native.js +12 -0
  46. package/cache/inmemory/fixPolyfills.native.js.map +1 -1
  47. package/cache/inmemory/fragmentRegistry.d.ts +1 -0
  48. package/cache/inmemory/fragmentRegistry.js +23 -14
  49. package/cache/inmemory/fragmentRegistry.js.map +1 -1
  50. package/cache/inmemory/helpers.js +20 -11
  51. package/cache/inmemory/helpers.js.map +1 -1
  52. package/cache/inmemory/inMemoryCache.js +164 -8
  53. package/cache/inmemory/inMemoryCache.js.map +1 -1
  54. package/cache/inmemory/key-extractor.js +72 -4
  55. package/cache/inmemory/key-extractor.js.map +1 -1
  56. package/cache/inmemory/object-canon.js +87 -3
  57. package/cache/inmemory/object-canon.js.map +1 -1
  58. package/cache/inmemory/policies.js +190 -43
  59. package/cache/inmemory/policies.js.map +1 -1
  60. package/cache/inmemory/reactiveVars.js +20 -2
  61. package/cache/inmemory/reactiveVars.js.map +1 -1
  62. package/cache/inmemory/readFromStore.d.ts +4 -0
  63. package/cache/inmemory/readFromStore.js +58 -9
  64. package/cache/inmemory/readFromStore.js.map +1 -1
  65. package/cache/inmemory/types.d.ts +28 -0
  66. package/cache/inmemory/types.js.map +1 -1
  67. package/cache/inmemory/writeToStore.js +152 -25
  68. package/cache/inmemory/writeToStore.js.map +1 -1
  69. package/config/jest/setup.js +2 -0
  70. package/config/jest/setup.js.map +1 -1
  71. package/core/ApolloClient.d.ts +264 -3
  72. package/core/ApolloClient.js +235 -7
  73. package/core/ApolloClient.js.map +1 -1
  74. package/core/LocalState.d.ts +4 -6
  75. package/core/LocalState.js +56 -18
  76. package/core/LocalState.js.map +1 -1
  77. package/core/ObservableQuery.d.ts +25 -0
  78. package/core/ObservableQuery.js +239 -30
  79. package/core/ObservableQuery.js.map +1 -1
  80. package/core/QueryInfo.d.ts +3 -3
  81. package/core/QueryInfo.js +118 -13
  82. package/core/QueryInfo.js.map +1 -1
  83. package/core/QueryManager.d.ts +8 -1
  84. package/core/QueryManager.js +247 -46
  85. package/core/QueryManager.js.map +1 -1
  86. package/core/core.cjs +127 -114
  87. package/core/core.cjs.map +1 -1
  88. package/core/core.cjs.native.js +127 -114
  89. package/core/equalByQuery.js +20 -1
  90. package/core/equalByQuery.js.map +1 -1
  91. package/core/index.d.ts +1 -1
  92. package/core/index.js +19 -0
  93. package/core/index.js.map +1 -1
  94. package/core/networkStatus.d.ts +39 -0
  95. package/core/networkStatus.js +39 -0
  96. package/core/networkStatus.js.map +1 -1
  97. package/core/types.d.ts +9 -0
  98. package/core/types.js.map +1 -1
  99. package/core/watchQueryOptions.d.ts +225 -1
  100. package/core/watchQueryOptions.js.map +1 -1
  101. package/dev/dev.cjs +10 -119
  102. package/dev/dev.cjs.map +1 -1
  103. package/dev/dev.cjs.native.js +10 -119
  104. package/dev/loadErrorMessageHandler.js.map +1 -1
  105. package/errors/errors.cjs +1 -1
  106. package/errors/errors.cjs.map +1 -1
  107. package/errors/errors.cjs.native.js +1 -1
  108. package/errors/index.js +14 -1
  109. package/errors/index.js.map +1 -1
  110. package/invariantErrorCodes.js +6 -8
  111. package/link/batch/batch.cjs +2 -2
  112. package/link/batch/batch.cjs.map +1 -1
  113. package/link/batch/batch.cjs.native.js +2 -2
  114. package/link/batch/batchLink.d.ts +21 -0
  115. package/link/batch/batchLink.js +2 -1
  116. package/link/batch/batchLink.js.map +1 -1
  117. package/link/batch/batching.js +24 -1
  118. package/link/batch/batching.js.map +1 -1
  119. package/link/batch-http/batch-http.cjs +3 -2
  120. package/link/batch-http/batch-http.cjs.map +1 -1
  121. package/link/batch-http/batch-http.cjs.native.js +3 -2
  122. package/link/batch-http/batchHttpLink.d.ts +4 -0
  123. package/link/batch-http/batchHttpLink.js +53 -2
  124. package/link/batch-http/batchHttpLink.js.map +1 -1
  125. package/link/context/context.cjs.map +1 -1
  126. package/link/context/index.js +1 -0
  127. package/link/context/index.js.map +1 -1
  128. package/link/core/ApolloLink.js +12 -5
  129. package/link/core/ApolloLink.js.map +1 -1
  130. package/link/core/core.cjs +5 -5
  131. package/link/core/core.cjs.map +1 -1
  132. package/link/core/core.cjs.native.js +5 -5
  133. package/link/error/error.cjs +1 -1
  134. package/link/error/error.cjs.map +1 -1
  135. package/link/error/error.cjs.native.js +1 -1
  136. package/link/error/index.d.ts +3 -0
  137. package/link/error/index.js +4 -1
  138. package/link/error/index.js.map +1 -1
  139. package/link/http/HttpLink.d.ts +0 -2
  140. package/link/http/HttpLink.js +1 -1
  141. package/link/http/HttpLink.js.map +1 -1
  142. package/link/http/checkFetcher.js.map +1 -1
  143. package/link/http/createHttpLink.js +23 -1
  144. package/link/http/createHttpLink.js.map +1 -1
  145. package/link/http/createSignalIfSupported.d.ts +5 -0
  146. package/link/http/createSignalIfSupported.js +5 -0
  147. package/link/http/createSignalIfSupported.js.map +1 -1
  148. package/link/http/http.cjs +14 -12
  149. package/link/http/http.cjs.map +1 -1
  150. package/link/http/http.cjs.native.js +14 -12
  151. package/link/http/index.js +2 -1
  152. package/link/http/index.js.map +1 -1
  153. package/link/http/iterators/async.d.ts +4 -0
  154. package/link/http/iterators/async.js +4 -0
  155. package/link/http/iterators/async.js.map +1 -1
  156. package/link/http/iterators/nodeStream.d.ts +4 -0
  157. package/link/http/iterators/nodeStream.js +4 -0
  158. package/link/http/iterators/nodeStream.js.map +1 -1
  159. package/link/http/iterators/promise.d.ts +4 -0
  160. package/link/http/iterators/promise.js +4 -0
  161. package/link/http/iterators/promise.js.map +1 -1
  162. package/link/http/iterators/reader.d.ts +4 -0
  163. package/link/http/iterators/reader.js +4 -0
  164. package/link/http/iterators/reader.js.map +1 -1
  165. package/link/http/parseAndCheckHttpResponse.js +51 -10
  166. package/link/http/parseAndCheckHttpResponse.js.map +1 -1
  167. package/link/http/responseIterator.d.ts +4 -0
  168. package/link/http/responseIterator.js +6 -0
  169. package/link/http/responseIterator.js.map +1 -1
  170. package/link/http/rewriteURIForGET.d.ts +1 -1
  171. package/link/http/rewriteURIForGET.js +10 -0
  172. package/link/http/rewriteURIForGET.js.map +1 -1
  173. package/link/http/selectHttpOptionsAndBody.d.ts +45 -0
  174. package/link/http/selectHttpOptionsAndBody.js +23 -0
  175. package/link/http/selectHttpOptionsAndBody.js.map +1 -1
  176. package/link/http/selectURI.js.map +1 -1
  177. package/link/http/serializeFetchParameter.js.map +1 -1
  178. package/link/persisted-queries/index.js +34 -4
  179. package/link/persisted-queries/index.js.map +1 -1
  180. package/link/persisted-queries/persisted-queries.cjs +4 -4
  181. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  182. package/link/persisted-queries/persisted-queries.cjs.native.js +4 -4
  183. package/link/remove-typename/remove-typename.cjs +12 -9
  184. package/link/remove-typename/remove-typename.cjs.map +1 -1
  185. package/link/remove-typename/remove-typename.cjs.native.js +12 -9
  186. package/link/remove-typename/removeTypenameFromVariables.js +12 -9
  187. package/link/remove-typename/removeTypenameFromVariables.js.map +1 -1
  188. package/link/retry/delayFunction.d.ts +29 -0
  189. package/link/retry/delayFunction.js +6 -0
  190. package/link/retry/delayFunction.js.map +1 -1
  191. package/link/retry/retry.cjs +5 -5
  192. package/link/retry/retry.cjs.map +1 -1
  193. package/link/retry/retry.cjs.native.js +5 -5
  194. package/link/retry/retryFunction.d.ts +20 -0
  195. package/link/retry/retryLink.d.ts +6 -0
  196. package/link/retry/retryLink.js +31 -6
  197. package/link/retry/retryLink.js.map +1 -1
  198. package/link/schema/index.d.ts +13 -0
  199. package/link/schema/index.js +3 -3
  200. package/link/schema/index.js.map +1 -1
  201. package/link/schema/schema.cjs +3 -3
  202. package/link/schema/schema.cjs.map +1 -1
  203. package/link/schema/schema.cjs.native.js +3 -3
  204. package/link/subscriptions/index.js +35 -2
  205. package/link/subscriptions/index.js.map +1 -1
  206. package/link/subscriptions/subscriptions.cjs +3 -2
  207. package/link/subscriptions/subscriptions.cjs.map +1 -1
  208. package/link/subscriptions/subscriptions.cjs.native.js +3 -2
  209. package/link/utils/createOperation.js.map +1 -1
  210. package/link/utils/filterOperationVariables.js +4 -0
  211. package/link/utils/filterOperationVariables.js.map +1 -1
  212. package/link/utils/toPromise.js.map +1 -1
  213. package/link/utils/transformOperation.js +3 -2
  214. package/link/utils/transformOperation.js.map +1 -1
  215. package/link/utils/utils.cjs +2 -2
  216. package/link/utils/utils.cjs.map +1 -1
  217. package/link/utils/utils.cjs.native.js +2 -2
  218. package/link/utils/validateOperation.js.map +1 -1
  219. package/link/ws/index.d.ts +12 -0
  220. package/link/ws/index.js +1 -1
  221. package/link/ws/index.js.map +1 -1
  222. package/link/ws/ws.cjs +1 -1
  223. package/link/ws/ws.cjs.map +1 -1
  224. package/link/ws/ws.cjs.native.js +1 -1
  225. package/package.json +50 -38
  226. package/react/cache/QueryReference.d.ts +18 -10
  227. package/react/cache/QueryReference.js +52 -8
  228. package/react/cache/QueryReference.js.map +1 -1
  229. package/react/cache/SuspenseCache.d.ts +10 -0
  230. package/react/cache/SuspenseCache.js +1 -2
  231. package/react/cache/SuspenseCache.js.map +1 -1
  232. package/react/cache/getSuspenseCache.js.map +1 -1
  233. package/react/cache/types.d.ts +3 -0
  234. package/react/cache/types.js.map +1 -1
  235. package/react/context/ApolloContext.d.ts +5 -0
  236. package/react/context/ApolloContext.js +10 -3
  237. package/react/context/ApolloContext.js.map +1 -1
  238. package/react/context/context.cjs +1 -3
  239. package/react/context/context.cjs.map +1 -1
  240. package/react/context/context.cjs.native.js +1 -3
  241. package/react/hoc/graphql.js.map +1 -1
  242. package/react/hoc/hoc-utils.js +3 -1
  243. package/react/hoc/hoc-utils.js.map +1 -1
  244. package/react/hoc/hoc.cjs +9 -17
  245. package/react/hoc/hoc.cjs.map +1 -1
  246. package/react/hoc/hoc.cjs.native.js +9 -17
  247. package/react/hoc/mutation-hoc.js +9 -4
  248. package/react/hoc/mutation-hoc.js.map +1 -1
  249. package/react/hoc/query-hoc.js +10 -4
  250. package/react/hoc/query-hoc.js.map +1 -1
  251. package/react/hoc/subscription-hoc.js +10 -4
  252. package/react/hoc/subscription-hoc.js.map +1 -1
  253. package/react/hoc/withApollo.js +3 -4
  254. package/react/hoc/withApollo.js.map +1 -1
  255. package/react/hooks/hooks.cjs +138 -66
  256. package/react/hooks/hooks.cjs.map +1 -1
  257. package/react/hooks/hooks.cjs.native.js +138 -66
  258. package/react/hooks/index.d.ts +2 -0
  259. package/react/hooks/index.js +1 -0
  260. package/react/hooks/index.js.map +1 -1
  261. package/react/hooks/internal/__use.js +5 -0
  262. package/react/hooks/internal/__use.js.map +1 -1
  263. package/react/hooks/internal/index.d.ts +1 -0
  264. package/react/hooks/internal/index.js +2 -0
  265. package/react/hooks/internal/index.js.map +1 -1
  266. package/react/hooks/internal/useDeepMemo.js.map +1 -1
  267. package/react/hooks/internal/useIsomorphicLayoutEffect.js +6 -3
  268. package/react/hooks/internal/useIsomorphicLayoutEffect.js.map +1 -1
  269. package/react/hooks/internal/useRenderGuard.d.ts +2 -0
  270. package/react/hooks/internal/useRenderGuard.js +17 -0
  271. package/react/hooks/internal/useRenderGuard.js.map +1 -0
  272. package/react/hooks/useBackgroundQuery.js +14 -11
  273. package/react/hooks/useBackgroundQuery.js.map +1 -1
  274. package/react/hooks/useFragment.js +4 -3
  275. package/react/hooks/useFragment.js.map +1 -1
  276. package/react/hooks/useLazyQuery.js +13 -4
  277. package/react/hooks/useLazyQuery.js.map +1 -1
  278. package/react/hooks/useLoadableQuery.d.ts +30 -0
  279. package/react/hooks/useLoadableQuery.js +61 -0
  280. package/react/hooks/useLoadableQuery.js.map +1 -0
  281. package/react/hooks/useMutation.js +8 -3
  282. package/react/hooks/useMutation.js.map +1 -1
  283. package/react/hooks/useQuery.d.ts +11 -0
  284. package/react/hooks/useQuery.js +138 -6
  285. package/react/hooks/useQuery.js.map +1 -1
  286. package/react/hooks/useReactiveVar.js +5 -0
  287. package/react/hooks/useReactiveVar.js.map +1 -1
  288. package/react/hooks/useReadQuery.d.ts +19 -0
  289. package/react/hooks/useReadQuery.js +4 -10
  290. package/react/hooks/useReadQuery.js.map +1 -1
  291. package/react/hooks/useSubscription.js +5 -0
  292. package/react/hooks/useSubscription.js.map +1 -1
  293. package/react/hooks/useSuspenseQuery.js +22 -22
  294. package/react/hooks/useSuspenseQuery.js.map +1 -1
  295. package/react/hooks/useSyncExternalStore.js +53 -1
  296. package/react/hooks/useSyncExternalStore.js.map +1 -1
  297. package/react/parser/index.d.ts +3 -0
  298. package/react/parser/index.js +13 -6
  299. package/react/parser/index.js.map +1 -1
  300. package/react/parser/parser.cjs +11 -5
  301. package/react/parser/parser.cjs.map +1 -1
  302. package/react/parser/parser.cjs.native.js +11 -5
  303. package/react/ssr/RenderPromises.js +21 -1
  304. package/react/ssr/RenderPromises.js.map +1 -1
  305. package/react/ssr/getDataFromTree.js +18 -3
  306. package/react/ssr/getDataFromTree.js.map +1 -1
  307. package/react/ssr/ssr.cjs +6 -4
  308. package/react/ssr/ssr.cjs.map +1 -1
  309. package/react/ssr/ssr.cjs.native.js +6 -4
  310. package/react/types/types.d.ts +123 -1
  311. package/react/types/types.js.map +1 -1
  312. package/testing/core/core.cjs +14 -11
  313. package/testing/core/core.cjs.map +1 -1
  314. package/testing/core/core.cjs.native.js +14 -11
  315. package/testing/core/itAsync.d.ts +1 -1
  316. package/testing/core/itAsync.js.map +1 -1
  317. package/testing/core/mocking/mockFetch.d.ts +2 -2
  318. package/testing/core/mocking/mockFetch.js +8 -4
  319. package/testing/core/mocking/mockFetch.js.map +1 -1
  320. package/testing/core/mocking/mockLink.d.ts +1 -1
  321. package/testing/core/mocking/mockLink.js +17 -7
  322. package/testing/core/mocking/mockLink.js.map +1 -1
  323. package/testing/core/mocking/mockQueryManager.js +2 -0
  324. package/testing/core/mocking/mockQueryManager.js.map +1 -1
  325. package/testing/core/mocking/mockSubscriptionLink.d.ts +1 -1
  326. package/testing/core/mocking/mockSubscriptionLink.js +1 -1
  327. package/testing/core/mocking/mockSubscriptionLink.js.map +1 -1
  328. package/testing/core/mocking/mockWatchQuery.js +1 -1
  329. package/testing/core/mocking/mockWatchQuery.js.map +1 -1
  330. package/testing/core/observableToPromise.d.ts +17 -3
  331. package/testing/core/observableToPromise.js +5 -0
  332. package/testing/core/observableToPromise.js.map +1 -1
  333. package/testing/core/subscribeAndCount.js +3 -0
  334. package/testing/core/subscribeAndCount.js.map +1 -1
  335. package/testing/core/wait.js +2 -2
  336. package/testing/core/wait.js.map +1 -1
  337. package/testing/core/withConsoleSpy.d.ts +3 -0
  338. package/testing/core/withConsoleSpy.js +7 -1
  339. package/testing/core/withConsoleSpy.js.map +1 -1
  340. package/testing/core/wrap.js +2 -0
  341. package/testing/core/wrap.js.map +1 -1
  342. package/testing/internal/ObservableStream.js +14 -14
  343. package/testing/internal/ObservableStream.js.map +1 -1
  344. package/testing/internal/disposables/disableActWarnings.d.ts +10 -0
  345. package/testing/internal/disposables/disableActWarnings.js +15 -0
  346. package/testing/internal/disposables/disableActWarnings.js.map +1 -0
  347. package/testing/internal/disposables/index.d.ts +1 -0
  348. package/testing/internal/disposables/index.js +1 -0
  349. package/testing/internal/disposables/index.js.map +1 -1
  350. package/testing/internal/disposables/spyOnConsole.d.ts +1 -0
  351. package/testing/internal/disposables/spyOnConsole.js +2 -0
  352. package/testing/internal/disposables/spyOnConsole.js.map +1 -1
  353. package/testing/internal/disposables/withCleanup.d.ts +1 -0
  354. package/testing/internal/disposables/withCleanup.js +3 -0
  355. package/testing/internal/disposables/withCleanup.js.map +1 -1
  356. package/testing/internal/profile/Render.d.ts +32 -1
  357. package/testing/internal/profile/Render.js +14 -2
  358. package/testing/internal/profile/Render.js.map +1 -1
  359. package/testing/internal/profile/context.d.ts +10 -0
  360. package/testing/internal/profile/context.js +14 -0
  361. package/testing/internal/profile/context.js.map +1 -0
  362. package/testing/internal/profile/index.d.ts +2 -2
  363. package/testing/internal/profile/index.js +1 -1
  364. package/testing/internal/profile/index.js.map +1 -1
  365. package/testing/internal/profile/profile.d.ts +67 -13
  366. package/testing/internal/profile/profile.js +153 -79
  367. package/testing/internal/profile/profile.js.map +1 -1
  368. package/testing/internal/profile/traces.d.ts +4 -0
  369. package/testing/internal/profile/traces.js +9 -5
  370. package/testing/internal/profile/traces.js.map +1 -1
  371. package/testing/matchers/ProfiledComponent.js +29 -26
  372. package/testing/matchers/ProfiledComponent.js.map +1 -1
  373. package/testing/matchers/index.js +2 -0
  374. package/testing/matchers/index.js.map +1 -1
  375. package/testing/matchers/toBeGarbageCollected.d.ts +8 -0
  376. package/testing/matchers/toBeGarbageCollected.js +48 -0
  377. package/testing/matchers/toBeGarbageCollected.js.map +1 -0
  378. package/testing/matchers/toHaveSuspenseCacheEntryUsing.js.map +1 -1
  379. package/testing/matchers/toMatchDocument.js.map +1 -1
  380. package/testing/react/MockedProvider.d.ts +5 -1
  381. package/testing/react/MockedProvider.js +6 -2
  382. package/testing/react/MockedProvider.js.map +1 -1
  383. package/testing/testing.cjs +4 -2
  384. package/testing/testing.cjs.map +1 -1
  385. package/testing/testing.cjs.native.js +4 -2
  386. package/utilities/common/arrays.js +1 -0
  387. package/utilities/common/arrays.js.map +1 -1
  388. package/utilities/common/canUse.js +16 -1
  389. package/utilities/common/canUse.js.map +1 -1
  390. package/utilities/common/canonicalStringify.d.ts +17 -0
  391. package/utilities/common/canonicalStringify.js +41 -0
  392. package/utilities/common/canonicalStringify.js.map +1 -1
  393. package/utilities/common/cloneDeep.d.ts +3 -0
  394. package/utilities/common/cloneDeep.js +5 -0
  395. package/utilities/common/cloneDeep.js.map +1 -1
  396. package/utilities/common/compact.d.ts +4 -0
  397. package/utilities/common/compact.js +4 -0
  398. package/utilities/common/compact.js.map +1 -1
  399. package/utilities/common/errorHandling.js +1 -3
  400. package/utilities/common/errorHandling.js.map +1 -1
  401. package/utilities/common/incrementalResult.js +3 -0
  402. package/utilities/common/incrementalResult.js.map +1 -1
  403. package/utilities/common/makeUniqueId.js +2 -0
  404. package/utilities/common/makeUniqueId.js.map +1 -1
  405. package/utilities/common/maybeDeepFreeze.js +3 -0
  406. package/utilities/common/maybeDeepFreeze.js.map +1 -1
  407. package/utilities/common/mergeDeep.js +12 -1
  408. package/utilities/common/mergeDeep.js.map +1 -1
  409. package/utilities/common/mergeOptions.d.ts +1 -1
  410. package/utilities/common/mergeOptions.js.map +1 -1
  411. package/utilities/common/omitDeep.js.map +1 -1
  412. package/utilities/globals/global.js +7 -1
  413. package/utilities/globals/global.js.map +1 -1
  414. package/utilities/globals/globals.cjs +4 -5
  415. package/utilities/globals/globals.cjs.map +1 -1
  416. package/utilities/globals/globals.cjs.native.js +4 -5
  417. package/utilities/globals/index.d.ts +4 -0
  418. package/utilities/globals/index.js +7 -0
  419. package/utilities/globals/index.js.map +1 -1
  420. package/utilities/globals/invariantWrappers.d.ts +40 -0
  421. package/utilities/globals/invariantWrappers.js +11 -3
  422. package/utilities/globals/invariantWrappers.js.map +1 -1
  423. package/utilities/globals/maybe.js.map +1 -1
  424. package/utilities/graphql/DocumentTransform.d.ts +6 -5
  425. package/utilities/graphql/DocumentTransform.js +48 -27
  426. package/utilities/graphql/DocumentTransform.js.map +1 -1
  427. package/utilities/graphql/directives.js +3 -0
  428. package/utilities/graphql/directives.js.map +1 -1
  429. package/utilities/graphql/fragments.d.ts +25 -0
  430. package/utilities/graphql/fragments.js +36 -0
  431. package/utilities/graphql/fragments.js.map +1 -1
  432. package/utilities/graphql/getFromAST.d.ts +5 -0
  433. package/utilities/graphql/getFromAST.js +9 -0
  434. package/utilities/graphql/getFromAST.js.map +1 -1
  435. package/utilities/graphql/print.js +4 -5
  436. package/utilities/graphql/print.js.map +1 -1
  437. package/utilities/graphql/storeUtils.d.ts +14 -0
  438. package/utilities/graphql/storeUtils.js +8 -2
  439. package/utilities/graphql/storeUtils.js.map +1 -1
  440. package/utilities/graphql/transform.js +106 -7
  441. package/utilities/graphql/transform.js.map +1 -1
  442. package/utilities/index.d.ts +2 -0
  443. package/utilities/index.js.map +1 -1
  444. package/utilities/observables/Concast.d.ts +1 -1
  445. package/utilities/observables/Concast.js +85 -2
  446. package/utilities/observables/Concast.js.map +1 -1
  447. package/utilities/observables/Observable.js +6 -0
  448. package/utilities/observables/Observable.js.map +1 -1
  449. package/utilities/observables/asyncMap.js +12 -3
  450. package/utilities/observables/asyncMap.js.map +1 -1
  451. package/utilities/observables/iteration.js +3 -0
  452. package/utilities/observables/iteration.js.map +1 -1
  453. package/utilities/observables/subclassing.js +14 -0
  454. package/utilities/observables/subclassing.js.map +1 -1
  455. package/utilities/policies/pagination.js +47 -3
  456. package/utilities/policies/pagination.js.map +1 -1
  457. package/utilities/promises/decoration.js +1 -0
  458. package/utilities/promises/decoration.js.map +1 -1
  459. package/utilities/subscriptions/relay/index.js.map +1 -1
  460. package/utilities/subscriptions/relay/relay.cjs +9 -8
  461. package/utilities/subscriptions/relay/relay.cjs.map +1 -1
  462. package/utilities/subscriptions/relay/relay.cjs.native.js +9 -8
  463. package/utilities/subscriptions/urql/index.js.map +1 -1
  464. package/utilities/subscriptions/urql/urql.cjs +9 -8
  465. package/utilities/subscriptions/urql/urql.cjs.map +1 -1
  466. package/utilities/subscriptions/urql/urql.cjs.native.js +9 -8
  467. package/utilities/types/DeepOmit.js.map +1 -1
  468. package/utilities/types/DeepPartial.d.ts +1 -1
  469. package/utilities/types/DeepPartial.js +4 -0
  470. package/utilities/types/DeepPartial.js.map +1 -1
  471. package/utilities/types/IsStrictlyAny.js.map +1 -1
  472. package/utilities/types/OnlyRequiredProperties.d.ts +7 -0
  473. package/utilities/types/OnlyRequiredProperties.js +2 -0
  474. package/utilities/types/OnlyRequiredProperties.js.map +1 -0
  475. package/utilities/types/TODO.d.ts +3 -0
  476. package/utilities/types/TODO.js +2 -0
  477. package/utilities/types/TODO.js.map +1 -0
  478. package/utilities/utilities.cjs +61 -53
  479. package/utilities/utilities.cjs.map +1 -1
  480. package/utilities/utilities.cjs.native.js +61 -53
  481. package/version.js +1 -1
  482. package/cache/core/cache.d.ts.map +0 -1
  483. package/cache/core/types/Cache.d.ts.map +0 -1
  484. package/cache/core/types/DataProxy.d.ts.map +0 -1
  485. package/cache/core/types/common.d.ts.map +0 -1
  486. package/cache/index.d.ts.map +0 -1
  487. package/cache/inmemory/entityStore.d.ts.map +0 -1
  488. package/cache/inmemory/fixPolyfills.d.ts.map +0 -1
  489. package/cache/inmemory/fixPolyfills.native.d.ts.map +0 -1
  490. package/cache/inmemory/fragmentRegistry.d.ts.map +0 -1
  491. package/cache/inmemory/helpers.d.ts.map +0 -1
  492. package/cache/inmemory/inMemoryCache.d.ts.map +0 -1
  493. package/cache/inmemory/key-extractor.d.ts.map +0 -1
  494. package/cache/inmemory/object-canon.d.ts.map +0 -1
  495. package/cache/inmemory/policies.d.ts.map +0 -1
  496. package/cache/inmemory/reactiveVars.d.ts.map +0 -1
  497. package/cache/inmemory/readFromStore.d.ts.map +0 -1
  498. package/cache/inmemory/types.d.ts.map +0 -1
  499. package/cache/inmemory/writeToStore.d.ts.map +0 -1
  500. package/config/jest/setup.d.ts.map +0 -1
  501. package/core/ApolloClient.d.ts.map +0 -1
  502. package/core/LocalState.d.ts.map +0 -1
  503. package/core/ObservableQuery.d.ts.map +0 -1
  504. package/core/QueryInfo.d.ts.map +0 -1
  505. package/core/QueryManager.d.ts.map +0 -1
  506. package/core/equalByQuery.d.ts.map +0 -1
  507. package/core/index.d.ts.map +0 -1
  508. package/core/networkStatus.d.ts.map +0 -1
  509. package/core/types.d.ts.map +0 -1
  510. package/core/watchQueryOptions.d.ts.map +0 -1
  511. package/dev/index.d.ts.map +0 -1
  512. package/dev/loadDevMessages.d.ts.map +0 -1
  513. package/dev/loadErrorMessageHandler.d.ts.map +0 -1
  514. package/dev/loadErrorMessages.d.ts.map +0 -1
  515. package/errors/index.d.ts.map +0 -1
  516. package/index.d.ts.map +0 -1
  517. package/invariantErrorCodes.d.ts.map +0 -1
  518. package/link/batch/batchLink.d.ts.map +0 -1
  519. package/link/batch/batching.d.ts.map +0 -1
  520. package/link/batch/index.d.ts.map +0 -1
  521. package/link/batch-http/batchHttpLink.d.ts.map +0 -1
  522. package/link/batch-http/index.d.ts.map +0 -1
  523. package/link/context/index.d.ts.map +0 -1
  524. package/link/core/ApolloLink.d.ts.map +0 -1
  525. package/link/core/concat.d.ts.map +0 -1
  526. package/link/core/empty.d.ts.map +0 -1
  527. package/link/core/execute.d.ts.map +0 -1
  528. package/link/core/from.d.ts.map +0 -1
  529. package/link/core/index.d.ts.map +0 -1
  530. package/link/core/split.d.ts.map +0 -1
  531. package/link/core/types.d.ts.map +0 -1
  532. package/link/error/index.d.ts.map +0 -1
  533. package/link/http/HttpLink.d.ts.map +0 -1
  534. package/link/http/checkFetcher.d.ts.map +0 -1
  535. package/link/http/createHttpLink.d.ts.map +0 -1
  536. package/link/http/createSignalIfSupported.d.ts.map +0 -1
  537. package/link/http/index.d.ts.map +0 -1
  538. package/link/http/iterators/async.d.ts.map +0 -1
  539. package/link/http/iterators/nodeStream.d.ts.map +0 -1
  540. package/link/http/iterators/promise.d.ts.map +0 -1
  541. package/link/http/iterators/reader.d.ts.map +0 -1
  542. package/link/http/parseAndCheckHttpResponse.d.ts.map +0 -1
  543. package/link/http/responseIterator.d.ts.map +0 -1
  544. package/link/http/rewriteURIForGET.d.ts.map +0 -1
  545. package/link/http/selectHttpOptionsAndBody.d.ts.map +0 -1
  546. package/link/http/selectURI.d.ts.map +0 -1
  547. package/link/http/serializeFetchParameter.d.ts.map +0 -1
  548. package/link/persisted-queries/index.d.ts.map +0 -1
  549. package/link/remove-typename/index.d.ts.map +0 -1
  550. package/link/remove-typename/removeTypenameFromVariables.d.ts.map +0 -1
  551. package/link/retry/delayFunction.d.ts.map +0 -1
  552. package/link/retry/index.d.ts.map +0 -1
  553. package/link/retry/retryFunction.d.ts.map +0 -1
  554. package/link/retry/retryLink.d.ts.map +0 -1
  555. package/link/schema/index.d.ts.map +0 -1
  556. package/link/subscriptions/index.d.ts.map +0 -1
  557. package/link/utils/createOperation.d.ts.map +0 -1
  558. package/link/utils/filterOperationVariables.d.ts.map +0 -1
  559. package/link/utils/fromError.d.ts.map +0 -1
  560. package/link/utils/fromPromise.d.ts.map +0 -1
  561. package/link/utils/index.d.ts.map +0 -1
  562. package/link/utils/throwServerError.d.ts.map +0 -1
  563. package/link/utils/toPromise.d.ts.map +0 -1
  564. package/link/utils/transformOperation.d.ts.map +0 -1
  565. package/link/utils/validateOperation.d.ts.map +0 -1
  566. package/link/ws/index.d.ts.map +0 -1
  567. package/react/cache/QueryReference.d.ts.map +0 -1
  568. package/react/cache/SuspenseCache.d.ts.map +0 -1
  569. package/react/cache/getSuspenseCache.d.ts.map +0 -1
  570. package/react/cache/index.d.ts.map +0 -1
  571. package/react/cache/types.d.ts.map +0 -1
  572. package/react/components/Mutation.d.ts.map +0 -1
  573. package/react/components/Query.d.ts.map +0 -1
  574. package/react/components/Subscription.d.ts.map +0 -1
  575. package/react/components/index.d.ts.map +0 -1
  576. package/react/components/types.d.ts.map +0 -1
  577. package/react/context/ApolloConsumer.d.ts.map +0 -1
  578. package/react/context/ApolloContext.d.ts.map +0 -1
  579. package/react/context/ApolloProvider.d.ts.map +0 -1
  580. package/react/context/index.d.ts.map +0 -1
  581. package/react/hoc/graphql.d.ts.map +0 -1
  582. package/react/hoc/hoc-utils.d.ts.map +0 -1
  583. package/react/hoc/index.d.ts.map +0 -1
  584. package/react/hoc/mutation-hoc.d.ts.map +0 -1
  585. package/react/hoc/query-hoc.d.ts.map +0 -1
  586. package/react/hoc/subscription-hoc.d.ts.map +0 -1
  587. package/react/hoc/types.d.ts.map +0 -1
  588. package/react/hoc/withApollo.d.ts.map +0 -1
  589. package/react/hooks/constants.d.ts.map +0 -1
  590. package/react/hooks/index.d.ts.map +0 -1
  591. package/react/hooks/internal/__use.d.ts.map +0 -1
  592. package/react/hooks/internal/index.d.ts.map +0 -1
  593. package/react/hooks/internal/useDeepMemo.d.ts.map +0 -1
  594. package/react/hooks/internal/useIsomorphicLayoutEffect.d.ts.map +0 -1
  595. package/react/hooks/useApolloClient.d.ts.map +0 -1
  596. package/react/hooks/useBackgroundQuery.d.ts.map +0 -1
  597. package/react/hooks/useFragment.d.ts.map +0 -1
  598. package/react/hooks/useLazyQuery.d.ts.map +0 -1
  599. package/react/hooks/useMutation.d.ts.map +0 -1
  600. package/react/hooks/useQuery.d.ts.map +0 -1
  601. package/react/hooks/useReactiveVar.d.ts.map +0 -1
  602. package/react/hooks/useReadQuery.d.ts.map +0 -1
  603. package/react/hooks/useSubscription.d.ts.map +0 -1
  604. package/react/hooks/useSuspenseQuery.d.ts.map +0 -1
  605. package/react/hooks/useSyncExternalStore.d.ts.map +0 -1
  606. package/react/index.d.ts.map +0 -1
  607. package/react/parser/index.d.ts.map +0 -1
  608. package/react/ssr/RenderPromises.d.ts.map +0 -1
  609. package/react/ssr/getDataFromTree.d.ts.map +0 -1
  610. package/react/ssr/index.d.ts.map +0 -1
  611. package/react/ssr/renderToStringWithData.d.ts.map +0 -1
  612. package/react/types/types.d.ts.map +0 -1
  613. package/testing/core/index.d.ts.map +0 -1
  614. package/testing/core/itAsync.d.ts.map +0 -1
  615. package/testing/core/mocking/mockClient.d.ts.map +0 -1
  616. package/testing/core/mocking/mockFetch.d.ts.map +0 -1
  617. package/testing/core/mocking/mockLink.d.ts.map +0 -1
  618. package/testing/core/mocking/mockQueryManager.d.ts.map +0 -1
  619. package/testing/core/mocking/mockSubscriptionLink.d.ts.map +0 -1
  620. package/testing/core/mocking/mockWatchQuery.d.ts.map +0 -1
  621. package/testing/core/observableToPromise.d.ts.map +0 -1
  622. package/testing/core/subscribeAndCount.d.ts.map +0 -1
  623. package/testing/core/wait.d.ts.map +0 -1
  624. package/testing/core/withConsoleSpy.d.ts.map +0 -1
  625. package/testing/core/wrap.d.ts.map +0 -1
  626. package/testing/index.d.ts.map +0 -1
  627. package/testing/internal/ObservableStream.d.ts.map +0 -1
  628. package/testing/internal/disposables/index.d.ts.map +0 -1
  629. package/testing/internal/disposables/spyOnConsole.d.ts.map +0 -1
  630. package/testing/internal/disposables/withCleanup.d.ts.map +0 -1
  631. package/testing/internal/index.d.ts.map +0 -1
  632. package/testing/internal/profile/Render.d.ts.map +0 -1
  633. package/testing/internal/profile/index.d.ts.map +0 -1
  634. package/testing/internal/profile/profile.d.ts.map +0 -1
  635. package/testing/internal/profile/traces.d.ts.map +0 -1
  636. package/testing/matchers/ProfiledComponent.d.ts.map +0 -1
  637. package/testing/matchers/index.d.ts.map +0 -1
  638. package/testing/matchers/toHaveSuspenseCacheEntryUsing.d.ts.map +0 -1
  639. package/testing/matchers/toMatchDocument.d.ts.map +0 -1
  640. package/testing/react/MockedProvider.d.ts.map +0 -1
  641. package/utilities/common/arrays.d.ts.map +0 -1
  642. package/utilities/common/canUse.d.ts.map +0 -1
  643. package/utilities/common/canonicalStringify.d.ts.map +0 -1
  644. package/utilities/common/cloneDeep.d.ts.map +0 -1
  645. package/utilities/common/compact.d.ts.map +0 -1
  646. package/utilities/common/errorHandling.d.ts.map +0 -1
  647. package/utilities/common/filterInPlace.d.ts +0 -2
  648. package/utilities/common/filterInPlace.d.ts.map +0 -1
  649. package/utilities/common/filterInPlace.js +0 -11
  650. package/utilities/common/filterInPlace.js.map +0 -1
  651. package/utilities/common/incrementalResult.d.ts.map +0 -1
  652. package/utilities/common/makeUniqueId.d.ts.map +0 -1
  653. package/utilities/common/maybeDeepFreeze.d.ts.map +0 -1
  654. package/utilities/common/mergeDeep.d.ts.map +0 -1
  655. package/utilities/common/mergeOptions.d.ts.map +0 -1
  656. package/utilities/common/objects.d.ts.map +0 -1
  657. package/utilities/common/omitDeep.d.ts.map +0 -1
  658. package/utilities/common/stringifyForDisplay.d.ts.map +0 -1
  659. package/utilities/common/stripTypename.d.ts.map +0 -1
  660. package/utilities/globals/global.d.ts.map +0 -1
  661. package/utilities/globals/index.d.ts.map +0 -1
  662. package/utilities/globals/invariantWrappers.d.ts.map +0 -1
  663. package/utilities/globals/maybe.d.ts.map +0 -1
  664. package/utilities/graphql/DocumentTransform.d.ts.map +0 -1
  665. package/utilities/graphql/directives.d.ts.map +0 -1
  666. package/utilities/graphql/fragments.d.ts.map +0 -1
  667. package/utilities/graphql/getFromAST.d.ts.map +0 -1
  668. package/utilities/graphql/operations.d.ts.map +0 -1
  669. package/utilities/graphql/print.d.ts.map +0 -1
  670. package/utilities/graphql/storeUtils.d.ts.map +0 -1
  671. package/utilities/graphql/transform.d.ts.map +0 -1
  672. package/utilities/index.d.ts.map +0 -1
  673. package/utilities/observables/Concast.d.ts.map +0 -1
  674. package/utilities/observables/Observable.d.ts.map +0 -1
  675. package/utilities/observables/asyncMap.d.ts.map +0 -1
  676. package/utilities/observables/iteration.d.ts.map +0 -1
  677. package/utilities/observables/subclassing.d.ts.map +0 -1
  678. package/utilities/policies/pagination.d.ts.map +0 -1
  679. package/utilities/promises/decoration.d.ts.map +0 -1
  680. package/utilities/subscriptions/relay/index.d.ts.map +0 -1
  681. package/utilities/subscriptions/shared.d.ts.map +0 -1
  682. package/utilities/subscriptions/urql/index.d.ts.map +0 -1
  683. package/utilities/types/DeepOmit.d.ts.map +0 -1
  684. package/utilities/types/DeepPartial.d.ts.map +0 -1
  685. package/utilities/types/IsStrictlyAny.d.ts.map +0 -1
  686. package/utilities/types/Primitive.d.ts.map +0 -1
  687. package/version.d.ts.map +0 -1
@@ -2,27 +2,35 @@ import { Trie } from "@wry/trie";
2
2
  import { canUseWeakMap, canUseWeakSet } from "../common/canUse.js";
3
3
  import { checkDocument } from "./getFromAST.js";
4
4
  import { invariant } from "../globals/index.js";
5
+ import { WeakCache } from "@wry/caches";
6
+ import { wrap } from "optimism";
5
7
  function identity(document) {
6
8
  return document;
7
9
  }
8
- var DocumentTransform = (function () {
10
+ var DocumentTransform = /** @class */ (function () {
9
11
  function DocumentTransform(transform, options) {
10
12
  if (options === void 0) { options = Object.create(null); }
11
- this.resultCache = canUseWeakSet
12
- ? new WeakSet()
13
- : new Set();
13
+ this.resultCache = canUseWeakSet ? new WeakSet() : new Set();
14
14
  this.transform = transform;
15
15
  if (options.getCacheKey) {
16
+ // Override default `getCacheKey` function, which returns [document].
16
17
  this.getCacheKey = options.getCacheKey;
17
18
  }
18
- if (options.cache !== false) {
19
- this.stableCacheKeys = new Trie(canUseWeakMap, function (key) { return ({ key: key }); });
20
- }
19
+ this.cached = options.cache !== false;
20
+ this.resetCache();
21
21
  }
22
+ // This default implementation of getCacheKey can be overridden by providing
23
+ // options.getCacheKey to the DocumentTransform constructor. In general, a
24
+ // getCacheKey function may either return an array of keys (often including
25
+ // the document) to be used as a cache key, or undefined to indicate the
26
+ // transform for this document should not be cached.
22
27
  DocumentTransform.prototype.getCacheKey = function (document) {
23
28
  return [document];
24
29
  };
25
30
  DocumentTransform.identity = function () {
31
+ // No need to cache this transform since it just returns the document
32
+ // unchanged. This should save a bit of memory that would otherwise be
33
+ // needed to populate the `documentCache` of this transform.
26
34
  return new DocumentTransform(identity, { cache: false });
27
35
  };
28
36
  DocumentTransform.split = function (predicate, left, right) {
@@ -30,38 +38,51 @@ var DocumentTransform = (function () {
30
38
  return new DocumentTransform(function (document) {
31
39
  var documentTransform = predicate(document) ? left : right;
32
40
  return documentTransform.transformDocument(document);
33
- }, { cache: false });
41
+ },
42
+ // Reasonably assume both `left` and `right` transforms handle their own caching
43
+ { cache: false });
44
+ };
45
+ /**
46
+ * Resets the internal cache of this transform, if it has one.
47
+ */
48
+ DocumentTransform.prototype.resetCache = function () {
49
+ var _this = this;
50
+ if (this.cached) {
51
+ var stableCacheKeys_1 = new Trie(canUseWeakMap);
52
+ this.performWork = wrap(DocumentTransform.prototype.performWork.bind(this), {
53
+ makeCacheKey: function (document) {
54
+ var cacheKeys = _this.getCacheKey(document);
55
+ if (cacheKeys) {
56
+ invariant(Array.isArray(cacheKeys), 66);
57
+ return stableCacheKeys_1.lookupArray(cacheKeys);
58
+ }
59
+ },
60
+ max: 1000 /** TODO: decide on a maximum size (will do all max sizes in a combined separate PR) */,
61
+ cache: (WeakCache),
62
+ });
63
+ }
64
+ };
65
+ DocumentTransform.prototype.performWork = function (document) {
66
+ checkDocument(document);
67
+ return this.transform(document);
34
68
  };
35
69
  DocumentTransform.prototype.transformDocument = function (document) {
70
+ // If a user passes an already transformed result back to this function,
71
+ // immediately return it.
36
72
  if (this.resultCache.has(document)) {
37
73
  return document;
38
74
  }
39
- var cacheEntry = this.getStableCacheEntry(document);
40
- if (cacheEntry && cacheEntry.value) {
41
- return cacheEntry.value;
42
- }
43
- checkDocument(document);
44
- var transformedDocument = this.transform(document);
75
+ var transformedDocument = this.performWork(document);
45
76
  this.resultCache.add(transformedDocument);
46
- if (cacheEntry) {
47
- cacheEntry.value = transformedDocument;
48
- }
49
77
  return transformedDocument;
50
78
  };
51
79
  DocumentTransform.prototype.concat = function (otherTransform) {
52
80
  var _this = this;
53
81
  return new DocumentTransform(function (document) {
54
82
  return otherTransform.transformDocument(_this.transformDocument(document));
55
- }, { cache: false });
56
- };
57
- DocumentTransform.prototype.getStableCacheEntry = function (document) {
58
- if (!this.stableCacheKeys)
59
- return;
60
- var cacheKeys = this.getCacheKey(document);
61
- if (cacheKeys) {
62
- invariant(Array.isArray(cacheKeys), 66);
63
- return this.stableCacheKeys.lookupArray(cacheKeys);
64
- }
83
+ },
84
+ // Reasonably assume both transforms handle their own caching
85
+ { cache: false });
65
86
  };
66
87
  return DocumentTransform;
67
88
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentTransform.js","sourceRoot":"","sources":["../../../src/utilities/graphql/DocumentTransform.ts"],"names":[],"mappings":"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","sourcesContent":["import { Trie } from \"@wry/trie\";\nimport { canUseWeakMap, canUseWeakSet } from \"../common/canUse.js\";\nimport { checkDocument } from \"./getFromAST.js\";\nimport { invariant } from \"../globals/index.js\";\nimport type { DocumentNode } from \"graphql\";\n\nexport type DocumentTransformCacheKey = ReadonlyArray<unknown>;\n\ntype TransformFn = (document: DocumentNode) => DocumentNode;\n\ninterface DocumentTransformOptions {\n cache?: boolean;\n getCacheKey?: (\n document: DocumentNode\n ) => DocumentTransformCacheKey | undefined;\n}\n\nfunction identity(document: DocumentNode) {\n return document;\n}\n\nexport class DocumentTransform {\n private readonly transform: TransformFn;\n\n private readonly resultCache = canUseWeakSet\n ? new WeakSet<DocumentNode>()\n : new Set<DocumentNode>();\n\n private stableCacheKeys:\n | Trie<{ key: DocumentTransformCacheKey; value?: DocumentNode }>\n | undefined;\n\n // This default implementation of getCacheKey can be overridden by providing\n // options.getCacheKey to the DocumentTransform constructor. In general, a\n // getCacheKey function may either return an array of keys (often including\n // the document) to be used as a cache key, or undefined to indicate the\n // transform for this document should not be cached.\n private getCacheKey(\n document: DocumentNode\n ): DocumentTransformCacheKey | undefined {\n return [document];\n }\n\n static identity() {\n // No need to cache this transform since it just returns the document\n // unchanged. This should save a bit of memory that would otherwise be\n // needed to populate the `documentCache` of this transform.\n return new DocumentTransform(identity, { cache: false });\n }\n\n static split(\n predicate: (document: DocumentNode) => boolean,\n left: DocumentTransform,\n right: DocumentTransform = DocumentTransform.identity()\n ) {\n return new DocumentTransform(\n (document) => {\n const documentTransform = predicate(document) ? left : right;\n\n return documentTransform.transformDocument(document);\n },\n // Reasonably assume both `left` and `right` transforms handle their own caching\n { cache: false }\n );\n }\n\n constructor(\n transform: TransformFn,\n options: DocumentTransformOptions = Object.create(null)\n ) {\n this.transform = transform;\n\n if (options.getCacheKey) {\n // Override default `getCacheKey` function, which returns [document].\n this.getCacheKey = options.getCacheKey;\n }\n\n if (options.cache !== false) {\n this.stableCacheKeys = new Trie(canUseWeakMap, (key) => ({ key }));\n }\n }\n\n transformDocument(document: DocumentNode) {\n // If a user passes an already transformed result back to this function,\n // immediately return it.\n if (this.resultCache.has(document)) {\n return document;\n }\n\n const cacheEntry = this.getStableCacheEntry(document);\n\n if (cacheEntry && cacheEntry.value) {\n return cacheEntry.value;\n }\n\n checkDocument(document);\n\n const transformedDocument = this.transform(document);\n\n this.resultCache.add(transformedDocument);\n\n if (cacheEntry) {\n cacheEntry.value = transformedDocument;\n }\n\n return transformedDocument;\n }\n\n concat(otherTransform: DocumentTransform) {\n return new DocumentTransform(\n (document) => {\n return otherTransform.transformDocument(\n this.transformDocument(document)\n );\n },\n // Reasonably assume both transforms handle their own caching\n { cache: false }\n );\n }\n\n getStableCacheEntry(document: DocumentNode) {\n if (!this.stableCacheKeys) return;\n const cacheKeys = this.getCacheKey(document);\n if (cacheKeys) {\n invariant(\n Array.isArray(cacheKeys),\n \"`getCacheKey` must return an array or undefined\"\n );\n return this.stableCacheKeys.lookupArray(cacheKeys);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"DocumentTransform.js","sourceRoot":"","sources":["../../../src/utilities/graphql/DocumentTransform.ts"],"names":[],"mappings":"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","sourcesContent":["import { Trie } from \"@wry/trie\";\nimport { canUseWeakMap, canUseWeakSet } from \"../common/canUse.js\";\nimport { checkDocument } from \"./getFromAST.js\";\nimport { invariant } from \"../globals/index.js\";\nimport type { DocumentNode } from \"graphql\";\nimport { WeakCache } from \"@wry/caches\";\nimport { wrap } from \"optimism\";\n\nexport type DocumentTransformCacheKey = ReadonlyArray<unknown>;\n\ntype TransformFn = (document: DocumentNode) => DocumentNode;\n\ninterface DocumentTransformOptions {\n cache?: boolean;\n getCacheKey?: (\n document: DocumentNode\n ) => DocumentTransformCacheKey | undefined;\n}\n\nfunction identity(document: DocumentNode) {\n return document;\n}\n\nexport class DocumentTransform {\n private readonly transform: TransformFn;\n private cached: boolean;\n\n private readonly resultCache =\n canUseWeakSet ? new WeakSet<DocumentNode>() : new Set<DocumentNode>();\n\n // This default implementation of getCacheKey can be overridden by providing\n // options.getCacheKey to the DocumentTransform constructor. In general, a\n // getCacheKey function may either return an array of keys (often including\n // the document) to be used as a cache key, or undefined to indicate the\n // transform for this document should not be cached.\n private getCacheKey(\n document: DocumentNode\n ): DocumentTransformCacheKey | undefined {\n return [document];\n }\n\n static identity() {\n // No need to cache this transform since it just returns the document\n // unchanged. This should save a bit of memory that would otherwise be\n // needed to populate the `documentCache` of this transform.\n return new DocumentTransform(identity, { cache: false });\n }\n\n static split(\n predicate: (document: DocumentNode) => boolean,\n left: DocumentTransform,\n right: DocumentTransform = DocumentTransform.identity()\n ) {\n return new DocumentTransform(\n (document) => {\n const documentTransform = predicate(document) ? left : right;\n\n return documentTransform.transformDocument(document);\n },\n // Reasonably assume both `left` and `right` transforms handle their own caching\n { cache: false }\n );\n }\n\n constructor(\n transform: TransformFn,\n options: DocumentTransformOptions = Object.create(null)\n ) {\n this.transform = transform;\n\n if (options.getCacheKey) {\n // Override default `getCacheKey` function, which returns [document].\n this.getCacheKey = options.getCacheKey;\n }\n this.cached = options.cache !== false;\n\n this.resetCache();\n }\n\n /**\n * Resets the internal cache of this transform, if it has one.\n */\n resetCache() {\n if (this.cached) {\n const stableCacheKeys = new Trie<WeakKey>(canUseWeakMap);\n this.performWork = wrap(\n DocumentTransform.prototype.performWork.bind(this),\n {\n makeCacheKey: (document) => {\n const cacheKeys = this.getCacheKey(document);\n if (cacheKeys) {\n invariant(\n Array.isArray(cacheKeys),\n \"`getCacheKey` must return an array or undefined\"\n );\n return stableCacheKeys.lookupArray(cacheKeys);\n }\n },\n max: 1000 /** TODO: decide on a maximum size (will do all max sizes in a combined separate PR) */,\n cache: WeakCache<any, any>,\n }\n );\n }\n }\n\n private performWork(document: DocumentNode) {\n checkDocument(document);\n return this.transform(document);\n }\n\n transformDocument(document: DocumentNode) {\n // If a user passes an already transformed result back to this function,\n // immediately return it.\n if (this.resultCache.has(document)) {\n return document;\n }\n\n const transformedDocument = this.performWork(document);\n\n this.resultCache.add(transformedDocument);\n\n return transformedDocument;\n }\n\n concat(otherTransform: DocumentTransform) {\n return new DocumentTransform(\n (document) => {\n return otherTransform.transformDocument(\n this.transformDocument(document)\n );\n },\n // Reasonably assume both transforms handle their own caching\n { cache: false }\n );\n }\n}\n"]}
@@ -44,6 +44,8 @@ export function hasDirectives(names, root, all) {
44
44
  }
45
45
  },
46
46
  });
47
+ // If we found all the names, nameSet will be empty. If we only care about
48
+ // finding some of them, the < condition is sufficient.
47
49
  return all ? !nameSet.size : nameSet.size < uniqueCount;
48
50
  }
49
51
  export function hasClientExports(document) {
@@ -65,6 +67,7 @@ export function getInclusionDirectives(directives) {
65
67
  var ifArgument = directiveArguments[0];
66
68
  invariant(ifArgument.name && ifArgument.name.value === "if", 69, directiveName);
67
69
  var ifValue = ifArgument.value;
70
+ // means it has to be a variable value if this is a valid @skip or @include directive
68
71
  invariant(ifValue &&
69
72
  (ifValue.kind === "Variable" || ifValue.kind === "BooleanValue"), 70, directiveName);
70
73
  result.push({ directive: directive, ifArgument: ifArgument });
@@ -1 +1 @@
1
- {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../../src/utilities/graphql/directives.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from \"../globals/index.js\";\n\n// Provides the methods that allow QueryManager to handle the `skip` and\n// `include` directives within GraphQL.\nimport type {\n SelectionNode,\n VariableNode,\n BooleanValueNode,\n DirectiveNode,\n DocumentNode,\n ArgumentNode,\n ValueNode,\n ASTNode,\n} from \"graphql\";\nimport { visit, BREAK } from \"graphql\";\n\nexport type DirectiveInfo = {\n [fieldName: string]: { [argName: string]: any };\n};\n\nexport function shouldInclude(\n { directives }: SelectionNode,\n variables?: Record<string, any>\n): boolean {\n if (!directives || !directives.length) {\n return true;\n }\n return getInclusionDirectives(directives).every(\n ({ directive, ifArgument }) => {\n let evaledValue: boolean = false;\n if (ifArgument.value.kind === \"Variable\") {\n evaledValue =\n variables && variables[(ifArgument.value as VariableNode).name.value];\n invariant(\n evaledValue !== void 0,\n `Invalid variable referenced in @%s directive.`,\n directive.name.value\n );\n } else {\n evaledValue = (ifArgument.value as BooleanValueNode).value;\n }\n return directive.name.value === \"skip\" ? !evaledValue : evaledValue;\n }\n );\n}\n\nexport function getDirectiveNames(root: ASTNode) {\n const names: string[] = [];\n\n visit(root, {\n Directive(node: DirectiveNode) {\n names.push(node.name.value);\n },\n });\n\n return names;\n}\n\nexport const hasAnyDirectives = (names: string[], root: ASTNode) =>\n hasDirectives(names, root, false);\n\nexport const hasAllDirectives = (names: string[], root: ASTNode) =>\n hasDirectives(names, root, true);\n\nexport function hasDirectives(names: string[], root: ASTNode, all?: boolean) {\n const nameSet = new Set(names);\n const uniqueCount = nameSet.size;\n\n visit(root, {\n Directive(node) {\n if (nameSet.delete(node.name.value) && (!all || !nameSet.size)) {\n return BREAK;\n }\n },\n });\n\n // If we found all the names, nameSet will be empty. If we only care about\n // finding some of them, the < condition is sufficient.\n return all ? !nameSet.size : nameSet.size < uniqueCount;\n}\n\nexport function hasClientExports(document: DocumentNode) {\n return document && hasDirectives([\"client\", \"export\"], document, true);\n}\n\nexport type InclusionDirectives = Array<{\n directive: DirectiveNode;\n ifArgument: ArgumentNode;\n}>;\n\nfunction isInclusionDirective({ name: { value } }: DirectiveNode): boolean {\n return value === \"skip\" || value === \"include\";\n}\n\nexport function getInclusionDirectives(\n directives: ReadonlyArray<DirectiveNode>\n): InclusionDirectives {\n const result: InclusionDirectives = [];\n\n if (directives && directives.length) {\n directives.forEach((directive) => {\n if (!isInclusionDirective(directive)) return;\n\n const directiveArguments = directive.arguments;\n const directiveName = directive.name.value;\n\n invariant(\n directiveArguments && directiveArguments.length === 1,\n `Incorrect number of arguments for the @%s directive.`,\n directiveName\n );\n\n const ifArgument = directiveArguments![0];\n invariant(\n ifArgument.name && ifArgument.name.value === \"if\",\n `Invalid argument for the @%s directive.`,\n directiveName\n );\n\n const ifValue: ValueNode = ifArgument.value;\n\n // means it has to be a variable value if this is a valid @skip or @include directive\n invariant(\n ifValue &&\n (ifValue.kind === \"Variable\" || ifValue.kind === \"BooleanValue\"),\n `Argument for the @%s directive must be a variable or a boolean value.`,\n directiveName\n );\n\n result.push({ directive, ifArgument });\n });\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../../src/utilities/graphql/directives.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from \"../globals/index.js\";\n\n// Provides the methods that allow QueryManager to handle the `skip` and\n// `include` directives within GraphQL.\nimport type {\n SelectionNode,\n VariableNode,\n BooleanValueNode,\n DirectiveNode,\n DocumentNode,\n ArgumentNode,\n ValueNode,\n ASTNode,\n} from \"graphql\";\nimport { visit, BREAK } from \"graphql\";\n\nexport type DirectiveInfo = {\n [fieldName: string]: { [argName: string]: any };\n};\n\nexport function shouldInclude(\n { directives }: SelectionNode,\n variables?: Record<string, any>\n): boolean {\n if (!directives || !directives.length) {\n return true;\n }\n return getInclusionDirectives(directives).every(\n ({ directive, ifArgument }) => {\n let evaledValue: boolean = false;\n if (ifArgument.value.kind === \"Variable\") {\n evaledValue =\n variables && variables[(ifArgument.value as VariableNode).name.value];\n invariant(\n evaledValue !== void 0,\n `Invalid variable referenced in @%s directive.`,\n directive.name.value\n );\n } else {\n evaledValue = (ifArgument.value as BooleanValueNode).value;\n }\n return directive.name.value === \"skip\" ? !evaledValue : evaledValue;\n }\n );\n}\n\nexport function getDirectiveNames(root: ASTNode) {\n const names: string[] = [];\n\n visit(root, {\n Directive(node: DirectiveNode) {\n names.push(node.name.value);\n },\n });\n\n return names;\n}\n\nexport const hasAnyDirectives = (names: string[], root: ASTNode) =>\n hasDirectives(names, root, false);\n\nexport const hasAllDirectives = (names: string[], root: ASTNode) =>\n hasDirectives(names, root, true);\n\nexport function hasDirectives(names: string[], root: ASTNode, all?: boolean) {\n const nameSet = new Set(names);\n const uniqueCount = nameSet.size;\n\n visit(root, {\n Directive(node) {\n if (nameSet.delete(node.name.value) && (!all || !nameSet.size)) {\n return BREAK;\n }\n },\n });\n\n // If we found all the names, nameSet will be empty. If we only care about\n // finding some of them, the < condition is sufficient.\n return all ? !nameSet.size : nameSet.size < uniqueCount;\n}\n\nexport function hasClientExports(document: DocumentNode) {\n return document && hasDirectives([\"client\", \"export\"], document, true);\n}\n\nexport type InclusionDirectives = Array<{\n directive: DirectiveNode;\n ifArgument: ArgumentNode;\n}>;\n\nfunction isInclusionDirective({ name: { value } }: DirectiveNode): boolean {\n return value === \"skip\" || value === \"include\";\n}\n\nexport function getInclusionDirectives(\n directives: ReadonlyArray<DirectiveNode>\n): InclusionDirectives {\n const result: InclusionDirectives = [];\n\n if (directives && directives.length) {\n directives.forEach((directive) => {\n if (!isInclusionDirective(directive)) return;\n\n const directiveArguments = directive.arguments;\n const directiveName = directive.name.value;\n\n invariant(\n directiveArguments && directiveArguments.length === 1,\n `Incorrect number of arguments for the @%s directive.`,\n directiveName\n );\n\n const ifArgument = directiveArguments![0];\n invariant(\n ifArgument.name && ifArgument.name.value === \"if\",\n `Invalid argument for the @%s directive.`,\n directiveName\n );\n\n const ifValue: ValueNode = ifArgument.value;\n\n // means it has to be a variable value if this is a valid @skip or @include directive\n invariant(\n ifValue &&\n (ifValue.kind === \"Variable\" || ifValue.kind === \"BooleanValue\"),\n `Argument for the @%s directive must be a variable or a boolean value.`,\n directiveName\n );\n\n result.push({ directive, ifArgument });\n });\n }\n\n return result;\n}\n"]}
@@ -1,5 +1,30 @@
1
1
  import type { DocumentNode, FragmentDefinitionNode, InlineFragmentNode, SelectionNode } from "graphql";
2
+ /**
3
+ * Returns a query document which adds a single query operation that only
4
+ * spreads the target fragment inside of it.
5
+ *
6
+ * So for example a document of:
7
+ *
8
+ * ```graphql
9
+ * fragment foo on Foo { a b c }
10
+ * ```
11
+ *
12
+ * Turns into:
13
+ *
14
+ * ```graphql
15
+ * { ...foo }
16
+ *
17
+ * fragment foo on Foo { a b c }
18
+ * ```
19
+ *
20
+ * The target fragment will either be the only fragment in the document, or a
21
+ * fragment specified by the provided `fragmentName`. If there is more than one
22
+ * fragment, but a `fragmentName` was not defined then an error will be thrown.
23
+ */
2
24
  export declare function getFragmentQueryDocument(document: DocumentNode, fragmentName?: string): DocumentNode;
25
+ /**
26
+ * This is an interface that describes a map from fragment names to fragment definitions.
27
+ */
3
28
  export interface FragmentMap {
4
29
  [fragmentName: string]: FragmentDefinitionNode;
5
30
  }
@@ -1,9 +1,36 @@
1
1
  import { __assign, __spreadArray } from "tslib";
2
2
  import { invariant, newInvariantError } from "../globals/index.js";
3
+ /**
4
+ * Returns a query document which adds a single query operation that only
5
+ * spreads the target fragment inside of it.
6
+ *
7
+ * So for example a document of:
8
+ *
9
+ * ```graphql
10
+ * fragment foo on Foo { a b c }
11
+ * ```
12
+ *
13
+ * Turns into:
14
+ *
15
+ * ```graphql
16
+ * { ...foo }
17
+ *
18
+ * fragment foo on Foo { a b c }
19
+ * ```
20
+ *
21
+ * The target fragment will either be the only fragment in the document, or a
22
+ * fragment specified by the provided `fragmentName`. If there is more than one
23
+ * fragment, but a `fragmentName` was not defined then an error will be thrown.
24
+ */
3
25
  export function getFragmentQueryDocument(document, fragmentName) {
4
26
  var actualFragmentName = fragmentName;
27
+ // Build an array of all our fragment definitions that will be used for
28
+ // validations. We also do some validations on the other definitions in the
29
+ // document while building this list.
5
30
  var fragments = [];
6
31
  document.definitions.forEach(function (definition) {
32
+ // Throw an error if we encounter an operation definition because we will
33
+ // define our own operation definition later on.
7
34
  if (definition.kind === "OperationDefinition") {
8
35
  throw newInvariantError(
9
36
  71,
@@ -11,17 +38,24 @@ export function getFragmentQueryDocument(document, fragmentName) {
11
38
  definition.name ? " named '".concat(definition.name.value, "'") : ""
12
39
  );
13
40
  }
41
+ // Add our definition to the fragments array if it is a fragment
42
+ // definition.
14
43
  if (definition.kind === "FragmentDefinition") {
15
44
  fragments.push(definition);
16
45
  }
17
46
  });
47
+ // If the user did not give us a fragment name then let us try to get a
48
+ // name from a single fragment in the definition.
18
49
  if (typeof actualFragmentName === "undefined") {
19
50
  invariant(fragments.length === 1, 72, fragments.length);
20
51
  actualFragmentName = fragments[0].name.value;
21
52
  }
53
+ // Generate a query document with an operation that simply spreads the
54
+ // fragment inside of it.
22
55
  var query = __assign(__assign({}, document), { definitions: __spreadArray([
23
56
  {
24
57
  kind: "OperationDefinition",
58
+ // OperationTypeNode is an enum
25
59
  operation: "query",
26
60
  selectionSet: {
27
61
  kind: "SelectionSet",
@@ -39,6 +73,8 @@ export function getFragmentQueryDocument(document, fragmentName) {
39
73
  ], document.definitions, true) });
40
74
  return query;
41
75
  }
76
+ // Utility function that takes a list of fragment definitions and makes a hash out of them
77
+ // that maps the name of the fragment to the fragment definition.
42
78
  export function createFragmentMap(fragments) {
43
79
  if (fragments === void 0) { fragments = []; }
44
80
  var symTable = {};
@@ -1 +1 @@
1
- {"version":3,"file":"fragments.js","sourceRoot":"","sources":["../../../src/utilities/graphql/fragments.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAkCnE,MAAM,UAAU,wBAAwB,CACtC,QAAsB,EACtB,YAAqB;IAErB,IAAI,kBAAkB,GAAG,YAAY,CAAC;IAKtC,IAAM,SAAS,GAAkC,EAAE,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,UAAC,UAAU;QAGtC,IAAI,UAAU,CAAC,IAAI,KAAK,qBAAqB,EAAE;YAC7C,MAAM,iBAAiB,CACrB,0BAA0B;gBACxB,yFAAyF,EAC3F,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAW,UAAU,CAAC,IAAI,CAAC,KAAK,MAAG,CAAC,CAAC,CAAC,EAAE,CAC3D,CAAC;SACH;QAGD,IAAI,UAAU,CAAC,IAAI,KAAK,oBAAoB,EAAE;YAC5C,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC5B;IACH,CAAC,CAAC,CAAC;IAIH,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;QAC7C,SAAS,CACP,SAAS,CAAC,MAAM,KAAK,CAAC,EACtB,2FAA6F,EAC7F,SAAS,CAAC,MAAM,CACjB,CAAC;QACF,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;KAC9C;IAID,IAAM,KAAK,yBACN,QAAQ,KACX,WAAW;YACT;gBACE,IAAI,EAAE,qBAA6B;gBAEnC,SAAS,EAAE,OAA4B;gBACvC,YAAY,EAAE;oBACZ,IAAI,EAAE,cAAsB;oBAC5B,UAAU,EAAE;wBACV;4BACE,IAAI,EAAE,gBAAwB;4BAC9B,IAAI,EAAE;gCACJ,IAAI,EAAE,MAAc;gCACpB,KAAK,EAAE,kBAAkB;6BAC1B;yBACF;qBACF;iBACF;aACF;WACE,QAAQ,CAAC,WAAW,UAE1B,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAeD,MAAM,UAAU,iBAAiB,CAC/B,SAAwC;IAAxC,0BAAA,EAAA,cAAwC;IAExC,IAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;QACzB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAwB,EACxB,WAA+C;IAE/C,QAAQ,SAAS,CAAC,IAAI,EAAE;QACtB,KAAK,gBAAgB;YACnB,OAAO,SAAS,CAAC;QACnB,KAAK,gBAAgB,CAAC,CAAC;YACrB,IAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1C,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;gBACrC,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;aAClC;YACD,IAAM,QAAQ,GAAG,WAAW,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;YAC1D,SAAS,CAAC,QAAQ,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC;YAC1D,OAAO,QAAQ,IAAI,IAAI,CAAC;SACzB;QACD;YACE,OAAO,IAAI,CAAC;KACf;AACH,CAAC","sourcesContent":["import { invariant, newInvariantError } from \"../globals/index.js\";\n\nimport type {\n DocumentNode,\n FragmentDefinitionNode,\n InlineFragmentNode,\n SelectionNode,\n} from \"graphql\";\n\n// TODO(brian): A hack until this issue is resolved (https://github.com/graphql/graphql-js/issues/3356)\ntype Kind = any;\ntype OperationTypeNode = any;\n/**\n * Returns a query document which adds a single query operation that only\n * spreads the target fragment inside of it.\n *\n * So for example a document of:\n *\n * ```graphql\n * fragment foo on Foo { a b c }\n * ```\n *\n * Turns into:\n *\n * ```graphql\n * { ...foo }\n *\n * fragment foo on Foo { a b c }\n * ```\n *\n * The target fragment will either be the only fragment in the document, or a\n * fragment specified by the provided `fragmentName`. If there is more than one\n * fragment, but a `fragmentName` was not defined then an error will be thrown.\n */\nexport function getFragmentQueryDocument(\n document: DocumentNode,\n fragmentName?: string\n): DocumentNode {\n let actualFragmentName = fragmentName;\n\n // Build an array of all our fragment definitions that will be used for\n // validations. We also do some validations on the other definitions in the\n // document while building this list.\n const fragments: Array<FragmentDefinitionNode> = [];\n document.definitions.forEach((definition) => {\n // Throw an error if we encounter an operation definition because we will\n // define our own operation definition later on.\n if (definition.kind === \"OperationDefinition\") {\n throw newInvariantError(\n `Found a %s operation%s. ` +\n \"No operations are allowed when using a fragment as a query. Only fragments are allowed.\",\n definition.operation,\n definition.name ? ` named '${definition.name.value}'` : \"\"\n );\n }\n // Add our definition to the fragments array if it is a fragment\n // definition.\n if (definition.kind === \"FragmentDefinition\") {\n fragments.push(definition);\n }\n });\n\n // If the user did not give us a fragment name then let us try to get a\n // name from a single fragment in the definition.\n if (typeof actualFragmentName === \"undefined\") {\n invariant(\n fragments.length === 1,\n `Found %s fragments. \\`fragmentName\\` must be provided when there is not exactly 1 fragment.`,\n fragments.length\n );\n actualFragmentName = fragments[0].name.value;\n }\n\n // Generate a query document with an operation that simply spreads the\n // fragment inside of it.\n const query: DocumentNode = {\n ...document,\n definitions: [\n {\n kind: \"OperationDefinition\" as Kind,\n // OperationTypeNode is an enum\n operation: \"query\" as OperationTypeNode,\n selectionSet: {\n kind: \"SelectionSet\" as Kind,\n selections: [\n {\n kind: \"FragmentSpread\" as Kind,\n name: {\n kind: \"Name\" as Kind,\n value: actualFragmentName,\n },\n },\n ],\n },\n },\n ...document.definitions,\n ],\n };\n\n return query;\n}\n\n/**\n * This is an interface that describes a map from fragment names to fragment definitions.\n */\nexport interface FragmentMap {\n [fragmentName: string]: FragmentDefinitionNode;\n}\n\nexport type FragmentMapFunction = (\n fragmentName: string\n) => FragmentDefinitionNode | null;\n\n// Utility function that takes a list of fragment definitions and makes a hash out of them\n// that maps the name of the fragment to the fragment definition.\nexport function createFragmentMap(\n fragments: FragmentDefinitionNode[] = []\n): FragmentMap {\n const symTable: FragmentMap = {};\n fragments.forEach((fragment) => {\n symTable[fragment.name.value] = fragment;\n });\n return symTable;\n}\n\nexport function getFragmentFromSelection(\n selection: SelectionNode,\n fragmentMap?: FragmentMap | FragmentMapFunction\n): InlineFragmentNode | FragmentDefinitionNode | null {\n switch (selection.kind) {\n case \"InlineFragment\":\n return selection;\n case \"FragmentSpread\": {\n const fragmentName = selection.name.value;\n if (typeof fragmentMap === \"function\") {\n return fragmentMap(fragmentName);\n }\n const fragment = fragmentMap && fragmentMap[fragmentName];\n invariant(fragment, `No fragment named %s`, fragmentName);\n return fragment || null;\n }\n default:\n return null;\n }\n}\n"]}
1
+ {"version":3,"file":"fragments.js","sourceRoot":"","sources":["../../../src/utilities/graphql/fragments.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant, newInvariantError } from \"../globals/index.js\";\n\nimport type {\n DocumentNode,\n FragmentDefinitionNode,\n InlineFragmentNode,\n SelectionNode,\n} from \"graphql\";\n\n// TODO(brian): A hack until this issue is resolved (https://github.com/graphql/graphql-js/issues/3356)\ntype Kind = any;\ntype OperationTypeNode = any;\n/**\n * Returns a query document which adds a single query operation that only\n * spreads the target fragment inside of it.\n *\n * So for example a document of:\n *\n * ```graphql\n * fragment foo on Foo { a b c }\n * ```\n *\n * Turns into:\n *\n * ```graphql\n * { ...foo }\n *\n * fragment foo on Foo { a b c }\n * ```\n *\n * The target fragment will either be the only fragment in the document, or a\n * fragment specified by the provided `fragmentName`. If there is more than one\n * fragment, but a `fragmentName` was not defined then an error will be thrown.\n */\nexport function getFragmentQueryDocument(\n document: DocumentNode,\n fragmentName?: string\n): DocumentNode {\n let actualFragmentName = fragmentName;\n\n // Build an array of all our fragment definitions that will be used for\n // validations. We also do some validations on the other definitions in the\n // document while building this list.\n const fragments: Array<FragmentDefinitionNode> = [];\n document.definitions.forEach((definition) => {\n // Throw an error if we encounter an operation definition because we will\n // define our own operation definition later on.\n if (definition.kind === \"OperationDefinition\") {\n throw newInvariantError(\n `Found a %s operation%s. ` +\n \"No operations are allowed when using a fragment as a query. Only fragments are allowed.\",\n definition.operation,\n definition.name ? ` named '${definition.name.value}'` : \"\"\n );\n }\n // Add our definition to the fragments array if it is a fragment\n // definition.\n if (definition.kind === \"FragmentDefinition\") {\n fragments.push(definition);\n }\n });\n\n // If the user did not give us a fragment name then let us try to get a\n // name from a single fragment in the definition.\n if (typeof actualFragmentName === \"undefined\") {\n invariant(\n fragments.length === 1,\n `Found %s fragments. \\`fragmentName\\` must be provided when there is not exactly 1 fragment.`,\n fragments.length\n );\n actualFragmentName = fragments[0].name.value;\n }\n\n // Generate a query document with an operation that simply spreads the\n // fragment inside of it.\n const query: DocumentNode = {\n ...document,\n definitions: [\n {\n kind: \"OperationDefinition\" as Kind,\n // OperationTypeNode is an enum\n operation: \"query\" as OperationTypeNode,\n selectionSet: {\n kind: \"SelectionSet\" as Kind,\n selections: [\n {\n kind: \"FragmentSpread\" as Kind,\n name: {\n kind: \"Name\" as Kind,\n value: actualFragmentName,\n },\n },\n ],\n },\n },\n ...document.definitions,\n ],\n };\n\n return query;\n}\n\n/**\n * This is an interface that describes a map from fragment names to fragment definitions.\n */\nexport interface FragmentMap {\n [fragmentName: string]: FragmentDefinitionNode;\n}\n\nexport type FragmentMapFunction = (\n fragmentName: string\n) => FragmentDefinitionNode | null;\n\n// Utility function that takes a list of fragment definitions and makes a hash out of them\n// that maps the name of the fragment to the fragment definition.\nexport function createFragmentMap(\n fragments: FragmentDefinitionNode[] = []\n): FragmentMap {\n const symTable: FragmentMap = {};\n fragments.forEach((fragment) => {\n symTable[fragment.name.value] = fragment;\n });\n return symTable;\n}\n\nexport function getFragmentFromSelection(\n selection: SelectionNode,\n fragmentMap?: FragmentMap | FragmentMapFunction\n): InlineFragmentNode | FragmentDefinitionNode | null {\n switch (selection.kind) {\n case \"InlineFragment\":\n return selection;\n case \"FragmentSpread\": {\n const fragmentName = selection.name.value;\n if (typeof fragmentMap === \"function\") {\n return fragmentMap(fragmentName);\n }\n const fragment = fragmentMap && fragmentMap[fragmentName];\n invariant(fragment, `No fragment named %s`, fragmentName);\n return fragment || null;\n }\n default:\n return null;\n }\n}\n"]}
@@ -5,6 +5,11 @@ export declare function getOperationName(doc: DocumentNode): string | null;
5
5
  export declare function getFragmentDefinitions(doc: DocumentNode): FragmentDefinitionNode[];
6
6
  export declare function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode;
7
7
  export declare function getFragmentDefinition(doc: DocumentNode): FragmentDefinitionNode;
8
+ /**
9
+ * Returns the first operation definition found in this document.
10
+ * If no operation definition is found, the first fragment definition will be returned.
11
+ * If no definitions are found, an error will be thrown.
12
+ */
8
13
  export declare function getMainDefinition(queryDoc: DocumentNode): OperationDefinitionNode | FragmentDefinitionNode;
9
14
  export declare function getDefaultValues(definition: OperationDefinitionNode | undefined): Record<string, any>;
10
15
  //# sourceMappingURL=getFromAST.d.ts.map
@@ -1,5 +1,6 @@
1
1
  import { invariant, newInvariantError } from "../globals/index.js";
2
2
  import { valueToObjectRepresentation } from "./storeUtils.js";
3
+ // Checks the document for errors and throws an exception if there is an error.
3
4
  export function checkDocument(doc) {
4
5
  invariant(doc && doc.kind === "Document", 74);
5
6
  var operations = doc.definitions
@@ -26,6 +27,7 @@ export function getOperationName(doc) {
26
27
  })
27
28
  .map(function (x) { return x.name.value; })[0] || null);
28
29
  }
30
+ // Returns the FragmentDefinitions from a particular document as an array
29
31
  export function getFragmentDefinitions(doc) {
30
32
  return doc.definitions.filter(function (definition) {
31
33
  return definition.kind === "FragmentDefinition";
@@ -43,6 +45,11 @@ export function getFragmentDefinition(doc) {
43
45
  invariant(fragmentDef.kind === "FragmentDefinition", 80);
44
46
  return fragmentDef;
45
47
  }
48
+ /**
49
+ * Returns the first operation definition found in this document.
50
+ * If no operation definition is found, the first fragment definition will be returned.
51
+ * If no definitions are found, an error will be thrown.
52
+ */
46
53
  export function getMainDefinition(queryDoc) {
47
54
  checkDocument(queryDoc);
48
55
  var fragmentDefinition;
@@ -57,6 +64,8 @@ export function getMainDefinition(queryDoc) {
57
64
  }
58
65
  }
59
66
  if (definition.kind === "FragmentDefinition" && !fragmentDefinition) {
67
+ // we do this because we want to allow multiple fragment definitions
68
+ // to precede an operation definition.
60
69
  fragmentDefinition = definition;
61
70
  }
62
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getFromAST.js","sourceRoot":"","sources":["../../../src/utilities/graphql/getFromAST.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant, newInvariantError } from \"../globals/index.js\";\n\nimport type {\n DocumentNode,\n OperationDefinitionNode,\n FragmentDefinitionNode,\n ValueNode,\n} from \"graphql\";\n\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n\ntype OperationDefinitionWithName = OperationDefinitionNode & {\n name: NonNullable<OperationDefinitionNode[\"name\"]>;\n};\n\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc: DocumentNode) {\n invariant(\n doc && doc.kind === \"Document\",\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`\n );\n\n const operations = doc.definitions\n .filter((d) => d.kind !== \"FragmentDefinition\")\n .map((definition) => {\n if (definition.kind !== \"OperationDefinition\") {\n throw newInvariantError(\n `Schema type definitions not allowed in queries. Found: \"%s\"`,\n definition.kind\n );\n }\n return definition;\n });\n\n invariant(\n operations.length <= 1,\n `Ambiguous GraphQL document: contains %s operations`,\n operations.length\n );\n\n return doc;\n}\n\nexport function getOperationDefinition(\n doc: DocumentNode\n): OperationDefinitionNode | undefined {\n checkDocument(doc);\n return doc.definitions.filter(\n (definition): definition is OperationDefinitionNode =>\n definition.kind === \"OperationDefinition\"\n )[0];\n}\n\nexport function getOperationName(doc: DocumentNode): string | null {\n return (\n doc.definitions\n .filter(\n (definition): definition is OperationDefinitionWithName =>\n definition.kind === \"OperationDefinition\" && !!definition.name\n )\n .map((x) => x.name.value)[0] || null\n );\n}\n\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(\n doc: DocumentNode\n): FragmentDefinitionNode[] {\n return doc.definitions.filter(\n (definition): definition is FragmentDefinitionNode =>\n definition.kind === \"FragmentDefinition\"\n );\n}\n\nexport function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode {\n const queryDef = getOperationDefinition(doc)!;\n\n invariant(\n queryDef && queryDef.operation === \"query\",\n \"Must contain a query definition.\"\n );\n\n return queryDef;\n}\n\nexport function getFragmentDefinition(\n doc: DocumentNode\n): FragmentDefinitionNode {\n invariant(\n doc.kind === \"Document\",\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`\n );\n\n invariant(\n doc.definitions.length <= 1,\n \"Fragment must have exactly one definition.\"\n );\n\n const fragmentDef = doc.definitions[0] as FragmentDefinitionNode;\n\n invariant(\n fragmentDef.kind === \"FragmentDefinition\",\n \"Must be a fragment definition.\"\n );\n\n return fragmentDef as FragmentDefinitionNode;\n}\n\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(\n queryDoc: DocumentNode\n): OperationDefinitionNode | FragmentDefinitionNode {\n checkDocument(queryDoc);\n\n let fragmentDefinition;\n\n for (let definition of queryDoc.definitions) {\n if (definition.kind === \"OperationDefinition\") {\n const operation = (definition as OperationDefinitionNode).operation;\n if (\n operation === \"query\" ||\n operation === \"mutation\" ||\n operation === \"subscription\"\n ) {\n return definition as OperationDefinitionNode;\n }\n }\n if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition as FragmentDefinitionNode;\n }\n }\n\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n\n throw newInvariantError(\n \"Expected a parsed GraphQL query with a query, mutation, subscription, or a fragment.\"\n );\n}\n\nexport function getDefaultValues(\n definition: OperationDefinitionNode | undefined\n): Record<string, any> {\n const defaultValues = Object.create(null);\n const defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach((def) => {\n if (def.defaultValue) {\n valueToObjectRepresentation(\n defaultValues,\n def.variable.name,\n def.defaultValue as ValueNode\n );\n }\n });\n }\n return defaultValues;\n}\n"]}
1
+ {"version":3,"file":"getFromAST.js","sourceRoot":"","sources":["../../../src/utilities/graphql/getFromAST.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant, newInvariantError } from \"../globals/index.js\";\n\nimport type {\n DocumentNode,\n OperationDefinitionNode,\n FragmentDefinitionNode,\n ValueNode,\n} from \"graphql\";\n\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n\ntype OperationDefinitionWithName = OperationDefinitionNode & {\n name: NonNullable<OperationDefinitionNode[\"name\"]>;\n};\n\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc: DocumentNode) {\n invariant(\n doc && doc.kind === \"Document\",\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`\n );\n\n const operations = doc.definitions\n .filter((d) => d.kind !== \"FragmentDefinition\")\n .map((definition) => {\n if (definition.kind !== \"OperationDefinition\") {\n throw newInvariantError(\n `Schema type definitions not allowed in queries. Found: \"%s\"`,\n definition.kind\n );\n }\n return definition;\n });\n\n invariant(\n operations.length <= 1,\n `Ambiguous GraphQL document: contains %s operations`,\n operations.length\n );\n\n return doc;\n}\n\nexport function getOperationDefinition(\n doc: DocumentNode\n): OperationDefinitionNode | undefined {\n checkDocument(doc);\n return doc.definitions.filter(\n (definition): definition is OperationDefinitionNode =>\n definition.kind === \"OperationDefinition\"\n )[0];\n}\n\nexport function getOperationName(doc: DocumentNode): string | null {\n return (\n doc.definitions\n .filter(\n (definition): definition is OperationDefinitionWithName =>\n definition.kind === \"OperationDefinition\" && !!definition.name\n )\n .map((x) => x.name.value)[0] || null\n );\n}\n\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(\n doc: DocumentNode\n): FragmentDefinitionNode[] {\n return doc.definitions.filter(\n (definition): definition is FragmentDefinitionNode =>\n definition.kind === \"FragmentDefinition\"\n );\n}\n\nexport function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode {\n const queryDef = getOperationDefinition(doc)!;\n\n invariant(\n queryDef && queryDef.operation === \"query\",\n \"Must contain a query definition.\"\n );\n\n return queryDef;\n}\n\nexport function getFragmentDefinition(\n doc: DocumentNode\n): FragmentDefinitionNode {\n invariant(\n doc.kind === \"Document\",\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`\n );\n\n invariant(\n doc.definitions.length <= 1,\n \"Fragment must have exactly one definition.\"\n );\n\n const fragmentDef = doc.definitions[0] as FragmentDefinitionNode;\n\n invariant(\n fragmentDef.kind === \"FragmentDefinition\",\n \"Must be a fragment definition.\"\n );\n\n return fragmentDef as FragmentDefinitionNode;\n}\n\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(\n queryDoc: DocumentNode\n): OperationDefinitionNode | FragmentDefinitionNode {\n checkDocument(queryDoc);\n\n let fragmentDefinition;\n\n for (let definition of queryDoc.definitions) {\n if (definition.kind === \"OperationDefinition\") {\n const operation = (definition as OperationDefinitionNode).operation;\n if (\n operation === \"query\" ||\n operation === \"mutation\" ||\n operation === \"subscription\"\n ) {\n return definition as OperationDefinitionNode;\n }\n }\n if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition as FragmentDefinitionNode;\n }\n }\n\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n\n throw newInvariantError(\n \"Expected a parsed GraphQL query with a query, mutation, subscription, or a fragment.\"\n );\n}\n\nexport function getDefaultValues(\n definition: OperationDefinitionNode | undefined\n): Record<string, any> {\n const defaultValues = Object.create(null);\n const defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach((def) => {\n if (def.defaultValue) {\n valueToObjectRepresentation(\n defaultValues,\n def.variable.name,\n def.defaultValue as ValueNode\n );\n }\n });\n }\n return defaultValues;\n}\n"]}
@@ -1,17 +1,16 @@
1
1
  import { print as origPrint } from "graphql";
2
- import { canUseWeakMap } from "../common/canUse.js";
2
+ import { WeakCache } from "@wry/caches";
3
3
  var printCache;
4
4
  export var print = Object.assign(function (ast) {
5
- var result;
6
- result = printCache === null || printCache === void 0 ? void 0 : printCache.get(ast);
5
+ var result = printCache.get(ast);
7
6
  if (!result) {
8
7
  result = origPrint(ast);
9
- printCache === null || printCache === void 0 ? void 0 : printCache.set(ast, result);
8
+ printCache.set(ast, result);
10
9
  }
11
10
  return result;
12
11
  }, {
13
12
  reset: function () {
14
- printCache = canUseWeakMap ? new WeakMap() : undefined;
13
+ printCache = new WeakCache( /** TODO: decide on a maximum size (will do all max sizes in a combined separate PR) */);
15
14
  },
16
15
  });
17
16
  print.reset();
@@ -1 +1 @@
1
- {"version":3,"file":"print.js","sourceRoot":"","sources":["../../../src/utilities/graphql/print.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,IAAI,UAAgD,CAAC;AAErD,MAAM,CAAC,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAChC,UAAC,GAAY;IACX,IAAI,MAAM,CAAC;IACX,MAAM,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAE9B,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KAC9B;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,EACD;IACE,KAAK;QACH,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;CACF,CACF,CAAC;AAEF,KAAK,CAAC,KAAK,EAAE,CAAC","sourcesContent":["import type { ASTNode } from \"graphql\";\nimport { print as origPrint } from \"graphql\";\nimport { canUseWeakMap } from \"../common/canUse.js\";\n\nlet printCache: undefined | WeakMap<ASTNode, string>;\n// further TODO: replace with `optimism` with a `WeakCache` once those are available\nexport const print = Object.assign(\n (ast: ASTNode) => {\n let result;\n result = printCache?.get(ast);\n\n if (!result) {\n result = origPrint(ast);\n printCache?.set(ast, result);\n }\n return result;\n },\n {\n reset() {\n printCache = canUseWeakMap ? new WeakMap() : undefined;\n },\n }\n);\n\nprint.reset();\n"]}
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../../../src/utilities/graphql/print.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,IAAI,UAAuC,CAAC;AAC5C,MAAM,CAAC,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAChC,UAAC,GAAY;IACX,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,EACD;IACE,KAAK;QACH,UAAU,GAAG,IAAI,SAAS,EAGxB,uFAAuF,CAAC,CAAC;IAC7F,CAAC;CACF,CACF,CAAC;AAEF,KAAK,CAAC,KAAK,EAAE,CAAC","sourcesContent":["import type { ASTNode } from \"graphql\";\nimport { print as origPrint } from \"graphql\";\nimport { WeakCache } from \"@wry/caches\";\n\nlet printCache!: WeakCache<ASTNode, string>;\nexport const print = Object.assign(\n (ast: ASTNode) => {\n let result = printCache.get(ast);\n\n if (!result) {\n result = origPrint(ast);\n printCache.set(ast, result);\n }\n return result;\n },\n {\n reset() {\n printCache = new WeakCache<\n ASTNode,\n string\n >(/** TODO: decide on a maximum size (will do all max sizes in a combined separate PR) */);\n },\n }\n);\n\nprint.reset();\n"]}
@@ -10,6 +10,20 @@ export interface StoreObject {
10
10
  __typename?: string;
11
11
  [storeFieldName: string]: StoreValue;
12
12
  }
13
+ /**
14
+ * Workaround for a TypeScript quirk:
15
+ * types per default have an implicit index signature that makes them
16
+ * assignable to `StoreObject`.
17
+ * interfaces do not have that implicit index signature, so they cannot
18
+ * be assigned to `StoreObject`.
19
+ * This type just maps over a type or interface that is passed in,
20
+ * implicitly adding the index signature.
21
+ * That way, the result can be assigned to `StoreObject`.
22
+ *
23
+ * This is important if some user-defined interface is used e.g.
24
+ * in cache.modify, where the `toReference` method expects a
25
+ * `StoreObject` as input.
26
+ */
13
27
  export type AsStoreObject<T extends {
14
28
  __typename?: string;
15
29
  }> = {
@@ -108,6 +108,9 @@ var KNOWN_DIRECTIVES = [
108
108
  "export",
109
109
  "nonreactive",
110
110
  ];
111
+ // Default stable JSON.stringify implementation used by getStoreKeyName. Can be
112
+ // updated/replaced with something better by calling
113
+ // getStoreKeyName.setStringify(newStringifyFunction).
111
114
  var storeKeyNameStringify = canonicalStringify;
112
115
  export var getStoreKeyName = Object.assign(function (fieldName, args, directives) {
113
116
  if (args &&
@@ -116,8 +119,8 @@ export var getStoreKeyName = Object.assign(function (fieldName, args, directives
116
119
  directives["connection"]["key"]) {
117
120
  if (directives["connection"]["filter"] &&
118
121
  directives["connection"]["filter"].length > 0) {
119
- var filterKeys = directives["connection"]["filter"]
120
- ? directives["connection"]["filter"]
122
+ var filterKeys = directives["connection"]["filter"] ?
123
+ directives["connection"]["filter"]
121
124
  : [];
122
125
  filterKeys.sort();
123
126
  var filteredArgs_1 = {};
@@ -132,6 +135,9 @@ export var getStoreKeyName = Object.assign(function (fieldName, args, directives
132
135
  }
133
136
  var completeFieldName = fieldName;
134
137
  if (args) {
138
+ // We can't use `JSON.stringify` here since it's non-deterministic,
139
+ // and can lead to different store key names being created even though
140
+ // the `args` object used during creation has the same properties/values.
135
141
  var stringifiedArgs = storeKeyNameStringify(args);
136
142
  completeFieldName += "(".concat(stringifiedArgs, ")");
137
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storeUtils.js","sourceRoot":"","sources":["../../../src/utilities/graphql/storeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { newInvariantError } from \"../globals/index.js\";\n\nimport type {\n DirectiveNode,\n FieldNode,\n IntValueNode,\n FloatValueNode,\n StringValueNode,\n BooleanValueNode,\n ObjectValueNode,\n ListValueNode,\n EnumValueNode,\n NullValueNode,\n VariableNode,\n InlineFragmentNode,\n ValueNode,\n SelectionNode,\n NameNode,\n SelectionSetNode,\n DocumentNode,\n FragmentSpreadNode,\n} from \"graphql\";\n\nimport { isNonNullObject } from \"../common/objects.js\";\nimport type { FragmentMap } from \"./fragments.js\";\nimport { getFragmentFromSelection } from \"./fragments.js\";\nimport { canonicalStringify } from \"../common/canonicalStringify.js\";\n\nexport interface Reference {\n readonly __ref: string;\n}\n\nexport function makeReference(id: string): Reference {\n return { __ref: String(id) };\n}\n\nexport function isReference(obj: any): obj is Reference {\n return Boolean(\n obj && typeof obj === \"object\" && typeof obj.__ref === \"string\"\n );\n}\n\nexport type StoreValue =\n | number\n | string\n | string[]\n | Reference\n | Reference[]\n | null\n | undefined\n | void\n | Object;\n\nexport interface StoreObject {\n __typename?: string;\n [storeFieldName: string]: StoreValue;\n}\n\n/**\n * Workaround for a TypeScript quirk:\n * types per default have an implicit index signature that makes them\n * assignable to `StoreObject`.\n * interfaces do not have that implicit index signature, so they cannot\n * be assigned to `StoreObject`.\n * This type just maps over a type or interface that is passed in,\n * implicitly adding the index signature.\n * That way, the result can be assigned to `StoreObject`.\n *\n * This is important if some user-defined interface is used e.g.\n * in cache.modify, where the `toReference` method expects a\n * `StoreObject` as input.\n */\nexport type AsStoreObject<T extends { __typename?: string }> = {\n [K in keyof T]: T[K];\n};\n\nexport function isDocumentNode(value: any): value is DocumentNode {\n return (\n isNonNullObject(value) &&\n (value as DocumentNode).kind === \"Document\" &&\n Array.isArray((value as DocumentNode).definitions)\n );\n}\n\nfunction isStringValue(value: ValueNode): value is StringValueNode {\n return value.kind === \"StringValue\";\n}\n\nfunction isBooleanValue(value: ValueNode): value is BooleanValueNode {\n return value.kind === \"BooleanValue\";\n}\n\nfunction isIntValue(value: ValueNode): value is IntValueNode {\n return value.kind === \"IntValue\";\n}\n\nfunction isFloatValue(value: ValueNode): value is FloatValueNode {\n return value.kind === \"FloatValue\";\n}\n\nfunction isVariable(value: ValueNode): value is VariableNode {\n return value.kind === \"Variable\";\n}\n\nfunction isObjectValue(value: ValueNode): value is ObjectValueNode {\n return value.kind === \"ObjectValue\";\n}\n\nfunction isListValue(value: ValueNode): value is ListValueNode {\n return value.kind === \"ListValue\";\n}\n\nfunction isEnumValue(value: ValueNode): value is EnumValueNode {\n return value.kind === \"EnumValue\";\n}\n\nfunction isNullValue(value: ValueNode): value is NullValueNode {\n return value.kind === \"NullValue\";\n}\n\nexport function valueToObjectRepresentation(\n argObj: any,\n name: NameNode,\n value: ValueNode,\n variables?: Object\n) {\n if (isIntValue(value) || isFloatValue(value)) {\n argObj[name.value] = Number(value.value);\n } else if (isBooleanValue(value) || isStringValue(value)) {\n argObj[name.value] = value.value;\n } else if (isObjectValue(value)) {\n const nestedArgObj = {};\n value.fields.map((obj) =>\n valueToObjectRepresentation(nestedArgObj, obj.name, obj.value, variables)\n );\n argObj[name.value] = nestedArgObj;\n } else if (isVariable(value)) {\n const variableValue = (variables || ({} as any))[value.name.value];\n argObj[name.value] = variableValue;\n } else if (isListValue(value)) {\n argObj[name.value] = value.values.map((listValue) => {\n const nestedArgArrayObj = {};\n valueToObjectRepresentation(\n nestedArgArrayObj,\n name,\n listValue,\n variables\n );\n return (nestedArgArrayObj as any)[name.value];\n });\n } else if (isEnumValue(value)) {\n argObj[name.value] = (value as EnumValueNode).value;\n } else if (isNullValue(value)) {\n argObj[name.value] = null;\n } else {\n throw newInvariantError(\n `The inline argument \"%s\" of kind \"%s\"` +\n \"is not supported. Use variables instead of inline arguments to \" +\n \"overcome this limitation.\",\n name.value,\n (value as any).kind\n );\n }\n}\n\nexport function storeKeyNameFromField(\n field: FieldNode,\n variables?: Object\n): string {\n let directivesObj: any = null;\n if (field.directives) {\n directivesObj = {};\n field.directives.forEach((directive) => {\n directivesObj[directive.name.value] = {};\n\n if (directive.arguments) {\n directive.arguments.forEach(({ name, value }) =>\n valueToObjectRepresentation(\n directivesObj[directive.name.value],\n name,\n value,\n variables\n )\n );\n }\n });\n }\n\n let argObj: any = null;\n if (field.arguments && field.arguments.length) {\n argObj = {};\n field.arguments.forEach(({ name, value }) =>\n valueToObjectRepresentation(argObj, name, value, variables)\n );\n }\n\n return getStoreKeyName(field.name.value, argObj, directivesObj);\n}\n\nexport type Directives = {\n [directiveName: string]: {\n [argName: string]: any;\n };\n};\n\nconst KNOWN_DIRECTIVES: string[] = [\n \"connection\",\n \"include\",\n \"skip\",\n \"client\",\n \"rest\",\n \"export\",\n \"nonreactive\",\n];\n\n// Default stable JSON.stringify implementation used by getStoreKeyName. Can be\n// updated/replaced with something better by calling\n// getStoreKeyName.setStringify(newStringifyFunction).\nlet storeKeyNameStringify: (value: any) => string = canonicalStringify;\n\nexport const getStoreKeyName = Object.assign(\n function (\n fieldName: string,\n args?: Record<string, any> | null,\n directives?: Directives\n ): string {\n if (\n args &&\n directives &&\n directives[\"connection\"] &&\n directives[\"connection\"][\"key\"]\n ) {\n if (\n directives[\"connection\"][\"filter\"] &&\n (directives[\"connection\"][\"filter\"] as string[]).length > 0\n ) {\n const filterKeys = directives[\"connection\"][\"filter\"]\n ? (directives[\"connection\"][\"filter\"] as string[])\n : [];\n filterKeys.sort();\n\n const filteredArgs = {} as { [key: string]: any };\n filterKeys.forEach((key) => {\n filteredArgs[key] = args[key];\n });\n\n return `${directives[\"connection\"][\"key\"]}(${storeKeyNameStringify(\n filteredArgs\n )})`;\n } else {\n return directives[\"connection\"][\"key\"];\n }\n }\n\n let completeFieldName: string = fieldName;\n\n if (args) {\n // We can't use `JSON.stringify` here since it's non-deterministic,\n // and can lead to different store key names being created even though\n // the `args` object used during creation has the same properties/values.\n const stringifiedArgs: string = storeKeyNameStringify(args);\n completeFieldName += `(${stringifiedArgs})`;\n }\n\n if (directives) {\n Object.keys(directives).forEach((key) => {\n if (KNOWN_DIRECTIVES.indexOf(key) !== -1) return;\n if (directives[key] && Object.keys(directives[key]).length) {\n completeFieldName += `@${key}(${storeKeyNameStringify(\n directives[key]\n )})`;\n } else {\n completeFieldName += `@${key}`;\n }\n });\n }\n\n return completeFieldName;\n },\n {\n setStringify(s: typeof storeKeyNameStringify) {\n const previous = storeKeyNameStringify;\n storeKeyNameStringify = s;\n return previous;\n },\n }\n);\n\nexport function argumentsObjectFromField(\n field: FieldNode | DirectiveNode,\n variables?: Record<string, any>\n): Object | null {\n if (field.arguments && field.arguments.length) {\n const argObj: Object = {};\n field.arguments.forEach(({ name, value }) =>\n valueToObjectRepresentation(argObj, name, value, variables)\n );\n return argObj;\n }\n return null;\n}\n\nexport function resultKeyNameFromField(field: FieldNode): string {\n return field.alias ? field.alias.value : field.name.value;\n}\n\nexport function getTypenameFromResult(\n result: Record<string, any>,\n selectionSet: SelectionSetNode,\n fragmentMap?: FragmentMap\n): string | undefined {\n let fragments: undefined | Array<InlineFragmentNode | FragmentSpreadNode>;\n for (const selection of selectionSet.selections) {\n if (isField(selection)) {\n if (selection.name.value === \"__typename\") {\n return result[resultKeyNameFromField(selection)];\n }\n } else if (fragments) {\n fragments.push(selection);\n } else {\n fragments = [selection];\n }\n }\n if (typeof result.__typename === \"string\") {\n return result.__typename;\n }\n if (fragments) {\n for (const selection of fragments) {\n const typename = getTypenameFromResult(\n result,\n getFragmentFromSelection(selection, fragmentMap)!.selectionSet,\n fragmentMap\n );\n if (typeof typename === \"string\") {\n return typename;\n }\n }\n }\n}\n\nexport function isField(selection: SelectionNode): selection is FieldNode {\n return selection.kind === \"Field\";\n}\n\nexport function isInlineFragment(\n selection: SelectionNode\n): selection is InlineFragmentNode {\n return selection.kind === \"InlineFragment\";\n}\n\nexport type VariableValue = (node: VariableNode) => any;\n"]}
1
+ {"version":3,"file":"storeUtils.js","sourceRoot":"","sources":["../../../src/utilities/graphql/storeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { newInvariantError } from \"../globals/index.js\";\n\nimport type {\n DirectiveNode,\n FieldNode,\n IntValueNode,\n FloatValueNode,\n StringValueNode,\n BooleanValueNode,\n ObjectValueNode,\n ListValueNode,\n EnumValueNode,\n NullValueNode,\n VariableNode,\n InlineFragmentNode,\n ValueNode,\n SelectionNode,\n NameNode,\n SelectionSetNode,\n DocumentNode,\n FragmentSpreadNode,\n} from \"graphql\";\n\nimport { isNonNullObject } from \"../common/objects.js\";\nimport type { FragmentMap } from \"./fragments.js\";\nimport { getFragmentFromSelection } from \"./fragments.js\";\nimport { canonicalStringify } from \"../common/canonicalStringify.js\";\n\nexport interface Reference {\n readonly __ref: string;\n}\n\nexport function makeReference(id: string): Reference {\n return { __ref: String(id) };\n}\n\nexport function isReference(obj: any): obj is Reference {\n return Boolean(\n obj && typeof obj === \"object\" && typeof obj.__ref === \"string\"\n );\n}\n\nexport type StoreValue =\n | number\n | string\n | string[]\n | Reference\n | Reference[]\n | null\n | undefined\n | void\n | Object;\n\nexport interface StoreObject {\n __typename?: string;\n [storeFieldName: string]: StoreValue;\n}\n\n/**\n * Workaround for a TypeScript quirk:\n * types per default have an implicit index signature that makes them\n * assignable to `StoreObject`.\n * interfaces do not have that implicit index signature, so they cannot\n * be assigned to `StoreObject`.\n * This type just maps over a type or interface that is passed in,\n * implicitly adding the index signature.\n * That way, the result can be assigned to `StoreObject`.\n *\n * This is important if some user-defined interface is used e.g.\n * in cache.modify, where the `toReference` method expects a\n * `StoreObject` as input.\n */\nexport type AsStoreObject<T extends { __typename?: string }> = {\n [K in keyof T]: T[K];\n};\n\nexport function isDocumentNode(value: any): value is DocumentNode {\n return (\n isNonNullObject(value) &&\n (value as DocumentNode).kind === \"Document\" &&\n Array.isArray((value as DocumentNode).definitions)\n );\n}\n\nfunction isStringValue(value: ValueNode): value is StringValueNode {\n return value.kind === \"StringValue\";\n}\n\nfunction isBooleanValue(value: ValueNode): value is BooleanValueNode {\n return value.kind === \"BooleanValue\";\n}\n\nfunction isIntValue(value: ValueNode): value is IntValueNode {\n return value.kind === \"IntValue\";\n}\n\nfunction isFloatValue(value: ValueNode): value is FloatValueNode {\n return value.kind === \"FloatValue\";\n}\n\nfunction isVariable(value: ValueNode): value is VariableNode {\n return value.kind === \"Variable\";\n}\n\nfunction isObjectValue(value: ValueNode): value is ObjectValueNode {\n return value.kind === \"ObjectValue\";\n}\n\nfunction isListValue(value: ValueNode): value is ListValueNode {\n return value.kind === \"ListValue\";\n}\n\nfunction isEnumValue(value: ValueNode): value is EnumValueNode {\n return value.kind === \"EnumValue\";\n}\n\nfunction isNullValue(value: ValueNode): value is NullValueNode {\n return value.kind === \"NullValue\";\n}\n\nexport function valueToObjectRepresentation(\n argObj: any,\n name: NameNode,\n value: ValueNode,\n variables?: Object\n) {\n if (isIntValue(value) || isFloatValue(value)) {\n argObj[name.value] = Number(value.value);\n } else if (isBooleanValue(value) || isStringValue(value)) {\n argObj[name.value] = value.value;\n } else if (isObjectValue(value)) {\n const nestedArgObj = {};\n value.fields.map((obj) =>\n valueToObjectRepresentation(nestedArgObj, obj.name, obj.value, variables)\n );\n argObj[name.value] = nestedArgObj;\n } else if (isVariable(value)) {\n const variableValue = (variables || ({} as any))[value.name.value];\n argObj[name.value] = variableValue;\n } else if (isListValue(value)) {\n argObj[name.value] = value.values.map((listValue) => {\n const nestedArgArrayObj = {};\n valueToObjectRepresentation(\n nestedArgArrayObj,\n name,\n listValue,\n variables\n );\n return (nestedArgArrayObj as any)[name.value];\n });\n } else if (isEnumValue(value)) {\n argObj[name.value] = (value as EnumValueNode).value;\n } else if (isNullValue(value)) {\n argObj[name.value] = null;\n } else {\n throw newInvariantError(\n `The inline argument \"%s\" of kind \"%s\"` +\n \"is not supported. Use variables instead of inline arguments to \" +\n \"overcome this limitation.\",\n name.value,\n (value as any).kind\n );\n }\n}\n\nexport function storeKeyNameFromField(\n field: FieldNode,\n variables?: Object\n): string {\n let directivesObj: any = null;\n if (field.directives) {\n directivesObj = {};\n field.directives.forEach((directive) => {\n directivesObj[directive.name.value] = {};\n\n if (directive.arguments) {\n directive.arguments.forEach(({ name, value }) =>\n valueToObjectRepresentation(\n directivesObj[directive.name.value],\n name,\n value,\n variables\n )\n );\n }\n });\n }\n\n let argObj: any = null;\n if (field.arguments && field.arguments.length) {\n argObj = {};\n field.arguments.forEach(({ name, value }) =>\n valueToObjectRepresentation(argObj, name, value, variables)\n );\n }\n\n return getStoreKeyName(field.name.value, argObj, directivesObj);\n}\n\nexport type Directives = {\n [directiveName: string]: {\n [argName: string]: any;\n };\n};\n\nconst KNOWN_DIRECTIVES: string[] = [\n \"connection\",\n \"include\",\n \"skip\",\n \"client\",\n \"rest\",\n \"export\",\n \"nonreactive\",\n];\n\n// Default stable JSON.stringify implementation used by getStoreKeyName. Can be\n// updated/replaced with something better by calling\n// getStoreKeyName.setStringify(newStringifyFunction).\nlet storeKeyNameStringify: (value: any) => string = canonicalStringify;\n\nexport const getStoreKeyName = Object.assign(\n function (\n fieldName: string,\n args?: Record<string, any> | null,\n directives?: Directives\n ): string {\n if (\n args &&\n directives &&\n directives[\"connection\"] &&\n directives[\"connection\"][\"key\"]\n ) {\n if (\n directives[\"connection\"][\"filter\"] &&\n (directives[\"connection\"][\"filter\"] as string[]).length > 0\n ) {\n const filterKeys =\n directives[\"connection\"][\"filter\"] ?\n (directives[\"connection\"][\"filter\"] as string[])\n : [];\n filterKeys.sort();\n\n const filteredArgs = {} as { [key: string]: any };\n filterKeys.forEach((key) => {\n filteredArgs[key] = args[key];\n });\n\n return `${directives[\"connection\"][\"key\"]}(${storeKeyNameStringify(\n filteredArgs\n )})`;\n } else {\n return directives[\"connection\"][\"key\"];\n }\n }\n\n let completeFieldName: string = fieldName;\n\n if (args) {\n // We can't use `JSON.stringify` here since it's non-deterministic,\n // and can lead to different store key names being created even though\n // the `args` object used during creation has the same properties/values.\n const stringifiedArgs: string = storeKeyNameStringify(args);\n completeFieldName += `(${stringifiedArgs})`;\n }\n\n if (directives) {\n Object.keys(directives).forEach((key) => {\n if (KNOWN_DIRECTIVES.indexOf(key) !== -1) return;\n if (directives[key] && Object.keys(directives[key]).length) {\n completeFieldName += `@${key}(${storeKeyNameStringify(\n directives[key]\n )})`;\n } else {\n completeFieldName += `@${key}`;\n }\n });\n }\n\n return completeFieldName;\n },\n {\n setStringify(s: typeof storeKeyNameStringify) {\n const previous = storeKeyNameStringify;\n storeKeyNameStringify = s;\n return previous;\n },\n }\n);\n\nexport function argumentsObjectFromField(\n field: FieldNode | DirectiveNode,\n variables?: Record<string, any>\n): Object | null {\n if (field.arguments && field.arguments.length) {\n const argObj: Object = {};\n field.arguments.forEach(({ name, value }) =>\n valueToObjectRepresentation(argObj, name, value, variables)\n );\n return argObj;\n }\n return null;\n}\n\nexport function resultKeyNameFromField(field: FieldNode): string {\n return field.alias ? field.alias.value : field.name.value;\n}\n\nexport function getTypenameFromResult(\n result: Record<string, any>,\n selectionSet: SelectionSetNode,\n fragmentMap?: FragmentMap\n): string | undefined {\n let fragments: undefined | Array<InlineFragmentNode | FragmentSpreadNode>;\n for (const selection of selectionSet.selections) {\n if (isField(selection)) {\n if (selection.name.value === \"__typename\") {\n return result[resultKeyNameFromField(selection)];\n }\n } else if (fragments) {\n fragments.push(selection);\n } else {\n fragments = [selection];\n }\n }\n if (typeof result.__typename === \"string\") {\n return result.__typename;\n }\n if (fragments) {\n for (const selection of fragments) {\n const typename = getTypenameFromResult(\n result,\n getFragmentFromSelection(selection, fragmentMap)!.selectionSet,\n fragmentMap\n );\n if (typeof typename === \"string\") {\n return typename;\n }\n }\n }\n}\n\nexport function isField(selection: SelectionNode): selection is FieldNode {\n return selection.kind === \"Field\";\n}\n\nexport function isInlineFragment(\n selection: SelectionNode\n): selection is InlineFragmentNode {\n return selection.kind === \"InlineFragment\";\n}\n\nexport type VariableValue = (node: VariableNode) => any;\n"]}