@lomray/vite-ssr-boost 8.0.0-beta.1 → 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.
- package/README.md +2 -1
- package/adapters/body.d.ts +1 -1
- package/adapters/body.js +1 -1
- package/adapters/body.js.map +1 -1
- package/adapters/compression.d.ts +5 -5
- package/adapters/compression.js +1 -1
- package/adapters/compression.js.map +1 -1
- package/adapters/edge.d.ts +5 -5
- package/adapters/edge.js.map +1 -1
- package/adapters/express/create-request.d.ts +2 -2
- package/adapters/express/create-request.js.map +1 -1
- package/adapters/express/entry.d.ts +17 -19
- package/adapters/express/entry.js.map +1 -1
- package/adapters/express/prepare-server.d.ts +7 -25
- package/adapters/express/prepare-server.js +1 -1
- package/adapters/express/prepare-server.js.map +1 -1
- package/adapters/express/render.d.ts +14 -15
- package/adapters/express/render.js +1 -1
- package/adapters/express/render.js.map +1 -1
- package/adapters/express/server.d.ts +5 -6
- package/adapters/express/server.js +1 -1
- package/adapters/express/server.js.map +1 -1
- package/adapters/express.d.ts +5 -5
- package/adapters/express.js.map +1 -1
- package/adapters/fastify.d.ts +5 -5
- package/adapters/fastify.js +1 -1
- package/adapters/fastify.js.map +1 -1
- package/adapters/hono.d.ts +2 -2
- package/adapters/hono.js.map +1 -1
- package/adapters/node.d.ts +6 -5
- package/adapters/node.js.map +1 -1
- package/browser/entry.d.ts +9 -9
- package/browser/entry.js +1 -1
- package/browser/entry.js.map +1 -1
- package/cli/build.d.ts +2 -2
- package/cli/build.js.map +1 -1
- package/cli/helpers/keyboard-input.d.ts +1 -1
- package/cli/helpers/keyboard-input.js +1 -1
- package/cli/helpers/keyboard-input.js.map +1 -1
- package/cli/helpers/vite-reset-cache.d.ts +1 -1
- package/cli/helpers/vite-reset-cache.js.map +1 -1
- package/cli/interfaces/actions.d.ts +8 -9
- package/cli/run-amplify-build.d.ts +1 -1
- package/cli/run-amplify-build.js.map +1 -1
- package/cli/run-dev.d.ts +3 -4
- package/cli/run-dev.js.map +1 -1
- package/cli/run-docker-build.d.ts +2 -2
- package/cli/run-docker-build.js.map +1 -1
- package/cli/run-prod.d.ts +4 -5
- package/cli/run-prod.js.map +1 -1
- package/cli/run-serverless.d.ts +2 -2
- package/cli/run-serverless.js.map +1 -1
- package/cli/run-vercel-build.d.ts +1 -1
- package/cli/run-vercel-build.js.map +1 -1
- package/cli.js +1 -1
- package/cli.js.map +1 -1
- package/components/navigate.d.ts +3 -3
- package/components/navigate.js.map +1 -1
- package/components/only-client.d.ts +2 -2
- package/components/only-client.js +1 -1
- package/components/only-client.js.map +1 -1
- package/components/render-client.d.ts +4 -4
- package/components/render-client.js +1 -1
- package/components/render-client.js.map +1 -1
- package/components/response-status.d.ts +2 -2
- package/components/response-status.js.map +1 -1
- package/components/scroll-to-top.d.ts +2 -2
- package/components/scroll-to-top.js +1 -1
- package/components/scroll-to-top.js.map +1 -1
- package/components/with-suspense.d.ts +3 -3
- package/components/with-suspense.js.map +1 -1
- package/constants/cli-actions.d.ts +1 -1
- package/constants/cli-actions.js.map +1 -1
- package/constants/cli-context.d.ts +4 -5
- package/constants/cli-context.js.map +1 -1
- package/constants/cli-name.d.ts +1 -1
- package/constants/cli-name.js.map +1 -1
- package/constants/cli-shortcuts.d.ts +2 -2
- package/constants/cli-shortcuts.js +1 -1
- package/constants/cli-shortcuts.js.map +1 -1
- package/constants/common.js.map +1 -1
- package/constants/plugin-name.d.ts +1 -1
- package/constants/plugin-name.js.map +1 -1
- package/constants/stream-error.d.ts +1 -1
- package/constants/stream-error.js.map +1 -1
- package/context/server.d.ts +3 -4
- package/context/server.js.map +1 -1
- package/core/compose-html.d.ts +2 -2
- package/core/compose-html.js.map +1 -1
- package/core/early-hints.d.ts +2 -2
- package/core/early-hints.js.map +1 -1
- package/core/handler.d.ts +3 -3
- package/core/handler.js.map +1 -1
- package/core/head-response.d.ts +1 -1
- package/core/head-response.js.map +1 -1
- package/core/headers.d.ts +3 -4
- package/core/headers.js +1 -1
- package/core/headers.js.map +1 -1
- package/core/render.d.ts +13 -13
- package/core/render.js +1 -1
- package/core/render.js.map +1 -1
- package/core/transform-html.d.ts +1 -1
- package/core/transform-html.js.map +1 -1
- package/core/types.d.ts +2 -3
- package/edge/render-to-stream.d.ts +2 -2
- package/edge/render-to-stream.js +1 -1
- package/edge/render-to-stream.js.map +1 -1
- package/helpers/build-custom-state.d.ts +1 -1
- package/helpers/build-custom-state.js +1 -1
- package/helpers/build-custom-state.js.map +1 -1
- package/helpers/build-router-state.d.ts +2 -2
- package/helpers/build-router-state.js.map +1 -1
- package/helpers/create-focus-only.d.ts +3 -3
- package/helpers/create-focus-only.js.map +1 -1
- package/helpers/dev-marker.d.ts +1 -1
- package/helpers/dev-marker.js.map +1 -1
- package/helpers/get-server-state.d.ts +1 -1
- package/helpers/get-server-state.js.map +1 -1
- package/helpers/html-escape.d.ts +1 -1
- package/helpers/html-escape.js +1 -1
- package/helpers/html-escape.js.map +1 -1
- package/helpers/import-route.d.ts +7 -7
- package/helpers/import-route.js +1 -1
- package/helpers/import-route.js.map +1 -1
- package/helpers/is-route-file.d.ts +1 -1
- package/helpers/is-route-file.js.map +1 -1
- package/helpers/obtain-stream-error.d.ts +3 -3
- package/helpers/obtain-stream-error.js.map +1 -1
- package/helpers/plugin-config.d.ts +5 -5
- package/helpers/plugin-config.js +1 -1
- package/helpers/plugin-config.js.map +1 -1
- package/helpers/print-server-info.d.ts +3 -4
- package/helpers/print-server-info.js +1 -1
- package/helpers/print-server-info.js.map +1 -1
- package/helpers/print-server-urls.d.ts +2 -2
- package/helpers/print-server-urls.js +1 -1
- package/helpers/print-server-urls.js.map +1 -1
- package/helpers/process-stop.d.ts +1 -1
- package/helpers/process-stop.js.map +1 -1
- package/helpers/resolve-server-urls.d.ts +3 -4
- package/helpers/resolve-server-urls.js +1 -1
- package/helpers/resolve-server-urls.js.map +1 -1
- package/helpers/serialize-errors.d.ts +2 -2
- package/helpers/serialize-errors.js.map +1 -1
- package/helpers/vite-aliases.d.ts +2 -2
- package/helpers/vite-aliases.js +1 -1
- package/helpers/vite-aliases.js.map +1 -1
- package/interfaces/fc-route.d.ts +4 -4
- package/interfaces/fc-route.js.map +1 -1
- package/interfaces/fc.d.ts +3 -4
- package/interfaces/route-object.d.ts +6 -6
- package/node/compress-response.d.ts +2 -2
- package/node/compress-response.js +1 -1
- package/node/compress-response.js.map +1 -1
- package/node/create-headers.d.ts +1 -1
- package/node/create-headers.js.map +1 -1
- package/node/create-request.d.ts +2 -2
- package/node/create-request.js.map +1 -1
- package/node/http.d.ts +4 -6
- package/node/render-to-stream.d.ts +2 -2
- package/node/render-to-stream.js +1 -1
- package/node/render-to-stream.js.map +1 -1
- package/node/request-signal.d.ts +2 -2
- package/node/request-signal.js.map +1 -1
- package/node/split-link-header.d.ts +1 -1
- package/node/split-link-header.js.map +1 -1
- package/node/write-early-hints.d.ts +2 -2
- package/node/write-early-hints.js.map +1 -1
- package/node/write-fetch-response.d.ts +3 -2
- package/node/write-fetch-response.js +1 -1
- package/node/write-fetch-response.js.map +1 -1
- package/package.json +52 -32
- package/plugin.d.ts +7 -7
- package/plugin.js.map +1 -1
- package/plugins/create-spa-index.d.ts +3 -3
- package/plugins/create-spa-index.js.map +1 -1
- package/plugins/handle-custom-entrypoint.d.ts +4 -4
- package/plugins/handle-custom-entrypoint.js +1 -1
- package/plugins/handle-custom-entrypoint.js.map +1 -1
- package/plugins/make-aliases.d.ts +3 -3
- package/plugins/make-aliases.js +1 -1
- package/plugins/make-aliases.js.map +1 -1
- package/plugins/normalize-route.d.ts +3 -3
- package/plugins/normalize-route.js.map +1 -1
- package/services/build.d.ts +5 -51
- package/services/build.js +1 -1
- package/services/build.js.map +1 -1
- package/services/logger.d.ts +2 -30
- package/services/logger.js.map +1 -1
- package/services/parse-routes.d.ts +5 -42
- package/services/parse-routes.js +1 -1
- package/services/parse-routes.js.map +1 -1
- package/services/path-normalize.d.ts +3 -18
- package/services/path-normalize.js +1 -1
- package/services/path-normalize.js.map +1 -1
- package/services/server-api.d.ts +1 -7
- package/services/server-api.js.map +1 -1
- package/services/server-config.d.ts +4 -48
- package/services/server-config.js +1 -1
- package/services/server-config.js.map +1 -1
- package/services/ssr-manifest.d.ts +6 -63
- package/services/ssr-manifest.js +1 -1
- package/services/ssr-manifest.js.map +1 -1
- package/workflow/Dockerfile +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FC, ReactNode } from 'react';
|
|
2
|
-
import { FCAny } from
|
|
1
|
+
import type { FC, ReactNode } from 'react';
|
|
2
|
+
import type { FCAny } from '../interfaces/fc.js';
|
|
3
3
|
/**
|
|
4
4
|
* HOC: Render component only on client side
|
|
5
5
|
*/
|
|
@@ -7,5 +7,5 @@ declare const renderClient: <T extends Record<string, any>>(Component: FCAny<T>
|
|
|
7
7
|
element: ReactNode;
|
|
8
8
|
} | {
|
|
9
9
|
Component: FC | null;
|
|
10
|
-
}
|
|
11
|
-
export
|
|
10
|
+
}) => FC<T>;
|
|
11
|
+
export default renderClient;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"hoist-non-react-statics";import t,{useState as n,useEffect as o}from"react";const r=(r,m)=>{const l=e=>{const[l,c]=n(!1);return o((
|
|
1
|
+
import e from"hoist-non-react-statics";import t,{useState as n,useEffect as o}from"react";const r=(r,m)=>{const l=e=>{const[l,c]=n(!1);return o(()=>{c(!0)},[]),l&&r?t.createElement(r,{...e}):m&&"element"in m?m.element:m&&"Component"in m&&m.Component?t.createElement(m.Component,null):null};return r&&e(l,r),l};export{r as default};
|
|
2
2
|
//# sourceMappingURL=render-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-client.js","sources":["../../src/components/render-client.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"render-client.js","sources":["../../src/components/render-client.tsx"],"sourcesContent":[null],"names":["renderClient","Component","Fallback","Element","props","shouldRender","setShouldRender","useState","useEffect","React","createElement","element","hoistNonReactStatics"],"mappings":"0FAQA,MAAMA,EAAe,CACnBC,EACAC,KAEA,MAAMC,EAAkBC,IACtB,MAAOC,EAAcC,GAAmBC,GAAS,GAMjD,OAJAC,EAAU,KACRF,GAAgB,IACf,IAECD,GAAgBJ,EACXQ,EAAAC,cAACT,EAAS,IAAKG,IAGpBF,GAAY,YAAaA,EACpBA,EAASS,QAGdT,GAAY,cAAeA,GAAYA,EAASD,UAC3CQ,EAAAC,cAACR,EAASD,gBAGZ,MAOT,OAJIA,GACFW,EAAqBT,EAASF,GAGzBE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
1
|
+
import type { FC } from 'react';
|
|
2
2
|
interface IStatusGate {
|
|
3
3
|
status: number;
|
|
4
4
|
}
|
|
@@ -8,4 +8,4 @@ interface IStatusGate {
|
|
|
8
8
|
* @constructor
|
|
9
9
|
*/
|
|
10
10
|
declare const ResponseStatus: FC<IStatusGate>;
|
|
11
|
-
export
|
|
11
|
+
export default ResponseStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-status.js","sources":["../../src/components/response-status.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"response-status.js","sources":["../../src/components/response-status.ts"],"sourcesContent":[null],"names":["ResponseStatus","status","context","useServerContext","isServer","response","Response"],"mappings":"wDAYA,MAAMA,EAAkC,EAAGC,aACzC,MAAMC,EAAUC,IAMhB,OAJID,EAAQE,WACVF,EAAQG,SAAW,IAAIC,SAAS,KAAM,CAAEL,YAGnC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
1
|
+
import type { FC } from 'react';
|
|
2
2
|
interface IScrollToTop {
|
|
3
3
|
shouldReloadReset?: boolean;
|
|
4
4
|
}
|
|
@@ -7,4 +7,4 @@ interface IScrollToTop {
|
|
|
7
7
|
* @constructor
|
|
8
8
|
*/
|
|
9
9
|
declare const ScrollToTop: FC<IScrollToTop>;
|
|
10
|
-
export
|
|
10
|
+
export default ScrollToTop;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useRef as r,useEffect as t}from"react";import{useLocation as o}from"react-router";const e=({shouldReloadReset:e=!1})=>{const{pathname:n}=o(),a=r(n);return t((
|
|
1
|
+
import{useRef as r,useEffect as t}from"react";import{useLocation as o}from"react-router";const e=({shouldReloadReset:e=!1})=>{const{pathname:n}=o(),a=r(n);return t(()=>{(e||a.current!==n)&&(a.current=n,window.scrollTo(0,0))},[n]),null};export{e as default};
|
|
2
2
|
//# sourceMappingURL=scroll-to-top.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-to-top.js","sources":["../../src/components/scroll-to-top.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"scroll-to-top.js","sources":["../../src/components/scroll-to-top.tsx"],"sourcesContent":[null],"names":["ScrollToTop","shouldReloadReset","pathname","useLocation","prev","useRef","useEffect","current","window","scrollTo"],"mappings":"yFAYA,MAAMA,EAAgC,EAAGC,qBAAoB,MAC3D,MAAMC,SAAEA,GAAaC,IACfC,EAAOC,EAAOH,GAWpB,OATAI,EAAU,MACHL,GAAqBG,EAAKG,UAAYL,KAI3CE,EAAKG,QAAUL,EACfM,OAAOC,SAAS,EAAG,KAClB,CAACP,IAEG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
|
-
import { FCAny, FCC } from
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
import type { FCAny, FCC } from '../interfaces/fc.js';
|
|
3
3
|
/**
|
|
4
4
|
* HOC: Wrap component in suspense
|
|
5
5
|
*/
|
|
6
6
|
declare const withSuspense: <T extends Record<string, any>>(Component: FCAny<T>, Suspense: FCC<Record<string, any>>) => FC<T>;
|
|
7
|
-
export
|
|
7
|
+
export default withSuspense;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-suspense.js","sources":["../../src/components/with-suspense.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"with-suspense.js","sources":["../../src/components/with-suspense.tsx"],"sourcesContent":[null],"names":["withSuspense","Component","Suspense","Element","props","React","createElement","hoistNonReactStatics"],"mappings":"4DAQA,MAAMA,EAAe,CACnBC,EACAC,KAEA,MAAMC,EAAkBC,GACtBC,EAAAC,cAACJ,EAAQ,KACPG,EAAAC,cAACL,EAAS,IAAKG,KAMnB,OAFAG,EAAqBJ,EAASF,GAEvBE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-actions.js","sources":["../../src/constants/cli-actions.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"cli-actions.js","sources":["../../src/constants/cli-actions.ts"],"sourcesContent":[null],"names":["CliActions","CliActions$1"],"mappings":"AAAA,IAAKA,GAAL,SAAKA,GACHA,EAAA,IAAA,MACAA,EAAA,MAAA,QACAA,EAAA,YAAA,eACAA,EAAA,aAAA,gBACAA,EAAA,YAAA,eACAA,EAAA,MAAA,QACAA,EAAA,QAAA,SACD,CARD,CAAKA,IAAAA,EAAU,CAAA,IAUf,IAAAC,EAAeD"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
interface ICliContext {
|
|
1
|
+
import type { Server } from 'node:net';
|
|
2
|
+
import type ServerConfig from '../services/server-config.js';
|
|
3
|
+
export interface ICliContext {
|
|
5
4
|
isProd?: boolean;
|
|
6
5
|
server?: Server;
|
|
7
6
|
config?: ServerConfig;
|
|
@@ -11,4 +10,4 @@ interface ICliContext {
|
|
|
11
10
|
* Share CLI context
|
|
12
11
|
*/
|
|
13
12
|
declare const cliContext: ICliContext;
|
|
14
|
-
export
|
|
13
|
+
export default cliContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-context.js","sources":["../../src/constants/cli-context.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"cli-context.js","sources":["../../src/constants/cli-context.ts"],"sourcesContent":[null],"names":["cliContext","isProd"],"mappings":"AAaA,MAAMA,EAA0B,CAC9BC,QAAQ"}
|
package/constants/cli-name.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
declare const _default: "ssr-boost";
|
|
2
|
-
export
|
|
2
|
+
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-name.js","sources":["../../src/constants/cli-name.ts"],"sourcesContent":[
|
|
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
|
|
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
|
|
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(
|
|
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":[
|
|
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"}
|
package/constants/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sources":["../../src/constants/common.ts"],"sourcesContent":[
|
|
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
|
|
2
|
+
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-name.js","sources":["../../src/constants/plugin-name.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"plugin-name.js","sources":["../../src/constants/plugin-name.ts"],"sourcesContent":[null],"names":["PLUGIN_NAME"],"mappings":"AAAA,IAAAA,EAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-error.js","sources":["../../src/constants/stream-error.ts"],"sourcesContent":[
|
|
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"}
|
package/context/server.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import type { FC, PropsWithChildren } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
|
|
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 {
|
|
21
|
+
export { ServerContext, ServerProvider, useServerContext };
|
package/context/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../src/context/server.tsx"],"sourcesContent":[
|
|
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"}
|
package/core/compose-html.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Stream the shell, React body and hydration footer under downstream backpressure.
|
|
3
3
|
*/
|
|
4
|
-
declare const composeHtml: (header: string, body: ReadableStream<Uint8Array>, footer: string, abort?: (
|
|
5
|
-
export
|
|
4
|
+
declare const composeHtml: (header: string, body: ReadableStream<Uint8Array>, footer: string, abort?: (reason?: unknown) => void, onComplete?: () => void) => ReadableStream<Uint8Array>;
|
|
5
|
+
export default composeHtml;
|
package/core/compose-html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-html.js","sources":["../../src/core/compose-html.ts"],"sourcesContent":[
|
|
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"}
|
package/core/early-hints.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ISsrExecutionContext } from
|
|
1
|
+
import type { ISsrExecutionContext } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Emit informational headers when the runtime supports early hints.
|
|
4
4
|
*/
|
|
5
5
|
declare const emitEarlyHints: (context: ISsrExecutionContext | undefined, headers: Headers) => Promise<void>;
|
|
6
|
-
export
|
|
6
|
+
export default emitEarlyHints;
|
package/core/early-hints.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"early-hints.js","sources":["../../src/core/early-hints.ts"],"sourcesContent":[
|
|
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"}
|
package/core/handler.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ICoreRenderOptions, ICoreRenderParams } from
|
|
2
|
-
import { ISsrExecutionContext, TSsrHandler } from
|
|
1
|
+
import type { ICoreRenderOptions, ICoreRenderParams } from './render.js';
|
|
2
|
+
import type { ISsrExecutionContext, TSsrHandler } from './types.js';
|
|
3
3
|
interface IHtmlShell {
|
|
4
4
|
footer: string;
|
|
5
5
|
header: string;
|
|
@@ -27,4 +27,4 @@ interface ICreateHandlerOptions<TAppProps> extends ICoreRenderOptions<TAppProps>
|
|
|
27
27
|
*/
|
|
28
28
|
declare const createHandler: <TAppProps = Record<string, any>>(params: ICoreRenderParams<TAppProps>, { getHtml, onRequest, ...options }: ICreateHandlerOptions<TAppProps>) => TSsrHandler;
|
|
29
29
|
export type { ICreateHandlerOptions, IHtmlShell, IRequestInit };
|
|
30
|
-
export
|
|
30
|
+
export default createHandler;
|
package/core/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sources":["../../src/core/handler.ts"],"sourcesContent":[
|
|
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"}
|
package/core/head-response.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"head-response.js","sources":["../../src/core/head-response.ts"],"sourcesContent":[
|
|
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"}
|
package/core/headers.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Enumerate ordinary headers without combining independent Set-Cookie values.
|
|
3
3
|
*/
|
|
4
|
-
declare const getHeaderEntries: (headers: Headers) => [string, string][];
|
|
4
|
+
export declare const getHeaderEntries: (headers: Headers) => [string, string][];
|
|
5
5
|
/**
|
|
6
6
|
* Read cookies without splitting commas inside Expires attributes.
|
|
7
7
|
*/
|
|
8
|
-
declare const getSetCookieHeaders: (headers: Headers) => string[];
|
|
8
|
+
export declare const getSetCookieHeaders: (headers: Headers) => string[];
|
|
9
9
|
/**
|
|
10
10
|
* Response headers override hook headers, while every Set-Cookie remains independent.
|
|
11
11
|
*/
|
|
12
|
-
declare const mergeResponseHeaders: (response: Response, base: Headers) => Response;
|
|
13
|
-
export { getHeaderEntries, getSetCookieHeaders, mergeResponseHeaders };
|
|
12
|
+
export declare const mergeResponseHeaders: (response: Response, base: Headers) => Response;
|
package/core/headers.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=e=>{const t=[];return e.forEach((
|
|
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
2
|
//# sourceMappingURL=headers.js.map
|
package/core/headers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sources":["../../src/core/headers.ts"],"sourcesContent":[
|
|
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"}
|
package/core/render.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { StaticHandler, StaticHandlerContext } from 'react-router';
|
|
3
|
-
import StreamError from
|
|
4
|
-
import { IServerContext } from
|
|
5
|
-
import { ISsrExecutionContext } from
|
|
6
|
-
import { IObtainStreamErrorOut } from
|
|
7
|
-
interface ISsrRequestContext<TAppProps = Record<string, any>> {
|
|
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
8
|
appProps: NonNullable<TAppProps>;
|
|
9
9
|
/**
|
|
10
10
|
* First render failure, or the explicit timeout/cancellation classification.
|
|
@@ -26,11 +26,11 @@ interface ISsrRequestContext<TAppProps = Record<string, any>> {
|
|
|
26
26
|
routerContext?: StaticHandlerContext;
|
|
27
27
|
serverContext?: IServerContext;
|
|
28
28
|
}
|
|
29
|
-
interface IRenderStreamOptions {
|
|
29
|
+
export interface IRenderStreamOptions {
|
|
30
30
|
onError: (error: unknown) => void;
|
|
31
31
|
signal: AbortSignal;
|
|
32
32
|
}
|
|
33
|
-
interface IRenderStream {
|
|
33
|
+
export interface IRenderStream {
|
|
34
34
|
/**
|
|
35
35
|
* Settles after all suspended content completes or rendering is aborted.
|
|
36
36
|
*/
|
|
@@ -49,13 +49,13 @@ interface IRenderStream {
|
|
|
49
49
|
start: () => void;
|
|
50
50
|
stream: ReadableStream<Uint8Array>;
|
|
51
51
|
}
|
|
52
|
-
type TRenderToStream = (node: ReactNode, options: IRenderStreamOptions) => IRenderStream | Promise<IRenderStream>;
|
|
53
|
-
interface ICoreRenderParams<TAppProps = Record<string, any>> {
|
|
52
|
+
export type TRenderToStream = (node: ReactNode, options: IRenderStreamOptions) => IRenderStream | Promise<IRenderStream>;
|
|
53
|
+
export interface ICoreRenderParams<TAppProps = Record<string, any>> {
|
|
54
54
|
createApp: (children: ReactNode, context: ISsrRequestContext<TAppProps>) => ReactNode;
|
|
55
55
|
handler: StaticHandler;
|
|
56
56
|
renderToStream: TRenderToStream;
|
|
57
57
|
}
|
|
58
|
-
interface ICoreRenderOptions<TAppProps = Record<string, any>> {
|
|
58
|
+
export interface ICoreRenderOptions<TAppProps = Record<string, any>> {
|
|
59
59
|
/**
|
|
60
60
|
* React rendering deadline in milliseconds, starting after router preparation.
|
|
61
61
|
*/
|
|
@@ -98,4 +98,4 @@ interface ICoreRenderOptions<TAppProps = Record<string, any>> {
|
|
|
98
98
|
* Coordinate router queries, React rendering and the final Fetch response.
|
|
99
99
|
*/
|
|
100
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
|
|
101
|
+
export default render;
|
package/core/render.js
CHANGED
|
@@ -1,2 +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((
|
|
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
2
|
//# sourceMappingURL=render.js.map
|
package/core/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sources":["../../src/core/render.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React from 'react';\nimport type { StaticHandler, StaticHandlerContext } from 'react-router';\nimport { createStaticRouter, StaticRouterProvider } from 'react-router';\nimport StreamError from '@constants/stream-error';\nimport { ServerProvider } from '@context/server';\nimport type { IServerContext } from '@context/server';\nimport composeHtml from '@core/compose-html';\nimport headResponse from '@core/head-response';\nimport { mergeResponseHeaders } from '@core/headers';\nimport transformHtml from '@core/transform-html';\nimport type { ISsrExecutionContext } from '@core/types';\nimport buildCustomState from '@helpers/build-custom-state';\nimport buildRouterState from '@helpers/build-router-state';\nimport type { IObtainStreamErrorOut } from '@helpers/obtain-stream-error';\nimport obtainStreamError from '@helpers/obtain-stream-error';\n\nexport interface ISsrRequestContext<TAppProps = Record<string, any>> {\n appProps: NonNullable<TAppProps>;\n\n /**\n * First render failure, or the explicit timeout/cancellation classification.\n */\n didError?: StreamError;\n html: { footer: string; header: string };\n isStream?: boolean;\n request: Request;\n\n /**\n * Mutable response metadata shared with request and render hooks.\n */\n response: {\n headers: Headers;\n status?: number;\n };\n routerContext?: StaticHandlerContext;\n serverContext?: IServerContext;\n}\n\nexport interface IRenderStreamOptions {\n onError: (error: unknown) => void;\n signal: AbortSignal;\n}\n\nexport interface IRenderStream {\n /**\n * Settles after all suspended content completes or rendering is aborted.\n */\n allReady: Promise<void>;\n\n /**\n * Stop rendering and settle pending readiness promises.\n */\n abort: (reason?: unknown) => void;\n\n /**\n * Settles when the first shell is available or cannot be produced.\n */\n shellReady: Promise<void>;\n\n /**\n * Begin piping after the core commits its response metadata.\n */\n start: () => void;\n stream: ReadableStream<Uint8Array>;\n}\n\nexport type TRenderToStream = (\n node: ReactNode,\n options: IRenderStreamOptions,\n) => IRenderStream | Promise<IRenderStream>;\n\nexport interface ICoreRenderParams<TAppProps = Record<string, any>> {\n createApp: (children: ReactNode, context: ISsrRequestContext<TAppProps>) => ReactNode;\n handler: StaticHandler;\n renderToStream: TRenderToStream;\n}\n\nexport interface ICoreRenderOptions<TAppProps = Record<string, any>> {\n /**\n * React rendering deadline in milliseconds, starting after router preparation.\n */\n abortDelay?: number;\n getState?: (params: {\n context: ISsrRequestContext<TAppProps>;\n }) => Record<string, Record<string, any>> | undefined | void;\n onError?: (params: {\n context: ISsrRequestContext<TAppProps>;\n error: IObtainStreamErrorOut;\n }) => void;\n onResponse?: (params: {\n context: ISsrRequestContext<TAppProps>;\n html: string;\n }) => string | undefined | void;\n onRouterReady?: (params: {\n context: ISsrRequestContext<TAppProps>;\n }) => Promise<{ isStream?: boolean }> | { isStream?: boolean };\n onShellError?: (params: {\n context: ISsrRequestContext<TAppProps>;\n error: Error;\n }) => string | undefined | void;\n onShellReady?: (params: { context: ISsrRequestContext<TAppProps> }) => {\n footer?: string;\n header?: string;\n };\n prepare?: (params: {\n context: ISsrRequestContext<TAppProps>;\n executionContext?: ISsrExecutionContext;\n }) => Promise<void> | void;\n routerRequestContext?: unknown;\n}\n\ninterface IHtmlResponse {\n header: string;\n footer: string;\n headers: Headers;\n status: number;\n}\n\nconst HTML_CONTENT_TYPE = 'text/html';\nconst CONTENT_TYPE = 'Content-Type';\n\n/**\n * Distinguish navigational redirects from bodyless statuses such as 304.\n */\nconst isRedirect = (response?: Response | null): boolean =>\n Boolean(\n response && response.status >= 300 && response.status < 400 && response.headers.has('Location'),\n );\n\n/**\n * Build a bodyless HEAD or generic 500 response when React cannot produce a shell.\n */\nconst createShellErrorResponse = <TAppProps,>(\n context: ISsrRequestContext<TAppProps>,\n error: unknown,\n onShellError: ICoreRenderOptions<TAppProps>['onShellError'],\n): Response => {\n const shellError = error instanceof Error ? error : new Error(String(error));\n const html =\n onShellError?.({ context, error: shellError }) || '<!doctype html><p>Internal Server Error</p>';\n const headers = new Headers(context.response.headers);\n\n headers.set(CONTENT_TYPE, HTML_CONTENT_TYPE);\n\n return new Response(context.request.method === 'HEAD' ? null : html, {\n headers,\n status: 500,\n });\n};\n\n/**\n * Prepare the document shell and let hooks finalize response metadata synchronously.\n */\nconst prepareHtmlResponse = <TAppProps,>(\n context: ISsrRequestContext<TAppProps>,\n { getState, onShellReady }: ICoreRenderOptions<TAppProps>,\n): IHtmlResponse => {\n const serverResponse = context.serverContext!.response;\n\n context.response.status =\n serverResponse?.status ?? context.response.status ?? context.routerContext!.statusCode ?? 200;\n\n if (!context.response.headers.has(CONTENT_TYPE)) {\n context.response.headers.set(CONTENT_TYPE, HTML_CONTENT_TYPE);\n }\n\n const shell = onShellReady?.({ context }) ?? {};\n const routerState = buildRouterState(context.routerContext!);\n const customState = buildCustomState(getState?.({ context }));\n const header = shell.header || context.html.header;\n const footer = routerState + customState + (shell.footer || context.html.footer);\n const headers = new Headers(context.response.headers);\n\n return { header, footer, headers, status: context.response.status };\n};\n\n/**\n * Coordinate router queries, React rendering and the final Fetch response.\n */\nconst render = async <TAppProps,>(\n { createApp, handler, renderToStream }: ICoreRenderParams<TAppProps>,\n context: ISsrRequestContext<TAppProps>,\n {\n abortDelay = 15_000,\n getState,\n onError,\n onResponse,\n onRouterReady,\n onShellError,\n onShellReady,\n prepare,\n routerRequestContext,\n }: ICoreRenderOptions<TAppProps>,\n executionContext?: ISsrExecutionContext,\n): Promise<Response> => {\n const queried = await handler.query(context.request, {\n requestContext: routerRequestContext ?? context,\n });\n\n if (queried instanceof Response) {\n return headResponse(context.request, mergeResponseHeaders(queried, context.response.headers));\n }\n\n context.routerContext = queried;\n\n await prepare?.({ context, executionContext });\n\n const { isStream = true } = (await onRouterReady?.({ context })) ?? {};\n\n context.isStream = isStream;\n context.serverContext = {\n basename: context.routerContext.basename,\n isServer: true,\n response: null,\n };\n\n const router = createStaticRouter(handler.dataRoutes, context.routerContext);\n const node = (\n <ServerProvider context={context.serverContext}>\n {createApp(\n <StaticRouterProvider router={router} context={context.routerContext} hydrate={false} />,\n context,\n )}\n </ServerProvider>\n );\n const renderController = new AbortController();\n let abortReason: unknown;\n\n /**\n * Assigned after abort is defined so an async renderer can be cancelled while it initializes.\n */\n let output: IRenderStream | undefined;\n let hasAborted = false;\n\n /**\n * Propagate the request cancellation reason into the renderer.\n */\n const onRequestAbort = (): void => abort(context.request.signal.reason);\n\n /**\n * Clear the deadline when React finishes or the response is cancelled.\n */\n const clearAbortTimer = (): void => clearTimeout(abortTimer);\n\n /**\n * Release the render deadline and request disconnect listener.\n */\n const cleanup = (): void => {\n clearAbortTimer();\n context.request.signal.removeEventListener('abort', onRequestAbort);\n };\n\n /**\n * Cancel rendering once while preserving the reason reported by lifecycle hooks.\n */\n const abort = (reason?: unknown): void => {\n if (hasAborted) {\n return;\n }\n\n hasAborted = true;\n abortReason = reason;\n cleanup();\n context.didError ??= StreamError.RenderCancel;\n renderController.abort(reason);\n output?.abort(reason);\n };\n\n /**\n * Apply the render deadline after routing and preparation finish.\n */\n const abortTimer = setTimeout(() => {\n context.didError = StreamError.RenderTimeout;\n abort();\n }, abortDelay);\n\n if (context.request.signal.aborted) {\n abort(context.request.signal.reason);\n } else {\n context.request.signal.addEventListener('abort', onRequestAbort, { once: true });\n }\n\n try {\n output = await renderToStream(node, {\n /**\n * Classify expected cancellation separately from unexpected React errors.\n */\n onError: (error) => {\n const streamError = obtainStreamError(error);\n\n if (\n hasAborted &&\n (streamError.code === StreamError.RenderAborted ||\n error === renderController.signal.reason)\n ) {\n streamError.code =\n context.didError === StreamError.RenderTimeout\n ? StreamError.RenderTimeout\n : StreamError.RenderCancel;\n }\n\n const { code } = streamError;\n\n context.didError ??= code;\n onError?.({ context, error: streamError });\n },\n signal: renderController.signal,\n });\n\n if (hasAborted) {\n output.abort(abortReason);\n }\n\n void output.allReady.then(clearAbortTimer, clearAbortTimer);\n\n await (isStream ? output.shellReady : output.allReady);\n } catch (error) {\n abort(error);\n await output?.stream.cancel(error).catch(() => undefined);\n\n return createShellErrorResponse(context, error, onShellError);\n }\n\n try {\n const serverResponse = context.serverContext.response;\n\n if (serverResponse && isRedirect(serverResponse)) {\n abort();\n await output.stream.cancel().catch(() => undefined);\n\n return headResponse(\n context.request,\n mergeResponseHeaders(serverResponse, context.response.headers),\n );\n }\n\n const { header, footer, headers, status } = prepareHtmlResponse(context, {\n getState,\n onShellReady,\n });\n\n if (context.request.method === 'HEAD' || [204, 205, 304].includes(status)) {\n abort();\n await output.stream.cancel().catch(() => undefined);\n\n return new Response(null, {\n headers,\n status,\n });\n }\n\n const body = composeHtml(header, output.stream, footer, abort, cleanup);\n const transformed = transformHtml(\n body,\n onResponse ? (html) => onResponse({ context, html }) : undefined,\n );\n\n output.start();\n\n return new Response(transformed, {\n headers,\n status,\n });\n } catch (error) {\n abort(error);\n\n if (!output.stream.locked) {\n await output.stream.cancel(error).catch(() => undefined);\n }\n\n throw error;\n }\n};\n\nexport default render;\n"],"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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"}
|
|
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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"}
|
package/core/transform-html.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ type TTransformHtml = (html: string) => string | undefined | void;
|
|
|
4
4
|
*/
|
|
5
5
|
declare const transformHtml: (stream: ReadableStream<Uint8Array>, transform?: TTransformHtml) => ReadableStream<Uint8Array>;
|
|
6
6
|
export type { TTransformHtml };
|
|
7
|
-
export
|
|
7
|
+
export default transformHtml;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-html.js","sources":["../../src/core/transform-html.ts"],"sourcesContent":[
|
|
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"}
|
package/core/types.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
interface ISsrExecutionContext {
|
|
1
|
+
export interface ISsrExecutionContext {
|
|
2
2
|
/**
|
|
3
3
|
* Deliver informational headers outside the final Fetch response when supported.
|
|
4
4
|
*/
|
|
5
5
|
onEarlyHints?: (headers: Headers) => Promise<void> | void;
|
|
6
6
|
}
|
|
7
|
-
type TSsrHandler = (request: Request, context?: ISsrExecutionContext) => Promise<Response>;
|
|
8
|
-
export { ISsrExecutionContext, TSsrHandler };
|
|
7
|
+
export type TSsrHandler = (request: Request, context?: ISsrExecutionContext) => Promise<Response>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TRenderToStream } from
|
|
1
|
+
import type { TRenderToStream } from '../core/render.js';
|
|
2
2
|
/**
|
|
3
3
|
* Adapt React Web streams and settle readiness even when initialization is aborted.
|
|
4
4
|
*/
|
|
5
5
|
declare const renderToStream: TRenderToStream;
|
|
6
|
-
export
|
|
6
|
+
export default renderToStream;
|
package/edge/render-to-stream.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as e from"react-dom/server";const r=async()=>e.renderToReadableStream??(await
|
|
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
2
|
//# sourceMappingURL=render-to-stream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-to-stream.js","sources":["../../src/edge/render-to-stream.ts"],"sourcesContent":[
|
|
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,2 +1,2 @@
|
|
|
1
|
-
import t from"./html-escape.js";function r(r){return Object.entries(r??{}).map((
|
|
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":[
|
|
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"}
|