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

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 (71) hide show
  1. package/README.md +23 -0
  2. package/adapters/express/render.js +1 -1
  3. package/adapters/express/render.js.map +1 -1
  4. package/browser/entry.js.map +1 -1
  5. package/cloudflare.d.ts +59 -0
  6. package/cloudflare.js +2 -0
  7. package/cloudflare.js.map +1 -0
  8. package/core/cache-control.d.ts +4 -0
  9. package/core/cache-control.js +1 -1
  10. package/core/cache-control.js.map +1 -1
  11. package/core/conditional-request.d.ts +2 -1
  12. package/core/conditional-request.js +1 -1
  13. package/core/conditional-request.js.map +1 -1
  14. package/core/copy-loader-headers.d.ts +1 -1
  15. package/core/copy-loader-headers.js +1 -1
  16. package/core/copy-loader-headers.js.map +1 -1
  17. package/core/document-headers.js +1 -1
  18. package/core/document-headers.js.map +1 -1
  19. package/core/handler.js +1 -1
  20. package/core/handler.js.map +1 -1
  21. package/core/render.d.ts +1 -0
  22. package/core/render.js +1 -1
  23. package/core/render.js.map +1 -1
  24. package/core/spa-html.js.map +1 -1
  25. package/core/spa-shell.js +1 -1
  26. package/core/spa-shell.js.map +1 -1
  27. package/core/ssr-policy.d.ts +37 -4
  28. package/core/ssr-policy.js +1 -1
  29. package/core/ssr-policy.js.map +1 -1
  30. package/core/types.d.ts +5 -1
  31. package/http.d.ts +12 -0
  32. package/node/production.d.ts +10 -4
  33. package/node/production.js +1 -1
  34. package/node/production.js.map +1 -1
  35. package/package.json +10 -3
  36. package/services/diagnostics.d.ts +18 -1
  37. package/services/diagnostics.js.map +1 -1
  38. package/services/request-timeline.d.ts +31 -2
  39. package/services/request-timeline.js +1 -1
  40. package/services/request-timeline.js.map +1 -1
  41. package/services/route-asset-preparer.d.ts +7 -0
  42. package/services/route-asset-preparer.js +2 -0
  43. package/services/route-asset-preparer.js.map +1 -0
  44. package/services/route-assets-memory.d.ts +75 -0
  45. package/services/route-assets-memory.js +2 -0
  46. package/services/route-assets-memory.js.map +1 -0
  47. package/services/route-assets.d.ts +9 -55
  48. package/services/route-assets.js +1 -1
  49. package/services/route-assets.js.map +1 -1
  50. package/services/ssr-manifest.d.ts +4 -4
  51. package/services/ssr-manifest.js +1 -1
  52. package/services/ssr-manifest.js.map +1 -1
  53. package/testing/browser-observer.d.ts +13 -7
  54. package/testing/browser-observer.js +1 -1
  55. package/testing/browser-observer.js.map +1 -1
  56. package/testing/create-handler.d.ts +1 -0
  57. package/testing/create-handler.js.map +1 -1
  58. package/testing/deferred.js.map +1 -1
  59. package/testing/edge.d.ts +12 -0
  60. package/testing/edge.js.map +1 -1
  61. package/testing/parse-response.js.map +1 -1
  62. package/testing/playwright.d.ts +2 -0
  63. package/testing/playwright.js +1 -1
  64. package/testing/playwright.js.map +1 -1
  65. package/testing/requests.d.ts +3 -0
  66. package/testing/requests.js.map +1 -1
  67. package/testing/response.d.ts +49 -3
  68. package/testing/response.js +1 -1
  69. package/testing/response.js.map +1 -1
  70. package/testing.d.ts +12 -0
  71. package/testing.js.map +1 -1
package/core/types.d.ts CHANGED
@@ -1,4 +1,8 @@
1
- export interface ISsrExecutionContext {
1
+ export interface ISsrExecutionContext<TPlatform = unknown> {
2
+ /** Runtime bindings and the native execution context, supplied by an adapter. */
3
+ platform?: TPlatform;
4
+ /** Extend request lifetime for background work supported by the runtime. */
5
+ waitUntil?: (promise: Promise<unknown>) => void;
2
6
  /**
3
7
  * Deliver informational headers outside the final Fetch response when supported.
4
8
  */
package/http.d.ts CHANGED
@@ -1,7 +1,19 @@
1
+ /**
2
+ * Server-only HTTP helpers use Fetch primitives and can also run on the edge.
3
+ */
1
4
  export { default as cacheControl } from './core/cache-control.js';
2
5
  export type { ICachePolicy } from './core/cache-control.js';
6
+ /**
7
+ * Evaluate conditional requests against application-supplied validators.
8
+ */
3
9
  export { default as conditionalRequest } from './core/conditional-request.js';
4
10
  export type { IConditionalValidators } from './core/conditional-request.js';
11
+ /**
12
+ * Copy explicitly allowed loader and action headers to a document response.
13
+ */
5
14
  export { default as copyLoaderHeaders } from './core/copy-loader-headers.js';
15
+ /**
16
+ * Apply document header rules with credential protection.
17
+ */
6
18
  export { default as documentHeaders } from './core/document-headers.js';
7
19
  export type { IDocumentHeaderContext, IDocumentHeaderRule, IDocumentHeadersOptions, IDocumentRuleContext, } from './core/document-headers.js';
@@ -1,12 +1,18 @@
1
1
  import type { ICreateHandlerOptions, IHtmlShell } from '../core/handler.js';
2
+ import type { TRouteAssetsManifest } from '../services/route-assets.js';
2
3
  interface ILoadHtmlShellOptions {
3
4
  indexFile: string;
4
5
  outlet?: string;
5
6
  }
6
- interface IRouteAssetPreparerOptions {
7
+ type TRouteAssetPreparerOptions = ({
7
8
  buildDir: string;
9
+ manifest?: never;
10
+ } | {
11
+ manifest: TRouteAssetsManifest;
12
+ buildDir?: never;
13
+ }) & {
8
14
  modulePreload?: boolean;
9
- }
15
+ };
10
16
  /**
11
17
  * Read a built document once and supply a fresh shell for each request.
12
18
  */
@@ -14,6 +20,6 @@ declare const loadHtmlShell: ({ indexFile, outlet, }: ILoadHtmlShellOptions) =>
14
20
  /**
15
21
  * Inject matched route assets using a manifest cache owned by this preparer.
16
22
  */
17
- declare const createRouteAssetPreparer: <TAppProps = Record<string, any>>({ buildDir, modulePreload, }: IRouteAssetPreparerOptions) => NonNullable<ICreateHandlerOptions<TAppProps>["prepare"]>;
23
+ declare const createRouteAssetPreparer: <TAppProps = Record<string, any>>({ buildDir, manifest, modulePreload, }: TRouteAssetPreparerOptions) => NonNullable<ICreateHandlerOptions<TAppProps>["prepare"]>;
18
24
  export { createRouteAssetPreparer, loadHtmlShell };
19
- export type { IHtmlShell, ILoadHtmlShellOptions, IRouteAssetPreparerOptions };
25
+ export type { IHtmlShell, ILoadHtmlShellOptions, TRouteAssetPreparerOptions as IRouteAssetPreparerOptions, TRouteAssetsManifest, };
@@ -1,2 +1,2 @@
1
- import{readFile as t}from"node:fs/promises";import{splitHtmlShell as e}from"../services/diagnostics.js";import s from"../services/route-assets.js";const o=async({indexFile:s,outlet:o="\x3c!--ssr-outlet--\x3e"})=>{const r=await t(s,"utf8"),[n,i]=e(r,s,o);return()=>({header:n,footer:i})},r=({buildDir:t,modulePreload:e=!1})=>{const o=new s(t,e);return async({context:t,executionContext:e})=>{const s=o.injectAssets(t);s.has("Link")&&await(e?.onEarlyHints?.(s))}};export{r as createRouteAssetPreparer,o as loadHtmlShell};
1
+ import{readFile as e}from"node:fs/promises";import{splitHtmlShell as r}from"../services/diagnostics.js";import s from"../services/route-asset-preparer.js";import o from"../services/route-assets.js";const t=async({indexFile:s,outlet:o="\x3c!--ssr-outlet--\x3e"})=>{const t=await e(s,"utf8"),[i,m]=r(t,s,o);return()=>({header:i,footer:m})},i=({buildDir:e,manifest:r,modulePreload:t=!1})=>s(new o(r??e,t));export{i as createRouteAssetPreparer,t as loadHtmlShell};
2
2
  //# sourceMappingURL=production.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"production.js","sources":["../../src/node/production.ts"],"sourcesContent":[null],"names":["loadHtmlShell","async","indexFile","outlet","html","readFile","header","footer","splitHtmlShell","createRouteAssetPreparer","buildDir","modulePreload","assets","RouteAssets","context","executionContext","hints","injectAssets","has","onEarlyHints"],"mappings":"mJAkBA,MAAMA,EAAgBC,OACpBC,YACAC,SAAS,8BAET,MAAMC,QAAaC,EAASH,EAAW,SAChCI,EAAQC,GAAUC,EAAeJ,EAAMF,EAAWC,GAEzD,MAAO,KAAA,CAASG,SAAQC,YAMpBE,EAA2B,EAC/BC,WACAC,iBAAgB,MAEhB,MAAMC,EAAS,IAAIC,EAAYH,EAAUC,GAEzC,OAAOV,OAASa,UAASC,uBACvB,MAAMC,EAAQJ,EAAOK,aAAaH,GAE9BE,EAAME,IAAI,eACNH,GAAkBI,eAAeH"}
1
+ {"version":3,"file":"production.js","sources":["../../src/node/production.ts"],"sourcesContent":[null],"names":["loadHtmlShell","async","indexFile","outlet","html","readFile","header","footer","splitHtmlShell","createRouteAssetPreparer","buildDir","manifest","modulePreload","createAssetPreparer","RouteAssets"],"mappings":"sMAmBA,MAAMA,EAAgBC,OACpBC,YACAC,SAAS,8BAET,MAAMC,QAAaC,EAASH,EAAW,SAChCI,EAAQC,GAAUC,EAAeJ,EAAMF,EAAWC,GAEzD,MAAO,KAAA,CAASG,SAAQC,YAMpBE,EAA2B,EAC/BC,WACAC,WACAC,iBAAgB,KAETC,EAAoB,IAAIC,EAAYH,GAAYD,EAAUE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lomray/vite-ssr-boost",
3
- "version": "8.4.0-beta.3",
3
+ "version": "8.4.0",
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": {
@@ -93,7 +93,10 @@
93
93
  "test:bun": "bun scripts/test-bun.mjs",
94
94
  "test:template": "npm run build && node scripts/test-template.mjs",
95
95
  "test:coverage": "vitest run --coverage",
96
- "test:browser": "playwright test --config playwright.config.mjs"
96
+ "test:browser": "playwright test --config playwright.config.mjs",
97
+ "test:worker:packed": "node scripts/test-packed-worker.mjs",
98
+ "test:worker:browser": "playwright test --config playwright.worker.config.mjs",
99
+ "test:skills": "node scripts/test-skills.mjs"
97
100
  },
98
101
  "dependencies": {
99
102
  "chalk": "^6.0.0",
@@ -116,6 +119,8 @@
116
119
  "@babel/parser": "^8.0.4",
117
120
  "@babel/traverse": "^8.0.4",
118
121
  "@babel/types": "^8.0.4",
122
+ "@cloudflare/vite-plugin": "^1.54.4",
123
+ "@cloudflare/workers-types": "^5.20260906.1",
119
124
  "@commitlint/cli": "^21.2.2",
120
125
  "@commitlint/config-conventional": "^21.2.2",
121
126
  "@lomray/eslint-config": "^7.0.0",
@@ -163,7 +168,9 @@
163
168
  "typescript-eslint": "^8.69.0",
164
169
  "vite": "^8.2.2",
165
170
  "vitepress": "^1.6.4",
166
- "vitest": "^5.0.0"
171
+ "vitest": "^5.0.0",
172
+ "wrangler": "^4.129.0",
173
+ "yaml": "^2.9.0"
167
174
  },
168
175
  "peerDependencies": {
169
176
  "@babel/generator": ">=7.23.0",
@@ -26,10 +26,27 @@ declare const walkSerializable: (value: unknown, report: (issue: ISerializationI
26
26
  * Inspect one development response while allowing every chunk to stream immediately.
27
27
  */
28
28
  declare class Diagnostics {
29
+ /**
30
+ * Identify the route in request diagnostics.
31
+ */
29
32
  protected readonly route: string;
33
+ /**
34
+ * Deliver warnings and optional policy decisions through the runtime logger.
35
+ */
30
36
  protected readonly logger: Pick<Logger, 'warn'> & Partial<Pick<Logger, 'info'>>;
31
37
  protected chunks: string[];
32
- constructor(route: string, logger?: Pick<Logger, 'warn'> & Partial<Pick<Logger, 'info'>>);
38
+ /**
39
+ * Attach route context and the logger used for request diagnostics.
40
+ */
41
+ constructor(
42
+ /**
43
+ * Identify the route in request diagnostics.
44
+ */
45
+ route: string,
46
+ /**
47
+ * Deliver warnings and optional policy decisions through the runtime logger.
48
+ */
49
+ logger?: Pick<Logger, 'warn'> & Partial<Pick<Logger, 'info'>>);
33
50
  /**
34
51
  * Emit each concrete message once per process, including across handler instances.
35
52
  */
@@ -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","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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"}
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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"}
@@ -1,6 +1,7 @@
1
1
  type TRequestStage = 'router.query' | 'prepare' | 'shell.ready' | 'state.emitted' | 'stream.resolve' | 'stream.reject' | 'body.end' | 'response.end' | 'abort';
2
2
  interface ITimelineEvent {
3
3
  stage: TRequestStage;
4
+ /** Milliseconds since the request timeline started. */
4
5
  at: number;
5
6
  id?: number;
6
7
  placement?: 'early' | 'footer';
@@ -8,20 +9,48 @@ interface ITimelineEvent {
8
9
  }
9
10
  /** Request-local observations; never constructed on the disabled path. */
10
11
  declare class RequestTimeline {
12
+ /**
13
+ * Retain request metadata and its cancellation signal.
14
+ */
11
15
  protected readonly request: Request;
16
+ /**
17
+ * Retain observations in emission order.
18
+ */
12
19
  readonly events: ITimelineEvent[];
20
+ /**
21
+ * Anchor event offsets to a monotonic clock.
22
+ */
13
23
  readonly started: number;
24
+ /**
25
+ * Prevent observations after response completion.
26
+ */
14
27
  protected ended: boolean;
28
+ /**
29
+ * Record only the first cancellation reason.
30
+ */
15
31
  protected aborted: boolean;
16
- constructor(request: Request);
17
- protected onAbort: () => void;
32
+ /**
33
+ * Observe cancellation from the request's signal.
34
+ */
35
+ constructor(
36
+ /**
37
+ * Retain request metadata and its cancellation signal.
38
+ */
39
+ request: Request);
18
40
  /** Offsets mark completion/emission, not the beginning of a stage. */
19
41
  record(stage: TRequestStage, detail?: Omit<ITimelineEvent, 'stage' | 'at'>): void;
42
+ /**
43
+ * Attach the first cancellation reason to the timeline.
44
+ */
20
45
  abort(reason?: unknown): void;
21
46
  /** Emit one JSON line only when explicitly requested in development. */
22
47
  end(): void;
23
48
  /** Observe final transformed bytes without reading ahead of the consumer. */
24
49
  response(response: Response): Response;
50
+ /**
51
+ * Forward request cancellation without losing the timeline receiver.
52
+ */
53
+ protected onAbort: () => void;
25
54
  }
26
55
  /** Keep the constructor, event array and clock reads behind the enablement check. */
27
56
  declare const createTimeline: (request: Request, diagnostics: boolean) => RequestTimeline | undefined;
@@ -1,2 +1,2 @@
1
- const e=e=>{if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)??"Render cancelled"}catch{return"Unserializable abort reason"}};class t{request;events=[];started=performance.now();ended=!1;aborted=!1;constructor(e){this.request=e,e.signal.aborted?this.onAbort():e.signal.addEventListener("abort",this.onAbort,{once:!0})}onAbort=()=>this.abort(this.request.signal.reason);record(e,t){this.ended||this.events.push({stage:e,at:performance.now()-this.started,...t})}abort(t){this.aborted||(this.aborted=!0,this.record("abort",{reason:e(t)}))}end(){this.ended||(this.record("response.end"),this.ended=!0,this.request.signal.removeEventListener("abort",this.onAbort),"undefined"!=typeof process&&"1"===process.env.SSR_BOOST_TIMELINE&&"production"!==process.env.NODE_ENV&&console.info(JSON.stringify({type:"SSR_BOOST_TIMELINE",method:this.request.method,path:new URL(this.request.url).pathname,timeline:this.events})))}response(e){if(!e.body)return this.end(),e;const t=e.body.getReader();let r=!1;const s=()=>{r=!0,t.releaseLock(),this.end()},n=new ReadableStream({cancel:async e=>{r=!0,this.abort(e);try{await t.cancel(e)}finally{s()}},pull:async e=>{try{const n=await t.read();if(r)return;n.done?(s(),e.close()):e.enqueue(n.value)}catch(t){r||(this.abort(t),s(),e.error(t))}}},{highWaterMark:0});return new Response(n,e)}}const r=(e,r)=>r||"undefined"!=typeof process&&"1"===process.env.SSR_BOOST_TIMELINE?new t(e):void 0;export{r as createTimeline,t as default};
1
+ const e=e=>{if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)??"Render cancelled"}catch{return"Unserializable abort reason"}};class t{request;events=[];started=performance.now();ended=!1;aborted=!1;constructor(e){this.request=e;const{signal:t}=e;t.aborted?this.onAbort():t.addEventListener("abort",this.onAbort,{once:!0})}record(e,t){this.ended||this.events.push({stage:e,at:performance.now()-this.started,...t})}abort(t){this.aborted||(this.aborted=!0,this.record("abort",{reason:e(t)}))}end(){this.ended||(this.record("response.end"),this.ended=!0,this.request.signal.removeEventListener("abort",this.onAbort),"undefined"!=typeof process&&"1"===process.env.SSR_BOOST_TIMELINE&&"production"!==process.env.NODE_ENV&&console.info(JSON.stringify({type:"SSR_BOOST_TIMELINE",method:this.request.method,path:new URL(this.request.url).pathname,timeline:this.events})))}response(e){const{body:t}=e;if(!t)return this.end(),e;const r=t.getReader();let s=!1;const n=()=>{s=!0,r.releaseLock(),this.end()},o=new ReadableStream({cancel:async e=>{s=!0,this.abort(e);try{await r.cancel(e)}finally{n()}},pull:async e=>{try{const{done:t,value:o}=await r.read();if(s)return;t?(n(),e.close()):e.enqueue(o)}catch(t){s||(this.abort(t),n(),e.error(t))}}},{highWaterMark:0});return new Response(o,e)}onAbort=()=>this.abort(this.request.signal.reason)}const r=(e,r)=>r||"undefined"!=typeof process&&"1"===process.env.SSR_BOOST_TIMELINE?new t(e):void 0;export{r as createTimeline,t as default};
2
2
  //# sourceMappingURL=request-timeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-timeline.js","sources":["../../src/services/request-timeline.ts"],"sourcesContent":[null],"names":["describeReason","reason","Error","message","JSON","stringify","RequestTimeline","request","events","started","performance","now","ended","aborted","constructor","this","signal","onAbort","addEventListener","once","abort","record","stage","detail","push","at","end","removeEventListener","process","env","SSR_BOOST_TIMELINE","NODE_ENV","console","info","type","method","path","URL","url","pathname","timeline","response","body","reader","getReader","isStopped","finish","releaseLock","ReadableStream","cancel","async","pull","controller","chunk","read","done","close","enqueue","value","error","highWaterMark","Response","createTimeline","diagnostics","undefined"],"mappings":"AAoBA,MAAMA,EAAkBC,IACtB,GAAIA,aAAkBC,MACpB,OAAOD,EAAOE,QAGhB,GAAsB,iBAAXF,EACT,OAAOA,EAGT,IACE,OAAOG,KAAKC,UAAUJ,IAAW,kBACnC,CAAE,MACA,MAAO,6BACT,GAIF,MAAMK,EAMkCC,QALtBC,OAA2B,GAC3BC,QAAUC,YAAYC,MAC5BC,OAAQ,EACRC,SAAU,EAEpB,WAAAC,CAAsCP,GAAAQ,KAAAR,QAAAA,EAChCA,EAAQS,OAAOH,QACjBE,KAAKE,UAELV,EAAQS,OAAOE,iBAAiB,QAASH,KAAKE,QAAS,CAAEE,MAAM,GAEnE,CAEUF,QAAU,IAAYF,KAAKK,MAAML,KAAKR,QAAQS,OAAOf,QAGxD,MAAAoB,CAAOC,EAAsBC,GAC7BR,KAAKH,OACRG,KAAKP,OAAOgB,KAAK,CAAEF,QAAOG,GAAIf,YAAYC,MAAQI,KAAKN,WAAYc,GAEvE,CAEO,KAAAH,CAAMnB,GACNc,KAAKF,UACRE,KAAKF,SAAU,EACfE,KAAKM,OAAO,QAAS,CAAEpB,OAAQD,EAAeC,KAElD,CAGO,GAAAyB,GACDX,KAAKH,QAITG,KAAKM,OAAO,gBACZN,KAAKH,OAAQ,EACbG,KAAKR,QAAQS,OAAOW,oBAAoB,QAASZ,KAAKE,SAGjC,oBAAZW,SAC4B,MAAnCA,QAAQC,IAAIC,oBACa,eAAzBF,QAAQC,IAAIE,UAEZC,QAAQC,KACN7B,KAAKC,UAAU,CACb6B,KAAM,qBACNC,OAAQpB,KAAKR,QAAQ4B,OACrBC,KAAM,IAAIC,IAAItB,KAAKR,QAAQ+B,KAAKC,SAChCC,SAAUzB,KAAKP,UAIvB,CAGO,QAAAiC,CAASA,GACd,IAAKA,EAASC,KAGZ,OAFA3B,KAAKW,MAEEe,EAGT,MAAME,EAASF,EAASC,KAAKE,YAC7B,IAAIC,GAAY,EAChB,MAAMC,EAAS,KACbD,GAAY,EACZF,EAAOI,cACPhC,KAAKW,OAEDgB,EAAO,IAAIM,eACf,CACEC,OAAQC,MAAOjD,IACb4C,GAAY,EACZ9B,KAAKK,MAAMnB,GAEX,UACQ0C,EAAOM,OAAOhD,EACtB,SACE6C,GACF,GAEFK,KAAMD,MAAOE,IACX,IACE,MAAMC,QAAcV,EAAOW,OAE3B,GAAIT,EACF,OAGEQ,EAAME,MACRT,IACAM,EAAWI,SAEXJ,EAAWK,QAAQJ,EAAMK,MAE7B,CAAE,MAAOC,GACFd,IACH9B,KAAKK,MAAMuC,GACXb,IACAM,EAAWO,MAAMA,GAErB,IAGJ,CAAEC,cAAe,IAGnB,OAAO,IAAIC,SAASnB,EAAMD,EAC5B,EAIF,MAAMqB,EAAiB,CAACvD,EAAkBwD,IACxCA,GAAmC,oBAAZnC,SAA8D,MAAnCA,QAAQC,IAAIC,mBAC1D,IAAIxB,EAAgBC,QACpByD"}
1
+ {"version":3,"file":"request-timeline.js","sources":["../../src/services/request-timeline.ts"],"sourcesContent":[null],"names":["describeReason","reason","Error","message","JSON","stringify","RequestTimeline","request","events","started","performance","now","ended","aborted","constructor","this","signal","onAbort","addEventListener","once","record","stage","detail","push","at","abort","end","removeEventListener","process","env","SSR_BOOST_TIMELINE","NODE_ENV","console","info","type","method","path","URL","url","pathname","timeline","response","body","responseBody","reader","getReader","isStopped","finish","releaseLock","ReadableStream","cancel","async","pull","controller","done","isDone","value","read","close","enqueue","error","highWaterMark","Response","createTimeline","diagnostics","undefined"],"mappings":"AAsBA,MAAMA,EAAkBC,IACtB,GAAIA,aAAkBC,MACpB,OAAOD,EAAOE,QAGhB,GAAsB,iBAAXF,EACT,OAAOA,EAGT,IACE,OAAOG,KAAKC,UAAUJ,IAAW,kBACnC,CAAE,MACA,MAAO,6BACT,GAIF,MAAMK,EA4BiBC,QAxBLC,OAA2B,GAK3BC,QAAUC,YAAYC,MAK5BC,OAAQ,EAKRC,SAAU,EAKpB,WAAAC,CAIqBP,GAAAQ,KAAAR,QAAAA,EAEnB,MAAMS,OAAEA,GAAWT,EAEfS,EAAOH,QACTE,KAAKE,UAELD,EAAOE,iBAAiB,QAASH,KAAKE,QAAS,CAAEE,MAAM,GAE3D,CAGO,MAAAC,CAAOC,EAAsBC,GAC7BP,KAAKH,OACRG,KAAKP,OAAOe,KAAK,CAAEF,QAAOG,GAAId,YAAYC,MAAQI,KAAKN,WAAYa,GAEvE,CAKO,KAAAG,CAAMxB,GACNc,KAAKF,UACRE,KAAKF,SAAU,EACfE,KAAKK,OAAO,QAAS,CAAEnB,OAAQD,EAAeC,KAElD,CAGO,GAAAyB,GACDX,KAAKH,QAITG,KAAKK,OAAO,gBACZL,KAAKH,OAAQ,EACbG,KAAKR,QAAQS,OAAOW,oBAAoB,QAASZ,KAAKE,SAGjC,oBAAZW,SAC4B,MAAnCA,QAAQC,IAAIC,oBACa,eAAzBF,QAAQC,IAAIE,UAEZC,QAAQC,KACN7B,KAAKC,UAAU,CACb6B,KAAM,qBACNC,OAAQpB,KAAKR,QAAQ4B,OACrBC,KAAM,IAAIC,IAAItB,KAAKR,QAAQ+B,KAAKC,SAChCC,SAAUzB,KAAKP,UAIvB,CAGO,QAAAiC,CAASA,GACd,MAAQC,KAAMC,GAAiBF,EAE/B,IAAKE,EAGH,OAFA5B,KAAKW,MAEEe,EAGT,MAAMG,EAASD,EAAaE,YAC5B,IAAIC,GAAY,EAKhB,MAAMC,EAAS,KACbD,GAAY,EACZF,EAAOI,cACPjC,KAAKW,OAEDgB,EAAO,IAAIO,eACf,CAIEC,OAAQC,MAAOlD,IACb6C,GAAY,EACZ/B,KAAKU,MAAMxB,GAEX,UACQ2C,EAAOM,OAAOjD,EACtB,SACE8C,GACF,GAMFK,KAAMD,MAAOE,IACX,IACE,MAAQC,KAAMC,EAAMC,MAAEA,SAAgBZ,EAAOa,OAE7C,GAAIX,EACF,OAGES,GACFR,IACAM,EAAWK,SAEXL,EAAWM,QAAQH,EAEvB,CAAE,MAAOI,GACFd,IACH/B,KAAKU,MAAMmC,GACXb,IACAM,EAAWO,MAAMA,GAErB,IAGJ,CAAEC,cAAe,IAGnB,OAAO,IAAIC,SAASpB,EAAMD,EAC5B,CAKUxB,QAAU,IAAYF,KAAKU,MAAMV,KAAKR,QAAQS,OAAOf,QAIjE,MAAM8D,EAAiB,CAACxD,EAAkByD,IACxCA,GAAmC,oBAAZpC,SAA8D,MAAnCA,QAAQC,IAAIC,mBAC1D,IAAIxB,EAAgBC,QACpB0D"}
@@ -0,0 +1,7 @@
1
+ import type { ICreateHandlerOptions } from '../core/handler.js';
2
+ import type RouteAssets from './route-assets-memory.js';
3
+ /**
4
+ * Share route injection across runtimes, computing hints only for supported transports.
5
+ */
6
+ declare const createAssetPreparer: <TAppProps = Record<string, any>>(assets: RouteAssets) => NonNullable<ICreateHandlerOptions<TAppProps>["prepare"]>;
7
+ export default createAssetPreparer;
@@ -0,0 +1,2 @@
1
+ const t=t=>async({context:n,executionContext:o})=>{const s=t.injectAssets(n,Boolean(o?.onEarlyHints));s.has("Link")&&await(o?.onEarlyHints?.(s))};export{t as default};
2
+ //# sourceMappingURL=route-asset-preparer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-asset-preparer.js","sources":["../../src/services/route-asset-preparer.ts"],"sourcesContent":[null],"names":["createAssetPreparer","assets","async","context","executionContext","hints","injectAssets","Boolean","onEarlyHints","has"],"mappings":"AAMA,MAAMA,EACJC,GAKOC,OAASC,UAASC,uBACvB,MAAMC,EAAQJ,EAAOK,aAAaH,EAASI,QAAQH,GAAkBI,eAEjEH,EAAMI,IAAI,eACNL,GAAkBI,eAAeH"}
@@ -0,0 +1,75 @@
1
+ import type { RouterState, StaticHandlerContext } from 'react-router';
2
+ declare enum AssetType {
3
+ style = "style",
4
+ script = "script",
5
+ image = "image",
6
+ font = "font"
7
+ }
8
+ interface IAsset {
9
+ type: string;
10
+ url: string;
11
+ /** Lower weights are injected first. */
12
+ weight: number;
13
+ /** Nested assets follow top-level assets with the same weight. */
14
+ isNested: boolean;
15
+ isPreload: boolean;
16
+ content?: string;
17
+ }
18
+ type TAssets = {
19
+ [id: string]: IAsset;
20
+ };
21
+ /** Parsed build/client/assets-manifest.json; accepts a JSON module directly. */
22
+ type TRouteAssetsManifest = Readonly<Record<string, readonly IAsset[]>>;
23
+ interface IInjectAssetsContext {
24
+ html: {
25
+ header: string;
26
+ };
27
+ routerContext?: StaticHandlerContext;
28
+ matches?: RouterState['matches'];
29
+ isSpa?: boolean;
30
+ }
31
+ /**
32
+ * Load and inject route assets with an independent cache for one build.
33
+ */
34
+ declare class RouteAssets {
35
+ /**
36
+ * Control module preload hints for matched scripts.
37
+ */
38
+ protected readonly modulePreload: boolean;
39
+ /**
40
+ * Keep the build's route assets isolated from other handler instances.
41
+ */
42
+ protected routesAssets: TRouteAssetsManifest | null;
43
+ /**
44
+ * Retain the supplied manifest and preload preference.
45
+ */
46
+ constructor(manifest: TRouteAssetsManifest, modulePreload?: boolean);
47
+ /**
48
+ * Development manifests override this to inject inline styles.
49
+ */
50
+ protected get isDev(): boolean;
51
+ /**
52
+ * Build preload hints without depending on a particular HTTP transport.
53
+ */
54
+ getEarlyHints(assets: IAsset[]): Headers;
55
+ /**
56
+ * Inject route assets to head html
57
+ */
58
+ injectAssets({ routerContext, matches, html, isSpa }: IInjectAssetsContext, earlyHints?: boolean): Headers;
59
+ /**
60
+ * Read the manifest without requiring a filesystem.
61
+ */
62
+ protected loadAssetsManifest(): TRouteAssetsManifest;
63
+ /**
64
+ * Sort assets
65
+ */
66
+ protected sortAssets(assets: IAsset[]): IAsset[];
67
+ /**
68
+ * Get route assets
69
+ * The development manifest uses the SPA flag to preload unqueried lazy routes.
70
+ */
71
+ protected getAssets(routes?: RouterState['matches'], _isSpa?: boolean): IAsset[];
72
+ }
73
+ export { AssetType };
74
+ export type { IAsset, TAssets, TRouteAssetsManifest };
75
+ export default RouteAssets;
@@ -0,0 +1,2 @@
1
+ var e;!function(e){e.style="style",e.script="script",e.image="image",e.font="font"}(e||(e={}));let s=class{modulePreload;routesAssets;constructor(e,s=!1){this.routesAssets=e,this.modulePreload=s}get isDev(){return!1}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:t,isSpa:r},i=!0){const l=this.getAssets(s??e?.matches,r),n=l.map(({type:e,url:s,isPreload:t,content:i=""})=>{switch(e){case"style":return this.isDev?`<style data-vite-dev-id="${s}">${i}</style>`:`<link rel="stylesheet" href="${s}">`;case"script":return t?this.modulePreload||r?`<link rel="modulepreload" as="script" crossorigin href="${s}">`:null:`<script async type="module" crossorigin src="${s}"><\/script>`}return null}).filter(Boolean);return t.header=t.header.replace("</head>",`${n.join("\n")}</head>`),i?this.getEarlyHints(l):new Headers}loadAssetsManifest(){return this.routesAssets??{}}sortAssets(e){return e.sort(({weight:e,isNested:s},{weight:t,isNested:r})=>e===t?Number(s)-Number(r):e-t)}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))}};export{e as AssetType,s as default};
2
+ //# sourceMappingURL=route-assets-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-assets-memory.js","sources":["../../src/services/route-assets-memory.ts"],"sourcesContent":[null],"names":["AssetType","RouteAssets$1","modulePreload","routesAssets","constructor","manifest","this","isDev","getEarlyHints","assets","headers","Headers","forEach","type","url","includes","append","injectAssets","routerContext","matches","html","isSpa","earlyHints","getAssets","htmlAssets","map","isPreload","content","filter","Boolean","header","replace","join","loadAssetsManifest","sortAssets","sort","weight","isNested","nextWeight","isNextNested","Number","routes","_isSpa","routeIds","route","id","length","routeId","flat"],"mappings":"AAEA,IAAKA,GAAL,SAAKA,GACHA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,KAAA,MACD,CALD,CAAKA,IAAAA,EAAS,CAAA,IAqCd,IAAAC,EAAA,MAIqBC,cAKTC,aAKV,WAAAC,CAAYC,EAAgCH,GAAgB,GAC1DI,KAAKH,aAAeE,EACpBC,KAAKJ,cAAgBA,CACvB,CAKA,SAAcK,GACZ,OAAO,CACT,CAKO,aAAAC,CAAcC,GACnB,MAAMC,EAAU,IAAIC,QAapB,OARAF,EAAOG,QAAQ,EAAGC,OAAMC,UACjBD,GAAS,CAAC,QAAS,UAAUE,SAASF,IAI3CH,EAAQM,OAAO,OAAQ,IAAIF,uBAAyBD,OAG/CH,CACT,CAKO,YAAAO,EACLC,cAAEA,EAAaC,QAAEA,EAAOC,KAAEA,EAAIC,MAAEA,GAChCC,GAAa,GAEb,MAAMb,EAASH,KAAKiB,UAAUJ,GAAWD,GAAeC,QAASE,GAK3DG,EAAaf,EAChBgB,IAAI,EAAGZ,OAAMC,MAAKY,YAAWC,UAAU,OACtC,OAAQd,GACN,IAAK,QACH,OAAOP,KAAKC,MACR,4BAA4BO,MAAQa,YACpC,gCAAgCb,MAEtC,IAAK,SACH,OAAOY,EACHpB,KAAKJ,eAAiBmB,EAEpB,2DAA2DP,MAC3D,KACF,gDAAgDA,gBAGxD,OAAO,OAERc,OAAOC,SAIV,OAFAT,EAAKU,OAASV,EAAKU,OAAOC,QAAQ,UAAW,GAAGP,EAAWQ,KAAK,gBAEzDV,EAAahB,KAAKE,cAAcC,GAAU,IAAIE,OACvD,CAKU,kBAAAsB,GACR,OAAO3B,KAAKH,cAAgB,CAAA,CAC9B,CAKU,UAAA+B,CAAWzB,GACnB,OAAOA,EAAO0B,KAAK,EAAGC,SAAQC,aAAcD,OAAQE,EAAYD,SAAUE,KACxEH,IAAWE,EAAaE,OAAOH,GAAYG,OAAOD,GAAgBH,EAASE,EAE/E,CAOU,SAAAf,CAAUkB,EAAiCC,GACnD,MAAMC,EAAWF,GAAQhB,IAAI,EAAGmB,WAAYA,EAAMC,IAAIjB,OAAOC,UAAY,GAEzE,IAAKc,EAASG,OACZ,MAAO,GAGT,MAAM3C,EAAeG,KAAK2B,qBAE1B,OAAO3B,KAAK4B,WACVS,EACGlB,IAAKsB,GAAY5C,EAAa4C,IAC9BC,OACApB,OAAOC,SAEd"}
@@ -1,66 +1,20 @@
1
- import type { RouterState, StaticHandlerContext } from 'react-router';
2
- declare enum AssetType {
3
- style = "style",
4
- script = "script",
5
- image = "image",
6
- font = "font"
7
- }
8
- interface IAsset {
9
- type: AssetType;
10
- url: string;
11
- weight: number;
12
- isNested: boolean;
13
- isPreload: boolean;
14
- content?: string;
15
- }
16
- type TAssets = {
17
- [id: string]: IAsset;
18
- };
19
- interface IInjectAssetsContext {
20
- html: {
21
- header: string;
22
- };
23
- routerContext?: StaticHandlerContext;
24
- matches?: RouterState['matches'];
25
- isSpa?: boolean;
26
- }
1
+ import MemoryRouteAssets from './route-assets-memory.js';
2
+ import type { TRouteAssetsManifest } from './route-assets-memory.js';
27
3
  /**
28
- * Load and inject route assets with an independent cache for one build.
4
+ * Keep the Node manifest cache while also accepting a parsed JSON manifest.
29
5
  */
30
- declare class RouteAssets {
6
+ declare class RouteAssets extends MemoryRouteAssets {
31
7
  protected readonly outputDir: string;
32
- protected readonly modulePreload: boolean;
33
- protected routesAssets: Record<string, IAsset[]> | null;
34
- constructor(buildDir: string, modulePreload?: boolean);
35
- /**
36
- * Development manifests override this to inject inline styles.
37
- */
38
- protected get isDev(): boolean;
8
+ constructor(buildDir: string | TRouteAssetsManifest, modulePreload?: boolean);
39
9
  /**
40
10
  * Get assets manifest file name.
41
11
  */
42
12
  protected getAssetsManifestFile(): string;
43
13
  /**
44
- * Load assets manifest
45
- */
46
- protected loadAssetsManifest(): Record<string, IAsset[]>;
47
- /**
48
- * Sort assets
49
- */
50
- protected sortAssets(assets: IAsset[]): IAsset[];
51
- /**
52
- * Get route assets
53
- */
54
- protected getAssets(routes?: RouterState['matches'], _isSpa?: boolean): IAsset[];
55
- /**
56
- * Build preload hints without depending on a particular HTTP transport.
57
- */
58
- getEarlyHints(assets: IAsset[]): Headers;
59
- /**
60
- * Inject route assets to head html
14
+ * Load and cache the Node manifest on first use.
61
15
  */
62
- injectAssets({ routerContext, matches, html, isSpa }: IInjectAssetsContext): Headers;
16
+ protected loadAssetsManifest(): TRouteAssetsManifest;
63
17
  }
64
- export { AssetType };
65
- export type { IAsset, TAssets };
18
+ export { AssetType } from './route-assets-memory.js';
19
+ export type { IAsset, TAssets, TRouteAssetsManifest } from './route-assets-memory.js';
66
20
  export default RouteAssets;
@@ -1,2 +1,2 @@
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};
1
+ import s from"node:fs";import t from"node:path";import e from"./route-assets-memory.js";export{AssetType}from"./route-assets-memory.js";class r extends e{outputDir;constructor(s,e=!1){super("string"==typeof s?{}:s,e),this.outputDir="string"==typeof s?t.resolve(s):"",this.routesAssets="string"==typeof s?null:s}getAssetsManifestFile(){return t.join(this.outputDir,"server","assets-manifest.json")}loadAssetsManifest(){if(null!==this.routesAssets)return this.routesAssets;const t=this.getAssetsManifestFile();return s.existsSync(t)?(this.routesAssets=JSON.parse(s.readFileSync(t,"utf8")),this.routesAssets):{}}}export{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","_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"}
1
+ {"version":3,"file":"route-assets.js","sources":["../../src/services/route-assets.ts"],"sourcesContent":[null],"names":["RouteAssets","MemoryRouteAssets","outputDir","constructor","buildDir","modulePreload","super","this","path","resolve","routesAssets","getAssetsManifestFile","join","loadAssetsManifest","manifestFile","fs","existsSync","JSON","parse","readFileSync"],"mappings":"wIAQA,MAAMA,UAAoBC,EACLC,UAEnB,WAAAC,CAAYC,EAAyCC,GAAgB,GACnEC,MAA0B,iBAAbF,EAAwB,CAAA,EAAKA,EAAUC,GACpDE,KAAKL,UAAgC,iBAAbE,EAAwBI,EAAKC,QAAQL,GAAY,GACzEG,KAAKG,aAAmC,iBAAbN,EAAwB,KAAOA,CAC5D,CAKU,qBAAAO,GACR,OAAOH,EAAKI,KAAKL,KAAKL,UAAW,SAAU,uBAC7C,CAKU,kBAAAW,GACR,GAA0B,OAAtBN,KAAKG,aACP,OAAOH,KAAKG,aAGd,MAAMI,EAAeP,KAAKI,wBAE1B,OAAKI,EAAGC,WAAWF,IAInBP,KAAKG,aAAeO,KAAKC,MAAMH,EAAGI,aAAaL,EAAc,SAEtDP,KAAKG,cALH,CAAA,CAMX"}
@@ -72,6 +72,10 @@ declare class SsrManifest extends RouteAssets {
72
72
  * Use inline styles while the managed Vite server is running.
73
73
  */
74
74
  protected get isDev(): boolean;
75
+ /**
76
+ * Compile SSR graph styles before the browser has populated the client graph.
77
+ */
78
+ prepareDevAssets(routes?: RouterState['matches'], isSpa?: boolean): Promise<void>;
75
79
  /**
76
80
  * Get output dir.
77
81
  */
@@ -108,10 +112,6 @@ declare class SsrManifest extends RouteAssets {
108
112
  * Get development route assets
109
113
  */
110
114
  protected getDevModules(routes?: RouterState['matches']): ModuleNode[];
111
- /**
112
- * Compile SSR graph styles before the browser has populated the client graph.
113
- */
114
- prepareDevAssets(routes?: RouterState['matches'], isSpa?: boolean): Promise<void>;
115
115
  /**
116
116
  * Collect development assets from the current server and client module graphs.
117
117
  */
@@ -1,2 +1,2 @@
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};
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 from"./route-assets.js";import{AssetType as a}from"./route-assets-memory.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())}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))}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 s=this.loadClientManifest(),r=new i(this.config,this.viteAliases),o=this.getRoutesTreeIds(r.parse()),a=this.pathNormalize.getImportPostfix(),n={};Object.entries(o).forEach(([e,t])=>{const i=a.find(e=>void 0!==s[`${t}${e}`]),r=s[`${t}${i||""}`];n[e]=this.sortAssets(Object.values(this.getRouteAssets(s,r)))});const l=JSON.stringify(n,null,2);e.writeFileSync(this.getAssetsManifestFile(),l,{encoding:"utf-8"});const c=t.join(this.getOutDir(),"client");e.existsSync(c)&&e.writeFileSync(t.join(c,"assets-manifest.json"),l,{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}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","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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"}
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","prepareDevAssets","routes","isSpa","vite","Promise","all","getDevRouteIds","map","async","id","file","findAppFile","transformRequest","visited","Set","visit","module","has","url","add","test","importedModules","getDevModules","getOutDir","getAssetsManifestFile","loadClientManifest","clientManifestDir","clientSsrManifest","fs","existsSync","result","JSON","parse","readFileSync","encoding","rmSync","readdirSync","length","recursive","getRoutesTreeIds","index","forEach","route","position","String","filter","join","routeId","import","getAppPath","children","Object","assign","getRouteAssets","manifest","isNested","assets","css","reduce","res","asset","type","getAssetType","isEntry","filename","posix","normalize","modifiedFilename","ssr","hostId","hostType","split","at","toLowerCase","weight","getAssetWeight","isPreload","imports","nestedAsset","nestedModule","buildRoutesManifest","routesService","ParseRoutes","routesPaths","postfixes","getImportPostfix","entries","routePath","routePostfix","find","postfix","undefined","routeMeta","sortAssets","values","json","stringify","writeFileSync","clientDir","getAssets","getAssetsDev","pathId","routeIds","pluginConfig","getPluginConfig","rootIds","clientFile","serverFile","modules","moduleId","ext","moduleGraph","getModuleById","push","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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"}