@shopify/hydrogen 0.11.0-experimental.1 → 0.11.1-experimental.0

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 (264) hide show
  1. package/CHANGELOG.md +504 -0
  2. package/dist/esnext/client.d.ts +1 -1
  3. package/dist/esnext/client.js +1 -1
  4. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +1 -1
  5. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +11 -2
  6. package/dist/esnext/components/CartEstimatedCost/CartEstimatedCost.client.js +1 -1
  7. package/dist/esnext/components/CartLineImage/CartLineImage.client.js +2 -2
  8. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.d.ts +1 -1
  9. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +1 -1
  10. package/dist/esnext/components/CartProvider/CartProvider.client.d.ts +2 -2
  11. package/dist/esnext/components/CartProvider/CartProvider.client.js +1 -1
  12. package/dist/esnext/components/ExternalVideo/ExternalVideo.d.ts +1 -1
  13. package/dist/esnext/components/ExternalVideo/ExternalVideo.js +2 -2
  14. package/dist/esnext/components/Image/Image.d.ts +1 -1
  15. package/dist/esnext/components/Image/Image.js +9 -9
  16. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.d.ts +13 -4
  17. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +5 -3
  18. package/dist/esnext/components/MediaFile/MediaFile.d.ts +8 -6
  19. package/dist/esnext/components/MediaFile/MediaFile.js +6 -6
  20. package/dist/esnext/components/Metafield/Metafield.client.d.ts +1 -1
  21. package/dist/esnext/components/Metafield/Metafield.client.js +16 -16
  22. package/dist/esnext/components/ModelViewer/ModelViewer.client.d.ts +1 -1
  23. package/dist/esnext/components/ModelViewer/ModelViewer.client.js +1 -1
  24. package/dist/esnext/components/Money/Money.client.d.ts +1 -1
  25. package/dist/esnext/components/Money/Money.client.js +2 -2
  26. package/dist/esnext/components/ProductMetafield/ProductMetafield.client.d.ts +3 -1
  27. package/dist/esnext/components/ProductMetafield/ProductMetafield.client.js +21 -4
  28. package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +5 -3
  29. package/dist/esnext/components/ProductPrice/ProductPrice.client.js +30 -9
  30. package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.d.ts +8 -0
  31. package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.js +12 -0
  32. package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +8 -7
  33. package/dist/esnext/components/ProductProvider/ProductProvider.client.js +9 -35
  34. package/dist/esnext/components/ProductProvider/context.d.ts +10 -6
  35. package/dist/esnext/components/ProductProvider/context.js +1 -0
  36. package/dist/esnext/components/Seo/DefaultPageSeo.client.js +2 -2
  37. package/dist/esnext/components/Seo/DescriptionSeo.client.js +2 -2
  38. package/dist/esnext/components/Seo/HomePageSeo.client.js +2 -2
  39. package/dist/esnext/components/Seo/ImageSeo.client.js +2 -2
  40. package/dist/esnext/components/Seo/ProductSeo.client.js +5 -3
  41. package/dist/esnext/components/Seo/TitleSeo.client.js +2 -2
  42. package/dist/esnext/components/Seo/TwitterSeo.client.js +2 -2
  43. package/dist/esnext/components/Seo/types.d.ts +1 -1
  44. package/dist/esnext/components/UnitPrice/UnitPrice.client.d.ts +2 -2
  45. package/dist/esnext/components/UnitPrice/UnitPrice.client.js +3 -3
  46. package/dist/esnext/components/Video/Video.d.ts +1 -1
  47. package/dist/esnext/components/Video/Video.js +3 -3
  48. package/dist/esnext/components/index.d.ts +0 -8
  49. package/dist/esnext/components/index.js +0 -8
  50. package/dist/esnext/entry-client.js +1 -1
  51. package/dist/esnext/entry-server.d.ts +18 -2
  52. package/dist/esnext/entry-server.js +347 -329
  53. package/dist/esnext/foundation/Head/Head.client.d.ts +5 -0
  54. package/dist/esnext/foundation/Head/Head.client.js +10 -0
  55. package/dist/esnext/foundation/Head/index.d.ts +1 -0
  56. package/dist/esnext/foundation/Head/index.js +1 -0
  57. package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +2 -1
  58. package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +43 -4
  59. package/dist/esnext/foundation/useQuery/hooks.d.ts +11 -3
  60. package/dist/esnext/foundation/useQuery/hooks.js +21 -5
  61. package/dist/esnext/framework/CachingStrategy/index.d.ts +10 -0
  62. package/dist/esnext/framework/CachingStrategy/index.js +96 -0
  63. package/dist/esnext/framework/Hydration/Html.js +5 -12
  64. package/dist/esnext/framework/Hydration/ServerComponentRequest.server.d.ts +20 -2
  65. package/dist/esnext/framework/Hydration/ServerComponentRequest.server.js +51 -2
  66. package/dist/esnext/framework/Hydration/ServerComponentResponse.server.d.ts +2 -2
  67. package/dist/esnext/framework/Hydration/ServerComponentResponse.server.js +2 -11
  68. package/dist/esnext/framework/cache/in-memory.js +6 -5
  69. package/dist/esnext/framework/cache.d.ts +3 -3
  70. package/dist/esnext/framework/cache.js +4 -18
  71. package/dist/esnext/framework/middleware.d.ts +7 -7
  72. package/dist/esnext/framework/middleware.js +15 -43
  73. package/dist/esnext/framework/plugin.js +14 -3
  74. package/dist/esnext/framework/plugins/vite-plugin-hydration-auto-import.d.ts +3 -0
  75. package/dist/esnext/framework/plugins/vite-plugin-hydration-auto-import.js +38 -0
  76. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-client-middleware.d.ts +9 -0
  77. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-client-middleware.js +37 -0
  78. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +2 -1
  79. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -1
  80. package/dist/esnext/framework/plugins/vite-plugin-platform-entry.d.ts +3 -0
  81. package/dist/esnext/framework/plugins/vite-plugin-platform-entry.js +70 -0
  82. package/dist/esnext/hooks/useProduct/useProduct.d.ts +150 -1
  83. package/dist/esnext/hooks/useProduct/useProduct.js +36 -3
  84. package/dist/esnext/hooks/useProductOptions/types.d.ts +1 -1
  85. package/dist/esnext/hooks/useProductOptions/useProductOptions.d.ts +1 -1
  86. package/dist/esnext/hooks/useProductOptions/useProductOptions.js +6 -6
  87. package/dist/esnext/hooks/useShopQuery/hooks.d.ts +11 -4
  88. package/dist/esnext/hooks/useShopQuery/hooks.js +6 -3
  89. package/dist/esnext/index.d.ts +2 -1
  90. package/dist/esnext/index.js +2 -1
  91. package/dist/esnext/platforms/node.d.ts +10 -0
  92. package/dist/esnext/platforms/node.js +38 -0
  93. package/dist/esnext/platforms/worker-event.d.ts +9 -0
  94. package/dist/esnext/platforms/worker-event.js +24 -0
  95. package/dist/esnext/streaming.server.d.ts +17 -7
  96. package/dist/esnext/streaming.server.js +44 -0
  97. package/dist/esnext/types.d.ts +25 -25
  98. package/dist/esnext/utilities/apiRoutes.d.ts +1 -2
  99. package/dist/esnext/utilities/apiRoutes.js +4 -3
  100. package/dist/esnext/utilities/bot-ua.d.ts +4 -0
  101. package/dist/esnext/utilities/bot-ua.js +54 -0
  102. package/dist/esnext/utilities/fetch.js +1 -26
  103. package/dist/esnext/utilities/log/index.d.ts +4 -1
  104. package/dist/esnext/utilities/log/index.js +4 -1
  105. package/dist/esnext/utilities/log/log-cache-api-status.d.ts +1 -0
  106. package/dist/esnext/utilities/log/log-cache-api-status.js +9 -0
  107. package/dist/esnext/utilities/log/log-cache-header.d.ts +10 -0
  108. package/dist/esnext/utilities/log/log-cache-header.js +30 -0
  109. package/dist/esnext/utilities/log/log-query-timeline.d.ts +12 -0
  110. package/dist/esnext/utilities/log/log-query-timeline.js +83 -0
  111. package/dist/esnext/utilities/log/log.d.ts +11 -8
  112. package/dist/esnext/utilities/log/log.js +24 -35
  113. package/dist/esnext/utilities/log/utils.d.ts +3 -0
  114. package/dist/esnext/utilities/log/utils.js +13 -0
  115. package/dist/esnext/utilities/template.d.ts +9 -0
  116. package/dist/esnext/utilities/template.js +23 -0
  117. package/dist/{worker/foundation/ShopifyProvider/types.js → esnext/utilities/web-api-polyfill.d.ts} +0 -0
  118. package/dist/esnext/utilities/web-api-polyfill.js +19 -0
  119. package/dist/esnext/version.d.ts +1 -1
  120. package/dist/esnext/version.js +1 -1
  121. package/dist/node/entry-server.d.ts +22 -0
  122. package/dist/node/entry-server.js +581 -0
  123. package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +23 -0
  124. package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.js +132 -0
  125. package/dist/node/foundation/ServerRequestProvider/index.d.ts +1 -0
  126. package/dist/node/foundation/ServerRequestProvider/index.js +13 -0
  127. package/dist/node/foundation/ServerStateProvider/ServerStateProvider.client.d.ts +25 -0
  128. package/dist/node/foundation/ServerStateProvider/ServerStateProvider.client.js +68 -0
  129. package/dist/node/foundation/ServerStateProvider/index.d.ts +2 -0
  130. package/dist/node/foundation/ServerStateProvider/index.js +6 -0
  131. package/dist/node/framework/CachingStrategy/index.d.ts +10 -0
  132. package/dist/node/framework/CachingStrategy/index.js +108 -0
  133. package/dist/node/framework/Hydration/Html.js +5 -12
  134. package/dist/node/framework/Hydration/ServerComponentRequest.server.d.ts +20 -2
  135. package/dist/node/framework/Hydration/ServerComponentRequest.server.js +50 -1
  136. package/dist/node/framework/Hydration/ServerComponentResponse.server.d.ts +2 -2
  137. package/dist/node/framework/Hydration/ServerComponentResponse.server.js +2 -11
  138. package/dist/node/framework/cache/in-memory.js +6 -5
  139. package/dist/node/framework/cache.d.ts +3 -3
  140. package/dist/node/framework/cache.js +6 -20
  141. package/dist/node/framework/middleware.d.ts +7 -7
  142. package/dist/node/framework/middleware.js +14 -46
  143. package/dist/node/framework/plugin.js +33 -3
  144. package/dist/node/framework/plugins/vite-plugin-hydration-auto-import.d.ts +3 -0
  145. package/dist/node/framework/plugins/vite-plugin-hydration-auto-import.js +43 -0
  146. package/dist/node/framework/plugins/vite-plugin-hydrogen-client-middleware.d.ts +9 -0
  147. package/dist/node/framework/plugins/vite-plugin-hydrogen-client-middleware.js +39 -0
  148. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +2 -1
  149. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +4 -1
  150. package/dist/node/framework/plugins/vite-plugin-platform-entry.d.ts +3 -0
  151. package/dist/node/framework/plugins/vite-plugin-platform-entry.js +75 -0
  152. package/dist/node/streaming.server.d.ts +21 -0
  153. package/dist/node/streaming.server.js +59 -0
  154. package/dist/node/types.d.ts +25 -25
  155. package/dist/node/utilities/apiRoutes.d.ts +1 -2
  156. package/dist/node/utilities/apiRoutes.js +4 -3
  157. package/dist/node/utilities/bot-ua.d.ts +4 -0
  158. package/dist/node/utilities/bot-ua.js +58 -0
  159. package/dist/node/utilities/defer.d.ts +6 -0
  160. package/dist/node/utilities/defer.js +18 -0
  161. package/dist/node/utilities/error.d.ts +1 -0
  162. package/dist/node/utilities/error.js +10 -0
  163. package/dist/node/utilities/log/index.d.ts +4 -0
  164. package/dist/node/utilities/log/index.js +18 -0
  165. package/dist/node/utilities/log/log-cache-api-status.d.ts +1 -0
  166. package/dist/node/utilities/log/log-cache-api-status.js +13 -0
  167. package/dist/node/utilities/log/log-cache-header.d.ts +10 -0
  168. package/dist/node/utilities/log/log-cache-header.js +35 -0
  169. package/dist/node/utilities/log/log-query-timeline.d.ts +12 -0
  170. package/dist/node/utilities/log/log-query-timeline.js +88 -0
  171. package/dist/node/utilities/log/log.d.ts +11 -8
  172. package/dist/node/utilities/log/log.js +27 -37
  173. package/dist/node/utilities/log/utils.d.ts +3 -0
  174. package/dist/node/utilities/log/utils.js +18 -0
  175. package/dist/node/utilities/template.d.ts +9 -0
  176. package/dist/node/utilities/template.js +27 -0
  177. package/dist/{worker/types.js → node/utilities/web-api-polyfill.d.ts} +0 -0
  178. package/dist/node/utilities/web-api-polyfill.js +43 -0
  179. package/package.json +20 -10
  180. package/web-polyfills.js +1 -0
  181. package/LICENSE.md +0 -7
  182. package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.d.ts +0 -22
  183. package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.js +0 -13
  184. package/dist/esnext/components/CartLineAttributes/index.d.ts +0 -1
  185. package/dist/esnext/components/CartLineAttributes/index.js +0 -1
  186. package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.d.ts +0 -21
  187. package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.js +0 -13
  188. package/dist/esnext/components/CartLineSelectedOptions/index.d.ts +0 -1
  189. package/dist/esnext/components/CartLineSelectedOptions/index.js +0 -1
  190. package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.d.ts +0 -11
  191. package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.js +0 -17
  192. package/dist/esnext/components/SelectedVariantAddToCartButton/index.d.ts +0 -1
  193. package/dist/esnext/components/SelectedVariantAddToCartButton/index.js +0 -1
  194. package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.d.ts +0 -9
  195. package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.js +0 -17
  196. package/dist/esnext/components/SelectedVariantBuyNowButton/index.d.ts +0 -1
  197. package/dist/esnext/components/SelectedVariantBuyNowButton/index.js +0 -1
  198. package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.d.ts +0 -10
  199. package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.js +0 -16
  200. package/dist/esnext/components/SelectedVariantImage/index.d.ts +0 -1
  201. package/dist/esnext/components/SelectedVariantImage/index.js +0 -1
  202. package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.d.ts +0 -15
  203. package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.js +0 -24
  204. package/dist/esnext/components/SelectedVariantMetafield/index.d.ts +0 -1
  205. package/dist/esnext/components/SelectedVariantMetafield/index.js +0 -1
  206. package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.d.ts +0 -12
  207. package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.js +0 -22
  208. package/dist/esnext/components/SelectedVariantPrice/index.d.ts +0 -1
  209. package/dist/esnext/components/SelectedVariantPrice/index.js +0 -1
  210. package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.d.ts +0 -8
  211. package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.js +0 -18
  212. package/dist/esnext/components/SelectedVariantShopPayButton/index.d.ts +0 -1
  213. package/dist/esnext/components/SelectedVariantShopPayButton/index.js +0 -1
  214. package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.d.ts +0 -7
  215. package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.js +0 -16
  216. package/dist/esnext/components/SelectedVariantUnitPrice/index.d.ts +0 -1
  217. package/dist/esnext/components/SelectedVariantUnitPrice/index.js +0 -1
  218. package/dist/esnext/foundation/Helmet/Helmet.client.d.ts +0 -10
  219. package/dist/esnext/foundation/Helmet/Helmet.client.js +0 -10
  220. package/dist/esnext/foundation/Helmet/index.d.ts +0 -1
  221. package/dist/esnext/foundation/Helmet/index.js +0 -1
  222. package/dist/esnext/handle-event.d.ts +0 -23
  223. package/dist/esnext/handle-event.js +0 -132
  224. package/dist/esnext/handle-worker-event.d.ts +0 -11
  225. package/dist/esnext/handle-worker-event.js +0 -14
  226. package/dist/node/foundation/Helmet/Helmet.client.d.ts +0 -10
  227. package/dist/node/foundation/Helmet/Helmet.client.js +0 -17
  228. package/dist/node/foundation/Helmet/index.d.ts +0 -1
  229. package/dist/node/foundation/Helmet/index.js +0 -5
  230. package/dist/node/foundation/ssr-interop.d.ts +0 -29
  231. package/dist/node/foundation/ssr-interop.js +0 -39
  232. package/dist/node/handle-event.d.ts +0 -23
  233. package/dist/node/handle-event.js +0 -135
  234. package/dist/worker/constants.d.ts +0 -1
  235. package/dist/worker/constants.js +0 -1
  236. package/dist/worker/foundation/Helmet/Helmet.client.d.ts +0 -10
  237. package/dist/worker/foundation/Helmet/Helmet.client.js +0 -10
  238. package/dist/worker/foundation/Helmet/index.d.ts +0 -1
  239. package/dist/worker/foundation/Helmet/index.js +0 -1
  240. package/dist/worker/foundation/ShopifyProvider/types.d.ts +0 -15
  241. package/dist/worker/foundation/ssr-interop.d.ts +0 -29
  242. package/dist/worker/foundation/ssr-interop.js +0 -35
  243. package/dist/worker/framework/Hydration/ServerComponentRequest.server.d.ts +0 -23
  244. package/dist/worker/framework/Hydration/ServerComponentRequest.server.js +0 -57
  245. package/dist/worker/framework/config.d.ts +0 -6
  246. package/dist/worker/framework/config.js +0 -6
  247. package/dist/worker/framework/runtime.d.ts +0 -13
  248. package/dist/worker/framework/runtime.js +0 -27
  249. package/dist/worker/graphql/types/types.d.ts +0 -5761
  250. package/dist/worker/graphql/types/types.js +0 -1436
  251. package/dist/worker/handle-event.d.ts +0 -23
  252. package/dist/worker/handle-event.js +0 -132
  253. package/dist/worker/handle-worker-event.d.ts +0 -11
  254. package/dist/worker/handle-worker-event.js +0 -14
  255. package/dist/worker/types.d.ts +0 -96
  256. package/dist/worker/utilities/apiRoutes.d.ts +0 -21
  257. package/dist/worker/utilities/apiRoutes.js +0 -87
  258. package/dist/worker/utilities/log/log.d.ts +0 -18
  259. package/dist/worker/utilities/log/log.js +0 -77
  260. package/dist/worker/utilities/matchPath.d.ts +0 -10
  261. package/dist/worker/utilities/matchPath.js +0 -54
  262. package/dist/worker/utilities/timing.d.ts +0 -7
  263. package/dist/worker/utilities/timing.js +0 -14
  264. package/worker.js +0 -1
@@ -0,0 +1,581 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.renderHydrogen = void 0;
26
+ const react_1 = __importDefault(require("react"));
27
+ const log_1 = require("./utilities/log");
28
+ const error_1 = require("./utilities/error");
29
+ const defer_1 = require("./utilities/defer");
30
+ const Html_1 = require("./framework/Hydration/Html");
31
+ const ServerComponentResponse_server_1 = require("./framework/Hydration/ServerComponentResponse.server");
32
+ const ServerComponentRequest_server_1 = require("./framework/Hydration/ServerComponentRequest.server");
33
+ const cache_1 = require("./framework/cache");
34
+ const ServerRequestProvider_1 = require("./foundation/ServerRequestProvider");
35
+ const apiRoutes_1 = require("./utilities/apiRoutes");
36
+ const ServerStateProvider_1 = require("./foundation/ServerStateProvider");
37
+ const bot_ua_1 = require("./utilities/bot-ua");
38
+ const runtime_1 = require("./framework/runtime");
39
+ const config_1 = require("./framework/config");
40
+ const streaming_server_1 = require("./streaming.server");
41
+ const constants_1 = require("./constants");
42
+ const template_1 = require("./utilities/template");
43
+ const HTML_CONTENT_TYPE = 'text/html; charset=UTF-8';
44
+ const renderHydrogen = (App, { pages }) => {
45
+ const handleRequest = async function (rawRequest, { indexTemplate, streamableResponse, dev, cache, context, nonce }) {
46
+ const request = new ServerComponentRequest_server_1.ServerComponentRequest(rawRequest);
47
+ const url = new URL(request.url);
48
+ const log = (0, log_1.getLoggerWithContext)(request);
49
+ const componentResponse = new ServerComponentResponse_server_1.ServerComponentResponse();
50
+ /**
51
+ * Inject the cache & context into the module loader so we can pull it out for subrequests.
52
+ */
53
+ (0, runtime_1.setCache)(cache);
54
+ (0, runtime_1.setContext)(context);
55
+ (0, config_1.setConfig)({ dev });
56
+ const isReactHydrationRequest = url.pathname === constants_1.RSC_PATHNAME;
57
+ let template = typeof indexTemplate === 'function'
58
+ ? await indexTemplate(url.toString())
59
+ : indexTemplate;
60
+ if (template && typeof template !== 'string') {
61
+ template = template.default;
62
+ }
63
+ if (!isReactHydrationRequest && pages) {
64
+ const apiRoute = getApiRoute(url, { pages });
65
+ // The API Route might have a default export, making it also a server component
66
+ // If it does, only render the API route if the request method is GET
67
+ if (apiRoute &&
68
+ (!apiRoute.hasServerComponent || request.method !== 'GET')) {
69
+ return (0, apiRoutes_1.renderApiRoute)(request, apiRoute);
70
+ }
71
+ }
72
+ const isStreamable = !(0, bot_ua_1.isBotUA)(url, request.headers.get('user-agent')) &&
73
+ (!!streamableResponse || (0, streaming_server_1.supportsReadableStream)());
74
+ const params = {
75
+ App,
76
+ log,
77
+ dev,
78
+ pages,
79
+ nonce,
80
+ request,
81
+ template,
82
+ isStreamable,
83
+ componentResponse,
84
+ response: streamableResponse,
85
+ };
86
+ if (isReactHydrationRequest) {
87
+ return hydrate(url, params);
88
+ }
89
+ /**
90
+ * Stream back real-user responses, but for bots/etc,
91
+ * use `render` instead. This is because we need to inject <head>
92
+ * things for SEO reasons.
93
+ */
94
+ if (isStreamable) {
95
+ return stream(url, params);
96
+ }
97
+ return render(url, params);
98
+ };
99
+ return handleRequest;
100
+ };
101
+ exports.renderHydrogen = renderHydrogen;
102
+ function getApiRoute(url, { pages }) {
103
+ const routes = (0, apiRoutes_1.getApiRoutesFromPages)(pages);
104
+ return (0, apiRoutes_1.getApiRouteFromURL)(url, routes);
105
+ }
106
+ /**
107
+ * The render function is responsible for turning the provided `App` into an HTML string,
108
+ * and returning any initial state that needs to be hydrated into the client version of the app.
109
+ * NOTE: This is currently only used for SEO bots or Worker runtime (where Stream is not yet supported).
110
+ */
111
+ async function render(url, { App, pages, request, componentResponse, log, template, nonce, dev, }) {
112
+ const state = { pathname: url.pathname, search: url.search };
113
+ const { AppSSR, rscReadable } = buildAppSSR({
114
+ App,
115
+ state,
116
+ request,
117
+ response: componentResponse,
118
+ pages,
119
+ log,
120
+ }, { template });
121
+ let [html, flight] = await Promise.all([
122
+ renderToBufferedString(AppSSR, { log, nonce }),
123
+ (0, streaming_server_1.bufferReadableStream)(rscReadable.getReader()),
124
+ ]);
125
+ const { headers, status, statusText } = getResponseOptions(componentResponse);
126
+ /**
127
+ * TODO: Also add `Vary` headers for `accept-language` and any other keys
128
+ * we want to shard our full-page cache for all Hydrogen storefronts.
129
+ */
130
+ headers[(0, cache_1.getCacheControlHeader)({ dev })] = componentResponse.cacheControlHeader;
131
+ if (componentResponse.customBody) {
132
+ // This can be used to return sitemap.xml or any other custom response.
133
+ postRequestTasks('ssr', status, request, componentResponse);
134
+ return new Response(await componentResponse.customBody, {
135
+ status,
136
+ statusText,
137
+ headers,
138
+ });
139
+ }
140
+ headers['Content-type'] = HTML_CONTENT_TYPE;
141
+ const { bodyAttributes, htmlAttributes, ...head } = extractHeadElements(request.ctx.head);
142
+ html = html
143
+ .replace(/<head>(.*?)<\/head>/s, generateHeadTag(head))
144
+ .replace('<html', htmlAttributes ? `<html ${htmlAttributes}` : '$&')
145
+ .replace('<body', bodyAttributes ? `<body ${bodyAttributes}` : '$&')
146
+ .replace('</body>', flight
147
+ ? `${flightContainer({ init: true, nonce, chunk: flight })}</body>`
148
+ : '$&');
149
+ postRequestTasks('ssr', status, request, componentResponse);
150
+ return new Response(html, {
151
+ status,
152
+ statusText,
153
+ headers,
154
+ });
155
+ }
156
+ /**
157
+ * Stream a response to the client. NOTE: This omits custom `<head>`
158
+ * information, so this method should not be used by crawlers.
159
+ */
160
+ async function stream(url, { App, pages, request, response, componentResponse, log, template, nonce, dev, }) {
161
+ const state = { pathname: url.pathname, search: url.search };
162
+ log.trace('start stream');
163
+ const { noScriptTemplate, bootstrapScripts, bootstrapModules } = (0, template_1.stripScriptsFromTemplate)(template);
164
+ const { AppSSR, rscReadable } = buildAppSSR({
165
+ App,
166
+ state,
167
+ request,
168
+ response: componentResponse,
169
+ log,
170
+ pages,
171
+ }, {
172
+ template: noScriptTemplate,
173
+ htmlAttrs: { lang: 'en' },
174
+ });
175
+ const rscToScriptTagReadable = new ReadableStream({
176
+ start(controller) {
177
+ log.trace('rsc start chunks');
178
+ let init = true;
179
+ const encoder = new TextEncoder();
180
+ (0, streaming_server_1.bufferReadableStream)(rscReadable.getReader(), (chunk) => {
181
+ const scriptTag = flightContainer({ init, chunk, nonce });
182
+ controller.enqueue(encoder.encode(scriptTag));
183
+ init = false;
184
+ }).then(() => {
185
+ log.trace('rsc finish chunks');
186
+ return controller.close();
187
+ });
188
+ },
189
+ });
190
+ let didError;
191
+ if (__WORKER__) {
192
+ const deferredShouldReturnApp = (0, defer_1.defer)();
193
+ const encoder = new TextEncoder();
194
+ const transform = new TransformStream();
195
+ const writable = transform.writable.getWriter();
196
+ const responseOptions = {};
197
+ const ssrReadable = (0, streaming_server_1.ssrRenderToReadableStream)(AppSSR, {
198
+ nonce,
199
+ bootstrapScripts,
200
+ bootstrapModules,
201
+ onCompleteShell() {
202
+ log.trace('worker ready to stream');
203
+ Object.assign(responseOptions, getResponseOptions(componentResponse, didError));
204
+ /**
205
+ * TODO: This assumes `response.cache()` has been called _before_ any
206
+ * queries which might be caught behind Suspense. Clarify this or add
207
+ * additional checks downstream?
208
+ */
209
+ responseOptions.headers[(0, cache_1.getCacheControlHeader)({ dev })] =
210
+ componentResponse.cacheControlHeader;
211
+ if (isRedirect(responseOptions)) {
212
+ // Return redirects early without further rendering/streaming
213
+ return deferredShouldReturnApp.resolve(false);
214
+ }
215
+ if (!componentResponse.canStream())
216
+ return;
217
+ startWritingHtmlToStream(responseOptions, writable, encoder, dev ? didError : undefined);
218
+ deferredShouldReturnApp.resolve(true);
219
+ },
220
+ async onCompleteAll() {
221
+ log.trace('worker complete stream');
222
+ if (componentResponse.canStream())
223
+ return;
224
+ Object.assign(responseOptions, getResponseOptions(componentResponse, didError));
225
+ if (isRedirect(responseOptions)) {
226
+ // Redirects found after any async code
227
+ return deferredShouldReturnApp.resolve(false);
228
+ }
229
+ if (componentResponse.customBody) {
230
+ writable.write(encoder.encode(await componentResponse.customBody));
231
+ return deferredShouldReturnApp.resolve(false);
232
+ }
233
+ startWritingHtmlToStream(responseOptions, writable, encoder, dev ? didError : undefined);
234
+ deferredShouldReturnApp.resolve(true);
235
+ },
236
+ onError(error) {
237
+ didError = error;
238
+ if (dev && deferredShouldReturnApp.status === 'pending') {
239
+ writable.write((0, error_1.getErrorMarkup)(error));
240
+ }
241
+ log.error(error);
242
+ },
243
+ });
244
+ if (await deferredShouldReturnApp.promise) {
245
+ let bufferedSsr = '';
246
+ let isPendingSsrWrite = false;
247
+ const writingSSR = (0, streaming_server_1.bufferReadableStream)(ssrReadable.getReader(), (chunk) => {
248
+ bufferedSsr += chunk;
249
+ if (!isPendingSsrWrite) {
250
+ isPendingSsrWrite = true;
251
+ setTimeout(() => {
252
+ isPendingSsrWrite = false;
253
+ // React can write fractional chunks synchronously.
254
+ // This timeout ensures we only write full HTML tags
255
+ // in order to allow RSC writing concurrently.
256
+ if (bufferedSsr) {
257
+ writable.write(encoder.encode(bufferedSsr));
258
+ bufferedSsr = '';
259
+ }
260
+ }, 0);
261
+ }
262
+ });
263
+ const writingRSC = (0, streaming_server_1.bufferReadableStream)(rscToScriptTagReadable.getReader(), (scriptTag) => writable.write(encoder.encode(scriptTag)));
264
+ Promise.all([writingSSR, writingRSC]).then(() => {
265
+ // Last SSR write might be pending, delay closing the writable one tick
266
+ setTimeout(() => writable.close(), 0);
267
+ postRequestTasks('str', responseOptions.status, request, componentResponse);
268
+ });
269
+ }
270
+ else {
271
+ writable.close();
272
+ postRequestTasks('str', responseOptions.status, request, componentResponse);
273
+ }
274
+ if (await (0, streaming_server_1.isStreamingSupported)()) {
275
+ return new Response(transform.readable, responseOptions);
276
+ }
277
+ const bufferedBody = await (0, streaming_server_1.bufferReadableStream)(transform.readable.getReader());
278
+ return new Response(bufferedBody, responseOptions);
279
+ }
280
+ else if (response) {
281
+ response.socket.on('error', log.fatal);
282
+ const { pipe } = (0, streaming_server_1.ssrRenderToPipeableStream)(AppSSR, {
283
+ nonce,
284
+ bootstrapScripts,
285
+ bootstrapModules,
286
+ onCompleteShell() {
287
+ log.trace('node ready to stream');
288
+ /**
289
+ * TODO: This assumes `response.cache()` has been called _before_ any
290
+ * queries which might be caught behind Suspense. Clarify this or add
291
+ * additional checks downstream?
292
+ */
293
+ response.setHeader((0, cache_1.getCacheControlHeader)({ dev }), componentResponse.cacheControlHeader);
294
+ writeHeadToServerResponse(response, componentResponse, log, didError);
295
+ (0, log_1.logServerResponse)('str', request, response.statusCode);
296
+ if (isRedirect(response)) {
297
+ // Return redirects early without further rendering/streaming
298
+ return response.end();
299
+ }
300
+ if (!componentResponse.canStream())
301
+ return;
302
+ startWritingHtmlToServerResponse(response, dev ? didError : undefined);
303
+ setTimeout(() => {
304
+ log.trace('node pipe response');
305
+ pipe(response);
306
+ }, 0);
307
+ (0, streaming_server_1.bufferReadableStream)(rscToScriptTagReadable.getReader(), (chunk) => {
308
+ log.trace('rsc chunk');
309
+ return response.write(chunk);
310
+ });
311
+ },
312
+ async onCompleteAll() {
313
+ log.trace('node complete stream');
314
+ if (componentResponse.canStream() || response.writableEnded) {
315
+ postRequestTasks('str', response.statusCode, request, componentResponse);
316
+ return;
317
+ }
318
+ writeHeadToServerResponse(response, componentResponse, log, didError);
319
+ postRequestTasks('str', response.statusCode, request, componentResponse);
320
+ if (isRedirect(response)) {
321
+ // Redirects found after any async code
322
+ return response.end();
323
+ }
324
+ if (componentResponse.customBody) {
325
+ return response.end(await componentResponse.customBody);
326
+ }
327
+ startWritingHtmlToServerResponse(response, dev ? didError : undefined);
328
+ (0, streaming_server_1.bufferReadableStream)(rscToScriptTagReadable.getReader()).then((scriptTags) => {
329
+ // Piping ends the response so script tags
330
+ // must be written before that.
331
+ response.write(scriptTags);
332
+ pipe(response);
333
+ });
334
+ },
335
+ onError(error) {
336
+ didError = error;
337
+ if (dev && response.headersSent) {
338
+ // Calling write would flush headers automatically.
339
+ // Delay this error until headers are properly sent.
340
+ response.write((0, error_1.getErrorMarkup)(error));
341
+ }
342
+ log.error(error);
343
+ },
344
+ });
345
+ }
346
+ }
347
+ /**
348
+ * Stream a hydration response to the client.
349
+ */
350
+ async function hydrate(url, { App, pages, request, response, componentResponse, isStreamable, log, }) {
351
+ const state = JSON.parse(url.searchParams.get('state') || '{}');
352
+ const { AppRSC } = buildAppRSC({
353
+ App,
354
+ state,
355
+ request,
356
+ response: componentResponse,
357
+ log,
358
+ pages,
359
+ });
360
+ if (__WORKER__) {
361
+ const rscReadable = (0, streaming_server_1.rscRenderToReadableStream)(AppRSC);
362
+ if (isStreamable && (await (0, streaming_server_1.isStreamingSupported)())) {
363
+ postRequestTasks('rsc', 200, request, componentResponse);
364
+ return new Response(rscReadable);
365
+ }
366
+ // Note: CFW does not support reader.piteTo nor iterable syntax
367
+ const bufferedBody = await (0, streaming_server_1.bufferReadableStream)(rscReadable.getReader());
368
+ postRequestTasks('rsc', 200, request, componentResponse);
369
+ return new Response(bufferedBody);
370
+ }
371
+ else if (response) {
372
+ response.socket.on('error', log.fatal);
373
+ const rscWriter = await Promise.resolve().then(() => __importStar(require(
374
+ // @ts-ignore
375
+ '@shopify/hydrogen/vendor/react-server-dom-vite/writer.node.server')));
376
+ const stream = rscWriter
377
+ .renderToPipeableStream(AppRSC)
378
+ .pipe(response);
379
+ stream.on('finish', function () {
380
+ postRequestTasks('rsc', response.statusCode, request, componentResponse);
381
+ });
382
+ }
383
+ }
384
+ function buildAppRSC({ App, state, request, response, log, pages, }) {
385
+ const hydrogenServerProps = { request, response, log };
386
+ const AppRSC = (react_1.default.createElement(ServerRequestProvider_1.ServerRequestProvider, { request: request, isRSC: true },
387
+ react_1.default.createElement(PreloadQueries, { request: request },
388
+ react_1.default.createElement(App, { ...state, ...hydrogenServerProps, pages: pages }))));
389
+ return { AppRSC };
390
+ }
391
+ function buildAppSSR({ App, state, request, response, log, pages }, htmlOptions) {
392
+ const { AppRSC } = buildAppRSC({
393
+ App,
394
+ state,
395
+ request,
396
+ response,
397
+ log,
398
+ pages,
399
+ });
400
+ const [rscReadableForFizz, rscReadableForFlight] = (0, streaming_server_1.rscRenderToReadableStream)(AppRSC).tee();
401
+ const rscResponse = (0, streaming_server_1.createFromReadableStream)(rscReadableForFizz);
402
+ const RscConsumer = () => rscResponse.readRoot();
403
+ const AppSSR = (react_1.default.createElement(Html_1.Html, { ...htmlOptions },
404
+ react_1.default.createElement(ServerRequestProvider_1.ServerRequestProvider, { request: request, isRSC: false },
405
+ react_1.default.createElement(ServerStateProvider_1.ServerStateProvider, { serverState: state, setServerState: () => { } },
406
+ react_1.default.createElement(PreloadQueries, { request: request },
407
+ react_1.default.createElement(react_1.default.Suspense, { fallback: null },
408
+ react_1.default.createElement(RscConsumer, null)))))));
409
+ return { AppSSR, rscReadable: rscReadableForFlight };
410
+ }
411
+ function PreloadQueries({ request, children, }) {
412
+ const preloadQueries = request.getPreloadQueries();
413
+ (0, ServerRequestProvider_1.preloadRequestCacheData)(request, preloadQueries);
414
+ return children;
415
+ }
416
+ function extractHeadElements({ context: { helmet } }) {
417
+ return helmet
418
+ ? {
419
+ base: helmet.base.toString(),
420
+ bodyAttributes: helmet.bodyAttributes.toString(),
421
+ htmlAttributes: helmet.htmlAttributes.toString(),
422
+ link: helmet.link.toString(),
423
+ meta: helmet.meta.toString(),
424
+ noscript: helmet.noscript.toString(),
425
+ script: helmet.script.toString(),
426
+ style: helmet.style.toString(),
427
+ title: helmet.title.toString(),
428
+ }
429
+ : {};
430
+ }
431
+ async function renderToBufferedString(ReactApp, { log, nonce }) {
432
+ return new Promise(async (resolve, reject) => {
433
+ if (__WORKER__) {
434
+ const deferred = (0, defer_1.defer)();
435
+ const readable = (0, streaming_server_1.ssrRenderToReadableStream)(ReactApp, {
436
+ nonce,
437
+ onCompleteAll() {
438
+ /**
439
+ * We want to wait until `onCompleteAll` has been called before fetching the
440
+ * stream body. Otherwise, React 18's streaming JS script/template tags
441
+ * will be included in the output and cause issues when loading
442
+ * the Client Components in the browser.
443
+ */
444
+ deferred.resolve(null);
445
+ },
446
+ onError(error) {
447
+ log.error(error);
448
+ deferred.reject(error);
449
+ },
450
+ });
451
+ await deferred.promise.catch(reject);
452
+ resolve(await (0, streaming_server_1.bufferReadableStream)(readable.getReader()));
453
+ }
454
+ else {
455
+ const writer = await createNodeWriter();
456
+ const { pipe } = (0, streaming_server_1.ssrRenderToPipeableStream)(ReactApp, {
457
+ nonce,
458
+ /**
459
+ * When hydrating, we have to wait until `onCompleteAll` to avoid having
460
+ * `template` and `script` tags inserted and rendered as part of the hydration response.
461
+ */
462
+ onCompleteAll() {
463
+ let data = '';
464
+ writer.on('data', (chunk) => (data += chunk.toString()));
465
+ writer.once('error', reject);
466
+ writer.once('end', () => resolve(data));
467
+ // Tell React to start writing to the writer
468
+ pipe(writer);
469
+ },
470
+ onError(error) {
471
+ log.error(error);
472
+ reject(error);
473
+ },
474
+ });
475
+ }
476
+ });
477
+ }
478
+ exports.default = exports.renderHydrogen;
479
+ function startWritingHtmlToServerResponse(response, error) {
480
+ if (!response.headersSent) {
481
+ response.setHeader('Content-type', HTML_CONTENT_TYPE);
482
+ response.write('<!DOCTYPE html>');
483
+ }
484
+ if (error) {
485
+ // This error was delayed until the headers were properly sent.
486
+ response.write((0, error_1.getErrorMarkup)(error));
487
+ }
488
+ }
489
+ function startWritingHtmlToStream(responseOptions, writable, encoder, error) {
490
+ responseOptions.headers['Content-type'] = HTML_CONTENT_TYPE;
491
+ writable.write(encoder.encode('<!DOCTYPE html>'));
492
+ if (error) {
493
+ // This error was delayed until the headers were properly sent.
494
+ writable.write(encoder.encode((0, error_1.getErrorMarkup)(error)));
495
+ }
496
+ }
497
+ function getResponseOptions({ headers, status, customStatus }, error) {
498
+ var _a, _b;
499
+ const responseInit = {};
500
+ // @ts-ignore
501
+ responseInit.headers = Object.fromEntries(headers.entries());
502
+ if (error) {
503
+ responseInit.status = 500;
504
+ }
505
+ else {
506
+ responseInit.status = (_b = (_a = customStatus === null || customStatus === void 0 ? void 0 : customStatus.code) !== null && _a !== void 0 ? _a : status) !== null && _b !== void 0 ? _b : 200;
507
+ if (customStatus === null || customStatus === void 0 ? void 0 : customStatus.text) {
508
+ responseInit.statusText = customStatus.text;
509
+ }
510
+ }
511
+ return responseInit;
512
+ }
513
+ function writeHeadToServerResponse(response, serverComponentResponse, log, error) {
514
+ if (response.headersSent)
515
+ return;
516
+ log.trace('writeHeadToServerResponse');
517
+ const { headers, status, statusText } = getResponseOptions(serverComponentResponse, error);
518
+ response.statusCode = status;
519
+ if (statusText) {
520
+ response.statusMessage = statusText;
521
+ }
522
+ Object.entries(headers).forEach(([key, value]) => response.setHeader(key, value));
523
+ }
524
+ function isRedirect(response) {
525
+ var _a, _b;
526
+ const status = (_b = (_a = response.status) !== null && _a !== void 0 ? _a : response.statusCode) !== null && _b !== void 0 ? _b : 0;
527
+ return status >= 300 && status < 400;
528
+ }
529
+ /**
530
+ * Generate the contents of the `head` tag, and update the existing `<title>` tag
531
+ * if one exists, and if a title is passed.
532
+ */
533
+ function generateHeadTag({ title, ...rest }) {
534
+ const headProps = ['base', 'meta', 'style', 'noscript', 'script', 'link'];
535
+ const otherHeadProps = headProps
536
+ .map((prop) => rest[prop])
537
+ .filter(Boolean)
538
+ .join('\n');
539
+ return (_outerHtml, innerHtml) => {
540
+ let headHtml = otherHeadProps + innerHtml;
541
+ if (title) {
542
+ if (headHtml.includes('<title>')) {
543
+ headHtml = headHtml.replace(/(<title>(?:.|\n)*?<\/title>)/, title);
544
+ }
545
+ else {
546
+ headHtml += title;
547
+ }
548
+ }
549
+ return `<head>${headHtml}</head>`;
550
+ };
551
+ }
552
+ async function createNodeWriter() {
553
+ // Importing 'stream' directly breaks Vite resolve
554
+ // when building for workers, even though this code
555
+ // does not run in a worker. Looks like tree-shaking
556
+ // kicks in after the import analysis/bundle.
557
+ const streamImport = __WORKER__ ? '' : 'stream';
558
+ const { PassThrough } = await Promise.resolve().then(() => __importStar(require(streamImport)));
559
+ return new PassThrough();
560
+ }
561
+ function flightContainer({ init, chunk, nonce, }) {
562
+ let script = `<script${nonce ? ` nonce="${nonce}"` : ''}>`;
563
+ if (init) {
564
+ script += 'var __flight=[];';
565
+ }
566
+ if (chunk) {
567
+ const normalizedChunk = chunk
568
+ // 1. Duplicate the escape char (\) for already escaped characters (e.g. \n or \").
569
+ .replace(/\\/g, String.raw `\\`)
570
+ // 2. Escape existing backticks to allow wrapping the whole thing in `...`.
571
+ .replace(/`/g, String.raw `\``);
572
+ script += `__flight.push(\`${normalizedChunk}\`)`;
573
+ }
574
+ return script + '</script>';
575
+ }
576
+ function postRequestTasks(type, status, request, componentResponse) {
577
+ (0, log_1.logServerResponse)(type, request, status);
578
+ (0, log_1.logCacheControlHeaders)(type, request, componentResponse);
579
+ (0, log_1.logQueryTimings)(type, request);
580
+ request.savePreloadQueries();
581
+ }
@@ -0,0 +1,23 @@
1
+ import type { PreloadQueriesByURL, ServerComponentRequest } from '../../framework/Hydration/ServerComponentRequest.server';
2
+ import type { QueryKey } from '../../types';
3
+ declare type ServerRequestProviderProps = {
4
+ isRSC: boolean;
5
+ request: ServerComponentRequest;
6
+ children: JSX.Element;
7
+ };
8
+ export declare function ServerRequestProvider({ isRSC, request, children, }: ServerRequestProviderProps): JSX.Element;
9
+ export declare function useServerRequest(): ServerComponentRequest;
10
+ declare type RequestCacheResult<T> = {
11
+ data: T;
12
+ error?: never;
13
+ } | {
14
+ data?: never;
15
+ error: Response;
16
+ };
17
+ /**
18
+ * Returns data stored in the request cache.
19
+ * It will throw the promise if data is not ready.
20
+ */
21
+ export declare function useRequestCacheData<T>(key: QueryKey, fetcher: () => Promise<T>): RequestCacheResult<T>;
22
+ export declare function preloadRequestCacheData(request: ServerComponentRequest, preloadQueries?: PreloadQueriesByURL): void;
23
+ export {};