@lomray/vite-ssr-boost 8.0.0-beta.1 → 8.0.0-beta.3
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 +1 -1
- 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/plugins/optimize-browser-dependencies.d.ts +6 -0
- package/plugins/optimize-browser-dependencies.js +2 -0
- package/plugins/optimize-browser-dependencies.js.map +1 -0
- 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
package/README.md
CHANGED
|
@@ -35,7 +35,8 @@ It is built for applications that want to keep Vite and React Router visible, bu
|
|
|
35
35
|
npm i @lomray/vite-ssr-boost
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
Requires Node 22.12+. Your React Router and Babel versions may require a newer Node release.
|
|
39
|
+
Start with the [React template](https://github.com/Lomray-Software/vite-template):
|
|
39
40
|
|
|
40
41
|
```bash
|
|
41
42
|
git clone https://github.com/Lomray-Software/vite-template.git
|
package/adapters/body.d.ts
CHANGED
package/adapters/body.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=(e,r="")=>{if(null==e)return null;if("string"==typeof e||e instanceof URLSearchParams||e instanceof Blob||e instanceof FormData||e instanceof ReadableStream||e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e;const n=r.split(";")[0]?.trim().toLowerCase();if("application/x-www-form-urlencoded"===n)return(e=>{const r=new URLSearchParams;return Object.entries(e).forEach((
|
|
1
|
+
const e=(e,r="")=>{if(null==e)return null;if("string"==typeof e||e instanceof URLSearchParams||e instanceof Blob||e instanceof FormData||e instanceof ReadableStream||e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e;const n=r.split(";")[0]?.trim().toLowerCase();if("application/x-www-form-urlencoded"===n)return(e=>{const r=new URLSearchParams;return Object.entries(e).forEach(([e,n])=>{(Array.isArray(n)?n:[n]).forEach(n=>{if(null!=n&&!["string","number","boolean","bigint"].includes(typeof n))throw new TypeError("Cannot serialize nested or non-primitive URL-encoded fields. Provide the adapter getBody option.");r.append(e,null==n?"":String(n))})}),r})(e);if(!n||"application/json"===n||n.endsWith("+json"))return JSON.stringify(e);throw new TypeError(`Cannot serialize a parsed ${n} body. Provide the adapter getBody option.`)};export{e as default};
|
|
2
2
|
//# sourceMappingURL=body.js.map
|
package/adapters/body.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body.js","sources":["../../src/adapters/body.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"body.js","sources":["../../src/adapters/body.ts"],"sourcesContent":[null],"names":["serializeBody","body","contentType","URLSearchParams","Blob","FormData","ReadableStream","ArrayBuffer","isView","mediaType","split","trim","toLowerCase","form","Object","entries","forEach","name","value","Array","isArray","item","includes","TypeError","append","String","serializeForm","endsWith","JSON","stringify"],"mappings":"AAGA,MAuBMA,EAAgB,CAACC,EAAeC,EAAc,MAClD,GAAY,MAARD,EACF,OAAO,KAGT,GACkB,iBAATA,GACPA,aAAgBE,iBAChBF,aAAgBG,MAChBH,aAAgBI,UAChBJ,aAAgBK,gBAChBL,aAAgBM,aAChBA,YAAYC,OAAOP,GAEnB,OAAOA,EAGT,MAAMQ,EAAYP,EAAYQ,MAAM,KAAK,IAAIC,OAAOC,cAEpD,GAAkB,sCAAdH,EACF,MA3CkB,CAACR,IACrB,MAAMY,EAAO,IAAIV,gBAgBjB,OAdAW,OAAOC,QAAQd,GAAMe,QAAQ,EAAEC,EAAMC,OACpBC,MAAMC,QAAQF,GAASA,EAAQ,CAACA,IAExCF,QAASK,IACd,GAAY,MAARA,IAAiB,CAAC,SAAU,SAAU,UAAW,UAAUC,gBAAgBD,GAC7E,MAAM,IAAIE,UACR,oGAIJV,EAAKW,OAAOP,EAAc,MAARI,EAAe,GAAKI,OAAOJ,QAI1CR,GA0BEa,CAAczB,GAGvB,IAAKQ,GAA2B,qBAAdA,GAAoCA,EAAUkB,SAAS,SACvE,OAAOC,KAAKC,UAAU5B,GAGxB,MAAM,IAAIsB,UACR,6BAA6Bd"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
type TCompressionFormat = 'deflate' | 'gzip';
|
|
2
|
-
interface ICompressionOptions {
|
|
1
|
+
export type TCompressionFormat = 'deflate' | 'gzip';
|
|
2
|
+
export interface ICompressionOptions {
|
|
3
3
|
format?: TCompressionFormat;
|
|
4
4
|
}
|
|
5
|
-
type TCompression = boolean | ICompressionOptions;
|
|
6
|
-
type TCreateCompressionStream = (format: TCompressionFormat) => ReadableWritablePair<Uint8Array,
|
|
5
|
+
export type TCompression = boolean | ICompressionOptions;
|
|
6
|
+
type TCreateCompressionStream = (format: TCompressionFormat) => ReadableWritablePair<Uint8Array, BufferSource>;
|
|
7
7
|
/**
|
|
8
8
|
* Compress eligible responses using the transport-provided stream implementation.
|
|
9
9
|
*/
|
|
10
10
|
declare const compressResponse: (request: Request, response: Response, compression?: TCompression, createStream?: TCreateCompressionStream) => Response;
|
|
11
|
-
export
|
|
11
|
+
export default compressResponse;
|
package/adapters/compression.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const t=(t,e)=>{const s=new Map;return t.split(",").forEach(
|
|
1
|
+
const t=(t,e)=>{const s=new Map;return t.split(",").forEach(t=>{const[e="",...a]=t.trim().toLowerCase().split(";"),n=a.find(t=>t.trim().startsWith("q=")),o=n?Number(n.split("=")[1]):1;s.set(e,Number.isFinite(o)?o:0)}),s.get(e)??s.get("*")??0},e=(e,s,a=!1,n=t=>new CompressionStream(t))=>{if(!a||!s.body||s.bodyUsed||"HEAD"===e.method||s.status<200||[204,205,206,304].includes(s.status)||s.headers.has("Content-Encoding")||s.headers.has("Content-Range")||s.headers.get("Cache-Control")?.toLowerCase().includes("no-transform")||"function"!=typeof CompressionStream)return s;const o=e.headers.get("Accept-Encoding")??"",r="object"==typeof a?a.format:void 0,i=new Headers(s.headers),d=(r?[r]:["gzip","deflate"]).map(e=>({candidate:e,quality:t(o,e)})).filter(({quality:t})=>t>0).sort((t,e)=>e.quality-t.quality)[0]?.candidate;return((t,e)=>{const s=t.get("Vary")?.split(",").map(t=>t.trim().toLowerCase())??[];s.includes("*")||s.includes(e.toLowerCase())||t.append("Vary",e)})(i,"Accept-Encoding"),d?(i.delete("Content-Length"),i.set("Content-Encoding",d),new Response(s.body.pipeThrough(n(d)),{headers:i,status:s.status,statusText:s.statusText})):new Response(s.body,{headers:i,status:s.status,statusText:s.statusText})};export{e as default};
|
|
2
2
|
//# sourceMappingURL=compression.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compression.js","sources":["../../src/adapters/compression.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"compression.js","sources":["../../src/adapters/compression.ts"],"sourcesContent":[null],"names":["getQuality","header","format","values","Map","split","forEach","part","encoding","params","trim","toLowerCase","quality","find","param","startsWith","parsed","Number","set","isFinite","get","compressResponse","request","response","compression","createStream","CompressionStream","body","bodyUsed","method","status","includes","headers","has","acceptEncoding","configured","undefined","Headers","map","candidate","filter","sort","left","right","value","vary","item","append","appendVary","delete","Response","pipeThrough","statusText"],"mappings":"AAeA,MAAMA,EAAa,CAACC,EAAgBC,KAClC,MAAMC,EAAS,IAAIC,IAUnB,OARAH,EAAOI,MAAM,KAAKC,QAASC,IACzB,MAAOC,EAAW,MAAOC,GAAUF,EAAKG,OAAOC,cAAcN,MAAM,KAC7DO,EAAUH,EAAOI,KAAMC,GAAUA,EAAMJ,OAAOK,WAAW,OACzDC,EAASJ,EAAUK,OAAOL,EAAQP,MAAM,KAAK,IAAM,EAEzDF,EAAOe,IAAIV,EAAUS,OAAOE,SAASH,GAAUA,EAAS,KAGnDb,EAAOiB,IAAIlB,IAAWC,EAAOiB,IAAI,MAAQ,GAqB5CC,EAAmB,CACvBC,EACAC,EACAC,GAA4B,EAC5BC,EAA0CvB,GAAW,IAAIwB,kBAAkBxB,MAE3E,IACGsB,IACAD,EAASI,MACVJ,EAASK,UACU,SAAnBN,EAAQO,QACRN,EAASO,OAAS,KAClB,CAAC,IAAK,IAAK,IAAK,KAAKC,SAASR,EAASO,SACvCP,EAASS,QAAQC,IAAI,qBACrBV,EAASS,QAAQC,IAAI,kBACrBV,EAASS,QAAQZ,IAAI,kBAAkBT,cAAcoB,SAAS,iBACjC,mBAAtBL,kBAEP,OAAOH,EAGT,MAAMW,EAAiBZ,EAAQU,QAAQZ,IAAI,oBAAsB,GAC3De,EAAoC,iBAAhBX,EAA2BA,EAAYtB,YAASkC,EACpEJ,EAAU,IAAIK,QAAQd,EAASS,SAC/B9B,GAAUiC,EAAa,CAACA,GAAe,CAAC,OAAQ,YACnDG,IAAKC,IAAS,CAAQA,YAAW3B,QAASZ,EAAWkC,EAAgBK,MACrEC,OAAO,EAAG5B,aAAcA,EAAU,GAClC6B,KAAK,CAACC,EAAMC,IAAUA,EAAM/B,QAAU8B,EAAK9B,SAAS,IAAI2B,UAI3D,MA9CiB,EAACP,EAAkBY,KACpC,MAAMC,EACJb,EACGZ,IAAI,SACHf,MAAM,KACPiC,IAAKQ,GAASA,EAAKpC,OAAOC,gBAAkB,GAE5CkC,EAAKd,SAAS,MAASc,EAAKd,SAASa,EAAMjC,gBAC9CqB,EAAQe,OAAO,OAAQH,IAoCzBI,CAAWhB,EAAS,mBAEf9B,GAQL8B,EAAQiB,OAAO,kBACfjB,EAAQd,IAAI,mBAAoBhB,GAEzB,IAAIgD,SAAS3B,EAASI,KAAKwB,YAAY1B,EAAavB,IAAU,CACnE8B,UACAF,OAAQP,EAASO,OACjBsB,WAAY7B,EAAS6B,cAbd,IAAIF,SAAS3B,EAASI,KAAM,CACjCK,UACAF,OAAQP,EAASO,OACjBsB,WAAY7B,EAAS6B"}
|
package/adapters/edge.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { TCompression } from
|
|
2
|
-
import { TSsrHandler } from
|
|
3
|
-
interface IEdgeAdapterOptions {
|
|
1
|
+
import type { TCompression } from './compression.js';
|
|
2
|
+
import type { TSsrHandler } from '../core/types.js';
|
|
3
|
+
export interface IEdgeAdapterOptions {
|
|
4
4
|
compression?: TCompression;
|
|
5
5
|
}
|
|
6
|
-
type TEdgeHandler<TPlatformArgs extends unknown[] = unknown[]> = (request: Request, ...platformArgs: TPlatformArgs) => Promise<Response>;
|
|
6
|
+
export type TEdgeHandler<TPlatformArgs extends unknown[] = unknown[]> = (request: Request, ...platformArgs: TPlatformArgs) => Promise<Response>;
|
|
7
7
|
/**
|
|
8
8
|
* Adapt the Fetch handler to runtime fetch entrypoints and optional compression.
|
|
9
9
|
*/
|
|
10
10
|
declare const adapterEdge: <TPlatformArgs extends unknown[] = unknown[]>(handler: TSsrHandler, { compression }?: IEdgeAdapterOptions) => TEdgeHandler<TPlatformArgs>;
|
|
11
|
-
export
|
|
11
|
+
export default adapterEdge;
|
package/adapters/edge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.js","sources":["../../src/adapters/edge.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"edge.js","sources":["../../src/adapters/edge.ts"],"sourcesContent":[null],"names":["adapterEdge","handler","compression","async","request","headResponse","compressResponse"],"mappings":"wEAiBA,MAAMA,EAAc,CAClBC,GACEC,eAAc,GAA+B,CAAA,IAKxCC,UAAWC,KACTC,EAAaD,EAASE,EAAiBF,QAAeH,EAAQG,GAAUF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Request as ExpressRequest } from 'express';
|
|
1
|
+
import type { Request as ExpressRequest } from 'express';
|
|
2
2
|
interface ICreateFetchRequestOptions {
|
|
3
3
|
body?: BodyInit | null;
|
|
4
4
|
signal?: AbortSignal;
|
|
@@ -8,4 +8,4 @@ interface ICreateFetchRequestOptions {
|
|
|
8
8
|
*/
|
|
9
9
|
declare function createFetchRequest(req: ExpressRequest, options?: ICreateFetchRequestOptions): Request;
|
|
10
10
|
export type { ICreateFetchRequestOptions };
|
|
11
|
-
export
|
|
11
|
+
export default createFetchRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-request.js","sources":["../../../src/adapters/express/create-request.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"create-request.js","sources":["../../../src/adapters/express/create-request.ts"],"sourcesContent":[null],"names":["createFetchRequest","req","options","requestOptions","origin","protocol","get","url","originalUrl","Object","hasOwn","undefined","body","method","serializeBody","createRequest"],"mappings":"sEAaA,SAASA,EACPC,EACAC,EAAsC,IAEtC,MAAMC,EAAwC,IACzCD,EACHE,OAAQ,GAAGH,EAAII,cAAcJ,EAAIK,IAAI,UACrCC,IAAKN,EAAIO,aAAeP,EAAIM,KAY9B,OARGE,OAAOC,OAAOR,EAAS,cACXS,IAAbV,EAAIW,MACW,QAAfX,EAAIY,QACW,SAAfZ,EAAIY,SAEJV,EAAeS,KAAOE,EAAcb,EAAIW,KAAMX,EAAIK,IAAI,kBAGjDS,EAAcd,EAAKE,EAC5B"}
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { Response as ExpressResponse } from "express";
|
|
6
|
-
import { FC, PropsWithChildren } from 'react';
|
|
1
|
+
import type { Server } from 'node:net';
|
|
2
|
+
import type { CompressionOptions } from 'compression';
|
|
3
|
+
import type { Express, Request, Response as ExpressResponse } from 'express';
|
|
4
|
+
import type { FC, PropsWithChildren } from 'react';
|
|
7
5
|
import { createStaticHandler } from 'react-router';
|
|
8
|
-
import { ServeStaticOptions } from 'serve-static';
|
|
9
|
-
import { Logger } from 'vite';
|
|
10
|
-
import { IRenderOptions, TRender } from
|
|
11
|
-
import { TRouteObject } from
|
|
12
|
-
import ServerApi from
|
|
13
|
-
import ServerConfig from
|
|
14
|
-
interface IInitServerRequestOut<T = Record<string, any>> {
|
|
6
|
+
import type { ServeStaticOptions } from 'serve-static';
|
|
7
|
+
import type { Logger } from 'vite';
|
|
8
|
+
import type { IRenderOptions, TRender } from './render.js';
|
|
9
|
+
import type { TRouteObject } from '../../interfaces/route-object.js';
|
|
10
|
+
import type ServerApi from '../../services/server-api.js';
|
|
11
|
+
import type ServerConfig from '../../services/server-config.js';
|
|
12
|
+
export interface IInitServerRequestOut<T = Record<string, any>> {
|
|
15
13
|
appProps?: T;
|
|
16
14
|
hasEarlyHints?: boolean;
|
|
17
15
|
shouldSkip?: boolean;
|
|
18
16
|
shouldCancel?: boolean;
|
|
19
17
|
}
|
|
20
|
-
interface IEntrypointOptions<TAppProps = Record<string, any>> extends Pick<IRenderOptions<TAppProps>, 'onRouterReady' | 'onShellReady' | 'onShellError' | 'onResponse' | 'onError' | 'getState' | 'getBody'> {
|
|
18
|
+
export interface IEntrypointOptions<TAppProps = Record<string, any>> extends Pick<IRenderOptions<TAppProps>, 'onRouterReady' | 'onShellReady' | 'onShellError' | 'onResponse' | 'onError' | 'getState' | 'getBody'> {
|
|
21
19
|
onServerCreated?: (app: Express, serverApi: ServerApi) => Promise<void> | void;
|
|
22
20
|
onServerStarted?: (app: Express, serverApi: ServerApi, server: Server) => Promise<void> | void;
|
|
23
21
|
onRequest?: (req: Request, res: ExpressResponse) => Promise<IInitServerRequestOut<TAppProps>> | IInitServerRequestOut<TAppProps>;
|
|
24
22
|
}
|
|
25
|
-
interface IPrepareRenderOut<TAppProps = Record<string, any>> {
|
|
23
|
+
export interface IPrepareRenderOut<TAppProps = Record<string, any>> {
|
|
26
24
|
render: TRender;
|
|
27
25
|
init: IEntryServerOptions<TAppProps>['init'];
|
|
28
26
|
routes: TRouteObject[];
|
|
@@ -39,11 +37,11 @@ interface IPrepareRenderOut<TAppProps = Record<string, any>> {
|
|
|
39
37
|
}) | false;
|
|
40
38
|
};
|
|
41
39
|
}
|
|
42
|
-
interface IAppServerProps<T = Record<string, any>> {
|
|
40
|
+
export interface IAppServerProps<T = Record<string, any>> {
|
|
43
41
|
server: T;
|
|
44
42
|
}
|
|
45
|
-
type TApp<T> = FC<PropsWithChildren<Record<string, any> & IAppServerProps<T>>>;
|
|
46
|
-
interface IEntryServerOptions<TAppProps = Record<string, any>> extends Pick<IPrepareRenderOut, 'loggerProd' | 'loggerDev' | 'middlewares'> {
|
|
43
|
+
export type TApp<T> = FC<PropsWithChildren<Record<string, any> & IAppServerProps<T>>>;
|
|
44
|
+
export interface IEntryServerOptions<TAppProps = Record<string, any>> extends Pick<IPrepareRenderOut, 'loggerProd' | 'loggerDev' | 'middlewares'> {
|
|
47
45
|
abortDelay?: number;
|
|
48
46
|
init?: (params: {
|
|
49
47
|
config: ServerConfig;
|
|
@@ -54,4 +52,4 @@ interface IEntryServerOptions<TAppProps = Record<string, any>> extends Pick<IPre
|
|
|
54
52
|
* Render server side application
|
|
55
53
|
*/
|
|
56
54
|
declare function entry<TAppProps>(App: TApp<TAppProps>, routes: TRouteObject[], { init, routerOptions, ...rest }?: IEntryServerOptions<TAppProps>): IPrepareRenderOut<TAppProps>;
|
|
57
|
-
export
|
|
55
|
+
export default entry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.js","sources":["../../../src/adapters/express/entry.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"entry.js","sources":["../../../src/adapters/express/entry.tsx"],"sourcesContent":[null],"names":["entry","App","routes","init","routerOptions","rest","handler","createStaticHandler","render","bind"],"mappings":"8EA4EA,SAASA,EACPC,EACAC,GACAC,KAAEA,EAAIC,cAAEA,KAAkBC,GAAyC,IAEnE,MAAMC,EAAUC,EAAoBL,EAAyBE,GAE7D,MAAO,CACLI,OAAQA,EAAOC,KAAK,KAAM,CAAEH,UAASL,QACrCE,OACAD,YACGG,EAEP"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Request } from 'express';
|
|
2
|
-
import { IEntrypointOptions, IPrepareRenderOut } from
|
|
3
|
-
import { TRender } from
|
|
4
|
-
import { TRouteObject } from
|
|
5
|
-
import ServerApi from
|
|
6
|
-
import ServerConfig from
|
|
1
|
+
import type { Request } from 'express';
|
|
2
|
+
import type { IEntrypointOptions, IPrepareRenderOut } from './entry.js';
|
|
3
|
+
import type { TRender } from './render.js';
|
|
4
|
+
import type { TRouteObject } from '../../interfaces/route-object.js';
|
|
5
|
+
import ServerApi from '../../services/server-api.js';
|
|
6
|
+
import type ServerConfig from '../../services/server-config.js';
|
|
7
7
|
interface IPrepareServerEntrypointLoadOut<TAppProps = Record<string, any>> extends Omit<IEntrypointOptions<TAppProps>, 'onServerCreated' | 'onServerStarted'> {
|
|
8
8
|
render: TRender;
|
|
9
9
|
routes: TRouteObject[];
|
|
@@ -42,47 +42,29 @@ declare class PrepareServer {
|
|
|
42
42
|
* Middlewares configs
|
|
43
43
|
*/
|
|
44
44
|
protected middlewaresConfigs?: NonNullable<IPrepareRenderOut['middlewares']>;
|
|
45
|
-
/**
|
|
46
|
-
* Retain runtime configuration and reuse the existing server API.
|
|
47
|
-
*/
|
|
48
45
|
/**
|
|
49
46
|
* Retain runtime configuration and reuse the existing server API.
|
|
50
47
|
*/
|
|
51
48
|
protected constructor(config: ServerConfig, serverApi?: ServerApi);
|
|
52
|
-
/**
|
|
53
|
-
* Init service
|
|
54
|
-
*/
|
|
55
49
|
/**
|
|
56
50
|
* Init service
|
|
57
51
|
*/
|
|
58
52
|
static init(config: ServerConfig, serverApi?: ServerApi): PrepareServer;
|
|
59
|
-
/**
|
|
60
|
-
* Resolve and return entrypoint params
|
|
61
|
-
*/
|
|
62
53
|
/**
|
|
63
54
|
* Resolve and return entrypoint params
|
|
64
55
|
*/
|
|
65
56
|
loadEntrypoint(shouldInit?: boolean): Promise<IPrepareServerEntrypointLoadOut>;
|
|
66
|
-
/**
|
|
67
|
-
* Load and return html shell
|
|
68
|
-
*/
|
|
69
57
|
/**
|
|
70
58
|
* Load and return html shell
|
|
71
59
|
*/
|
|
72
60
|
loadHtml(req: Request): Promise<[string, string]>;
|
|
73
|
-
/**
|
|
74
|
-
* Run server created hook
|
|
75
|
-
*/
|
|
76
61
|
/**
|
|
77
62
|
* Run server created hook
|
|
78
63
|
*/
|
|
79
64
|
onAppCreated(): Promise<PrepareServer>;
|
|
80
|
-
/**
|
|
81
|
-
* Return SSR express middlewares configs
|
|
82
|
-
*/
|
|
83
65
|
/**
|
|
84
66
|
* Return SSR express middlewares configs
|
|
85
67
|
*/
|
|
86
68
|
getMiddlewaresConfig(): NonNullable<PrepareServer['middlewaresConfigs']>;
|
|
87
69
|
}
|
|
88
|
-
export
|
|
70
|
+
export default PrepareServer;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import r from"node:process";import{pathToFileURL as i}from"node:url";import o from"chalk";import s from"../../services/server-api.js";class n{onServerStarted;config;serverApi;entrypoint;onServerCreated;html;middlewaresConfigs;constructor(e,t){this.config=e,this.serverApi=t??new s}static init(e,t){return new n(e,t)}async loadEntrypoint(e=!0){if(this.entrypoint&&this.config.isProd)return this.entrypoint;const{root:s,isProd:n,serverFile:a}=this.config.getParams(),l=t.resolve(`${s}/${a}`);let d;try{d=n?(await
|
|
1
|
+
import e from"node:fs";import t from"node:path";import r from"node:process";import{pathToFileURL as i}from"node:url";import o from"chalk";import s from"../../services/server-api.js";class n{onServerStarted;config;serverApi;entrypoint;onServerCreated;html;middlewaresConfigs;constructor(e,t){this.config=e,this.serverApi=t??new s}static init(e,t){return new n(e,t)}async loadEntrypoint(e=!0){if(this.entrypoint&&this.config.isProd)return this.entrypoint;const{root:s,isProd:n,serverFile:a}=this.config.getParams(),l=t.resolve(`${s}/${a}`);let d;try{d=n?(await(import(i(l).toString()))).default:(await this.config.getVite().ssrLoadModule(l,{fixStacktrace:!0})).default}catch(e){if(e instanceof Error&&e.message.includes("Cannot find module")&&e.message.includes("/build/"))return this.config.getLogger().error(o.red(`Before starting the server, you need to create a build: ${o.yellow("ssr-boost build")} or provide path to build dir: ${o.yellow("ssr-boost start --build-dir build")}`)),r.exit(1);throw e}!e&&d.init&&delete d.init;const{render:c,init:g,routes:h,abortDelay:f,loggerProd:p,loggerDev:m,middlewares:u}=d;this.middlewaresConfigs=u,p&&n?this.config.setLogger(p):m&&!n&&this.config.setLogger(m);const{onServerCreated:y,onServerStarted:v,...w}=await(g?.({config:this.config}))??{};return this.entrypoint={render:c,routes:h,abortDelay:f,...w},this.onServerCreated=y,this.onServerStarted=v,this.entrypoint}async loadHtml(r){const{isProd:i,root:o,indexFile:s,clientFile:n}=this.config.getParams();this.html&&i||(this.html=e.readFileSync(t.resolve(`${o}/${s}`),"utf-8"));let a=this.html;if(!i){const e=t.posix.normalize(`${this.config.getVite()?.config.base}/${n}`);a=(await this.config.getVite().transformIndexHtml(r.originalUrl,this.html,s)).replace(new RegExp(String.raw`<script[^>]*?\bsrc=["']/?${e}([^"']*)["'][^>]*?\sasync\b`,"g"),e=>e.replace(/\sasync\b/,""))}return a.split("\x3c!--ssr-outlet--\x3e")}async onAppCreated(){return await this.loadEntrypoint(),await(this.onServerCreated?.(this.config.getApp(),this.serverApi)),this}getMiddlewaresConfig(){const{compression:e,expressStatic:t}=this.middlewaresConfigs??{};return{compression:!1!==e&&{...e},expressStatic:!1!==t&&{...t,basename:t?.basename??"/"}}}}export{n as default};
|
|
2
2
|
//# sourceMappingURL=prepare-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-server.js","sources":["../../../src/adapters/express/prepare-server.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"prepare-server.js","sources":["../../../src/adapters/express/prepare-server.ts"],"sourcesContent":[null],"names":["PrepareServer","onServerStarted","config","serverApi","entrypoint","onServerCreated","html","middlewaresConfigs","constructor","this","ServerApi","init","loadEntrypoint","shouldInit","isProd","root","serverFile","getParams","entrypointPath","path","resolve","resolvedEntrypoint","pathToFileURL","toString","default","getVite","ssrLoadModule","fixStacktrace","e","Error","message","includes","getLogger","error","chalk","red","yellow","process","exit","render","routes","abortDelay","loggerProd","loggerDev","middlewares","setLogger","renderParams","loadHtml","req","indexFile","clientFile","fs","readFileSync","modifiedHtml","clientFileEntry","posix","normalize","base","transformIndexHtml","originalUrl","replace","RegExp","String","raw","match","split","onAppCreated","getApp","getMiddlewaresConfig","compression","expressStatic","basename"],"mappings":"sLAyBA,MAAMA,EAIGC,gBAKYC,OAKAC,UAKTC,WAKAC,gBAKAC,KAKAC,mBAKV,WAAAC,CAAsBN,EAAsBC,GAC1CM,KAAKP,OAASA,EACdO,KAAKN,UAAYA,GAAa,IAAIO,CACpC,CAKO,WAAOC,CAAKT,EAAsBC,GACvC,OAAO,IAAIH,EAAcE,EAAQC,EACnC,CAKO,oBAAMS,CAAeC,GAAa,GAIvC,GAAIJ,KAAKL,YAAcK,KAAKP,OAAOY,OACjC,OAAOL,KAAKL,WAGd,MAAMW,KAAEA,EAAID,OAAEA,EAAME,WAAEA,GAAeP,KAAKP,OAAOe,YAC3CC,EAAiBC,EAAKC,QAAQ,GAAGL,KAAQC,KAE/C,IAAIK,EAEJ,IAQIA,EAPGP,gBAQaQ,EAAcJ,GAAgBK,cAC5CC,eAPMf,KAAKP,OAAOuB,UAAWC,cAAcR,EAAgB,CACzDS,eAAe,KAEjBH,OAMN,CAAE,MAAOI,GACP,GACEA,aAAaC,OACbD,EAAEE,QAAQC,SAAS,uBACnBH,EAAEE,QAAQC,SAAS,WAcnB,OAZAtB,KAAKP,OACF8B,YACAC,MACCC,EAAMC,IACJ,2DAA2DD,EAAME,OAC/D,oDACiCF,EAAME,OACvC,yCAKDC,EAAQC,KAAK,GAGtB,MAAMV,CACR,EAEKf,GAAcQ,EAAmBV,aAC7BU,EAAmBV,KAG5B,MAAM4B,OAAEA,EAAM5B,KAAEA,EAAI6B,OAAEA,EAAMC,WAAEA,EAAUC,WAAEA,EAAUC,UAAEA,EAASC,YAAEA,GAC/DvB,EAEFZ,KAAKF,mBAAqBqC,EAEtBF,GAAc5B,EAChBL,KAAKP,OAAO2C,UAAUH,GACbC,IAAc7B,GACvBL,KAAKP,OAAO2C,UAAUF,GAGxB,MAAMtC,gBAAEA,EAAeJ,gBAAEA,KAAoB6C,SACpCnC,IAAO,CACZT,OAAQO,KAAKP,WACR,CAAA,EAWT,OATAO,KAAKL,WAAa,CAChBmC,SACAC,SACAC,gBACGK,GAELrC,KAAKJ,gBAAkBA,EACvBI,KAAKR,gBAAkBA,EAEhBQ,KAAKL,UACd,CAKO,cAAM2C,CAASC,GACpB,MAAMlC,OAAEA,EAAMC,KAAEA,EAAIkC,UAAEA,EAASC,WAAEA,GAAezC,KAAKP,OAAOe,YAEvDR,KAAKH,MAASQ,IACjBL,KAAKH,KAAO6C,EAAGC,aAAajC,EAAKC,QAAQ,GAAGL,KAAQkC,KAAc,UAGpE,IAAII,EAAe5C,KAAKH,KAExB,IAAKQ,EAAQ,CACX,MAAMwC,EAAkBnC,EAAKoC,MAAMC,UACjC,GAAG/C,KAAKP,OAAOuB,WAAWvB,OAAOuD,QAAQP,KAM3CG,SACQ5C,KAAKP,OAAOuB,UAAWiC,mBAAmBV,EAAIW,YAAalD,KAAKH,KAAM2C,IAC5EW,QACA,IAAIC,OACFC,OAAOC,GAAG,4BAA4BT,+BACtC,KAEDU,GAAUA,EAAMJ,QAAQ,YAAa,IAE1C,CAEA,OAAOP,EAAaY,MAAM,0BAC5B,CAKO,kBAAMC,GAIX,aAHMzD,KAAKG,uBACLH,KAAKJ,kBAAkBI,KAAKP,OAAOiE,SAAoB1D,KAAKN,YAE3DM,IACT,CAKO,oBAAA2D,GACL,MAAMC,YAAEA,EAAWC,cAAEA,GAAkB7D,KAAKF,oBAAsB,CAAA,EAElE,MAAO,CACL8D,aACkB,IAAhBA,GACI,IACKA,GAGXC,eACoB,IAAlBA,GACI,IACKA,EACHC,SAAUD,GAAeC,UAAY,KAIjD"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { Request as ExpressRequest } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
interface IRequestContext<TAppProps = Record<any, any>> {
|
|
1
|
+
import type { Request as ExpressRequest, Response as ExpressResponse } from 'express';
|
|
2
|
+
import type { StaticHandlerContext, StaticHandler } from 'react-router';
|
|
3
|
+
import type { TApp } from './entry.js';
|
|
4
|
+
import StreamError from '../../constants/stream-error.js';
|
|
5
|
+
import type { IServerContext } from '../../context/server.js';
|
|
6
|
+
import type { IObtainStreamErrorOut } from '../../helpers/obtain-stream-error.js';
|
|
7
|
+
import type ServerConfig from '../../services/server-config.js';
|
|
8
|
+
export interface IRequestContext<TAppProps = Record<any, any>> {
|
|
10
9
|
req: ExpressRequest;
|
|
11
10
|
res: ExpressResponse;
|
|
12
11
|
appProps: NonNullable<TAppProps>;
|
|
@@ -20,12 +19,12 @@ interface IRequestContext<TAppProps = Record<any, any>> {
|
|
|
20
19
|
hasEarlyHints?: boolean;
|
|
21
20
|
didError?: StreamError;
|
|
22
21
|
}
|
|
23
|
-
type TRender<TAppProps = Record<any, any>> = (config: ServerConfig, context: IRequestContext<TAppProps>, options: IRenderOptions) => Promise<void>;
|
|
24
|
-
interface IRenderParams<TAppProps = Record<string, any>> {
|
|
22
|
+
export type TRender<TAppProps = Record<any, any>> = (config: ServerConfig, context: IRequestContext<TAppProps>, options: IRenderOptions) => Promise<void>;
|
|
23
|
+
export interface IRenderParams<TAppProps = Record<string, any>> {
|
|
25
24
|
App: TApp<TAppProps>;
|
|
26
25
|
handler: StaticHandler;
|
|
27
26
|
}
|
|
28
|
-
interface IRenderOptions<TAppProps = Record<string, any>> {
|
|
27
|
+
export interface IRenderOptions<TAppProps = Record<string, any>> {
|
|
29
28
|
abortDelay?: number;
|
|
30
29
|
getBody?: (request: ExpressRequest) => BodyInit | null | undefined;
|
|
31
30
|
onRouterReady?: (params: {
|
|
@@ -50,10 +49,10 @@ interface IRenderOptions<TAppProps = Record<string, any>> {
|
|
|
50
49
|
context: IRequestContext<TAppProps>;
|
|
51
50
|
}) => Record<string, Record<string, any>> | undefined | void;
|
|
52
51
|
}
|
|
53
|
-
interface IRouterReadyOut {
|
|
52
|
+
export interface IRouterReadyOut {
|
|
54
53
|
isStream?: boolean;
|
|
55
54
|
}
|
|
56
|
-
interface IShellReadyOut {
|
|
55
|
+
export interface IShellReadyOut {
|
|
57
56
|
header?: string;
|
|
58
57
|
footer?: string;
|
|
59
58
|
}
|
|
@@ -61,4 +60,4 @@ interface IShellReadyOut {
|
|
|
61
60
|
* Render application
|
|
62
61
|
*/
|
|
63
62
|
declare function render({ App, handler }: IRenderParams, config: ServerConfig, context: IRequestContext, { onRouterReady, onShellReady, onResponse, onShellError, onError, getBody, getState, abortDelay, }: IRenderOptions): Promise<void>;
|
|
64
|
-
export
|
|
63
|
+
export default render;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"chalk";import r from"react";import t from"./create-request.js";import o from"../../constants/stream-error.js";import s from"../../core/early-hints.js";import{getHeaderEntries as n,getSetCookieHeaders as a}from"../../core/headers.js";import i from"../../core/render.js";import d from"../../node/render-to-stream.js";import c from"../../node/request-signal.js";import m from"../../node/write-early-hints.js";import p,{writeFetchHeaders as l}from"../../node/write-fetch-response.js";import h from"../../services/ssr-manifest.js";const f=(e,r,o)=>{const s={signal:r};return o&&"GET"!==e.method&&"HEAD"!==e.method&&(s.body=o(e)??null),t(e,s)};async function u({App:t,handler:u},x,y,{onRouterReady:g,onShellReady:S,onResponse:E,onShellError:w,onError:C,getBody:j,getState:v,abortDelay:R=15e3}){const{appProps:b,html:A,req:H,res:q}=y,k=x.getLogger(),D=c(H,q);try{const c={appProps:b,html:A,request:f(H,D.signal,j),response:{headers:new Headers}},L=e=>(y.didError=e.didError,y.html=e.html,y.isStream=e.isStream,y.routerContext=e.routerContext,y.serverContext=e.serverContext,y),P=await i({createApp:(e,o)=>r.createElement(t,{server:{...o.appProps,req:H}},e),handler:u,renderToStream:d},c,{abortDelay:R,getState:v?({context:e})=>v({context:L(e)}):void 0,onError:({context:r,error:t})=>{const{code:s,message:n}=t;if(C?.({context:L(r),error:t}),k.info(e.red(`Stream error. Code: ${s}`)),[o.RenderAborted,o.RenderTimeout,o.RenderCancel].includes(s))return void k.info(e.dim(n));const{original:a}=t;k.error(a)},onResponse:E?({context:e,html:r})=>E({context:L(e),html:r}):void 0,onRouterReady:g?({context:e})=>g({context:L(e)}):void 0,onShellError:w?({context:e,error:r})=>w({context:L(e),error:r}):void 0,onShellReady:({context:e})=>{const r=L(e);((e,r)=>{if(r.headersSent||r.writableEnded)return;r.status(e.response.status??200),n(e.response.headers).forEach((
|
|
1
|
+
import e from"chalk";import r from"react";import t from"./create-request.js";import o from"../../constants/stream-error.js";import s from"../../core/early-hints.js";import{getHeaderEntries as n,getSetCookieHeaders as a}from"../../core/headers.js";import i from"../../core/render.js";import d from"../../node/render-to-stream.js";import c from"../../node/request-signal.js";import m from"../../node/write-early-hints.js";import p,{writeFetchHeaders as l}from"../../node/write-fetch-response.js";import h from"../../services/ssr-manifest.js";const f=(e,r,o)=>{const s={signal:r};return o&&"GET"!==e.method&&"HEAD"!==e.method&&(s.body=o(e)??null),t(e,s)};async function u({App:t,handler:u},x,y,{onRouterReady:g,onShellReady:S,onResponse:E,onShellError:w,onError:C,getBody:j,getState:v,abortDelay:R=15e3}){const{appProps:b,html:A,req:H,res:q}=y,k=x.getLogger(),D=c(H,q);try{const c={appProps:b,html:A,request:f(H,D.signal,j),response:{headers:new Headers}},L=e=>(y.didError=e.didError,y.html=e.html,y.isStream=e.isStream,y.routerContext=e.routerContext,y.serverContext=e.serverContext,y),P=await i({createApp:(e,o)=>r.createElement(t,{server:{...o.appProps,req:H}},e),handler:u,renderToStream:d},c,{abortDelay:R,getState:v?({context:e})=>v({context:L(e)}):void 0,onError:({context:r,error:t})=>{const{code:s,message:n}=t;if(C?.({context:L(r),error:t}),k.info(e.red(`Stream error. Code: ${s}`)),[o.RenderAborted,o.RenderTimeout,o.RenderCancel].includes(s))return void k.info(e.dim(n));const{original:a}=t;k.error(a)},onResponse:E?({context:e,html:r})=>E({context:L(e),html:r}):void 0,onRouterReady:g?({context:e})=>g({context:L(e)}):void 0,onShellError:w?({context:e,error:r})=>w({context:L(e),error:r}):void 0,onShellReady:({context:e})=>{const r=L(e);((e,r)=>{if(r.headersSent||r.writableEnded)return;r.status(e.response.status??200),n(e.response.headers).forEach(([e,t])=>r.setHeader(e,t));const t=a(e.response.headers);t.length&&r.setHeader("Set-Cookie",t)})(e,q);const t=S?.({context:r});return((e,r)=>{const t=new Headers(e.response.headers);t.delete("Set-Cookie");for(const[e,o]of Object.entries(r.getHeaders()))if("set-cookie"!==e.toLowerCase()&&void 0!==o)if(Array.isArray(o))for(const r of o)t.append(e,r);else t.set(e,"number"==typeof o?String(o):o);e.response.headers=t,e.response.status=r.statusCode})(e,q),t??{}},prepare:async({context:e,executionContext:r})=>{const t=L(e),o=h.get(x);await o.prepareDevAssets(e.routerContext?.matches);const n=o.injectAssets(t);t.hasEarlyHints&&await s(r,n)},routerRequestContext:y},{onEarlyHints:e=>m(q,e)});L(c),await(async(e,r)=>{const t=r.headers.get("Location");if(t&&r.status>=300&&r.status<400&&!e.headersSent&&!e.writableEnded&&!e.destroyed)return l(e,r),await(r.body?.cancel()),void e.redirect(r.status,t);await p(e,r)})(q,P)}finally{D.dispose()}}export{u as default};
|
|
2
2
|
//# sourceMappingURL=render.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sources":["../../../src/adapters/express/render.tsx"],"sourcesContent":["import chalk from 'chalk';\nimport type { Request as ExpressRequest, Response as ExpressResponse } from 'express';\nimport React from 'react';\nimport type { StaticHandlerContext, StaticHandler } from 'react-router';\nimport createFetchRequest from '@adapters/express/create-request';\nimport type { TApp } from '@adapters/express/entry';\nimport StreamError from '@constants/stream-error';\nimport type { IServerContext } from '@context/server';\nimport emitEarlyHints from '@core/early-hints';\nimport { getHeaderEntries, getSetCookieHeaders } from '@core/headers';\nimport coreRender from '@core/render';\nimport type { ISsrRequestContext } from '@core/render';\nimport type { IObtainStreamErrorOut } from '@helpers/obtain-stream-error';\nimport renderToStream from '@node/render-to-stream';\nimport createRequestSignal from '@node/request-signal';\nimport writeEarlyHints from '@node/write-early-hints';\nimport writeFetchResponse, { writeFetchHeaders } from '@node/write-fetch-response';\nimport type ServerConfig from '@services/server-config';\nimport SsrManifest from '@services/ssr-manifest';\n\nexport interface IRequestContext<TAppProps = Record<any, any>> {\n req: ExpressRequest;\n res: ExpressResponse;\n appProps: NonNullable<TAppProps>;\n html: { header: string; footer: string };\n routerContext?: StaticHandlerContext;\n serverContext?: IServerContext;\n isStream?: boolean;\n hasEarlyHints?: boolean;\n didError?: StreamError;\n}\n\nexport type TRender<TAppProps = Record<any, any>> = (\n config: ServerConfig,\n context: IRequestContext<TAppProps>,\n options: IRenderOptions,\n) => Promise<void>;\n\nexport interface IRenderParams<TAppProps = Record<string, any>> {\n App: TApp<TAppProps>;\n handler: StaticHandler;\n}\n\nexport interface IRenderOptions<TAppProps = Record<string, any>> {\n abortDelay?: number;\n getBody?: (request: ExpressRequest) => BodyInit | null | undefined;\n onRouterReady?: (params: {\n context: IRequestContext<TAppProps>;\n }) => Promise<IRouterReadyOut> | IRouterReadyOut;\n onShellReady?: (params: { context: IRequestContext<TAppProps> }) => IShellReadyOut;\n onShellError?: (params: {\n context: IRequestContext<TAppProps>;\n error: Error;\n }) => string | undefined | void;\n onError?: (params: { context: IRequestContext<TAppProps>; error: IObtainStreamErrorOut }) => void;\n onResponse?: (params: {\n context: IRequestContext<TAppProps>;\n html: string;\n }) => string | undefined | void;\n getState?: (params: {\n context: IRequestContext<TAppProps>;\n }) => Record<string, Record<string, any>> | undefined | void;\n}\n\nexport interface IRouterReadyOut {\n isStream?: boolean;\n}\n\nexport interface IShellReadyOut {\n header?: string;\n footer?: string;\n}\n\n/**\n * Reconstruct parsed bodies only for request methods that can carry them.\n */\nconst createRenderRequest = (\n req: ExpressRequest,\n signal: AbortSignal,\n getBody: IRenderOptions['getBody'],\n): Request => {\n const options: { signal: AbortSignal; body?: BodyInit | null } = { signal };\n\n if (getBody && req.method !== 'GET' && req.method !== 'HEAD') {\n options.body = getBody(req) ?? null;\n }\n\n return createFetchRequest(req, options);\n};\n\n/**\n * Expose core response metadata to legacy hooks before they run.\n */\nconst prepareResponse = (context: ISsrRequestContext, res: ExpressResponse): void => {\n if (res.headersSent || res.writableEnded) {\n return;\n }\n\n res.status(context.response.status ?? 200);\n getHeaderEntries(context.response.headers).forEach(([name, value]) => res.setHeader(name, value));\n\n const cookies = getSetCookieHeaders(context.response.headers);\n\n if (cookies.length) {\n res.setHeader('Set-Cookie', cookies);\n }\n};\n\n/**\n * Copy legacy hook metadata back to the core; cookies remain on the live response.\n */\nconst syncResponse = (context: ISsrRequestContext, res: ExpressResponse): void => {\n const headers = new Headers(context.response.headers);\n\n headers.delete('Set-Cookie');\n\n for (const [name, value] of Object.entries(res.getHeaders())) {\n if (name.toLowerCase() === 'set-cookie' || value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n headers.append(name, item);\n }\n } else {\n headers.set(name, typeof value === 'number' ? String(value) : value);\n }\n }\n\n context.response.headers = headers;\n context.response.status = res.statusCode;\n};\n\n/**\n * Preserve Express redirect formatting before falling back to the Fetch body writer.\n */\nconst writeResponse = async (res: ExpressResponse, response: Response): Promise<void> => {\n const location = response.headers.get('Location');\n\n if (\n location &&\n response.status >= 300 &&\n response.status < 400 &&\n !res.headersSent &&\n !res.writableEnded &&\n !res.destroyed\n ) {\n writeFetchHeaders(res, response);\n await response.body?.cancel();\n res.redirect(response.status, location);\n\n return;\n }\n\n await writeFetchResponse(res, response);\n};\n\n/**\n * Render application\n */\nasync function render(\n { App, handler }: IRenderParams,\n config: ServerConfig,\n context: IRequestContext,\n {\n onRouterReady,\n onShellReady,\n onResponse,\n onShellError,\n onError,\n getBody,\n getState,\n abortDelay = 15000,\n }: IRenderOptions,\n): Promise<void> {\n const { appProps, html: shellHtml, req, res } = context;\n const Logger = config.getLogger();\n const requestSignal = createRequestSignal(req, res);\n try {\n const coreContext: ISsrRequestContext = {\n appProps,\n html: shellHtml,\n request: createRenderRequest(req, requestSignal.signal, getBody),\n response: {\n headers: new Headers(),\n },\n };\n\n /**\n * Keep legacy hooks attached to their original mutable request context.\n */\n const syncContext = (updated: ISsrRequestContext): IRequestContext => {\n context.didError = updated.didError;\n context.html = updated.html;\n context.isStream = updated.isStream;\n context.routerContext = updated.routerContext;\n context.serverContext = updated.serverContext;\n\n return context;\n };\n const response = await coreRender(\n {\n /**\n * Preserve the legacy App server props and live Express request.\n */\n createApp: (children, updated) => (\n <App server={{ ...updated.appProps, req }}>{children}</App>\n ),\n handler,\n renderToStream,\n },\n coreContext,\n {\n abortDelay,\n\n /**\n * Read custom state through the legacy request context.\n */\n getState: getState\n ? ({ context: updated }) => getState({ context: syncContext(updated) })\n : undefined,\n\n /**\n * Preserve legacy error hooks and keep expected aborts at info level.\n */\n onError: ({ context: updated, error }) => {\n const { code, message } = error;\n\n onError?.({ context: syncContext(updated), error });\n Logger.info(chalk.red(`Stream error. Code: ${code}`));\n\n if (\n [\n StreamError.RenderAborted,\n StreamError.RenderTimeout,\n StreamError.RenderCancel,\n ].includes(code)\n ) {\n Logger.info(chalk.dim(message));\n\n return;\n }\n\n const { original } = error;\n\n Logger.error(original as string);\n },\n\n /**\n * Transform streamed HTML using the existing legacy hook signature.\n */\n onResponse: onResponse\n ? ({ context: updated, html }) => onResponse({ context: syncContext(updated), html })\n : undefined,\n\n /**\n * Expose router state before the legacy hook chooses a rendering mode.\n */\n onRouterReady: onRouterReady\n ? ({ context: updated }) => onRouterReady({ context: syncContext(updated) })\n : undefined,\n\n /**\n * Let the legacy hook replace the default shell-error response.\n */\n onShellError: onShellError\n ? ({ context: updated, error }) => onShellError({ context: syncContext(updated), error })\n : undefined,\n\n /**\n * Synchronize response metadata around the legacy shell hook.\n */\n onShellReady: ({ context: updated }) => {\n const legacyContext = syncContext(updated);\n\n prepareResponse(updated, res);\n\n const shell = onShellReady?.({ context: legacyContext });\n\n syncResponse(updated, res);\n\n return shell ?? {};\n },\n\n /**\n * Prepare Vite assets and send requested early hints before rendering.\n */\n prepare: async ({ context: updated, executionContext }) => {\n const legacyContext = syncContext(updated);\n const manifest = SsrManifest.get(config);\n\n await manifest.prepareDevAssets(updated.routerContext?.matches);\n\n const hints = manifest.injectAssets(legacyContext);\n\n if (legacyContext.hasEarlyHints) {\n await emitEarlyHints(executionContext, hints);\n }\n },\n routerRequestContext: context,\n },\n {\n /**\n * Deliver early hints through the existing Express response.\n */\n onEarlyHints: (headers) => writeEarlyHints(res, headers),\n },\n );\n\n syncContext(coreContext);\n\n await writeResponse(res, response);\n } finally {\n requestSignal.dispose();\n }\n}\n\nexport default render;\n"],"names":["createRenderRequest","req","signal","getBody","options","method","body","createFetchRequest","async","render","App","handler","config","context","onRouterReady","onShellReady","onResponse","onShellError","onError","getState","abortDelay","appProps","html","shellHtml","res","Logger","getLogger","requestSignal","createRequestSignal","coreContext","request","response","headers","Headers","syncContext","updated","didError","isStream","routerContext","serverContext","coreRender","createApp","children","React","createElement","server","renderToStream","undefined","error","code","message","info","chalk","red","StreamError","RenderAborted","RenderTimeout","RenderCancel","includes","dim","original","legacyContext","headersSent","writableEnded","status","getHeaderEntries","forEach","name","value","setHeader","cookies","getSetCookieHeaders","length","prepareResponse","shell","delete","Object","entries","getHeaders","toLowerCase","Array","isArray","item","append","set","String","statusCode","syncResponse","prepare","executionContext","manifest","SsrManifest","get","prepareDevAssets","matches","hints","injectAssets","hasEarlyHints","emitEarlyHints","routerRequestContext","onEarlyHints","writeEarlyHints","location","destroyed","writeFetchHeaders","cancel","redirect","writeFetchResponse","writeResponse","dispose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render.js","sources":["../../../src/adapters/express/render.tsx"],"sourcesContent":[null],"names":["createRenderRequest","req","signal","getBody","options","method","body","createFetchRequest","async","render","App","handler","config","context","onRouterReady","onShellReady","onResponse","onShellError","onError","getState","abortDelay","appProps","html","shellHtml","res","Logger","getLogger","requestSignal","createRequestSignal","coreContext","request","response","headers","Headers","syncContext","updated","didError","isStream","routerContext","serverContext","coreRender","createApp","children","React","createElement","server","renderToStream","undefined","error","code","message","info","chalk","red","StreamError","RenderAborted","RenderTimeout","RenderCancel","includes","dim","original","legacyContext","headersSent","writableEnded","status","getHeaderEntries","forEach","name","value","setHeader","cookies","getSetCookieHeaders","length","prepareResponse","shell","delete","Object","entries","getHeaders","toLowerCase","Array","isArray","item","append","set","String","statusCode","syncResponse","prepare","executionContext","manifest","SsrManifest","get","prepareDevAssets","matches","hints","injectAssets","hasEarlyHints","emitEarlyHints","routerRequestContext","onEarlyHints","writeEarlyHints","location","destroyed","writeFetchHeaders","cancel","redirect","writeFetchResponse","writeResponse","dispose"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
interface ICreateServerOut {
|
|
1
|
+
import type { Server } from 'node:net';
|
|
2
|
+
import type { Express } from 'express';
|
|
3
|
+
import type ServerConfig from '../../services/server-config.js';
|
|
4
|
+
export interface ICreateServerOut {
|
|
6
5
|
run: (options?: {
|
|
7
6
|
version?: string;
|
|
8
7
|
isPrintInfo?: boolean;
|
|
@@ -13,4 +12,4 @@ interface ICreateServerOut {
|
|
|
13
12
|
* Create SSR server
|
|
14
13
|
*/
|
|
15
14
|
declare function createServer(config: ServerConfig): Promise<ICreateServerOut>;
|
|
16
|
-
export
|
|
15
|
+
export default createServer;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:http";import r from"node:https";import t from"node:path";import s from"compression";import o from"express";import i from"./prepare-server.js";import a from"../../helpers/print-server-info.js";import n from"../../services/server-api.js";async function p(p){const d=o().disable("x-powered-by");p.isProd&&d.set("env","production");const c=new n;p.setApp(d);const m=i.init(p,c);if(!p.isProd){const e=await(await
|
|
1
|
+
import e from"node:http";import r from"node:https";import t from"node:path";import s from"compression";import o from"express";import i from"./prepare-server.js";import a from"../../helpers/print-server-info.js";import n from"../../services/server-api.js";async function p(p){const d=o().disable("x-powered-by");p.isProd&&d.set("env","production");const c=new n;p.setApp(d);const m=i.init(p,c);if(!p.isProd){const e=await(await(import("vite"))).createServer({server:{middlewareMode:!0,watch:{usePolling:!0,interval:100}},appType:"custom",mode:p.mode});d.use(e.middlewares),p.setVite(e)}const{isSPA:l}=p.getParams();if(l||await m.onAppCreated(),p.isProd){const{root:e,publicDir:r}=p.getParams(),{compression:i,expressStatic:a}=m.getMiddlewaresConfig();if(i&&d.use(s(i)),l||d.use((e,r,t)=>{"/index.html"!==e.url||c.hasAccessIndexHtml()||(e.url="/index-not-found.html"),t()}),a){const{basename:s,...i}=a;d.use(s,o.static(t.resolve(`${e}/${r}`),{...i,index:!!l&&void 0}))}}return l?d.use(/(.*)/,(e,r,t)=>{(async()=>{try{const t=(await m.loadHtml(e)).join("");r.send(t)}catch(e){p.getLogger().error(`Failed to handle request: ${e?.message}`,{error:e}),t(e)}})()}):d.use(/(.*)/,(e,r,t)=>{(async()=>{try{const[{render:s,onRequest:o,...i},a]=await Promise.all([m.loadEntrypoint(),m.loadHtml(e)]),{appProps:n,hasEarlyHints:d,shouldSkip:c,shouldCancel:l}=await(o?.(e,r))??{},[u,f]=a;if(l)return;if(c)return t();const h={req:e,res:r,hasEarlyHints:d,appProps:n??{},html:{header:u,footer:f}};await s(p,h,i)}catch(e){p.getLogger().error(`Failed to handle request: ${e?.message}`,{error:e}),t(e)}})()}),{run:({version:t,isPrintInfo:s=!0}={})=>{const{port:o,host:i}=p.getParams(),n=Boolean(p.getVite()?.config?.server?.https);p.isHost&&!p.isProd&&(p.getVite().config.server.host=i);const l=(n?r.createServer(p.getVite().config.server.https,d):e.createServer(d)).listen(o,i,()=>{m.onServerStarted?.(d,c,l),s&&a(p,{version:t,server:l})});return l},app:d}}export{p as default};
|
|
2
2
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../../src/adapters/express/server.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"server.js","sources":["../../../src/adapters/express/server.ts"],"sourcesContent":[null],"names":["async","createServer","config","app","express","disable","isProd","set","serverApi","ServerApi","setApp","prepareServer","PrepareServer","init","vite","server","middlewareMode","watch","usePolling","interval","appType","mode","use","middlewares","setVite","isSPA","getParams","onAppCreated","root","publicDir","compression","compressionConfig","expressStatic","getMiddlewaresConfig","req","_","next","url","hasAccessIndexHtml","basename","expressStaticOpts","static","path","resolve","index","undefined","res","html","loadHtml","join","send","e","getLogger","error","message","render","onRequest","renderParams","clientHtml","Promise","all","loadEntrypoint","appProps","hasEarlyHints","shouldSkip","shouldCancel","header","footer","context","run","version","isPrintInfo","port","host","isHTTPS","Boolean","getVite","https","isHost","http","listen","onServerStarted","printServerInfo"],"mappings":"+PAqBAA,eAAeC,EAAaC,GAC1B,MAAMC,EAAMC,IAAUC,QAAQ,gBAE1BH,EAAOI,QACTH,EAAII,IAAI,MAAO,cAGjB,MAAMC,EAAY,IAAIC,EAEtBP,EAAOQ,OAAOP,GAEd,MAAMQ,EAAgBC,EAAcC,KAAKX,EAAQM,GAEjD,IAAKN,EAAOI,OAAQ,CAMlB,MAAMQ,qBACS,UACbb,aAAa,CACbc,OAAQ,CACNC,gBAAgB,EAChBC,MAAO,CAKLC,YAAY,EACZC,SAAU,MAGdC,QAAS,SACTC,KAAMnB,EAAOmB,OAMflB,EAAImB,IAAIR,EAAKS,aAEbrB,EAAOsB,QAAQV,EACjB,CAEA,MAAMW,MAAEA,GAAUvB,EAAOwB,YAMzB,GAJKD,SACGd,EAAcgB,eAGlBzB,EAAOI,OAAQ,CACjB,MAAMsB,KAAEA,EAAIC,UAAEA,GAAc3B,EAAOwB,aAC3BI,YAAaC,EAAiBC,cAAEA,GAAkBrB,EAAcsB,uBAmBxE,GAjBIF,GACF5B,EAAImB,IAAIQ,EAAYC,IAGjBN,GAIHtB,EAAImB,IAAI,CAACY,EAAKC,EAAGC,KACC,gBAAZF,EAAIG,KAA0B7B,EAAU8B,uBAC1CJ,EAAIG,IAAM,yBAGZD,MAIAJ,EAAe,CACjB,MAAMO,SAAEA,KAAaC,GAAsBR,EAE3C7B,EAAImB,IACFiB,EACAnC,EAAQqC,OAAOC,EAAKC,QAAQ,GAAGf,KAAQC,KAAc,IAChDW,EACHI,QAAOnB,QAAQoB,IAGrB,CACF,CA8DA,OAzDKpB,EAyCHtB,EAAImB,IAAI,OAAQ,CAACY,EAAKY,EAAKV,KACpB,WACH,IACE,MAAMW,SAAcpC,EAAcqC,SAASd,IAAMe,KAAK,IAEtDH,EAAII,KAAKH,EACX,CAAE,MAAOI,GACPjD,EACGkD,YACAC,MAAM,6BAA8BF,GAAaG,UAAW,CAAED,MAAOF,IACxEf,EAAKe,EACP,CACD,EAXI,KAzCPhD,EAAImB,IAAI,OAAQ,CAACY,EAAKY,EAAKV,KACpB,WACH,IACE,OAAOmB,OAAEA,EAAMC,UAAEA,KAAcC,GAAgBC,SAAoBC,QAAQC,IAAI,CAC7EjD,EAAckD,iBACdlD,EAAcqC,SAASd,MAEnB4B,SAAEA,EAAQC,cAAEA,EAAaC,WAAEA,EAAUC,aAAEA,SACpCT,IAAYtB,EAAKY,KAAS,CAAA,GAC5BoB,EAAQC,GAAUT,EAEzB,GAAIO,EACF,OAGF,GAAID,EACF,OAAO5B,IAGT,MAAMgC,EAA2B,CAC/BlC,MACAY,MACAiB,gBACAD,SAAUA,GAAY,CAAA,EACtBf,KAAM,CAAEmB,SAAQC,iBAGZZ,EAAOrD,EAAQkE,EAASX,EAChC,CAAE,MAAON,GACPjD,EACGkD,YACAC,MAAM,6BAA8BF,GAAaG,UAAW,CAAED,MAAOF,IACxEf,EAAKe,EACP,CACD,EAjCI,KAuDF,CAILkB,IAAK,EAAGC,UAASC,eAAc,GAAS,CAAA,KACtC,MAAMC,KAAEA,EAAIC,KAAEA,GAASvE,EAAOwB,YACxBgD,EAAUC,QAAQzE,EAAO0E,WAAW1E,QAAQa,QAAQ8D,OAKtD3E,EAAO4E,SAAW5E,EAAOI,SAC3BJ,EAAO0E,UAAW1E,OAAOa,OAAO0D,KAAOA,GAGzC,MAAM1D,GACJ2D,EACIG,EAAM5E,aAAaC,EAAO0E,UAAW1E,OAAOa,OAAO8D,MAAQ1E,GAC3D4E,EAAK9E,aAAaE,IACtB6E,OAAOR,EAAMC,EAAM,KACd9D,EAAcsE,kBAAkB9E,EAAKK,EAAWO,GAEhDwD,GAIAW,EAAgBhF,EAAQ,CAAEoE,UAASvD,aAG1C,OAAOA,GAETZ,MAEJ"}
|
package/adapters/express.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Request, RequestHandler } from 'express';
|
|
2
|
-
import { INodeAdapterOptions } from
|
|
3
|
-
import { TSsrHandler } from
|
|
4
|
-
interface IExpressAdapterOptions extends INodeAdapterOptions {
|
|
1
|
+
import type { Request, RequestHandler } from 'express';
|
|
2
|
+
import type { INodeAdapterOptions } from './node.js';
|
|
3
|
+
import type { TSsrHandler } from '../core/types.js';
|
|
4
|
+
export interface IExpressAdapterOptions extends INodeAdapterOptions {
|
|
5
5
|
getBody?: (request: Request) => BodyInit | null | undefined;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Bridge Express middleware to Fetch while retaining parsed body support.
|
|
9
9
|
*/
|
|
10
10
|
declare const adapterExpress: (handler: TSsrHandler, options?: IExpressAdapterOptions) => RequestHandler;
|
|
11
|
-
export
|
|
11
|
+
export default adapterExpress;
|
package/adapters/express.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sources":["../../src/adapters/express.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"express.js","sources":["../../src/adapters/express.ts"],"sourcesContent":[null],"names":["adapterExpress","handler","options","req","res","next","requestSignal","createRequestSignal","onError","error","signal","aborted","requestOptions","getBody","body","undefined","serializeBody","get","handleRequest","createFetchRequest","compression","catch","finally","dispose"],"mappings":"uJAeA,MAAMA,EAAiB,CACrBC,EACAC,EAAkC,KAK3B,CAACC,EAAcC,EAAsBC,KAC1C,MAAMC,EAAgBC,EAAoBJ,EAAKC,GAKzCI,EAAWC,IACVH,EAAcI,OAAOC,SACxBN,EAAKI,IAIT,IACE,MAAMG,EAAkE,CACtEF,OAAQJ,EAAcI,QAGpBR,EAAQW,QACVD,EAAeE,KAAOZ,EAAQW,QAAQV,IAAQ,UACxBY,IAAbZ,EAAIW,OACbF,EAAeE,KAAOE,EAAcb,EAAIW,KAAMX,EAAIc,IAAI,kBAGnDC,EAAcjB,EAASkB,EAAmBhB,EAAKS,GAAiBR,EAAK,CACxEgB,YAAalB,EAAQkB,cAEpBC,MAAMb,GACNc,QAAQhB,EAAciB,QAC3B,CAAE,MAAOd,GACPH,EAAciB,UACdf,EAAQC,EACV"}
|