@lomray/vite-ssr-boost 8.4.0-beta.1 → 8.4.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.
@@ -6,6 +6,7 @@ import { createStaticHandler } from 'react-router';
6
6
  import type { ServeStaticOptions } from 'serve-static';
7
7
  import type { Logger } from 'vite';
8
8
  import type { IRenderOptions, TRender } from './render.js';
9
+ import type { ISsrPolicy } from '../../core/ssr-policy.js';
9
10
  import type { TRouteObject } from '../../interfaces/route-object.js';
10
11
  import type ServerApi from '../../services/server-api.js';
11
12
  import type ServerConfig from '../../services/server-config.js';
@@ -42,6 +43,7 @@ export interface IAppServerProps<T = Record<string, any>> {
42
43
  }
43
44
  export type TApp<T> = FC<PropsWithChildren<Record<string, any> & IAppServerProps<T>>>;
44
45
  export interface IEntryServerOptions<TAppProps = Record<string, any>> extends Pick<IPrepareRenderOut, 'loggerProd' | 'loggerDev' | 'middlewares'> {
46
+ ssr?: ISsrPolicy;
45
47
  abortDelay?: number;
46
48
  init?: (params: {
47
49
  config: ServerConfig;
@@ -51,5 +53,6 @@ export interface IEntryServerOptions<TAppProps = Record<string, any>> extends Pi
51
53
  /**
52
54
  * Render server side application
53
55
  */
54
- declare function entry<TAppProps>(App: TApp<TAppProps>, routes: TRouteObject[], { init, routerOptions, ...rest }?: IEntryServerOptions<TAppProps>): IPrepareRenderOut<TAppProps>;
56
+ declare function entry<TAppProps>(App: TApp<TAppProps>, routes: TRouteObject[], { init, routerOptions, ssr, ...rest }?: IEntryServerOptions<TAppProps>): IPrepareRenderOut<TAppProps>;
55
57
  export default entry;
58
+ export type { ISsrPolicy };
@@ -1,2 +1,2 @@
1
- import{createStaticHandler as r}from"react-router";import t from"./render.js";function e(e,n,{init:o,routerOptions:i,...u}={}){const p=r(n,i);return{render:t.bind(null,{handler:p,App:e}),init:o,routes:n,...u}}export{e as default};
1
+ import{createStaticHandler as r}from"react-router";import e from"./render.js";import o from"../../core/spa-shell.js";import t from"../../core/ssr-policy.js";function s(s,n,{init:i,routerOptions:p,ssr:a,...l}={}){const m=r(n,p),u=new t(a,m.dataRoutes,p?.basename),c=o();return{render:e.bind(null,{handler:m,App:s,policy:u,spaShell:c}),init:i,routes:n,...l}}export{s as default};
2
2
  //# sourceMappingURL=entry.js.map
@@ -1 +1 @@
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":"8EAkFA,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
+ {"version":3,"file":"entry.js","sources":["../../../src/adapters/express/entry.tsx"],"sourcesContent":[null],"names":["entry","App","routes","init","routerOptions","ssr","rest","handler","createStaticHandler","policy","SsrPolicy","dataRoutes","basename","spaShell","createSpaShell","render","bind"],"mappings":"6JAsFA,SAASA,EACPC,EACAC,GACAC,KAAEA,EAAIC,cAAEA,EAAaC,IAAEA,KAAQC,GAAyC,IAExE,MAAMC,EAAUC,EAAoBN,EAAyBE,GACvDK,EAAS,IAAIC,EAAUL,EAAKE,EAAQI,WAAYP,GAAeQ,UAC/DC,EAAWC,IAEjB,MAAO,CACLC,OAAQA,EAAOC,KAAK,KAAM,CAAET,UAASN,MAAKQ,SAAQI,aAClDV,OACAD,YACGI,EAEP"}
@@ -1,9 +1,11 @@
1
1
  import type { Request as ExpressRequest, Response as ExpressResponse } from 'express';
2
- import type { StaticHandlerContext, StaticHandler } from 'react-router';
2
+ import type { RouterState, StaticHandlerContext, StaticHandler } from 'react-router';
3
3
  import type { TApp } from './entry.js';
4
4
  import StreamError from '../../constants/stream-error.js';
5
5
  import type { IServerContext } from '../../context/server.js';
6
6
  import type { ICoreRenderOptions, ISsrRequestContext } from '../../core/render.js';
7
+ import type createSpaShell from '../../core/spa-shell.js';
8
+ import type SsrPolicy from '../../core/ssr-policy.js';
7
9
  import type { IObtainStreamErrorOut } from '../../helpers/obtain-stream-error.js';
8
10
  import type ServerConfig from '../../services/server-config.js';
9
11
  export interface IRequestContext<TAppProps = Record<any, any>> {
@@ -21,6 +23,8 @@ export interface IRequestContext<TAppProps = Record<any, any>> {
21
23
  routerContext?: StaticHandlerContext;
22
24
  serverContext?: IServerContext;
23
25
  isStream?: boolean;
26
+ isSpa?: boolean;
27
+ matches?: RouterState['matches'];
24
28
  hasEarlyHints?: boolean;
25
29
  didError?: StreamError;
26
30
  }
@@ -28,6 +32,8 @@ export type TRender<TAppProps = Record<any, any>> = (config: ServerConfig, conte
28
32
  export interface IRenderParams<TAppProps = Record<string, any>> {
29
33
  App: TApp<TAppProps>;
30
34
  handler: StaticHandler;
35
+ policy?: SsrPolicy;
36
+ spaShell?: ReturnType<typeof createSpaShell>;
31
37
  }
32
38
  export interface IRenderOptions<TAppProps = Record<string, any>> extends Pick<ICoreRenderOptions<TAppProps>, 'documentHeaders' | 'sessionCookie' | 'protectPrivate'> {
33
39
  hydration?: 'early' | 'footer';
@@ -68,5 +74,5 @@ export interface IShellReadyOut {
68
74
  /**
69
75
  * Render application
70
76
  */
71
- declare function render({ App, handler }: IRenderParams, config: ServerConfig, initialContext: Omit<IRequestContext, 'request' | 'response'>, { onRouterReady, onShellReady, onResponse, onShellError, onError, getBody, getState, hydration, nonce, bootstrapScriptContent, documentHeaders, sessionCookie, protectPrivate, abortDelay, }: IRenderOptions): Promise<void>;
77
+ declare function render({ App, handler, policy, spaShell }: IRenderParams, config: ServerConfig, initialContext: Omit<IRequestContext, 'request' | 'response'>, { onRouterReady, onShellReady, onResponse, onShellError, onError, getBody, getState, hydration, nonce, bootstrapScriptContent, documentHeaders, sessionCookie, protectPrivate, abortDelay, }: IRenderOptions): Promise<void>;
72
78
  export default render;
@@ -1,2 +1,2 @@
1
- import e from"chalk";import r from"react";import t from"./create-request.js";import s from"../../constants/stream-error.js";import o 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 p from"../../node/write-early-hints.js";import m,{writeFetchHeaders as l}from"../../node/write-fetch-response.js";import h,{isDiagnosticsEnabled as u}from"../../services/diagnostics.js";import f from"../../services/ssr-manifest.js";const y=(e,r,s)=>{const o={signal:r};return s&&"GET"!==e.method&&"HEAD"!==e.method&&(o.body=s(e)??null),t(e,o)};async function g({App:t,handler:g},x,S,{onRouterReady:w,onShellReady:v,onResponse:C,onShellError:E,onError:b,getBody:j,getState:R,hydration:q,nonce:H,bootstrapScriptContent:k,documentHeaders:A,sessionCookie:P,protectPrivate:D,abortDelay:L=15e3}){const{appProps:O,html:T,req:B,res:G}=S,U=x.getLogger(),$=c(B,G);try{const c=Object.assign(S,{request:y(B,$.signal,j),response:{headers:new Headers}}),z={appProps:O,diagnostics:u(!x.isProd)?new h(new URL(c.request.url).pathname,U):void 0,html:T,request:c.request,response:c.response};if(!x.isProd&&z.diagnostics){const{diagnostics:e}=z;for(const r of["req","res"]){let t=c[r];Object.defineProperty(c,r,{configurable:!0,enumerable:!0,get:()=>(e.deprecatedReqRes(),t),set:e=>{t=e}})}}const F=e=>(c.request=e.request,c.response=e.response,c.didError=e.didError,c.html=e.html,c.isStream=e.isStream,c.routerContext=e.routerContext,c.serverContext=e.serverContext,c),I=await i({createApp:(e,s)=>r.createElement(t,{server:{...s.appProps,req:B}},e),handler:g,renderToStream:d},z,{abortDelay:L,hydration:q,nonce:H,bootstrapScriptContent:k,documentHeaders:A,sessionCookie:P,protectPrivate:D,getState:R?({context:e})=>R({context:F(e)}):void 0,onError:({context:r,error:t})=>{const{code:o,message:n}=t;if(b?.({context:F(r),error:t}),U.info(e.red(`Stream error. Code: ${o}`)),[s.RenderAborted,s.RenderTimeout,s.RenderCancel].includes(o))return void U.info(e.dim(n));const{original:a}=t;U.error(a)},onResponse:C?({context:e,html:r,isEnd:t})=>C({context:F(e),html:r,isEnd:t}):void 0,onRouterReady:w?({context:e})=>w({context:F(e)}):void 0,onShellError:E?({context:e,error:r})=>E({context:F(e),error:r}):void 0,onShellReady:({context:e})=>{const r=F(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,G);const t={headers:new Headers(e.response.headers),status:e.response.status},s=v?.({context:r});return((e,r,t)=>{if(!r.headersSent&&!r.writableEnded){e.response.status!==t.status&&r.status(e.response.status??200);const s=new Set([...t.headers.keys(),...e.response.headers.keys()]);for(const o of s)e.response.headers.get(o)!==t.headers.get(o)&&(e.response.headers.has(o)?r.setHeader(o,"set-cookie"===o?a(e.response.headers):e.response.headers.get(o)):r.removeHeader(o))}const s=new Headers(e.response.headers);s.delete("Set-Cookie");for(const[e,t]of Object.entries(r.getHeaders()))if("set-cookie"!==e.toLowerCase()&&void 0!==t)if(Array.isArray(t))for(const r of t)s.append(e,r);else s.set(e,"number"==typeof t?String(t):t);e.response.headers=s,e.response.status=r.statusCode})(e,G,t),s??{}},prepare:async({context:e,executionContext:r})=>{const t=F(e),s=f.get(x);await s.prepareDevAssets(e.routerContext?.matches);const n=s.injectAssets(t);t.hasEarlyHints&&await o(r,n)},routerRequestContext:c},{onEarlyHints:e=>p(G,e)});F(z),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 m(e,r)})(G,I)}finally{$.dispose()}}export{g as default};
1
+ import e from"chalk";import s from"react";import t from"./create-request.js";import r from"../../constants/stream-error.js";import o from"../../core/early-hints.js";import{getSetCookieHeaders as n,getHeaderEntries 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 p from"../../node/write-early-hints.js";import m,{writeFetchHeaders as l}from"../../node/write-fetch-response.js";import h,{isDiagnosticsEnabled as u}from"../../services/diagnostics.js";import f from"../../services/ssr-manifest.js";const y=(e,s,r)=>{const o={signal:s};return r&&"GET"!==e.method&&"HEAD"!==e.method&&(o.body=r(e)??null),t(e,o)},g=(e,s,t)=>{if(!s.headersSent&&!s.writableEnded){e.response.status!==t.status&&s.status(e.response.status??200);const r=new Set([...t.headers.keys(),...e.response.headers.keys()]);for(const o of r)e.response.headers.get(o)!==t.headers.get(o)&&(e.response.headers.has(o)?s.setHeader(o,"set-cookie"===o?n(e.response.headers):e.response.headers.get(o)):s.removeHeader(o))}const r=new Headers(e.response.headers);r.delete("Set-Cookie");for(const[e,t]of Object.entries(s.getHeaders()))if("set-cookie"!==e.toLowerCase()&&void 0!==t)if(Array.isArray(t))for(const s of t)r.append(e,s);else r.set(e,"number"==typeof t?String(t):t);e.response.headers=r,e.response.status=s.statusCode};async function S({App:t,handler:S,policy:x,spaShell:w},v,E,{onRouterReady:b,onShellReady:C,onResponse:j,onShellError:R,onError:H,getBody:q,getState:k,hydration:A,nonce:P,bootstrapScriptContent:D,documentHeaders:L,sessionCookie:O,protectPrivate:T,abortDelay:B=15e3}){const{appProps:G,html:U,req:$,res:z}=E,F=v.getLogger(),I=c($,z);try{const c=Object.assign(E,{request:y($,I.signal,q),response:{headers:new Headers}}),J={appProps:G,diagnostics:u(!v.isProd)?new h(new URL(c.request.url).pathname,F):void 0,html:U,request:c.request,response:c.response};if(!v.isProd&&J.diagnostics){const{diagnostics:e}=J;for(const s of["req","res"]){let t=c[s];Object.defineProperty(c,s,{configurable:!0,enumerable:!0,get:()=>(e.deprecatedReqRes(),t),set:e=>{t=e}})}}g(J,z,{headers:new Headers(J.response.headers),status:J.response.status}),200===J.response.status&&(J.response.status=void 0);const K=e=>(c.request=e.request,c.response=e.response,c.didError=e.didError,c.html=e.html,c.isStream=e.isStream,c.isSpa=e.isSpa,c.matches=e.matches,c.routerContext=e.routerContext,c.serverContext=e.serverContext,c),M=await i({createApp:(e,r)=>s.createElement(t,{server:{...r.appProps,req:$}},e),handler:S,policy:x,spaShell:w,renderToStream:d},J,{abortDelay:B,hydration:A,nonce:P,bootstrapScriptContent:D,documentHeaders:L,sessionCookie:O,protectPrivate:T,getState:k?({context:e})=>k({context:K(e)}):void 0,onError:({context:s,error:t})=>{const{code:o,message:n}=t;if(H?.({context:K(s),error:t}),F.info(e.red(`Stream error. Code: ${o}`)),[r.RenderAborted,r.RenderTimeout,r.RenderCancel].includes(o))return void F.info(e.dim(n));const{original:a}=t;F.error(a)},onResponse:j?({context:e,html:s,isEnd:t})=>j({context:K(e),html:s,isEnd:t}):void 0,onRouterReady:b?({context:e})=>b({context:K(e)}):void 0,onShellError:R?({context:e,error:s})=>R({context:K(e),error:s}):void 0,onShellReady:({context:e})=>{const s=K(e);((e,s)=>{if(s.headersSent||s.writableEnded)return;s.status(e.response.status??200),a(e.response.headers).forEach(([e,t])=>s.setHeader(e,t));const t=n(e.response.headers);t.length&&s.setHeader("Set-Cookie",t)})(e,z);const t={headers:new Headers(e.response.headers),status:e.response.status},r=C?.({context:s});return g(e,z,t),r??{}},prepare:async({context:e,executionContext:s})=>{const t=K(e),r=f.get(v);await r.prepareDevAssets(e.matches,e.isSpa);const n=r.injectAssets(t);t.hasEarlyHints&&await o(s,n)},routerRequestContext:c},{onEarlyHints:e=>p(z,e)});K(J),await(async(e,s)=>{const t=s.headers.get("Location");if(t&&s.status>=300&&s.status<400&&!e.headersSent&&!e.writableEnded&&!e.destroyed)return l(e,s),await(s.body?.cancel()),void e.redirect(s.status,t);await m(e,s)})(z,M)}finally{I.dispose()}}export{S as default};
2
2
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
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","initialContext","onRouterReady","onShellReady","onResponse","onShellError","onError","getState","hydration","nonce","bootstrapScriptContent","documentHeaders","sessionCookie","protectPrivate","abortDelay","appProps","html","shellHtml","res","Logger","getLogger","requestSignal","createRequestSignal","context","Object","assign","request","response","headers","Headers","coreContext","diagnostics","isDiagnosticsEnabled","isProd","Diagnostics","URL","url","pathname","undefined","name","value","defineProperty","configurable","enumerable","get","deprecatedReqRes","set","next","syncContext","updated","didError","isStream","routerContext","serverContext","coreRender","createApp","children","React","createElement","server","renderToStream","error","code","message","info","chalk","red","StreamError","RenderAborted","RenderTimeout","RenderCancel","includes","dim","original","isEnd","legacyContext","headersSent","writableEnded","status","getHeaderEntries","forEach","setHeader","cookies","getSetCookieHeaders","length","prepareResponse","previous","shell","names","Set","keys","has","removeHeader","delete","entries","getHeaders","toLowerCase","Array","isArray","item","append","String","statusCode","syncResponse","prepare","executionContext","manifest","SsrManifest","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","syncResponse","context","res","previous","headersSent","writableEnded","response","status","names","Set","headers","keys","name","get","has","setHeader","getSetCookieHeaders","removeHeader","Headers","delete","value","Object","entries","getHeaders","toLowerCase","undefined","Array","isArray","item","append","set","String","statusCode","async","render","App","handler","policy","spaShell","config","initialContext","onRouterReady","onShellReady","onResponse","onShellError","onError","getState","hydration","nonce","bootstrapScriptContent","documentHeaders","sessionCookie","protectPrivate","abortDelay","appProps","html","shellHtml","Logger","getLogger","requestSignal","createRequestSignal","assign","request","coreContext","diagnostics","isDiagnosticsEnabled","isProd","Diagnostics","URL","url","pathname","defineProperty","configurable","enumerable","deprecatedReqRes","next","syncContext","updated","didError","isStream","isSpa","matches","routerContext","serverContext","coreRender","createApp","children","React","createElement","server","renderToStream","error","code","message","info","chalk","red","StreamError","RenderAborted","RenderTimeout","RenderCancel","includes","dim","original","isEnd","legacyContext","getHeaderEntries","forEach","cookies","length","prepareResponse","shell","prepare","executionContext","manifest","SsrManifest","prepareDevAssets","hints","injectAssets","hasEarlyHints","emitEarlyHints","routerRequestContext","onEarlyHints","writeEarlyHints","location","destroyed","writeFetchHeaders","cancel","redirect","writeFetchResponse","writeResponse","dispose"],"mappings":"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"}
@@ -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(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};
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||r.writableEnded||r.headersSent)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":[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","renderInput","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,EAAsC,CAC1ClC,MACAY,MACAiB,gBACAD,SAAUA,GAAY,CAAA,EACtBf,KAAM,CAAEmB,SAAQC,iBAGZZ,EAAOrD,EAAQkE,EAAaX,EACpC,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"}
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","writableEnded","headersSent","renderInput","run","version","isPrintInfo","port","host","isHTTPS","Boolean","getVite","https","isHost","http","listen","onServerStarted","printServerInfo"],"mappings":"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"}
package/browser/entry.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"react";import t from"react-dom/client";import{matchRoutes as o,createBrowserRouter as r,RouterProvider as n}from"react-router";import a from"./stream.js";import{IS_SSR_MODE as i}from"../constants/common.js";async function c(c,d,{init:s,routerOptions:l,createRouter:m=r,rootId:u="root"}={}){const f=i?a():void 0,w=(()=>{const e="__staticRouterHydrationData";if(!("loading"!==document.readyState||i&&void 0!==Reflect.get(window,e)))return new Promise(t=>{const o=()=>{i&&Reflect.deleteProperty(window,e),t()};document.addEventListener("DOMContentLoaded",o,{once:!0}),i&&Object.defineProperty(window,e,{configurable:!0,enumerable:!0,get:()=>{},set:r=>{Object.defineProperty(window,e,{configurable:!0,enumerable:!0,writable:!0,value:r}),document.removeEventListener("DOMContentLoaded",o),t()}})})})(),y=o(d,window.location,l?.basename)?.filter(e=>e.route.lazy);(w||y?.length)&&await Promise.all([w,...(y??[]).map(async e=>{const{lazy:t}=e.route;if("function"==typeof t){const o=await t();o&&Object.assign(e.route,{...o,lazy:void 0})}})]);const p=Reflect.get(window,"__staticRouterHydrationData");f&&p?.__ssrBoostStream&&Reflect.set(window,"__staticRouterHydrationData",await f.ready);const R=m(d,l),b=document.getElementById(u),g=await(s?.({isSSRMode:i,router:R})),_=()=>e.createElement(c,{client:g},e.createElement(n,{router:R}));return i&&"1"!==b.dataset.forceSpa?t.hydrateRoot(b,e.createElement(_,null)):t.createRoot(b).render(e.createElement(_,null))}export{c as default,c as entry};
1
+ import e from"react";import t from"react-dom/client";import{matchRoutes as o,createBrowserRouter as r,RouterProvider as n}from"react-router";import a from"./stream.js";import{IS_SSR_MODE as i}from"../constants/common.js";async function c(c,d,{init:m,routerOptions:s,createRouter:l=r,rootId:u="root"}={}){const f=i?a():void 0,w=(()=>{const e="__staticRouterHydrationData";if(!("loading"!==document.readyState||i&&void 0!==Reflect.get(window,e)))return new Promise(t=>{const o=()=>{i&&Reflect.deleteProperty(window,e),t()};document.addEventListener("DOMContentLoaded",o,{once:!0}),i&&Object.defineProperty(window,e,{configurable:!0,enumerable:!0,get:()=>{},set:r=>{Object.defineProperty(window,e,{configurable:!0,enumerable:!0,writable:!0,value:r}),document.removeEventListener("DOMContentLoaded",o),t()}})})})(),y=o(d,window.location,s?.basename)?.filter(e=>e.route.lazy);(w||y?.length)&&await Promise.all([w,...(y??[]).map(async e=>{const{lazy:t}=e.route;if("function"==typeof t){const o=await t();o&&Object.assign(e.route,{...o,lazy:void 0})}})]);const p=Reflect.get(window,"__staticRouterHydrationData");f&&p?.__ssrBoostStream&&Reflect.set(window,"__staticRouterHydrationData",await f.ready);const R=l(d,s),b=document.getElementById(u),g=i&&"1"!==b.dataset.forceSpa&&"1"!==document.documentElement.dataset.forceSpa,E=await(m?.({isSSRMode:g,router:R})),_=()=>e.createElement(c,{client:E},e.createElement(n,{router:R}));return g?t.hydrateRoot(b,e.createElement(_,null)):t.createRoot(b).render(e.createElement(_,null))}export{c as default,c as entry};
2
2
  //# sourceMappingURL=entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry.js","sources":["../../src/browser/entry.tsx"],"sourcesContent":[null],"names":["async","entry","App","routes","init","routerOptions","createRouter","createBrowserRouter","rootId","stream","IS_SSR_MODE","receiveStream","undefined","documentReady","hydrationKey","document","readyState","Reflect","get","window","Promise","resolve","onReady","deleteProperty","addEventListener","once","Object","defineProperty","configurable","enumerable","set","value","writable","removeEventListener","waitForDocument","lazyMatches","matchRoutes","location","basename","filter","m","route","lazy","length","all","map","lazyResult","assign","hydration","__ssrBoostStream","ready","router","root","getElementById","appProps","isSSRMode","AppComponent","React","createElement","client","RouterProvider","dataset","ReactDOM","hydrateRoot","createRoot","render"],"mappings":"6NA0EAA,eAAeC,EACbC,EACAC,GACAC,KACEA,EAAIC,cACJA,EAAaC,aACbA,EAAeC,EAAmBC,OAClCA,EAAS,QACyB,CAAA,GAEpC,MAAMC,EAASC,EAAcC,SAAkBC,EACzCC,EAvDgB,MACtB,MAAMC,EAAe,8BAErB,KAC0B,YAAxBC,SAASC,YACRN,QAAqDE,IAAtCK,QAAQC,IAAIC,OAAQL,IAKtC,OAAO,IAAIM,QAAeC,IACxB,MAAMC,EAAU,KACVZ,GACFO,QAAQM,eAAeJ,OAAQL,GAGjCO,KAGFN,SAASS,iBAAiB,mBAAoBF,EAAS,CAAEG,MAAM,IAE3Df,GACFgB,OAAOC,eAAeR,OAAQL,EAAc,CAC1Cc,cAAc,EACdC,YAAY,EACZX,IAAK,OACLY,IAAMC,IACJL,OAAOC,eAAeR,OAAQL,EAAc,CAC1Cc,cAAc,EACdC,YAAY,EACZG,UAAU,EACVD,UAEFhB,SAASkB,oBAAoB,mBAAoBX,GACjDD,UAqBca,GAChBC,EAAcC,EAClBjC,EACAgB,OAAOkB,SACPhC,GAAeiC,WACdC,OAAQC,GAAMA,EAAEC,MAAMC,OAIrB7B,GAAiBsB,GAAaQ,eAC1BvB,QAAQwB,IAAI,CAChB/B,MACIsB,GAAe,IAAIU,IAAI7C,MAAOwC,IAChC,MAAME,KAAEA,GAASF,EAAEC,MAEnB,GAAoB,mBAATC,EAAqB,CAC9B,MAAMI,QAAmBJ,IAErBI,GACFpB,OAAOqB,OAAOP,EAAEC,MAAO,IAClBK,EACHJ,UAAM9B,GAGZ,MAKN,MAAMoC,EAAY/B,QAAQC,IAAIC,OAAQ,+BAGlCV,GAAUuC,GAAWC,kBACvBhC,QAAQa,IAAIX,OAAQ,oCAAqCV,EAAOyC,OAGlE,MAAMC,EAAS7C,EAAaH,EAAyBE,GAC/C+C,EAAOrC,SAASsC,eAAe7C,GAC/B8C,QAAkBlD,IAAO,CAAEmD,UAAW7C,EAAayC,YAEnDK,EAAmB,IACvBC,EAAAC,cAACxD,EAAG,CAACyD,OAAQL,GACXG,EAAAC,cAACE,GAAeT,OAAQA,KAI5B,OAAKzC,GAA4C,MAA7B0C,EAAKS,QAAkB,SAIpCC,EAASC,YAAYX,EAAMK,EAAAC,cAACF,EAAY,OAHtCM,EAASE,WAAWZ,GAAMa,OAAOR,EAAAC,cAACF,EAAY,MAIzD"}
1
+ {"version":3,"file":"entry.js","sources":["../../src/browser/entry.tsx"],"sourcesContent":[null],"names":["async","entry","App","routes","init","routerOptions","createRouter","createBrowserRouter","rootId","stream","IS_SSR_MODE","receiveStream","undefined","documentReady","hydrationKey","document","readyState","Reflect","get","window","Promise","resolve","onReady","deleteProperty","addEventListener","once","Object","defineProperty","configurable","enumerable","set","value","writable","removeEventListener","waitForDocument","lazyMatches","matchRoutes","location","basename","filter","m","route","lazy","length","all","map","lazyResult","assign","hydration","__ssrBoostStream","ready","router","root","getElementById","isSSRMode","dataset","documentElement","appProps","AppComponent","React","createElement","client","RouterProvider","ReactDOM","hydrateRoot","createRoot","render"],"mappings":"6NA0EAA,eAAeC,EACbC,EACAC,GACAC,KACEA,EAAIC,cACJA,EAAaC,aACbA,EAAeC,EAAmBC,OAClCA,EAAS,QACyB,CAAA,GAEpC,MAAMC,EAASC,EAAcC,SAAkBC,EACzCC,EAvDgB,MACtB,MAAMC,EAAe,8BAErB,KAC0B,YAAxBC,SAASC,YACRN,QAAqDE,IAAtCK,QAAQC,IAAIC,OAAQL,IAKtC,OAAO,IAAIM,QAAeC,IACxB,MAAMC,EAAU,KACVZ,GACFO,QAAQM,eAAeJ,OAAQL,GAGjCO,KAGFN,SAASS,iBAAiB,mBAAoBF,EAAS,CAAEG,MAAM,IAE3Df,GACFgB,OAAOC,eAAeR,OAAQL,EAAc,CAC1Cc,cAAc,EACdC,YAAY,EACZX,IAAK,OACLY,IAAMC,IACJL,OAAOC,eAAeR,OAAQL,EAAc,CAC1Cc,cAAc,EACdC,YAAY,EACZG,UAAU,EACVD,UAEFhB,SAASkB,oBAAoB,mBAAoBX,GACjDD,UAqBca,GAChBC,EAAcC,EAClBjC,EACAgB,OAAOkB,SACPhC,GAAeiC,WACdC,OAAQC,GAAMA,EAAEC,MAAMC,OAIrB7B,GAAiBsB,GAAaQ,eAC1BvB,QAAQwB,IAAI,CAChB/B,MACIsB,GAAe,IAAIU,IAAI7C,MAAOwC,IAChC,MAAME,KAAEA,GAASF,EAAEC,MAEnB,GAAoB,mBAATC,EAAqB,CAC9B,MAAMI,QAAmBJ,IAErBI,GACFpB,OAAOqB,OAAOP,EAAEC,MAAO,IAClBK,EACHJ,UAAM9B,GAGZ,MAKN,MAAMoC,EAAY/B,QAAQC,IAAIC,OAAQ,+BAGlCV,GAAUuC,GAAWC,kBACvBhC,QAAQa,IAAIX,OAAQ,oCAAqCV,EAAOyC,OAGlE,MAAMC,EAAS7C,EAAaH,EAAyBE,GAC/C+C,EAAOrC,SAASsC,eAAe7C,GAC/B8C,EACJ5C,GAC6B,MAA7B0C,EAAKG,QAAkB,UAC0B,MAAjDxC,SAASyC,gBAAgBD,QAAkB,SACvCE,QAAkBrD,IAAO,CAAEkD,YAAWH,YAEtCO,EAAmB,IACvBC,EAAAC,cAAC1D,EAAG,CAAC2D,OAAQJ,GACXE,EAAAC,cAACE,GAAeX,OAAQA,KAI5B,OAAKG,EAIES,EAASC,YAAYZ,EAAMO,EAAAC,cAACF,EAAY,OAHtCK,EAASE,WAAWb,GAAMc,OAAOP,EAAAC,cAACF,EAAY,MAIzD"}
package/core/handler.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { ICoreRenderOptions, ICoreRenderParams } from './render.js';
2
+ import type { ISsrPolicy } from './ssr-policy.js';
2
3
  import type { ISsrExecutionContext, TSsrHandler } from './types.js';
3
4
  interface IHtmlShell {
4
5
  footer: string;
@@ -10,6 +11,10 @@ interface IRequestInit<TAppProps> {
10
11
  status?: number;
11
12
  }
12
13
  interface ICreateHandlerOptions<TAppProps> extends ICoreRenderOptions<TAppProps> {
14
+ /** Select SSR or the SPA shell before running route loaders. */
15
+ ssr?: ISsrPolicy;
16
+ /** Must match the basename passed to createStaticHandler. */
17
+ basename?: string;
13
18
  /**
14
19
  * Development checks; defaults to NODE_ENV !== 'production', overridden by SSR_BOOST_DIAGNOSTICS.
15
20
  */
@@ -29,6 +34,6 @@ interface ICreateHandlerOptions<TAppProps> extends ICoreRenderOptions<TAppProps>
29
34
  /**
30
35
  * Create isolated request state and allow request hooks to bypass rendering.
31
36
  */
32
- declare const createHandler: <TAppProps = Record<string, any>>(params: ICoreRenderParams<TAppProps>, { diagnostics, getHtml, onRequest, ...options }: ICreateHandlerOptions<TAppProps>) => TSsrHandler;
33
- export type { ICreateHandlerOptions, IHtmlShell, IRequestInit };
37
+ declare const createHandler: <TAppProps = Record<string, any>>(params: ICoreRenderParams<TAppProps>, { diagnostics, getHtml, onRequest, ssr, basename, ...options }: ICreateHandlerOptions<TAppProps>) => TSsrHandler;
38
+ export type { ICreateHandlerOptions, IHtmlShell, IRequestInit, ISsrPolicy };
34
39
  export default createHandler;
package/core/handler.js CHANGED
@@ -1,2 +1,2 @@
1
- import{hasCookie as e}from"./document-headers.js";import s from"./head-response.js";import o from"./render.js";import t,{isDiagnosticsEnabled as r}from"../services/diagnostics.js";const n=(n,{diagnostics:a,getHtml:i,onRequest:p,...c})=>async(d,m)=>{const u=r(a)?new t(new URL(d.url).pathname):void 0,h=await(p?.({executionContext:m,request:d}));if(h instanceof Response)return u?.inspectCachePolicy(h.headers,Boolean(c.sessionCookie&&e(d,c.sessionCookie))),s(d,h);const f={appProps:h?.appProps??{},diagnostics:u,html:await i(d),request:d,response:{headers:new Headers(h?.headers),status:h?.status}};return o(n,f,c,m)};export{n as default};
1
+ import{hasCookie as s}from"./document-headers.js";import e from"./head-response.js";import o from"./render.js";import t from"./spa-shell.js";import r from"./ssr-policy.js";import a,{isDiagnosticsEnabled as n}from"../services/diagnostics.js";const i=(i,{diagnostics:p,getHtml:c,onRequest:m,ssr:d,basename:l,...u})=>{const h=new r(d,i.handler.dataRoutes,l),f=t();return async(t,r)=>{const d=n(p)?new a(new URL(t.url).pathname):void 0,l=await(m?.({executionContext:r,request:t}));if(l instanceof Response)return d?.inspectCachePolicy(l.headers,Boolean(u.sessionCookie&&s(t,u.sessionCookie))),e(t,l);const j={appProps:l?.appProps??{},diagnostics:d,html:await c(t),request:t,response:{headers:new Headers(l?.headers),status:l?.status}};return o({...i,policy:h,spaShell:f},j,u,r)}};export{i as default};
2
2
  //# sourceMappingURL=handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sources":["../../src/core/handler.ts"],"sourcesContent":[null],"names":["createHandler","params","diagnostics","getHtml","onRequest","options","async","request","executionContext","requestDiagnostics","isDiagnosticsEnabled","Diagnostics","URL","url","pathname","undefined","requestInit","Response","inspectCachePolicy","headers","Boolean","sessionCookie","hasCookie","headResponse","context","appProps","html","response","Headers","status","render"],"mappings":"oLAyCA,MAAMA,EAAgB,CACpBC,GACEC,cAAaC,UAASC,eAAcC,KAK/BC,MAAOC,EAASC,KACrB,MAAMC,EAAqBC,EAAqBR,GAC5C,IAAIS,EAAY,IAAIC,IAAIL,EAAQM,KAAKC,eACrCC,EACEC,QAAoBZ,IAAY,CAAEI,mBAAkBD,aAE1D,GAAIS,aAAuBC,SAMzB,OALAR,GAAoBS,mBAClBF,EAAYG,QACZC,QAAQf,EAAQgB,eAAiBC,EAAUf,EAASF,EAAQgB,iBAGvDE,EAAahB,EAASS,GAG/B,MAAMQ,EAAyC,CAC7CC,SAAWT,GAAaS,UAAY,GACpCvB,YAAaO,EACbiB,WAAYvB,EAAQI,GACpBA,UACAoB,SAAU,CACRR,QAAS,IAAIS,QAAQZ,GAAaG,SAClCU,OAAQb,GAAaa,SAIzB,OAAOC,EAAO7B,EAAQuB,EAASnB,EAASG"}
1
+ {"version":3,"file":"handler.js","sources":["../../src/core/handler.ts"],"sourcesContent":[null],"names":["createHandler","params","diagnostics","getHtml","onRequest","ssr","basename","options","policy","SsrPolicy","handler","dataRoutes","spaShell","createSpaShell","async","request","executionContext","requestDiagnostics","isDiagnosticsEnabled","Diagnostics","URL","url","pathname","undefined","requestInit","Response","inspectCachePolicy","headers","Boolean","sessionCookie","hasCookie","headResponse","context","appProps","html","response","Headers","status","render"],"mappings":"iPAkDA,MAAMA,EAAgB,CACpBC,GACEC,cAAaC,UAASC,YAAWC,MAAKC,cAAaC,MAErD,MAAMC,EAAS,IAAIC,EAAUJ,EAAKJ,EAAOS,QAAQC,WAAYL,GACvDM,EAAWC,IAKjB,OAAOC,MAAOC,EAASC,KACrB,MAAMC,EAAqBC,EAAqBhB,GAC5C,IAAIiB,EAAY,IAAIC,IAAIL,EAAQM,KAAKC,eACrCC,EACEC,QAAoBpB,IAAY,CAAEY,mBAAkBD,aAE1D,GAAIS,aAAuBC,SAMzB,OALAR,GAAoBS,mBAClBF,EAAYG,QACZC,QAAQrB,EAAQsB,eAAiBC,EAAUf,EAASR,EAAQsB,iBAGvDE,EAAahB,EAASS,GAG/B,MAAMQ,EAAyC,CAC7CC,SAAWT,GAAaS,UAAY,GACpC/B,YAAae,EACbiB,WAAY/B,EAAQY,GACpBA,UACAoB,SAAU,CACRR,QAAS,IAAIS,QAAQZ,GAAaG,SAClCU,OAAQb,GAAaa,SAIzB,OAAOC,EAAO,IAAKrC,EAAQO,SAAQI,YAAYoB,EAASzB,EAASS"}
package/core/render.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import type { ReactNode } from 'react';
2
- import type { StaticHandler, StaticHandlerContext } from 'react-router';
2
+ import type { RouterState, StaticHandler, StaticHandlerContext } from 'react-router';
3
3
  import StreamError from '../constants/stream-error.js';
4
4
  import type { IServerContext } from '../context/server.js';
5
5
  import type { IDocumentHeaderRule, IDocumentHeadersOptions } from './document-headers.js';
6
+ import type createSpaShell from './spa-shell.js';
7
+ import type SsrPolicy from './ssr-policy.js';
6
8
  import type { ISsrExecutionContext } from './types.js';
7
9
  import type { IObtainStreamErrorOut } from '../helpers/obtain-stream-error.js';
8
10
  import type Diagnostics from '../services/diagnostics.js';
@@ -18,6 +20,9 @@ export interface ISsrRequestContext<TAppProps = Record<string, any>> {
18
20
  header: string;
19
21
  };
20
22
  isStream?: boolean;
23
+ isSpa?: boolean;
24
+ /** Structural route matches are available to prepare even when loaders are skipped. */
25
+ matches?: RouterState['matches'];
21
26
  request: Request;
22
27
  /**
23
28
  * Mutable response metadata shared with request and render hooks.
@@ -59,6 +64,8 @@ export interface ICoreRenderParams<TAppProps = Record<string, any>> {
59
64
  createApp: (children: ReactNode, context: ISsrRequestContext<TAppProps>) => ReactNode;
60
65
  handler: StaticHandler;
61
66
  renderToStream: TRenderToStream;
67
+ policy?: SsrPolicy;
68
+ spaShell?: ReturnType<typeof createSpaShell>;
62
69
  }
63
70
  export interface ICoreRenderOptions<TAppProps = Record<string, any>> extends IDocumentHeadersOptions {
64
71
  /** Opt in to document policies after onShellReady; redirects keep their header contract. */
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 n from"./compose-html.js";import a from"./data-stream.js";import c,{hasCookie as i}from"./document-headers.js";import d from"./head-response.js";import{mergeResponseHeaders as l}from"./headers.js";import m from"./transform-html.js";import u from"../helpers/build-custom-state.js";import h from"../helpers/obtain-stream-error.js";const p="text/html",C="Content-Type",f=async({createApp:i,handler:f,renderToStream:x},w,{abortDelay:y=15e3,getState:R,hydration:S="footer",nonce:g,bootstrapScriptContent:v,onError:E,onResponse:b,onRouterReady:q,onShellError:j,onShellReady:k,prepare:H,routerRequestContext:P,documentHeaders:T,sessionCookie:A,protectPrivate:B},_)=>{const D=await f.query(w.request,{requestContext:P??w});if(D instanceof Response)return d(w.request,l(D,w.response.headers));w.routerContext=D;const L=new a(D,w.diagnostics,g);try{await(H?.({context:w,executionContext:_}))}catch(e){throw L.cancel(),e}const{isStream:I=!0}=await(q?.({context:w}))??{};w.isStream=I,w.serverContext={basename:w.routerContext.basename,isServer:!0,response:null};const $=t(f.dataRoutes,w.routerContext),z=e.createElement(s,{context:w.serverContext},i(e.createElement(r,{router:$,context:w.routerContext,hydrate:!1}),w)),F=new AbortController;let G,J,K=!1;const M=()=>Q(w.request.signal.reason),N=()=>clearTimeout(U),O=()=>{N(),w.request.signal.removeEventListener("abort",M)},Q=e=>{K||(K=!0,G=e,O(),w.didError??=o.RenderCancel,L.abort(),F.abort(e),J?.abort(e))},U=setTimeout(()=>{w.didError=o.RenderTimeout,Q()},y);w.request.signal.aborted?Q(w.request.signal.reason):w.request.signal.addEventListener("abort",M,{once:!0});try{J=await x(z,{nonce:g,bootstrapScriptContent:"early"===S&&I?`(window.__ssrBoostStream = window.__ssrBoostStream || []).push(["shell"]);${v??""};document.currentScript?.remove();`:v,onError:e=>{const t=h(e);!K||t.code!==o.RenderAborted&&e!==F.signal.reason||(t.code=w.didError===o.RenderTimeout?o.RenderTimeout:o.RenderCancel);const{code:r}=t;w.didError??=r,E?.({context:w,error:t})},signal:F.signal}),K&&J.abort(G),Promise.all([J.allReady,L.done]).then(N,N),await(I?J.shellReady:Promise.all([J.allReady,L.done]))}catch(e){return Q(e),await(J?.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>",n=new Headers(e.response.headers);return n.set(C,p),new Response("HEAD"===e.request.method?null:s,{headers:n,status:500})})(w,e,j)}try{const e=w.serverContext.response;if(e&&(V=e,Boolean(V&&V.status>=300&&V.status<400&&V.headers.has("Location"))))return Q(),await J.stream.cancel().catch(()=>{}),d(w.request,l(e,w.response.headers));const{header:t,footer:r,headers:o,status:s}=((e,{getState:t,onShellReady:r,hydration:o,nonce:s,documentHeaders:n,sessionCookie:a,protectPrivate:i},d)=>{const l=e.serverContext.response;e.response.status=l?.status??e.response.status??e.routerContext.statusCode??200,e.response.headers.has(C)||e.response.headers.set(C,p);const m=r?.({context:e})??{},h="early"===o&&e.isStream,f=u(t?.({context:e}),e.diagnostics,s,Boolean(h));let x=m.header||e.html.header;const w=m.footer||e.html.footer;e.diagnostics?.inspectShell({header:x,footer:w});let y=w;return h?x+=f+d.state(!0):y=f+d.state(!1)+d.take()+y,n&&(e.response.headers=c(n,{sessionCookie:a,protectPrivate:i})(e)),{header:x,footer:y,headers:new Headers(e.response.headers),status:e.response.status}})(w,{getState:R,onShellReady:k,hydration:S,nonce:g,documentHeaders:T,sessionCookie:A,protectPrivate:B},L);if("HEAD"===w.request.method||[204,205,304].includes(s))return Q(),await J.stream.cancel().catch(()=>{}),new Response(null,{headers:o,status:s});const a=n(t,J.stream,r,Q,O,L),i=m(a,b?(e,t)=>b({context:w,html:e,isEnd:t}):void 0,w.diagnostics);return J.start(),new Response(i,{headers:o,status:s})}catch(e){throw Q(e),J.stream.locked||await J.stream.cancel(e).catch(()=>{}),e}var V},x=async(e,t,r,o)=>{const s=await f(e,t,r,o);return t.diagnostics?.inspectCachePolicy(s.headers,Boolean(r.sessionCookie&&i(t.request,r.sessionCookie))),s};export{x as default};
1
+ import e from"react";import{matchRoutes as t,createStaticRouter as r,StaticRouterProvider as s}from"react-router";import o from"../constants/stream-error.js";import{ServerProvider as a}from"../context/server.js";import n from"./compose-html.js";import c from"./data-stream.js";import i,{hasCookie as d}from"./document-headers.js";import l from"./head-response.js";import{mergeResponseHeaders as h}from"./headers.js";import m from"./transform-html.js";import u from"../helpers/build-custom-state.js";import p from"../helpers/obtain-stream-error.js";const C="text/html",x="Content-Type",f=async({createApp:d,handler:f,renderToStream:w,policy:y,spaShell:R},S,{abortDelay:v=15e3,getState:g,hydration:E="footer",nonce:b,bootstrapScriptContent:q,onError:j,onResponse:k,onRouterReady:H,onShellError:P,onShellReady:T,prepare:A,routerRequestContext:B,documentHeaders:D,sessionCookie:L,protectPrivate:_},I)=>{const U=y?.select(S.request,S.diagnostics)??"ssr";if(y?.active&&!S.response.headers.has("Cache-Control")&&S.response.headers.set("Cache-Control","no-store"),"spa"===U)return S.isSpa=!0,S.isStream=!1,S.matches=t(f.dataRoutes,new URL(S.request.url),y?.basename)??[],S.html=R(S.html),await(A?.({context:S,executionContext:I})),D&&(S.response.headers=i(D,{sessionCookie:L,protectPrivate:_})(S)),S.response.status=200,S.response.headers.set(x,"text/html; charset=utf-8"),new Response("HEAD"===S.request.method?null:S.html.header+S.html.footer,{headers:S.response.headers,status:200});const $=await f.query(S.request,{requestContext:B??S});if($ instanceof Response)return l(S.request,h($,S.response.headers));S.routerContext=$,S.matches=$.matches;const z=new c($,S.diagnostics,b);try{await(A?.({context:S,executionContext:I}))}catch(e){throw z.cancel(),e}const{isStream:F=!0}=await(H?.({context:S}))??{};S.isStream=F,S.serverContext={basename:S.routerContext.basename,isServer:!0,response:null};const G=r(f.dataRoutes,S.routerContext),J=e.createElement(a,{context:S.serverContext},d(e.createElement(s,{router:G,context:S.routerContext,hydrate:!1}),S)),K=new AbortController;let M,N,O=!1;const Q=()=>X(S.request.signal.reason),V=()=>clearTimeout(Y),W=()=>{V(),S.request.signal.removeEventListener("abort",Q)},X=e=>{O||(O=!0,M=e,W(),S.didError??=o.RenderCancel,z.abort(),K.abort(e),N?.abort(e))},Y=setTimeout(()=>{S.didError=o.RenderTimeout,X()},v);S.request.signal.aborted?X(S.request.signal.reason):S.request.signal.addEventListener("abort",Q,{once:!0});try{N=await w(J,{nonce:b,bootstrapScriptContent:"early"===E&&F?`(window.__ssrBoostStream = window.__ssrBoostStream || []).push(["shell"]);${q??""};document.currentScript?.remove();`:q,onError:e=>{const t=p(e);!O||t.code!==o.RenderAborted&&e!==K.signal.reason||(t.code=S.didError===o.RenderTimeout?o.RenderTimeout:o.RenderCancel);const{code:r}=t;S.didError??=r,j?.({context:S,error:t})},signal:K.signal}),O&&N.abort(M),Promise.all([N.allReady,z.done]).then(V,V),await(F?N.shellReady:Promise.all([N.allReady,z.done]))}catch(e){return X(e),await(N?.stream.cancel(e).catch(()=>{})),((e,t,r)=>{const s=t instanceof Error?t:new Error(String(t)),o=r?.({context:e,error:s})||"<!doctype html><p>Internal Server Error</p>",a=new Headers(e.response.headers);return a.set(x,C),new Response("HEAD"===e.request.method?null:o,{headers:a,status:500})})(S,e,P)}try{const e=S.serverContext.response;if(e&&(Z=e,Boolean(Z&&Z.status>=300&&Z.status<400&&Z.headers.has("Location"))))return X(),await N.stream.cancel().catch(()=>{}),l(S.request,h(e,S.response.headers));const{header:t,footer:r,headers:s,status:o}=((e,{getState:t,onShellReady:r,hydration:s,nonce:o,documentHeaders:a,sessionCookie:n,protectPrivate:c},d)=>{const l=e.serverContext.response;e.response.status=l?.status??e.response.status??e.routerContext.statusCode??200,e.response.headers.has(x)||e.response.headers.set(x,C);const h=r?.({context:e})??{},m="early"===s&&e.isStream,p=u(t?.({context:e}),e.diagnostics,o,Boolean(m));let f=h.header||e.html.header;const w=h.footer||e.html.footer;e.diagnostics?.inspectShell({header:f,footer:w});let y=w;return m?f+=p+d.state(!0):y=p+d.state(!1)+d.take()+y,a&&(e.response.headers=i(a,{sessionCookie:n,protectPrivate:c})(e)),{header:f,footer:y,headers:new Headers(e.response.headers),status:e.response.status}})(S,{getState:g,onShellReady:T,hydration:E,nonce:b,documentHeaders:D,sessionCookie:L,protectPrivate:_},z);if("HEAD"===S.request.method||[204,205,304].includes(o))return X(),await N.stream.cancel().catch(()=>{}),new Response(null,{headers:s,status:o});const a=n(t,N.stream,r,X,W,z),c=m(a,k?(e,t)=>k({context:S,html:e,isEnd:t}):void 0,S.diagnostics);return N.start(),new Response(c,{headers:s,status:o})}catch(e){throw X(e),N.stream.locked||await N.stream.cancel(e).catch(()=>{}),e}var Z},w=async(e,t,r,s)=>{const o=await f(e,t,r,s);return t.diagnostics?.inspectCachePolicy(o.headers,Boolean(r.sessionCookie&&d(t.request,r.sessionCookie))),o};export{w as default};
2
2
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["../../src/core/render.tsx"],"sourcesContent":[null],"names":["HTML_CONTENT_TYPE","CONTENT_TYPE","renderResponse","async","createApp","handler","renderToStream","context","abortDelay","getState","hydration","nonce","bootstrapScriptContent","onError","onResponse","onRouterReady","onShellError","onShellReady","prepare","routerRequestContext","documentHeaders","rules","sessionCookie","protectPrivate","executionContext","queried","query","request","requestContext","Response","headResponse","mergeResponseHeaders","response","headers","routerContext","dataStream","DataStream","diagnostics","error","cancel","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","streamError","obtainStreamError","code","RenderAborted","Promise","all","allReady","done","then","shellReady","stream","catch","shellError","Error","String","html","Headers","set","method","status","createShellErrorResponse","serverResponse","Boolean","has","header","footer","statusCode","shell","isEarly","customState","buildCustomState","shellFooter","inspectShell","state","take","prepareHtmlResponse","includes","body","composeHtml","transformed","transformHtml","isEnd","undefined","start","locked","render","params","options","inspectCachePolicy","hasCookie"],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sources":["../../src/core/render.tsx"],"sourcesContent":[null],"names":["HTML_CONTENT_TYPE","CONTENT_TYPE","renderResponse","async","createApp","handler","renderToStream","policy","spaShell","context","abortDelay","getState","hydration","nonce","bootstrapScriptContent","onError","onResponse","onRouterReady","onShellError","onShellReady","prepare","routerRequestContext","documentHeaders","rules","sessionCookie","protectPrivate","executionContext","mode","select","request","diagnostics","active","response","headers","has","set","isSpa","isStream","matches","matchRoutes","dataRoutes","URL","url","basename","html","status","Response","method","header","footer","queried","query","requestContext","headResponse","mergeResponseHeaders","routerContext","dataStream","DataStream","error","cancel","serverContext","isServer","router","createStaticRouter","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","streamError","obtainStreamError","code","RenderAborted","Promise","all","allReady","done","then","shellReady","stream","catch","shellError","Error","String","Headers","createShellErrorResponse","serverResponse","Boolean","statusCode","shell","isEarly","customState","buildCustomState","shellFooter","inspectShell","state","take","prepareHtmlResponse","includes","body","composeHtml","transformed","transformHtml","isEnd","undefined","start","locked","render","params","options","inspectCachePolicy","hasCookie"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Generate the SPA mount marker for built indexes and server response shells.
3
+ * The document marker also supports applications using a custom browser root id.
4
+ */
5
+ declare const createSpaHtml: (html: string, rootId?: string) => string;
6
+ export default createSpaHtml;
@@ -0,0 +1,2 @@
1
+ const a=(a,e="root")=>{let s=!1;const t=a.replace(/<[^!/>][^>]*>/g,a=>{const t=/\sid\s*=\s*(["'])(.*?)\1/.exec(a)?.[2];return t!==e?a:(s=!0,/\bdata-force-spa\s*=/.test(a)?a.replace(/\bdata-force-spa\s*=\s*(["']).*?\1/,'data-force-spa="1"'):a.replace(/(\sid\s*=\s*(["']).*?\2)/,'$1 data-force-spa="1"'))});return s?t:t.replace(/<html\b[^>]*>/i,a=>/\bdata-force-spa\s*=/.test(a)?a.replace(/\bdata-force-spa\s*=\s*(["']).*?\1/,'data-force-spa="1"'):a.replace(/<html\b/i,'<html data-force-spa="1"'))};export{a as default};
2
+ //# sourceMappingURL=spa-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spa-html.js","sources":["../../src/core/spa-html.ts"],"sourcesContent":[null],"names":["createSpaHtml","html","rootId","isMarked","result","replace","tag","id","exec","test"],"mappings":"AAIA,MAAMA,EAAgB,CAACC,EAAcC,EAAS,UAC5C,IAAIC,GAAW,EACf,MAAMC,EAASH,EAAKI,QAAQ,iBAAmBC,IAC7C,MAAMC,EAAK,2BAA2BC,KAAKF,KAAO,GAElD,OAAIC,IAAOL,EACFI,GAGTH,GAAW,EAEJ,uBAAuBM,KAAKH,GAC/BA,EAAID,QAAQ,qCAAsC,sBAClDC,EAAID,QAAQ,2BAA4B,4BAG9C,OAAOF,EACHC,EACAA,EAAOC,QAAQ,iBAAmBC,GAChC,uBAAuBG,KAAKH,GACxBA,EAAID,QAAQ,qCAAsC,sBAClDC,EAAID,QAAQ,WAAY"}
@@ -0,0 +1,7 @@
1
+ import type { IHtmlShell } from './handler.js';
2
+ /**
3
+ * Cache generation for the current template, returning isolated mutable request shells.
4
+ * Compare the source so development edits and request-specific getHtml values stay fresh.
5
+ */
6
+ declare const createSpaShell: () => ((html: IHtmlShell) => IHtmlShell);
7
+ export default createSpaShell;
@@ -0,0 +1,2 @@
1
+ import e from"./spa-html.js";const r=()=>{let r,o;return t=>(r?.header===t.header&&r?.footer===t.footer||(r={...t},o={header:e(t.header),footer:t.footer}),{...o})};export{r as default};
2
+ //# sourceMappingURL=spa-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spa-shell.js","sources":["../../src/core/spa-shell.ts"],"sourcesContent":[null],"names":["createSpaShell","source","shell","html","header","footer","createSpaHtml"],"mappings":"6BAOA,MAAMA,EAAiB,KACrB,IAAIC,EACAC,EAEJ,OAAQC,IACFF,GAAQG,SAAWD,EAAKC,QAAUH,GAAQI,SAAWF,EAAKE,SAC5DJ,EAAS,IAAKE,GACdD,EAAQ,CAAEE,OAAQE,EAAcH,EAAKC,QAASC,OAAQF,EAAKE,SAGtD,IAAKH"}
@@ -0,0 +1,51 @@
1
+ import type { StaticHandler } from 'react-router';
2
+ import type Diagnostics from '../services/diagnostics.js';
3
+ type TRenderMode = 'ssr' | 'spa';
4
+ interface ISsrPolicy {
5
+ mode?: 'all' | 'include' | 'exclude';
6
+ routes?: (string | RegExp)[];
7
+ bots?: 'ssr' | 'policy';
8
+ decide?: (params: {
9
+ request: Request;
10
+ url: URL;
11
+ isBot: boolean;
12
+ }) => TRenderMode | undefined;
13
+ }
14
+ interface IPolicyPattern {
15
+ pattern: string | RegExp;
16
+ exclude: boolean;
17
+ test: (pathname: string) => boolean;
18
+ }
19
+ /**
20
+ * Collect URL paths alongside their route ids without resolving lazy modules or loaders.
21
+ */
22
+ declare const routePaths: (routes: StaticHandler["dataRoutes"], parent?: string) => {
23
+ id: string;
24
+ path: string;
25
+ }[];
26
+ /**
27
+ * Snapshot environment policy when the application entry/handler is created at startup.
28
+ */
29
+ declare class SsrPolicy {
30
+ readonly active: boolean;
31
+ readonly basename: string;
32
+ protected readonly patterns: IPolicyPattern[];
33
+ protected readonly mode: NonNullable<ISsrPolicy['mode']>;
34
+ protected readonly bots: NonNullable<ISsrPolicy['bots']>;
35
+ protected readonly decide?: ISsrPolicy['decide'];
36
+ protected readonly source: string;
37
+ protected readonly paths: ReturnType<typeof routePaths>;
38
+ protected hasInspected: boolean;
39
+ constructor({ mode, routes, bots, decide }?: ISsrPolicy, dataRoutes?: StaticHandler['dataRoutes'], basename?: string, env?: string | undefined);
40
+ /**
41
+ * Explain typos using declared paths, including concrete URLs for dynamic route ids.
42
+ * A global 404 catch-all must not hide a misspelled policy.
43
+ */
44
+ protected inspect(diagnostics?: Diagnostics): void;
45
+ /**
46
+ * Crawler protection wins over both runtime decisions and environment rollback rules.
47
+ */
48
+ select(request: Request, diagnostics?: Diagnostics): TRenderMode;
49
+ }
50
+ export type { ISsrPolicy, TRenderMode };
51
+ export default SsrPolicy;
@@ -0,0 +1,2 @@
1
+ import{isbot as t}from"isbot";import{pathToRegexp as e}from"path-to-regexp";import{matchPath as s}from"react-router";const i=(t,s)=>{if(""===t)throw new Error("SSR route patterns cannot be empty.");const i="string"==typeof t?e(t).regexp:new RegExp(t.source,t.flags);return{pattern:t,exclude:s,test:t=>(i.lastIndex=0,i.test(t))}},r=(t,e="")=>t.flatMap(t=>{const s=(t.path?.startsWith("/")?t.path:`${e}/${t.path??""}`).replace(/\/+/g,"/").replace(/\/$/,"")||"/";return[{id:t.id,path:s},...r(t.children??[],s)]});class a{active;basename;patterns;mode;bots;decide;source;paths;hasInspected=!1;constructor({mode:t="all",routes:e=[],bots:s="ssr",decide:a}={},o=[],n="/",p=("undefined"==typeof process?void 0:process.env.SSR_BOOST_SSR_ROUTES)){if(this.basename=n,this.bots=s,this.paths=r(o).map(t=>({...t,path:`${n.replace(/\/$/,"")}${t.path}`})),void 0!==p){const t=p.split(",").map(t=>t.trim()).filter(Boolean);this.mode=t.length?t.some(t=>!t.startsWith("!"))?"include":"exclude":"all",this.patterns=t.map(t=>{const e=t.startsWith("!");return i(e?t.slice(1):t,e)}),this.source="SSR_BOOST_SSR_ROUTES"}else this.mode=t,this.patterns="all"===t?[]:e.map(e=>i(e,"exclude"===t)),this.decide=a,this.source="config";this.active="all"!==this.mode||Boolean(this.decide)}inspect(t){if(t&&!this.hasInspected){this.hasInspected=!0;for(const{pattern:e,test:i}of this.patterns){this.paths.some(({path:t})=>"/*"!==t&&(i(t)||"string"==typeof e&&Boolean(s(t,e))))||t.policyUnmatched(String(e))}}}select(e,i){if(!this.active)return"ssr";this.inspect(i);const r=new URL(e.url),a=t(e.headers.get("user-agent")),o=this.patterns.filter(({test:t})=>t(r.pathname)),n=o.find(({exclude:t})=>t);let p=n||"include"===this.mode&&!o.length?"spa":"ssr",h=`${this.source} ${this.mode}`;if(a&&"ssr"===this.bots)p="ssr",h="bots: ssr";else{const t=this.decide?.({request:e,url:r,isBot:a});void 0!==t&&(p=t,h="config decide")}const c=n?.pattern??o[0]?.pattern??[...this.paths].reverse().find(({path:t})=>s(t,r.pathname))?.path??"(unmatched URL)";return i?.policyDecision(String(c),p,h),p}}export{a as default};
2
+ //# sourceMappingURL=ssr-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr-policy.js","sources":["../../src/core/ssr-policy.ts"],"sourcesContent":[null],"names":["compilePattern","pattern","exclude","Error","regexp","pathToRegexp","RegExp","source","flags","test","pathname","lastIndex","routePaths","routes","parent","flatMap","route","path","startsWith","replace","id","children","SsrPolicy","active","basename","patterns","mode","bots","decide","paths","hasInspected","constructor","dataRoutes","env","process","undefined","SSR_BOOST_SSR_ROUTES","this","map","values","split","value","trim","filter","Boolean","length","some","isExcluded","slice","inspect","diagnostics","matchPath","policyUnmatched","String","select","request","url","URL","isBot","isbot","headers","get","matched","excluded","find","decision","reverse","policyDecision"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lomray/vite-ssr-boost",
3
- "version": "8.4.0-beta.1",
3
+ "version": "8.4.0-beta.2",
4
4
  "description": "SSR and streaming for existing Vite + React Router apps in Data mode, without Framework mode",
5
5
  "type": "module",
6
6
  "exports": {
@@ -77,8 +77,10 @@
77
77
  "devalue": "^5.9.2",
78
78
  "diff": "^9.0.0",
79
79
  "hoist-non-react-statics": "^3.3.2",
80
+ "isbot": "^5.2.2",
80
81
  "json5": "^2.2.3",
81
82
  "parse5": "^8.0.1",
83
+ "path-to-regexp": "^8.4.2",
82
84
  "semver": "^7.8.5"
83
85
  },
84
86
  "optionalDependencies": {
@@ -1,2 +1,2 @@
1
- import e from"../constants/plugin-name.js";import{getCurrentEntrypointName as t}from"./handle-custom-entrypoint.js";const n=`${e}-create-spa-entrypoint`;function o(e={}){const{filename:o="index-spa.html",rootId:a="root"}=e;let r="";return{name:n,enforce:"post",apply:(e,{command:n,isSsrBuild:o})=>"build"===n&&!o&&!t(),transformIndexHtml:e=>(r=e.replace(`id="${a}"`,`id="${a}" data-force-spa="1"`),e),generateBundle(){r&&this.emitFile({type:"asset",fileName:o,source:r})}}}export{o as default};
1
+ import t from"../constants/plugin-name.js";import e from"../core/spa-html.js";import{getCurrentEntrypointName as o}from"./handle-custom-entrypoint.js";const n=`${t}-create-spa-entrypoint`;function r(t={}){const{filename:r="index-spa.html",rootId:s="root"}=t;let m="";return{name:n,enforce:"post",apply:(t,{command:e,isSsrBuild:n})=>"build"===e&&!n&&!o(),transformIndexHtml:t=>(m=e(t,s),t),generateBundle(){m&&this.emitFile({type:"asset",fileName:r,source:m})}}}export{r as default};
2
2
  //# sourceMappingURL=create-spa-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-spa-index.js","sources":["../../src/plugins/create-spa-index.ts"],"sourcesContent":[null],"names":["pluginName","PLUGIN_NAME","ViteCreateSPAIndexPlugin","options","filename","rootId","spaHtml","name","enforce","apply","_","command","isSsrBuild","getCurrentEntrypointName","transformIndexHtml","html","replace","generateBundle","this","emitFile","type","fileName","source"],"mappings":"oHASA,MAAMA,EAAa,GAAGC,0BAStB,SAASC,EAAyBC,EAA0B,IAC1D,MAAMC,SAAEA,EAAW,iBAAgBC,OAAEA,EAAS,QAAWF,EACzD,IAAIG,EAAU,GAEd,MAAO,CACLC,KAAMP,EACNQ,QAAS,OAITC,MAAK,CAACC,GAAGC,QAAEA,EAAOC,WAAEA,KACC,UAAZD,IAAwBC,IAAeC,IAEhDC,mBAAmBC,IACjBT,EAAUS,EAAKC,QAAQ,OAAOX,KAAW,OAAOA,yBAEzCU,GAET,cAAAE,GACOX,GAILY,KAAKC,SAAS,CACZC,KAAM,QACNC,SAAUjB,EACVkB,OAAQhB,GAEZ,EAEJ"}
1
+ {"version":3,"file":"create-spa-index.js","sources":["../../src/plugins/create-spa-index.ts"],"sourcesContent":[null],"names":["pluginName","PLUGIN_NAME","ViteCreateSPAIndexPlugin","options","filename","rootId","spaHtml","name","enforce","apply","_","command","isSsrBuild","getCurrentEntrypointName","transformIndexHtml","html","createSpaHtml","generateBundle","this","emitFile","type","fileName","source"],"mappings":"uJAUA,MAAMA,EAAa,GAAGC,0BAStB,SAASC,EAAyBC,EAA0B,IAC1D,MAAMC,SAAEA,EAAW,iBAAgBC,OAAEA,EAAS,QAAWF,EACzD,IAAIG,EAAU,GAEd,MAAO,CACLC,KAAMP,EACNQ,QAAS,OAITC,MAAK,CAACC,GAAGC,QAAEA,EAAOC,WAAEA,KACC,UAAZD,IAAwBC,IAAeC,IAEhDC,mBAAmBC,IACjBT,EAAUU,EAAcD,EAAMV,GAEvBU,GAET,cAAAE,GACOX,GAILY,KAAKC,SAAS,CACZC,KAAM,QACNC,SAAUjB,EACVkB,OAAQhB,GAEZ,EAEJ"}
@@ -1,6 +1,6 @@
1
1
  import type { StaticHandlerContext } from 'react-router';
2
2
  import Logger from './logger.js';
3
- type TDiagnosticCode = 'SSR_BOOST_CACHE_PRIVATE_LEAK' | 'SSR_BOOST_DEPRECATED_REQ_RES' | 'SSR_BOOST_LOADER_NOT_SERIALIZABLE' | 'SSR_BOOST_STREAM_PROMISE_ABORTED' | 'SSR_BOOST_STATE_NOT_SERIALIZABLE' | 'SSR_BOOST_OUTLET_MISSING' | 'SSR_BOOST_HYDRATION_STATE_MISSING' | 'SSR_BOOST_DUPLICATE_OUTPUT' | 'SSR_BOOST_ONRESPONSE_INVALID_RETURN';
3
+ type TDiagnosticCode = 'SSR_BOOST_CACHE_PRIVATE_LEAK' | 'SSR_BOOST_DEPRECATED_REQ_RES' | 'SSR_BOOST_SSR_POLICY' | 'SSR_BOOST_SSR_POLICY_UNMATCHED' | 'SSR_BOOST_LOADER_NOT_SERIALIZABLE' | 'SSR_BOOST_STREAM_PROMISE_ABORTED' | 'SSR_BOOST_STATE_NOT_SERIALIZABLE' | 'SSR_BOOST_OUTLET_MISSING' | 'SSR_BOOST_HYDRATION_STATE_MISSING' | 'SSR_BOOST_DUPLICATE_OUTPUT' | 'SSR_BOOST_ONRESPONSE_INVALID_RETURN';
4
4
  interface ISerializationIssue {
5
5
  path: string;
6
6
  reason: string;
@@ -27,15 +27,23 @@ declare const walkSerializable: (value: unknown, report: (issue: ISerializationI
27
27
  */
28
28
  declare class Diagnostics {
29
29
  protected readonly route: string;
30
- protected readonly logger: Pick<Logger, 'warn'>;
30
+ protected readonly logger: Pick<Logger, 'warn'> & Partial<Pick<Logger, 'info'>>;
31
31
  protected chunks: string[];
32
- constructor(route: string, logger?: Pick<Logger, 'warn'>);
32
+ constructor(route: string, logger?: Pick<Logger, 'warn'> & Partial<Pick<Logger, 'info'>>);
33
33
  /**
34
34
  * Emit each concrete message once per process, including across handler instances.
35
35
  */
36
36
  protected warn(code: TDiagnosticCode, detail: string): void;
37
37
  /** Warn once for either legacy Express field, regardless of route or hook. */
38
38
  deprecatedReqRes(): void;
39
+ /**
40
+ * Report policy choices without logging concrete parameter, cookie or query values.
41
+ */
42
+ policyDecision(pattern: string, mode: string, source: string): void;
43
+ /**
44
+ * Warn once for a configured pattern with no corresponding route id.
45
+ */
46
+ policyUnmatched(pattern: string): void;
39
47
  /**
40
48
  * A split Fetch shell has one insertion boundary and must not retain raw outlets.
41
49
  */
@@ -1,2 +1,2 @@
1
- import t from"./logger.js";const e="\x3c!--ssr-outlet--\x3e",o="window.__staticRouterHydrationData",s=Symbol.for("@lomray/vite-ssr-boost/diagnostics"),r=globalThis,n=t=>{const e="undefined"==typeof process?void 0:process.env;return"0"===e?.SSR_BOOST_DIAGNOSTICS||"1"===e?.SSR_BOOST_DIAGNOSTICS?"1"===e.SSR_BOOST_DIAGNOSTICS:t??"production"!==e?.NODE_ENV},i=(t,e)=>`[ssr-boost] ${t}: ${e} See https://lomray-software.github.io/vite-ssr-boost/reference/diagnostics#${t.toLowerCase()}`,a=(t,o,s=e)=>{const r=t.split(s);if(!s||2!==r.length)throw new Error(i("SSR_BOOST_OUTLET_MISSING",`Invalid HTML shell in ${JSON.stringify(o)}: expected exactly one non-empty outlet ${JSON.stringify(s)}.`));return r},c=t=>{if(null===t)return"null";if("object"!=typeof t){return{bigint:"BigInt",symbol:"Symbol"}[typeof t]??typeof t}const e=Object.getPrototypeOf(t),o=e?.constructor?.name;return"string"==typeof o&&o?o:"object"},S=(t,e,o="$",s=new Set,r=!1)=>{const n=typeof t;if(r&&(t instanceof Promise||t instanceof Date||t instanceof RegExp||"bigint"===n))return;if("function"===n||"bigint"===n||"symbol"===n)return void e({path:o,reason:`${c(t)} is not JSON-serializable`});if(null===t||"object"!==n)return;const i=t,a=Object.getPrototypeOf(i);if(!(r&&(i instanceof Map||i instanceof Set)||a===Object.prototype||null===a||Array.isArray(i)&&a===Array.prototype)){const t=c(i);return void e({path:o,reason:"Date"===t?"Date hydrates as a string":`${t} is not JSON-serializable`})}if(s.has(i))return void e({path:o,reason:"a circular reference is not JSON-serializable"});s.add(i);const f=r&&i instanceof Map?[...i].flatMap(([t,e],o)=>[[`${o}.key`,t],[`${o}.value`,e]]):r&&i instanceof Set?[...i].map((t,e)=>[String(e),t]):Object.entries(i);for(const[t,n]of f){const a=Array.isArray(i)&&/^(0|[1-9]\d*)$/.test(t)?`[${t}]`:/^[A-Za-z_$][\w$]*$/.test(t)?`.${t}`:`[${JSON.stringify(t)}]`;S(n,e,o+a,s,r)}s.delete(i)};class f{route;logger;chunks=[];constructor(e,o=new t){this.route=e,this.logger=o}warn(t,e){const o=i(t,e),n=r[s]??=new Set;n.has(o)||(n.add(o),this.logger.warn(o,{}))}deprecatedReqRes(){this.warn("SSR_BOOST_DEPRECATED_REQ_RES","context.req and context.res are deprecated in 8.x and planned for removal in 9.0; use context.request, context.response.headers/context.response.status and React Router HTTP helpers such as redirect().")}inspectShell({header:t,footer:o}){("string"!=typeof t||"string"!=typeof o||t.includes(e)||o.includes(e))&&this.warn("SSR_BOOST_OUTLET_MISSING",`HTML shell for route ${JSON.stringify(this.route)} must supply both header and footer around exactly one ${e} outlet, with no outlet left in either half.`)}inspectCachePolicy(t,e){/(?:^|,)\s*public\s*(?:,|$)/i.test(t.get("Cache-Control")??"")&&(t.has("Set-Cookie")||e)&&this.warn("SSR_BOOST_CACHE_PRIVATE_LEAK",`Response for route ${JSON.stringify(this.route)} is public with Set-Cookie or a session cookie. Use private, no-store and bypass the shared cache for authenticated requests.`)}inspectRouterState({loaderData:t,actionData:e}){for(const[o,s]of Object.entries({loaderData:t,actionData:e}))for(const[t,e]of Object.entries(s??{}))S(e,({path:e,reason:o})=>this.warn("SSR_BOOST_LOADER_NOT_SERIALIZABLE",`Route ${JSON.stringify(t)} at ${e}: ${o}.`),`${o}[${JSON.stringify(t)}]`,new Set,!0)}streamAborted(t){this.warn("SSR_BOOST_STREAM_PROMISE_ABORTED",`Route ${JSON.stringify(this.route)} aborted with ${t} pending loader/action promise(s); the browser receives a rejection when connected.`)}inspectStreamValue(t,e){S(t,({path:t,reason:e})=>this.warn("SSR_BOOST_LOADER_NOT_SERIALIZABLE",`Route ${JSON.stringify(this.route)} at ${t}: ${e}.`),`promise[${e}]`,new Set,!0)}inspectState(t){S(t,({path:t,reason:e})=>this.warn("SSR_BOOST_STATE_NOT_SERIALIZABLE",`getState for route ${JSON.stringify(this.route)} at ${t}: ${e}.`))}inspectOnResponse(t){void 0!==t&&"string"!=typeof t&&this.warn("SSR_BOOST_ONRESPONSE_INVALID_RETURN",`onResponse for route ${JSON.stringify(this.route)} returned ${c(t)}; return a string or undefined.`)}append(t){this.chunks.push(t)}complete(){const t=this.chunks.join("");this.chunks=[];const e=new Map,s=t=>{e.set(t,(e.get(t)??0)+1)},r=t.replace(/<!--[\s\S]*?-->/g,"").replace(/(<(script|style|textarea|title)\b(?:[^"'<>]|"[^"]*"|'[^']*')*>)([\s\S]*?)<\/\2\s*>/gi,(t,e,r,n)=>{if("script"===r.toLowerCase()){/\bwindow\.__staticRouterHydrationData\s*=/.test(n)&&s(o);for(const t of n.matchAll(/\$RC\s*\(\s*(["'])(B:[^"']+)\1/g))s(`$RC("${t[2]}")`)}return e});for(const t of r.matchAll(/<([a-z][\w:-]*)\b((?:[^"'<>]|"[^"]*"|'[^']*')*)>/gi)){const e=t[1].toLowerCase();"html"!==e&&"head"!==e||s(`<${e}>`);for(const e of t[2].matchAll(/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/g)){const t=e[2]??e[3]??e[4];"id"===e[1].toLowerCase()&&/^(S|B):/.test(t)&&s(`id="${t}"`)}}e.has(o)||this.warn("SSR_BOOST_HYDRATION_STATE_MISSING",`Completed response for route ${JSON.stringify(this.route)} has no ${o} script; preserve the hydration footer in onResponse.`);for(const[t,o]of e)o>1&&this.warn("SSR_BOOST_DUPLICATE_OUTPUT",`Completed response for route ${JSON.stringify(this.route)} repeats ${t}; onResponse must return undefined to keep a chunk and '' to withhold one.`)}}export{f as default,i as formatDiagnostic,n as isDiagnosticsEnabled,a as splitHtmlShell,S as walkSerializable};
1
+ import t from"./logger.js";const e="\x3c!--ssr-outlet--\x3e",o="window.__staticRouterHydrationData",s=Symbol.for("@lomray/vite-ssr-boost/diagnostics"),r=globalThis,n=t=>{const e="undefined"==typeof process?void 0:process.env;return"0"===e?.SSR_BOOST_DIAGNOSTICS||"1"===e?.SSR_BOOST_DIAGNOSTICS?"1"===e.SSR_BOOST_DIAGNOSTICS:t??"production"!==e?.NODE_ENV},i=(t,e)=>`[ssr-boost] ${t}: ${e} See https://lomray-software.github.io/vite-ssr-boost/reference/diagnostics#${t.toLowerCase()}`,a=(t,o,s=e)=>{const r=t.split(s);if(!s||2!==r.length)throw new Error(i("SSR_BOOST_OUTLET_MISSING",`Invalid HTML shell in ${JSON.stringify(o)}: expected exactly one non-empty outlet ${JSON.stringify(s)}.`));return r},c=t=>{if(null===t)return"null";if("object"!=typeof t){return{bigint:"BigInt",symbol:"Symbol"}[typeof t]??typeof t}const e=Object.getPrototypeOf(t),o=e?.constructor?.name;return"string"==typeof o&&o?o:"object"},S=(t,e,o="$",s=new Set,r=!1)=>{const n=typeof t;if(r&&(t instanceof Promise||t instanceof Date||t instanceof RegExp||"bigint"===n))return;if("function"===n||"bigint"===n||"symbol"===n)return void e({path:o,reason:`${c(t)} is not JSON-serializable`});if(null===t||"object"!==n)return;const i=t,a=Object.getPrototypeOf(i);if(!(r&&(i instanceof Map||i instanceof Set)||a===Object.prototype||null===a||Array.isArray(i)&&a===Array.prototype)){const t=c(i);return void e({path:o,reason:"Date"===t?"Date hydrates as a string":`${t} is not JSON-serializable`})}if(s.has(i))return void e({path:o,reason:"a circular reference is not JSON-serializable"});s.add(i);const h=r&&i instanceof Map?[...i].flatMap(([t,e],o)=>[[`${o}.key`,t],[`${o}.value`,e]]):r&&i instanceof Set?[...i].map((t,e)=>[String(e),t]):Object.entries(i);for(const[t,n]of h){const a=Array.isArray(i)&&/^(0|[1-9]\d*)$/.test(t)?`[${t}]`:/^[A-Za-z_$][\w$]*$/.test(t)?`.${t}`:`[${JSON.stringify(t)}]`;S(n,e,o+a,s,r)}s.delete(i)};class h{route;logger;chunks=[];constructor(e,o=new t){this.route=e,this.logger=o}warn(t,e){const o=i(t,e),n=r[s]??=new Set;n.has(o)||(n.add(o),this.logger.warn(o,{}))}deprecatedReqRes(){this.warn("SSR_BOOST_DEPRECATED_REQ_RES","context.req and context.res are deprecated in 8.x and planned for removal in 9.0; use context.request, context.response.headers/context.response.status and React Router HTTP helpers such as redirect().")}policyDecision(t,e,o){const n=i("SSR_BOOST_SSR_POLICY",`Pattern ${JSON.stringify(t)} selects ${e} via ${o}.`),a=r[s]??=new Set;a.has(n)||(a.add(n),this.logger.info?.(n,{}))}policyUnmatched(t){this.warn("SSR_BOOST_SSR_POLICY_UNMATCHED",`Pattern ${JSON.stringify(t)} matches no known route id; check its URL path and router basename.`)}inspectShell({header:t,footer:o}){("string"!=typeof t||"string"!=typeof o||t.includes(e)||o.includes(e))&&this.warn("SSR_BOOST_OUTLET_MISSING",`HTML shell for route ${JSON.stringify(this.route)} must supply both header and footer around exactly one ${e} outlet, with no outlet left in either half.`)}inspectCachePolicy(t,e){/(?:^|,)\s*public\s*(?:,|$)/i.test(t.get("Cache-Control")??"")&&(t.has("Set-Cookie")||e)&&this.warn("SSR_BOOST_CACHE_PRIVATE_LEAK",`Response for route ${JSON.stringify(this.route)} is public with Set-Cookie or a session cookie. Use private, no-store and bypass the shared cache for authenticated requests.`)}inspectRouterState({loaderData:t,actionData:e}){for(const[o,s]of Object.entries({loaderData:t,actionData:e}))for(const[t,e]of Object.entries(s??{}))S(e,({path:e,reason:o})=>this.warn("SSR_BOOST_LOADER_NOT_SERIALIZABLE",`Route ${JSON.stringify(t)} at ${e}: ${o}.`),`${o}[${JSON.stringify(t)}]`,new Set,!0)}streamAborted(t){this.warn("SSR_BOOST_STREAM_PROMISE_ABORTED",`Route ${JSON.stringify(this.route)} aborted with ${t} pending loader/action promise(s); the browser receives a rejection when connected.`)}inspectStreamValue(t,e){S(t,({path:t,reason:e})=>this.warn("SSR_BOOST_LOADER_NOT_SERIALIZABLE",`Route ${JSON.stringify(this.route)} at ${t}: ${e}.`),`promise[${e}]`,new Set,!0)}inspectState(t){S(t,({path:t,reason:e})=>this.warn("SSR_BOOST_STATE_NOT_SERIALIZABLE",`getState for route ${JSON.stringify(this.route)} at ${t}: ${e}.`))}inspectOnResponse(t){void 0!==t&&"string"!=typeof t&&this.warn("SSR_BOOST_ONRESPONSE_INVALID_RETURN",`onResponse for route ${JSON.stringify(this.route)} returned ${c(t)}; return a string or undefined.`)}append(t){this.chunks.push(t)}complete(){const t=this.chunks.join("");this.chunks=[];const e=new Map,s=t=>{e.set(t,(e.get(t)??0)+1)},r=t.replace(/<!--[\s\S]*?-->/g,"").replace(/(<(script|style|textarea|title)\b(?:[^"'<>]|"[^"]*"|'[^']*')*>)([\s\S]*?)<\/\2\s*>/gi,(t,e,r,n)=>{if("script"===r.toLowerCase()){/\bwindow\.__staticRouterHydrationData\s*=/.test(n)&&s(o);for(const t of n.matchAll(/\$RC\s*\(\s*(["'])(B:[^"']+)\1/g))s(`$RC("${t[2]}")`)}return e});for(const t of r.matchAll(/<([a-z][\w:-]*)\b((?:[^"'<>]|"[^"]*"|'[^']*')*)>/gi)){const e=t[1].toLowerCase();"html"!==e&&"head"!==e||s(`<${e}>`);for(const e of t[2].matchAll(/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/g)){const t=e[2]??e[3]??e[4];"id"===e[1].toLowerCase()&&/^(S|B):/.test(t)&&s(`id="${t}"`)}}e.has(o)||this.warn("SSR_BOOST_HYDRATION_STATE_MISSING",`Completed response for route ${JSON.stringify(this.route)} has no ${o} script; preserve the hydration footer in onResponse.`);for(const[t,o]of e)o>1&&this.warn("SSR_BOOST_DUPLICATE_OUTPUT",`Completed response for route ${JSON.stringify(this.route)} repeats ${t}; onResponse must return undefined to keep a chunk and '' to withhold one.`)}}export{h as default,i as formatDiagnostic,n as isDiagnosticsEnabled,a as splitHtmlShell,S as walkSerializable};
2
2
  //# sourceMappingURL=diagnostics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sources":["../../src/services/diagnostics.ts"],"sourcesContent":[null],"names":["OUTLET","HYDRATION","warnedKey","Symbol","for","registry","globalThis","isDiagnosticsEnabled","enabled","env","process","undefined","SSR_BOOST_DIAGNOSTICS","NODE_ENV","formatDiagnostic","code","sentence","toLowerCase","splitHtmlShell","html","file","outlet","parts","split","length","Error","JSON","stringify","valueType","value","bigint","symbol","prototype","Object","getPrototypeOf","name","constructor","walkSerializable","report","path","ancestors","Set","streamed","type","Promise","Date","RegExp","reason","object","Map","Array","isArray","has","add","entries","flatMap","key","child","index","map","String","suffix","test","delete","Diagnostics","route","logger","chunks","Logger","this","warn","detail","message","warned","deprecatedReqRes","inspectShell","header","footer","includes","inspectCachePolicy","headers","hasSessionCookie","get","inspectRouterState","loaderData","actionData","kind","data","streamAborted","count","inspectStreamValue","id","inspectState","state","inspectOnResponse","append","push","complete","join","markers","marker","set","markup","replace","_tag","opening","content","match","matchAll","attribute","total"],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sources":["../../src/services/diagnostics.ts"],"sourcesContent":[null],"names":["OUTLET","HYDRATION","warnedKey","Symbol","for","registry","globalThis","isDiagnosticsEnabled","enabled","env","process","undefined","SSR_BOOST_DIAGNOSTICS","NODE_ENV","formatDiagnostic","code","sentence","toLowerCase","splitHtmlShell","html","file","outlet","parts","split","length","Error","JSON","stringify","valueType","value","bigint","symbol","prototype","Object","getPrototypeOf","name","constructor","walkSerializable","report","path","ancestors","Set","streamed","type","Promise","Date","RegExp","reason","object","Map","Array","isArray","has","add","entries","flatMap","key","child","index","map","String","suffix","test","delete","Diagnostics","route","logger","chunks","Logger","this","warn","detail","message","warned","deprecatedReqRes","policyDecision","pattern","mode","source","reported","info","policyUnmatched","inspectShell","header","footer","includes","inspectCachePolicy","headers","hasSessionCookie","get","inspectRouterState","loaderData","actionData","kind","data","streamAborted","count","inspectStreamValue","id","inspectState","state","inspectOnResponse","append","push","complete","join","markers","marker","set","markup","replace","_tag","opening","content","match","matchAll","attribute","total"],"mappings":"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"}
@@ -21,6 +21,8 @@ interface IInjectAssetsContext {
21
21
  header: string;
22
22
  };
23
23
  routerContext?: StaticHandlerContext;
24
+ matches?: RouterState['matches'];
25
+ isSpa?: boolean;
24
26
  }
25
27
  /**
26
28
  * Load and inject route assets with an independent cache for one build.
@@ -49,7 +51,7 @@ declare class RouteAssets {
49
51
  /**
50
52
  * Get route assets
51
53
  */
52
- protected getAssets(routes?: RouterState['matches']): IAsset[];
54
+ protected getAssets(routes?: RouterState['matches'], _isSpa?: boolean): IAsset[];
53
55
  /**
54
56
  * Build preload hints without depending on a particular HTTP transport.
55
57
  */
@@ -57,7 +59,7 @@ declare class RouteAssets {
57
59
  /**
58
60
  * Inject route assets to head html
59
61
  */
60
- injectAssets({ routerContext, html }: IInjectAssetsContext): Headers;
62
+ injectAssets({ routerContext, matches, html, isSpa }: IInjectAssetsContext): Headers;
61
63
  }
62
64
  export { AssetType };
63
65
  export type { IAsset, TAssets };
@@ -1,2 +1,2 @@
1
- import e from"node:fs";import t from"node:path";var s;!function(e){e.style="style",e.script="script",e.image="image",e.font="font"}(s||(s={}));class r{outputDir;modulePreload;routesAssets=null;constructor(e,s=!1){this.outputDir=t.resolve(e),this.modulePreload=s}get isDev(){return!1}getAssetsManifestFile(){return t.join(this.outputDir,"server","assets-manifest.json")}loadAssetsManifest(){if(null!==this.routesAssets)return this.routesAssets;const t=this.getAssetsManifestFile();return e.existsSync(t)?(this.routesAssets=JSON.parse(e.readFileSync(t,{encoding:"utf-8"})),this.routesAssets):{}}sortAssets(e){return e.sort((e,t)=>e.weight===t.weight?Number(e.isNested)-Number(t.isNested):e.weight-t.weight)}getAssets(e){const t=e?.map(({route:e})=>e.id).filter(Boolean)??[];if(!t.length)return[];const s=this.loadAssetsManifest();return this.sortAssets(t.map(e=>s[e]).flat().filter(Boolean))}getEarlyHints(e){const t=new Headers;return e.forEach(({type:e,url:s})=>{e&&["style","script"].includes(e)&&t.append("Link",`<${s}>; rel=preload; as=${e}`)}),t}injectAssets({routerContext:e,html:t}){const r=this.getAssets(e?.matches),i=r.map(({type:e,url:t,isPreload:r,content:i=""})=>{switch(e){case s.style:return this.isDev?`<style data-vite-dev-id="${t}">${i}</style>`:`<link rel="stylesheet" href="${t}">`;case s.script:return r?this.modulePreload?`<link rel="modulepreload" as="script" crossorigin href="${t}">`:null:`<script async type="module" crossorigin src="${t}"><\/script>`}return null}).filter(Boolean);return t.header=t.header.replace("</head>",`${i.join("\n")}</head>`),this.getEarlyHints(r)}}export{s as AssetType,r as default};
1
+ import e from"node:fs";import s from"node:path";var t;!function(e){e.style="style",e.script="script",e.image="image",e.font="font"}(t||(t={}));class r{outputDir;modulePreload;routesAssets=null;constructor(e,t=!1){this.outputDir=s.resolve(e),this.modulePreload=t}get isDev(){return!1}getAssetsManifestFile(){return s.join(this.outputDir,"server","assets-manifest.json")}loadAssetsManifest(){if(null!==this.routesAssets)return this.routesAssets;const s=this.getAssetsManifestFile();return e.existsSync(s)?(this.routesAssets=JSON.parse(e.readFileSync(s,{encoding:"utf-8"})),this.routesAssets):{}}sortAssets(e){return e.sort((e,s)=>e.weight===s.weight?Number(e.isNested)-Number(s.isNested):e.weight-s.weight)}getAssets(e,s){const t=e?.map(({route:e})=>e.id).filter(Boolean)??[];if(!t.length)return[];const r=this.loadAssetsManifest();return this.sortAssets(t.map(e=>r[e]).flat().filter(Boolean))}getEarlyHints(e){const s=new Headers;return e.forEach(({type:e,url:t})=>{e&&["style","script"].includes(e)&&s.append("Link",`<${t}>; rel=preload; as=${e}`)}),s}injectAssets({routerContext:e,matches:s,html:r,isSpa:i}){const o=this.getAssets(s??e?.matches,i),n=o.map(({type:e,url:s,isPreload:r,content:o=""})=>{switch(e){case t.style:return this.isDev?`<style data-vite-dev-id="${s}">${o}</style>`:`<link rel="stylesheet" href="${s}">`;case t.script:return r?this.modulePreload||i?`<link rel="modulepreload" as="script" crossorigin href="${s}">`:null:`<script async type="module" crossorigin src="${s}"><\/script>`}return null}).filter(Boolean);return r.header=r.header.replace("</head>",`${n.join("\n")}</head>`),this.getEarlyHints(o)}}export{t as AssetType,r as default};
2
2
  //# sourceMappingURL=route-assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-assets.js","sources":["../../src/services/route-assets.ts"],"sourcesContent":[null],"names":["AssetType","RouteAssets","outputDir","modulePreload","routesAssets","constructor","buildDir","this","path","resolve","isDev","getAssetsManifestFile","join","loadAssetsManifest","manifestFile","fs","existsSync","JSON","parse","readFileSync","encoding","sortAssets","assets","sort","a","b","weight","Number","isNested","getAssets","routes","routeIds","map","route","id","filter","Boolean","length","routeId","flat","getEarlyHints","headers","Headers","forEach","type","url","includes","append","injectAssets","routerContext","html","matches","htmlAssets","isPreload","content","style","script","header","replace"],"mappings":"gDAIA,IAAKA,GAAL,SAAKA,GACHA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,KAAA,MACD,CALD,CAAKA,IAAAA,EAAS,CAAA,IA4Bd,MAAMC,EACeC,UAEAC,cAETC,aAAgD,KAE1D,WAAAC,CAAYC,EAAkBH,GAAgB,GAC5CI,KAAKL,UAAYM,EAAKC,QAAQH,GAC9BC,KAAKJ,cAAgBA,CACvB,CAKA,SAAcO,GACZ,OAAO,CACT,CAKU,qBAAAC,GACR,OAAOH,EAAKI,KAAKL,KAAKL,UAAW,SAAU,uBAC7C,CAKU,kBAAAW,GACR,GAA0B,OAAtBN,KAAKH,aACP,OAAOG,KAAKH,aAGd,MAAMU,EAAeP,KAAKI,wBAE1B,OAAKI,EAAGC,WAAWF,IAInBP,KAAKH,aAAea,KAAKC,MAAMH,EAAGI,aAAaL,EAAc,CAAEM,SAAU,WAKlEb,KAAKH,cARH,CAAA,CASX,CAKU,UAAAiB,CAAWC,GACnB,OAAOA,EAAOC,KAAK,CAACC,EAAGC,IACrBD,EAAEE,SAAWD,EAAEC,OAASC,OAAOH,EAAEI,UAAYD,OAAOF,EAAEG,UAAYJ,EAAEE,OAASD,EAAEC,OAEnF,CAKU,SAAAG,CAAUC,GAClB,MAAMC,EAAWD,GAAQE,IAAI,EAAGC,WAAYA,EAAMC,IAAIC,OAAOC,UAAY,GAEzE,IAAKL,EAASM,OACZ,MAAO,GAGT,MAAMjC,EAAeG,KAAKM,qBAE1B,OAAON,KAAKc,WACVU,EACGC,IAAKM,GAAYlC,EAAakC,IAC9BC,OACAJ,OAAOC,SAEd,CAKO,aAAAI,CAAclB,GACnB,MAAMmB,EAAU,IAAIC,QAUpB,OARApB,EAAOqB,QAAQ,EAAGC,OAAMC,UACjBD,GAAS,CAAC,QAAS,UAAUE,SAASF,IAI3CH,EAAQM,OAAO,OAAQ,IAAIF,uBAAyBD,OAG/CH,CACT,CAKO,YAAAO,EAAaC,cAAEA,EAAaC,KAAEA,IACnC,MAAM5B,EAASf,KAAKsB,UAAUoB,GAAeE,SACvCC,EAAa9B,EAChBU,IAAI,EAAGY,OAAMC,MAAKQ,YAAWC,UAAU,OACtC,OAAQV,GACN,KAAK5C,EAAUuD,MACb,OAAOhD,KAAKG,MACR,4BAA4BmC,MAAQS,YACpC,gCAAgCT,MAEtC,KAAK7C,EAAUwD,OACb,OAAOH,EACH9C,KAAKJ,cAEH,2DAA2D0C,MAC3D,KACF,gDAAgDA,gBAGxD,OAAO,OAERV,OAAOC,SAIV,OAFAc,EAAKO,OAASP,EAAKO,OAAOC,QAAQ,UAAW,GAAGN,EAAWxC,KAAK,gBAEzDL,KAAKiC,cAAclB,EAC5B"}
1
+ {"version":3,"file":"route-assets.js","sources":["../../src/services/route-assets.ts"],"sourcesContent":[null],"names":["AssetType","RouteAssets","outputDir","modulePreload","routesAssets","constructor","buildDir","this","path","resolve","isDev","getAssetsManifestFile","join","loadAssetsManifest","manifestFile","fs","existsSync","JSON","parse","readFileSync","encoding","sortAssets","assets","sort","a","b","weight","Number","isNested","getAssets","routes","_isSpa","routeIds","map","route","id","filter","Boolean","length","routeId","flat","getEarlyHints","headers","Headers","forEach","type","url","includes","append","injectAssets","routerContext","matches","html","isSpa","htmlAssets","isPreload","content","style","script","header","replace"],"mappings":"gDAIA,IAAKA,GAAL,SAAKA,GACHA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,KAAA,MACD,CALD,CAAKA,IAAAA,EAAS,CAAA,IA8Bd,MAAMC,EACeC,UAEAC,cAETC,aAAgD,KAE1D,WAAAC,CAAYC,EAAkBH,GAAgB,GAC5CI,KAAKL,UAAYM,EAAKC,QAAQH,GAC9BC,KAAKJ,cAAgBA,CACvB,CAKA,SAAcO,GACZ,OAAO,CACT,CAKU,qBAAAC,GACR,OAAOH,EAAKI,KAAKL,KAAKL,UAAW,SAAU,uBAC7C,CAKU,kBAAAW,GACR,GAA0B,OAAtBN,KAAKH,aACP,OAAOG,KAAKH,aAGd,MAAMU,EAAeP,KAAKI,wBAE1B,OAAKI,EAAGC,WAAWF,IAInBP,KAAKH,aAAea,KAAKC,MAAMH,EAAGI,aAAaL,EAAc,CAAEM,SAAU,WAKlEb,KAAKH,cARH,CAAA,CASX,CAKU,UAAAiB,CAAWC,GACnB,OAAOA,EAAOC,KAAK,CAACC,EAAGC,IACrBD,EAAEE,SAAWD,EAAEC,OAASC,OAAOH,EAAEI,UAAYD,OAAOF,EAAEG,UAAYJ,EAAEE,OAASD,EAAEC,OAEnF,CAOU,SAAAG,CAAUC,EAAiCC,GACnD,MAAMC,EAAWF,GAAQG,IAAI,EAAGC,WAAYA,EAAMC,IAAIC,OAAOC,UAAY,GAEzE,IAAKL,EAASM,OACZ,MAAO,GAGT,MAAMlC,EAAeG,KAAKM,qBAE1B,OAAON,KAAKc,WACVW,EACGC,IAAKM,GAAYnC,EAAamC,IAC9BC,OACAJ,OAAOC,SAEd,CAKO,aAAAI,CAAcnB,GACnB,MAAMoB,EAAU,IAAIC,QAUpB,OARArB,EAAOsB,QAAQ,EAAGC,OAAMC,UACjBD,GAAS,CAAC,QAAS,UAAUE,SAASF,IAI3CH,EAAQM,OAAO,OAAQ,IAAIF,uBAAyBD,OAG/CH,CACT,CAKO,YAAAO,EAAaC,cAAEA,EAAaC,QAAEA,EAAOC,KAAEA,EAAIC,MAAEA,IAClD,MAAM/B,EAASf,KAAKsB,UAAUsB,GAAWD,GAAeC,QAASE,GAC3DC,EAAahC,EAChBW,IAAI,EAAGY,OAAMC,MAAKS,YAAWC,UAAU,OACtC,OAAQX,GACN,KAAK7C,EAAUyD,MACb,OAAOlD,KAAKG,MACR,4BAA4BoC,MAAQU,YACpC,gCAAgCV,MAEtC,KAAK9C,EAAU0D,OACb,OAAOH,EACHhD,KAAKJ,eAAiBkD,EAEpB,2DAA2DP,MAC3D,KACF,gDAAgDA,gBAGxD,OAAO,OAERV,OAAOC,SAIV,OAFAe,EAAKO,OAASP,EAAKO,OAAOC,QAAQ,UAAW,GAAGN,EAAW1C,KAAK,gBAEzDL,KAAKkC,cAAcnB,EAC5B"}
@@ -99,7 +99,11 @@ declare class SsrManifest extends RouteAssets {
99
99
  /**
100
100
  * Get route assets from Vite in development or the built manifest in production.
101
101
  */
102
- protected getAssets(routes?: RouterState['matches']): IAsset[];
102
+ protected getAssets(routes?: RouterState['matches'], isSpa?: boolean): IAsset[];
103
+ /**
104
+ * Resolve structural route metadata without importing the server's lazy component.
105
+ */
106
+ protected getDevRouteIds(routes?: RouterState['matches']): string[];
103
107
  /**
104
108
  * Get development route assets
105
109
  */
@@ -107,11 +111,11 @@ declare class SsrManifest extends RouteAssets {
107
111
  /**
108
112
  * Compile SSR graph styles before the browser has populated the client graph.
109
113
  */
110
- prepareDevAssets(routes?: RouterState['matches']): Promise<void>;
114
+ prepareDevAssets(routes?: RouterState['matches'], isSpa?: boolean): Promise<void>;
111
115
  /**
112
116
  * Collect development assets from the current server and client module graphs.
113
117
  */
114
- protected getAssetsDev(routes?: RouterState['matches']): IAsset[];
118
+ protected getAssetsDev(routes?: RouterState['matches'], isSpa?: boolean): IAsset[];
115
119
  /**
116
120
  * Get module assets
117
121
  */
@@ -1,2 +1,2 @@
1
- import e from"node:fs";import s from"node:path";import t from"chalk";import i from"./parse-routes.js";import r from"./path-normalize.js";import o,{AssetType as a}from"./route-assets.js";class n extends o{static instance=null;config;pathNormalize;root;buildDir;manifestName="manifest.json";viteAliases;basename;renderBuiltUrl;constructor(e,{buildDir:t,viteAliases:i,basename:o,renderBuiltUrl:a}={}){super(s.resolve(e.getParams().root,t||""),e.isModulePreload),this.config=e,this.root=e.getParams().root,this.buildDir=t,this.viteAliases=i??e.getVite()?.config?.resolve.alias,this.pathNormalize=new r(e,i),this.basename=o,this.renderBuiltUrl=a}static get(e,s={}){return null===n.instance&&(n.instance=new n(e,s)),n.instance}get isDev(){return Boolean(this.config.getVite())}getOutDir(){return s.resolve(this.root,this.buildDir||"")}getAssetsManifestFile(){return`${this.getOutDir()}/server/assets-manifest.json`}loadClientManifest(){const t=s.resolve(this.root,`${this.buildDir||""}/client/.vite`),i=`${t}/${this.manifestName}`;if(!e.existsSync(i))return{};const r=JSON.parse(e.readFileSync(i,{encoding:"utf-8"}));return e.rmSync(i),0===e.readdirSync(t).length&&e.rmSync(t,{recursive:!0}),r}getRoutesTreeIds(e,s){const t={};return e.forEach(e=>{const i=[s,String(e.index)].filter(Boolean).join("-"),r=e.id??i;e.import&&(t[r]=this.pathNormalize.getAppPath(e.import)),e.children.length>0&&Object.assign(t,this.getRoutesTreeIds(e.children,i))}),t}getRouteAssets(e,t,i=!1){const r=[...t?.assets??[],...t?.css??[],t?.file].reduce((e,r)=>{if(r){const o=this.getAssetType(r),a=t.isEntry&&t.file===r;if(o){const t=s.posix.normalize(`${this.basename}/${r}`),n=this.renderBuiltUrl?.(t,{type:"asset",ssr:!0,hostId:"",hostType:t.split(".").at(-1)?.toLowerCase()});e[r]={url:"string"==typeof n?n:t,weight:a?1.9:this.getAssetWeight(r),type:o,isNested:i,isPreload:!a}}}return e},{});return t?.imports?.length&&t.imports.forEach(s=>{const t=e[s];t&&Object.assign(r,this.getRouteAssets(e,t,!0))}),r}buildRoutesManifest(){const s=this.loadClientManifest(),t=new i(this.config,this.viteAliases),r=this.getRoutesTreeIds(t.parse()),o=this.pathNormalize.getImportPostfix(),a={};Object.entries(r).forEach(([e,t])=>{const i=o.find(e=>void 0!==s[`${t}${e}`]),r=s[`${t}${i||""}`];a[e]=this.sortAssets(Object.values(this.getRouteAssets(s,r)))}),e.writeFileSync(this.getAssetsManifestFile(),JSON.stringify(a,null,2),{encoding:"utf-8"})}getAssets(e){return this.isDev?this.getAssetsDev(e):super.getAssets(e)}getDevModules(e){const t=e?.map(({route:e})=>this.pathNormalize.getAppPath(e?.pathId,!0)).filter(Boolean)??[],i=this.pathNormalize.getImportPostfix(),r=this.config.getPluginConfig(),o=[r?.clientFile??"client.ts",r?.serverFile??"server.ts"].map(e=>s.resolve(this.root,e)),a=[];return[...o,...t].forEach(e=>{for(const s of i){const t=this.config.getVite()?.moduleGraph.getModuleById(`${e}${s}`);if(t){a.push(t);break}}}),a}async prepareDevAssets(e){const s=this.config.getVite();if(!s)return;const t=new Set,i=async e=>{t.has(e.url)||(t.add(e.url),e.file&&/\.(?:css|less|s[ac]ss|styl(?:us)?|pcss|postcss)$/.test(e.file)&&await s.transformRequest(e.url),await Promise.all([...e.importedModules].map(i)))};await Promise.all(this.getDevModules(e).map(i))}getAssetsDev(e){const s=Object.assign({},...this.getDevModules(e).map(e=>this.getModuleAssets(e)));return Object.values(s)}getModuleAssets(e,s=new Set){const i=e?.importedModules??e?.clientImportedModules;if(!i?.size||s.has(e.file))return{};let r={};return s.add(e.file),i.forEach(e=>{const{file:i,transformResult:o}=e,n=i?.split(".").at(-1);if(i&&n&&["css","scss","sass","less","styl","stylus","pcss","postcss"].includes(n)){const e=o?.code.match(/__vite__css\s+=\s+"(?<css>.+)"/)?.groups?.css;if(e)try{r[i]={type:a.style,url:i,weight:this.getAssetWeight(i),content:JSON.parse(`{"style": "${e}"}`).style,isNested:Boolean(s.size),isPreload:!1}}catch{console.warn(t.yellowBright("Failed to parse style: ",i))}}else r={...r,...this.getModuleAssets(e,s)}}),r}getAssetWeight(e){switch(this.getAssetType(e)){case a.style:return 1;case a.script:return 2;default:return 3}}getAssetType(e){const s=e.split(".").at(-1)?.toLowerCase();switch(s){case"css":case"scss":return a.style;case"js":return a.script;case"svg":case"jpg":case"jpeg":case"png":case"webp":case"gif":case"ico":return a.image;case"ttf":case"otf":case"woff":case"woff2":return a.font;default:return null}}}export{n as default};
1
+ import e from"node:fs";import t from"node:path";import s from"chalk";import i from"./parse-routes.js";import r from"./path-normalize.js";import o,{AssetType as a}from"./route-assets.js";class n extends o{static instance=null;config;pathNormalize;root;buildDir;manifestName="manifest.json";viteAliases;basename;renderBuiltUrl;constructor(e,{buildDir:s,viteAliases:i,basename:o,renderBuiltUrl:a}={}){super(t.resolve(e.getParams().root,s||""),e.isModulePreload),this.config=e,this.root=e.getParams().root,this.buildDir=s,this.viteAliases=i??e.getVite()?.config?.resolve.alias,this.pathNormalize=new r(e,i),this.basename=o,this.renderBuiltUrl=a}static get(e,t={}){return null===n.instance&&(n.instance=new n(e,t)),n.instance}get isDev(){return Boolean(this.config.getVite())}getOutDir(){return t.resolve(this.root,this.buildDir||"")}getAssetsManifestFile(){return`${this.getOutDir()}/server/assets-manifest.json`}loadClientManifest(){const s=t.resolve(this.root,`${this.buildDir||""}/client/.vite`),i=`${s}/${this.manifestName}`;if(!e.existsSync(i))return{};const r=JSON.parse(e.readFileSync(i,{encoding:"utf-8"}));return e.rmSync(i),0===e.readdirSync(s).length&&e.rmSync(s,{recursive:!0}),r}getRoutesTreeIds(e,t){const s={};return e.forEach(e=>{const i=[t,String(e.index)].filter(Boolean).join("-"),r=e.id??i;e.import&&(s[r]=this.pathNormalize.getAppPath(e.import)),e.children.length>0&&Object.assign(s,this.getRoutesTreeIds(e.children,i))}),s}getRouteAssets(e,s,i=!1){const r=[...s?.assets??[],...s?.css??[],s?.file].reduce((e,r)=>{if(r){const o=this.getAssetType(r),a=s.isEntry&&s.file===r;if(o){const s=t.posix.normalize(`${this.basename}/${r}`),n=this.renderBuiltUrl?.(s,{type:"asset",ssr:!0,hostId:"",hostType:s.split(".").at(-1)?.toLowerCase()});e[r]={url:"string"==typeof n?n:s,weight:a?1.9:this.getAssetWeight(r),type:o,isNested:i,isPreload:!a}}}return e},{});return s?.imports?.length&&s.imports.forEach(t=>{const s=e[t];s&&Object.assign(r,this.getRouteAssets(e,s,!0))}),r}buildRoutesManifest(){const t=this.loadClientManifest(),s=new i(this.config,this.viteAliases),r=this.getRoutesTreeIds(s.parse()),o=this.pathNormalize.getImportPostfix(),a={};Object.entries(r).forEach(([e,s])=>{const i=o.find(e=>void 0!==t[`${s}${e}`]),r=t[`${s}${i||""}`];a[e]=this.sortAssets(Object.values(this.getRouteAssets(t,r)))}),e.writeFileSync(this.getAssetsManifestFile(),JSON.stringify(a,null,2),{encoding:"utf-8"})}getAssets(e,t){return this.isDev?this.getAssetsDev(e,t):super.getAssets(e)}getDevRouteIds(e){return e?.map(({route:e})=>this.pathNormalize.getAppPath(e?.pathId,!0)).filter(Boolean)??[]}getDevModules(e){const s=this.getDevRouteIds(e),i=this.pathNormalize.getImportPostfix(),r=this.config.getPluginConfig(),o=[r?.clientFile??"client.ts",r?.serverFile??"server.ts"].map(e=>t.resolve(this.root,e)),a=[];return[...o,...s].forEach(e=>{for(const t of i){const s=this.config.getVite()?.moduleGraph.getModuleById(`${e}${t}`);if(s){a.push(s);break}}}),a}async prepareDevAssets(e,t=!1){const s=this.config.getVite();if(!s)return;t&&await Promise.all(this.getDevRouteIds(e).map(async e=>{const t=this.pathNormalize.findAppFile(e);t&&await s.transformRequest(`/@fs/${t}`)}));const i=new Set,r=async e=>{i.has(e.url)||(i.add(e.url),e.file&&/\.(?:css|less|s[ac]ss|styl(?:us)?|pcss|postcss)$/.test(e.file)&&await s.transformRequest(e.url),await Promise.all([...e.importedModules].map(r)))};await Promise.all(this.getDevModules(e).map(r))}getAssetsDev(e,t=!1){const s=Object.assign({},...this.getDevModules(e).map(e=>this.getModuleAssets(e))),i=t?this.getDevRouteIds(e).flatMap(e=>{const t=this.pathNormalize.getImportPostfix().map(t=>this.config.getVite()?.moduleGraph.getModuleById(`${e}${t}`)).find(Boolean);return t?[{type:a.script,url:t.url,weight:2,isNested:!1,isPreload:!0}]:[]}):[];return[...Object.values(s),...i]}getModuleAssets(e,t=new Set){const i=e?.importedModules??e?.clientImportedModules;if(!i?.size||t.has(e.file))return{};let r={};return t.add(e.file),i.forEach(e=>{const{file:i,transformResult:o}=e,n=i?.split(".").at(-1);if(i&&n&&["css","scss","sass","less","styl","stylus","pcss","postcss"].includes(n)){const e=o?.code.match(/__vite__css\s+=\s+"(?<css>.+)"/)?.groups?.css;if(e)try{r[i]={type:a.style,url:i,weight:this.getAssetWeight(i),content:JSON.parse(`{"style": "${e}"}`).style,isNested:Boolean(t.size),isPreload:!1}}catch{console.warn(s.yellowBright("Failed to parse style: ",i))}}else r={...r,...this.getModuleAssets(e,t)}}),r}getAssetWeight(e){switch(this.getAssetType(e)){case a.style:return 1;case a.script:return 2;default:return 3}}getAssetType(e){const t=e.split(".").at(-1)?.toLowerCase();switch(t){case"css":case"scss":return a.style;case"js":return a.script;case"svg":case"jpg":case"jpeg":case"png":case"webp":case"gif":case"ico":return a.image;case"ttf":case"otf":case"woff":case"woff2":return a.font;default:return null}}}export{n as default};
2
2
  //# sourceMappingURL=ssr-manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssr-manifest.js","sources":["../../src/services/ssr-manifest.ts"],"sourcesContent":[null],"names":["SsrManifest","RouteAssets","static","config","pathNormalize","root","buildDir","manifestName","viteAliases","basename","renderBuiltUrl","constructor","super","path","resolve","getParams","isModulePreload","this","getVite","alias","PathNormalize","get","params","instance","isDev","Boolean","getOutDir","getAssetsManifestFile","loadClientManifest","clientManifestDir","clientSsrManifest","fs","existsSync","result","JSON","parse","readFileSync","encoding","rmSync","readdirSync","length","recursive","getRoutesTreeIds","routes","index","forEach","route","position","String","filter","join","routeId","id","import","getAppPath","children","Object","assign","getRouteAssets","manifest","module","isNested","assets","css","file","reduce","res","asset","type","getAssetType","isEntry","filename","posix","normalize","modifiedFilename","ssr","hostId","hostType","split","at","toLowerCase","url","weight","getAssetWeight","isPreload","imports","nestedAsset","nestedModule","buildRoutesManifest","routesService","ParseRoutes","routesPaths","postfixes","getImportPostfix","entries","routePath","routePostfix","find","postfix","undefined","routeMeta","sortAssets","values","writeFileSync","stringify","getAssets","getAssetsDev","getDevModules","routeIds","map","pathId","pluginConfig","getPluginConfig","rootIds","clientFile","serverFile","modules","moduleId","ext","moduleGraph","getModuleById","push","prepareDevAssets","vite","visited","Set","visit","async","has","add","test","transformRequest","Promise","all","importedModules","getModuleAssets","skipModules","clientImportedModules","size","subModule","transformResult","includes","code","match","groups","AssetType","style","content","console","warn","chalk","yellowBright","script","image","font"],"mappings":"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"}
1
+ {"version":3,"file":"ssr-manifest.js","sources":["../../src/services/ssr-manifest.ts"],"sourcesContent":[null],"names":["SsrManifest","RouteAssets","static","config","pathNormalize","root","buildDir","manifestName","viteAliases","basename","renderBuiltUrl","constructor","super","path","resolve","getParams","isModulePreload","this","getVite","alias","PathNormalize","get","params","instance","isDev","Boolean","getOutDir","getAssetsManifestFile","loadClientManifest","clientManifestDir","clientSsrManifest","fs","existsSync","result","JSON","parse","readFileSync","encoding","rmSync","readdirSync","length","recursive","getRoutesTreeIds","routes","index","forEach","route","position","String","filter","join","routeId","id","import","getAppPath","children","Object","assign","getRouteAssets","manifest","module","isNested","assets","css","file","reduce","res","asset","type","getAssetType","isEntry","filename","posix","normalize","modifiedFilename","ssr","hostId","hostType","split","at","toLowerCase","url","weight","getAssetWeight","isPreload","imports","nestedAsset","nestedModule","buildRoutesManifest","routesService","ParseRoutes","routesPaths","postfixes","getImportPostfix","entries","routePath","routePostfix","find","postfix","undefined","routeMeta","sortAssets","values","writeFileSync","stringify","getAssets","isSpa","getAssetsDev","getDevRouteIds","map","pathId","getDevModules","routeIds","pluginConfig","getPluginConfig","rootIds","clientFile","serverFile","modules","moduleId","ext","moduleGraph","getModuleById","push","prepareDevAssets","vite","Promise","all","async","findAppFile","transformRequest","visited","Set","visit","has","add","test","importedModules","getModuleAssets","scripts","flatMap","AssetType","script","skipModules","clientImportedModules","size","subModule","transformResult","includes","code","match","groups","style","content","console","warn","chalk","yellowBright","image","font"],"mappings":"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"}