@lomray/vite-ssr-boost 7.1.0 → 8.0.0-beta.2

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 (248) hide show
  1. package/README.md +18 -1
  2. package/adapters/body.d.ts +5 -0
  3. package/adapters/body.js +2 -0
  4. package/adapters/body.js.map +1 -0
  5. package/adapters/compression.d.ts +11 -0
  6. package/adapters/compression.js +2 -0
  7. package/adapters/compression.js.map +1 -0
  8. package/adapters/edge.d.ts +11 -0
  9. package/adapters/edge.js +2 -0
  10. package/adapters/edge.js.map +1 -0
  11. package/adapters/express/create-request.d.ts +11 -0
  12. package/adapters/express/create-request.js +2 -0
  13. package/adapters/express/create-request.js.map +1 -0
  14. package/adapters/express/entry.d.ts +55 -0
  15. package/adapters/express/entry.js.map +1 -0
  16. package/{services → adapters/express}/prepare-server.d.ts +15 -40
  17. package/adapters/express/prepare-server.js +2 -0
  18. package/adapters/express/prepare-server.js.map +1 -0
  19. package/adapters/express/render.d.ts +63 -0
  20. package/adapters/express/render.js +2 -0
  21. package/adapters/express/render.js.map +1 -0
  22. package/adapters/express/server.d.ts +15 -0
  23. package/adapters/express/server.js +2 -0
  24. package/adapters/express/server.js.map +1 -0
  25. package/adapters/express.d.ts +11 -0
  26. package/adapters/express.js +2 -0
  27. package/adapters/express.js.map +1 -0
  28. package/adapters/fastify.d.ts +23 -0
  29. package/adapters/fastify.js +2 -0
  30. package/adapters/fastify.js.map +1 -0
  31. package/adapters/hono.d.ts +13 -0
  32. package/adapters/hono.js +2 -0
  33. package/adapters/hono.js.map +1 -0
  34. package/adapters/node.d.ts +19 -0
  35. package/adapters/node.js +2 -0
  36. package/adapters/node.js.map +1 -0
  37. package/browser/entry.d.ts +9 -9
  38. package/browser/entry.js +1 -1
  39. package/browser/entry.js.map +1 -1
  40. package/cli/build.d.ts +2 -2
  41. package/cli/build.js.map +1 -1
  42. package/cli/helpers/keyboard-input.d.ts +1 -1
  43. package/cli/helpers/keyboard-input.js +1 -1
  44. package/cli/helpers/keyboard-input.js.map +1 -1
  45. package/cli/helpers/vite-reset-cache.d.ts +1 -1
  46. package/cli/helpers/vite-reset-cache.js.map +1 -1
  47. package/cli/interfaces/actions.d.ts +8 -9
  48. package/cli/run-amplify-build.d.ts +1 -1
  49. package/cli/run-amplify-build.js.map +1 -1
  50. package/cli/run-dev.d.ts +3 -4
  51. package/cli/run-dev.js +1 -1
  52. package/cli/run-dev.js.map +1 -1
  53. package/cli/run-docker-build.d.ts +2 -2
  54. package/cli/run-docker-build.js.map +1 -1
  55. package/cli/run-prod.d.ts +5 -6
  56. package/cli/run-prod.js +1 -1
  57. package/cli/run-prod.js.map +1 -1
  58. package/cli/run-serverless.d.ts +3 -3
  59. package/cli/run-serverless.js +1 -1
  60. package/cli/run-serverless.js.map +1 -1
  61. package/cli/run-vercel-build.d.ts +1 -1
  62. package/cli/run-vercel-build.js.map +1 -1
  63. package/cli.js +1 -1
  64. package/cli.js.map +1 -1
  65. package/components/navigate.d.ts +3 -3
  66. package/components/navigate.js.map +1 -1
  67. package/components/only-client.d.ts +2 -2
  68. package/components/only-client.js +1 -1
  69. package/components/only-client.js.map +1 -1
  70. package/components/render-client.d.ts +4 -4
  71. package/components/render-client.js +1 -1
  72. package/components/render-client.js.map +1 -1
  73. package/components/response-status.d.ts +2 -2
  74. package/components/response-status.js +1 -1
  75. package/components/response-status.js.map +1 -1
  76. package/components/scroll-to-top.d.ts +2 -2
  77. package/components/scroll-to-top.js +1 -1
  78. package/components/scroll-to-top.js.map +1 -1
  79. package/components/with-suspense.d.ts +3 -3
  80. package/components/with-suspense.js.map +1 -1
  81. package/constants/cli-actions.d.ts +1 -1
  82. package/constants/cli-actions.js.map +1 -1
  83. package/constants/cli-context.d.ts +4 -5
  84. package/constants/cli-context.js.map +1 -1
  85. package/constants/cli-name.d.ts +1 -1
  86. package/constants/cli-name.js.map +1 -1
  87. package/constants/cli-shortcuts.d.ts +2 -2
  88. package/constants/cli-shortcuts.js +1 -1
  89. package/constants/cli-shortcuts.js.map +1 -1
  90. package/constants/common.js.map +1 -1
  91. package/constants/plugin-name.d.ts +1 -1
  92. package/constants/plugin-name.js.map +1 -1
  93. package/constants/stream-error.d.ts +1 -1
  94. package/constants/stream-error.js.map +1 -1
  95. package/context/server.d.ts +3 -4
  96. package/context/server.js.map +1 -1
  97. package/core/compose-html.d.ts +5 -0
  98. package/core/compose-html.js +2 -0
  99. package/core/compose-html.js.map +1 -0
  100. package/core/early-hints.d.ts +6 -0
  101. package/core/early-hints.js +2 -0
  102. package/core/early-hints.js.map +1 -0
  103. package/core/handler.d.ts +30 -0
  104. package/core/handler.js +2 -0
  105. package/core/handler.js.map +1 -0
  106. package/core/head-response.d.ts +5 -0
  107. package/core/head-response.js +2 -0
  108. package/core/head-response.js.map +1 -0
  109. package/core/headers.d.ts +12 -0
  110. package/core/headers.js +2 -0
  111. package/core/headers.js.map +1 -0
  112. package/core/render.d.ts +101 -0
  113. package/core/render.js +2 -0
  114. package/core/render.js.map +1 -0
  115. package/core/transform-html.d.ts +7 -0
  116. package/core/transform-html.js +2 -0
  117. package/core/transform-html.js.map +1 -0
  118. package/core/types.d.ts +7 -0
  119. package/core/types.js +2 -0
  120. package/core/types.js.map +1 -0
  121. package/edge/render-to-stream.d.ts +6 -0
  122. package/edge/render-to-stream.js +2 -0
  123. package/edge/render-to-stream.js.map +1 -0
  124. package/helpers/build-custom-state.d.ts +2 -3
  125. package/helpers/build-custom-state.js +1 -1
  126. package/helpers/build-custom-state.js.map +1 -1
  127. package/helpers/build-router-state.d.ts +2 -2
  128. package/helpers/build-router-state.js.map +1 -1
  129. package/helpers/create-focus-only.d.ts +3 -3
  130. package/helpers/create-focus-only.js.map +1 -1
  131. package/helpers/dev-marker.d.ts +1 -1
  132. package/helpers/dev-marker.js.map +1 -1
  133. package/helpers/get-server-state.d.ts +1 -1
  134. package/helpers/get-server-state.js.map +1 -1
  135. package/helpers/html-escape.d.ts +1 -1
  136. package/helpers/html-escape.js +1 -1
  137. package/helpers/html-escape.js.map +1 -1
  138. package/helpers/import-route.d.ts +7 -7
  139. package/helpers/import-route.js +1 -1
  140. package/helpers/import-route.js.map +1 -1
  141. package/helpers/is-route-file.d.ts +1 -1
  142. package/helpers/is-route-file.js.map +1 -1
  143. package/helpers/obtain-stream-error.d.ts +3 -3
  144. package/helpers/obtain-stream-error.js +1 -1
  145. package/helpers/obtain-stream-error.js.map +1 -1
  146. package/helpers/plugin-config.d.ts +5 -5
  147. package/helpers/plugin-config.js +1 -1
  148. package/helpers/plugin-config.js.map +1 -1
  149. package/helpers/print-server-info.d.ts +3 -4
  150. package/helpers/print-server-info.js +1 -1
  151. package/helpers/print-server-info.js.map +1 -1
  152. package/helpers/print-server-urls.d.ts +2 -2
  153. package/helpers/print-server-urls.js +1 -1
  154. package/helpers/print-server-urls.js.map +1 -1
  155. package/helpers/process-stop.d.ts +1 -1
  156. package/helpers/process-stop.js.map +1 -1
  157. package/helpers/resolve-server-urls.d.ts +3 -4
  158. package/helpers/resolve-server-urls.js +1 -1
  159. package/helpers/resolve-server-urls.js.map +1 -1
  160. package/helpers/serialize-errors.d.ts +2 -2
  161. package/helpers/serialize-errors.js.map +1 -1
  162. package/helpers/vite-aliases.d.ts +2 -2
  163. package/helpers/vite-aliases.js +1 -1
  164. package/helpers/vite-aliases.js.map +1 -1
  165. package/interfaces/fc-route.d.ts +4 -4
  166. package/interfaces/fc-route.js.map +1 -1
  167. package/interfaces/fc.d.ts +3 -4
  168. package/interfaces/route-object.d.ts +6 -6
  169. package/node/compress-response.d.ts +6 -0
  170. package/node/compress-response.js +2 -0
  171. package/node/compress-response.js.map +1 -0
  172. package/node/create-headers.d.ts +6 -0
  173. package/node/create-headers.js +2 -0
  174. package/node/create-headers.js.map +1 -0
  175. package/node/create-request.d.ts +13 -0
  176. package/node/create-request.js +2 -0
  177. package/node/create-request.js.map +1 -0
  178. package/node/http.d.ts +4 -0
  179. package/node/http.js +2 -0
  180. package/node/http.js.map +1 -0
  181. package/node/render-to-stream.d.ts +6 -0
  182. package/node/render-to-stream.js +2 -0
  183. package/node/render-to-stream.js.map +1 -0
  184. package/node/request-signal.d.ts +10 -0
  185. package/node/request-signal.js +2 -0
  186. package/node/request-signal.js.map +1 -0
  187. package/node/split-link-header.d.ts +5 -0
  188. package/node/split-link-header.js +2 -0
  189. package/node/split-link-header.js.map +1 -0
  190. package/node/write-early-hints.d.ts +6 -0
  191. package/node/write-early-hints.js +2 -0
  192. package/node/write-early-hints.js.map +1 -0
  193. package/node/write-fetch-response.d.ts +11 -0
  194. package/node/write-fetch-response.js +2 -0
  195. package/node/write-fetch-response.js.map +1 -0
  196. package/package.json +89 -27
  197. package/plugin.d.ts +7 -7
  198. package/plugin.js.map +1 -1
  199. package/plugins/create-spa-index.d.ts +3 -3
  200. package/plugins/create-spa-index.js.map +1 -1
  201. package/plugins/handle-custom-entrypoint.d.ts +4 -4
  202. package/plugins/handle-custom-entrypoint.js +1 -1
  203. package/plugins/handle-custom-entrypoint.js.map +1 -1
  204. package/plugins/make-aliases.d.ts +3 -3
  205. package/plugins/make-aliases.js +1 -1
  206. package/plugins/make-aliases.js.map +1 -1
  207. package/plugins/normalize-route.d.ts +3 -3
  208. package/plugins/normalize-route.js.map +1 -1
  209. package/services/build.d.ts +5 -51
  210. package/services/build.js +1 -1
  211. package/services/build.js.map +1 -1
  212. package/services/logger.d.ts +2 -30
  213. package/services/logger.js.map +1 -1
  214. package/services/parse-routes.d.ts +5 -42
  215. package/services/parse-routes.js +1 -1
  216. package/services/parse-routes.js.map +1 -1
  217. package/services/path-normalize.d.ts +3 -18
  218. package/services/path-normalize.js +1 -1
  219. package/services/path-normalize.js.map +1 -1
  220. package/services/server-api.d.ts +1 -7
  221. package/services/server-api.js.map +1 -1
  222. package/services/server-config.d.ts +7 -52
  223. package/services/server-config.js +1 -1
  224. package/services/server-config.js.map +1 -1
  225. package/services/ssr-manifest.d.ts +20 -60
  226. package/services/ssr-manifest.js +1 -1
  227. package/services/ssr-manifest.js.map +1 -1
  228. package/workflow/Dockerfile +1 -1
  229. package/helpers/handle-response.d.ts +0 -7
  230. package/helpers/handle-response.js +0 -2
  231. package/helpers/handle-response.js.map +0 -1
  232. package/node/create-fetch-request.d.ts +0 -7
  233. package/node/create-fetch-request.js +0 -2
  234. package/node/create-fetch-request.js.map +0 -1
  235. package/node/entry.d.ts +0 -63
  236. package/node/entry.js.map +0 -1
  237. package/node/render.d.ts +0 -64
  238. package/node/render.js +0 -2
  239. package/node/render.js.map +0 -1
  240. package/node/server.d.ts +0 -16
  241. package/node/server.js +0 -2
  242. package/node/server.js.map +0 -1
  243. package/node/write-response.d.ts +0 -14
  244. package/node/write-response.js +0 -2
  245. package/node/write-response.js.map +0 -1
  246. package/services/prepare-server.js +0 -2
  247. package/services/prepare-server.js.map +0 -1
  248. /package/{node → adapters/express}/entry.js +0 -0
@@ -1,2 +1,2 @@
1
1
  declare const _default: "ssr-boost";
2
- export { _default as default };
2
+ export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-name.js","sources":["../../src/constants/cli-name.ts"],"sourcesContent":["export default 'ssr-boost';\n"],"names":["cliName"],"mappings":"AAAA,IAAAA,EAAe"}
1
+ {"version":3,"file":"cli-name.js","sources":["../../src/constants/cli-name.ts"],"sourcesContent":[null],"names":["cliName"],"mappings":"AAAA,IAAAA,EAAe"}
@@ -1,6 +1,6 @@
1
- import { IPluginOptions } from "../plugin.js";
1
+ import type { IPluginOptions } from '../plugin.js';
2
2
  /**
3
3
  * Default plugin shortcuts
4
4
  */
5
5
  declare const shortcuts: NonNullable<IPluginOptions['customShortcuts']>;
6
- export { shortcuts as default };
6
+ export default shortcuts;
@@ -1,2 +1,2 @@
1
- import e from"chalk";import r from"../helpers/process-stop.js";const o=async({server:r,config:o})=>{const t=o?.getLogger(),i=await new Promise((e=>{r?.close(e)}));return await(o?.getVite()?.close()),!i||(t?.info(e.red(`failed to stop dev server: ${i}`)),!1)},t=[{key:"r",description:"restart server",action:async r=>{const{reboot:t,config:i}=r,s=i?.getLogger();s?.info(e.yellow("\nrestarting server...")),await o(r)&&(await(t?.(!1)),s?.info(e.green("server restarted successful.")))}},{key:"u",description:"show server url",action({config:e}){e?.getLogger()?.info(""),e?.getVite()?.printUrls()}},{key:"c",description:"clear console",isOnlyDev:!0,action({config:e}){e?.getLogger()?.clearScreen("error")}},{key:"o",description:"open in browser",isOnlyDev:!0,action({config:e}){e?.getVite()?.openBrowser()}},{key:"q",description:"quit",async action(e){await o(e),r()}}];export{t as default};
1
+ import e from"chalk";import r from"../helpers/process-stop.js";const o=async({server:r,config:o})=>{const t=o?.getLogger(),i=await new Promise(e=>{r?.close(e)});return await(o?.getVite()?.close()),!i||(t?.info(e.red(`failed to stop dev server: ${i}`)),!1)},t=[{key:"r",description:"restart server",action:async r=>{const{reboot:t,config:i}=r,s=i?.getLogger();s?.info(e.yellow("\nrestarting server...")),await o(r)&&(await(t?.(!1)),s?.info(e.green("server restarted successful.")))}},{key:"u",description:"show server url",action({config:e}){e?.getLogger()?.info(""),e?.getVite()?.printUrls()}},{key:"c",description:"clear console",isOnlyDev:!0,action({config:e}){e?.getLogger()?.clearScreen("error")}},{key:"o",description:"open in browser",isOnlyDev:!0,action({config:e}){e?.getVite()?.openBrowser()}},{key:"q",description:"quit",async action(e){await o(e),r()}}];export{t as default};
2
2
  //# sourceMappingURL=cli-shortcuts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-shortcuts.js","sources":["../../src/constants/cli-shortcuts.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { ICliContext } from '@constants/cli-context';\nimport processStop from '@helpers/process-stop';\nimport type { IPluginOptions } from '../plugin';\n\n/**\n * Stop server\n */\nconst stopServer = async ({ server, config }: ICliContext): Promise<boolean> => {\n const Logger = config?.getLogger();\n\n // stop express server\n const err = await new Promise((resolve) => {\n server?.close(resolve);\n });\n\n // stop vite server\n await config?.getVite()?.close();\n\n if (err) {\n Logger?.info(chalk.red(`failed to stop dev server: ${err as string}`));\n\n return false;\n }\n\n return true;\n};\n\n/**\n * Default plugin shortcuts\n */\nconst shortcuts: NonNullable<IPluginOptions['customShortcuts']> = [\n {\n key: 'r',\n description: 'restart server',\n action: async (cliContext) => {\n const { reboot, config } = cliContext;\n const Logger = config?.getLogger();\n\n Logger?.info(chalk.yellow('\\nrestarting server...'));\n\n if (!(await stopServer(cliContext))) {\n return;\n }\n\n await reboot?.(false);\n Logger?.info(chalk.green('server restarted successful.'));\n },\n },\n {\n key: 'u',\n description: 'show server url',\n action({ config }) {\n config?.getLogger()?.info('');\n config?.getVite()?.printUrls();\n },\n },\n {\n key: 'c',\n description: 'clear console',\n isOnlyDev: true,\n action({ config }) {\n config?.getLogger()?.clearScreen('error');\n },\n },\n {\n key: 'o',\n description: 'open in browser',\n isOnlyDev: true,\n action({ config }) {\n config?.getVite()?.openBrowser();\n },\n },\n {\n key: 'q',\n description: 'quit',\n async action(cliContext) {\n await stopServer(cliContext);\n processStop();\n },\n },\n];\n\nexport default shortcuts;\n"],"names":["stopServer","async","server","config","Logger","getLogger","err","Promise","resolve","close","getVite","info","chalk","red","shortcuts","key","description","action","cliContext","reboot","yellow","green","printUrls","isOnlyDev","clearScreen","openBrowser","processStop"],"mappings":"+DAQA,MAAMA,EAAaC,OAASC,SAAQC,aAClC,MAAMC,EAASD,GAAQE,YAGjBC,QAAY,IAAIC,SAASC,IAC7BN,GAAQO,MAAMD,EAAQ,IAMxB,aAFML,GAAQO,WAAWD,UAErBH,IACFF,GAAQO,KAAKC,EAAMC,IAAI,8BAA8BP,OAE9C,EAGE,EAMPQ,EAA4D,CAChE,CACEC,IAAK,IACLC,YAAa,iBACbC,OAAQhB,MAAOiB,IACb,MAAMC,OAAEA,EAAMhB,OAAEA,GAAWe,EACrBd,EAASD,GAAQE,YAEvBD,GAAQO,KAAKC,EAAMQ,OAAO,iCAEdpB,EAAWkB,WAIjBC,KAAS,IACff,GAAQO,KAAKC,EAAMS,MAAM,iCAAgC,GAG7D,CACEN,IAAK,IACLC,YAAa,kBACbC,QAAOd,OAAEA,IACPA,GAAQE,aAAaM,KAAK,IAC1BR,GAAQO,WAAWY,WACrB,GAEF,CACEP,IAAK,IACLC,YAAa,gBACbO,WAAW,EACXN,QAAOd,OAAEA,IACPA,GAAQE,aAAamB,YAAY,QACnC,GAEF,CACET,IAAK,IACLC,YAAa,kBACbO,WAAW,EACXN,QAAOd,OAAEA,IACPA,GAAQO,WAAWe,aACrB,GAEF,CACEV,IAAK,IACLC,YAAa,OACbf,aAAaiB,SACLlB,EAAWkB,GACjBQ,GACF"}
1
+ {"version":3,"file":"cli-shortcuts.js","sources":["../../src/constants/cli-shortcuts.ts"],"sourcesContent":[null],"names":["stopServer","async","server","config","Logger","getLogger","err","Promise","resolve","close","getVite","info","chalk","red","shortcuts","key","description","action","cliContext","reboot","yellow","green","printUrls","isOnlyDev","clearScreen","openBrowser","processStop"],"mappings":"+DAQA,MAAMA,EAAaC,OAASC,SAAQC,aAClC,MAAMC,EAASD,GAAQE,YAGjBC,QAAY,IAAIC,QAASC,IAC7BN,GAAQO,MAAMD,KAMhB,aAFML,GAAQO,WAAWD,UAErBH,IACFF,GAAQO,KAAKC,EAAMC,IAAI,8BAA8BP,OAE9C,IASLQ,EAA4D,CAChE,CACEC,IAAK,IACLC,YAAa,iBACbC,OAAQhB,MAAOiB,IACb,MAAMC,OAAEA,EAAMhB,OAAEA,GAAWe,EACrBd,EAASD,GAAQE,YAEvBD,GAAQO,KAAKC,EAAMQ,OAAO,iCAEdpB,EAAWkB,WAIjBC,KAAS,IACff,GAAQO,KAAKC,EAAMS,MAAM,oCAG7B,CACEN,IAAK,IACLC,YAAa,kBACb,MAAAC,EAAOd,OAAEA,IACPA,GAAQE,aAAaM,KAAK,IAC1BR,GAAQO,WAAWY,WACrB,GAEF,CACEP,IAAK,IACLC,YAAa,gBACbO,WAAW,EACX,MAAAN,EAAOd,OAAEA,IACPA,GAAQE,aAAamB,YAAY,QACnC,GAEF,CACET,IAAK,IACLC,YAAa,kBACbO,WAAW,EACX,MAAAN,EAAOd,OAAEA,IACPA,GAAQO,WAAWe,aACrB,GAEF,CACEV,IAAK,IACLC,YAAa,OACb,YAAMC,CAAOC,SACLlB,EAAWkB,GACjBQ,GACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sources":["../../src/constants/common.ts"],"sourcesContent":["/* eslint-disable no-undef */\n// @ts-ignore\nconst IS_SSR_MODE = (typeof __IS_SSR__ === 'undefined' ? true : __IS_SSR__) as boolean; // build in SSR mode?\n\nconst IS_SERVER = typeof window === 'undefined';\n\nexport { IS_SSR_MODE, IS_SERVER };\n"],"names":["IS_SSR_MODE","__IS_SSR__","IS_SERVER","window"],"mappings":"AAEA,MAAMA,EAAqC,oBAAfC,YAAoCA,WAE1DC,EAA8B,oBAAXC"}
1
+ {"version":3,"file":"common.js","sources":["../../src/constants/common.ts"],"sourcesContent":[null],"names":["IS_SSR_MODE","__IS_SSR__","IS_SERVER","window"],"mappings":"AAEA,MAAMA,EAAqC,oBAAfC,YAAoCA,WAE1DC,EAA8B,oBAAXC"}
@@ -1,2 +1,2 @@
1
1
  declare const _default: "@lomray/vite-ssr-boost";
2
- export { _default as default };
2
+ export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-name.js","sources":["../../src/constants/plugin-name.ts"],"sourcesContent":["export default '@lomray/vite-ssr-boost';\n"],"names":["PLUGIN_NAME"],"mappings":"AAAA,IAAAA,EAAe"}
1
+ {"version":3,"file":"plugin-name.js","sources":["../../src/constants/plugin-name.ts"],"sourcesContent":[null],"names":["PLUGIN_NAME"],"mappings":"AAAA,IAAAA,EAAe"}
@@ -8,4 +8,4 @@ declare enum StreamError {
8
8
  RenderSkip = "skip",
9
9
  Unknown = "unknown"
10
10
  }
11
- export { StreamError as default };
11
+ export default StreamError;
@@ -1 +1 @@
1
- {"version":3,"file":"stream-error.js","sources":["../../src/constants/stream-error.ts"],"sourcesContent":["/**\n * React stream errors\n */\nenum StreamError {\n RenderAborted = 'aborted',\n RenderTimeout = 'timeout',\n RenderCancel = 'cancel',\n RenderSkip = 'skip',\n Unknown = 'unknown',\n}\n\nexport default StreamError;\n"],"names":["StreamError","StreamError$1"],"mappings":"AAGA,IAAKA,GAAL,SAAKA,GACHA,EAAA,cAAA,UACAA,EAAA,cAAA,UACAA,EAAA,aAAA,SACAA,EAAA,WAAA,OACAA,EAAA,QAAA,SACD,CAND,CAAKA,IAAAA,EAAW,CAAA,IAQhB,IAAAC,EAAeD"}
1
+ {"version":3,"file":"stream-error.js","sources":["../../src/constants/stream-error.ts"],"sourcesContent":[null],"names":["StreamError","StreamError$1"],"mappings":"AAGA,IAAKA,GAAL,SAAKA,GACHA,EAAA,cAAA,UACAA,EAAA,cAAA,UACAA,EAAA,aAAA,SACAA,EAAA,WAAA,OACAA,EAAA,QAAA,SACD,CAND,CAAKA,IAAAA,EAAW,CAAA,IAQhB,IAAAC,EAAeD"}
@@ -1,7 +1,6 @@
1
- /// <reference types="react" />
1
+ import type { FC, PropsWithChildren } from 'react';
2
2
  import React from 'react';
3
- import { FC, PropsWithChildren } from "react";
4
- interface IServerContext {
3
+ export interface IServerContext {
5
4
  response: Response | null;
6
5
  isServer: boolean;
7
6
  basename?: string;
@@ -19,4 +18,4 @@ interface IServerProvider {
19
18
  */
20
19
  declare const ServerProvider: FC<PropsWithChildren<IServerProvider>>;
21
20
  declare const useServerContext: () => IServerContext;
22
- export { IServerContext, ServerContext, ServerProvider, useServerContext };
21
+ export { ServerContext, ServerProvider, useServerContext };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sources":["../../src/context/server.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from 'react';\nimport React, { useContext } from 'react';\n\nexport interface IServerContext {\n response: Response | null;\n isServer: boolean;\n basename?: string;\n}\n\nconst initState = {\n response: null,\n isServer: false,\n};\n\n/**\n * Server application context\n */\nconst ServerContext = React.createContext<IServerContext>(initState);\n\ninterface IServerProvider {\n context: IServerContext;\n}\n\n/**\n * Server application context provider\n * @constructor\n */\nconst ServerProvider: FC<PropsWithChildren<IServerProvider>> = ({ children, context }) => (\n <ServerContext.Provider value={context} children={children} />\n);\n\nconst useServerContext = (): IServerContext => useContext(ServerContext);\n\nexport { ServerContext, ServerProvider, useServerContext };\n"],"names":["ServerContext","React","createContext","response","isServer","ServerProvider","children","context","createElement","Provider","value","useServerContext","useContext"],"mappings":"sCASA,MAQMA,EAAgBC,EAAMC,cARV,CAChBC,SAAU,KACVC,UAAU,IAgBNC,EAAyD,EAAGC,WAAUC,aAC1EN,EAAAO,cAACR,EAAcS,SAAQ,CAACC,MAAOH,EAASD,SAAUA,IAG9CK,EAAmB,IAAsBC,EAAWZ"}
1
+ {"version":3,"file":"server.js","sources":["../../src/context/server.tsx"],"sourcesContent":[null],"names":["ServerContext","React","createContext","response","isServer","ServerProvider","children","context","createElement","Provider","value","useServerContext","useContext"],"mappings":"sCASA,MAQMA,EAAgBC,EAAMC,cARV,CAChBC,SAAU,KACVC,UAAU,IAgBNC,EAAyD,EAAGC,WAAUC,aAC1EN,EAAAO,cAACR,EAAcS,SAAQ,CAACC,MAAOH,EAASD,SAAUA,IAG9CK,EAAmB,IAAsBC,EAAWZ"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Stream the shell, React body and hydration footer under downstream backpressure.
3
+ */
4
+ declare const composeHtml: (header: string, body: ReadableStream<Uint8Array>, footer: string, abort?: (reason?: unknown) => void, onComplete?: () => void) => ReadableStream<Uint8Array>;
5
+ export default composeHtml;
@@ -0,0 +1,2 @@
1
+ const e=(e,a,r,o,n)=>{const t=new TextEncoder,c=a.getReader();let l="header";return new ReadableStream({cancel:async e=>{if(o?.(e),"footer"!==l)try{await c.cancel(e)}finally{c.releaseLock(),n?.()}},async pull(a){if("header"===l&&(l="body",e))a.enqueue(t.encode(e));else{if("body"===l){let e;try{e=await c.read()}catch(e){return o?.(e),c.releaseLock(),n?.(),void a.error(e)}if(!e.done)return void a.enqueue(e.value);l="footer",c.releaseLock(),n?.()}r&&a.enqueue(t.encode(r)),a.close()}}})};export{e as default};
2
+ //# sourceMappingURL=compose-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-html.js","sources":["../../src/core/compose-html.ts"],"sourcesContent":[null],"names":["composeHtml","header","body","footer","abort","onComplete","encoder","TextEncoder","reader","getReader","phase","ReadableStream","cancel","async","reason","releaseLock","pull","controller","enqueue","encode","chunk","read","error","done","value","close"],"mappings":"AAGA,MAAMA,EAAc,CAClBC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAU,IAAIC,YACdC,EAASN,EAAKO,YACpB,IAAIC,EAAsC,SAE1C,OAAO,IAAIC,eAA2B,CAIpCC,OAAQC,MAAOC,IAGb,GAFAV,IAAQU,GAEM,WAAVJ,EAIJ,UACQF,EAAOI,OAAOE,EACtB,SACEN,EAAOO,cACPV,KACF,GAMF,UAAMW,CAAKC,GACT,GAAc,WAAVP,IACFA,EAAQ,OAEJT,GACFgB,EAAWC,QAAQZ,EAAQa,OAAOlB,QAJtC,CAUA,GAAc,SAAVS,EAAkB,CACpB,IAAIU,EAEJ,IACEA,QAAcZ,EAAOa,MACvB,CAAE,MAAOC,GAMP,OALAlB,IAAQkB,GACRd,EAAOO,cACPV,WACAY,EAAWK,MAAMA,EAGnB,CAEA,IAAKF,EAAMG,KAGT,YAFAN,EAAWC,QAAQE,EAAMI,OAK3Bd,EAAQ,SACRF,EAAOO,cACPV,KACF,CAEIF,GACFc,EAAWC,QAAQZ,EAAQa,OAAOhB,IAGpCc,EAAWQ,OA/BX,CAgCF"}
@@ -0,0 +1,6 @@
1
+ import type { ISsrExecutionContext } from './types.js';
2
+ /**
3
+ * Emit informational headers when the runtime supports early hints.
4
+ */
5
+ declare const emitEarlyHints: (context: ISsrExecutionContext | undefined, headers: Headers) => Promise<void>;
6
+ export default emitEarlyHints;
@@ -0,0 +1,2 @@
1
+ const a=async(a,t)=>{await(a?.onEarlyHints?.(t))};export{a as default};
2
+ //# sourceMappingURL=early-hints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"early-hints.js","sources":["../../src/core/early-hints.ts"],"sourcesContent":[null],"names":["emitEarlyHints","async","context","headers","onEarlyHints"],"mappings":"AAKA,MAAMA,EAAiBC,MACrBC,EACAC,WAEMD,GAASE,eAAeD"}
@@ -0,0 +1,30 @@
1
+ import type { ICoreRenderOptions, ICoreRenderParams } from './render.js';
2
+ import type { ISsrExecutionContext, TSsrHandler } from './types.js';
3
+ interface IHtmlShell {
4
+ footer: string;
5
+ header: string;
6
+ }
7
+ interface IRequestInit<TAppProps> {
8
+ appProps?: TAppProps;
9
+ headers?: HeadersInit;
10
+ status?: number;
11
+ }
12
+ interface ICreateHandlerOptions<TAppProps> extends ICoreRenderOptions<TAppProps> {
13
+ /**
14
+ * Supply the document shell, including the application's browser entry script.
15
+ */
16
+ getHtml: (request: Request) => IHtmlShell | Promise<IHtmlShell>;
17
+ /**
18
+ * Initialize request metadata or return a Response to bypass rendering.
19
+ */
20
+ onRequest?: (params: {
21
+ executionContext?: ISsrExecutionContext;
22
+ request: Request;
23
+ }) => IRequestInit<TAppProps> | Promise<IRequestInit<TAppProps> | Response> | Response;
24
+ }
25
+ /**
26
+ * Create isolated request state and allow request hooks to bypass rendering.
27
+ */
28
+ declare const createHandler: <TAppProps = Record<string, any>>(params: ICoreRenderParams<TAppProps>, { getHtml, onRequest, ...options }: ICreateHandlerOptions<TAppProps>) => TSsrHandler;
29
+ export type { ICreateHandlerOptions, IHtmlShell, IRequestInit };
30
+ export default createHandler;
@@ -0,0 +1,2 @@
1
+ import e from"./head-response.js";import s from"./render.js";const t=(t,{getHtml:r,onRequest:o,...a})=>async(n,p)=>{const u=await(o?.({executionContext:p,request:n}));if(u instanceof Response)return e(n,u);const i={appProps:u?.appProps??{},html:await r(n),request:n,response:{headers:new Headers(u?.headers),status:u?.status}};return s(t,i,a,p)};export{t as default};
2
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sources":["../../src/core/handler.ts"],"sourcesContent":[null],"names":["createHandler","params","getHtml","onRequest","options","async","request","executionContext","requestInit","Response","headResponse","context","appProps","html","response","headers","Headers","status","render"],"mappings":"6DAkCA,MAAMA,EAAgB,CACpBC,GACEC,UAASC,eAAcC,KAKlBC,MAAOC,EAASC,KACrB,MAAMC,QAAoBL,IAAY,CAAEI,mBAAkBD,aAE1D,GAAIE,aAAuBC,SACzB,OAAOC,EAAaJ,EAASE,GAG/B,MAAMG,EAAyC,CAC7CC,SAAWJ,GAAaI,UAAY,GACpCC,WAAYX,EAAQI,GACpBA,UACAQ,SAAU,CACRC,QAAS,IAAIC,QAAQR,GAAaO,SAClCE,OAAQT,GAAaS,SAIzB,OAAOC,EAAOjB,EAAQU,EAASP,EAASG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Preserve GET metadata while releasing a body that cannot be sent for HEAD.
3
+ */
4
+ declare const headResponse: (request: Request, response: Response) => Promise<Response>;
5
+ export default headResponse;
@@ -0,0 +1,2 @@
1
+ const s=async(s,t)=>"HEAD"===s.method&&t.body?(await t.body.cancel(),new Response(null,{headers:t.headers,status:t.status,statusText:t.statusText})):t;export{s as default};
2
+ //# sourceMappingURL=head-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"head-response.js","sources":["../../src/core/head-response.ts"],"sourcesContent":[null],"names":["headResponse","async","request","response","method","body","cancel","Response","headers","status","statusText"],"mappings":"AAGA,MAAMA,EAAeC,MAAOC,EAAkBC,IACrB,SAAnBD,EAAQE,QAAsBD,EAASE,YAIrCF,EAASE,KAAKC,SAEb,IAAIC,SAAS,KAAM,CACxBC,QAASL,EAASK,QAClBC,OAAQN,EAASM,OACjBC,WAAYP,EAASO,cARdP"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Enumerate ordinary headers without combining independent Set-Cookie values.
3
+ */
4
+ export declare const getHeaderEntries: (headers: Headers) => [string, string][];
5
+ /**
6
+ * Read cookies without splitting commas inside Expires attributes.
7
+ */
8
+ export declare const getSetCookieHeaders: (headers: Headers) => string[];
9
+ /**
10
+ * Response headers override hook headers, while every Set-Cookie remains independent.
11
+ */
12
+ export declare const mergeResponseHeaders: (response: Response, base: Headers) => Response;
@@ -0,0 +1,2 @@
1
+ const e=e=>{const t=[];return e.forEach((e,s)=>{"set-cookie"!==s.toLowerCase()&&t.push([s,e])}),t},t=e=>e.getSetCookie(),s=(s,o)=>{const a=new Headers(o);return e(s.headers).forEach(([e,t])=>a.set(e,t)),t(s.headers).forEach(e=>a.append("Set-Cookie",e)),new Response(s.body,{headers:a,status:s.status,statusText:s.statusText})};export{e as getHeaderEntries,t as getSetCookieHeaders,s as mergeResponseHeaders};
2
+ //# sourceMappingURL=headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.js","sources":["../../src/core/headers.ts"],"sourcesContent":[null],"names":["getHeaderEntries","headers","entries","forEach","value","name","toLowerCase","push","getSetCookieHeaders","getSetCookie","mergeResponseHeaders","response","base","Headers","set","cookie","append","Response","body","status","statusText"],"mappings":"AAGO,MAAMA,EAAoBC,IAC/B,MAAMC,EAA8B,GAQpC,OANAD,EAAQE,QAAQ,CAACC,EAAOC,KACK,eAAvBA,EAAKC,eACPJ,EAAQK,KAAK,CAACF,EAAMD,MAIjBF,GAMIM,EAAuBP,GAA+BA,EAAQQ,eAK9DC,EAAuB,CAACC,EAAoBC,KACvD,MAAMX,EAAU,IAAIY,QAAQD,GAK5B,OAHAZ,EAAiBW,EAASV,SAASE,QAAQ,EAAEE,EAAMD,KAAWH,EAAQa,IAAIT,EAAMD,IAChFI,EAAoBG,EAASV,SAASE,QAASY,GAAWd,EAAQe,OAAO,aAAcD,IAEhF,IAAIE,SAASN,EAASO,KAAM,CACjCjB,UACAkB,OAAQR,EAASQ,OACjBC,WAAYT,EAASS"}
@@ -0,0 +1,101 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StaticHandler, StaticHandlerContext } from 'react-router';
3
+ import StreamError from '../constants/stream-error.js';
4
+ import type { IServerContext } from '../context/server.js';
5
+ import type { ISsrExecutionContext } from './types.js';
6
+ import type { IObtainStreamErrorOut } from '../helpers/obtain-stream-error.js';
7
+ export interface ISsrRequestContext<TAppProps = Record<string, any>> {
8
+ appProps: NonNullable<TAppProps>;
9
+ /**
10
+ * First render failure, or the explicit timeout/cancellation classification.
11
+ */
12
+ didError?: StreamError;
13
+ html: {
14
+ footer: string;
15
+ header: string;
16
+ };
17
+ isStream?: boolean;
18
+ request: Request;
19
+ /**
20
+ * Mutable response metadata shared with request and render hooks.
21
+ */
22
+ response: {
23
+ headers: Headers;
24
+ status?: number;
25
+ };
26
+ routerContext?: StaticHandlerContext;
27
+ serverContext?: IServerContext;
28
+ }
29
+ export interface IRenderStreamOptions {
30
+ onError: (error: unknown) => void;
31
+ signal: AbortSignal;
32
+ }
33
+ export interface IRenderStream {
34
+ /**
35
+ * Settles after all suspended content completes or rendering is aborted.
36
+ */
37
+ allReady: Promise<void>;
38
+ /**
39
+ * Stop rendering and settle pending readiness promises.
40
+ */
41
+ abort: (reason?: unknown) => void;
42
+ /**
43
+ * Settles when the first shell is available or cannot be produced.
44
+ */
45
+ shellReady: Promise<void>;
46
+ /**
47
+ * Begin piping after the core commits its response metadata.
48
+ */
49
+ start: () => void;
50
+ stream: ReadableStream<Uint8Array>;
51
+ }
52
+ export type TRenderToStream = (node: ReactNode, options: IRenderStreamOptions) => IRenderStream | Promise<IRenderStream>;
53
+ export interface ICoreRenderParams<TAppProps = Record<string, any>> {
54
+ createApp: (children: ReactNode, context: ISsrRequestContext<TAppProps>) => ReactNode;
55
+ handler: StaticHandler;
56
+ renderToStream: TRenderToStream;
57
+ }
58
+ export interface ICoreRenderOptions<TAppProps = Record<string, any>> {
59
+ /**
60
+ * React rendering deadline in milliseconds, starting after router preparation.
61
+ */
62
+ abortDelay?: number;
63
+ getState?: (params: {
64
+ context: ISsrRequestContext<TAppProps>;
65
+ }) => Record<string, Record<string, any>> | undefined | void;
66
+ onError?: (params: {
67
+ context: ISsrRequestContext<TAppProps>;
68
+ error: IObtainStreamErrorOut;
69
+ }) => void;
70
+ onResponse?: (params: {
71
+ context: ISsrRequestContext<TAppProps>;
72
+ html: string;
73
+ }) => string | undefined | void;
74
+ onRouterReady?: (params: {
75
+ context: ISsrRequestContext<TAppProps>;
76
+ }) => Promise<{
77
+ isStream?: boolean;
78
+ }> | {
79
+ isStream?: boolean;
80
+ };
81
+ onShellError?: (params: {
82
+ context: ISsrRequestContext<TAppProps>;
83
+ error: Error;
84
+ }) => string | undefined | void;
85
+ onShellReady?: (params: {
86
+ context: ISsrRequestContext<TAppProps>;
87
+ }) => {
88
+ footer?: string;
89
+ header?: string;
90
+ };
91
+ prepare?: (params: {
92
+ context: ISsrRequestContext<TAppProps>;
93
+ executionContext?: ISsrExecutionContext;
94
+ }) => Promise<void> | void;
95
+ routerRequestContext?: unknown;
96
+ }
97
+ /**
98
+ * Coordinate router queries, React rendering and the final Fetch response.
99
+ */
100
+ declare const render: <TAppProps>({ createApp, handler, renderToStream }: ICoreRenderParams<TAppProps>, context: ISsrRequestContext<TAppProps>, { abortDelay, getState, onError, onResponse, onRouterReady, onShellError, onShellReady, prepare, routerRequestContext, }: ICoreRenderOptions<TAppProps>, executionContext?: ISsrExecutionContext) => Promise<Response>;
101
+ export default render;
package/core/render.js ADDED
@@ -0,0 +1,2 @@
1
+ import e from"react";import{createStaticRouter as t,StaticRouterProvider as r}from"react-router";import o from"../constants/stream-error.js";import{ServerProvider as s}from"../context/server.js";import a from"./compose-html.js";import n from"./head-response.js";import{mergeResponseHeaders as c}from"./headers.js";import d from"./transform-html.js";import l from"../helpers/build-custom-state.js";import u from"../helpers/build-router-state.js";import i from"../helpers/obtain-stream-error.js";const m="text/html",h="Content-Type",p=async({createApp:p,handler:x,renderToStream:f},R,{abortDelay:C=15e3,getState:w,onError:E,onResponse:y,onRouterReady:b,onShellError:q,onShellReady:S,prepare:g,routerRequestContext:v},j)=>{const T=await x.query(R.request,{requestContext:v??R});if(T instanceof Response)return n(R.request,c(T,R.response.headers));R.routerContext=T,await(g?.({context:R,executionContext:j}));const{isStream:A=!0}=await(b?.({context:R}))??{};R.isStream=A,R.serverContext={basename:R.routerContext.basename,isServer:!0,response:null};const H=t(x.dataRoutes,R.routerContext),D=e.createElement(s,{context:R.serverContext},p(e.createElement(r,{router:H,context:R.routerContext,hydrate:!1}),R)),L=new AbortController;let k,B,I=!1;const z=()=>J(R.request.signal.reason),F=()=>clearTimeout(K),G=()=>{F(),R.request.signal.removeEventListener("abort",z)},J=e=>{I||(I=!0,k=e,G(),R.didError??=o.RenderCancel,L.abort(e),B?.abort(e))},K=setTimeout(()=>{R.didError=o.RenderTimeout,J()},C);R.request.signal.aborted?J(R.request.signal.reason):R.request.signal.addEventListener("abort",z,{once:!0});try{B=await f(D,{onError:e=>{const t=i(e);!I||t.code!==o.RenderAborted&&e!==L.signal.reason||(t.code=R.didError===o.RenderTimeout?o.RenderTimeout:o.RenderCancel);const{code:r}=t;R.didError??=r,E?.({context:R,error:t})},signal:L.signal}),I&&B.abort(k),B.allReady.then(F,F),await(A?B.shellReady:B.allReady)}catch(e){return J(e),await(B?.stream.cancel(e).catch(()=>{})),((e,t,r)=>{const o=t instanceof Error?t:new Error(String(t)),s=r?.({context:e,error:o})||"<!doctype html><p>Internal Server Error</p>",a=new Headers(e.response.headers);return a.set(h,m),new Response("HEAD"===e.request.method?null:s,{headers:a,status:500})})(R,e,q)}try{const e=R.serverContext.response;if(e&&(M=e,Boolean(M&&M.status>=300&&M.status<400&&M.headers.has("Location"))))return J(),await B.stream.cancel().catch(()=>{}),n(R.request,c(e,R.response.headers));const{header:t,footer:r,headers:o,status:s}=((e,{getState:t,onShellReady:r})=>{const o=e.serverContext.response;e.response.status=o?.status??e.response.status??e.routerContext.statusCode??200,e.response.headers.has(h)||e.response.headers.set(h,m);const s=r?.({context:e})??{},a=u(e.routerContext),n=l(t?.({context:e}));return{header:s.header||e.html.header,footer:a+n+(s.footer||e.html.footer),headers:new Headers(e.response.headers),status:e.response.status}})(R,{getState:w,onShellReady:S});if("HEAD"===R.request.method||[204,205,304].includes(s))return J(),await B.stream.cancel().catch(()=>{}),new Response(null,{headers:o,status:s});const i=a(t,B.stream,r,J,G),p=d(i,y?e=>y({context:R,html:e}):void 0);return B.start(),new Response(p,{headers:o,status:s})}catch(e){throw J(e),B.stream.locked||await B.stream.cancel(e).catch(()=>{}),e}var M};export{p as default};
2
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sources":["../../src/core/render.tsx"],"sourcesContent":[null],"names":["HTML_CONTENT_TYPE","CONTENT_TYPE","render","async","createApp","handler","renderToStream","context","abortDelay","getState","onError","onResponse","onRouterReady","onShellError","onShellReady","prepare","routerRequestContext","executionContext","queried","query","request","requestContext","Response","headResponse","mergeResponseHeaders","response","headers","routerContext","isStream","serverContext","basename","isServer","router","createStaticRouter","dataRoutes","node","React","createElement","ServerProvider","StaticRouterProvider","hydrate","renderController","AbortController","abortReason","output","hasAborted","onRequestAbort","abort","signal","reason","clearAbortTimer","clearTimeout","abortTimer","cleanup","removeEventListener","didError","StreamError","RenderCancel","setTimeout","RenderTimeout","aborted","addEventListener","once","error","streamError","obtainStreamError","code","RenderAborted","allReady","then","shellReady","stream","cancel","catch","shellError","Error","String","html","Headers","set","method","status","createShellErrorResponse","serverResponse","Boolean","has","header","footer","statusCode","shell","routerState","buildRouterState","customState","buildCustomState","prepareHtmlResponse","includes","body","composeHtml","transformed","transformHtml","undefined","start","locked"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ type TTransformHtml = (html: string) => string | undefined | void;
2
+ /**
3
+ * Apply response hooks to decoded text without splitting UTF-8 characters.
4
+ */
5
+ declare const transformHtml: (stream: ReadableStream<Uint8Array>, transform?: TTransformHtml) => ReadableStream<Uint8Array>;
6
+ export type { TTransformHtml };
7
+ export default transformHtml;
@@ -0,0 +1,2 @@
1
+ const e=(e,r)=>{if(!r)return e;const n=new TextDecoder,o=new TextEncoder,t=(e,n)=>{e&&n.enqueue(o.encode(r(e)||e))};return e.pipeThrough(new TransformStream({flush:e=>t(n.decode(),e),transform:(e,r)=>t(n.decode(e,{stream:!0}),r)}))};export{e as default};
2
+ //# sourceMappingURL=transform-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-html.js","sources":["../../src/core/transform-html.ts"],"sourcesContent":[null],"names":["transformHtml","stream","transform","decoder","TextDecoder","encoder","TextEncoder","apply","html","controller","enqueue","encode","pipeThrough","TransformStream","flush","decode","chunk"],"mappings":"AAKA,MAAMA,EAAgB,CACpBC,EACAC,KAEA,IAAKA,EACH,OAAOD,EAGT,MAAME,EAAU,IAAIC,YACdC,EAAU,IAAIC,YAKdC,EAAQ,CAACC,EAAcC,KACtBD,GAILC,EAAWC,QAAQL,EAAQM,OAAOT,EAAUM,IAASA,KAGvD,OAAOP,EAAOW,YACZ,IAAIC,gBAAwC,CAI1CC,MAAQL,GAAeF,EAAMJ,EAAQY,SAAUN,GAK/CP,UAAW,CAACc,EAAOP,IAAeF,EAAMJ,EAAQY,OAAOC,EAAO,CAAEf,QAAQ,IAASQ"}
@@ -0,0 +1,7 @@
1
+ export interface ISsrExecutionContext {
2
+ /**
3
+ * Deliver informational headers outside the final Fetch response when supported.
4
+ */
5
+ onEarlyHints?: (headers: Headers) => Promise<void> | void;
6
+ }
7
+ export type TSsrHandler = (request: Request, context?: ISsrExecutionContext) => Promise<Response>;
package/core/types.js ADDED
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { TRenderToStream } from '../core/render.js';
2
+ /**
3
+ * Adapt React Web streams and settle readiness even when initialization is aborted.
4
+ */
5
+ declare const renderToStream: TRenderToStream;
6
+ export default renderToStream;
@@ -0,0 +1,2 @@
1
+ import*as e from"react-dom/server";const r=async()=>e.renderToReadableStream??(await(import("react-dom/server.browser"))).renderToReadableStream,a=async(e,{onError:a,signal:t})=>{const o=new AbortController;let n;const s=new Promise((e,r)=>{n=r}),l=()=>{const{reason:e}=t;o.abort(e);const{reason:r}=o.signal;n(r instanceof Error?r:new Error(String(r)))};let c;t.aborted?l():t.addEventListener("abort",l,{once:!0});try{c=await Promise.race([r().then(r=>r(e,{onError:a,signal:o.signal})),s])}catch(e){t.removeEventListener("abort",l);const r=Promise.reject(e);return r.catch(()=>{}),{allReady:r,abort:e=>o.abort(e),shellReady:r,start:()=>{},stream:new ReadableStream}}const d=()=>t.removeEventListener("abort",l);return c.allReady.then(d,d),{allReady:c.allReady,abort:e=>o.abort(e),shellReady:Promise.resolve(),start:()=>{},stream:c}};export{a as default};
2
+ //# sourceMappingURL=render-to-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-to-stream.js","sources":["../../src/edge/render-to-stream.ts"],"sourcesContent":[null],"names":["getRenderer","async","ReactDOMServer","renderToReadableStream","renderToStream","node","onError","signal","controller","AbortController","rejectPending","pendingAbort","Promise","_","reject","abort","reason","signalReason","Error","String","stream","aborted","addEventListener","once","race","then","error","removeEventListener","shellError","catch","allReady","shellReady","start","ReadableStream","removeAbortListener","resolve"],"mappings":"mCAMA,MAAMA,EAAcC,SAClBC,EAAeC,sCACD,8BAA6BA,uBAKvCC,EAAkCH,MAAOI,GAAQC,UAASC,aAC9D,MAAMC,EAAa,IAAIC,gBACvB,IAAIC,EAKJ,MAAMC,EAAe,IAAIC,QAAe,CAACC,EAAGC,KAC1CJ,EAAgBI,IAMZC,EAAQ,KACZ,MAAQC,OAAQC,GAAiBV,EAEjCC,EAAWO,MAAME,GAEjB,MAAMD,OAAEA,GAAWR,EAAWD,OAE9BG,EAAcM,aAAkBE,MAAQF,EAAS,IAAIE,MAAMC,OAAOH,MASpE,IAAII,EANAb,EAAOc,QACTN,IAEAR,EAAOe,iBAAiB,QAASP,EAAO,CAAEQ,MAAM,IAKlD,IACEH,QAAeR,QAAQY,KAAK,CAC1BxB,IAAcyB,KAAMtB,GAClBA,EAAuBE,EAAM,CAAEC,UAASC,OAAQC,EAAWD,UAE7DI,GAEJ,CAAE,MAAOe,GACPnB,EAAOoB,oBAAoB,QAASZ,GACpC,MAAMa,EAAahB,QAAQE,OAAOY,GAIlC,OAFKE,EAAWC,MAAM,QAEf,CACLC,SAAUF,EAKVb,MAAQC,GAAWR,EAAWO,MAAMC,GACpCe,WAAYH,EAKZI,MAAO,OACPZ,OAAQ,IAAIa,eAEhB,CAKA,MAAMC,EAAsB,IAAY3B,EAAOoB,oBAAoB,QAASZ,GAI5E,OAFKK,EAAOU,SAASL,KAAKS,EAAqBA,GAExC,CACLJ,SAAUV,EAAOU,SAKjBf,MAAQC,GAAWR,EAAWO,MAAMC,GACpCe,WAAYnB,QAAQuB,UAKpBH,MAAO,OACPZ"}
@@ -1,6 +1,5 @@
1
- import { IRenderOptions } from "../node/render.js";
2
1
  /**
3
2
  * Build custom state
4
3
  */
5
- declare function buildCustomState(initState?: ReturnType<NonNullable<IRenderOptions['getState']>>): string;
6
- export { buildCustomState as default };
4
+ declare function buildCustomState(initState?: Record<string, Record<string, any>> | void): string;
5
+ export default buildCustomState;
@@ -1,2 +1,2 @@
1
- import t from"./html-escape.js";function r(r){return Object.entries(r??{}).map((([r,e])=>{if(!r||!e||!Object.keys(e||{}).length)return"";return`<script async>window.${r} = JSON.parse(${t(JSON.stringify(JSON.stringify(e)))});<\/script>`})).join("").trim()}export{r as default};
1
+ import t from"./html-escape.js";function r(r){return Object.entries(r??{}).map(([r,e])=>{if(!r||!e||!Object.keys(e||{}).length)return"";const i=t(JSON.stringify(JSON.stringify(e)));return`<script async>window${/^[A-Za-z_$][\w$]*$/.test(r)?`.${r}`:`[${t(JSON.stringify(r))}]`} = JSON.parse(${i});<\/script>`}).join("").trim()}export{r as default};
2
2
  //# sourceMappingURL=build-custom-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-custom-state.js","sources":["../../src/helpers/build-custom-state.ts"],"sourcesContent":["import htmlEscape from '@helpers/html-escape';\nimport type { IRenderOptions } from '@node/render';\n\n/**\n * Build custom state\n */\nfunction buildCustomState(initState?: ReturnType<NonNullable<IRenderOptions['getState']>>): string {\n const stateScripts = Object.entries(initState ?? {}).map(([key, state]) => {\n if (!key || !state || !Object.keys(state || {}).length) {\n return '';\n }\n\n const json = htmlEscape(JSON.stringify(JSON.stringify(state)));\n\n return `<script async>window.${key} = JSON.parse(${json});</script>`;\n });\n\n return stateScripts.join('').trim();\n}\n\nexport default buildCustomState;\n"],"names":["buildCustomState","initState","Object","entries","map","key","state","keys","length","htmlEscape","JSON","stringify","join","trim"],"mappings":"gCAMA,SAASA,EAAiBC,GAWxB,OAVqBC,OAAOC,QAAQF,GAAa,CAAA,GAAIG,KAAI,EAAEC,EAAKC,MAC9D,IAAKD,IAAQC,IAAUJ,OAAOK,KAAKD,GAAS,IAAIE,OAC9C,MAAO,GAKT,MAAO,wBAAwBH,kBAFlBI,EAAWC,KAAKC,UAAUD,KAAKC,UAAUL,kBAEc,IAGlDM,KAAK,IAAIC,MAC/B"}
1
+ {"version":3,"file":"build-custom-state.js","sources":["../../src/helpers/build-custom-state.ts"],"sourcesContent":[null],"names":["buildCustomState","initState","Object","entries","map","key","state","keys","length","json","htmlEscape","JSON","stringify","test","join","trim"],"mappings":"gCAKA,SAASA,EAAiBC,GAcxB,OAbqBC,OAAOC,QAAQF,GAAa,CAAA,GAAIG,IAAI,EAAEC,EAAKC,MAC9D,IAAKD,IAAQC,IAAUJ,OAAOK,KAAKD,GAAS,IAAIE,OAC9C,MAAO,GAGT,MAAMC,EAAOC,EAAWC,KAAKC,UAAUD,KAAKC,UAAUN,KAKtD,MAAO,uBAJU,qBAAqBO,KAAKR,GACvC,IAAIA,IACJ,IAAIK,EAAWC,KAAKC,UAAUP,uBAEqBI,kBAGrCK,KAAK,IAAIC,MAC/B"}
@@ -1,6 +1,6 @@
1
- import { StaticHandlerContext } from 'react-router';
1
+ import type { StaticHandlerContext } from 'react-router';
2
2
  /**
3
3
  * Build router state
4
4
  */
5
5
  declare function buildRouterState(context: StaticHandlerContext): string;
6
- export { buildRouterState as default };
6
+ export default buildRouterState;
@@ -1 +1 @@
1
- {"version":3,"file":"build-router-state.js","sources":["../../src/helpers/build-router-state.ts"],"sourcesContent":["import type { StaticHandlerContext } from 'react-router';\nimport htmlEscape from '@helpers/html-escape';\nimport serializeErrors from '@helpers/serialize-errors';\n\n/**\n * Build router state\n */\nfunction buildRouterState(context: StaticHandlerContext): string {\n const { loaderData, actionData, errors } = context;\n const routerState = {\n loaderData,\n actionData,\n errors: serializeErrors(errors),\n };\n const json = htmlEscape(JSON.stringify(JSON.stringify(routerState)));\n\n return `<script async>window.__staticRouterHydrationData = JSON.parse(${json});</script>`;\n}\n\nexport default buildRouterState;\n"],"names":["buildRouterState","context","loaderData","actionData","errors","routerState","serializeErrors","htmlEscape","JSON","stringify"],"mappings":"qEAOA,SAASA,EAAiBC,GACxB,MAAMC,WAAEA,EAAUC,WAAEA,EAAUC,OAAEA,GAAWH,EACrCI,EAAc,CAClBH,aACAC,aACAC,OAAQE,EAAgBF,IAI1B,MAAO,iEAFMG,EAAWC,KAAKC,UAAUD,KAAKC,UAAUJ,kBAGxD"}
1
+ {"version":3,"file":"build-router-state.js","sources":["../../src/helpers/build-router-state.ts"],"sourcesContent":[null],"names":["buildRouterState","context","loaderData","actionData","errors","routerState","serializeErrors","htmlEscape","JSON","stringify"],"mappings":"qEAOA,SAASA,EAAiBC,GACxB,MAAMC,WAAEA,EAAUC,WAAEA,EAAUC,OAAEA,GAAWH,EACrCI,EAAc,CAClBH,aACAC,aACAC,OAAQE,EAAgBF,IAI1B,MAAO,iEAFMG,EAAWC,KAAKC,UAAUD,KAAKC,UAAUJ,kBAGxD"}
@@ -1,11 +1,11 @@
1
- import { IBuildParams } from "../services/build.js";
1
+ import type { IBuildParams } from '../services/build.js';
2
2
  /**
3
3
  * Small focus only helper to provide simple and useful methods to detect focus state
4
4
  */
5
- declare const createFocusOnly: (focus: IBuildParams['focusOnly']) => {
5
+ declare const createFocusOnly: (focus: IBuildParams["focusOnly"]) => {
6
6
  isOnlyClient: () => boolean;
7
7
  isClient: () => boolean;
8
8
  isServer: () => boolean;
9
9
  isEntrypoint: () => boolean;
10
10
  };
11
- export { createFocusOnly as default };
11
+ export default createFocusOnly;
@@ -1 +1 @@
1
- {"version":3,"file":"create-focus-only.js","sources":["../../src/helpers/create-focus-only.ts"],"sourcesContent":["import type { IBuildParams } from '@services/build';\n\n/**\n * Small focus only helper to provide simple and useful methods to detect focus state\n */\nconst createFocusOnly = (focus: IBuildParams['focusOnly']) => ({\n isOnlyClient: () => focus === 'client',\n isClient: () => ['all', 'app', 'client'].includes(focus!),\n isServer: () => ['all', 'app', 'server'].includes(focus!),\n isEntrypoint: () => ['all', 'entrypoint'].includes(focus!),\n});\n\nexport default createFocusOnly;\n"],"names":["createFocusOnly","focus","isOnlyClient","isClient","includes","isServer","isEntrypoint"],"mappings":"AAKA,MAAMA,EAAmBC,IAAgC,CACvDC,aAAc,IAAgB,WAAVD,EACpBE,SAAU,IAAM,CAAC,MAAO,MAAO,UAAUC,SAASH,GAClDI,SAAU,IAAM,CAAC,MAAO,MAAO,UAAUD,SAASH,GAClDK,aAAc,IAAM,CAAC,MAAO,cAAcF,SAASH"}
1
+ {"version":3,"file":"create-focus-only.js","sources":["../../src/helpers/create-focus-only.ts"],"sourcesContent":[null],"names":["createFocusOnly","focus","isOnlyClient","isClient","includes","isServer","isEntrypoint"],"mappings":"AAKA,MAAMA,EAAmBC,IAAgC,CACvDC,aAAc,IAAgB,WAAVD,EACpBE,SAAU,IAAM,CAAC,MAAO,MAAO,UAAUC,SAASH,GAClDI,SAAU,IAAM,CAAC,MAAO,MAAO,UAAUD,SAASH,GAClDK,aAAc,IAAM,CAAC,MAAO,cAAcF,SAASH"}
@@ -1,4 +1,4 @@
1
- import { ResolvedConfig } from 'vite';
1
+ import type { ResolvedConfig } from 'vite';
2
2
  declare const getMarkerFile: (root: string, withFile?: boolean) => string;
3
3
  /**
4
4
  * Create dev marker
@@ -1 +1 @@
1
- {"version":3,"file":"dev-marker.js","sources":["../../src/helpers/dev-marker.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport type { ResolvedConfig } from 'vite';\n\nconst getMarkerFile = (root: string, withFile = true): string =>\n [root, 'server', withFile && '.dev'].filter(Boolean).join('/');\n\n/**\n * Create dev marker\n *\n * @see printServerInfo\n */\nconst createDevMarker = (isProd: boolean, { root, build: buildConf }: ResolvedConfig): void => {\n const buildRoot = path.resolve(root, buildConf.outDir);\n const devMarkerPath = getMarkerFile(buildRoot, false);\n const devMarker = getMarkerFile(buildRoot);\n\n if (!isProd) {\n if (!fs.existsSync(devMarkerPath)) {\n fs.mkdirSync(devMarkerPath, { recursive: true });\n }\n\n fs.writeFileSync(devMarker, '');\n } else if (fs.existsSync(devMarker)) {\n fs.rmSync(devMarker);\n }\n};\n\nexport { createDevMarker, getMarkerFile };\n"],"names":["getMarkerFile","root","withFile","filter","Boolean","join","createDevMarker","isProd","build","buildConf","buildRoot","path","resolve","outDir","devMarkerPath","devMarker","fs","existsSync","rmSync","mkdirSync","recursive","writeFileSync"],"mappings":"gDAIA,MAAMA,EAAgB,CAACC,EAAcC,GAAW,IAC9C,CAACD,EAAM,SAAUC,GAAY,QAAQC,OAAOC,SAASC,KAAK,KAOtDC,EAAkB,CAACC,GAAmBN,OAAMO,MAAOC,MACvD,MAAMC,EAAYC,EAAKC,QAAQX,EAAMQ,EAAUI,QACzCC,EAAgBd,EAAcU,GAAW,GACzCK,EAAYf,EAAcU,GAE3BH,EAMMS,EAAGC,WAAWF,IACvBC,EAAGE,OAAOH,IANLC,EAAGC,WAAWH,IACjBE,EAAGG,UAAUL,EAAe,CAAEM,WAAW,IAG3CJ,EAAGK,cAAcN,EAAW,IAG9B"}
1
+ {"version":3,"file":"dev-marker.js","sources":["../../src/helpers/dev-marker.ts"],"sourcesContent":[null],"names":["getMarkerFile","root","withFile","filter","Boolean","join","createDevMarker","isProd","build","buildConf","buildRoot","path","resolve","outDir","devMarkerPath","devMarker","fs","existsSync","rmSync","mkdirSync","recursive","writeFileSync"],"mappings":"gDAIA,MAAMA,EAAgB,CAACC,EAAcC,GAAW,IAC9C,CAACD,EAAM,SAAUC,GAAY,QAAQC,OAAOC,SAASC,KAAK,KAOtDC,EAAkB,CAACC,GAAmBN,OAAMO,MAAOC,MACvD,MAAMC,EAAYC,EAAKC,QAAQX,EAAMQ,EAAUI,QACzCC,EAAgBd,EAAcU,GAAW,GACzCK,EAAYf,EAAcU,GAE3BH,EAMMS,EAAGC,WAAWF,IACvBC,EAAGE,OAAOH,IANLC,EAAGC,WAAWH,IACjBE,EAAGG,UAAUL,EAAe,CAAEM,WAAW,IAG3CJ,EAAGK,cAAcN,EAAW"}
@@ -2,4 +2,4 @@
2
2
  * Get server state on the client side
3
3
  */
4
4
  declare const getServerState: <TP = Record<string, any>>(name: string, shouldRemove?: boolean) => TP;
5
- export { getServerState as default };
5
+ export default getServerState;
@@ -1 +1 @@
1
- {"version":3,"file":"get-server-state.js","sources":["../../src/helpers/get-server-state.ts"],"sourcesContent":["/**\n * Get server state on the client side\n */\nconst getServerState = <TP = Record<string, any>>(name: string, shouldRemove = true): TP => {\n const data = (window as Record<any, any>)[name] as TP;\n\n if (shouldRemove && data) {\n delete (window as Record<any, any>)[name];\n }\n\n return (data ?? {}) as TP;\n};\n\nexport default getServerState;\n"],"names":["getServerState","name","shouldRemove","data","window"],"mappings":"AAGA,MAAMA,EAAiB,CAA2BC,EAAcC,GAAe,KAC7E,MAAMC,EAAQC,OAA4BH,GAM1C,OAJIC,GAAgBC,UACVC,OAA4BH,GAG9BE,GAAQ,CAAA,CAAE"}
1
+ {"version":3,"file":"get-server-state.js","sources":["../../src/helpers/get-server-state.ts"],"sourcesContent":[null],"names":["getServerState","name","shouldRemove","data","window"],"mappings":"AAGA,MAAMA,EAAiB,CAA2BC,EAAcC,GAAe,KAC7E,MAAMC,EAAQC,OAA4BH,GAM1C,OAJIC,GAAgBC,UACVC,OAA4BH,GAG9BE,GAAQ,CAAA"}
@@ -3,4 +3,4 @@
3
3
  * License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE
4
4
  */
5
5
  declare const htmlEscape: (str: string) => string;
6
- export { htmlEscape as default };
6
+ export default htmlEscape;
@@ -1,2 +1,2 @@
1
- const u={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},e=/[&><\u2028\u2029]/g,a=a=>a.replace(e,(e=>u[e]));export{a as default};
1
+ const u={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},e=/[&><\u2028\u2029]/g,a=a=>a.replace(e,e=>u[e]);export{a as default};
2
2
  //# sourceMappingURL=html-escape.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-escape.js","sources":["../../src/helpers/html-escape.ts"],"sourcesContent":["const ESCAPE_LOOKUP: { [match: string]: string } = {\n '&': '\\\\u0026',\n '>': '\\\\u003e',\n '<': '\\\\u003c',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n};\nconst ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\n\n/**\n * This utility is based on https://github.com/zertosh/htmlescape\n * License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE\n */\nconst htmlEscape = (str: string): string => {\n return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);\n};\n\nexport default htmlEscape;\n"],"names":["ESCAPE_LOOKUP","ESCAPE_REGEX","htmlEscape","str","replace","match"],"mappings":"AAAA,MAAMA,EAA6C,CACjD,IAAK,UACL,IAAK,UACL,IAAK,UACL,SAAU,UACV,SAAU,WAENC,EAAe,qBAMfC,EAAcC,GACXA,EAAIC,QAAQH,GAAeI,GAAUL,EAAcK"}
1
+ {"version":3,"file":"html-escape.js","sources":["../../src/helpers/html-escape.ts"],"sourcesContent":[null],"names":["ESCAPE_LOOKUP","ESCAPE_REGEX","htmlEscape","str","replace","match"],"mappings":"AAAA,MAAMA,EAA6C,CACjD,IAAK,UACL,IAAK,UACL,IAAK,UACL,SAAU,UACV,SAAU,WAENC,EAAe,qBAMfC,EAAcC,GACXA,EAAIC,QAAQH,EAAeI,GAAUL,EAAcK"}
@@ -1,15 +1,15 @@
1
- import { IndexRouteObject, NonIndexRouteObject } from 'react-router';
2
- import { FCCRoute, FCRoute } from "../interfaces/fc-route.js";
3
- import { TOnlyClientProp } from "../interfaces/route-object.js";
4
- type IDynamicRoute = () => Promise<{
1
+ import type { IndexRouteObject, NonIndexRouteObject } from 'react-router';
2
+ import type { FCCRoute, FCRoute } from '../interfaces/fc-route.js';
3
+ import type { TOnlyClientProp } from '../interfaces/route-object.js';
4
+ export type IDynamicRoute = () => Promise<{
5
5
  default: FCRoute | FCCRoute<any>;
6
6
  }>;
7
- type ImmutableRouteKey = 'lazy' | 'caseSensitive' | 'path' | 'id' | 'index' | 'children';
8
- type IAsyncRoute = {
7
+ export type ImmutableRouteKey = 'lazy' | 'caseSensitive' | 'path' | 'id' | 'index' | 'children';
8
+ export type IAsyncRoute = {
9
9
  pathId?: string;
10
10
  } & (Omit<IndexRouteObject, ImmutableRouteKey> | Omit<NonIndexRouteObject, ImmutableRouteKey>);
11
11
  /**
12
12
  * Import dynamic route
13
13
  */
14
14
  declare const importRoute: (route: IDynamicRoute, onlyClient?: TOnlyClientProp) => (() => Promise<IAsyncRoute>);
15
- export { importRoute as default, IDynamicRoute, ImmutableRouteKey, IAsyncRoute };
15
+ export default importRoute;
@@ -1,2 +1,2 @@
1
- import{isValidElement as o}from"react";import n from"../components/render-client.js";import t from"../components/with-suspense.js";import{IS_SERVER as e}from"../constants/common.js";import{keys as m}from"../interfaces/fc-route.js";const p=(p,r)=>async()=>{const s=(n=>o(n)?{element:n}:"function"!=typeof n&&"object"!=typeof n||null===n?{Component:null}:{Component:n})(r);if(r&&e)return s;const c=await p();if("Component"in c){const o=r?n(c.Component,s):c.Component;return{...c,Component:o}}const f=c.default,i={Component:f};return m.forEach((o=>{f[o]&&(i[o]=f[o])})),f.Suspense&&(i.Component=t(f,f.Suspense)),r&&(i.Component=n(i.Component,s)),i};export{p as default};
1
+ import{isValidElement as o}from"react";import n from"../components/render-client.js";import t from"../components/with-suspense.js";import{IS_SERVER as e}from"../constants/common.js";import{keys as m}from"../interfaces/fc-route.js";const p=(p,r)=>async()=>{const s=(n=>o(n)?{element:n}:"function"!=typeof n&&"object"!=typeof n||null===n?{Component:null}:{Component:n})(r);if(r&&e)return s;const c=await p();if("Component"in c){const o=r?n(c.Component,s):c.Component;return{...c,Component:o}}const f=c.default,i={Component:f};return m.forEach(o=>{f[o]&&(i[o]=f[o])}),f.Suspense&&(i.Component=t(f,f.Suspense)),r&&(i.Component=n(i.Component,s)),i};export{p as default};
2
2
  //# sourceMappingURL=import-route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-route.js","sources":["../../src/helpers/import-route.ts"],"sourcesContent":["import type { FC, ReactNode } from 'react';\nimport { isValidElement } from 'react';\nimport type { IndexRouteObject, NonIndexRouteObject } from 'react-router';\nimport renderClient from '@components/render-client';\nimport withSuspense from '@components/with-suspense';\nimport { IS_SERVER } from '@constants/common';\nimport type { FCCRoute, FCRoute } from '@interfaces/fc-route';\nimport { keys } from '@interfaces/fc-route';\nimport type { TOnlyClientProp } from '@interfaces/route-object';\n\nexport type IDynamicRoute = () => Promise<{ default: FCRoute | FCCRoute<any> }>;\n\nexport type ImmutableRouteKey = 'lazy' | 'caseSensitive' | 'path' | 'id' | 'index' | 'children';\n\nexport type IAsyncRoute = { pathId?: string } & (\n | Omit<IndexRouteObject, ImmutableRouteKey>\n | Omit<NonIndexRouteObject, ImmutableRouteKey>\n);\n\n/**\n * Return right fallback syntax\n */\nconst getFallback = (\n Fallback?: TOnlyClientProp,\n): { element: ReactNode } | { Component: FC | null } => {\n if (isValidElement(Fallback)) {\n return { element: Fallback };\n }\n\n if ((typeof Fallback === 'function' || typeof Fallback === 'object') && Fallback !== null) {\n return { Component: Fallback as FC };\n }\n\n return { Component: null };\n};\n\n/**\n * Import dynamic route\n */\nconst importRoute = (\n route: IDynamicRoute,\n onlyClient?: TOnlyClientProp,\n): (() => Promise<IAsyncRoute>) => {\n return async (): Promise<IAsyncRoute> => {\n const Fallback = getFallback(onlyClient);\n\n if (onlyClient && IS_SERVER) {\n return Fallback;\n }\n\n const resolved = await route();\n\n // fallback to react router export style\n if ('Component' in resolved) {\n const Component = onlyClient\n ? renderClient(resolved.Component as FCRoute | FCCRoute<any>, Fallback)\n : resolved.Component;\n\n return { ...resolved, Component } as IAsyncRoute;\n }\n\n const Component = resolved.default;\n const result: IAsyncRoute = { Component };\n\n keys.forEach((key) => {\n if (Component[key]) {\n // @ts-ignore\n result[key] = Component[key] as NonNullable<IAsyncRoute[typeof key]>;\n }\n });\n\n if (Component.Suspense) {\n result.Component = withSuspense(Component, Component.Suspense);\n }\n\n if (onlyClient) {\n result.Component = renderClient(result.Component as FCRoute | FCCRoute<any>, Fallback);\n }\n\n return result;\n };\n};\n\nexport default importRoute;\n"],"names":["importRoute","route","onlyClient","async","Fallback","isValidElement","element","Component","getFallback","IS_SERVER","resolved","renderClient","default","result","keys","forEach","key","Suspense","withSuspense"],"mappings":"uOAsBA,MAiBMA,EAAc,CAClBC,EACAC,IAEOC,UACL,MAAMC,EAtBU,CAClBA,GAEIC,EAAeD,GACV,CAAEE,QAASF,GAGK,mBAAbA,GAA+C,iBAAbA,GAAuC,OAAbA,EAIjE,CAAEG,UAAW,MAHX,CAAEA,UAAWH,GAcHI,CAAYN,GAE7B,GAAIA,GAAcO,EAChB,OAAOL,EAGT,MAAMM,QAAiBT,IAGvB,GAAI,cAAeS,EAAU,CAC3B,MAAMH,EAAYL,EACdS,EAAaD,EAASH,UAAsCH,GAC5DM,EAASH,UAEb,MAAO,IAAKG,EAAUH,YACxB,CAEA,MAAMA,EAAYG,EAASE,QACrBC,EAAsB,CAAEN,aAiB9B,OAfAO,EAAKC,SAASC,IACRT,EAAUS,KAEZH,EAAOG,GAAOT,EAAUS,GAC1B,IAGET,EAAUU,WACZJ,EAAON,UAAYW,EAAaX,EAAWA,EAAUU,WAGnDf,IACFW,EAAON,UAAYI,EAAaE,EAAON,UAAsCH,IAGxES,CAAM"}
1
+ {"version":3,"file":"import-route.js","sources":["../../src/helpers/import-route.ts"],"sourcesContent":[null],"names":["importRoute","route","onlyClient","async","Fallback","isValidElement","element","Component","getFallback","IS_SERVER","resolved","renderClient","default","result","keys","forEach","key","Suspense","withSuspense"],"mappings":"uOAqBA,MAiBMA,EAAc,CAClBC,EACAC,IAEOC,UACL,MAAMC,EAtBU,CAClBA,GAEIC,EAAeD,GACV,CAAEE,QAASF,GAGK,mBAAbA,GAA+C,iBAAbA,GAAuC,OAAbA,EAIjE,CAAEG,UAAW,MAHX,CAAEA,UAAWH,GAcHI,CAAYN,GAE7B,GAAIA,GAAcO,EAChB,OAAOL,EAGT,MAAMM,QAAiBT,IAGvB,GAAI,cAAeS,EAAU,CAC3B,MAAMH,EAAYL,EACdS,EAAaD,EAASH,UAAsCH,GAC5DM,EAASH,UAEb,MAAO,IAAKG,EAAUH,YACxB,CAEA,MAAMA,EAAYG,EAASE,QACrBC,EAAsB,CAAEN,aAiB9B,OAfAO,EAAKC,QAASC,IACRT,EAAUS,KAEZH,EAAOG,GAAOT,EAAUS,MAIxBT,EAAUU,WACZJ,EAAON,UAAYW,EAAaX,EAAWA,EAAUU,WAGnDf,IACFW,EAAON,UAAYI,EAAaE,EAAON,UAAsCH,IAGxES"}
@@ -2,4 +2,4 @@
2
2
  * Detect route file
3
3
  */
4
4
  declare const isRoutesFile: (code: string) => boolean;
5
- export { isRoutesFile as default };
5
+ export default isRoutesFile;
@@ -1 +1 @@
1
- {"version":3,"file":"is-route-file.js","sources":["../../src/helpers/is-route-file.ts"],"sourcesContent":["/**\n * Detect route file\n */\nconst isRoutesFile = (code: string): boolean =>\n /{.*path:.*(lazy:.+import|Component:|element:)|{.*(lazy:.+import|Component:|element:).*path:/s.test(\n code,\n );\n\nexport default isRoutesFile;\n"],"names":["isRoutesFile","code","test"],"mappings":"AAGA,MAAMA,EAAgBC,GACpB,+FAA+FC,KAC7FD"}
1
+ {"version":3,"file":"is-route-file.js","sources":["../../src/helpers/is-route-file.ts"],"sourcesContent":[null],"names":["isRoutesFile","code","test"],"mappings":"AAGA,MAAMA,EAAgBC,GACpB,+FAA+FC,KAC7FD"}
@@ -1,5 +1,5 @@
1
- import StreamError from "../constants/stream-error.js";
2
- interface IObtainStreamErrorOut {
1
+ import StreamError from '../constants/stream-error.js';
2
+ export interface IObtainStreamErrorOut {
3
3
  code: StreamError;
4
4
  message: string;
5
5
  original: unknown;
@@ -8,4 +8,4 @@ interface IObtainStreamErrorOut {
8
8
  * Get react stream error
9
9
  */
10
10
  declare const obtainStreamError: (err: unknown) => IObtainStreamErrorOut;
11
- export { obtainStreamError as default, IObtainStreamErrorOut };
11
+ export default obtainStreamError;