@lomray/vite-ssr-boost 8.4.0-beta.1 → 8.4.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +2 -0
  2. package/adapters/express/entry.d.ts +4 -1
  3. package/adapters/express/entry.js +1 -1
  4. package/adapters/express/entry.js.map +1 -1
  5. package/adapters/express/render.d.ts +9 -2
  6. package/adapters/express/render.js +1 -1
  7. package/adapters/express/render.js.map +1 -1
  8. package/adapters/express/server.js +1 -1
  9. package/adapters/express/server.js.map +1 -1
  10. package/browser/entry.js +1 -1
  11. package/browser/entry.js.map +1 -1
  12. package/core/compose-html.d.ts +2 -1
  13. package/core/compose-html.js +1 -1
  14. package/core/compose-html.js.map +1 -1
  15. package/core/data-stream.d.ts +3 -1
  16. package/core/data-stream.js +1 -1
  17. package/core/data-stream.js.map +1 -1
  18. package/core/handler.d.ts +12 -3
  19. package/core/handler.js +1 -1
  20. package/core/handler.js.map +1 -1
  21. package/core/render.d.ts +11 -2
  22. package/core/render.js +1 -1
  23. package/core/render.js.map +1 -1
  24. package/core/spa-html.d.ts +6 -0
  25. package/core/spa-html.js +2 -0
  26. package/core/spa-html.js.map +1 -0
  27. package/core/spa-shell.d.ts +7 -0
  28. package/core/spa-shell.js +2 -0
  29. package/core/spa-shell.js.map +1 -0
  30. package/core/ssr-policy.d.ts +51 -0
  31. package/core/ssr-policy.js +2 -0
  32. package/core/ssr-policy.js.map +1 -0
  33. package/package.json +31 -1
  34. package/plugins/create-spa-index.js +1 -1
  35. package/plugins/create-spa-index.js.map +1 -1
  36. package/services/diagnostics.d.ts +11 -3
  37. package/services/diagnostics.js +1 -1
  38. package/services/diagnostics.js.map +1 -1
  39. package/services/request-timeline.d.ts +30 -0
  40. package/services/request-timeline.js +2 -0
  41. package/services/request-timeline.js.map +1 -0
  42. package/services/route-assets.d.ts +4 -2
  43. package/services/route-assets.js +1 -1
  44. package/services/route-assets.js.map +1 -1
  45. package/services/ssr-manifest.d.ts +7 -3
  46. package/services/ssr-manifest.js +1 -1
  47. package/services/ssr-manifest.js.map +1 -1
  48. package/testing/browser-observer.d.ts +30 -0
  49. package/testing/browser-observer.js +2 -0
  50. package/testing/browser-observer.js.map +1 -0
  51. package/testing/create-handler.d.ts +32 -0
  52. package/testing/create-handler.js +2 -0
  53. package/testing/create-handler.js.map +1 -0
  54. package/testing/deferred.d.ts +9 -0
  55. package/testing/deferred.js +2 -0
  56. package/testing/deferred.js.map +1 -0
  57. package/testing/edge.d.ts +9 -0
  58. package/testing/edge.js +2 -0
  59. package/testing/edge.js.map +1 -0
  60. package/testing/parse-response.d.ts +12 -0
  61. package/testing/parse-response.js +2 -0
  62. package/testing/parse-response.js.map +1 -0
  63. package/testing/playwright.d.ts +17 -0
  64. package/testing/playwright.js +2 -0
  65. package/testing/playwright.js.map +1 -0
  66. package/testing/requests.d.ts +6 -0
  67. package/testing/requests.js +2 -0
  68. package/testing/requests.js.map +1 -0
  69. package/testing/response.d.ts +46 -0
  70. package/testing/response.js +2 -0
  71. package/testing/response.js.map +1 -0
  72. package/testing.d.ts +9 -0
  73. package/testing.js +2 -0
  74. package/testing.js.map +1 -0
package/README.md CHANGED
@@ -155,6 +155,8 @@ The [example projects guide](./docs/examples/index.md) explains the wiring in ea
155
155
 
156
156
  ## Documentation
157
157
 
158
+ Test SSR routes without a server with `@lomray/vite-ssr-boost/testing`; see the [Vitest and Playwright guide](https://lomray-software.github.io/vite-ssr-boost/guide/testing).
159
+
158
160
  - [Documentation site](https://lomray-software.github.io/vite-ssr-boost/), [comparison guide](./docs/guide/choosing.md) and [FAQ](./docs/reference/faq.md).
159
161
  - [Hydration order and streaming](./docs/reference/hydration-and-streaming.md).
160
162
  - API: [Plugin](./docs/api/plugin.md), [Browser entry](./docs/api/browser-entry.md), [Server entry](./docs/api/server-entry.md), [Node production](./docs/api/node-production.md), [Components and helpers](./docs/api/components-and-helpers.md) and [CLI](./docs/api/cli.md).
@@ -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,13 +23,18 @@ 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;
30
+ timeline?: ISsrRequestContext<TAppProps>['timeline'];
26
31
  }
27
32
  export type TRender<TAppProps = Record<any, any>> = (config: ServerConfig, context: Omit<IRequestContext<TAppProps>, 'request' | 'response'>, options: IRenderOptions) => Promise<void>;
28
33
  export interface IRenderParams<TAppProps = Record<string, any>> {
29
34
  App: TApp<TAppProps>;
30
35
  handler: StaticHandler;
36
+ policy?: SsrPolicy;
37
+ spaShell?: ReturnType<typeof createSpaShell>;
31
38
  }
32
39
  export interface IRenderOptions<TAppProps = Record<string, any>> extends Pick<ICoreRenderOptions<TAppProps>, 'documentHeaders' | 'sessionCookie' | 'protectPrivate'> {
33
40
  hydration?: 'early' | 'footer';
@@ -68,5 +75,5 @@ export interface IShellReadyOut {
68
75
  /**
69
76
  * Render application
70
77
  */
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>;
78
+ 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
79
  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 t from"react";import s 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,t,r)=>{const o={signal:t};return r&&"GET"!==e.method&&"HEAD"!==e.method&&(o.body=r(e)??null),s(e,o)},g=(e,t,s)=>{if(!t.headersSent&&!t.writableEnded){e.response.status!==s.status&&t.status(e.response.status??200);const r=new Set([...s.headers.keys(),...e.response.headers.keys()]);for(const o of r)e.response.headers.get(o)!==s.headers.get(o)&&(e.response.headers.has(o)?t.setHeader(o,"set-cookie"===o?n(e.response.headers):e.response.headers.get(o)):t.removeHeader(o))}const r=new Headers(e.response.headers);r.delete("Set-Cookie");for(const[e,s]of Object.entries(t.getHeaders()))if("set-cookie"!==e.toLowerCase()&&void 0!==s)if(Array.isArray(s))for(const t of s)r.append(e,t);else r.set(e,"number"==typeof s?String(s):s);e.response.headers=r,e.response.status=t.statusCode};async function S({App:s,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 t of["req","res"]){let s=c[t];Object.defineProperty(c,t,{configurable:!0,enumerable:!0,get:()=>(e.deprecatedReqRes(),s),set:e=>{s=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.timeline=e.timeline,c),M=await i({createApp:(e,r)=>t.createElement(s,{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:t,error:s})=>{const{code:o,message:n}=s;if(H?.({context:K(t),error:s}),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}=s;F.error(a)},onResponse:j?({context:e,html:t,isEnd:s})=>j({context:K(e),html:t,isEnd:s}):void 0,onRouterReady:b?({context:e})=>b({context:K(e)}):void 0,onShellError:R?({context:e,error:t})=>R({context:K(e),error:t}):void 0,onShellReady:({context:e})=>{const t=K(e);((e,t)=>{if(t.headersSent||t.writableEnded)return;t.status(e.response.status??200),a(e.response.headers).forEach(([e,s])=>t.setHeader(e,s));const s=n(e.response.headers);s.length&&t.setHeader("Set-Cookie",s)})(e,z);const s={headers:new Headers(e.response.headers),status:e.response.status},r=C?.({context:t});return g(e,z,s),r??{}},prepare:async({context:e,executionContext:t})=>{const s=K(e),r=f.get(v);await r.prepareDevAssets(e.matches,e.isSpa);const n=r.injectAssets(s);s.hasEarlyHints&&await o(t,n)},routerRequestContext:c},{onEarlyHints:e=>p(z,e)});K(J),await(async(e,t)=>{const s=t.headers.get("Location");if(s&&t.status>=300&&t.status<400&&!e.headersSent&&!e.writableEnded&&!e.destroyed)return l(e,t),await(t.body?.cancel()),void e.redirect(t.status,s);await m(e,t)})(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","timeline","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:s,routerOptions:l,createRouter:m=r,rootId:u="root"}={}){const w=i?a():void 0,f=(()=>{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);(f||y?.length)&&await Promise.all([f,...(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");w&&p?.__ssrBoostStream&&Reflect.set(window,"__staticRouterHydrationData",await w.ready);const R=m(d,l),b=document.getElementById(u),E=i&&"1"!==b.dataset.forceSpa&&"1"!==document.documentElement.dataset.forceSpa;i&&(Reflect.deleteProperty(window,"__staticRouterHydrationData"),E&&window.dispatchEvent(new CustomEvent("ssr-boost:router-ready",{detail:{rootId:u}})));const _=await(s?.({isSSRMode:E,router:R})),g=()=>e.createElement(c,{client:_},e.createElement(n,{router:R}));return E?t.hydrateRoot(b,e.createElement(g,null)):t.createRoot(b).render(e.createElement(g,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","dispatchEvent","CustomEvent","detail","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,SAEzC7C,IACFO,QAAQM,eAAeJ,OAAQ,+BAE3BmC,GACFnC,OAAOsC,cAAc,IAAIC,YAAY,yBAA0B,CAAEC,OAAQ,CAAEnD,cAI/E,MAAMoD,QAAkBxD,IAAO,CAAEkD,YAAWH,YAEtCU,EAAmB,IACvBC,EAAAC,cAAC7D,EAAG,CAAC8D,OAAQJ,GACXE,EAAAC,cAACE,GAAed,OAAQA,KAI5B,OAAKG,EAIEY,EAASC,YAAYf,EAAMU,EAAAC,cAACF,EAAY,OAHtCK,EAASE,WAAWhB,GAAMiB,OAAOP,EAAAC,cAACF,EAAY,MAIzD"}
@@ -1,4 +1,5 @@
1
1
  import type DataStream from './data-stream.js';
2
+ import type RequestTimeline from '../services/request-timeline.js';
2
3
  /** Stream shell, data frames, React bytes and footer only under downstream demand. */
3
- declare const composeHtml: (header: string, body: ReadableStream<Uint8Array>, footer: string, abort?: (reason?: unknown) => void, onComplete?: () => void, data?: DataStream) => ReadableStream<Uint8Array>;
4
+ declare const composeHtml: (header: string, body: ReadableStream<Uint8Array>, footer: string, abort?: (reason?: unknown) => void, onComplete?: () => void, data?: DataStream, timeline?: RequestTimeline, isEarly?: boolean) => ReadableStream<Uint8Array>;
4
5
  export default composeHtml;
@@ -1,2 +1,2 @@
1
- import e from"./html-boundary.js";const n=(n,t,a,r,o,c)=>{const i=new TextEncoder,d=t.getReader();let u,l="header",f=!1,s=!1;const h=e();let y,v=!0;const w=()=>{s||(s=!0,d.releaseLock())};return new ReadableStream({cancel:async e=>{f=!0,r?.(e),c?.cancel();try{s||await d.cancel(e)}finally{w(),o?.()}},async pull(e){try{if("header"===l&&(l="body",n))return void e.enqueue(i.encode(n));for(;!f;){const n=v?c?.take():void 0;if(f)return;if(n)return void e.enqueue(i.encode(n));if(y)return v=h(y),e.enqueue(y),void(y=void 0);if("body"===l){u??=d.read();const e=await(c&&!c.isDone&&v?Promise.race([u,c.changed().then(()=>{})]):u);if(f)return;if(!e)continue;if(u=void 0,!e.done){y=e.value;continue}l="footer",v=!0,w();continue}!c||c.isDone?(a&&e.enqueue(i.encode(a)),f=!0,o?.(),e.close()):await c.changed()}}catch(n){if(f)return;f=!0,r?.(n),c?.cancel(),e.error(n);try{s||await d.cancel(n).catch(()=>{})}finally{w(),o?.()}}}},{highWaterMark:0})};export{n as default};
1
+ import e from"./html-boundary.js";const t=(t,n,r,a,o,c,i,d=!1)=>{const l=new TextEncoder,u=n.getReader();let s,f="header",y=!1,h=!1;const m=e();let v,w=!0;const b=()=>{h||(h=!0,u.releaseLock())};return new ReadableStream({cancel:async e=>{y=!0,a?.(e),c?.cancel();try{h||await u.cancel(e)}finally{b(),o?.()}},async pull(e){try{if("header"===f&&(f="body",t))return d&&i?.record("state.emitted",{placement:"early"}),void e.enqueue(l.encode(t));for(;!y;){const t=w?c?.take():void 0;if(y)return;if(t)return void e.enqueue(l.encode(t));if(v)return w=m(v),e.enqueue(v),void(v=void 0);if("body"===f){s??=u.read();const e=await(c&&!c.isDone&&w?Promise.race([s,c.changed().then(()=>{})]):s);if(y)return;if(!e)continue;if(s=void 0,!e.done){v=e.value;continue}f="footer",i?.record("body.end"),w=!0,b();continue}!c||c.isDone?(r&&(d||i?.record("state.emitted",{placement:"footer"}),e.enqueue(l.encode(r))),y=!0,o?.(),e.close()):await c.changed()}}catch(t){if(y)return;y=!0,a?.(t),c?.cancel(),e.error(t);try{h||await u.cancel(t).catch(()=>{})}finally{b(),o?.()}}}},{highWaterMark:0})};export{t as default};
2
2
  //# sourceMappingURL=compose-html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose-html.js","sources":["../../src/core/compose-html.ts"],"sourcesContent":[null],"names":["composeHtml","header","body","footer","abort","onComplete","data","encoder","TextEncoder","reader","getReader","pendingRead","phase","isStopped","isReleased","observe","htmlBoundary","heldChunk","canInject","release","releaseLock","ReadableStream","cancel","async","reason","pull","controller","enqueue","encode","frames","take","undefined","read","chunk","isDone","Promise","race","changed","then","done","value","close","error","catch","highWaterMark"],"mappings":"kCAIA,MAAMA,EAAc,CAClBC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAU,IAAIC,YACdC,EAASP,EAAKQ,YACpB,IAGIC,EAHAC,EAAsC,SACtCC,GAAY,EACZC,GAAa,EAEjB,MAAMC,EAAUC,IAChB,IACIC,EADAC,GAAY,EAIhB,MAAMC,EAAU,KACTL,IACHA,GAAa,EACbL,EAAOW,gBAIX,OAAO,IAAIC,eACT,CAEEC,OAAQC,MAAOC,IACbX,GAAY,EACZT,IAAQoB,GACRlB,GAAMgB,SAEN,IACOR,SACGL,EAAOa,OAAOE,EAExB,SACEL,IACAd,KACF,GAIF,UAAMoB,CAAKC,GACT,IACE,GAAc,WAAVd,IACFA,EAAQ,OAEJX,GAGF,YAFAyB,EAAWC,QAAQpB,EAAQqB,OAAO3B,IAMtC,MAAQY,GAAW,CACjB,MAAMgB,EAASX,EAAYZ,GAAMwB,YAASC,EAE1C,GAAIlB,EACF,OAGF,GAAIgB,EAGF,YAFAH,EAAWC,QAAQpB,EAAQqB,OAAOC,IAKpC,GAAIZ,EAKF,OAJAC,EAAYH,EAAQE,GACpBS,EAAWC,QAAQV,QACnBA,OAAYc,GAKd,GAAc,SAAVnB,EAAkB,CACpBD,IAAgBF,EAAOuB,OACvB,MAAMC,QAAe3B,IAASA,EAAK4B,QAAUhB,EACzCiB,QAAQC,KAAK,CAACzB,EAAaL,EAAK+B,UAAUC,KAAK,UAC/C3B,GAEJ,GAAIE,EACF,OAGF,IAAKoB,EACH,SAKF,GAFAtB,OAAcoB,GAETE,EAAMM,KAAM,CACftB,EAAYgB,EAAMO,MAElB,QACF,CAEA5B,EAAQ,SACRM,GAAY,EACZC,IACA,QACF,EAEIb,GAASA,EAAK4B,QAKd/B,GACFuB,EAAWC,QAAQpB,EAAQqB,OAAOzB,IAGpCU,GAAY,EACZR,MACAqB,EAAWe,eAVHnC,EAAK+B,SAWf,CACF,CAAE,MAAOK,GACP,GAAI7B,EACF,OAGFA,GAAY,EACZT,IAAQsC,GACRpC,GAAMgB,SACNI,EAAWgB,MAAMA,GAEjB,IACO5B,SACGL,EAAOa,OAAOoB,GAAOC,MAAM,OAErC,SACExB,IACAd,KACF,CACF,CACF,GAEF,CAAEuC,cAAe"}
1
+ {"version":3,"file":"compose-html.js","sources":["../../src/core/compose-html.ts"],"sourcesContent":[null],"names":["composeHtml","header","body","footer","abort","onComplete","data","timeline","isEarly","encoder","TextEncoder","reader","getReader","pendingRead","phase","isStopped","isReleased","observe","htmlBoundary","heldChunk","canInject","release","releaseLock","ReadableStream","cancel","async","reason","pull","controller","record","placement","enqueue","encode","frames","take","undefined","read","chunk","isDone","Promise","race","changed","then","done","value","close","error","catch","highWaterMark"],"mappings":"kCAKA,MAAMA,EAAc,CAClBC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAAU,KAEV,MAAMC,EAAU,IAAIC,YACdC,EAAST,EAAKU,YACpB,IAGIC,EAHAC,EAAsC,SACtCC,GAAY,EACZC,GAAa,EAEjB,MAAMC,EAAUC,IAChB,IACIC,EADAC,GAAY,EAIhB,MAAMC,EAAU,KACTL,IACHA,GAAa,EACbL,EAAOW,gBAIX,OAAO,IAAIC,eACT,CAEEC,OAAQC,MAAOC,IACbX,GAAY,EACZX,IAAQsB,GACRpB,GAAMkB,SAEN,IACOR,SACGL,EAAOa,OAAOE,EAExB,SACEL,IACAhB,KACF,GAIF,UAAMsB,CAAKC,GACT,IACE,GAAc,WAAVd,IACFA,EAAQ,OAEJb,GAOF,OANIO,GACFD,GAAUsB,OAAO,gBAAiB,CAAEC,UAAW,eAGjDF,EAAWG,QAAQtB,EAAQuB,OAAO/B,IAMtC,MAAQc,GAAW,CACjB,MAAMkB,EAASb,EAAYd,GAAM4B,YAASC,EAE1C,GAAIpB,EACF,OAGF,GAAIkB,EAGF,YAFAL,EAAWG,QAAQtB,EAAQuB,OAAOC,IAKpC,GAAId,EAKF,OAJAC,EAAYH,EAAQE,GACpBS,EAAWG,QAAQZ,QACnBA,OAAYgB,GAKd,GAAc,SAAVrB,EAAkB,CACpBD,IAAgBF,EAAOyB,OACvB,MAAMC,QAAe/B,IAASA,EAAKgC,QAAUlB,EACzCmB,QAAQC,KAAK,CAAC3B,EAAaP,EAAKmC,UAAUC,KAAK,UAC/C7B,GAEJ,GAAIE,EACF,OAGF,IAAKsB,EACH,SAKF,GAFAxB,OAAcsB,GAETE,EAAMM,KAAM,CACfxB,EAAYkB,EAAMO,MAElB,QACF,CAEA9B,EAAQ,SACRP,GAAUsB,OAAO,YACjBT,GAAY,EACZC,IACA,QACF,EAEIf,GAASA,EAAKgC,QAKdnC,IACGK,GACHD,GAAUsB,OAAO,gBAAiB,CAAEC,UAAW,WAGjDF,EAAWG,QAAQtB,EAAQuB,OAAO7B,KAGpCY,GAAY,EACZV,MACAuB,EAAWiB,eAdHvC,EAAKmC,SAef,CACF,CAAE,MAAOK,GACP,GAAI/B,EACF,OAGFA,GAAY,EACZX,IAAQ0C,GACRxC,GAAMkB,SACNI,EAAWkB,MAAMA,GAEjB,IACO9B,SACGL,EAAOa,OAAOsB,GAAOC,MAAM,OAErC,SACE1B,IACAhB,KACF,CACF,CACF,GAEF,CAAE2C,cAAe"}
@@ -1,5 +1,6 @@
1
1
  import type { StaticHandlerContext } from 'react-router';
2
2
  import type Diagnostics from '../services/diagnostics.js';
3
+ import type RequestTimeline from '../services/request-timeline.js';
3
4
  interface IPending {
4
5
  settled: boolean;
5
6
  }
@@ -13,6 +14,7 @@ declare const errorProperties: (reason: unknown, diagnostics: boolean) => Record
13
14
  declare class DataStream {
14
15
  protected readonly diagnostics?: Diagnostics | undefined;
15
16
  protected readonly nonce?: string | undefined;
17
+ protected readonly timeline?: RequestTimeline | undefined;
16
18
  readonly initial: string;
17
19
  readonly done: Promise<void>;
18
20
  protected resolveDone: () => void;
@@ -25,7 +27,7 @@ declare class DataStream {
25
27
  protected stopped: boolean;
26
28
  protected aborted: boolean;
27
29
  protected nextId: number;
28
- constructor(context: StaticHandlerContext, diagnostics?: Diagnostics | undefined, nonce?: string | undefined);
30
+ constructor(context: StaticHandlerContext, diagnostics?: Diagnostics | undefined, nonce?: string | undefined, timeline?: RequestTimeline | undefined);
29
31
  /** Use the codec's public plugin API, without depending on React Router internals. */
30
32
  protected promiseId: (value: unknown) => [number] | false;
31
33
  /** Encode one complete value, preserving the codec's built-in value representations. */
@@ -1,2 +1,2 @@
1
- import{stringify as t}from"devalue";import{isRouteErrorResponse as e}from"react-router";import i,{streamScript as s}from"./script.js";import o from"../helpers/serialize-errors.js";const r=(t,i)=>{const s=t,o=e(t),r="DataWithResponseInit"===s?.type,n=o?t.status:s?.init?.status,a=o?t.statusText:s?.init?.statusText,c={message:s?.message??(o||r?a||`Route data error (${n??500})`:String(t)),name:s?.name??"Error"};return(o||r)&&Object.assign(c,{status:n??500,statusText:a??"",data:s?.data,internal:!1}),i&&s?.stack&&(c.stack=s.stack),c};class n{diagnostics;nonce;initial;done;resolveDone;notify;change;identities=new WeakMap;pending=new Map;frames=[];initialized=!1;stopped=!1;aborted=!1;nextId=0;constructor(t,e,i){this.diagnostics=e,this.nonce=i,e?.inspectRouterState(t),this.done=new Promise(t=>{this.resolveDone=t});try{this.initial=this.encodeValue({loaderData:t.loaderData,actionData:t.actionData,errors:o(t.errors)}),this.initialized=!0,this.wake()}catch(t){throw this.cancel(),t}}promiseId=t=>{if(t instanceof Promise){let e=this.identities.get(t);if(void 0===e){e=this.nextId++,this.identities.set(t,e),this.pending.set(e,{settled:!1});const i=e;t.then(t=>this.settle(i,t,!1),t=>this.settle(i,t,!0)),this.aborted&&this.settle(e,new Error("SSR loader/action promise aborted before it settled."),!0)}return[e]}return!1};encodeValue(i){return t(i,{SSRBPromise:this.promiseId,SSRBError:t=>(t instanceof Error||e(t))&&Object.entries(r(t,Boolean(this.diagnostics))),SSRBObject:t=>Boolean(t&&"object"==typeof t&&Object.hasOwn(t,"__proto__"))&&Object.entries(t),SSRBUndefined:t=>"function"==typeof t||"symbol"==typeof t||Boolean(t&&"object"==typeof t&&!Array.isArray(t)&&![Object.prototype,null,Date.prototype,Map.prototype,Set.prototype,RegExp.prototype,Promise.prototype,Error.prototype].includes(Object.getPrototypeOf(t)))})}settle(t,e,i){const o=this.pending.get(t);if(o&&!o.settled&&!this.stopped){o.settled=!0,i||this.diagnostics?.inspectStreamValue(e,t);try{const o=this.encodeValue(i?Object.assign(new Error("Streamed loader/action rejection"),r(e,Boolean(this.diagnostics))):e);this.frames.push(s([i?"reject":"resolve",t,o],this.nonce))}catch(e){const i=this.encodeValue(new Error(`Cannot serialize streamed value: ${String(e)}`));this.frames.push(s(["reject",t,i],this.nonce))}finally{this.pending.delete(t),this.wake()}}}wake(){this.notify?.(),this.notify=void 0,this.change=void 0,this.initialized&&!this.pending.size&&this.resolveDone()}get isDone(){return this.initialized&&!this.pending.size}changed(){return this.frames.length||this.isDone?Promise.resolve():this.change??=new Promise(t=>{this.notify=t})}take(){return this.frames.splice(0).join("")}state(t){const{initial:e}=this;return i("window.__staticRouterHydrationData = {__ssrBoostStream: true};",this.nonce,!0)+s(["init",e,t],this.nonce)}abort(){this.aborted=!0;let t=0;for(const[e,i]of this.pending)i.settled||(t++,this.settle(e,new Error("SSR loader/action promise aborted before it settled."),!0));t&&this.diagnostics?.streamAborted(t)}cancel(){this.stopped=!0,this.initialized=!0,this.pending.clear(),this.frames.length=0,this.wake()}}export{n as default,r as errorProperties};
1
+ import{stringify as t}from"devalue";import{isRouteErrorResponse as e}from"react-router";import i,{streamScript as s}from"./script.js";import o from"../helpers/serialize-errors.js";const r=(t,i)=>{const s=t,o=e(t),r="DataWithResponseInit"===s?.type,n=o?t.status:s?.init?.status,a=o?t.statusText:s?.init?.statusText,c={message:s?.message??(o||r?a||`Route data error (${n??500})`:String(t)),name:s?.name??"Error"};return(o||r)&&Object.assign(c,{status:n??500,statusText:a??"",data:s?.data,internal:!1}),i&&s?.stack&&(c.stack=s.stack),c};class n{diagnostics;nonce;timeline;initial;done;resolveDone;notify;change;identities=new WeakMap;pending=new Map;frames=[];initialized=!1;stopped=!1;aborted=!1;nextId=0;constructor(t,e,i,s){this.diagnostics=e,this.nonce=i,this.timeline=s,e?.inspectRouterState(t),this.done=new Promise(t=>{this.resolveDone=t});try{this.initial=this.encodeValue({loaderData:t.loaderData,actionData:t.actionData,errors:o(t.errors)}),this.initialized=!0,this.wake()}catch(t){throw this.cancel(),t}}promiseId=t=>{if(t instanceof Promise){let e=this.identities.get(t);if(void 0===e){e=this.nextId++,this.identities.set(t,e),this.pending.set(e,{settled:!1});const i=e;t.then(t=>this.settle(i,t,!1),t=>this.settle(i,t,!0)),this.aborted&&this.settle(e,new Error("SSR loader/action promise aborted before it settled."),!0)}return[e]}return!1};encodeValue(i){return t(i,{SSRBPromise:this.promiseId,SSRBError:t=>(t instanceof Error||e(t))&&Object.entries(r(t,Boolean(this.diagnostics))),SSRBObject:t=>Boolean(t&&"object"==typeof t&&Object.hasOwn(t,"__proto__"))&&Object.entries(t),SSRBUndefined:t=>"function"==typeof t||"symbol"==typeof t||Boolean(t&&"object"==typeof t&&!Array.isArray(t)&&![Object.prototype,null,Date.prototype,Map.prototype,Set.prototype,RegExp.prototype,Promise.prototype,Error.prototype].includes(Object.getPrototypeOf(t)))})}settle(t,e,i){const o=this.pending.get(t);if(o&&!o.settled&&!this.stopped){o.settled=!0,i||this.diagnostics?.inspectStreamValue(e,t);try{const o=this.encodeValue(i?Object.assign(new Error("Streamed loader/action rejection"),r(e,Boolean(this.diagnostics))):e);this.frames.push(s([i?"reject":"resolve",t,o],this.nonce)),this.timeline?.record(i?"stream.reject":"stream.resolve",{id:t})}catch(e){const i=this.encodeValue(new Error(`Cannot serialize streamed value: ${String(e)}`));this.frames.push(s(["reject",t,i],this.nonce)),this.timeline?.record("stream.reject",{id:t})}finally{this.pending.delete(t),this.wake()}}}wake(){this.notify?.(),this.notify=void 0,this.change=void 0,this.initialized&&!this.pending.size&&this.resolveDone()}get isDone(){return this.initialized&&!this.pending.size}changed(){return this.frames.length||this.isDone?Promise.resolve():this.change??=new Promise(t=>{this.notify=t})}take(){return this.frames.splice(0).join("")}state(t){const{initial:e}=this;return i("window.__staticRouterHydrationData = {__ssrBoostStream: true};",this.nonce,!0)+s(["init",e,t],this.nonce)}abort(){this.aborted=!0;let t=0;for(const[e,i]of this.pending)i.settled||(t++,this.settle(e,new Error("SSR loader/action promise aborted before it settled."),!0));t&&this.diagnostics?.streamAborted(t)}cancel(){this.stopped=!0,this.initialized=!0,this.pending.clear(),this.frames.length=0,this.wake()}}export{n as default,r as errorProperties};
2
2
  //# sourceMappingURL=data-stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-stream.js","sources":["../../src/core/data-stream.ts"],"sourcesContent":[null],"names":["errorProperties","reason","diagnostics","value","isResponse","isRouteErrorResponse","isDataError","type","status","init","statusText","properties","message","String","name","Object","assign","data","internal","stack","DataStream","nonce","initial","done","resolveDone","notify","change","identities","WeakMap","pending","Map","frames","initialized","stopped","aborted","nextId","constructor","context","this","inspectRouterState","Promise","resolve","encodeValue","loaderData","actionData","errors","serializeErrors","wake","error","cancel","promiseId","id","get","undefined","set","settled","then","result","settle","Error","stringify","SSRBPromise","SSRBError","entries","Boolean","SSRBObject","item","hasOwn","SSRBUndefined","Array","isArray","prototype","Date","Set","RegExp","includes","getPrototypeOf","rejected","inspectStreamValue","payload","push","streamScript","delete","size","isDone","changed","length","take","splice","join","state","isEarly","script","abort","count","streamAborted","clear"],"mappings":"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"}
1
+ {"version":3,"file":"data-stream.js","sources":["../../src/core/data-stream.ts"],"sourcesContent":[null],"names":["errorProperties","reason","diagnostics","value","isResponse","isRouteErrorResponse","isDataError","type","status","init","statusText","properties","message","String","name","Object","assign","data","internal","stack","DataStream","nonce","timeline","initial","done","resolveDone","notify","change","identities","WeakMap","pending","Map","frames","initialized","stopped","aborted","nextId","constructor","context","this","inspectRouterState","Promise","resolve","encodeValue","loaderData","actionData","errors","serializeErrors","wake","error","cancel","promiseId","id","get","undefined","set","settled","then","result","settle","Error","stringify","SSRBPromise","SSRBError","entries","Boolean","SSRBObject","item","hasOwn","SSRBUndefined","Array","isArray","prototype","Date","Set","RegExp","includes","getPrototypeOf","rejected","inspectStreamValue","payload","push","streamScript","record","delete","size","isDone","changed","length","take","splice","join","state","isEarly","script","abort","count","streamAborted","clear"],"mappings":"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"}
package/core/handler.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { ICoreRenderOptions, ICoreRenderParams } from './render.js';
1
+ import type { ICoreRenderOptions, ICoreRenderParams, ISsrRequestContext } 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
  */
@@ -18,6 +23,10 @@ interface ICreateHandlerOptions<TAppProps> extends ICoreRenderOptions<TAppProps>
18
23
  * Supply the document shell, including the application's browser entry script.
19
24
  */
20
25
  getHtml: (request: Request) => IHtmlShell | Promise<IHtmlShell>;
26
+ /** Observe the initialized context, including bypass responses, before rendering. */
27
+ onContext?: (params: {
28
+ context: ISsrRequestContext<TAppProps>;
29
+ }) => void;
21
30
  /**
22
31
  * Initialize request metadata or return a Response to bypass rendering.
23
32
  */
@@ -29,6 +38,6 @@ interface ICreateHandlerOptions<TAppProps> extends ICoreRenderOptions<TAppProps>
29
38
  /**
30
39
  * Create isolated request state and allow request hooks to bypass rendering.
31
40
  */
32
- declare const createHandler: <TAppProps = Record<string, any>>(params: ICoreRenderParams<TAppProps>, { diagnostics, getHtml, onRequest, ...options }: ICreateHandlerOptions<TAppProps>) => TSsrHandler;
33
- export type { ICreateHandlerOptions, IHtmlShell, IRequestInit };
41
+ declare const createHandler: <TAppProps = Record<string, any>>(params: ICoreRenderParams<TAppProps>, { diagnostics, getHtml, onContext, onRequest, ssr, basename, ...options }: ICreateHandlerOptions<TAppProps>) => TSsrHandler;
42
+ export type { ICreateHandlerOptions, IHtmlShell, IRequestInit, ISsrPolicy };
34
43
  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 e}from"./document-headers.js";import s from"./head-response.js";import o from"./render.js";import t from"./spa-shell.js";import r from"./ssr-policy.js";import n,{isDiagnosticsEnabled as a}from"../services/diagnostics.js";import{createTimeline as i}from"../services/request-timeline.js";const p=(p,{diagnostics:c,getHtml:m,onContext:d,onRequest:l,ssr:h,basename:u,...f})=>{const w=new r(h,p.handler.dataRoutes,u),j=t();return async(t,r)=>{const h=a(c),u=i(t,h);try{const a=await(l?.({executionContext:r,request:t})),i=a instanceof Response,c=i?void 0:a,g={appProps:c?.appProps??{},diagnostics:h?new n(new URL(t.url).pathname):void 0,html:i?{header:"",footer:""}:await m(t),request:t,response:{headers:new Headers(c?.headers),status:c?.status},...u?{timeline:u}:{}};if(d?.({context:g}),i){g.diagnostics?.inspectCachePolicy(a.headers,Boolean(f.sessionCookie&&e(t,f.sessionCookie)));const o=await s(t,a);return u?.response(o)??o}return await o({...p,policy:w,spaShell:j},g,f,r)}catch(e){throw u?.abort(e),u?.end(),e}}};export{p 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","onContext","onRequest","ssr","basename","options","policy","SsrPolicy","handler","dataRoutes","spaShell","createSpaShell","async","request","executionContext","isEnabled","isDiagnosticsEnabled","timeline","createTimeline","requestInit","isBypass","Response","metadata","undefined","context","appProps","Diagnostics","URL","url","pathname","html","header","footer","response","headers","Headers","status","inspectCachePolicy","Boolean","sessionCookie","hasCookie","headResponse","render","error","abort","end"],"mappings":"kTAsDA,MAAMA,EAAgB,CACpBC,GAEEC,cACAC,UACAC,YACAC,YACAC,MACAC,cACGC,MAGL,MAAMC,EAAS,IAAIC,EAAUJ,EAAKL,EAAOU,QAAQC,WAAYL,GACvDM,EAAWC,IAKjB,OAAOC,MAAOC,EAASC,KACrB,MAAMC,EAAYC,EAAqBjB,GACjCkB,EAAWC,EAAeL,EAASE,GAEzC,IACE,MAAMI,QAAoBjB,IAAY,CAAEY,mBAAkBD,aACpDO,EAAWD,aAAuBE,SAClCC,EAAWF,OAAWG,EAAYJ,EAClCK,EAAyC,CAC7CC,SAAWH,GAAUG,UAAY,GACjC1B,YAAagB,EAAY,IAAIW,EAAY,IAAIC,IAAId,EAAQe,KAAKC,eAAYN,EAC1EO,KAAMV,EAAW,CAAEW,OAAQ,GAAIC,OAAQ,UAAahC,EAAQa,GAC5DA,UACAoB,SAAU,CACRC,QAAS,IAAIC,QAAQb,GAAUY,SAC/BE,OAAQd,GAAUc,WAEhBnB,EAAW,CAAEA,YAAa,IAKhC,GAFAhB,IAAY,CAAEuB,YAEVJ,EAAU,CACZI,EAAQzB,aAAasC,mBACnBlB,EAAYe,QACZI,QAAQjC,EAAQkC,eAAiBC,EAAU3B,EAASR,EAAQkC,iBAG9D,MAAMN,QAAiBQ,EAAa5B,EAASM,GAE7C,OAAOF,GAAUgB,SAASA,IAAaA,CACzC,CAEA,aAAaS,EAAO,IAAK5C,EAAQQ,SAAQI,YAAYc,EAASnB,EAASS,EACzE,CAAE,MAAO6B,GAGP,MAFA1B,GAAU2B,MAAMD,GAChB1B,GAAU4B,MACJF,CACR"}
package/core/render.d.ts CHANGED
@@ -1,14 +1,18 @@
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';
11
+ import type RequestTimeline from '../services/request-timeline.js';
9
12
  export interface ISsrRequestContext<TAppProps = Record<string, any>> {
10
13
  appProps: NonNullable<TAppProps>;
11
14
  diagnostics?: Diagnostics;
15
+ timeline?: RequestTimeline;
12
16
  /**
13
17
  * First render failure, or the explicit timeout/cancellation classification.
14
18
  */
@@ -18,6 +22,9 @@ export interface ISsrRequestContext<TAppProps = Record<string, any>> {
18
22
  header: string;
19
23
  };
20
24
  isStream?: boolean;
25
+ isSpa?: boolean;
26
+ /** Structural route matches are available to prepare even when loaders are skipped. */
27
+ matches?: RouterState['matches'];
21
28
  request: Request;
22
29
  /**
23
30
  * Mutable response metadata shared with request and render hooks.
@@ -59,6 +66,8 @@ export interface ICoreRenderParams<TAppProps = Record<string, any>> {
59
66
  createApp: (children: ReactNode, context: ISsrRequestContext<TAppProps>) => ReactNode;
60
67
  handler: StaticHandler;
61
68
  renderToStream: TRenderToStream;
69
+ policy?: SsrPolicy;
70
+ spaShell?: ReturnType<typeof createSpaShell>;
62
71
  }
63
72
  export interface ICoreRenderOptions<TAppProps = Record<string, any>> extends IDocumentHeadersOptions {
64
73
  /** Opt in to document policies after onShellReady; redirects keep their header contract. */
@@ -106,6 +115,6 @@ export interface ICoreRenderOptions<TAppProps = Record<string, any>> extends IDo
106
115
  }) => Promise<void> | void;
107
116
  routerRequestContext?: unknown;
108
117
  }
109
- /** Inspect the committed metadata, including redirect and shell-error responses. */
118
+ /** Record the timeline and inspect the committed metadata, including redirect and shell-error responses, for every core consumer. */
110
119
  declare const render: <TAppProps>(params: ICoreRenderParams<TAppProps>, context: ISsrRequestContext<TAppProps>, options: ICoreRenderOptions<TAppProps>, executionContext?: ISsrExecutionContext) => Promise<Response>;
111
120
  export default render;
package/core/render.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"react";import{createStaticRouter as t,StaticRouterProvider as r}from"react-router";import o from"../constants/stream-error.js";import{ServerProvider as s}from"../context/server.js";import 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 i from"./data-stream.js";import c,{hasCookie as d}from"./document-headers.js";import l from"./head-response.js";import{mergeResponseHeaders as m}from"./headers.js";import h from"./transform-html.js";import u from"../helpers/build-custom-state.js";import p from"../helpers/obtain-stream-error.js";import{createTimeline as C}from"../services/request-timeline.js";const f="text/html",w="Content-Type",x=async({createApp:d,handler:C,renderToStream:x,policy:y,spaShell:R},S,{abortDelay:b=15e3,getState:q,hydration:v="footer",nonce:g,bootstrapScriptContent:E,onError:j,onResponse:k,onRouterReady:H,onShellError:P,onShellReady:T,prepare:A,routerRequestContext:B,documentHeaders:D,sessionCookie:L,protectPrivate:_},$)=>{const I=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"===I)return S.isSpa=!0,S.isStream=!1,S.matches=t(C.dataRoutes,new URL(S.request.url),y?.basename)??[],S.html=R(S.html),await(A?.({context:S,executionContext:$})),D&&(S.response.headers=c(D,{sessionCookie:L,protectPrivate:_})(S)),S.response.status=200,S.response.headers.set(w,"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 U=await C.query(S.request,{requestContext:B??S});if(S.timeline?.record("router.query"),U instanceof Response)return l(S.request,m(U,S.response.headers));S.routerContext=U,S.matches=U.matches;const z=new i(U,S.diagnostics,g,S.timeline);try{await(A?.({context:S,executionContext:$})),S.timeline?.record("prepare")}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(C.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,S.timeline?.abort(e),W(),S.didError??=o.RenderCancel,z.abort(),K.abort(e),N?.abort(e))},Y=setTimeout(()=>{S.didError=o.RenderTimeout,S.timeline?.abort(new Error(`SSR render timed out after ${b}ms`)),X()},b);S.request.signal.aborted?X(S.request.signal.reason):S.request.signal.addEventListener("abort",Q,{once:!0});try{N=await x(J,{nonce:g,bootstrapScriptContent:"early"===v&&F?`(window.__ssrBoostStream = window.__ssrBoostStream || []).push(["shell"]);${E??""};document.currentScript?.remove();`:E,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 N.shellReady,S.timeline?.record("shell.ready"),F||await 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(w,f),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,m(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:i},d)=>{const l=e.serverContext.response;e.response.status=l?.status??e.response.status??e.routerContext.statusCode??200,e.response.headers.has(w)||e.response.headers.set(w,f);const m=r?.({context:e})??{},h="early"===s&&e.isStream,p=u(t?.({context:e}),e.diagnostics,o,Boolean(h));let C=m.header||e.html.header;const x=m.footer||e.html.footer;e.diagnostics?.inspectShell({header:C,footer:x});let y=x;return h?C+=p+d.state(!0):y=p+d.state(!1)+d.take()+y,a&&(e.response.headers=c(a,{sessionCookie:n,protectPrivate:i})(e)),{header:C,footer:y,headers:new Headers(e.response.headers),status:e.response.status}})(S,{getState:q,onShellReady:T,hydration:v,nonce:g,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,S.timeline,"early"===v&&F),i=h(a,k?(e,t)=>k({context:S,html:e,isEnd:t}):void 0,S.diagnostics);return N.start(),new Response(i,{headers:s,status:o})}catch(e){throw X(e),N.stream.locked||await N.stream.cancel(e).catch(()=>{}),e}var Z},y=async(e,t,r,s)=>{const o=t.timeline??C(t.request,Boolean(t.diagnostics));o&&(t.timeline=o);try{const a=await x(e,t,r,s);return t.diagnostics?.inspectCachePolicy(a.headers,Boolean(r.sessionCookie&&d(t.request,r.sessionCookie))),o?.response(a)??a}catch(e){throw o?.abort(e),o?.end(),e}};export{y 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","timeline","record","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","Error","aborted","addEventListener","once","streamError","obtainStreamError","code","RenderAborted","Promise","all","allReady","done","then","shellReady","stream","catch","shellError","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","createTimeline","inspectCachePolicy","hasCookie","end"],"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"}