@bdocs/ssg 0.4.3 → 0.4.4

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.
@@ -26,7 +26,7 @@ interface RouterRouteRecord {
26
26
  //#region src/types.d.ts
27
27
  /** Minimal router shape kept for the public SSG context without a DOM-router dependency. */
28
28
  interface Router {
29
- navigate?: (...args: any[]) => unknown;
29
+ navigate?: (...args: never[]) => unknown;
30
30
  state?: unknown;
31
31
  [key: string]: unknown;
32
32
  }
@@ -106,6 +106,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
106
106
  * @default 'zig-critters'
107
107
  */
108
108
  criticalCss?: 'zig-critters' | 'beasties' | false;
109
+ criticalCssMaxSize?: number;
109
110
  /**
110
111
  * Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
111
112
  * Falls back to beasties if the WASM binary is unavailable.
@@ -151,7 +152,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
151
152
  duration: number;
152
153
  success: boolean;
153
154
  details?: string;
154
- metrics?: Record<string, any>;
155
+ metrics?: Record<string, unknown>;
155
156
  }) => void;
156
157
  /**
157
158
  * The application's root container `id`.
@@ -178,11 +179,11 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
178
179
  router?: HasRouter extends true ? Router : undefined;
179
180
  routes: HasRouter extends true ? Readonly<RouteRecord[]> : undefined;
180
181
  routerOptions: HasRouter extends true ? RouterOptions : undefined;
181
- initialState: Record<string, any>;
182
+ initialState: Record<string, unknown>;
182
183
  isClient: boolean;
183
- onSSRAppRendered: (cb: Function) => void;
184
+ onSSRAppRendered: (cb: () => unknown) => void;
184
185
  triggerOnSSRAppRendered: (route: string, appHTML: string, appCtx: ViteReactSSGContext) => Promise<unknown[]>;
185
- transformState?: (state: any) => any;
186
+ transformState?: (state: unknown) => unknown;
186
187
  /**
187
188
  * Current router path on SSG, `undefined` on client side.
188
189
  */
@@ -193,7 +194,7 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
193
194
  routerType: 'remix' | 'single-page';
194
195
  }
195
196
  interface ViteReactSSGClientOptions {
196
- transformState?: (state: any) => any;
197
+ transformState?: (state: unknown) => unknown;
197
198
  registerComponents?: boolean;
198
199
  /**
199
200
  * The application's root container query selector.
@@ -209,6 +210,11 @@ interface ViteReactSSGClientOptions {
209
210
  useLegacyRender?: boolean;
210
211
  }
211
212
  interface CommonRouteOptions {
213
+ filePath?: string;
214
+ componentPath?: string;
215
+ locale?: string;
216
+ version?: string;
217
+ collection?: string;
212
218
  /**
213
219
  * Used to obtain static resources through manifest
214
220
  *
@@ -246,7 +252,7 @@ interface RouterOptions {
246
252
  routes: RouteRecord[];
247
253
  basename?: string;
248
254
  future?: Partial<RouterFutureConfig>;
249
- customCreateRouter?: (...args: any[]) => Router;
255
+ customCreateRouter?: (...args: never[]) => Router;
250
256
  }
251
257
  interface StyleCollector {
252
258
  collect: (app: ReactElement) => ReactElement;
@@ -26,7 +26,7 @@ interface RouterRouteRecord {
26
26
  //#region src/types.d.ts
27
27
  /** Minimal router shape kept for the public SSG context without a DOM-router dependency. */
28
28
  interface Router {
29
- navigate?: (...args: any[]) => unknown;
29
+ navigate?: (...args: never[]) => unknown;
30
30
  state?: unknown;
31
31
  [key: string]: unknown;
32
32
  }
@@ -106,6 +106,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
106
106
  * @default 'zig-critters'
107
107
  */
108
108
  criticalCss?: 'zig-critters' | 'beasties' | false;
109
+ criticalCssMaxSize?: number;
109
110
  /**
110
111
  * Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
111
112
  * Falls back to beasties if the WASM binary is unavailable.
@@ -151,7 +152,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
151
152
  duration: number;
152
153
  success: boolean;
153
154
  details?: string;
154
- metrics?: Record<string, any>;
155
+ metrics?: Record<string, unknown>;
155
156
  }) => void;
156
157
  /**
157
158
  * The application's root container `id`.
@@ -178,11 +179,11 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
178
179
  router?: HasRouter extends true ? Router : undefined;
179
180
  routes: HasRouter extends true ? Readonly<RouteRecord[]> : undefined;
180
181
  routerOptions: HasRouter extends true ? RouterOptions : undefined;
181
- initialState: Record<string, any>;
182
+ initialState: Record<string, unknown>;
182
183
  isClient: boolean;
183
- onSSRAppRendered: (cb: Function) => void;
184
+ onSSRAppRendered: (cb: () => unknown) => void;
184
185
  triggerOnSSRAppRendered: (route: string, appHTML: string, appCtx: ViteReactSSGContext) => Promise<unknown[]>;
185
- transformState?: (state: any) => any;
186
+ transformState?: (state: unknown) => unknown;
186
187
  /**
187
188
  * Current router path on SSG, `undefined` on client side.
188
189
  */
@@ -193,7 +194,7 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
193
194
  routerType: 'remix' | 'single-page';
194
195
  }
195
196
  interface ViteReactSSGClientOptions {
196
- transformState?: (state: any) => any;
197
+ transformState?: (state: unknown) => unknown;
197
198
  registerComponents?: boolean;
198
199
  /**
199
200
  * The application's root container query selector.
@@ -209,6 +210,11 @@ interface ViteReactSSGClientOptions {
209
210
  useLegacyRender?: boolean;
210
211
  }
211
212
  interface CommonRouteOptions {
213
+ filePath?: string;
214
+ componentPath?: string;
215
+ locale?: string;
216
+ version?: string;
217
+ collection?: string;
212
218
  /**
213
219
  * Used to obtain static resources through manifest
214
220
  *
@@ -246,7 +252,7 @@ interface RouterOptions {
246
252
  routes: RouteRecord[];
247
253
  basename?: string;
248
254
  future?: Partial<RouterFutureConfig>;
249
- customCreateRouter?: (...args: any[]) => Router;
255
+ customCreateRouter?: (...args: never[]) => Router;
250
256
  }
251
257
  interface StyleCollector {
252
258
  collect: (app: ReactElement) => ReactElement;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-ClSMhb8G.cjs";
1
+ import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-BsuhlEJb.cjs";
2
2
  import { ReactNode } from "react";
3
3
  import { HelmetProps } from "react-helmet-async";
4
4
 
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-CipD5Jrk.mjs";
1
+ import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-C01Mn1_E.mjs";
2
2
  import { HelmetProps } from "react-helmet-async";
3
3
  import { ReactNode } from "react";
4
4
 
package/dist/node.cjs CHANGED
@@ -1,3 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-D-qHiVGv.cjs`),t=require(`./router-adapter-DR3BzW_i.cjs`),n=require(`./critical-FFUmobto.cjs`),r=require(`./ssg-worker-payload-D6kDQQtE.cjs`);let i=require(`@bdocs/dui`),a=require(`node:module`),o=require(`node:os`);o=e.n(o,1);let s=require(`node:path`);s=e.n(s,1);let c=require(`fs-extra`);c=e.n(c,1);let l=require(`vite`),u=require(`node:crypto`);u=e.n(u,1);let d=require(`node:fs/promises`);d=e.n(d,1);let f=require(`node:fs`);f=e.n(f,1);const p=/import\("([^)]+)"\)/g;function m(e,t){let n=new Set;if(!t)return n;for(let r of t)h(e,r,n);return n}function h(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{h(e,t,n)}),n):n}function g(e,t,n,r){let i=e?.map(e=>e.route.entry).filter(Boolean)??[],a=new Set;e?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(p);for(let e of n)a.add(e[1].split(`/`).at(-1)??``)});let o=new Set(i);for(let e of a){let t=n.find(([t,n])=>n.file.endsWith(e));t&&o.add(t[0])}let s=new Set;for(let e of o){let n=r.get(e);if(!n){let i=m(t.manifest,new Set([e]));n=new Set;for(let e of i)for(let r of t.ssrManifest[e]||[])n.add(r);r.set(e,n)}for(let e of n)s.add(e)}return s}function ee(e){let t=Object.entries(e.serverManifest),n=new Map,r=new Map;return i=>{let a=r.get(i);if(a)return a;let o=Promise.resolve().then(()=>{let r=g(e.matchRouteBranchWithParams([...e.routes],i,e.base),e,t,n);return new Set(r)});return r.set(i,o),o.catch(()=>{r.get(i)===o&&r.delete(i)}),o}}function te(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return u.default.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function ne(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function re(e,t){let n=new Set(ne(e)),r=ne(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
- `):null}var ie=class{constructor(e={}){this.entries=new Map,this.cacheDir=e.cacheDir,this.maxEntries=e.maxEntries??1024}getOrCreate(e,t,n={}){let r=this.entries.get(e);if(r)return r.promise;let i=n.engine??`zig-critters`,a={promise:Promise.resolve(null),settled:!1},o=Promise.resolve().then(async()=>{if(this.cacheDir){let t=await this.readDisk(e,i);if(t!==void 0)return t}return t()}).then(t=>(this.cacheDir&&this.writeDisk(e,i,t).catch(()=>{}),t)).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{a.settled=!0,this.evictSettledEntries()});return a.promise=o,this.entries.set(e,a),this.evictSettledEntries(),o}get size(){return this.entries.size}diskPath(e){return(0,s.join)(this.cacheDir,`critical-css-${e}.json`)}async readDisk(e,t){try{let n=await c.default.readFile(this.diskPath(e),`utf-8`),r=JSON.parse(n);if(r?.v!==2||r?.engine!==t||!(r.style===null||typeof r.style==`string`))return;let i=new Date;return c.default.utimes(this.diskPath(e),i,i).catch(()=>{}),r.style}catch{return}}async writeDisk(e,t,n){if(!this.cacheDir||n!==null&&n.length>262144)return;let r={v:2,engine:t,style:n};await c.default.ensureDir(this.cacheDir),await c.default.writeFile(this.diskPath(e),JSON.stringify(r),`utf-8`)}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};async function ae(e,t={}){let n=t.maxAgeMs??720*60*60*1e3,r=t.maxEntries??5e3;try{if(!c.default.existsSync(e))return 0;let t=Date.now()-n,i=[];for(let n of await c.default.readdir(e)){if(!n.startsWith(`critical-css-`)||!n.endsWith(`.json`))continue;let r=(0,s.join)(e,n);try{let e=await c.default.stat(r),a=Math.max(e.mtimeMs,e.atimeMs);a<t?(await c.default.remove(r),i.push({file:n,usedAt:0})):i.push({file:n,usedAt:a})}catch{}}let a=i.filter(e=>e.usedAt===0).length;if(i.length>r){let t=i.filter(e=>e.usedAt>0).sort((e,t)=>t.usedAt-e.usedAt);for(let n of t.slice(r))try{await c.default.remove((0,s.join)(e,n.file)),a++}catch{}}return a}catch{return 0}}const _=new Set([`.js`,`.mjs`,`.css`]);function v(e){let t=s.default.extname(e).toLowerCase();return _.has(t)}function oe(e){let t=new Map,n=new Map;for(let r of Object.values(e))t.set(r.file,r),r.src&&n.set(r.src,r);return{byFile:t,bySrc:n}}function y(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])v(t)&&y(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])v(t)&&!n.has(t)&&y(e,t,n)}}async function se(e,t,n){if(n){let e=u.default.createHash(`md5`);for(let r of t){let t=n.get(r);t&&e.update(t)}return e.digest(`hex`)}let r=new Map;await Promise.all(t.map(async t=>{try{let n=await(0,d.readFile)(s.default.join(e,t));r.set(t,n)}catch{}}));let i=u.default.createHash(`md5`);for(let e of Array.from(r.keys()).sort()){let t=r.get(e);t&&i.update(t)}return i.digest(`hex`)}async function ce(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:o,clientHash:c,assetHashes:l,chunkPackMaps:u}=e,d=n;if(!d){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);d=oe(r)}let{byFile:f,bySrc:p}=d,m=s.default.relative(o,a).replace(/\\/g,`/`),h=new Set,g=p.get(m);if(g)y(f,g.file,h);else if(u){let e=s.default.isAbsolute(a)?a:s.default.resolve(o,a),t=u.chunkMap[a]??u.chunkMap[e]??u.chunkMap[`/${e}`];if(t!==void 0){for(let e of f.values())if((e.src||``).includes(`chunk-${t}.mjs`)||e.file.includes(`chunk-${t}`)){y(f,e.file,h);break}}}if(h.size===0){let e=[m,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)v(t)&&y(f,t,h)}}if(h.size===0){if(!c)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return c}return se(t,Array.from(h).sort(),l)}const le=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function b(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function ue({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${le}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return b(b(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function de({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${le}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return b(b(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return b(b(p,`html`,a),`body`,i)}async function x(e,t=`index.html`){let[,n]=[...(await c.default.readFile((0,s.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function S(e){return`<link rel="stylesheet" href="${e}">`}function fe(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=C(e);r&&n.push(r)}}),n.join(``)}function C(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var w=`0.4.3`;async function pe(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&T(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function me(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:(0,s.join)(e.root,t))}const he=/[:*?]/;function T(e){return e?he.test(e):!1}async function ge(e,t){if(e!==t){await c.default.ensureDir((0,s.dirname)(t)),await c.default.remove(t);try{await c.default.link(e,t)}catch{await c.default.copy(e,t)}}}async function E(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(ge(r.source,r.destination)));await Promise.all(n)}function _e({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=0,l=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),c+=performance.now()-t}),s};return{enqueue(e,t){let u=Buffer.byteLength(t,`utf8`);return u>i?(s=l().then(async()=>{let r=performance.now();await n(e,t),c+=performance.now()-r}),s):(a.push({filePath:e,content:t}),o+=u,a.length>=r||o>=i?l():Promise.resolve())},flush:l,pendingCount(){return a.length},writeTimeMs(){return c}}}function D(e,t,n,r=[],i=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort(),extraFiles:[...new Set(i)].sort()}}function ve(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,s=[...new Set(r)].sort(),l=[...new Set(i)].sort(),u=[...new Set(a)].sort();if(!o(e.clientFiles,s)||!o(e.pageFiles,l)||!o(e.auxiliaryFiles||[],u))return!1;let d=[...new Set(e.extraFiles??[])].sort();if(!d.every(e=>c.default.existsSync(`${n}/${e}`)))return!1;let f=[...s,...l,...u];return o(Ce(n),[...new Set([...f,...d])].sort())?f.every(e=>c.default.existsSync(`${n}/${e}`)):!1}function ye(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function be(e){try{let t=await c.default.readJson(e);if(!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`))return;let n=Array.isArray(t.extraFiles)?t.extraFiles.filter(e=>typeof e==`string`):[];return D(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles,n)}catch{return}}async function xe(e,t,n,r,i=[],a,o=[]){let s=a||Ce(n),c=new Set(r),l=new Set(i),u=new Set(o);return Ee(e,D(t,i.length>0?[...l]:s.filter(e=>!c.has(e)),r,i.length>0?s.filter(e=>!c.has(e)&&!l.has(e)&&!u.has(e)):[],o))}function Se(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[O(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function Ce(e){let t=[],n=r=>{let i;try{i=c.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push((0,s.relative)(e,i).split(s.sep).join(`/`))}};return n(e),t.sort()}function O(e){return!e||e===`/`?``:t.a(e).replace(/\/+$/,``)}function we(e,t){let n=new Set(t.map(O)),r={};for(let[t,i]of Object.entries(e)){let e=O(t);n.has(e)&&(r[e]=i)}return r}async function Te(e,t){try{if(await c.default.readFile(e,`utf8`)===t)return!1}catch{}return await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeFile(e,t,`utf8`),!0}async function Ee(e,t,n=2){try{let n=await c.default.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeJson(e,t,{spaces:n}),!0}const k=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),A=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function j(e){try{return f.default.statSync(e).size}catch{return 0}}const M=`boltdocs-metrics.json`;function N(e){if(!e)return null;try{let t=(0,s.join)(e,M);return f.default.existsSync(t)?JSON.parse(f.default.readFileSync(t,`utf-8`)):null}catch{return null}}function P(e,t){try{let n=s.default.resolve(e,`..`,`reports`);f.default.existsSync(n)||f.default.mkdirSync(n,{recursive:!0}),f.default.writeFileSync((0,s.join)(e,M),JSON.stringify(t))}catch{}}async function De(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=N(n);if(e)return e.buildTime=t,e}let i=(0,s.join)(e,`.vite`),a=(0,s.join)(e,`assets`),o={},c=r.manifestPath||(0,s.join)(i,`manifest.json`);f.default.existsSync(c)&&(o=JSON.parse(await f.default.readFileSync(c,`utf-8`)));let l=0,u=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=j((0,s.join)(e,n));l+=i;for(let t of r)u+=j((0,s.join)(e,t))}let d=0,p=0;if(f.default.existsSync(a)){let e=f.default.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=s.default.extname(t.name).toLowerCase(),n=(0,s.join)(a,t.name);k.has(e)?d+=j(n):A.has(e)&&p++}}let m=(0,s.join)(e,`index.html`),h=0,g=[];if(f.default.existsSync(m)){let e=j(m);h+=e,g.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let ee=r.outputFiles?[...r.outputFiles]:(()=>{try{return f.default.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of ee){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=j((0,s.join)(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);h+=n,g.push({route:e,htmlSize:n,htmlFile:t})}}let te={buildTime:t,totalJSBundleSize:l,totalCSSBundleSize:u,totalImagesSize:d,totalHTMLSize:h,fontCount:p,pages:g};return n&&P(n,te),te}function Oe(e,t){let n=s.default.resolve(e,`..`,`.boltdocs`,`reports`);f.default.existsSync(n)||f.default.mkdirSync(n,{recursive:!0});let r=(0,s.join)(n,`performance.json`);f.default.writeFileSync(r,JSON.stringify(t,null,2))}const ke=new Set([`node_modules`,`dist`,`coverage`]);function Ae(e,t){return(0,s.relative)(e,t).replace(/\\/g,`/`)}function F(e,t,n){try{let r=c.default.readFileSync(t),i=new Uint8Array(r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)),a=(0,u.createHash)(`sha1`).update(i).digest(`hex`);n.update(`${Ae(e,t)}\0${a}\0`)}catch{}}function I(e,t,n){let r;try{r=c.default.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`)||ke.has(i))continue;let r=(0,s.join)(e,i),a;try{a=c.default.statSync(r)}catch{continue}a.isDirectory()?I(r,t,n):a.isFile()&&F(t,r,n)}}function je(e,t){let n=(0,a.createRequire)(n(`url`).pathToFileURL(__filename).href);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=(0,s.join)((0,s.dirname)(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);c.default.existsSync(i)&&I(i,e,t)}catch{}}const L=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`];function R(e,t){for(let n of L){let r=(0,s.join)(e,n);c.default.existsSync(r)&&F(e,r,t)}}function Me(e,t,n){try{c.default.removeSync((0,s.join)(n,`hash-merkle.json`))}catch{}try{let n=(0,u.createHash)(`sha256`);je(e,n);let r=(0,s.join)(e,t);c.default.existsSync(r)&&I(r,e,n);let i=(0,s.join)(e,`src`);return c.default.existsSync(i)&&I(i,e,n),R(e,n),n.update(`v4\0`),n.digest(`hex`)}catch(e){return(0,i.warn)(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),(0,u.createHash)(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Ne(e){return u.default.createHash(`md5`).update(e).digest(`hex`)}function Pe(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Fe(e){if(e)try{let t=await c.default.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function z(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeJson(n,{version:1,files:t},{spaces:0}),await c.default.move(n,e,{overwrite:!0})}catch{await c.default.remove(n).catch(()=>{})}}async function B(e,t,n){let r=await Fe(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=(0,s.join)(e,t);try{let e=await c.default.stat(n);if(!e.isFile())return;let o=r?.files[t];if(Pe(o,e)){i.set(t,o.hash),a[t]=o;return}let s=Ne(await c.default.readFile(n));i.set(t,s),a[t]={hash:s,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await z(n,a),i}function Ie(e){let t=u.default.createHash(`sha1`);return t.update(`v4`),t.update(`\0`),t.update(c.default.readFileSync(e)),t.digest(`hex`)}function Le(e,t){if(e)try{return Ie(e)}catch{}return t}function Re(e,t){try{return Ie(e)}catch{return t}}function ze({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let o=u.default.createHash(`md5`).update(e).digest(`hex`);return!(!c.default.existsSync((0,s.join)(i,`${o}.html`))||t.loaderDataFilePath&&!c.default.existsSync((0,s.join)(i,`${o}.json`)))}function Be(e){return e===null?null:e.poolMetrics()}function Ve(e,t){return(0,s.isAbsolute)(t)?t:(0,s.join)(e,t)}function He(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=O(r);n[t]=Ve(e,i)}return Object.freeze(n)}function Ue(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:He(e.root,e.routeToSourceFileMap)})}function We(e,t,n={}){let r=He(e,n),i=t.map(t=>{let i=O(t.path),a=n[t.path],o=a?Ve(e,a):r[i]||t.componentPath;return{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function Ge(e,t){return Object.freeze({...e,routeManifest:t})}const V=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],Ke=[`react`,`react-dom`];function qe(e){return Number.parseInt(l.version,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Je(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function Ye(e,t){let n=[],r=i=>{let a;try{a=c.default.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=(0,s.join)(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=(0,s.relative)(e,a).split(s.sep).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function Xe(e){return e.map(e=>{if(Array.isArray(e))return Xe(e);if(e&&typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||typeof t==`string`&&t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return null}return e}).filter(Boolean)}async function Ze(e){let t=[],n=async r=>{let i;try{i=await c.default.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=(0,s.join)(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push((0,s.relative)(e,i).split(s.sep).join(`/`))}};return await n(e),t.sort()}async function Qe(e){try{let t=await c.default.readFile(e);return(0,u.createHash)(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function $e(e,t){if(!t||(0,s.isAbsolute)(t))return;let n=(0,s.resolve)(e),r=(0,s.resolve)(n,t),i=(0,s.relative)(n,r);if(!(!i||i===`..`||i.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(i)))return r}async function et(e,t){let n=(0,s.join)((0,s.resolve)(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await c.default.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&c.default.existsSync(e)?await Ze(e):[],a={};for(let t of i){let n=await Qe((0,s.join)(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=$e(t,e);r&&await Qe(r)===n&&await c.default.remove(r)}e&&c.default.existsSync(e)&&(await c.default.ensureDir(t),await c.default.copy(e,t,{overwrite:!0,errorOnExist:!1})),await c.default.ensureDir((0,s.resolve)(t,`..`)),await c.default.writeJson(n,{version:1,files:a})}function tt(e){return(0,l.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...qe({input:{app:(0,s.join)(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir((0,s.isAbsolute)(t.build.outDir||``)?t.build.outDir||`dist`:(0,s.resolve)(e.root,t.build.outDir||`dist`))}}]})}function nt(e){return(0,l.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...qe({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...V],external:[...Ke]},plugins:[...Xe(e.viteConfig.plugins||[]),Je()]})}async function rt(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,o=[],u=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),c.default.existsSync(e.outDir)&&await c.default.remove(e.outDir);let t=(0,s.join)(e.clientCacheDir,`dist`);await et(e.viteConfig.publicDir,t),st(t,e.outDir),o=Ye((0,s.join)(e.clientCacheDir,`dist`),e.htmlEntry)}else{await(0,l.build)(tt({...e,onResolvedOutputDir:e=>{n=e}}));let d=performance.now()-u;e.onStep?.({name:`Client build`,duration:d,success:!0,details:`Vite production build`}),i=t(),a=i,r=(0,s.join)(e.finalCacheDir,`client-cache`,i);let f=(0,s.join)(r,`client-hash.txt`);await c.default.ensureDir(r);let p=(0,s.join)(r,`dist`);c.default.existsSync(p)&&await c.default.remove(p),await c.default.copy(n,p,{overwrite:!0,errorOnExist:!1}),await et(e.viteConfig.publicDir,p),o=Ye(p,e.htmlEntry),await c.default.writeFile(f,i,`utf-8`),await ct((0,s.join)(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-u,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:o}}async function it(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};c.default.existsSync(e.ssgOut)&&await c.default.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await(0,l.build)(nt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function at(e,t){if(!t||(0,s.isAbsolute)(t))return;let n=(0,s.resolve)(e,t),r=(0,s.relative)((0,s.resolve)(e),n);if(!(r===`..`||r.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(r)))try{let t=c.default.realpathSync(e),r=c.default.realpathSync(n),i=(0,s.relative)(t,r);return i===`..`||i.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(i)||!c.default.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function ot(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function st(e,t){let n=c.default.readdirSync(e,{withFileTypes:!0});c.default.mkdirSync(t,{recursive:!0});for(let r of n){let n=(0,s.join)(e,r.name),i=(0,s.join)(t,r.name);if(r.isDirectory())st(n,i);else if(r.isFile())try{c.default.linkSync(n,i)}catch{c.default.copyFileSync(n,i)}}}async function ct(e,t=5,n){try{if(!c.default.existsSync(e))return;let r=await c.default.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=(0,s.join)(e,t.name),r=await c.default.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await c.default.remove((0,s.join)(e,t.name))}catch{}}function lt(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function ut(e,t){return t===`nested`?(0,s.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function H(e){return Object.freeze(e)}function dt(e){let n=new Map;for(let r of e.routes){let i=u.default.createHash(`md5`).update(r).digest(`hex`),a=O(r),o=e.routeToSourceFileMap[a]||e.routeToSourceFileMap[r],c=o?e.sourceMeta.get(o):void 0;n.set(r,H({path:r,pathHash:i,cachedHtmlFile:(0,s.join)(e.ssgPagesDir,`${i}.html`),cachedLoaderFile:(0,s.join)(e.ssgPagesDir,`${i}.json`),finalOutFile:(0,s.join)(e.outDir,ut(r,e.dirStyle)),normalizedKey:a,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[r]??e.fallbackHash,fetchUrl:`${t.o(e.contextBase)}${t.r(r)}`}))}return n}function ft(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function pt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function mt(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function ht(e,t){return e>4&&!t}function gt(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function _t(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function vt(e){let t=[],n=new Set,r=e.getPool(),i=mt(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},l=e=>{let r;r=pt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(ht(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=mt(e.getWorkerCount?.()??0))),r?.renderBatch){let t=[];for(let n of e.routes){let r=e.getPlan(n);await e.isCached(r)?(await e.onCacheHit(r),o++):(await e.prepareRoute?.(r),t.push({path:n,plan:r}))}let c=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let o=0;o<t.length;o+=c){let u=t.slice(o,o+c);if(!r){for(let{path:n,plan:r}of t.slice(o))e.scheduleMainThread(n,r),a++;break}s=!0;let d=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of u){let i=await e.onWorkerFailure(n,r,t,d);if(!_t(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};l((async()=>{let t;try{t=await d.renderBatch(u.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==u.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<u.length;n++){let{path:r,plan:i}=u[n],o=t[n],s;if(s=gt(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):_t(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!_t(s,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,s,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else for(let t of e.routes){let c=e.getPlan(t);if(await e.isCached(c)){await e.onCacheHit(c),o++;continue}if(await e.prepareRoute?.(c),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=mt(e.getWorkerCount?.()??0))),r){s=!0;let o=r,u=performance.now();l(o.render(t).catch(async n=>{let i=await e.onWorkerFailure(t,c,n,o);return r=e.getPool(),i}).then(async n=>{if(!_t(n,t))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(t,c,n,performance.now()-u),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(t,c),a++}return await c(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const yt=Number.parseInt(l.version)>=5?[`.vite`]:[];function bt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function xt(e,n){return`static-loader-data${t.a(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function St(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function U(e){let t=new Set;for(let n of Object.values(e)){St(n.file)&&t.add(n.file);for(let e of n.css||[])St(e)&&t.add(e);for(let e of n.imports||[])St(e)&&t.add(e);for(let e of n.dynamicImports||[])St(e)&&t.add(e)}return[...t]}async function Ct(e,t,n){return B(e,U(t),n?(0,s.join)(n,`chunk-hashes.json`):void 0)}function wt(e,n=`/`){let r=t.a(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Tt(e,t,n){let r=t?.[n];if(r)return(0,s.isAbsolute)(r)?r:(0,s.join)(e,r)}function Et(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,(0,s.isAbsolute)(n)?(0,s.relative)(e,n):n]))}function Dt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Ot(e={},d={}){let f=process.env.MODE||process.env.NODE_ENV||e.mode||`production`;f!==process.env.NODE_ENV&&(process.env.NODE_ENV=f);let p=process.cwd(),m=d.root||p,h=d.build?.outDir||`dist`,g=d.base||`/`,ne=performance.now(),_=0,v=0,y=0,{onFinished:se,onStep:b,routeToSourceFileMap:S={},cacheDir:C=`.boltdocs/build`,htmlEntry:w=`index.html`,entry:he=await x(m,w)}=e,T=`docs`,ge=Object.values(S);if(ge.length>0){let e=ge[0],t=(0,s.relative)(m,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(T=t[0])}let D=(0,s.isAbsolute)(h)?h:(0,s.join)(m,h),k=(0,s.isAbsolute)(C)?C:(0,s.join)(m,C),A=Me(m,T,k),j=Ue({root:m,outDir:D,cacheDir:k,base:g,mode:f,entry:he,htmlEntry:w,docsDirName:T,clientHash:A,routeToSourceFileMap:S}),M=j.clientHash.substring(0,12),N=(0,s.join)(j.cacheDir,`ssr`,M),P=(0,s.join)(j.cacheDir,`client-cache`,j.clientHash),ke=P,Ae=A,F=A,I=``;try{let{getZigCritters:e}=await Promise.resolve().then(()=>require(`./critical-FFUmobto.cjs`)).then(e=>e.n),t=await e();if(t){let e=await t.getEngineIdentity();e&&e!==`unknown`&&(I=e.slice(0,16))}}catch{}I&&(F=`${A}-${I}`);let je=(0,s.join)(P,`client-hash.txt`),L=!1;try{c.default.existsSync(je)&&c.default.existsSync((0,s.join)(P,`dist`))&&(L=(await c.default.readFile(je,`utf-8`)).trim()===A)}catch{}let R={server:``,css:``},Ne=()=>{let e=``,t=``;try{let t=[],n=(e,r)=>{let i;try{i=c.default.readdirSync(e,{withFileTypes:!0})}catch{return}for(let a of i){let i=r?`${r}/${a.name}`:a.name;i!==`.vite`&&(i.startsWith(`.vite/`)||/^assets\/combined-.*\.js$/.test(i)||(a.isDirectory()?n((0,s.join)(e,a.name),i):a.isFile()&&t.push(i)))}};if(n(N,``),t.length>0){t.sort();let n=u.default.createHash(`sha256`);for(let e of t){n.update(e),n.update(`\0`);let t=c.default.readFileSync((0,s.join)(N,e));e===`combined.mjs`&&(t=Buffer.from(t.toString(`utf-8`).replace(/combined-[A-Za-z0-9_-]+\.js/g,`combined.js`))),n.update(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),n.update(`\0`)}e=n.digest(`hex`).slice(0,16)}}catch{}try{let e=L?(0,s.join)(P,`dist`,`assets`):(0,s.join)(D,`assets`);if(c.default.existsSync(e)){let n=c.default.readdirSync(e).filter(e=>e.endsWith(`.css`)).sort();if(n.length>0){let r=u.default.createHash(`sha256`);for(let t of n){r.update(t),r.update(`\0`);let n=c.default.readFileSync((0,s.join)(e,t));r.update(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),r.update(`\0`)}t=r.digest(`hex`).slice(0,16)}}}catch{}return{server:e,css:t}},Pe=()=>{let e=A;I&&(e=`${e}-${I}`),(R.server||R.css)&&(e=`${e}-${R.server}-${R.css}`),F=e},Fe=!1;if(L){try{let e=(await c.default.readJson((0,s.join)(k,`ssr-cache-index.json`)))[A];if(typeof e==`string`){let t=at((0,s.join)(k,`ssr`),e);t&&(N=t)}}catch{}if(c.default.existsSync(N)){let e=Ne();R.server=e.server,R.css=e.css,(e.server||e.css)&&(Pe(),Fe=!0)}}let z=(0,s.join)(k,`ssg-pages`),B=(0,s.join)(k,`ssg-cache.json`),Ie=(0,s.join)(k,`ssg-output.json`),Ve=await be(Ie),He=Ve!==void 0;L&&(ye(Ve,Ce((0,s.join)(P,`dist`)),w)||(L=!1));let V=[],Ke=!1,qe=(e.dirStyle||d.ssgOptions?.dirStyle)??`flat`;if(L&&He&&qe!==`nested`){let e=(0,s.join)(k,`routes-cache.json`);try{if(c.default.existsSync(e)&&c.default.existsSync(B)){let t=JSON.parse(c.default.readFileSync(e,`utf-8`)),n=we(JSON.parse(c.default.readFileSync(B,`utf-8`)),t.paths);if(t.dirStyle===qe&&t.base===g){let e=t.paths.every(e=>{let r=O(e),i=n[r];return ze({routePath:e,cacheItem:i,sourceContentHash:Le(S[r]||S[e]||Tt(m,t.sourceFiles,r)||Tt(m,t.sourceFiles,e),F),ssgPagesDir:z,requireAssetHash:!0})});t.paths.length>0&&e&&(V=t.paths,Ke=!0)}}}catch{}}if(Ke){let e=performance.now(),t={};try{c.default.existsSync(B)&&(t=we(JSON.parse(c.default.readFileSync(B,`utf-8`)),V))}catch{}let n=[...Se(V,t,qe===`nested`?`nested`:`flat`),`static-loader-data-manifest-${M}.json`,`page-source.json`],r=Ce((0,s.join)(P,`dist`)).filter(e=>e!==w),i=await be(Ie),a=(i?.auxiliaryFiles??[]).every(e=>c.default.existsSync((0,s.join)(D,e)))&&ve(i,A,D,r,n,i?.auxiliaryFiles??[]),o={};if(!a){c.default.existsSync(D)&&await c.default.remove(D);let e=(0,s.join)(P,`dist`);await et(d.publicDir,e),await c.default.copy(e,D);let n=[];for(let e of V){let r=u.default.createHash(`md5`).update(e).digest(`hex`),i=(0,s.join)(z,`${r}.html`),a=(0,s.join)(z,`${r}.json`),l=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:(0,s.join)(D,l)}),c.default.existsSync(a)){let r=O(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:(0,s.join)(D,i.loaderDataFilePath)}),o[wt(e,g)]=i.loaderDataFilePath)}}await E(n),await Te((0,s.join)(D,`static-loader-data-manifest-${M}.json`),bt(o))}await kt(z,t,V);let l=Math.round(performance.now()-ne);b?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),b?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),b?.({name:`Render pages`,duration:0,success:!0,details:`${V.length} pages (all cached)`}),b?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(l/1e3).toFixed(1)}s, all cached`});let f=Math.round(performance.now()-e),p={renderedPageCount:0,cachedPageCount:V.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:f,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:f};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${V.length} pages / 0 new / ${V.length} cached`,metrics:{renderedCount:0,cachedCount:V.length,renderedSize:0,totalPages:V.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:p}})}`),await se?.(h),await At(D),await xe((0,s.join)(k,`ssg-output.json`),A,D,n,r,void 0,i?.extraFiles??[]);return}let Je=await(0,l.resolveConfig)(d,`build`,f,f),Ye=Object.assign({},Je.ssgOptions||{},e),{script:Xe=`sync`,mock:Ze=!1,formatting:Qe=`none`,includedRoutes:$e=Dt,onBeforePageRender:tt,onPageRendered:nt,dirStyle:st=`flat`,includeAllRoutes:ut=!1,format:H=`esm`,concurrency:pt=20,rootContainerId:mt=`root`,beastiesOptions:ht={},criticalCssMaxSize:gt}=Ye,_t=ht,St=n.i(gt),U=Ye.turbo??!1,Ot=(0,s.join)(k,`ssr`),Nt=(0,s.join)(k,`ssr-cache-index.json`);if(N=(0,s.join)(Ot,U?`turbo-ssr`:M),!U&&L)try{let e=(await c.default.readJson(Nt))[A];if(typeof e==`string`){let t=at(Ot,e);t&&(N=t)}}catch{}let Pt=lt((0,l.createLogger)(),ot),Ft=()=>{};if(Ze){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-9nTqUjri.cjs`));Ft=e()}let W={};try{if(c.default.existsSync(B)){let e=await c.default.readJson(B);W=we(e,Object.keys(e))}}catch{}let G=!1;if(L)try{let e=(0,s.join)(k,`routes-cache.json`);if(c.default.existsSync(e)){let t=JSON.parse(c.default.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=O(e),r=W[n];return ze({routePath:e,cacheItem:r,sourceContentHash:Le(S[n]||S[e]||Tt(m,t.sourceFiles,n)||Tt(m,t.sourceFiles,e),F),ssgPagesDir:z,requireAssetHash:!0})})&&(V=t.paths,G=!0)}}catch{}let It=G?``:await me(Je,he),Lt=(U||L)&&c.default.existsSync(N)&&c.default.readdirSync(N).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,Rt=null;if(!G&&Lt&&H===`esm`){let e=process.platform===`win32`?`file://`:``;try{let t=N,n=c.default.existsSync(t)?c.default.readdirSync(t).filter(e=>e.endsWith(`.mjs`)):[];n.length>0&&(Rt=import(e+(0,s.join)(t,n[0]).replace(/\\/g,`/`)).catch(()=>{}))}catch{}}let zt=performance.now(),[Bt,Vt]=await Promise.all([rt({viteConfig:d,resolvedMode:Je.mode,root:m,htmlEntry:w,outDir:D,clientCacheDir:P,finalCacheDir:k,docsDirName:T,initialClientHash:A,canBypassClientBuild:L,customLogger:Pt,onStep:b,shouldSuppressLog:ot},()=>Me(m,T,k)),it({viteConfig:d,resolvedMode:Je.mode,entry:he,ssrEntry:It,ssgOut:N,format:H,canSkipSsrImport:G,serverBuildSkipped:Lt,customLogger:Pt,onStep:b,shouldSuppressLog:ot})]);if(h=Bt.outDir,ke=Bt.resolvedClientCacheDir,Ae=Bt.resolvedClientHash,F=Bt.pageContentFallbackHash,I&&(F=`${F}-${I}`),!Fe){let e=Ne();R.server=e.server,R.css=e.css,(e.server||e.css)&&Pe(),Fe=!0}if(M=Ae.substring(0,12),_=Bt.durationMs,v=Vt.durationMs,!U)try{let e={};try{e=await c.default.readJson(Nt)}catch{}e[Ae]=(0,s.relative)(Ot,N),await Ee(Nt,e)}catch{}let Ht=H===`esm`&&process.platform===`win32`?`file://`:``,Ut=H===`esm`?`.mjs`:`.cjs`;It.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Wt=`combined`+Ut;try{if(c.default.existsSync(N)){let e=c.default.readdirSync(N).filter(e=>e.endsWith(Ut));e.length>0&&(Wt=e[0])}}catch{}let Gt=Ht+(0,s.join)(N,Wt).replace(/\\/g,`/`),Kt=Wt.replace(/\.[^/.]+$/,``),qt=JSON.parse(await c.default.readFile((0,s.join)(N,...yt,`manifest.json`),`utf-8`)),Jt=null,Yt=null,K=[],Xt,Zt=`/`,Qt,$t=null,en,tn=$e;if(!G){let e=typeof require<`u`?require:(0,a.createRequire)(require(`url`).pathToFileURL(__filename).href),n=performance.now(),r=H===`esm`?await import(Gt):e(Gt);Rt&&await Rt.catch(()=>{}),y=performance.now()-n,Xt=r.matchRouteBranchWithParams;let{createRoot:i,includedRoutes:o}=r;tn=o||$e,Jt=await i(!1);let s=Jt;if(K=s.routes,Zt=s.base,Qt=s.triggerOnSSRAppRendered,$t=s.app,en=s.routerType,K&&K.length>0)for(let e of K)e.path&&(e.filePath||e.entry)&&!S[e.path]&&(S[e.path]=e.filePath||e.entry);j=Ge(j,We(m,K,S)),Yt=t.t(s,r)}let nn=``,rn=0,q=null,an=null,on=null,sn=!1;async function cn(){if(on){await on;return}let e=an;e&&(on=e.destroy(),await on)}if(!G){let e=performance.now(),{paths:t}=await pe(K);V=ut?t:await tn(t,K||[]),V=Dt(V,K||[]),V=Array.from(new Set(V)),rn+=performance.now()-e;try{await Ee((0,s.join)(k,`routes-cache.json`),{paths:V,dirStyle:st,base:g,sourceFiles:Et(m,S)},0)}catch{}nn=(0,s.join)(N,Kt+Ut)}async function ln(){if(q||sn||V.length<=4)return;sn=!0;let e=performance.now();try{nn=(0,s.join)(N,Kt+Ut);let{SsgWorkerPool:t}=await Promise.resolve().then(()=>require(`./ssg-worker-pool-CfVq6hp_.cjs`));q=new t({ssrEntryPath:nn,format:H===`esm`?`esm`:`cjs`}),an=q,await q.ready(),Yn=performance.now()-e}catch{Yn=performance.now()-e,q=null}}let un=Ye.criticalCss??`zig-critters`,J,dn;un===`zig-critters`?(J=await n.t({concurrency:Math.max(1,Math.min(pt,o.default.cpus().length,8))}),J||(0,i.warn)("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):un===`beasties`&&_t!==!1&&(dn=await n.r(h,{publicPath:g,..._t}));let fn=``,pn=``;if(J){let e=`unknown`;try{e=await J.getEngineIdentity()}catch{}let t=(0,s.join)(D,`assets`);if(c.default.existsSync(t)){let e=c.default.readdirSync(t).filter(e=>e.endsWith(`.css`));for(let n of e)fn+=c.default.readFileSync((0,s.join)(t,n),`utf-8`)+`
3
- `}fn&&(pn=u.default.createHash(`sha256`).update(fn).update(`\0`).update(e).digest(`hex`))}let mn={},hn={},Y={},gn=null;if(G)for(let e of V){let t=O(e);Y[e]=W[t]?.assetHash||A}else{let[e,t]=await Promise.all([c.default.readFile((0,s.join)(D,...yt,`ssr-manifest.json`),`utf-8`),c.default.readFile((0,s.join)(D,...yt,`manifest.json`),`utf-8`)]);mn=JSON.parse(e),hn=JSON.parse(t),gn=oe(hn);let n=await Ct(D,hn,k),r;try{let e=(0,s.join)(m,`.boltdocs`,`compiled`,`pages-chunk-map.json`);c.default.existsSync(e)&&(r={chunkMap:JSON.parse(c.default.readFileSync(e,`utf-8`))})}catch{r=void 0}await Promise.all(Object.entries(S).map(async([e,t])=>{Y[e]=await ce({outDir:D,indexes:gn,ssrManifest:mn,routeSourceFile:t,root:m,clientHash:A,assetHashes:n,chunkPackMaps:r}),R.server&&(Y[e]=`${Y[e]}-${R.server}`),R.css&&(Y[e]=`${Y[e]}-${R.css}`)}));for(let e of V)Y[e]||(Y[e]=F)}let X=await c.default.readFile((0,s.join)(D,w),`utf-8`);c.default.rmSync((0,s.join)(D,w)),X=jt(X,Xe);let _n=X.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],vn=tt?null:ue({rootContainerId:mt,indexHTML:X}),yn=(await import(`p-queue`)).default||await import(`p-queue`),bn=new yn({concurrency:pt}),xn=new yn({concurrency:Math.min(o.default.cpus().length,4)}),Sn=new yn({concurrency:Math.max(2,Math.min(o.default.cpus().length,8))}),Cn={},wn=0,Tn=new Map,En=new Set;for(let e of V){let n=S[t.a(e).replace(/\/$/,``)]||S[e];n&&En.add(n)}for(let e of En)try{if(c.default.existsSync(e)){let t=c.default.statSync(e);Tn.set(e,{hash:Re(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let Dn=null;!G&&Xt&&(Dn=ee({routes:[...K],base:Zt,matchRouteBranchWithParams:Xt,serverManifest:qt,manifest:hn,ssrManifest:mn}));let On=dt({routes:V,outDir:D,ssgPagesDir:z,dirStyle:st,contextBase:Zt,fallbackHash:F,routeToSourceFileMap:S,sourceMeta:Tn,routeToAssetHash:Y}),kn=U?void 0:(0,s.join)(k,`critical-css`),An=new ie({cacheDir:kn}),jn=[],Mn=[],Nn=[],Pn=[],Fn=0,In=0,Ln=0,Rn=0,zn=0,Bn=0,Vn=0,Hn=0,Un=0,Wn=0,Gn=0,Kn=0,qn=0,Z={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function Jn(e){e&&(Z.count++,Z.matchMs+=e.matchMs,Z.resolveMs+=e.resolveMs,Z.loadersMs+=e.loadersMs,Z.renderMs+=e.renderMs,Z.helmetMs+=e.helmetMs,Z.totalMs+=e.totalMs)}let Yn=0,Xn=!1;function Q(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let Zn=0,Qn=0,$n=0,er=new Set,tr=new Set,nr=[],rr=_e({writeFile:async(e,t)=>{await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeFile(e,t,`utf-8`)}}),ir=JSON.stringify(W),$=we(W,V),ar=new Map,or=new Set;or.add(z);for(let e of V){let t=st===`nested`?(0,s.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;or.add((0,s.join)(D,(0,s.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;or.add((0,s.join)(D,`static-loader-data`,(0,s.dirname)(n)))}or.add((0,s.join)(D,`static-loader-data`)),await Promise.all([...or].map(e=>c.default.ensureDir(e)));async function sr(e,t,n,a,o,l,u,d,f,p,m,h,ee,ne,ie){let ae=performance.now(),{path:_,cachedHtmlFile:v,cachedLoaderFile:oe,normalizedKey:y,sourceContentHash:se,sourceMtimeMs:ce,fetchUrl:b}=e,ue;if(!ee&&ne===`remix`){if(!Dn)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();ue=new Set(await(ar.get(_)||Dn(b))),Fn+=performance.now()-e}else ue=new Set;let x;if(d&&Object.keys(d).length>0){let e=xt(_,M);x=e,U&&await c.default.writeFile((0,s.join)(D,e),JSON.stringify(d)),Cn[wt(_,g)]=e,wn++}await h?.(_,t,f);let S=performance.now(),C=vn&&ie===X?vn({appHTML:t,metaAttributes:n,bodyAttributes:a,htmlAttributes:o,initialState:null}):await de({rootContainerId:mt,appHTML:t,indexHTML:ie,metaAttributes:n,bodyAttributes:a,htmlAttributes:o,initialState:null});Ln+=performance.now()-S;let w=ee?``:fe(ue),pe=u?C.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):C;w&&(pe=pe.replace(`<head>`,`<head>${w}`));let me=performance.now();zn++,zn===1&&(Bn=me);let he=await nt?.(_,pe,f)||pe;zn--,zn===0&&(Rn+=performance.now()-Bn);let T=``;if(d&&Object.keys(d).length>0){let e=JSON.stringify(d).replace(/</g,`\\u003c`);T=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${wt(_,g)}': ${e} };`}let ge=r.t(u),E=he,_e=`<script>window.__VITE_REACT_SSG_HASH__ = '${M}';${T}${ge}<\/script>`,ve=performance.now();if(E=E.replace(`<script>${le}<\/script>`,``),J){if(fn){let e=te(E,pn,fn,`zig-critters`);try{let t=await An.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await J.extractCriticalCss(E,fn,{maxSize:St});return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&(0,i.warn)(`[zig-critters] Critical CSS for "${_}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)},{engine:`zig-critters`});t&&!E.includes(`data-zig-critters`)&&(E=E.replace(`</head>`,`${t}</head>`))}catch(e){(0,i.warn)(`[zig-critters] Failed to inline CSS for "${_}": ${e instanceof Error?e.message:String(e)}`)}}E=E.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(dn){let e=te(E,pn,fn,`beasties`),t=await An.getOrCreate(e,async()=>{let e=await xn.add(()=>dn.process(E));return re(E,e)},{engine:`beasties`});t&&!E.includes(t)&&(E=E.replace(`</head>`,`${t}</head>`)),E=E.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let ye=_e+(l||``);ye&&(E=E.replace(`<head>`,`<head>${ye}`));let be=Qe===`none`?E:await Mt(E,Qe);Nn.push(Math.round(performance.now()-ve));let xe=performance.now();U?d&&Object.keys(d).length>0&&x&&await rr.enqueue((0,s.join)(D,x),JSON.stringify(d)):(await rr.enqueue(v,be),d&&Object.keys(d).length>0&&x?(await rr.enqueue(oe,JSON.stringify(d)),$[y]={contentHash:se,mtime:ce?Math.round(ce):0,loaderDataFilePath:x,assetHash:e.routeAssetHash}):$[y]={contentHash:se,mtime:ce?Math.round(ce):0,assetHash:e.routeAssetHash});let Se=performance.now()-xe;Pn.push(Math.round(Se)),Mn.push(Math.round(performance.now()-ae)),Zn++,Wn++,$n+=be.length}let cr=performance.now(),lr=[];await vt({routes:V,canBypassClientBuild:L,getPlan:e=>ft(On,e),isCached:e=>{if(U)return!1;try{return ze({routePath:e.path,cacheItem:W[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:z})}catch{return!1}},onCacheHit:async e=>{let t=W[e.normalizedKey]?.loaderDataFilePath,n=t?(0,s.join)(D,t):void 0,r=!er.has(e.finalOutFile),i=!!n&&!tr.has(n);r&&er.add(e.finalOutFile),i&&n&&tr.add(n);let a=performance.now();try{if(r){let t=!1;if(_n)try{let n=await c.default.readFile(e.cachedHtmlFile,`utf-8`),r=n.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1];r&&r!==_n&&(await c.default.ensureDir((0,s.dirname)(e.finalOutFile)),await c.default.writeFile(e.finalOutFile,n.split(r).join(_n)),t=!0)}catch{t=!1}t||nr.push({source:e.cachedHtmlFile,destination:e.finalOutFile})}n&&t&&c.default.existsSync(e.cachedLoaderFile)&&(i&&nr.push({source:e.cachedLoaderFile,destination:n}),Cn[wt(e.path,g)]=t,wn++),Qn++,Gn++,Vn+=performance.now()-a}catch(t){throw r&&er.delete(e.finalOutFile),i&&n&&tr.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!$t&&en===`remix`&&Dn&&ar.set(e.path,Dn(e.fetchUrl))},ensurePool:ln,getPool:()=>q,getWorkerCount:()=>Be(q)?.totalWorkers??0,onWorkerFailure:async(e,t,n,a)=>{if(!Yt)throw Error(`Error on page: ${e}\n${String(n)}`);(0,i.warn)(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),Xn=!0;try{await cn()}catch{}q=null,sn=!0;let o=await Yt.render(e);return{path:e,appHTML:o.appHTML,metaAttributes:o.metaAttributes,bodyAttributes:o.bodyAttributes,htmlAttributes:o.htmlAttributes,styleTag:o.styleTag,timings:o.timings,routerContext:r.n(o.routerContext)}},onWorkerResult:async(e,t,n,r)=>{Hn+=Math.max(0,r-(n.timings?.totalMs??0)),Un++,n.timings&&(jn.push(Math.round(n.timings.totalMs)),Jn(n.timings));let i={...Jt,routePath:e},a=performance.now(),o=await tt?.(e,X,i)||X;In+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await Sn.add(()=>sr(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,Zt,K,Qt,$t,en??`remix`,o))},scheduleMainThread:(e,t)=>{lr.push(bn.add(async()=>{try{let n={...Jt,routePath:e},i=performance.now(),a=await tt?.(e,X,n)||X;In+=performance.now()-i;let o=performance.now(),{appHTML:s,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Yt.render(e);jn.push(Math.round(performance.now()-o)),Jn(p);let m=f?.loaderData;await sr(t,s,u,c,l,d,r.n(f),m||null,n,Zt,K,Qt,$t,en??`remix`,a)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>Sn.onIdle(),drainMainThread:async()=>{await Promise.all(lr),await bn.onIdle()},drainWrites:()=>rr.flush(),cleanupAfterFailure:async()=>{try{c.default.existsSync(D)&&await c.default.remove(D)}catch{}},destroyPool:cn,onNoRenderer:e=>{(0,i.warn)(`[ssg] No SSR context available for ${e}, skipping`)}}),qn+=performance.now()-cr;let ur=performance.now();for(let e of V){if(U)continue;let t=On.get(e);if(!t||!c.default.existsSync(t.cachedHtmlFile))continue;er.has(t.finalOutFile)||nr.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=$[t.normalizedKey];if(!n?.loaderDataFilePath||!c.default.existsSync(t.cachedLoaderFile))continue;let r=(0,s.join)(D,n.loaderDataFilePath);tr.has(r)||nr.push({source:t.cachedLoaderFile,destination:r})}await E(nr);let dr=Math.round(performance.now()-ur);Kn+=dr;let fr=Zn+Qn,pr=($n/1024/1024).toFixed(2),mr=0;if(!U){try{let e=JSON.stringify($)!==ir;e&&await Ee(B,$),mr=await kt(z,$,V,e)}catch{}if(kn)try{await ae(kn,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let hr=performance.now()-zt,gr=Be(an),_r={renderedCount:Zn,cachedCount:Qn,renderedSize:$n,totalPages:fr,prunedCount:mr,clientBuildMs:Math.round(_),serverBuildMs:Math.round(v),ssrImportMs:Math.round(y),workerPoolSetupMs:Math.round(Yn),workerUsed:gr!==null&&!Xn,workerCount:gr?.totalWorkers??0,fallbackMainThread:Xn,ssrP50Ms:Q(jn,50),ssrP95Ms:Q(jn,95),ssrP99Ms:Q(jn,99),crittersP50Ms:Q(Nn,50),crittersP95Ms:Q(Nn,95),writeP50Ms:Q(Pn,50),writeP95Ms:Q(Pn,95),routerTimingCount:Z.count,routerMatchAvgMs:Z.count>0?Z.matchMs/Z.count:0,routerResolveAvgMs:Z.count>0?Z.resolveMs/Z.count:0,routerLoadersAvgMs:Z.count>0?Z.loadersMs/Z.count:0,routerRenderAvgMs:Z.count>0?Z.renderMs/Z.count:0,routerHelmetAvgMs:Z.count>0?Z.helmetMs/Z.count:0,routerTotalAvgMs:Z.count>0?Z.totalMs/Z.count:0,pagesPerSecond:fr>0&&hr>0?Math.round(fr/(hr/1e3)*10)/10:0,pipeline:{renderedPageCount:Wn,cachedPageCount:Gn,clientBuildMs:Math.round(_),serverBuildMs:Math.round(v),ssrImportMs:Math.round(y),workerPoolSetupMs:Math.round(Yn),routePreparationMs:Math.round(rn),workerTransportMs:Math.round(Hn),workerRoundTripMs:Math.round(Hn),workerTransportAvgMs:Un>0?Math.round(Hn/Un):0,finalizeP50Ms:Q(Mn,50),finalizeP95Ms:Q(Mn,95),assetCollectionMs:Math.round(Fn),beforeHookMs:Math.round(In),htmlAssemblyMs:Math.round(Ln),onPageRenderedHookMs:Math.round(Rn),criticalCssP50Ms:Q(Nn,50),criticalCssP95Ms:Q(Nn,95),cacheWriteMs:Math.round(0+rr.writeTimeMs()),cachedOutputMs:Math.round(Vn),renderQueueDrainMs:Math.round(qn),renderPipelineSettleMs:Math.round(qn),outputLinkMs:Math.round(Kn)}};b?.({name:`Render pages`,duration:hr,success:!0,details:`${fr} pages (${Zn} new, ${Qn} cached, ${pr} MB)`,metrics:_r}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(hr),success:!0,details:`${fr} pages / ${Zn} new / ${Qn} cached / ${pr} MB`,metrics:_r})}`);let vr=performance.now(),yr=bt(Cn);if(await Te((0,s.join)(D,`static-loader-data-manifest-${M}.json`),yr),await ct((0,s.join)(k,`ssr`),5,U?`turbo-ssr`:(0,s.basename)(N)),Ft(),J?.dispose)try{await J.dispose()}catch{}let br=Je.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;br&&!br.disabled&&br.generateSW&&await br.generateSW();let xr=Math.round(performance.now()-ne);b?.({name:`Static loader data`,duration:performance.now()-vr,success:!0,details:`${wn} loader data files`,metrics:{loaderDataFileCount:wn}}),await se?.(h),await At(D);let Sr=Ce(D),Cr=await De(D,xr,k,{outputFiles:Sr,manifestPath:(0,s.join)(ke,`dist`,...yt,`manifest.json`)});Oe(D,Cr),b?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(xr/1e3).toFixed(1)}s, JS: ${(Cr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(Cr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:xr,totalPages:Cr.pages.length,jsSize:Cr.totalJSBundleSize,cssSize:Cr.totalCSSBundleSize}});let wr=new Set(Sr),Tr=(Ve?.extraFiles??[]).filter(e=>!wr.has(e)&&!Bt.clientFiles.includes(e)&&c.default.existsSync((0,s.join)(D,e)));await xe((0,s.join)(k,`ssg-output.json`),Ae,D,Se(V,$,st).concat(`static-loader-data-manifest-${M}.json`).concat(`page-source.json`),Bt.clientFiles,Sr,Tr)}async function kt(e,t,n=[],r=!1){try{if(!c.default.existsSync(e))return 0;let i=(0,s.join)(e,`.prune-state`);if(!r)try{let e=await c.default.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await c.default.readdir(e),o=new Set,l=new Set([...Object.keys(t),...n]);for(let e of l){let t=u.default.createHash(`md5`).update(e).digest(`hex`);o.add(`${t}.html`),o.add(`${t}.json`)}let d=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!o.has(t)&&(await c.default.remove((0,s.join)(e,t)),d++);return await c.default.writeFile(i,String(Date.now()),`utf8`),d}catch{return 0}}async function At(e){try{yt.length>0?await c.default.remove((0,s.join)(e,...yt)):await Promise.all([c.default.remove((0,s.join)(e,`manifest.json`)),c.default.remove((0,s.join)(e,`ssr-manifest.json`))])}catch{}}function jt(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Mt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return(0,i.error)(`Error formatting html: ${t?.message}`),e}return e}function Nt(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function Pt({template:e,ssrEntry:n,onBeforePageRender:r,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(c){let u=async(u,d)=>{try{let i=u.originalUrl??u.url??`/`,f=await c.ssrLoadModule(n),p=f.createRoot,m=await p(!1,i),h=t.t(m,f),{app:g,base:ee}=m,[te=`/`,ne=``]=i.split(`?`),re=new URLSearchParams(ne);if(!g&&re.has(`_data`))return h.handleLoader(u,d);let ie=await c.transformIndexHtml(i,e),ae=await r?.(i,ie,m)||ie,{appHTML:_,bodyAttributes:v,htmlAttributes:oe,metaAttributes:y,styleTag:se}=await h.render(t.i(te,ee));y.push(se);let ce=await Promise.all([n,a].map(async e=>await c.moduleGraph.getModuleByUrl(e))),le=new Set,b=new Set,ue=async e=>{if(!e?.ssrTransformResult||b.has(e))return;b.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))le.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await c.moduleGraph.getModuleByUrl(e);t&&await ue(t)}};await Promise.all(ce.map(async e=>ue(e)));let x=[...le].map(e=>S(t.n(c.config.base,e)));y.push(...x);let fe=await de({rootContainerId:o,appHTML:_,indexHTML:ae,metaAttributes:y,bodyAttributes:v,htmlAttributes:oe,initialState:null}),C=await s?.(i,fe,m)||fe;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,l.send)(u,d,C,`html`,{headers:`pluginContainer`in c?c.config.server.headers:c.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));c.ssrFixStacktrace(t),(0,i.error)(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return c.middlewares.use(Nt),()=>{c.middlewares.use(u)}}}}async function Ft(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),o,c,u,f;if(r){o=e.root||a,c={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=c,n=c.entry||await x(o,t);u=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:(0,s.join)(o,n),f=await d.default.readFile((0,s.join)(o,t),`utf-8`)}else{let t=await(0,l.resolveConfig)(e,`serve`,n,n);o=t.root||a,c={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=c,p=c.entry||await x(o,r),[m,h]=await Promise.all([me(t,p),d.default.readFile((0,s.join)(o,r),`utf-8`)]);u=m,f=h}let{onBeforePageRender:p,onPageRendered:m,rootContainerId:h=`root`,mock:g=!1}=c;if(process.env.__DEV_MODE_SSR=`true`,g){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-9nTqUjri.cjs`));e()}return await(0,l.createServer)({...e,plugins:[...e.plugins??[],Pt({template:f,ssrEntry:u,onBeforePageRender:p,onPageRendered:m,entry:c.entry||`src/main.ts`,rootContainerId:h})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function W(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Ft(t,e);return await r.listen(),G(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,i.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function G(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${i.colors.bold(`${e}ms`)}`}n(`\n ${i.colors.cyan(` VITE-REACT-SSG v${w} `)}`,{clear:!e.config.logger.hasWarned}),n(`${i.colors.cyan(`\n VITE v${l.version}`)+i.colors.dim(r)}\n`),n(i.colors.green(` dev server running at:`)),e.printUrls()}var It=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};exports.ShellStitcher=It,exports.build=Ot,exports.createServer=Ft,exports.dev=W;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-D-qHiVGv.cjs`),t=require(`./router-adapter-DR3BzW_i.cjs`),n=require(`./critical-FFUmobto.cjs`),r=require(`./ssg-worker-payload-D6kDQQtE.cjs`);let i=require(`@bdocs/dui`),a=require(`node:module`),o=require(`node:os`);o=e.n(o,1);let s=require(`node:path`);s=e.n(s,1);let c=require(`fs-extra`);c=e.n(c,1);let l=require(`vite`),u=require(`node:crypto`);u=e.n(u,1);let d=require(`node:fs`);d=e.n(d,1);let f=require(`node:fs/promises`);f=e.n(f,1);const p=/import\("([^)]+)"\)/g;function m(e,t){let n=new Set;if(!t)return n;for(let r of t)h(e,r,n);return n}function h(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{h(e,t,n)}),n):n}function g(e,t,n,r){let i=e?.map(e=>e.route.entry).filter(Boolean)??[],a=new Set;e?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(p);for(let e of n)a.add(e[1].split(`/`).at(-1)??``)});let o=new Set(i);for(let e of a){let t=n.find(([t,n])=>n.file.endsWith(e));t&&o.add(t[0])}let s=new Set;for(let e of o){let n=r.get(e);if(!n){let i=m(t.manifest,new Set([e]));n=new Set;for(let e of i)for(let r of t.ssrManifest[e]||[])n.add(r);r.set(e,n)}for(let e of n)s.add(e)}return s}function ee(e){let t=Object.entries(e.serverManifest),n=new Map,r=new Map;return i=>{let a=r.get(i);if(a)return a;let o=Promise.resolve().then(()=>{let r=g(e.matchRouteBranchWithParams([...e.routes],i,e.base),e,t,n);return new Set(r)});return r.set(i,o),o.catch(()=>{r.get(i)===o&&r.delete(i)}),o}}function te(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return u.default.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function ne(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function re(e,t){let n=new Set(ne(e)),r=ne(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
+ `):null}var ie=class{constructor(e={}){this.entries=new Map,this.cacheDir=e.cacheDir,this.maxEntries=e.maxEntries??1024}getOrCreate(e,t,n={}){let r=this.entries.get(e);if(r)return r.promise;let i=n.engine??`zig-critters`,a={promise:Promise.resolve(null),settled:!1},o=Promise.resolve().then(async()=>{if(this.cacheDir){let t=await this.readDisk(e,i);if(t!==void 0)return t}return t()}).then(t=>(this.cacheDir&&this.writeDisk(e,i,t).catch(()=>{}),t)).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{a.settled=!0,this.evictSettledEntries()});return a.promise=o,this.entries.set(e,a),this.evictSettledEntries(),o}get size(){return this.entries.size}diskPath(e){return(0,s.join)(this.cacheDir,`critical-css-${e}.json`)}async readDisk(e,t){try{let n=await c.default.readFile(this.diskPath(e),`utf-8`),r=JSON.parse(n);if(r?.v!==2||r?.engine!==t||!(r.style===null||typeof r.style==`string`))return;let i=new Date;return c.default.utimes(this.diskPath(e),i,i).catch(()=>{}),r.style}catch{return}}async writeDisk(e,t,n){if(!this.cacheDir||n!==null&&n.length>262144)return;let r={v:2,engine:t,style:n};await c.default.ensureDir(this.cacheDir),await c.default.writeFile(this.diskPath(e),JSON.stringify(r),`utf-8`)}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};async function ae(e,t={}){let n=t.maxAgeMs??720*60*60*1e3,r=t.maxEntries??5e3;try{if(!c.default.existsSync(e))return 0;let t=Date.now()-n,i=[];for(let n of await c.default.readdir(e)){if(!n.startsWith(`critical-css-`)||!n.endsWith(`.json`))continue;let r=(0,s.join)(e,n);try{let e=await c.default.stat(r),a=Math.max(e.mtimeMs,e.atimeMs);a<t?(await c.default.remove(r),i.push({file:n,usedAt:0})):i.push({file:n,usedAt:a})}catch{}}let a=i.filter(e=>e.usedAt===0).length;if(i.length>r){let t=i.filter(e=>e.usedAt>0).sort((e,t)=>t.usedAt-e.usedAt);for(let n of t.slice(r))try{await c.default.remove((0,s.join)(e,n.file)),a++}catch{}}return a}catch{return 0}}const oe=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function _(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function se({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${oe}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return _(_(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function ce({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${oe}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return _(_(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return _(_(p,`html`,a),`body`,i)}async function v(e,t=`index.html`){let[,n]=[...(await c.default.readFile((0,s.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function le(e){return`<link rel="stylesheet" href="${e}">`}function ue(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=y(e);r&&n.push(r)}}),n.join(``)}function y(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var b=`0.4.4`;async function de(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&C(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function x(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:(0,s.join)(e.root,t))}const S=/[:*?]/;function C(e){return e?S.test(e):!1}async function w(e,t){if(e!==t){await c.default.ensureDir((0,s.dirname)(t)),await c.default.remove(t);try{await c.default.link(e,t)}catch{await c.default.copy(e,t)}}}async function fe(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(w(r.source,r.destination)));await Promise.all(n)}function pe({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=[],l=(e,t)=>{if(t<=e)return;let n=[],r=!1;for(let i of c)i[1]<e?n.push(i):t<i[0]?(r||=(n.push([e,t]),!0),n.push(i)):(e=Math.min(e,i[0]),t=Math.max(t,i[1]));r||n.push([e,t]),c=n},u=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),l(t,performance.now())}),s};return{enqueue(e,t){let c=Buffer.byteLength(t,`utf8`);return c>i?(s=u().then(async()=>{let r=performance.now();await n(e,t),l(r,performance.now())}),s):(a.push({filePath:e,content:t}),o+=c,a.length>=r||o>=i?u():Promise.resolve())},flush:u,pendingCount(){return a.length},writeTimeMs(){return c.reduce((e,[t,n])=>e+(n-t),0)}}}function T(e,t,n,r=[],i=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort(),extraFiles:[...new Set(i)].sort()}}function me(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,s=[...new Set(r)].sort(),l=[...new Set(i)].sort(),u=[...new Set(a)].sort();if(!o(e.clientFiles,s)||!o(e.pageFiles,l)||!o(e.auxiliaryFiles||[],u))return!1;let d=[...new Set(e.extraFiles??[])].sort();if(!d.every(e=>c.default.existsSync(`${n}/${e}`)))return!1;let f=[...s,...l,...u];return o(ve(n),[...new Set([...f,...d])].sort())?f.every(e=>c.default.existsSync(`${n}/${e}`)):!1}function he(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function ge(e){try{let t=await c.default.readJson(e);if(!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`))return;let n=Array.isArray(t.extraFiles)?t.extraFiles.filter(e=>typeof e==`string`):[];return T(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles,n)}catch{return}}async function E(e,t,n,r,i=[],a,o=[]){let s=a||ve(n),c=new Set(r),l=new Set(i),u=new Set(o);return xe(e,T(t,i.length>0?[...l]:s.filter(e=>!c.has(e)),r,i.length>0?s.filter(e=>!c.has(e)&&!l.has(e)&&!u.has(e)):[],o))}function _e(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[D(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function ve(e){let t=[],n=r=>{let i;try{i=c.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push((0,s.relative)(e,i).split(s.sep).join(`/`))}};return n(e),t.sort()}function D(e){return!e||e===`/`?``:t.a(e).replace(/\/+$/,``)}function ye(e,t){let n=new Set(t.map(D)),r={};for(let[t,i]of Object.entries(e)){let e=D(t);n.has(e)&&(r[e]=i)}return r}async function be(e,t){try{if(await c.default.readFile(e,`utf8`)===t)return!1}catch{}return await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeFile(e,t,`utf8`),!0}async function xe(e,t,n=2){try{let n=await c.default.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeJson(e,t,{spaces:n}),!0}const Se=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),Ce=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function O(e){try{return d.default.statSync(e).size}catch{return 0}}const k=`boltdocs-metrics.json`;function A(e){if(!e)return null;try{let t=(0,s.join)(e,k);return d.default.existsSync(t)?JSON.parse(d.default.readFileSync(t,`utf-8`)):null}catch{return null}}function j(e,t){try{let n=s.default.resolve(e,`..`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0}),d.default.writeFileSync((0,s.join)(e,k),JSON.stringify(t))}catch{}}async function we(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=A(n);if(e)return e.buildTime=t,e}let i=(0,s.join)(e,`.vite`),a=(0,s.join)(e,`assets`),o={},c=r.manifestPath||(0,s.join)(i,`manifest.json`);d.default.existsSync(c)&&(o=JSON.parse(await d.default.readFileSync(c,`utf-8`)));let l=0,u=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=O((0,s.join)(e,n));l+=i;for(let t of r)u+=O((0,s.join)(e,t))}let f=0,p=0;if(d.default.existsSync(a)){let e=d.default.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=s.default.extname(t.name).toLowerCase(),n=(0,s.join)(a,t.name);Se.has(e)?f+=O(n):Ce.has(e)&&p++}}let m=(0,s.join)(e,`index.html`),h=0,g=[];if(d.default.existsSync(m)){let e=O(m);h+=e,g.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let ee=r.outputFiles?[...r.outputFiles]:(()=>{try{return d.default.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of ee){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=O((0,s.join)(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);h+=n,g.push({route:e,htmlSize:n,htmlFile:t})}}let te={buildTime:t,totalJSBundleSize:l,totalCSSBundleSize:u,totalImagesSize:f,totalHTMLSize:h,fontCount:p,pages:g};return n&&j(n,te),te}function Te(e,t){let n=s.default.resolve(e,`..`,`.boltdocs`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0});let r=(0,s.join)(n,`performance.json`);d.default.writeFileSync(r,JSON.stringify(t,null,2))}const Ee=new Set([`node_modules`,`dist`,`coverage`]);function M(e,t){return(0,s.relative)(e,t).replace(/\\/g,`/`)}function N(e,t,n){try{let r=c.default.readFileSync(t),i=new Uint8Array(r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)),a=(0,u.createHash)(`sha1`).update(i).digest(`hex`);n.update(`${M(e,t)}\0${a}\0`)}catch{}}function P(e,t,n){let r;try{r=c.default.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`)||Ee.has(i))continue;let r=(0,s.join)(e,i),a;try{a=c.default.statSync(r)}catch{continue}a.isDirectory()?P(r,t,n):a.isFile()&&N(t,r,n)}}function F(e,t){let n=(0,a.createRequire)(n(`url`).pathToFileURL(__filename).href);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=(0,s.join)((0,s.dirname)(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);c.default.existsSync(i)&&P(i,e,t)}catch{}}const De=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`];function Oe(e,t){for(let n of De){let r=(0,s.join)(e,n);c.default.existsSync(r)&&N(e,r,t)}}function ke(e){try{let t=(0,u.createHash)(`sha256`);F(e,t);let n=(0,s.join)(e,`src`);return c.default.existsSync(n)&&P(n,e,t),Oe(e,t),t.update(`v4\0`),t.digest(`hex`)}catch{return(0,u.createHash)(`sha256`).update(`__shared_hash_error__`).digest(`hex`)}}function Ae(e,t,n){try{c.default.removeSync((0,s.join)(n,`hash-merkle.json`))}catch{}try{let n=(0,u.createHash)(`sha256`);F(e,n);let r=(0,s.join)(e,t);c.default.existsSync(r)&&P(r,e,n);let i=(0,s.join)(e,`src`);return c.default.existsSync(i)&&P(i,e,n),Oe(e,n),n.update(`v4\0`),n.digest(`hex`)}catch(e){return(0,i.warn)(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),(0,u.createHash)(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function I(e){let t=u.default.createHash(`sha1`);return t.update(`v5`),t.update(`\0`),t.update(c.default.readFileSync(e)),t.digest(`hex`)}function je(e,t){if(e)try{return I(e)}catch{}return t}function Me(e,t){try{return I(e)}catch{return t}}function Ne({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let o=u.default.createHash(`md5`).update(e).digest(`hex`);return!(!c.default.existsSync((0,s.join)(i,`${o}.html`))||t.loaderDataFilePath&&!c.default.existsSync((0,s.join)(i,`${o}.json`)))}function Pe(e){return e===null?null:e.poolMetrics()}function L(e,t){return(0,s.isAbsolute)(t)?t:(0,s.join)(e,t)}function Fe(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=D(r);n[t]=L(e,i)}return Object.freeze(n)}function Ie(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:Fe(e.root,e.routeToSourceFileMap)})}function Le(e,t,n={}){let r=Fe(e,n),i=t.flatMap(t=>{if(!t.path)return[];let i=D(t.path),a=n[t.path],o=a?L(e,a):r[i]||t.componentPath;return[{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}]}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function Re(e,t){return Object.freeze({...e,routeManifest:t})}const R=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],z=[`react`,`react-dom`];function ze(e){return Number.parseInt(l.version,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Be(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function Ve(e,t){let n=[],r=i=>{let a;try{a=c.default.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=(0,s.join)(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=(0,s.relative)(e,a).split(s.sep).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function B(e){return e.flatMap(e=>{if(Array.isArray(e))return B(e);if(!e)return[];if(typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return[]}return[e]})}async function V(e){let t=[],n=async r=>{let i;try{i=await c.default.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=(0,s.join)(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push((0,s.relative)(e,i).split(s.sep).join(`/`))}};return await n(e),t.sort()}async function He(e){try{let t=await c.default.readFile(e);return(0,u.createHash)(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function Ue(e,t){if(!t||(0,s.isAbsolute)(t))return;let n=(0,s.resolve)(e),r=(0,s.resolve)(n,t),i=(0,s.relative)(n,r);if(!(!i||i===`..`||i.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(i)))return r}async function We(e,t){let n=(0,s.join)((0,s.resolve)(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await c.default.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&c.default.existsSync(e)?await V(e):[],a=Object.fromEntries((await Promise.all(i.map(async t=>{let n=await He((0,s.join)(e,t));return n?[t,n]:null}))).filter(e=>e!==null));for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=Ue(t,e);r&&await He(r)===n&&await c.default.remove(r)}e&&c.default.existsSync(e)&&(await c.default.ensureDir(t),await Promise.all(Object.entries(a).map(async([n,i])=>{let a=Ue(t,n);a&&(r[n]===i&&await He(a)===i||(await c.default.ensureDir((0,s.dirname)(a)),await c.default.copy((0,s.join)(e,n),a,{overwrite:!0,errorOnExist:!1})))}))),await c.default.ensureDir((0,s.resolve)(t,`..`)),await c.default.writeJson(n,{version:1,files:a})}function Ge(e){return(0,l.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...ze({input:{app:(0,s.join)(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir((0,s.isAbsolute)(t.build.outDir||``)?t.build.outDir||`dist`:(0,s.resolve)(e.root,t.build.outDir||`dist`))}}]})}function H(e){return(0,l.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...ze({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...R],external:[...z]},plugins:[...B(e.viteConfig.plugins??[]),Be()]})}async function Ke(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,o=[],u=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),c.default.existsSync(e.outDir)&&await c.default.remove(e.outDir);let t=(0,s.join)(e.clientCacheDir,`dist`);await We(e.viteConfig.publicDir,t),Xe(t,e.outDir),o=Ve((0,s.join)(e.clientCacheDir,`dist`),e.htmlEntry)}else{await(0,l.build)(Ge({...e,onResolvedOutputDir:e=>{n=e}}));let t=performance.now()-u;e.onStep?.({name:`Client build`,duration:t,success:!0,details:`Vite production build`}),r=(0,s.join)(e.finalCacheDir,`client-cache`,i);let a=(0,s.join)(r,`client-hash.txt`);await c.default.ensureDir(r);let d=(0,s.join)(r,`dist`);c.default.existsSync(d)&&await c.default.remove(d),await c.default.copy(n,d,{overwrite:!0,errorOnExist:!1}),await We(e.viteConfig.publicDir,d),o=Ve(d,e.htmlEntry),await c.default.writeFile(a,i,`utf-8`),await Ze((0,s.join)(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-u,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:o}}async function qe(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};c.default.existsSync(e.ssgOut)&&await c.default.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await(0,l.build)(H(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function Je(e,t){if(!t||(0,s.isAbsolute)(t))return;let n=(0,s.resolve)(e,t),r=(0,s.relative)((0,s.resolve)(e),n);if(!(r===`..`||r.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(r)))try{let t=c.default.realpathSync(e),r=c.default.realpathSync(n),i=(0,s.relative)(t,r);return i===`..`||i.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(i)||!c.default.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function Ye(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function Xe(e,t){let n=c.default.readdirSync(e,{withFileTypes:!0});c.default.mkdirSync(t,{recursive:!0});for(let r of n){let n=(0,s.join)(e,r.name),i=(0,s.join)(t,r.name);if(r.isDirectory())Xe(n,i);else if(r.isFile())try{c.default.linkSync(n,i)}catch{c.default.copyFileSync(n,i)}}}async function Ze(e,t=5,n){try{if(!c.default.existsSync(e))return;let r=await c.default.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=(0,s.join)(e,t.name),r=await c.default.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await c.default.remove((0,s.join)(e,t.name))}catch{}}function Qe(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function $e(e,t){return t===`nested`?(0,s.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function et(e){return Object.freeze(e)}function tt(e){let n=new Map;for(let r of e.routes){let i=u.default.createHash(`md5`).update(r).digest(`hex`),a=D(r),o=e.routeToSourceFileMap[a]||e.routeToSourceFileMap[r],c=o?e.sourceMeta.get(o):void 0;n.set(r,et({path:r,pathHash:i,cachedHtmlFile:(0,s.join)(e.ssgPagesDir,`${i}.html`),cachedLoaderFile:(0,s.join)(e.ssgPagesDir,`${i}.json`),finalOutFile:(0,s.join)(e.outDir,$e(r,e.dirStyle)),normalizedKey:a,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[r]??e.fallbackHash,fetchUrl:`${t.o(e.contextBase)}${t.r(r)}`}))}return n}function nt(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function rt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function it(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function at(e,t){return e>4&&!t}function ot(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function st(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function ct(e){let t=[],n=new Set,r=e.getPool(),i=it(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=[],l=async()=>{if(c.length===0)return;let e=c;c=[],await Promise.all(e)},u=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},d=e=>{let r;r=rt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(at(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=it(e.getWorkerCount?.()??0))),r?.renderBatch){let t=await Promise.all(e.routes.map(async t=>{let n=e.getPlan(t);return{path:t,plan:n,cached:await e.isCached(n)}})),l=[];for(let n of t)n.cached?c.push(e.onCacheHit(n.plan).then(()=>{o++})):(await e.prepareRoute?.(n.plan),l.push({path:n.path,plan:n.plan}));let u=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let t=0;t<l.length;t+=u){let o=l.slice(t,t+u);if(!r){for(let{path:n,plan:r}of l.slice(t))e.scheduleMainThread(n,r),a++;break}s=!0;let c=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of o){let i=await e.onWorkerFailure(n,r,t,c);if(!st(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};d((async()=>{let t;try{t=await c.renderBatch(o.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==o.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<o.length;n++){let{path:r,plan:i}=o[n],s=t[n],l;if(l=ot(s,r)?await e.onWorkerFailure(r,i,Error(s.error),c):st(s,r)?s:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),c),!st(l,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,l,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else{let t=await Promise.all(e.routes.map(async t=>{let n=e.getPlan(t);return{path:t,plan:n,cached:await e.isCached(n)}}));for(let l of t){if(l.cached){c.push(e.onCacheHit(l.plan).then(()=>{o++}));continue}if(await e.prepareRoute?.(l.plan),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=it(e.getWorkerCount?.()??0))),r){s=!0;let t=r,o=performance.now();d(t.render(l.path).catch(async n=>{let i=await e.onWorkerFailure(l.path,l.plan,n,t);return r=e.getPool(),i}).then(async t=>{if(!st(t,l.path))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(l.path,l.plan,t,performance.now()-o),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(l.path,l.plan),a++}}return await l(),await u(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await l(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const lt=Number.parseInt(l.version,10)>=5?[`.vite`]:[];function ut(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function dt(e,n){return`static-loader-data${t.a(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function ft(e,t){let n=`combined${t}`;return c.default.existsSync((0,s.join)(e,n))?n:c.default.readdirSync(e).filter(e=>e.endsWith(t)).sort((e,t)=>e.localeCompare(t))[0]||n}function pt(e,n=`/`){let r=t.a(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function mt(e,t,n){let r=t?.[n];if(r)return(0,s.isAbsolute)(r)?r:(0,s.join)(e,r)}function ht(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,(0,s.isAbsolute)(n)?(0,s.relative)(e,n):n]))}function gt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function _t(e={},d={}){let f=process.env.MODE||process.env.NODE_ENV||e.mode||`production`;f!==process.env.NODE_ENV&&(process.env.NODE_ENV=f);let p=process.cwd(),m=d.root||p,h=d.build?.outDir||`dist`,g=d.base||`/`,ne=performance.now(),_=0,le=0,y=0,{onFinished:b,onStep:S,routeToSourceFileMap:C={},cacheDir:w=`.boltdocs/build`,htmlEntry:T=`index.html`,entry:Se=await v(m,T)}=e,Ce=`docs`,O=Object.values(C);if(O.length>0){let e=O[0],t=(0,s.relative)(m,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(Ce=t[0])}let k=(0,s.isAbsolute)(h)?h:(0,s.join)(m,h),A=(0,s.isAbsolute)(w)?w:(0,s.join)(m,w),j=Ae(m,Ce,A),Ee=ke(m),M=Ie({root:m,outDir:k,cacheDir:A,base:g,mode:f,entry:Se,htmlEntry:T,docsDirName:Ce,clientHash:j,routeToSourceFileMap:C}),N=M.clientHash.substring(0,12),P=(0,s.join)(M.cacheDir,`ssr`,N),F=(0,s.join)(M.cacheDir,`client-cache`,M.clientHash),De=F,Oe=j,I=j,L=``;try{let{getZigCritters:e}=await Promise.resolve().then(()=>require(`./critical-FFUmobto.cjs`)).then(e=>e.n),t=await e();if(t){let e=await t.getEngineIdentity();e&&e!==`unknown`&&(L=e.slice(0,16))}}catch{}L&&(I=`${j}-${L}`);let Fe=(0,s.join)(F,`client-hash.txt`),R=!1;try{c.default.existsSync(Fe)&&c.default.existsSync((0,s.join)(F,`dist`))&&(R=(await c.default.readFile(Fe,`utf-8`)).trim()===j)}catch{}let z={server:``,css:``},ze=()=>{let e=``,t=``;try{let t=[],n=(e,r)=>{let i;try{i=c.default.readdirSync(e,{withFileTypes:!0})}catch{return}for(let a of i){let i=r?`${r}/${a.name}`:a.name;i!==`.vite`&&(i.startsWith(`.vite/`)||/^assets\/combined-.*\.js$/.test(i)||(a.isDirectory()?n((0,s.join)(e,a.name),i):a.isFile()&&t.push(i)))}};if(n(P,``),t.length>0){t.sort();let n=u.default.createHash(`sha256`);for(let e of t){n.update(e),n.update(`\0`);let t=c.default.readFileSync((0,s.join)(P,e));e===`combined.mjs`&&(t=Buffer.from(t.toString(`utf-8`).replace(/combined-[A-Za-z0-9_-]+\.js/g,`combined.js`))),n.update(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),n.update(`\0`)}e=n.digest(`hex`).slice(0,16)}}catch{}try{let e=R?(0,s.join)(F,`dist`,`assets`):(0,s.join)(k,`assets`);if(c.default.existsSync(e)){let n=c.default.readdirSync(e).filter(e=>e.endsWith(`.css`)).sort();if(n.length>0){let r=u.default.createHash(`sha256`);for(let t of n){r.update(t),r.update(`\0`);let n=c.default.readFileSync((0,s.join)(e,t));r.update(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),r.update(`\0`)}t=r.digest(`hex`).slice(0,16)}}}catch{}return{server:e,css:t}},Be=()=>{let e=j;L&&(e=`${e}-${L}`),(z.server||z.css)&&(e=`${e}-${z.server}-${z.css}`),I=e},Ve=!1;if(R){try{let e=(await c.default.readJson((0,s.join)(A,`ssr-cache-index.json`)))[j];if(typeof e==`string`){let t=Je((0,s.join)(A,`ssr`),e);t&&(P=t)}}catch{}if(c.default.existsSync(P)){let e=ze();z.server=e.server,z.css=e.css,(e.server||e.css)&&(Be(),Ve=!0)}}let B=(0,s.join)(A,`ssg-pages`),V=(0,s.join)(A,`ssg-cache.json`),He=(0,s.join)(A,`ssg-output.json`),Ue=await ge(He),Ge=Ue!==void 0;R&&(he(Ue,ve((0,s.join)(F,`dist`)),T)||(R=!1));let H=[],Xe=!1,$e=(e.dirStyle||d.ssgOptions?.dirStyle)??`flat`;if(R&&Ge&&$e!==`nested`){let e=(0,s.join)(A,`routes-cache.json`);try{if(c.default.existsSync(e)&&c.default.existsSync(V)){let t=JSON.parse(c.default.readFileSync(e,`utf-8`)),n=ye(JSON.parse(c.default.readFileSync(V,`utf-8`)),t.paths);if(t.dirStyle===$e&&t.base===g){let e=t.paths.every(e=>{let r=D(e),i=n[r];return Ne({routePath:e,cacheItem:i,sourceContentHash:je(C[r]||C[e]||mt(m,t.sourceFiles,r)||mt(m,t.sourceFiles,e),I),ssgPagesDir:B,requireAssetHash:!0})});t.paths.length>0&&e&&(H=t.paths,Xe=!0)}}}catch{}}if(Xe){let e=performance.now(),t={};try{c.default.existsSync(V)&&(t=ye(JSON.parse(c.default.readFileSync(V,`utf-8`)),H))}catch{}let n=[..._e(H,t,$e===`nested`?`nested`:`flat`),`static-loader-data-manifest-${N}.json`,`page-source.json`],r=ve((0,s.join)(F,`dist`)).filter(e=>e!==T),i=await ge(He),a=(i?.auxiliaryFiles??[]).every(e=>c.default.existsSync((0,s.join)(k,e)))&&me(i,j,k,r,n,i?.auxiliaryFiles??[]),o={};if(!a){c.default.existsSync(k)&&await c.default.remove(k);let e=(0,s.join)(F,`dist`);await We(d.publicDir,e),await c.default.copy(e,k);let n=[];for(let e of H){let r=u.default.createHash(`md5`).update(e).digest(`hex`),i=(0,s.join)(B,`${r}.html`),a=(0,s.join)(B,`${r}.json`),l=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:(0,s.join)(k,l)}),c.default.existsSync(a)){let r=D(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:(0,s.join)(k,i.loaderDataFilePath)}),o[pt(e,g)]=i.loaderDataFilePath)}}await fe(n),await be((0,s.join)(k,`static-loader-data-manifest-${N}.json`),ut(o))}await vt(B,t,H);let l=Math.round(performance.now()-ne);S?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),S?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),S?.({name:`Render pages`,duration:0,success:!0,details:`${H.length} pages (all cached)`}),S?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(l/1e3).toFixed(1)}s, all cached`});let f=Math.round(performance.now()-e),p={renderedPageCount:0,cachedPageCount:H.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:f,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:f};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${H.length} pages / 0 new / ${H.length} cached`,metrics:{renderedCount:0,cachedCount:H.length,renderedSize:0,totalPages:H.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:p}})}`),await b?.(h),await yt(k),await E((0,s.join)(A,`ssg-output.json`),j,k,n,r,void 0,i?.extraFiles??[]);return}let et=await(0,l.resolveConfig)(d,`build`,f,f),rt=Object.assign({},et.ssgOptions||{},e),{script:it=`sync`,mock:at=!1,formatting:ot=`none`,includedRoutes:st=gt,onBeforePageRender:_t,onPageRendered:St,dirStyle:Ct=`flat`,includeAllRoutes:wt=!1,format:U=`esm`,concurrency:Tt=20,rootContainerId:Et=`root`,beastiesOptions:Dt={},criticalCssMaxSize:Ot}=rt,kt=Dt,At=n.i(Ot),W=rt.turbo??!1,jt=(0,s.join)(A,`ssr`),Mt=(0,s.join)(A,`ssr-cache-index.json`);if(P=(0,s.join)(jt,W?`turbo-ssr`:N),!W&&R)try{let e=(await c.default.readJson(Mt))[j];if(typeof e==`string`){let t=Je(jt,e);t&&(P=t)}}catch{}let Nt=Qe((0,l.createLogger)(),Ye),Pt=()=>{};if(at){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-9nTqUjri.cjs`));Pt=e()}let G={};try{if(c.default.existsSync(V)){let e=await c.default.readJson(V);G=ye(e,Object.keys(e))}}catch{}let K=!1;if(R)try{let e=(0,s.join)(A,`routes-cache.json`);if(c.default.existsSync(e)){let t=JSON.parse(c.default.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=D(e),r=G[n];return Ne({routePath:e,cacheItem:r,sourceContentHash:je(C[n]||C[e]||mt(m,t.sourceFiles,n)||mt(m,t.sourceFiles,e),I),ssgPagesDir:B,requireAssetHash:!0})})&&(H=t.paths,K=!0)}}catch{}let Ft=K?``:await x(et,Se),It=(W||R)&&c.default.existsSync(P)&&c.default.readdirSync(P).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,Lt=null;if(!K&&It&&U===`esm`){let e=process.platform===`win32`?`file://`:``;try{let t=P;c.default.existsSync(t)&&(Lt=import(e+(0,s.join)(t,ft(t,`.mjs`)).replace(/\\/g,`/`)).catch(()=>{}))}catch{}}let Rt=performance.now(),[q,zt]=await Promise.all([Ke({viteConfig:d,resolvedMode:et.mode,root:m,htmlEntry:T,outDir:k,clientCacheDir:F,finalCacheDir:A,docsDirName:Ce,initialClientHash:j,canBypassClientBuild:R,customLogger:Nt,onStep:S,shouldSuppressLog:Ye},()=>Ae(m,Ce,A)),qe({viteConfig:d,resolvedMode:et.mode,entry:Se,ssrEntry:Ft,ssgOut:P,format:U,canSkipSsrImport:K,serverBuildSkipped:It,customLogger:Nt,onStep:S,shouldSuppressLog:Ye})]);if(h=q.outDir,De=q.resolvedClientCacheDir,Oe=q.resolvedClientHash,I=q.pageContentFallbackHash,L&&(I=`${I}-${L}`),!Ve){let e=ze();z.server=e.server,z.css=e.css,(e.server||e.css)&&Be(),Ve=!0}if(N=Oe.substring(0,12),_=q.durationMs,le=zt.durationMs,!W)try{let e={};try{e=await c.default.readJson(Mt)}catch{}e[Oe]=(0,s.relative)(jt,P),await xe(Mt,e)}catch{}let Bt=U===`esm`&&process.platform===`win32`?`file://`:``,Vt=U===`esm`?`.mjs`:`.cjs`,Ht=`combined${Vt}`;try{c.default.existsSync(P)&&(Ht=ft(P,Vt))}catch{}let Ut=Bt+(0,s.join)(P,Ht).replace(/\\/g,`/`),Wt=Ht.replace(/\.[^/.]+$/,``),Gt=JSON.parse(await c.default.readFile((0,s.join)(P,...lt,`manifest.json`),`utf-8`)),Kt=null,qt=null,J=[],Jt,Yt=`/`,Xt,Zt=null,Qt,$t=st;if(!K){let e=typeof require<`u`?require:(0,a.createRequire)(require(`url`).pathToFileURL(__filename).href),n=performance.now(),r=U===`esm`?await import(Ut):e(Ut);Lt&&await Lt.catch(()=>{}),y=performance.now()-n,Jt=r.matchRouteBranchWithParams;let{createRoot:i,includedRoutes:o}=r;$t=o||st,Kt=await i(!1);let s=Kt;if(J=s.routes,Yt=s.base,Xt=s.triggerOnSSRAppRendered,Zt=s.app,Qt=s.routerType,J&&J.length>0)for(let e of J){let t=e.filePath??e.entry;e.path&&t&&!C[e.path]&&(C[e.path]=t)}M=Re(M,Le(m,J,C)),qt=t.t(s,r)}let en=``,tn=0,Y=null,nn=null,rn=null,an=!1,on=1/0;async function sn(){if(rn){await rn;return}let e=nn;e&&(rn=e.destroy(),await rn)}if(!K){let e=performance.now(),{paths:t}=await de(J);H=wt?t:await $t(t,J||[]),H=gt(H,J||[]),H=Array.from(new Set(H)),tn+=performance.now()-e;try{await xe((0,s.join)(A,`routes-cache.json`),{paths:H,dirStyle:Ct,base:g,sourceFiles:ht(m,C)},0)}catch{}en=(0,s.join)(P,Wt+Vt)}async function cn(){if(Y||an||H.length<=4)return;an=!0;let e=performance.now();try{en=(0,s.join)(P,Wt+Vt);let{SsgWorkerPool:t}=await Promise.resolve().then(()=>require(`./ssg-worker-pool-CfVq6hp_.cjs`));Y=new t({ssrEntryPath:en,format:U===`esm`?`esm`:`cjs`,...on<=2?{numWorkers:1}:{}}),nn=Y,await Y.ready(),Jn=performance.now()-e}catch{Jn=performance.now()-e,Y=null}}let ln=rt.criticalCss??`zig-critters`,X,un;ln===`zig-critters`?(X=await n.t({concurrency:Math.max(1,Math.min(Tt,o.default.cpus().length,8))}),X||(0,i.warn)("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):ln===`beasties`&&kt!==!1&&(un=await n.r(h,{publicPath:g,...kt}));let dn=``,fn=``;if(X){let e=`unknown`;try{e=await X.getEngineIdentity()}catch{}let t=(0,s.join)(k,`assets`);if(c.default.existsSync(t)){let e=c.default.readdirSync(t).filter(e=>e.endsWith(`.css`));for(let n of e)dn+=`${c.default.readFileSync((0,s.join)(t,n),`utf-8`)}\n`}dn&&(fn=u.default.createHash(`sha256`).update(dn).update(`\0`).update(e).digest(`hex`))}let pn={},mn={},hn={};if(K)for(let e of H){let t=D(e);hn[e]=G[t]?.assetHash||j}else{let[e,t]=await Promise.all([c.default.readFile((0,s.join)(k,...lt,`ssr-manifest.json`),`utf-8`),c.default.readFile((0,s.join)(k,...lt,`manifest.json`),`utf-8`)]);pn=JSON.parse(e),mn=JSON.parse(t);for(let[e,t]of Object.entries(C)){let n=Me(t,j);n=`${n}-${Ee}`,z.css&&(n=`${n}-${z.css}`),L&&(n=`${n}-${L}`),hn[e]=n}let n=`synthetic:${Ee}:${z.css||`css`}:${L||`engine`}`;for(let e of H)hn[e]||(hn[e]=n)}let Z=await c.default.readFile((0,s.join)(k,T),`utf-8`);c.default.rmSync((0,s.join)(k,T)),Z=bt(Z,it);let gn=Z.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],_n=_t?null:se({rootContainerId:Et,indexHTML:Z}),vn=(await import(`p-queue`)).default||await import(`p-queue`),yn=new vn({concurrency:Tt}),bn=new vn({concurrency:Math.min(o.default.cpus().length,4)}),xn=new vn({concurrency:Math.max(2,Math.min(o.default.cpus().length,8))}),Sn={},Cn=0,wn=new Map,Tn=new Set;for(let e of H){let n=C[t.a(e).replace(/\/$/,``)]||C[e];n&&Tn.add(n)}for(let e of Tn)try{if(c.default.existsSync(e)){let t=c.default.statSync(e);wn.set(e,{hash:Me(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let En=null;!K&&Jt&&(En=ee({routes:[...J],base:Yt,matchRouteBranchWithParams:Jt,serverManifest:Gt,manifest:mn,ssrManifest:pn}));let Dn=tt({routes:H,outDir:k,ssgPagesDir:B,dirStyle:Ct,contextBase:Yt,fallbackHash:I,routeToSourceFileMap:C,sourceMeta:wn,routeToAssetHash:hn});on=H.filter(e=>{let t=nt(Dn,e),n=G[t.normalizedKey];try{return!Ne({routePath:t.path,cacheItem:n,sourceContentHash:t.sourceContentHash,expectedAssetHash:t.routeAssetHash,ssgPagesDir:B})}catch{return!0}}).length;let On=W?void 0:(0,s.join)(A,`critical-css`),kn=new ie({cacheDir:On}),An=[],jn=[],Mn=[],Nn=[],Pn=0,Fn=0,In=0,Ln=0,Rn=0,zn=0,Bn=0,Vn=0,Hn=0,Un=0,Wn=0,Gn=0,Kn=0,Q={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function qn(e){e&&(Q.count++,Q.matchMs+=e.matchMs,Q.resolveMs+=e.resolveMs,Q.loadersMs+=e.loadersMs,Q.renderMs+=e.renderMs,Q.helmetMs+=e.helmetMs,Q.totalMs+=e.totalMs)}let Jn=0,Yn=!1;function $(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let Xn=0,Zn=0,Qn=0,$n=new Set,er=new Set,tr=[],nr=pe({writeFile:async(e,t)=>{await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeFile(e,t,`utf-8`)}}),rr=JSON.stringify(G),ir=ye(G,H),ar=new Map,or=new Set;or.add(B);for(let e of H){let t=Ct===`nested`?(0,s.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;or.add((0,s.join)(k,(0,s.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;or.add((0,s.join)(k,`static-loader-data`,(0,s.dirname)(n)))}or.add((0,s.join)(k,`static-loader-data`)),await Promise.all([...or].map(e=>c.default.ensureDir(e)));async function sr(e,t,n,a,o,l,u,d,f,p,m,h,ee,ne,ie){let ae=performance.now(),{path:_,cachedHtmlFile:se,cachedLoaderFile:v,normalizedKey:le,sourceContentHash:y,sourceMtimeMs:b,fetchUrl:de}=e,x;if(!ee&&ne===`remix`){if(!En)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();x=new Set(await(ar.get(_)||En(de))),Pn+=performance.now()-e}else x=new Set;let S;if(d&&Object.keys(d).length>0){let e=dt(_,N);S=e,W&&await c.default.writeFile((0,s.join)(k,e),JSON.stringify(d)),Sn[pt(_,g)]=e,Cn++}await h?.(_,t,f);let C=performance.now(),w=_n&&ie===Z?_n({appHTML:t,metaAttributes:n,bodyAttributes:a,htmlAttributes:o,initialState:null}):await ce({rootContainerId:Et,appHTML:t,indexHTML:ie,metaAttributes:n,bodyAttributes:a,htmlAttributes:o,initialState:null});In+=performance.now()-C;let fe=ee?``:ue(x),pe=u?w.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):w;fe&&(pe=pe.replace(`<head>`,`<head>${fe}`));let T=performance.now();Rn++,Rn===1&&(zn=T);let me=await St?.(_,pe,f)||pe;Rn--,Rn===0&&(Ln+=performance.now()-zn);let he=``;if(d&&Object.keys(d).length>0){let e=JSON.stringify(d).replace(/</g,`\\u003c`);he=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${pt(_,g)}': ${e} };`}let ge=r.t(u),E=me,_e=`<script>window.__VITE_REACT_SSG_HASH__ = '${N}';${he}${ge}<\/script>`,ve=performance.now();if(E=E.replace(`<script>${oe}<\/script>`,``),X){if(dn){let e=te(E,fn,dn,`zig-critters`);try{let t=await kn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await X.extractCriticalCss(E,dn,{maxSize:At});return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&(0,i.warn)(`[zig-critters] Critical CSS for "${_}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)},{engine:`zig-critters`});t&&!E.includes(`data-zig-critters`)&&(E=E.replace(`</head>`,`${t}</head>`))}catch(e){(0,i.warn)(`[zig-critters] Failed to inline CSS for "${_}": ${e instanceof Error?e.message:String(e)}`)}}E=E.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(un){let e=te(E,fn,dn,`beasties`),t=await kn.getOrCreate(e,async()=>{let e=await bn.add(()=>un.process(E));return re(E,e)},{engine:`beasties`});t&&!E.includes(t)&&(E=E.replace(`</head>`,`${t}</head>`)),E=E.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let D=_e+(l||``);D&&(E=E.replace(`<head>`,`<head>${D}`));let ye=ot===`none`?E:await xt(E,ot);Mn.push(Math.round(performance.now()-ve));let be=performance.now();W?d&&Object.keys(d).length>0&&S&&await nr.enqueue((0,s.join)(k,S),JSON.stringify(d)):(await nr.enqueue(se,ye),d&&Object.keys(d).length>0&&S?(await nr.enqueue(v,JSON.stringify(d)),ir[le]={contentHash:y,mtime:b?Math.round(b):0,loaderDataFilePath:S,assetHash:e.routeAssetHash}):ir[le]={contentHash:y,mtime:b?Math.round(b):0,assetHash:e.routeAssetHash});let xe=performance.now()-be;Nn.push(Math.round(xe)),jn.push(Math.round(performance.now()-ae)),Xn++,Un++,Qn+=ye.length}let cr=performance.now(),lr=[];await ct({routes:H,canBypassClientBuild:R,getPlan:e=>nt(Dn,e),isCached:e=>{if(W)return!1;try{return Ne({routePath:e.path,cacheItem:G[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:B})}catch{return!1}},onCacheHit:async e=>{let t=G[e.normalizedKey]?.loaderDataFilePath,n=t?(0,s.join)(k,t):void 0,r=!$n.has(e.finalOutFile),i=!!n&&!er.has(n);r&&$n.add(e.finalOutFile),i&&n&&er.add(n);let a=performance.now();try{if(r){let t=!1;if(gn)try{let n=await c.default.readFile(e.cachedHtmlFile,`utf-8`),r=n.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1];r&&r!==gn&&(await c.default.ensureDir((0,s.dirname)(e.finalOutFile)),await c.default.writeFile(e.finalOutFile,n.split(r).join(gn)),t=!0)}catch{t=!1}t||tr.push({source:e.cachedHtmlFile,destination:e.finalOutFile})}n&&t&&c.default.existsSync(e.cachedLoaderFile)&&(i&&tr.push({source:e.cachedLoaderFile,destination:n}),Sn[pt(e.path,g)]=t,Cn++),Zn++,Wn++,Bn+=performance.now()-a}catch(t){throw r&&$n.delete(e.finalOutFile),i&&n&&er.delete(n),Error(`Error on cached page: ${e.path}\n${t instanceof Error?t.stack??t.message:String(t)}`)}},prepareRoute:e=>{!Zt&&Qt===`remix`&&En&&ar.set(e.path,En(e.fetchUrl))},ensurePool:cn,getPool:()=>Y,getWorkerCount:()=>Pe(Y)?.totalWorkers??0,onWorkerFailure:async(e,t,n,a)=>{if(!qt)throw Error(`Error on page: ${e}\n${String(n)}`);(0,i.warn)(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),Yn=!0;try{await sn()}catch{}Y=null,an=!0;let o=await qt.render(e);return{path:e,appHTML:o.appHTML,metaAttributes:o.metaAttributes,bodyAttributes:o.bodyAttributes,htmlAttributes:o.htmlAttributes,styleTag:o.styleTag,timings:o.timings,routerContext:r.n(o.routerContext)}},onWorkerResult:async(e,t,n,r)=>{Vn+=Math.max(0,r-(n.timings?.totalMs??0)),Hn++,n.timings&&(An.push(Math.round(n.timings.totalMs)),qn(n.timings));let i=Kt;if(!i)throw Error(`SSR context is unavailable for ${e}`);let a={...i,routePath:e},o=performance.now(),s=await _t?.(e,Z,a)||Z;Fn+=performance.now()-o;let c=n.routerContext?.loaderData?n.routerContext.loaderData:null;await xn.add(()=>sr(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,c,a,Yt,J,Xt,Zt,Qt??`remix`,s))},scheduleMainThread:(e,t)=>{lr.push(yn.add(async()=>{try{let n=Kt;if(!n)throw Error(`SSR context is unavailable for ${e}`);let i={...n,routePath:e},a=performance.now(),o=await _t?.(e,Z,i)||Z;Fn+=performance.now()-a;let s=performance.now(),c=qt;if(!c)throw Error(`SSR adapter is unavailable for ${e}`);let{appHTML:l,bodyAttributes:u,htmlAttributes:d,metaAttributes:f,styleTag:p,routerContext:m,timings:h}=await c.render(e);An.push(Math.round(performance.now()-s)),qn(h);let g=m?.loaderData;await sr(t,l,f,u,d,p,r.n(m),g||null,i,Yt,J,Xt,Zt,Qt??`remix`,o)}catch(t){throw Error(`Error on page: ${e}\n${t instanceof Error?t.stack??t.message:String(t)}`)}}))},drainFinalizers:()=>xn.onIdle(),drainMainThread:async()=>{await Promise.all(lr),await yn.onIdle()},drainWrites:()=>nr.flush(),cleanupAfterFailure:async()=>{try{c.default.existsSync(k)&&await c.default.remove(k)}catch{}},destroyPool:sn,onNoRenderer:e=>{(0,i.warn)(`[ssg] No SSR context available for ${e}, skipping`)}}),Kn+=performance.now()-cr;let ur=performance.now();for(let e of H){if(W)continue;let t=Dn.get(e);if(!t||!c.default.existsSync(t.cachedHtmlFile))continue;$n.has(t.finalOutFile)||tr.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=ir[t.normalizedKey];if(!n?.loaderDataFilePath||!c.default.existsSync(t.cachedLoaderFile))continue;let r=(0,s.join)(k,n.loaderDataFilePath);er.has(r)||tr.push({source:t.cachedLoaderFile,destination:r})}await fe(tr);let dr=Math.round(performance.now()-ur);Gn+=dr;let fr=Xn+Zn,pr=(Qn/1024/1024).toFixed(2),mr=0;if(!W){try{let e=JSON.stringify(ir)!==rr;e&&await xe(V,ir),mr=await vt(B,ir,H,e)}catch{}if(On)try{await ae(On,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let hr=performance.now()-Rt,gr=Pe(nn),_r={renderedCount:Xn,cachedCount:Zn,renderedSize:Qn,totalPages:fr,prunedCount:mr,clientBuildMs:Math.round(_),serverBuildMs:Math.round(le),ssrImportMs:Math.round(y),workerPoolSetupMs:Math.round(Jn),workerUsed:gr!==null&&!Yn,workerCount:gr?.totalWorkers??0,fallbackMainThread:Yn,ssrP50Ms:$(An,50),ssrP95Ms:$(An,95),ssrP99Ms:$(An,99),crittersP50Ms:$(Mn,50),crittersP95Ms:$(Mn,95),writeP50Ms:$(Nn,50),writeP95Ms:$(Nn,95),routerTimingCount:Q.count,routerMatchAvgMs:Q.count>0?Q.matchMs/Q.count:0,routerResolveAvgMs:Q.count>0?Q.resolveMs/Q.count:0,routerLoadersAvgMs:Q.count>0?Q.loadersMs/Q.count:0,routerRenderAvgMs:Q.count>0?Q.renderMs/Q.count:0,routerHelmetAvgMs:Q.count>0?Q.helmetMs/Q.count:0,routerTotalAvgMs:Q.count>0?Q.totalMs/Q.count:0,pagesPerSecond:fr>0&&hr>0?Math.round(fr/(hr/1e3)*10)/10:0,pipeline:{renderedPageCount:Un,cachedPageCount:Wn,clientBuildMs:Math.round(_),serverBuildMs:Math.round(le),ssrImportMs:Math.round(y),workerPoolSetupMs:Math.round(Jn),routePreparationMs:Math.round(tn),workerTransportMs:Math.round(Vn),workerRoundTripMs:Math.round(Vn),workerTransportAvgMs:Hn>0?Math.round(Vn/Hn):0,finalizeP50Ms:$(jn,50),finalizeP95Ms:$(jn,95),assetCollectionMs:Math.round(Pn),beforeHookMs:Math.round(Fn),htmlAssemblyMs:Math.round(In),onPageRenderedHookMs:Math.round(Ln),criticalCssP50Ms:$(Mn,50),criticalCssP95Ms:$(Mn,95),cacheWriteMs:Math.round(0+nr.writeTimeMs()),cachedOutputMs:Math.round(Bn),renderQueueDrainMs:Math.round(Kn),renderPipelineSettleMs:Math.round(Kn),outputLinkMs:Math.round(Gn)}};S?.({name:`Render pages`,duration:hr,success:!0,details:`${fr} pages (${Xn} new, ${Zn} cached, ${pr} MB)`,metrics:_r}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(hr),success:!0,details:`${fr} pages / ${Xn} new / ${Zn} cached / ${pr} MB`,metrics:_r})}`);let vr=performance.now(),yr=ut(Sn);if(await be((0,s.join)(k,`static-loader-data-manifest-${N}.json`),yr),await Ze((0,s.join)(A,`ssr`),5,W?`turbo-ssr`:(0,s.basename)(P)),Pt(),X?.dispose)try{await X.dispose()}catch{}let br=et.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;br&&!br.disabled&&br.generateSW&&await br.generateSW();let xr=Math.round(performance.now()-ne);S?.({name:`Static loader data`,duration:performance.now()-vr,success:!0,details:`${Cn} loader data files`,metrics:{loaderDataFileCount:Cn}}),await b?.(h),await yt(k);let Sr=ve(k),Cr=await we(k,xr,A,{outputFiles:Sr,manifestPath:(0,s.join)(De,`dist`,...lt,`manifest.json`)});Te(k,Cr),S?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(xr/1e3).toFixed(1)}s, JS: ${(Cr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(Cr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:xr,totalPages:Cr.pages.length,jsSize:Cr.totalJSBundleSize,cssSize:Cr.totalCSSBundleSize}});let wr=new Set(Sr),Tr=(Ue?.extraFiles??[]).filter(e=>!wr.has(e)&&!q.clientFiles.includes(e)&&c.default.existsSync((0,s.join)(k,e)));await E((0,s.join)(A,`ssg-output.json`),Oe,k,_e(H,ir,Ct).concat(`static-loader-data-manifest-${N}.json`).concat(`page-source.json`),q.clientFiles,Sr,Tr)}async function vt(e,t,n=[],r=!1){try{if(!c.default.existsSync(e))return 0;let i=(0,s.join)(e,`.prune-state`);if(!r)try{let e=await c.default.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await c.default.readdir(e),o=new Set,l=new Set([...Object.keys(t),...n]);for(let e of l){let t=u.default.createHash(`md5`).update(e).digest(`hex`);o.add(`${t}.html`),o.add(`${t}.json`)}let d=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!o.has(t)&&(await c.default.remove((0,s.join)(e,t)),d++);return await c.default.writeFile(i,String(Date.now()),`utf8`),d}catch{return 0}}async function yt(e){try{lt.length>0?await c.default.remove((0,s.join)(e,...lt)):await Promise.all([c.default.remove((0,s.join)(e,`manifest.json`)),c.default.remove((0,s.join)(e,`ssr-manifest.json`))])}catch{}}function bt(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function xt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return(0,i.error)(`Error formatting html: ${t instanceof Error?t.message:String(t)}`),e}return e}function St(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function Ct({template:e,ssrEntry:n,onBeforePageRender:r,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(c){let u=async(u,d)=>{try{let i=u.originalUrl??u.url??`/`,f=await c.ssrLoadModule(n),p=f.createRoot,m=await p(!1,i),h=t.t(m,f),{app:g,base:ee}=m,[te=`/`,ne=``]=i.split(`?`),re=new URLSearchParams(ne);if(!g&&re.has(`_data`))return h.handleLoader(u,d);let ie=await c.transformIndexHtml(i,e),ae=await r?.(i,ie,m)||ie,{appHTML:oe,bodyAttributes:_,htmlAttributes:se,metaAttributes:v,styleTag:ue}=await h.render(t.i(te,ee));ue&&v.push(ue);let y=await Promise.all([n,a].map(async e=>await c.moduleGraph.getModuleByUrl(e))),b=new Set,de=new Set,x=async e=>{if(!e?.ssrTransformResult||de.has(e))return;de.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))b.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await c.moduleGraph.getModuleByUrl(e);t&&await x(t)}};await Promise.all(y.map(async e=>x(e)));let S=[...b].map(e=>le(t.n(c.config.base,e)));v.push(...S);let C=await ce({rootContainerId:o,appHTML:oe,indexHTML:ae,metaAttributes:v,bodyAttributes:_,htmlAttributes:se,initialState:null}),w=await s?.(i,C,m)||C;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,l.send)(u,d,w,`html`,{headers:`pluginContainer`in c?c.config.server.headers:c.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));c.ssrFixStacktrace(t),(0,i.error)(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return c.middlewares.use(St),()=>{c.middlewares.use(u)}}}}async function wt(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),o,c,u,d;if(r){o=e.root||a,c={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=c,n=c.entry||await v(o,t);u=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:(0,s.join)(o,n),d=await f.default.readFile((0,s.join)(o,t),`utf-8`)}else{let t=await(0,l.resolveConfig)(e,`serve`,n,n);o=t.root||a,c={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=c,p=c.entry||await v(o,r),[m,h]=await Promise.all([x(t,p),f.default.readFile((0,s.join)(o,r),`utf-8`)]);u=m,d=h}let{onBeforePageRender:p,onPageRendered:m,rootContainerId:h=`root`,mock:g=!1}=c;if(process.env.__DEV_MODE_SSR=`true`,g){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-9nTqUjri.cjs`));e()}return await(0,l.createServer)({...e,plugins:[...e.plugins??[],Ct({template:d,ssrEntry:u,onBeforePageRender:p,onPageRendered:m,entry:c.entry||`src/main.ts`,rootContainerId:h})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function U(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await wt(t,e);return await r.listen(),Tt(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,i.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Tt(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${i.colors.bold(`${e}ms`)}`}n(`\n ${i.colors.cyan(` VITE-REACT-SSG v${b} `)}`,{clear:!e.config.logger.hasWarned}),n(`${i.colors.cyan(`\n VITE v${l.version}`)+i.colors.dim(r)}\n`),n(i.colors.green(` dev server running at:`)),e.printUrls()}var Et=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};exports.ShellStitcher=Et,exports.build=_t,exports.createServer=wt,exports.dev=U;
package/dist/node.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { u as ViteReactSSGOptions } from "./types-ClSMhb8G.cjs";
1
+ import { u as ViteReactSSGOptions } from "./types-BsuhlEJb.cjs";
2
2
  import { InlineConfig, ViteDevServer } from "vite";
3
3
 
4
4
  //#region src/node/build.d.ts
package/dist/node.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { u as ViteReactSSGOptions } from "./types-CipD5Jrk.mjs";
1
+ import { u as ViteReactSSGOptions } from "./types-C01Mn1_E.mjs";
2
2
  import { InlineConfig, ViteDevServer } from "vite";
3
3
 
4
4
  //#region src/node/build.d.ts
package/dist/node.mjs CHANGED
@@ -1,3 +1,2 @@
1
- import{n as e}from"./rolldown-runtime-C-zNXMYg.mjs";import{a as t,i as n,n as r,o as i,r as a,t as o}from"./router-adapter-CJuW_Xmp.mjs";import{i as s,r as c,t as l}from"./critical-CRZJx8-f.mjs";import{n as u,t as d}from"./ssg-worker-payload-CWmidVcz.mjs";import{createRequire as f}from"node:module";import{colors as p,error as m,warn as h}from"@bdocs/dui";import ee from"node:os";import g,{basename as te,dirname as _,isAbsolute as v,join as y,relative as b,resolve as x,sep as S}from"node:path";import C from"fs-extra";import{build as w,createLogger as ne,createServer as re,mergeConfig as T,resolveConfig as ie,send as E,version as D}from"vite";import O,{createHash as k}from"node:crypto";import A,{readFile as ae}from"node:fs/promises";import j from"node:fs";const M=/import\("([^)]+)"\)/g;function N(e,t){let n=new Set;if(!t)return n;for(let r of t)P(e,r,n);return n}function P(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{P(e,t,n)}),n):n}function F(e,t,n,r){let i=e?.map(e=>e.route.entry).filter(Boolean)??[],a=new Set;e?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(M);for(let e of n)a.add(e[1].split(`/`).at(-1)??``)});let o=new Set(i);for(let e of a){let t=n.find(([t,n])=>n.file.endsWith(e));t&&o.add(t[0])}let s=new Set;for(let e of o){let n=r.get(e);if(!n){let i=N(t.manifest,new Set([e]));n=new Set;for(let e of i)for(let r of t.ssrManifest[e]||[])n.add(r);r.set(e,n)}for(let e of n)s.add(e)}return s}function oe(e){let t=Object.entries(e.serverManifest),n=new Map,r=new Map;return i=>{let a=r.get(i);if(a)return a;let o=Promise.resolve().then(()=>{let r=F(e.matchRouteBranchWithParams([...e.routes],i,e.base),e,t,n);return new Set(r)});return r.set(i,o),o.catch(()=>{r.get(i)===o&&r.delete(i)}),o}}function se(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return O.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function I(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function ce(e,t){let n=new Set(I(e)),r=I(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
- `):null}var le=class{constructor(e={}){this.entries=new Map,this.cacheDir=e.cacheDir,this.maxEntries=e.maxEntries??1024}getOrCreate(e,t,n={}){let r=this.entries.get(e);if(r)return r.promise;let i=n.engine??`zig-critters`,a={promise:Promise.resolve(null),settled:!1},o=Promise.resolve().then(async()=>{if(this.cacheDir){let t=await this.readDisk(e,i);if(t!==void 0)return t}return t()}).then(t=>(this.cacheDir&&this.writeDisk(e,i,t).catch(()=>{}),t)).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{a.settled=!0,this.evictSettledEntries()});return a.promise=o,this.entries.set(e,a),this.evictSettledEntries(),o}get size(){return this.entries.size}diskPath(e){return y(this.cacheDir,`critical-css-${e}.json`)}async readDisk(e,t){try{let n=await C.readFile(this.diskPath(e),`utf-8`),r=JSON.parse(n);if(r?.v!==2||r?.engine!==t||!(r.style===null||typeof r.style==`string`))return;let i=new Date;return C.utimes(this.diskPath(e),i,i).catch(()=>{}),r.style}catch{return}}async writeDisk(e,t,n){if(!this.cacheDir||n!==null&&n.length>262144)return;let r={v:2,engine:t,style:n};await C.ensureDir(this.cacheDir),await C.writeFile(this.diskPath(e),JSON.stringify(r),`utf-8`)}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};async function ue(e,t={}){let n=t.maxAgeMs??720*60*60*1e3,r=t.maxEntries??5e3;try{if(!C.existsSync(e))return 0;let t=Date.now()-n,i=[];for(let n of await C.readdir(e)){if(!n.startsWith(`critical-css-`)||!n.endsWith(`.json`))continue;let r=y(e,n);try{let e=await C.stat(r),a=Math.max(e.mtimeMs,e.atimeMs);a<t?(await C.remove(r),i.push({file:n,usedAt:0})):i.push({file:n,usedAt:a})}catch{}}let a=i.filter(e=>e.usedAt===0).length;if(i.length>r){let t=i.filter(e=>e.usedAt>0).sort((e,t)=>t.usedAt-e.usedAt);for(let n of t.slice(r))try{await C.remove(y(e,n.file)),a++}catch{}}return a}catch{return 0}}const L=new Set([`.js`,`.mjs`,`.css`]);function R(e){let t=g.extname(e).toLowerCase();return L.has(t)}function de(e){let t=new Map,n=new Map;for(let r of Object.values(e))t.set(r.file,r),r.src&&n.set(r.src,r);return{byFile:t,bySrc:n}}function z(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])R(t)&&z(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])R(t)&&!n.has(t)&&z(e,t,n)}}async function fe(e,t,n){if(n){let e=O.createHash(`md5`);for(let r of t){let t=n.get(r);t&&e.update(t)}return e.digest(`hex`)}let r=new Map;await Promise.all(t.map(async t=>{try{let n=await ae(g.join(e,t));r.set(t,n)}catch{}}));let i=O.createHash(`md5`);for(let e of Array.from(r.keys()).sort()){let t=r.get(e);t&&i.update(t)}return i.digest(`hex`)}async function pe(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:o,clientHash:s,assetHashes:c,chunkPackMaps:l}=e,u=n;if(!u){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);u=de(r)}let{byFile:d,bySrc:f}=u,p=g.relative(o,a).replace(/\\/g,`/`),m=new Set,h=f.get(p);if(h)z(d,h.file,m);else if(l){let e=g.isAbsolute(a)?a:g.resolve(o,a),t=l.chunkMap[a]??l.chunkMap[e]??l.chunkMap[`/${e}`];if(t!==void 0){for(let e of d.values())if((e.src||``).includes(`chunk-${t}.mjs`)||e.file.includes(`chunk-${t}`)){z(d,e.file,m);break}}}if(m.size===0){let e=[p,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)R(t)&&z(d,t,m)}}if(m.size===0){if(!s)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return s}return fe(t,Array.from(m).sort(),c)}const me=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function B(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function he({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${me}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return B(B(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function ge({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${me}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return B(B(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return B(B(p,`html`,a),`body`,i)}async function _e(e,t=`index.html`){let[,n]=[...(await C.readFile(y(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function V(e){return`<link rel="stylesheet" href="${e}">`}function ve(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=ye(e);r&&n.push(r)}}),n.join(``)}function ye(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var be=`0.4.3`;async function xe(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&U(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function Se(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:y(e.root,t))}const H=/[:*?]/;function U(e){return e?H.test(e):!1}async function Ce(e,t){if(e!==t){await C.ensureDir(_(t)),await C.remove(t);try{await C.link(e,t)}catch{await C.copy(e,t)}}}async function we(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(Ce(r.source,r.destination)));await Promise.all(n)}function Te({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=0,l=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),c+=performance.now()-t}),s};return{enqueue(e,t){let u=Buffer.byteLength(t,`utf8`);return u>i?(s=l().then(async()=>{let r=performance.now();await n(e,t),c+=performance.now()-r}),s):(a.push({filePath:e,content:t}),o+=u,a.length>=r||o>=i?l():Promise.resolve())},flush:l,pendingCount(){return a.length},writeTimeMs(){return c}}}function Ee(e,t,n,r=[],i=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort(),extraFiles:[...new Set(i)].sort()}}function De(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,s=[...new Set(r)].sort(),c=[...new Set(i)].sort(),l=[...new Set(a)].sort();if(!o(e.clientFiles,s)||!o(e.pageFiles,c)||!o(e.auxiliaryFiles||[],l))return!1;let u=[...new Set(e.extraFiles??[])].sort();if(!u.every(e=>C.existsSync(`${n}/${e}`)))return!1;let d=[...s,...c,...l];return o(Me(n),[...new Set([...d,...u])].sort())?d.every(e=>C.existsSync(`${n}/${e}`)):!1}function Oe(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function ke(e){try{let t=await C.readJson(e);if(!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`))return;let n=Array.isArray(t.extraFiles)?t.extraFiles.filter(e=>typeof e==`string`):[];return Ee(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles,n)}catch{return}}async function Ae(e,t,n,r,i=[],a,o=[]){let s=a||Me(n),c=new Set(r),l=new Set(i),u=new Set(o);return Fe(e,Ee(t,i.length>0?[...l]:s.filter(e=>!c.has(e)),r,i.length>0?s.filter(e=>!c.has(e)&&!l.has(e)&&!u.has(e)):[],o))}function je(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[W(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function Me(e){let t=[],n=r=>{let i;try{i=C.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push(b(e,i).split(S).join(`/`))}};return n(e),t.sort()}function W(e){return!e||e===`/`?``:t(e).replace(/\/+$/,``)}function Ne(e,t){let n=new Set(t.map(W)),r={};for(let[t,i]of Object.entries(e)){let e=W(t);n.has(e)&&(r[e]=i)}return r}async function Pe(e,t){try{if(await C.readFile(e,`utf8`)===t)return!1}catch{}return await C.ensureDir(_(e)),await C.writeFile(e,t,`utf8`),!0}async function Fe(e,t,n=2){try{let n=await C.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await C.ensureDir(_(e)),await C.writeJson(e,t,{spaces:n}),!0}const Ie=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),G=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function K(e){try{return j.statSync(e).size}catch{return 0}}const Le=`boltdocs-metrics.json`;function Re(e){if(!e)return null;try{let t=y(e,Le);return j.existsSync(t)?JSON.parse(j.readFileSync(t,`utf-8`)):null}catch{return null}}function ze(e,t){try{let n=g.resolve(e,`..`,`reports`);j.existsSync(n)||j.mkdirSync(n,{recursive:!0}),j.writeFileSync(y(e,Le),JSON.stringify(t))}catch{}}async function Be(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=Re(n);if(e)return e.buildTime=t,e}let i=y(e,`.vite`),a=y(e,`assets`),o={},s=r.manifestPath||y(i,`manifest.json`);j.existsSync(s)&&(o=JSON.parse(await j.readFileSync(s,`utf-8`)));let c=0,l=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=K(y(e,n));c+=i;for(let t of r)l+=K(y(e,t))}let u=0,d=0;if(j.existsSync(a)){let e=j.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=g.extname(t.name).toLowerCase(),n=y(a,t.name);Ie.has(e)?u+=K(n):G.has(e)&&d++}}let f=y(e,`index.html`),p=0,m=[];if(j.existsSync(f)){let e=K(f);p+=e,m.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let h=r.outputFiles?[...r.outputFiles]:(()=>{try{return j.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of h){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=K(y(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);p+=n,m.push({route:e,htmlSize:n,htmlFile:t})}}let ee={buildTime:t,totalJSBundleSize:c,totalCSSBundleSize:l,totalImagesSize:u,totalHTMLSize:p,fontCount:d,pages:m};return n&&ze(n,ee),ee}function Ve(e,t){let n=g.resolve(e,`..`,`.boltdocs`,`reports`);j.existsSync(n)||j.mkdirSync(n,{recursive:!0});let r=y(n,`performance.json`);j.writeFileSync(r,JSON.stringify(t,null,2))}const q=new Set([`node_modules`,`dist`,`coverage`]);function He(e,t){return b(e,t).replace(/\\/g,`/`)}function Ue(e,t,n){try{let r=C.readFileSync(t),i=new Uint8Array(r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)),a=k(`sha1`).update(i).digest(`hex`);n.update(`${He(e,t)}\0${a}\0`)}catch{}}function J(e,t,n){let r;try{r=C.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`)||q.has(i))continue;let r=y(e,i),a;try{a=C.statSync(r)}catch{continue}a.isDirectory()?J(r,t,n):a.isFile()&&Ue(t,r,n)}}function We(e,t){let n=f(import.meta.url);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=y(_(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);C.existsSync(i)&&J(i,e,t)}catch{}}const Ge=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`];function Ke(e,t){for(let n of Ge){let r=y(e,n);C.existsSync(r)&&Ue(e,r,t)}}function qe(e,t,n){try{C.removeSync(y(n,`hash-merkle.json`))}catch{}try{let n=k(`sha256`);We(e,n);let r=y(e,t);C.existsSync(r)&&J(r,e,n);let i=y(e,`src`);return C.existsSync(i)&&J(i,e,n),Ke(e,n),n.update(`v4\0`),n.digest(`hex`)}catch(e){return h(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),k(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Je(e){return O.createHash(`md5`).update(e).digest(`hex`)}function Ye(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Xe(e){if(e)try{let t=await C.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function Ze(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await C.ensureDir(_(e)),await C.writeJson(n,{version:1,files:t},{spaces:0}),await C.move(n,e,{overwrite:!0})}catch{await C.remove(n).catch(()=>{})}}async function Qe(e,t,n){let r=await Xe(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=y(e,t);try{let e=await C.stat(n);if(!e.isFile())return;let o=r?.files[t];if(Ye(o,e)){i.set(t,o.hash),a[t]=o;return}let s=Je(await C.readFile(n));i.set(t,s),a[t]={hash:s,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await Ze(n,a),i}function $e(e){let t=O.createHash(`sha1`);return t.update(`v4`),t.update(`\0`),t.update(C.readFileSync(e)),t.digest(`hex`)}function et(e,t){if(e)try{return $e(e)}catch{}return t}function tt(e,t){try{return $e(e)}catch{return t}}function nt({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let o=O.createHash(`md5`).update(e).digest(`hex`);return!(!C.existsSync(y(i,`${o}.html`))||t.loaderDataFilePath&&!C.existsSync(y(i,`${o}.json`)))}function rt(e){return e===null?null:e.poolMetrics()}function it(e,t){return v(t)?t:y(e,t)}function at(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=W(r);n[t]=it(e,i)}return Object.freeze(n)}function ot(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:at(e.root,e.routeToSourceFileMap)})}function st(e,t,n={}){let r=at(e,n),i=t.map(t=>{let i=W(t.path),a=n[t.path],o=a?it(e,a):r[i]||t.componentPath;return{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function ct(e,t){return Object.freeze({...e,routeManifest:t})}const lt=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],ut=[`react`,`react-dom`];function dt(e){return Number.parseInt(D,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function ft(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function pt(e,t){let n=[],r=i=>{let a;try{a=C.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=y(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=b(e,a).split(S).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function Y(e){return e.map(e=>{if(Array.isArray(e))return Y(e);if(e&&typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||typeof t==`string`&&t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return null}return e}).filter(Boolean)}async function mt(e){let t=[],n=async r=>{let i;try{i=await C.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=y(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push(b(e,i).split(S).join(`/`))}};return await n(e),t.sort()}async function ht(e){try{let t=await C.readFile(e);return k(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function gt(e,t){if(!t||v(t))return;let n=x(e),r=x(n,t),i=b(n,r);if(!(!i||i===`..`||i.startsWith(`..${S}`)||v(i)))return r}async function _t(e,t){let n=y(x(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await C.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&C.existsSync(e)?await mt(e):[],a={};for(let t of i){let n=await ht(y(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=gt(t,e);r&&await ht(r)===n&&await C.remove(r)}e&&C.existsSync(e)&&(await C.ensureDir(t),await C.copy(e,t,{overwrite:!0,errorOnExist:!1})),await C.ensureDir(x(t,`..`)),await C.writeJson(n,{version:1,files:a})}function vt(e){return T(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...dt({input:{app:y(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir(v(t.build.outDir||``)?t.build.outDir||`dist`:x(e.root,t.build.outDir||`dist`))}}]})}function yt(e){return T(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...dt({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...lt],external:[...ut]},plugins:[...Y(e.viteConfig.plugins||[]),ft()]})}async function bt(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,o=[],s=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),C.existsSync(e.outDir)&&await C.remove(e.outDir);let t=y(e.clientCacheDir,`dist`);await _t(e.viteConfig.publicDir,t),X(t,e.outDir),o=pt(y(e.clientCacheDir,`dist`),e.htmlEntry)}else{await w(vt({...e,onResolvedOutputDir:e=>{n=e}}));let c=performance.now()-s;e.onStep?.({name:`Client build`,duration:c,success:!0,details:`Vite production build`}),i=t(),a=i,r=y(e.finalCacheDir,`client-cache`,i);let l=y(r,`client-hash.txt`);await C.ensureDir(r);let u=y(r,`dist`);C.existsSync(u)&&await C.remove(u),await C.copy(n,u,{overwrite:!0,errorOnExist:!1}),await _t(e.viteConfig.publicDir,u),o=pt(u,e.htmlEntry),await C.writeFile(l,i,`utf-8`),await wt(y(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-s,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:o}}async function xt(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};C.existsSync(e.ssgOut)&&await C.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await w(yt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function St(e,t){if(!t||v(t))return;let n=x(e,t),r=b(x(e),n);if(!(r===`..`||r.startsWith(`..${S}`)||v(r)))try{let t=C.realpathSync(e),r=C.realpathSync(n),i=b(t,r);return i===`..`||i.startsWith(`..${S}`)||v(i)||!C.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function Ct(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function X(e,t){let n=C.readdirSync(e,{withFileTypes:!0});C.mkdirSync(t,{recursive:!0});for(let r of n){let n=y(e,r.name),i=y(t,r.name);if(r.isDirectory())X(n,i);else if(r.isFile())try{C.linkSync(n,i)}catch{C.copyFileSync(n,i)}}}async function wt(e,t=5,n){try{if(!C.existsSync(e))return;let r=await C.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=y(e,t.name),r=await C.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await C.remove(y(e,t.name))}catch{}}function Tt(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function Et(e,t){return t===`nested`?y(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function Dt(e){return Object.freeze(e)}function Ot(e){let t=new Map;for(let n of e.routes){let r=O.createHash(`md5`).update(n).digest(`hex`),o=W(n),s=e.routeToSourceFileMap[o]||e.routeToSourceFileMap[n],c=s?e.sourceMeta.get(s):void 0;t.set(n,Dt({path:n,pathHash:r,cachedHtmlFile:y(e.ssgPagesDir,`${r}.html`),cachedLoaderFile:y(e.ssgPagesDir,`${r}.json`),finalOutFile:y(e.outDir,Et(n,e.dirStyle)),normalizedKey:o,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[n]??e.fallbackHash,fetchUrl:`${i(e.contextBase)}${a(n)}`}))}return t}function kt(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function At(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function jt(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function Mt(e,t){return e>4&&!t}function Nt(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function Pt(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function Ft(e){let t=[],n=new Set,r=e.getPool(),i=jt(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},l=e=>{let r;r=At(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(Mt(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=jt(e.getWorkerCount?.()??0))),r?.renderBatch){let t=[];for(let n of e.routes){let r=e.getPlan(n);await e.isCached(r)?(await e.onCacheHit(r),o++):(await e.prepareRoute?.(r),t.push({path:n,plan:r}))}let c=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let o=0;o<t.length;o+=c){let u=t.slice(o,o+c);if(!r){for(let{path:n,plan:r}of t.slice(o))e.scheduleMainThread(n,r),a++;break}s=!0;let d=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of u){let i=await e.onWorkerFailure(n,r,t,d);if(!Pt(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};l((async()=>{let t;try{t=await d.renderBatch(u.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==u.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<u.length;n++){let{path:r,plan:i}=u[n],o=t[n],s;if(s=Nt(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):Pt(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!Pt(s,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,s,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else for(let t of e.routes){let c=e.getPlan(t);if(await e.isCached(c)){await e.onCacheHit(c),o++;continue}if(await e.prepareRoute?.(c),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=jt(e.getWorkerCount?.()??0))),r){s=!0;let o=r,u=performance.now();l(o.render(t).catch(async n=>{let i=await e.onWorkerFailure(t,c,n,o);return r=e.getPool(),i}).then(async n=>{if(!Pt(n,t))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(t,c,n,performance.now()-u),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(t,c),a++}return await c(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const It=Number.parseInt(D)>=5?[`.vite`]:[];function Lt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function Rt(e,n){return`static-loader-data${t(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function zt(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function Bt(e){let t=new Set;for(let n of Object.values(e)){zt(n.file)&&t.add(n.file);for(let e of n.css||[])zt(e)&&t.add(e);for(let e of n.imports||[])zt(e)&&t.add(e);for(let e of n.dynamicImports||[])zt(e)&&t.add(e)}return[...t]}async function Vt(e,t,n){return Qe(e,Bt(t),n?y(n,`chunk-hashes.json`):void 0)}function Ht(e,n=`/`){let r=t(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Ut(e,t,n){let r=t?.[n];if(r)return v(r)?r:y(e,r)}function Wt(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,v(n)?b(e,n):n]))}function Gt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Kt(n={},r={}){let i=process.env.MODE||process.env.NODE_ENV||n.mode||`production`;i!==process.env.NODE_ENV&&(process.env.NODE_ENV=i);let a=process.cwd(),p=r.root||a,m=r.build?.outDir||`dist`,g=r.base||`/`,x=performance.now(),S=0,w=0,re=0,{onFinished:T,onStep:E,routeToSourceFileMap:D={},cacheDir:k=`.boltdocs/build`,htmlEntry:A=`index.html`,entry:ae=await _e(p,A)}=n,j=`docs`,M=Object.values(D);if(M.length>0){let e=M[0],t=b(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(j=t[0])}let N=v(m)?m:y(p,m),P=v(k)?k:y(p,k),F=qe(p,j,P),I=ot({root:p,outDir:N,cacheDir:P,base:g,mode:i,entry:ae,htmlEntry:A,docsDirName:j,clientHash:F,routeToSourceFileMap:D}),L=I.clientHash.substring(0,12),R=y(I.cacheDir,`ssr`,L),z=y(I.cacheDir,`client-cache`,I.clientHash),fe=z,B=F,V=F,ye=``;try{let{getZigCritters:e}=await import(`./critical-CRZJx8-f.mjs`).then(e=>e.n),t=await e();if(t){let e=await t.getEngineIdentity();e&&e!==`unknown`&&(ye=e.slice(0,16))}}catch{}ye&&(V=`${F}-${ye}`);let be=y(z,`client-hash.txt`),H=!1;try{C.existsSync(be)&&C.existsSync(y(z,`dist`))&&(H=(await C.readFile(be,`utf-8`)).trim()===F)}catch{}let U={server:``,css:``},Ce=()=>{let e=``,t=``;try{let t=[],n=(e,r)=>{let i;try{i=C.readdirSync(e,{withFileTypes:!0})}catch{return}for(let a of i){let i=r?`${r}/${a.name}`:a.name;i!==`.vite`&&(i.startsWith(`.vite/`)||/^assets\/combined-.*\.js$/.test(i)||(a.isDirectory()?n(y(e,a.name),i):a.isFile()&&t.push(i)))}};if(n(R,``),t.length>0){t.sort();let n=O.createHash(`sha256`);for(let e of t){n.update(e),n.update(`\0`);let t=C.readFileSync(y(R,e));e===`combined.mjs`&&(t=Buffer.from(t.toString(`utf-8`).replace(/combined-[A-Za-z0-9_-]+\.js/g,`combined.js`))),n.update(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),n.update(`\0`)}e=n.digest(`hex`).slice(0,16)}}catch{}try{let e=H?y(z,`dist`,`assets`):y(N,`assets`);if(C.existsSync(e)){let n=C.readdirSync(e).filter(e=>e.endsWith(`.css`)).sort();if(n.length>0){let r=O.createHash(`sha256`);for(let t of n){r.update(t),r.update(`\0`);let n=C.readFileSync(y(e,t));r.update(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),r.update(`\0`)}t=r.digest(`hex`).slice(0,16)}}}catch{}return{server:e,css:t}},Ee=()=>{let e=F;ye&&(e=`${e}-${ye}`),(U.server||U.css)&&(e=`${e}-${U.server}-${U.css}`),V=e},Ie=!1;if(H){try{let e=(await C.readJson(y(P,`ssr-cache-index.json`)))[F];if(typeof e==`string`){let t=St(y(P,`ssr`),e);t&&(R=t)}}catch{}if(C.existsSync(R)){let e=Ce();U.server=e.server,U.css=e.css,(e.server||e.css)&&(Ee(),Ie=!0)}}let G=y(P,`ssg-pages`),K=y(P,`ssg-cache.json`),Le=y(P,`ssg-output.json`),Re=await ke(Le),ze=Re!==void 0;H&&(Oe(Re,Me(y(z,`dist`)),A)||(H=!1));let q=[],He=!1,Ue=(n.dirStyle||r.ssgOptions?.dirStyle)??`flat`;if(H&&ze&&Ue!==`nested`){let e=y(P,`routes-cache.json`);try{if(C.existsSync(e)&&C.existsSync(K)){let t=JSON.parse(C.readFileSync(e,`utf-8`)),n=Ne(JSON.parse(C.readFileSync(K,`utf-8`)),t.paths);if(t.dirStyle===Ue&&t.base===g){let e=t.paths.every(e=>{let r=W(e),i=n[r];return nt({routePath:e,cacheItem:i,sourceContentHash:et(D[r]||D[e]||Ut(p,t.sourceFiles,r)||Ut(p,t.sourceFiles,e),V),ssgPagesDir:G,requireAssetHash:!0})});t.paths.length>0&&e&&(q=t.paths,He=!0)}}}catch{}}if(He){let e=performance.now(),t={};try{C.existsSync(K)&&(t=Ne(JSON.parse(C.readFileSync(K,`utf-8`)),q))}catch{}let n=[...je(q,t,Ue===`nested`?`nested`:`flat`),`static-loader-data-manifest-${L}.json`,`page-source.json`],i=Me(y(z,`dist`)).filter(e=>e!==A),a=await ke(Le),o=(a?.auxiliaryFiles??[]).every(e=>C.existsSync(y(N,e)))&&De(a,F,N,i,n,a?.auxiliaryFiles??[]),s={};if(!o){C.existsSync(N)&&await C.remove(N);let e=y(z,`dist`);await _t(r.publicDir,e),await C.copy(e,N);let n=[];for(let e of q){let r=O.createHash(`md5`).update(e).digest(`hex`),i=y(G,`${r}.html`),a=y(G,`${r}.json`),o=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:y(N,o)}),C.existsSync(a)){let r=W(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:y(N,i.loaderDataFilePath)}),s[Ht(e,g)]=i.loaderDataFilePath)}}await we(n),await Pe(y(N,`static-loader-data-manifest-${L}.json`),Lt(s))}await qt(G,t,q);let c=Math.round(performance.now()-x);E?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),E?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),E?.({name:`Render pages`,duration:0,success:!0,details:`${q.length} pages (all cached)`}),E?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(c/1e3).toFixed(1)}s, all cached`});let l=Math.round(performance.now()-e),u={renderedPageCount:0,cachedPageCount:q.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:l,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:l};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${q.length} pages / 0 new / ${q.length} cached`,metrics:{renderedCount:0,cachedCount:q.length,renderedSize:0,totalPages:q.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:u}})}`),await T?.(m),await Jt(N),await Ae(y(P,`ssg-output.json`),F,N,n,i,void 0,a?.extraFiles??[]);return}let J=await ie(r,`build`,i,i),We=Object.assign({},J.ssgOptions||{},n),{script:Ge=`sync`,mock:Ke=!1,formatting:Je=`none`,includedRoutes:Ye=Gt,onBeforePageRender:Xe,onPageRendered:Ze,dirStyle:Qe=`flat`,includeAllRoutes:$e=!1,format:it=`esm`,concurrency:at=20,rootContainerId:lt=`root`,beastiesOptions:ut={},criticalCssMaxSize:dt}=We,ft=ut,pt=s(dt),Y=We.turbo??!1,mt=y(P,`ssr`),ht=y(P,`ssr-cache-index.json`);if(R=y(mt,Y?`turbo-ssr`:L),!Y&&H)try{let e=(await C.readJson(ht))[F];if(typeof e==`string`){let t=St(mt,e);t&&(R=t)}}catch{}let gt=Tt(ne(),Ct),vt=()=>{};if(Ke){let{jsdomGlobal:e}=await import(`./jsdomGlobal-FnVQDCiZ.mjs`);vt=e()}let yt={};try{if(C.existsSync(K)){let e=await C.readJson(K);yt=Ne(e,Object.keys(e))}}catch{}let X=!1;if(H)try{let e=y(P,`routes-cache.json`);if(C.existsSync(e)){let t=JSON.parse(C.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=W(e),r=yt[n];return nt({routePath:e,cacheItem:r,sourceContentHash:et(D[n]||D[e]||Ut(p,t.sourceFiles,n)||Ut(p,t.sourceFiles,e),V),ssgPagesDir:G,requireAssetHash:!0})})&&(q=t.paths,X=!0)}}catch{}let Et=X?``:await Se(J,ae),Dt=(Y||H)&&C.existsSync(R)&&C.readdirSync(R).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,At=null;if(!X&&Dt&&it===`esm`){let e=process.platform===`win32`?`file://`:``;try{let t=R,n=C.existsSync(t)?C.readdirSync(t).filter(e=>e.endsWith(`.mjs`)):[];n.length>0&&(At=import(e+y(t,n[0]).replace(/\\/g,`/`)).catch(()=>{}))}catch{}}let jt=performance.now(),[Mt,Nt]=await Promise.all([bt({viteConfig:r,resolvedMode:J.mode,root:p,htmlEntry:A,outDir:N,clientCacheDir:z,finalCacheDir:P,docsDirName:j,initialClientHash:F,canBypassClientBuild:H,customLogger:gt,onStep:E,shouldSuppressLog:Ct},()=>qe(p,j,P)),xt({viteConfig:r,resolvedMode:J.mode,entry:ae,ssrEntry:Et,ssgOut:R,format:it,canSkipSsrImport:X,serverBuildSkipped:Dt,customLogger:gt,onStep:E,shouldSuppressLog:Ct})]);if(m=Mt.outDir,fe=Mt.resolvedClientCacheDir,B=Mt.resolvedClientHash,V=Mt.pageContentFallbackHash,ye&&(V=`${V}-${ye}`),!Ie){let e=Ce();U.server=e.server,U.css=e.css,(e.server||e.css)&&Ee(),Ie=!0}if(L=B.substring(0,12),S=Mt.durationMs,w=Nt.durationMs,!Y)try{let e={};try{e=await C.readJson(ht)}catch{}e[B]=b(mt,R),await Fe(ht,e)}catch{}let Pt=it===`esm`&&process.platform===`win32`?`file://`:``,zt=it===`esm`?`.mjs`:`.cjs`;Et.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Bt=`combined`+zt;try{if(C.existsSync(R)){let e=C.readdirSync(R).filter(e=>e.endsWith(zt));e.length>0&&(Bt=e[0])}}catch{}let Kt=Pt+y(R,Bt).replace(/\\/g,`/`),Zt=Bt.replace(/\.[^/.]+$/,``),Qt=JSON.parse(await C.readFile(y(R,...It,`manifest.json`),`utf-8`)),$t=null,en=null,Z=[],tn,nn=`/`,rn,an=null,on,sn=Ye;if(!X){let t=e===void 0?f(import.meta.url):e,n=performance.now(),r=it===`esm`?await import(Kt):t(Kt);At&&await At.catch(()=>{}),re=performance.now()-n,tn=r.matchRouteBranchWithParams;let{createRoot:i,includedRoutes:a}=r;sn=a||Ye,$t=await i(!1);let s=$t;if(Z=s.routes,nn=s.base,rn=s.triggerOnSSRAppRendered,an=s.app,on=s.routerType,Z&&Z.length>0)for(let e of Z)e.path&&(e.filePath||e.entry)&&!D[e.path]&&(D[e.path]=e.filePath||e.entry);I=ct(I,st(p,Z,D)),en=o(s,r)}let cn=``,ln=0,un=null,dn=null,fn=null,pn=!1;async function mn(){if(fn){await fn;return}let e=dn;e&&(fn=e.destroy(),await fn)}if(!X){let e=performance.now(),{paths:t}=await xe(Z);q=$e?t:await sn(t,Z||[]),q=Gt(q,Z||[]),q=Array.from(new Set(q)),ln+=performance.now()-e;try{await Fe(y(P,`routes-cache.json`),{paths:q,dirStyle:Qe,base:g,sourceFiles:Wt(p,D)},0)}catch{}cn=y(R,Zt+zt)}async function hn(){if(un||pn||q.length<=4)return;pn=!0;let e=performance.now();try{cn=y(R,Zt+zt);let{SsgWorkerPool:t}=await import(`./ssg-worker-pool-DArhALXL.mjs`);un=new t({ssrEntryPath:cn,format:it===`esm`?`esm`:`cjs`}),dn=un,await un.ready(),ir=performance.now()-e}catch{ir=performance.now()-e,un=null}}let gn=We.criticalCss??`zig-critters`,_n,vn;gn===`zig-critters`?(_n=await l({concurrency:Math.max(1,Math.min(at,ee.cpus().length,8))}),_n||h("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):gn===`beasties`&&ft!==!1&&(vn=await c(m,{publicPath:g,...ft}));let yn=``,bn=``;if(_n){let e=`unknown`;try{e=await _n.getEngineIdentity()}catch{}let t=y(N,`assets`);if(C.existsSync(t)){let e=C.readdirSync(t).filter(e=>e.endsWith(`.css`));for(let n of e)yn+=C.readFileSync(y(t,n),`utf-8`)+`
3
- `}yn&&(bn=O.createHash(`sha256`).update(yn).update(`\0`).update(e).digest(`hex`))}let xn={},Sn={},Cn={},wn=null;if(X)for(let e of q){let t=W(e);Cn[e]=yt[t]?.assetHash||F}else{let[e,t]=await Promise.all([C.readFile(y(N,...It,`ssr-manifest.json`),`utf-8`),C.readFile(y(N,...It,`manifest.json`),`utf-8`)]);xn=JSON.parse(e),Sn=JSON.parse(t),wn=de(Sn);let n=await Vt(N,Sn,P),r;try{let e=y(p,`.boltdocs`,`compiled`,`pages-chunk-map.json`);C.existsSync(e)&&(r={chunkMap:JSON.parse(C.readFileSync(e,`utf-8`))})}catch{r=void 0}await Promise.all(Object.entries(D).map(async([e,t])=>{Cn[e]=await pe({outDir:N,indexes:wn,ssrManifest:xn,routeSourceFile:t,root:p,clientHash:F,assetHashes:n,chunkPackMaps:r}),U.server&&(Cn[e]=`${Cn[e]}-${U.server}`),U.css&&(Cn[e]=`${Cn[e]}-${U.css}`)}));for(let e of q)Cn[e]||(Cn[e]=V)}let Tn=await C.readFile(y(N,A),`utf-8`);C.rmSync(y(N,A)),Tn=Yt(Tn,Ge);let En=Tn.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],Dn=Xe?null:he({rootContainerId:lt,indexHTML:Tn}),On=(await import(`p-queue`)).default||await import(`p-queue`),kn=new On({concurrency:at}),An=new On({concurrency:Math.min(ee.cpus().length,4)}),jn=new On({concurrency:Math.max(2,Math.min(ee.cpus().length,8))}),Mn={},Nn=0,Pn=new Map,Fn=new Set;for(let e of q){let n=D[t(e).replace(/\/$/,``)]||D[e];n&&Fn.add(n)}for(let e of Fn)try{if(C.existsSync(e)){let t=C.statSync(e);Pn.set(e,{hash:tt(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let In=null;!X&&tn&&(In=oe({routes:[...Z],base:nn,matchRouteBranchWithParams:tn,serverManifest:Qt,manifest:Sn,ssrManifest:xn}));let Ln=Ot({routes:q,outDir:N,ssgPagesDir:G,dirStyle:Qe,contextBase:nn,fallbackHash:V,routeToSourceFileMap:D,sourceMeta:Pn,routeToAssetHash:Cn}),Rn=Y?void 0:y(P,`critical-css`),zn=new le({cacheDir:Rn}),Bn=[],Vn=[],Hn=[],Un=[],Wn=0,Gn=0,Kn=0,qn=0,Jn=0,Yn=0,Xn=0,Zn=0,Qn=0,$n=0,er=0,tr=0,nr=0,Q={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function rr(e){e&&(Q.count++,Q.matchMs+=e.matchMs,Q.resolveMs+=e.resolveMs,Q.loadersMs+=e.loadersMs,Q.renderMs+=e.renderMs,Q.helmetMs+=e.helmetMs,Q.totalMs+=e.totalMs)}let ir=0,ar=!1;function $(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let or=0,sr=0,cr=0,lr=new Set,ur=new Set,dr=[],fr=Te({writeFile:async(e,t)=>{await C.ensureDir(_(e)),await C.writeFile(e,t,`utf-8`)}}),pr=JSON.stringify(yt),mr=Ne(yt,q),hr=new Map,gr=new Set;gr.add(G);for(let e of q){let t=Qe===`nested`?y(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;gr.add(y(N,_(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;gr.add(y(N,`static-loader-data`,_(n)))}gr.add(y(N,`static-loader-data`)),await Promise.all([...gr].map(e=>C.ensureDir(e)));async function _r(e,t,n,r,i,a,o,s,c,l,u,f,p,m,ee){let te=performance.now(),{path:_,cachedHtmlFile:v,cachedLoaderFile:b,normalizedKey:x,sourceContentHash:S,sourceMtimeMs:w,fetchUrl:ne}=e,re;if(!p&&m===`remix`){if(!In)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();re=new Set(await(hr.get(_)||In(ne))),Wn+=performance.now()-e}else re=new Set;let T;if(s&&Object.keys(s).length>0){let e=Rt(_,L);T=e,Y&&await C.writeFile(y(N,e),JSON.stringify(s)),Mn[Ht(_,g)]=e,Nn++}await f?.(_,t,c);let ie=performance.now(),E=Dn&&ee===Tn?Dn({appHTML:t,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null}):await ge({rootContainerId:lt,appHTML:t,indexHTML:ee,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null});Kn+=performance.now()-ie;let D=p?``:ve(re),O=o?E.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):E;D&&(O=O.replace(`<head>`,`<head>${D}`));let k=performance.now();Jn++,Jn===1&&(Yn=k);let A=await Ze?.(_,O,c)||O;Jn--,Jn===0&&(qn+=performance.now()-Yn);let ae=``;if(s&&Object.keys(s).length>0){let e=JSON.stringify(s).replace(/</g,`\\u003c`);ae=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Ht(_,g)}': ${e} };`}let j=d(o),M=A,P=`<script>window.__VITE_REACT_SSG_HASH__ = '${L}';${ae}${j}<\/script>`,F=performance.now();if(M=M.replace(`<script>${me}<\/script>`,``),_n){if(yn){let e=se(M,bn,yn,`zig-critters`);try{let t=await zn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await _n.extractCriticalCss(M,yn,{maxSize:pt});return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&h(`[zig-critters] Critical CSS for "${_}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)},{engine:`zig-critters`});t&&!M.includes(`data-zig-critters`)&&(M=M.replace(`</head>`,`${t}</head>`))}catch(e){h(`[zig-critters] Failed to inline CSS for "${_}": ${e instanceof Error?e.message:String(e)}`)}}M=M.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(vn){let e=se(M,bn,yn,`beasties`),t=await zn.getOrCreate(e,async()=>{let e=await An.add(()=>vn.process(M));return ce(M,e)},{engine:`beasties`});t&&!M.includes(t)&&(M=M.replace(`</head>`,`${t}</head>`)),M=M.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let oe=P+(a||``);oe&&(M=M.replace(`<head>`,`<head>${oe}`));let I=Je===`none`?M:await Xt(M,Je);Hn.push(Math.round(performance.now()-F));let le=performance.now();Y?s&&Object.keys(s).length>0&&T&&await fr.enqueue(y(N,T),JSON.stringify(s)):(await fr.enqueue(v,I),s&&Object.keys(s).length>0&&T?(await fr.enqueue(b,JSON.stringify(s)),mr[x]={contentHash:S,mtime:w?Math.round(w):0,loaderDataFilePath:T,assetHash:e.routeAssetHash}):mr[x]={contentHash:S,mtime:w?Math.round(w):0,assetHash:e.routeAssetHash});let ue=performance.now()-le;Un.push(Math.round(ue)),Vn.push(Math.round(performance.now()-te)),or++,$n++,cr+=I.length}let vr=performance.now(),yr=[];await Ft({routes:q,canBypassClientBuild:H,getPlan:e=>kt(Ln,e),isCached:e=>{if(Y)return!1;try{return nt({routePath:e.path,cacheItem:yt[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:G})}catch{return!1}},onCacheHit:async e=>{let t=yt[e.normalizedKey]?.loaderDataFilePath,n=t?y(N,t):void 0,r=!lr.has(e.finalOutFile),i=!!n&&!ur.has(n);r&&lr.add(e.finalOutFile),i&&n&&ur.add(n);let a=performance.now();try{if(r){let t=!1;if(En)try{let n=await C.readFile(e.cachedHtmlFile,`utf-8`),r=n.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1];r&&r!==En&&(await C.ensureDir(_(e.finalOutFile)),await C.writeFile(e.finalOutFile,n.split(r).join(En)),t=!0)}catch{t=!1}t||dr.push({source:e.cachedHtmlFile,destination:e.finalOutFile})}n&&t&&C.existsSync(e.cachedLoaderFile)&&(i&&dr.push({source:e.cachedLoaderFile,destination:n}),Mn[Ht(e.path,g)]=t,Nn++),sr++,er++,Xn+=performance.now()-a}catch(t){throw r&&lr.delete(e.finalOutFile),i&&n&&ur.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!an&&on===`remix`&&In&&hr.set(e.path,In(e.fetchUrl))},ensurePool:hn,getPool:()=>un,getWorkerCount:()=>rt(un)?.totalWorkers??0,onWorkerFailure:async(e,t,n,r)=>{if(!en)throw Error(`Error on page: ${e}\n${String(n)}`);h(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),ar=!0;try{await mn()}catch{}un=null,pn=!0;let i=await en.render(e);return{path:e,appHTML:i.appHTML,metaAttributes:i.metaAttributes,bodyAttributes:i.bodyAttributes,htmlAttributes:i.htmlAttributes,styleTag:i.styleTag,timings:i.timings,routerContext:u(i.routerContext)}},onWorkerResult:async(e,t,n,r)=>{Zn+=Math.max(0,r-(n.timings?.totalMs??0)),Qn++,n.timings&&(Bn.push(Math.round(n.timings.totalMs)),rr(n.timings));let i={...$t,routePath:e},a=performance.now(),o=await Xe?.(e,Tn,i)||Tn;Gn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await jn.add(()=>_r(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,nn,Z,rn,an,on??`remix`,o))},scheduleMainThread:(e,t)=>{yr.push(kn.add(async()=>{try{let n={...$t,routePath:e},r=performance.now(),i=await Xe?.(e,Tn,n)||Tn;Gn+=performance.now()-r;let a=performance.now(),{appHTML:o,bodyAttributes:s,htmlAttributes:c,metaAttributes:l,styleTag:d,routerContext:f,timings:p}=await en.render(e);Bn.push(Math.round(performance.now()-a)),rr(p);let m=f?.loaderData;await _r(t,o,l,s,c,d,u(f),m||null,n,nn,Z,rn,an,on??`remix`,i)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>jn.onIdle(),drainMainThread:async()=>{await Promise.all(yr),await kn.onIdle()},drainWrites:()=>fr.flush(),cleanupAfterFailure:async()=>{try{C.existsSync(N)&&await C.remove(N)}catch{}},destroyPool:mn,onNoRenderer:e=>{h(`[ssg] No SSR context available for ${e}, skipping`)}}),nr+=performance.now()-vr;let br=performance.now();for(let e of q){if(Y)continue;let t=Ln.get(e);if(!t||!C.existsSync(t.cachedHtmlFile))continue;lr.has(t.finalOutFile)||dr.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=mr[t.normalizedKey];if(!n?.loaderDataFilePath||!C.existsSync(t.cachedLoaderFile))continue;let r=y(N,n.loaderDataFilePath);ur.has(r)||dr.push({source:t.cachedLoaderFile,destination:r})}await we(dr);let xr=Math.round(performance.now()-br);tr+=xr;let Sr=or+sr,Cr=(cr/1024/1024).toFixed(2),wr=0;if(!Y){try{let e=JSON.stringify(mr)!==pr;e&&await Fe(K,mr),wr=await qt(G,mr,q,e)}catch{}if(Rn)try{await ue(Rn,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let Tr=performance.now()-jt,Er=rt(dn),Dr={renderedCount:or,cachedCount:sr,renderedSize:cr,totalPages:Sr,prunedCount:wr,clientBuildMs:Math.round(S),serverBuildMs:Math.round(w),ssrImportMs:Math.round(re),workerPoolSetupMs:Math.round(ir),workerUsed:Er!==null&&!ar,workerCount:Er?.totalWorkers??0,fallbackMainThread:ar,ssrP50Ms:$(Bn,50),ssrP95Ms:$(Bn,95),ssrP99Ms:$(Bn,99),crittersP50Ms:$(Hn,50),crittersP95Ms:$(Hn,95),writeP50Ms:$(Un,50),writeP95Ms:$(Un,95),routerTimingCount:Q.count,routerMatchAvgMs:Q.count>0?Q.matchMs/Q.count:0,routerResolveAvgMs:Q.count>0?Q.resolveMs/Q.count:0,routerLoadersAvgMs:Q.count>0?Q.loadersMs/Q.count:0,routerRenderAvgMs:Q.count>0?Q.renderMs/Q.count:0,routerHelmetAvgMs:Q.count>0?Q.helmetMs/Q.count:0,routerTotalAvgMs:Q.count>0?Q.totalMs/Q.count:0,pagesPerSecond:Sr>0&&Tr>0?Math.round(Sr/(Tr/1e3)*10)/10:0,pipeline:{renderedPageCount:$n,cachedPageCount:er,clientBuildMs:Math.round(S),serverBuildMs:Math.round(w),ssrImportMs:Math.round(re),workerPoolSetupMs:Math.round(ir),routePreparationMs:Math.round(ln),workerTransportMs:Math.round(Zn),workerRoundTripMs:Math.round(Zn),workerTransportAvgMs:Qn>0?Math.round(Zn/Qn):0,finalizeP50Ms:$(Vn,50),finalizeP95Ms:$(Vn,95),assetCollectionMs:Math.round(Wn),beforeHookMs:Math.round(Gn),htmlAssemblyMs:Math.round(Kn),onPageRenderedHookMs:Math.round(qn),criticalCssP50Ms:$(Hn,50),criticalCssP95Ms:$(Hn,95),cacheWriteMs:Math.round(0+fr.writeTimeMs()),cachedOutputMs:Math.round(Xn),renderQueueDrainMs:Math.round(nr),renderPipelineSettleMs:Math.round(nr),outputLinkMs:Math.round(tr)}};E?.({name:`Render pages`,duration:Tr,success:!0,details:`${Sr} pages (${or} new, ${sr} cached, ${Cr} MB)`,metrics:Dr}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(Tr),success:!0,details:`${Sr} pages / ${or} new / ${sr} cached / ${Cr} MB`,metrics:Dr})}`);let Or=performance.now(),kr=Lt(Mn);if(await Pe(y(N,`static-loader-data-manifest-${L}.json`),kr),await wt(y(P,`ssr`),5,Y?`turbo-ssr`:te(R)),vt(),_n?.dispose)try{await _n.dispose()}catch{}let Ar=J.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;Ar&&!Ar.disabled&&Ar.generateSW&&await Ar.generateSW();let jr=Math.round(performance.now()-x);E?.({name:`Static loader data`,duration:performance.now()-Or,success:!0,details:`${Nn} loader data files`,metrics:{loaderDataFileCount:Nn}}),await T?.(m),await Jt(N);let Mr=Me(N),Nr=await Be(N,jr,P,{outputFiles:Mr,manifestPath:y(fe,`dist`,...It,`manifest.json`)});Ve(N,Nr),E?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(jr/1e3).toFixed(1)}s, JS: ${(Nr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(Nr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:jr,totalPages:Nr.pages.length,jsSize:Nr.totalJSBundleSize,cssSize:Nr.totalCSSBundleSize}});let Pr=new Set(Mr),Fr=(Re?.extraFiles??[]).filter(e=>!Pr.has(e)&&!Mt.clientFiles.includes(e)&&C.existsSync(y(N,e)));await Ae(y(P,`ssg-output.json`),B,N,je(q,mr,Qe).concat(`static-loader-data-manifest-${L}.json`).concat(`page-source.json`),Mt.clientFiles,Mr,Fr)}async function qt(e,t,n=[],r=!1){try{if(!C.existsSync(e))return 0;let i=y(e,`.prune-state`);if(!r)try{let e=await C.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await C.readdir(e),o=new Set,s=new Set([...Object.keys(t),...n]);for(let e of s){let t=O.createHash(`md5`).update(e).digest(`hex`);o.add(`${t}.html`),o.add(`${t}.json`)}let c=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!o.has(t)&&(await C.remove(y(e,t)),c++);return await C.writeFile(i,String(Date.now()),`utf8`),c}catch{return 0}}async function Jt(e){try{It.length>0?await C.remove(y(e,...It)):await Promise.all([C.remove(y(e,`manifest.json`)),C.remove(y(e,`ssr-manifest.json`))])}catch{}}function Yt(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Xt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return m(`Error formatting html: ${t?.message}`),e}return e}function Zt(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function Qt({template:e,ssrEntry:t,onBeforePageRender:i,entry:a,rootContainerId:s,onPageRendered:c}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d)=>{try{let f=u.originalUrl??u.url??`/`,p=await l.ssrLoadModule(t),m=p.createRoot,h=await m(!1,f),ee=o(h,p),{app:g,base:te}=h,[_=`/`,v=``]=f.split(`?`),y=new URLSearchParams(v);if(!g&&y.has(`_data`))return ee.handleLoader(u,d);let b=await l.transformIndexHtml(f,e),x=await i?.(f,b,h)||b,{appHTML:S,bodyAttributes:C,htmlAttributes:w,metaAttributes:ne,styleTag:re}=await ee.render(n(_,te));ne.push(re);let T=await Promise.all([t,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),ie=new Set,D=new Set,O=async e=>{if(!e?.ssrTransformResult||D.has(e))return;D.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))ie.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await O(t)}};await Promise.all(T.map(async e=>O(e)));let k=[...ie].map(e=>V(r(l.config.base,e)));ne.push(...k);let A=await ge({rootContainerId:s,appHTML:S,indexHTML:x,metaAttributes:ne,bodyAttributes:C,htmlAttributes:w,initialState:null}),ae=await c?.(f,A,h)||A;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),E(u,d,ae,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));l.ssrFixStacktrace(t),m(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return l.middlewares.use(Zt),()=>{l.middlewares.use(u)}}}}async function $t(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),o,s,c,l;if(r){o=e.root||a,s={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=s,n=s.entry||await _e(o,t);c=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:y(o,n),l=await A.readFile(y(o,t),`utf-8`)}else{let t=await ie(e,`serve`,n,n);o=t.root||a,s={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=s,u=s.entry||await _e(o,r),[d,f]=await Promise.all([Se(t,u),A.readFile(y(o,r),`utf-8`)]);c=d,l=f}let{onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:p=!1}=s;if(process.env.__DEV_MODE_SSR=`true`,p){let{jsdomGlobal:e}=await import(`./jsdomGlobal-FnVQDCiZ.mjs`);e()}return await re({...e,plugins:[...e.plugins??[],Qt({template:l,ssrEntry:c,onBeforePageRender:u,onPageRendered:d,entry:s.entry||`src/main.ts`,rootContainerId:f})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function en(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await $t(t,e);return await r.listen(),Z(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){m(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Z(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${p.bold(`${e}ms`)}`}n(`\n ${p.cyan(` VITE-REACT-SSG v${be} `)}`,{clear:!e.config.logger.hasWarned}),n(`${p.cyan(`\n VITE v${D}`)+p.dim(r)}\n`),n(p.green(` dev server running at:`)),e.printUrls()}var tn=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};export{tn as ShellStitcher,Kt as build,$t as createServer,en as dev};
1
+ import{n as e}from"./rolldown-runtime-C-zNXMYg.mjs";import{a as t,i as n,n as r,o as i,r as a,t as o}from"./router-adapter-CJuW_Xmp.mjs";import{i as s,r as c,t as l}from"./critical-CRZJx8-f.mjs";import{n as u,t as d}from"./ssg-worker-payload-CWmidVcz.mjs";import{createRequire as f}from"node:module";import{colors as p,error as m,warn as h}from"@bdocs/dui";import g from"node:os";import _,{basename as ee,dirname as v,isAbsolute as y,join as b,relative as x,resolve as S,sep as C}from"node:path";import w from"fs-extra";import{build as T,createLogger as te,createServer as ne,mergeConfig as E,resolveConfig as re,send as D,version as O}from"vite";import k,{createHash as A}from"node:crypto";import j from"node:fs";import ie from"node:fs/promises";const ae=/import\("([^)]+)"\)/g;function M(e,t){let n=new Set;if(!t)return n;for(let r of t)N(e,r,n);return n}function N(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{N(e,t,n)}),n):n}function P(e,t,n,r){let i=e?.map(e=>e.route.entry).filter(Boolean)??[],a=new Set;e?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(ae);for(let e of n)a.add(e[1].split(`/`).at(-1)??``)});let o=new Set(i);for(let e of a){let t=n.find(([t,n])=>n.file.endsWith(e));t&&o.add(t[0])}let s=new Set;for(let e of o){let n=r.get(e);if(!n){let i=M(t.manifest,new Set([e]));n=new Set;for(let e of i)for(let r of t.ssrManifest[e]||[])n.add(r);r.set(e,n)}for(let e of n)s.add(e)}return s}function oe(e){let t=Object.entries(e.serverManifest),n=new Map,r=new Map;return i=>{let a=r.get(i);if(a)return a;let o=Promise.resolve().then(()=>{let r=P(e.matchRouteBranchWithParams([...e.routes],i,e.base),e,t,n);return new Set(r)});return r.set(i,o),o.catch(()=>{r.get(i)===o&&r.delete(i)}),o}}function se(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return k.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function F(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function ce(e,t){let n=new Set(F(e)),r=F(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
+ `):null}var le=class{constructor(e={}){this.entries=new Map,this.cacheDir=e.cacheDir,this.maxEntries=e.maxEntries??1024}getOrCreate(e,t,n={}){let r=this.entries.get(e);if(r)return r.promise;let i=n.engine??`zig-critters`,a={promise:Promise.resolve(null),settled:!1},o=Promise.resolve().then(async()=>{if(this.cacheDir){let t=await this.readDisk(e,i);if(t!==void 0)return t}return t()}).then(t=>(this.cacheDir&&this.writeDisk(e,i,t).catch(()=>{}),t)).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{a.settled=!0,this.evictSettledEntries()});return a.promise=o,this.entries.set(e,a),this.evictSettledEntries(),o}get size(){return this.entries.size}diskPath(e){return b(this.cacheDir,`critical-css-${e}.json`)}async readDisk(e,t){try{let n=await w.readFile(this.diskPath(e),`utf-8`),r=JSON.parse(n);if(r?.v!==2||r?.engine!==t||!(r.style===null||typeof r.style==`string`))return;let i=new Date;return w.utimes(this.diskPath(e),i,i).catch(()=>{}),r.style}catch{return}}async writeDisk(e,t,n){if(!this.cacheDir||n!==null&&n.length>262144)return;let r={v:2,engine:t,style:n};await w.ensureDir(this.cacheDir),await w.writeFile(this.diskPath(e),JSON.stringify(r),`utf-8`)}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};async function ue(e,t={}){let n=t.maxAgeMs??720*60*60*1e3,r=t.maxEntries??5e3;try{if(!w.existsSync(e))return 0;let t=Date.now()-n,i=[];for(let n of await w.readdir(e)){if(!n.startsWith(`critical-css-`)||!n.endsWith(`.json`))continue;let r=b(e,n);try{let e=await w.stat(r),a=Math.max(e.mtimeMs,e.atimeMs);a<t?(await w.remove(r),i.push({file:n,usedAt:0})):i.push({file:n,usedAt:a})}catch{}}let a=i.filter(e=>e.usedAt===0).length;if(i.length>r){let t=i.filter(e=>e.usedAt>0).sort((e,t)=>t.usedAt-e.usedAt);for(let n of t.slice(r))try{await w.remove(b(e,n.file)),a++}catch{}}return a}catch{return 0}}const de=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function I(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function fe({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${de}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return I(I(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function pe({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${de}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return I(I(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return I(I(p,`html`,a),`body`,i)}async function me(e,t=`index.html`){let[,n]=[...(await w.readFile(b(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function he(e){return`<link rel="stylesheet" href="${e}">`}function ge(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=L(e);r&&n.push(r)}}),n.join(``)}function L(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var R=`0.4.4`;async function _e(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&ye(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function ve(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:b(e.root,t))}const z=/[:*?]/;function ye(e){return e?z.test(e):!1}async function be(e,t){if(e!==t){await w.ensureDir(v(t)),await w.remove(t);try{await w.link(e,t)}catch{await w.copy(e,t)}}}async function xe(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(be(r.source,r.destination)));await Promise.all(n)}function Se({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=[],l=(e,t)=>{if(t<=e)return;let n=[],r=!1;for(let i of c)i[1]<e?n.push(i):t<i[0]?(r||=(n.push([e,t]),!0),n.push(i)):(e=Math.min(e,i[0]),t=Math.max(t,i[1]));r||n.push([e,t]),c=n},u=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),l(t,performance.now())}),s};return{enqueue(e,t){let c=Buffer.byteLength(t,`utf8`);return c>i?(s=u().then(async()=>{let r=performance.now();await n(e,t),l(r,performance.now())}),s):(a.push({filePath:e,content:t}),o+=c,a.length>=r||o>=i?u():Promise.resolve())},flush:u,pendingCount(){return a.length},writeTimeMs(){return c.reduce((e,[t,n])=>e+(n-t),0)}}}function B(e,t,n,r=[],i=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort(),extraFiles:[...new Set(i)].sort()}}function Ce(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,s=[...new Set(r)].sort(),c=[...new Set(i)].sort(),l=[...new Set(a)].sort();if(!o(e.clientFiles,s)||!o(e.pageFiles,c)||!o(e.auxiliaryFiles||[],l))return!1;let u=[...new Set(e.extraFiles??[])].sort();if(!u.every(e=>w.existsSync(`${n}/${e}`)))return!1;let d=[...s,...c,...l];return o(Oe(n),[...new Set([...d,...u])].sort())?d.every(e=>w.existsSync(`${n}/${e}`)):!1}function we(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function Te(e){try{let t=await w.readJson(e);if(!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`))return;let n=Array.isArray(t.extraFiles)?t.extraFiles.filter(e=>typeof e==`string`):[];return B(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles,n)}catch{return}}async function Ee(e,t,n,r,i=[],a,o=[]){let s=a||Oe(n),c=new Set(r),l=new Set(i),u=new Set(o);return je(e,B(t,i.length>0?[...l]:s.filter(e=>!c.has(e)),r,i.length>0?s.filter(e=>!c.has(e)&&!l.has(e)&&!u.has(e)):[],o))}function De(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[V(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function Oe(e){let t=[],n=r=>{let i;try{i=w.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push(x(e,i).split(C).join(`/`))}};return n(e),t.sort()}function V(e){return!e||e===`/`?``:t(e).replace(/\/+$/,``)}function ke(e,t){let n=new Set(t.map(V)),r={};for(let[t,i]of Object.entries(e)){let e=V(t);n.has(e)&&(r[e]=i)}return r}async function Ae(e,t){try{if(await w.readFile(e,`utf8`)===t)return!1}catch{}return await w.ensureDir(v(e)),await w.writeFile(e,t,`utf8`),!0}async function je(e,t,n=2){try{let n=await w.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await w.ensureDir(v(e)),await w.writeJson(e,t,{spaces:n}),!0}const H=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),Me=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function U(e){try{return j.statSync(e).size}catch{return 0}}const W=`boltdocs-metrics.json`;function Ne(e){if(!e)return null;try{let t=b(e,W);return j.existsSync(t)?JSON.parse(j.readFileSync(t,`utf-8`)):null}catch{return null}}function Pe(e,t){try{let n=_.resolve(e,`..`,`reports`);j.existsSync(n)||j.mkdirSync(n,{recursive:!0}),j.writeFileSync(b(e,W),JSON.stringify(t))}catch{}}async function Fe(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=Ne(n);if(e)return e.buildTime=t,e}let i=b(e,`.vite`),a=b(e,`assets`),o={},s=r.manifestPath||b(i,`manifest.json`);j.existsSync(s)&&(o=JSON.parse(await j.readFileSync(s,`utf-8`)));let c=0,l=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=U(b(e,n));c+=i;for(let t of r)l+=U(b(e,t))}let u=0,d=0;if(j.existsSync(a)){let e=j.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=_.extname(t.name).toLowerCase(),n=b(a,t.name);H.has(e)?u+=U(n):Me.has(e)&&d++}}let f=b(e,`index.html`),p=0,m=[];if(j.existsSync(f)){let e=U(f);p+=e,m.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let h=r.outputFiles?[...r.outputFiles]:(()=>{try{return j.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of h){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=U(b(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);p+=n,m.push({route:e,htmlSize:n,htmlFile:t})}}let g={buildTime:t,totalJSBundleSize:c,totalCSSBundleSize:l,totalImagesSize:u,totalHTMLSize:p,fontCount:d,pages:m};return n&&Pe(n,g),g}function Ie(e,t){let n=_.resolve(e,`..`,`.boltdocs`,`reports`);j.existsSync(n)||j.mkdirSync(n,{recursive:!0});let r=b(n,`performance.json`);j.writeFileSync(r,JSON.stringify(t,null,2))}const Le=new Set([`node_modules`,`dist`,`coverage`]);function G(e,t){return x(e,t).replace(/\\/g,`/`)}function K(e,t,n){try{let r=w.readFileSync(t),i=new Uint8Array(r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)),a=A(`sha1`).update(i).digest(`hex`);n.update(`${G(e,t)}\0${a}\0`)}catch{}}function Re(e,t,n){let r;try{r=w.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`)||Le.has(i))continue;let r=b(e,i),a;try{a=w.statSync(r)}catch{continue}a.isDirectory()?Re(r,t,n):a.isFile()&&K(t,r,n)}}function ze(e,t){let n=f(import.meta.url);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=b(v(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);w.existsSync(i)&&Re(i,e,t)}catch{}}const Be=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`];function q(e,t){for(let n of Be){let r=b(e,n);w.existsSync(r)&&K(e,r,t)}}function Ve(e){try{let t=A(`sha256`);ze(e,t);let n=b(e,`src`);return w.existsSync(n)&&Re(n,e,t),q(e,t),t.update(`v4\0`),t.digest(`hex`)}catch{return A(`sha256`).update(`__shared_hash_error__`).digest(`hex`)}}function He(e,t,n){try{w.removeSync(b(n,`hash-merkle.json`))}catch{}try{let n=A(`sha256`);ze(e,n);let r=b(e,t);w.existsSync(r)&&Re(r,e,n);let i=b(e,`src`);return w.existsSync(i)&&Re(i,e,n),q(e,n),n.update(`v4\0`),n.digest(`hex`)}catch(e){return h(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),A(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Ue(e){let t=k.createHash(`sha1`);return t.update(`v5`),t.update(`\0`),t.update(w.readFileSync(e)),t.digest(`hex`)}function We(e,t){if(e)try{return Ue(e)}catch{}return t}function Ge(e,t){try{return Ue(e)}catch{return t}}function Ke({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let o=k.createHash(`md5`).update(e).digest(`hex`);return!(!w.existsSync(b(i,`${o}.html`))||t.loaderDataFilePath&&!w.existsSync(b(i,`${o}.json`)))}function qe(e){return e===null?null:e.poolMetrics()}function Je(e,t){return y(t)?t:b(e,t)}function Ye(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=V(r);n[t]=Je(e,i)}return Object.freeze(n)}function Xe(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:Ye(e.root,e.routeToSourceFileMap)})}function Ze(e,t,n={}){let r=Ye(e,n),i=t.flatMap(t=>{if(!t.path)return[];let i=V(t.path),a=n[t.path],o=a?Je(e,a):r[i]||t.componentPath;return[{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}]}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function Qe(e,t){return Object.freeze({...e,routeManifest:t})}const $e=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],et=[`react`,`react-dom`];function tt(e){return Number.parseInt(O,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function nt(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function rt(e,t){let n=[],r=i=>{let a;try{a=w.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=b(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=x(e,a).split(C).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function it(e){return e.flatMap(e=>{if(Array.isArray(e))return it(e);if(!e)return[];if(typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return[]}return[e]})}async function at(e){let t=[],n=async r=>{let i;try{i=await w.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=b(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push(x(e,i).split(C).join(`/`))}};return await n(e),t.sort()}async function ot(e){try{let t=await w.readFile(e);return A(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function st(e,t){if(!t||y(t))return;let n=S(e),r=S(n,t),i=x(n,r);if(!(!i||i===`..`||i.startsWith(`..${C}`)||y(i)))return r}async function ct(e,t){let n=b(S(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await w.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&w.existsSync(e)?await at(e):[],a=Object.fromEntries((await Promise.all(i.map(async t=>{let n=await ot(b(e,t));return n?[t,n]:null}))).filter(e=>e!==null));for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=st(t,e);r&&await ot(r)===n&&await w.remove(r)}e&&w.existsSync(e)&&(await w.ensureDir(t),await Promise.all(Object.entries(a).map(async([n,i])=>{let a=st(t,n);a&&(r[n]===i&&await ot(a)===i||(await w.ensureDir(v(a)),await w.copy(b(e,n),a,{overwrite:!0,errorOnExist:!1})))}))),await w.ensureDir(S(t,`..`)),await w.writeJson(n,{version:1,files:a})}function lt(e){return E(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...tt({input:{app:b(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir(y(t.build.outDir||``)?t.build.outDir||`dist`:S(e.root,t.build.outDir||`dist`))}}]})}function ut(e){return E(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...tt({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...$e],external:[...et]},plugins:[...it(e.viteConfig.plugins??[]),nt()]})}async function dt(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,o=[],s=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),w.existsSync(e.outDir)&&await w.remove(e.outDir);let t=b(e.clientCacheDir,`dist`);await ct(e.viteConfig.publicDir,t),ht(t,e.outDir),o=rt(b(e.clientCacheDir,`dist`),e.htmlEntry)}else{await T(lt({...e,onResolvedOutputDir:e=>{n=e}}));let t=performance.now()-s;e.onStep?.({name:`Client build`,duration:t,success:!0,details:`Vite production build`}),r=b(e.finalCacheDir,`client-cache`,i);let a=b(r,`client-hash.txt`);await w.ensureDir(r);let c=b(r,`dist`);w.existsSync(c)&&await w.remove(c),await w.copy(n,c,{overwrite:!0,errorOnExist:!1}),await ct(e.viteConfig.publicDir,c),o=rt(c,e.htmlEntry),await w.writeFile(a,i,`utf-8`),await gt(b(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-s,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:o}}async function ft(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};w.existsSync(e.ssgOut)&&await w.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await T(ut(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function pt(e,t){if(!t||y(t))return;let n=S(e,t),r=x(S(e),n);if(!(r===`..`||r.startsWith(`..${C}`)||y(r)))try{let t=w.realpathSync(e),r=w.realpathSync(n),i=x(t,r);return i===`..`||i.startsWith(`..${C}`)||y(i)||!w.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function mt(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function ht(e,t){let n=w.readdirSync(e,{withFileTypes:!0});w.mkdirSync(t,{recursive:!0});for(let r of n){let n=b(e,r.name),i=b(t,r.name);if(r.isDirectory())ht(n,i);else if(r.isFile())try{w.linkSync(n,i)}catch{w.copyFileSync(n,i)}}}async function gt(e,t=5,n){try{if(!w.existsSync(e))return;let r=await w.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=b(e,t.name),r=await w.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await w.remove(b(e,t.name))}catch{}}function _t(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function vt(e,t){return t===`nested`?b(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function yt(e){return Object.freeze(e)}function bt(e){let t=new Map;for(let n of e.routes){let r=k.createHash(`md5`).update(n).digest(`hex`),o=V(n),s=e.routeToSourceFileMap[o]||e.routeToSourceFileMap[n],c=s?e.sourceMeta.get(s):void 0;t.set(n,yt({path:n,pathHash:r,cachedHtmlFile:b(e.ssgPagesDir,`${r}.html`),cachedLoaderFile:b(e.ssgPagesDir,`${r}.json`),finalOutFile:b(e.outDir,vt(n,e.dirStyle)),normalizedKey:o,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[n]??e.fallbackHash,fetchUrl:`${i(e.contextBase)}${a(n)}`}))}return t}function xt(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function St(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function Ct(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function J(e,t){return e>4&&!t}function wt(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function Tt(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function Et(e){let t=[],n=new Set,r=e.getPool(),i=Ct(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=[],l=async()=>{if(c.length===0)return;let e=c;c=[],await Promise.all(e)},u=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},d=e=>{let r;r=St(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(J(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=Ct(e.getWorkerCount?.()??0))),r?.renderBatch){let t=await Promise.all(e.routes.map(async t=>{let n=e.getPlan(t);return{path:t,plan:n,cached:await e.isCached(n)}})),l=[];for(let n of t)n.cached?c.push(e.onCacheHit(n.plan).then(()=>{o++})):(await e.prepareRoute?.(n.plan),l.push({path:n.path,plan:n.plan}));let u=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let t=0;t<l.length;t+=u){let o=l.slice(t,t+u);if(!r){for(let{path:n,plan:r}of l.slice(t))e.scheduleMainThread(n,r),a++;break}s=!0;let c=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of o){let i=await e.onWorkerFailure(n,r,t,c);if(!Tt(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};d((async()=>{let t;try{t=await c.renderBatch(o.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==o.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<o.length;n++){let{path:r,plan:i}=o[n],s=t[n],l;if(l=wt(s,r)?await e.onWorkerFailure(r,i,Error(s.error),c):Tt(s,r)?s:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),c),!Tt(l,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,l,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else{let t=await Promise.all(e.routes.map(async t=>{let n=e.getPlan(t);return{path:t,plan:n,cached:await e.isCached(n)}}));for(let l of t){if(l.cached){c.push(e.onCacheHit(l.plan).then(()=>{o++}));continue}if(await e.prepareRoute?.(l.plan),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=Ct(e.getWorkerCount?.()??0))),r){s=!0;let t=r,o=performance.now();d(t.render(l.path).catch(async n=>{let i=await e.onWorkerFailure(l.path,l.plan,n,t);return r=e.getPool(),i}).then(async t=>{if(!Tt(t,l.path))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(l.path,l.plan,t,performance.now()-o),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(l.path,l.plan),a++}}return await l(),await u(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await l(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const Dt=Number.parseInt(O,10)>=5?[`.vite`]:[];function Ot(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function kt(e,n){return`static-loader-data${t(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function At(e,t){let n=`combined${t}`;return w.existsSync(b(e,n))?n:w.readdirSync(e).filter(e=>e.endsWith(t)).sort((e,t)=>e.localeCompare(t))[0]||n}function jt(e,n=`/`){let r=t(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Mt(e,t,n){let r=t?.[n];if(r)return y(r)?r:b(e,r)}function Nt(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,y(n)?x(e,n):n]))}function Pt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Ft(n={},r={}){let i=process.env.MODE||process.env.NODE_ENV||n.mode||`production`;i!==process.env.NODE_ENV&&(process.env.NODE_ENV=i);let a=process.cwd(),p=r.root||a,m=r.build?.outDir||`dist`,_=r.base||`/`,S=performance.now(),C=0,T=0,ne=0,{onFinished:E,onStep:D,routeToSourceFileMap:O={},cacheDir:A=`.boltdocs/build`,htmlEntry:j=`index.html`,entry:ie=await me(p,j)}=n,ae=`docs`,M=Object.values(O);if(M.length>0){let e=M[0],t=x(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(ae=t[0])}let N=y(m)?m:b(p,m),P=y(A)?A:b(p,A),F=He(p,ae,P),I=Ve(p),he=Xe({root:p,outDir:N,cacheDir:P,base:_,mode:i,entry:ie,htmlEntry:j,docsDirName:ae,clientHash:F,routeToSourceFileMap:O}),L=he.clientHash.substring(0,12),R=b(he.cacheDir,`ssr`,L),z=b(he.cacheDir,`client-cache`,he.clientHash),ye=z,be=F,B=F,H=``;try{let{getZigCritters:e}=await import(`./critical-CRZJx8-f.mjs`).then(e=>e.n),t=await e();if(t){let e=await t.getEngineIdentity();e&&e!==`unknown`&&(H=e.slice(0,16))}}catch{}H&&(B=`${F}-${H}`);let Me=b(z,`client-hash.txt`),U=!1;try{w.existsSync(Me)&&w.existsSync(b(z,`dist`))&&(U=(await w.readFile(Me,`utf-8`)).trim()===F)}catch{}let W={server:``,css:``},Ne=()=>{let e=``,t=``;try{let t=[],n=(e,r)=>{let i;try{i=w.readdirSync(e,{withFileTypes:!0})}catch{return}for(let a of i){let i=r?`${r}/${a.name}`:a.name;i!==`.vite`&&(i.startsWith(`.vite/`)||/^assets\/combined-.*\.js$/.test(i)||(a.isDirectory()?n(b(e,a.name),i):a.isFile()&&t.push(i)))}};if(n(R,``),t.length>0){t.sort();let n=k.createHash(`sha256`);for(let e of t){n.update(e),n.update(`\0`);let t=w.readFileSync(b(R,e));e===`combined.mjs`&&(t=Buffer.from(t.toString(`utf-8`).replace(/combined-[A-Za-z0-9_-]+\.js/g,`combined.js`))),n.update(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),n.update(`\0`)}e=n.digest(`hex`).slice(0,16)}}catch{}try{let e=U?b(z,`dist`,`assets`):b(N,`assets`);if(w.existsSync(e)){let n=w.readdirSync(e).filter(e=>e.endsWith(`.css`)).sort();if(n.length>0){let r=k.createHash(`sha256`);for(let t of n){r.update(t),r.update(`\0`);let n=w.readFileSync(b(e,t));r.update(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),r.update(`\0`)}t=r.digest(`hex`).slice(0,16)}}}catch{}return{server:e,css:t}},Pe=()=>{let e=F;H&&(e=`${e}-${H}`),(W.server||W.css)&&(e=`${e}-${W.server}-${W.css}`),B=e},Le=!1;if(U){try{let e=(await w.readJson(b(P,`ssr-cache-index.json`)))[F];if(typeof e==`string`){let t=pt(b(P,`ssr`),e);t&&(R=t)}}catch{}if(w.existsSync(R)){let e=Ne();W.server=e.server,W.css=e.css,(e.server||e.css)&&(Pe(),Le=!0)}}let G=b(P,`ssg-pages`),K=b(P,`ssg-cache.json`),Re=b(P,`ssg-output.json`),ze=await Te(Re),Be=ze!==void 0;U&&(we(ze,Oe(b(z,`dist`)),j)||(U=!1));let q=[],Ue=!1,Je=(n.dirStyle||r.ssgOptions?.dirStyle)??`flat`;if(U&&Be&&Je!==`nested`){let e=b(P,`routes-cache.json`);try{if(w.existsSync(e)&&w.existsSync(K)){let t=JSON.parse(w.readFileSync(e,`utf-8`)),n=ke(JSON.parse(w.readFileSync(K,`utf-8`)),t.paths);if(t.dirStyle===Je&&t.base===_){let e=t.paths.every(e=>{let r=V(e),i=n[r];return Ke({routePath:e,cacheItem:i,sourceContentHash:We(O[r]||O[e]||Mt(p,t.sourceFiles,r)||Mt(p,t.sourceFiles,e),B),ssgPagesDir:G,requireAssetHash:!0})});t.paths.length>0&&e&&(q=t.paths,Ue=!0)}}}catch{}}if(Ue){let e=performance.now(),t={};try{w.existsSync(K)&&(t=ke(JSON.parse(w.readFileSync(K,`utf-8`)),q))}catch{}let n=[...De(q,t,Je===`nested`?`nested`:`flat`),`static-loader-data-manifest-${L}.json`,`page-source.json`],i=Oe(b(z,`dist`)).filter(e=>e!==j),a=await Te(Re),o=(a?.auxiliaryFiles??[]).every(e=>w.existsSync(b(N,e)))&&Ce(a,F,N,i,n,a?.auxiliaryFiles??[]),s={};if(!o){w.existsSync(N)&&await w.remove(N);let e=b(z,`dist`);await ct(r.publicDir,e),await w.copy(e,N);let n=[];for(let e of q){let r=k.createHash(`md5`).update(e).digest(`hex`),i=b(G,`${r}.html`),a=b(G,`${r}.json`),o=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:b(N,o)}),w.existsSync(a)){let r=V(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:b(N,i.loaderDataFilePath)}),s[jt(e,_)]=i.loaderDataFilePath)}}await xe(n),await Ae(b(N,`static-loader-data-manifest-${L}.json`),Ot(s))}await It(G,t,q);let c=Math.round(performance.now()-S);D?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),D?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),D?.({name:`Render pages`,duration:0,success:!0,details:`${q.length} pages (all cached)`}),D?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(c/1e3).toFixed(1)}s, all cached`});let l=Math.round(performance.now()-e),u={renderedPageCount:0,cachedPageCount:q.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:l,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:l};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${q.length} pages / 0 new / ${q.length} cached`,metrics:{renderedCount:0,cachedCount:q.length,renderedSize:0,totalPages:q.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:u}})}`),await E?.(m),await Lt(N),await Ee(b(P,`ssg-output.json`),F,N,n,i,void 0,a?.extraFiles??[]);return}let Ye=await re(r,`build`,i,i),$e=Object.assign({},Ye.ssgOptions||{},n),{script:et=`sync`,mock:tt=!1,formatting:nt=`none`,includedRoutes:rt=Pt,onBeforePageRender:it,onPageRendered:at,dirStyle:ot=`flat`,includeAllRoutes:st=!1,format:lt=`esm`,concurrency:ut=20,rootContainerId:ht=`root`,beastiesOptions:vt={},criticalCssMaxSize:yt}=$e,St=vt,Ct=s(yt),J=$e.turbo??!1,wt=b(P,`ssr`),Tt=b(P,`ssr-cache-index.json`);if(R=b(wt,J?`turbo-ssr`:L),!J&&U)try{let e=(await w.readJson(Tt))[F];if(typeof e==`string`){let t=pt(wt,e);t&&(R=t)}}catch{}let Ft=_t(te(),mt),Bt=()=>{};if(tt){let{jsdomGlobal:e}=await import(`./jsdomGlobal-FnVQDCiZ.mjs`);Bt=e()}let Y={};try{if(w.existsSync(K)){let e=await w.readJson(K);Y=ke(e,Object.keys(e))}}catch{}let X=!1;if(U)try{let e=b(P,`routes-cache.json`);if(w.existsSync(e)){let t=JSON.parse(w.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=V(e),r=Y[n];return Ke({routePath:e,cacheItem:r,sourceContentHash:We(O[n]||O[e]||Mt(p,t.sourceFiles,n)||Mt(p,t.sourceFiles,e),B),ssgPagesDir:G,requireAssetHash:!0})})&&(q=t.paths,X=!0)}}catch{}let Vt=X?``:await ve(Ye,ie),Ht=(J||U)&&w.existsSync(R)&&w.readdirSync(R).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,Ut=null;if(!X&&Ht&&lt===`esm`){let e=process.platform===`win32`?`file://`:``;try{let t=R;w.existsSync(t)&&(Ut=import(e+b(t,At(t,`.mjs`)).replace(/\\/g,`/`)).catch(()=>{}))}catch{}}let Wt=performance.now(),[Gt,Kt]=await Promise.all([dt({viteConfig:r,resolvedMode:Ye.mode,root:p,htmlEntry:j,outDir:N,clientCacheDir:z,finalCacheDir:P,docsDirName:ae,initialClientHash:F,canBypassClientBuild:U,customLogger:Ft,onStep:D,shouldSuppressLog:mt},()=>He(p,ae,P)),ft({viteConfig:r,resolvedMode:Ye.mode,entry:ie,ssrEntry:Vt,ssgOut:R,format:lt,canSkipSsrImport:X,serverBuildSkipped:Ht,customLogger:Ft,onStep:D,shouldSuppressLog:mt})]);if(m=Gt.outDir,ye=Gt.resolvedClientCacheDir,be=Gt.resolvedClientHash,B=Gt.pageContentFallbackHash,H&&(B=`${B}-${H}`),!Le){let e=Ne();W.server=e.server,W.css=e.css,(e.server||e.css)&&Pe(),Le=!0}if(L=be.substring(0,12),C=Gt.durationMs,T=Kt.durationMs,!J)try{let e={};try{e=await w.readJson(Tt)}catch{}e[be]=x(wt,R),await je(Tt,e)}catch{}let qt=lt===`esm`&&process.platform===`win32`?`file://`:``,Jt=lt===`esm`?`.mjs`:`.cjs`,Yt=`combined${Jt}`;try{w.existsSync(R)&&(Yt=At(R,Jt))}catch{}let Xt=qt+b(R,Yt).replace(/\\/g,`/`),Zt=Yt.replace(/\.[^/.]+$/,``),Qt=JSON.parse(await w.readFile(b(R,...Dt,`manifest.json`),`utf-8`)),$t=null,en=null,Z=[],tn,nn=`/`,rn,an=null,on,sn=rt;if(!X){let t=e===void 0?f(import.meta.url):e,n=performance.now(),r=lt===`esm`?await import(Xt):t(Xt);Ut&&await Ut.catch(()=>{}),ne=performance.now()-n,tn=r.matchRouteBranchWithParams;let{createRoot:i,includedRoutes:a}=r;sn=a||rt,$t=await i(!1);let s=$t;if(Z=s.routes,nn=s.base,rn=s.triggerOnSSRAppRendered,an=s.app,on=s.routerType,Z&&Z.length>0)for(let e of Z){let t=e.filePath??e.entry;e.path&&t&&!O[e.path]&&(O[e.path]=t)}he=Qe(he,Ze(p,Z,O)),en=o(s,r)}let cn=``,ln=0,un=null,dn=null,fn=null,pn=!1,mn=1/0;async function hn(){if(fn){await fn;return}let e=dn;e&&(fn=e.destroy(),await fn)}if(!X){let e=performance.now(),{paths:t}=await _e(Z);q=st?t:await sn(t,Z||[]),q=Pt(q,Z||[]),q=Array.from(new Set(q)),ln+=performance.now()-e;try{await je(b(P,`routes-cache.json`),{paths:q,dirStyle:ot,base:_,sourceFiles:Nt(p,O)},0)}catch{}cn=b(R,Zt+Jt)}async function gn(){if(un||pn||q.length<=4)return;pn=!0;let e=performance.now();try{cn=b(R,Zt+Jt);let{SsgWorkerPool:t}=await import(`./ssg-worker-pool-DArhALXL.mjs`);un=new t({ssrEntryPath:cn,format:lt===`esm`?`esm`:`cjs`,...mn<=2?{numWorkers:1}:{}}),dn=un,await un.ready(),ir=performance.now()-e}catch{ir=performance.now()-e,un=null}}let _n=$e.criticalCss??`zig-critters`,vn,yn;_n===`zig-critters`?(vn=await l({concurrency:Math.max(1,Math.min(ut,g.cpus().length,8))}),vn||h("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):_n===`beasties`&&St!==!1&&(yn=await c(m,{publicPath:_,...St}));let bn=``,xn=``;if(vn){let e=`unknown`;try{e=await vn.getEngineIdentity()}catch{}let t=b(N,`assets`);if(w.existsSync(t)){let e=w.readdirSync(t).filter(e=>e.endsWith(`.css`));for(let n of e)bn+=`${w.readFileSync(b(t,n),`utf-8`)}\n`}bn&&(xn=k.createHash(`sha256`).update(bn).update(`\0`).update(e).digest(`hex`))}let Sn={},Cn={},wn={};if(X)for(let e of q){let t=V(e);wn[e]=Y[t]?.assetHash||F}else{let[e,t]=await Promise.all([w.readFile(b(N,...Dt,`ssr-manifest.json`),`utf-8`),w.readFile(b(N,...Dt,`manifest.json`),`utf-8`)]);Sn=JSON.parse(e),Cn=JSON.parse(t);for(let[e,t]of Object.entries(O)){let n=Ge(t,F);n=`${n}-${I}`,W.css&&(n=`${n}-${W.css}`),H&&(n=`${n}-${H}`),wn[e]=n}let n=`synthetic:${I}:${W.css||`css`}:${H||`engine`}`;for(let e of q)wn[e]||(wn[e]=n)}let Tn=await w.readFile(b(N,j),`utf-8`);w.rmSync(b(N,j)),Tn=Rt(Tn,et);let En=Tn.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],Dn=it?null:fe({rootContainerId:ht,indexHTML:Tn}),On=(await import(`p-queue`)).default||await import(`p-queue`),kn=new On({concurrency:ut}),An=new On({concurrency:Math.min(g.cpus().length,4)}),jn=new On({concurrency:Math.max(2,Math.min(g.cpus().length,8))}),Mn={},Nn=0,Pn=new Map,Fn=new Set;for(let e of q){let n=O[t(e).replace(/\/$/,``)]||O[e];n&&Fn.add(n)}for(let e of Fn)try{if(w.existsSync(e)){let t=w.statSync(e);Pn.set(e,{hash:Ge(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let In=null;!X&&tn&&(In=oe({routes:[...Z],base:nn,matchRouteBranchWithParams:tn,serverManifest:Qt,manifest:Cn,ssrManifest:Sn}));let Ln=bt({routes:q,outDir:N,ssgPagesDir:G,dirStyle:ot,contextBase:nn,fallbackHash:B,routeToSourceFileMap:O,sourceMeta:Pn,routeToAssetHash:wn});mn=q.filter(e=>{let t=xt(Ln,e),n=Y[t.normalizedKey];try{return!Ke({routePath:t.path,cacheItem:n,sourceContentHash:t.sourceContentHash,expectedAssetHash:t.routeAssetHash,ssgPagesDir:G})}catch{return!0}}).length;let Rn=J?void 0:b(P,`critical-css`),zn=new le({cacheDir:Rn}),Bn=[],Vn=[],Hn=[],Un=[],Wn=0,Gn=0,Kn=0,qn=0,Jn=0,Yn=0,Xn=0,Zn=0,Qn=0,$n=0,er=0,tr=0,nr=0,Q={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function rr(e){e&&(Q.count++,Q.matchMs+=e.matchMs,Q.resolveMs+=e.resolveMs,Q.loadersMs+=e.loadersMs,Q.renderMs+=e.renderMs,Q.helmetMs+=e.helmetMs,Q.totalMs+=e.totalMs)}let ir=0,ar=!1;function $(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let or=0,sr=0,cr=0,lr=new Set,ur=new Set,dr=[],fr=Se({writeFile:async(e,t)=>{await w.ensureDir(v(e)),await w.writeFile(e,t,`utf-8`)}}),pr=JSON.stringify(Y),mr=ke(Y,q),hr=new Map,gr=new Set;gr.add(G);for(let e of q){let t=ot===`nested`?b(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;gr.add(b(N,v(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;gr.add(b(N,`static-loader-data`,v(n)))}gr.add(b(N,`static-loader-data`)),await Promise.all([...gr].map(e=>w.ensureDir(e)));async function _r(e,t,n,r,i,a,o,s,c,l,u,f,p,m,g){let ee=performance.now(),{path:v,cachedHtmlFile:y,cachedLoaderFile:x,normalizedKey:S,sourceContentHash:C,sourceMtimeMs:T,fetchUrl:te}=e,ne;if(!p&&m===`remix`){if(!In)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();ne=new Set(await(hr.get(v)||In(te))),Wn+=performance.now()-e}else ne=new Set;let E;if(s&&Object.keys(s).length>0){let e=kt(v,L);E=e,J&&await w.writeFile(b(N,e),JSON.stringify(s)),Mn[jt(v,_)]=e,Nn++}await f?.(v,t,c);let re=performance.now(),D=Dn&&g===Tn?Dn({appHTML:t,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null}):await pe({rootContainerId:ht,appHTML:t,indexHTML:g,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null});Kn+=performance.now()-re;let O=p?``:ge(ne),k=o?D.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):D;O&&(k=k.replace(`<head>`,`<head>${O}`));let A=performance.now();Jn++,Jn===1&&(Yn=A);let j=await at?.(v,k,c)||k;Jn--,Jn===0&&(qn+=performance.now()-Yn);let ie=``;if(s&&Object.keys(s).length>0){let e=JSON.stringify(s).replace(/</g,`\\u003c`);ie=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${jt(v,_)}': ${e} };`}let ae=d(o),M=j,P=`<script>window.__VITE_REACT_SSG_HASH__ = '${L}';${ie}${ae}<\/script>`,oe=performance.now();if(M=M.replace(`<script>${de}<\/script>`,``),vn){if(bn){let e=se(M,xn,bn,`zig-critters`);try{let t=await zn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await vn.extractCriticalCss(M,bn,{maxSize:Ct});return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&h(`[zig-critters] Critical CSS for "${v}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)},{engine:`zig-critters`});t&&!M.includes(`data-zig-critters`)&&(M=M.replace(`</head>`,`${t}</head>`))}catch(e){h(`[zig-critters] Failed to inline CSS for "${v}": ${e instanceof Error?e.message:String(e)}`)}}M=M.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(yn){let e=se(M,xn,bn,`beasties`),t=await zn.getOrCreate(e,async()=>{let e=await An.add(()=>yn.process(M));return ce(M,e)},{engine:`beasties`});t&&!M.includes(t)&&(M=M.replace(`</head>`,`${t}</head>`)),M=M.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let F=P+(a||``);F&&(M=M.replace(`<head>`,`<head>${F}`));let le=nt===`none`?M:await zt(M,nt);Hn.push(Math.round(performance.now()-oe));let ue=performance.now();J?s&&Object.keys(s).length>0&&E&&await fr.enqueue(b(N,E),JSON.stringify(s)):(await fr.enqueue(y,le),s&&Object.keys(s).length>0&&E?(await fr.enqueue(x,JSON.stringify(s)),mr[S]={contentHash:C,mtime:T?Math.round(T):0,loaderDataFilePath:E,assetHash:e.routeAssetHash}):mr[S]={contentHash:C,mtime:T?Math.round(T):0,assetHash:e.routeAssetHash});let I=performance.now()-ue;Un.push(Math.round(I)),Vn.push(Math.round(performance.now()-ee)),or++,$n++,cr+=le.length}let vr=performance.now(),yr=[];await Et({routes:q,canBypassClientBuild:U,getPlan:e=>xt(Ln,e),isCached:e=>{if(J)return!1;try{return Ke({routePath:e.path,cacheItem:Y[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:G})}catch{return!1}},onCacheHit:async e=>{let t=Y[e.normalizedKey]?.loaderDataFilePath,n=t?b(N,t):void 0,r=!lr.has(e.finalOutFile),i=!!n&&!ur.has(n);r&&lr.add(e.finalOutFile),i&&n&&ur.add(n);let a=performance.now();try{if(r){let t=!1;if(En)try{let n=await w.readFile(e.cachedHtmlFile,`utf-8`),r=n.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1];r&&r!==En&&(await w.ensureDir(v(e.finalOutFile)),await w.writeFile(e.finalOutFile,n.split(r).join(En)),t=!0)}catch{t=!1}t||dr.push({source:e.cachedHtmlFile,destination:e.finalOutFile})}n&&t&&w.existsSync(e.cachedLoaderFile)&&(i&&dr.push({source:e.cachedLoaderFile,destination:n}),Mn[jt(e.path,_)]=t,Nn++),sr++,er++,Xn+=performance.now()-a}catch(t){throw r&&lr.delete(e.finalOutFile),i&&n&&ur.delete(n),Error(`Error on cached page: ${e.path}\n${t instanceof Error?t.stack??t.message:String(t)}`)}},prepareRoute:e=>{!an&&on===`remix`&&In&&hr.set(e.path,In(e.fetchUrl))},ensurePool:gn,getPool:()=>un,getWorkerCount:()=>qe(un)?.totalWorkers??0,onWorkerFailure:async(e,t,n,r)=>{if(!en)throw Error(`Error on page: ${e}\n${String(n)}`);h(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),ar=!0;try{await hn()}catch{}un=null,pn=!0;let i=await en.render(e);return{path:e,appHTML:i.appHTML,metaAttributes:i.metaAttributes,bodyAttributes:i.bodyAttributes,htmlAttributes:i.htmlAttributes,styleTag:i.styleTag,timings:i.timings,routerContext:u(i.routerContext)}},onWorkerResult:async(e,t,n,r)=>{Zn+=Math.max(0,r-(n.timings?.totalMs??0)),Qn++,n.timings&&(Bn.push(Math.round(n.timings.totalMs)),rr(n.timings));let i=$t;if(!i)throw Error(`SSR context is unavailable for ${e}`);let a={...i,routePath:e},o=performance.now(),s=await it?.(e,Tn,a)||Tn;Gn+=performance.now()-o;let c=n.routerContext?.loaderData?n.routerContext.loaderData:null;await jn.add(()=>_r(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,c,a,nn,Z,rn,an,on??`remix`,s))},scheduleMainThread:(e,t)=>{yr.push(kn.add(async()=>{try{let n=$t;if(!n)throw Error(`SSR context is unavailable for ${e}`);let r={...n,routePath:e},i=performance.now(),a=await it?.(e,Tn,r)||Tn;Gn+=performance.now()-i;let o=performance.now(),s=en;if(!s)throw Error(`SSR adapter is unavailable for ${e}`);let{appHTML:c,bodyAttributes:l,htmlAttributes:d,metaAttributes:f,styleTag:p,routerContext:m,timings:h}=await s.render(e);Bn.push(Math.round(performance.now()-o)),rr(h);let g=m?.loaderData;await _r(t,c,f,l,d,p,u(m),g||null,r,nn,Z,rn,an,on??`remix`,a)}catch(t){throw Error(`Error on page: ${e}\n${t instanceof Error?t.stack??t.message:String(t)}`)}}))},drainFinalizers:()=>jn.onIdle(),drainMainThread:async()=>{await Promise.all(yr),await kn.onIdle()},drainWrites:()=>fr.flush(),cleanupAfterFailure:async()=>{try{w.existsSync(N)&&await w.remove(N)}catch{}},destroyPool:hn,onNoRenderer:e=>{h(`[ssg] No SSR context available for ${e}, skipping`)}}),nr+=performance.now()-vr;let br=performance.now();for(let e of q){if(J)continue;let t=Ln.get(e);if(!t||!w.existsSync(t.cachedHtmlFile))continue;lr.has(t.finalOutFile)||dr.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=mr[t.normalizedKey];if(!n?.loaderDataFilePath||!w.existsSync(t.cachedLoaderFile))continue;let r=b(N,n.loaderDataFilePath);ur.has(r)||dr.push({source:t.cachedLoaderFile,destination:r})}await xe(dr);let xr=Math.round(performance.now()-br);tr+=xr;let Sr=or+sr,Cr=(cr/1024/1024).toFixed(2),wr=0;if(!J){try{let e=JSON.stringify(mr)!==pr;e&&await je(K,mr),wr=await It(G,mr,q,e)}catch{}if(Rn)try{await ue(Rn,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let Tr=performance.now()-Wt,Er=qe(dn),Dr={renderedCount:or,cachedCount:sr,renderedSize:cr,totalPages:Sr,prunedCount:wr,clientBuildMs:Math.round(C),serverBuildMs:Math.round(T),ssrImportMs:Math.round(ne),workerPoolSetupMs:Math.round(ir),workerUsed:Er!==null&&!ar,workerCount:Er?.totalWorkers??0,fallbackMainThread:ar,ssrP50Ms:$(Bn,50),ssrP95Ms:$(Bn,95),ssrP99Ms:$(Bn,99),crittersP50Ms:$(Hn,50),crittersP95Ms:$(Hn,95),writeP50Ms:$(Un,50),writeP95Ms:$(Un,95),routerTimingCount:Q.count,routerMatchAvgMs:Q.count>0?Q.matchMs/Q.count:0,routerResolveAvgMs:Q.count>0?Q.resolveMs/Q.count:0,routerLoadersAvgMs:Q.count>0?Q.loadersMs/Q.count:0,routerRenderAvgMs:Q.count>0?Q.renderMs/Q.count:0,routerHelmetAvgMs:Q.count>0?Q.helmetMs/Q.count:0,routerTotalAvgMs:Q.count>0?Q.totalMs/Q.count:0,pagesPerSecond:Sr>0&&Tr>0?Math.round(Sr/(Tr/1e3)*10)/10:0,pipeline:{renderedPageCount:$n,cachedPageCount:er,clientBuildMs:Math.round(C),serverBuildMs:Math.round(T),ssrImportMs:Math.round(ne),workerPoolSetupMs:Math.round(ir),routePreparationMs:Math.round(ln),workerTransportMs:Math.round(Zn),workerRoundTripMs:Math.round(Zn),workerTransportAvgMs:Qn>0?Math.round(Zn/Qn):0,finalizeP50Ms:$(Vn,50),finalizeP95Ms:$(Vn,95),assetCollectionMs:Math.round(Wn),beforeHookMs:Math.round(Gn),htmlAssemblyMs:Math.round(Kn),onPageRenderedHookMs:Math.round(qn),criticalCssP50Ms:$(Hn,50),criticalCssP95Ms:$(Hn,95),cacheWriteMs:Math.round(0+fr.writeTimeMs()),cachedOutputMs:Math.round(Xn),renderQueueDrainMs:Math.round(nr),renderPipelineSettleMs:Math.round(nr),outputLinkMs:Math.round(tr)}};D?.({name:`Render pages`,duration:Tr,success:!0,details:`${Sr} pages (${or} new, ${sr} cached, ${Cr} MB)`,metrics:Dr}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(Tr),success:!0,details:`${Sr} pages / ${or} new / ${sr} cached / ${Cr} MB`,metrics:Dr})}`);let Or=performance.now(),kr=Ot(Mn);if(await Ae(b(N,`static-loader-data-manifest-${L}.json`),kr),await gt(b(P,`ssr`),5,J?`turbo-ssr`:ee(R)),Bt(),vn?.dispose)try{await vn.dispose()}catch{}let Ar=Ye.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;Ar&&!Ar.disabled&&Ar.generateSW&&await Ar.generateSW();let jr=Math.round(performance.now()-S);D?.({name:`Static loader data`,duration:performance.now()-Or,success:!0,details:`${Nn} loader data files`,metrics:{loaderDataFileCount:Nn}}),await E?.(m),await Lt(N);let Mr=Oe(N),Nr=await Fe(N,jr,P,{outputFiles:Mr,manifestPath:b(ye,`dist`,...Dt,`manifest.json`)});Ie(N,Nr),D?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(jr/1e3).toFixed(1)}s, JS: ${(Nr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(Nr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:jr,totalPages:Nr.pages.length,jsSize:Nr.totalJSBundleSize,cssSize:Nr.totalCSSBundleSize}});let Pr=new Set(Mr),Fr=(ze?.extraFiles??[]).filter(e=>!Pr.has(e)&&!Gt.clientFiles.includes(e)&&w.existsSync(b(N,e)));await Ee(b(P,`ssg-output.json`),be,N,De(q,mr,ot).concat(`static-loader-data-manifest-${L}.json`).concat(`page-source.json`),Gt.clientFiles,Mr,Fr)}async function It(e,t,n=[],r=!1){try{if(!w.existsSync(e))return 0;let i=b(e,`.prune-state`);if(!r)try{let e=await w.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await w.readdir(e),o=new Set,s=new Set([...Object.keys(t),...n]);for(let e of s){let t=k.createHash(`md5`).update(e).digest(`hex`);o.add(`${t}.html`),o.add(`${t}.json`)}let c=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!o.has(t)&&(await w.remove(b(e,t)),c++);return await w.writeFile(i,String(Date.now()),`utf8`),c}catch{return 0}}async function Lt(e){try{Dt.length>0?await w.remove(b(e,...Dt)):await Promise.all([w.remove(b(e,`manifest.json`)),w.remove(b(e,`ssr-manifest.json`))])}catch{}}function Rt(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function zt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return m(`Error formatting html: ${t instanceof Error?t.message:String(t)}`),e}return e}function Bt(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function Y({template:e,ssrEntry:t,onBeforePageRender:i,entry:a,rootContainerId:s,onPageRendered:c}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d)=>{try{let f=u.originalUrl??u.url??`/`,p=await l.ssrLoadModule(t),m=p.createRoot,h=await m(!1,f),g=o(h,p),{app:_,base:ee}=h,[v=`/`,y=``]=f.split(`?`),b=new URLSearchParams(y);if(!_&&b.has(`_data`))return g.handleLoader(u,d);let x=await l.transformIndexHtml(f,e),S=await i?.(f,x,h)||x,{appHTML:C,bodyAttributes:w,htmlAttributes:T,metaAttributes:te,styleTag:ne}=await g.render(n(v,ee));ne&&te.push(ne);let E=await Promise.all([t,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),re=new Set,O=new Set,k=async e=>{if(!e?.ssrTransformResult||O.has(e))return;O.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))re.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await k(t)}};await Promise.all(E.map(async e=>k(e)));let A=[...re].map(e=>he(r(l.config.base,e)));te.push(...A);let j=await pe({rootContainerId:s,appHTML:C,indexHTML:S,metaAttributes:te,bodyAttributes:w,htmlAttributes:T,initialState:null}),ie=await c?.(f,j,h)||j;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),D(u,d,ie,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));l.ssrFixStacktrace(t),m(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return l.middlewares.use(Bt),()=>{l.middlewares.use(u)}}}}async function X(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),o,s,c,l;if(r){o=e.root||a,s={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=s,n=s.entry||await me(o,t);c=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:b(o,n),l=await ie.readFile(b(o,t),`utf-8`)}else{let t=await re(e,`serve`,n,n);o=t.root||a,s={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=s,u=s.entry||await me(o,r),[d,f]=await Promise.all([ve(t,u),ie.readFile(b(o,r),`utf-8`)]);c=d,l=f}let{onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:p=!1}=s;if(process.env.__DEV_MODE_SSR=`true`,p){let{jsdomGlobal:e}=await import(`./jsdomGlobal-FnVQDCiZ.mjs`);e()}return await ne({...e,plugins:[...e.plugins??[],Y({template:l,ssrEntry:c,onBeforePageRender:u,onPageRendered:d,entry:s.entry||`src/main.ts`,rootContainerId:f})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function Vt(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await X(t,e);return await r.listen(),Ht(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){m(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Ht(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${p.bold(`${e}ms`)}`}n(`\n ${p.cyan(` VITE-REACT-SSG v${R} `)}`,{clear:!e.config.logger.hasWarned}),n(`${p.cyan(`\n VITE v${O}`)+p.dim(r)}\n`),n(p.green(` dev server running at:`)),e.printUrls()}var Ut=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};export{Ut as ShellStitcher,Ft as build,X as createServer,Vt as dev};
@@ -25,7 +25,7 @@ interface RouterRouteRecord {
25
25
  //#region src/types.d.ts
26
26
  /** Minimal router shape kept for the public SSG context without a DOM-router dependency. */
27
27
  interface Router {
28
- navigate?: (...args: any[]) => unknown;
28
+ navigate?: (...args: never[]) => unknown;
29
29
  state?: unknown;
30
30
  [key: string]: unknown;
31
31
  }
@@ -105,6 +105,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
105
105
  * @default 'zig-critters'
106
106
  */
107
107
  criticalCss?: 'zig-critters' | 'beasties' | false;
108
+ criticalCssMaxSize?: number;
108
109
  /**
109
110
  * Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
110
111
  * Falls back to beasties if the WASM binary is unavailable.
@@ -150,7 +151,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
150
151
  duration: number;
151
152
  success: boolean;
152
153
  details?: string;
153
- metrics?: Record<string, any>;
154
+ metrics?: Record<string, unknown>;
154
155
  }) => void;
155
156
  /**
156
157
  * The application's root container `id`.
@@ -177,11 +178,11 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
177
178
  router?: HasRouter extends true ? Router : undefined;
178
179
  routes: HasRouter extends true ? Readonly<RouteRecord[]> : undefined;
179
180
  routerOptions: HasRouter extends true ? RouterOptions : undefined;
180
- initialState: Record<string, any>;
181
+ initialState: Record<string, unknown>;
181
182
  isClient: boolean;
182
- onSSRAppRendered: (cb: Function) => void;
183
+ onSSRAppRendered: (cb: () => unknown) => void;
183
184
  triggerOnSSRAppRendered: (route: string, appHTML: string, appCtx: ViteReactSSGContext) => Promise<unknown[]>;
184
- transformState?: (state: any) => any;
185
+ transformState?: (state: unknown) => unknown;
185
186
  /**
186
187
  * Current router path on SSG, `undefined` on client side.
187
188
  */
@@ -192,7 +193,7 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
192
193
  routerType: 'remix' | 'single-page';
193
194
  }
194
195
  interface ViteReactSSGClientOptions {
195
- transformState?: (state: any) => any;
196
+ transformState?: (state: unknown) => unknown;
196
197
  registerComponents?: boolean;
197
198
  /**
198
199
  * The application's root container query selector.
@@ -208,6 +209,11 @@ interface ViteReactSSGClientOptions {
208
209
  useLegacyRender?: boolean;
209
210
  }
210
211
  interface CommonRouteOptions {
212
+ filePath?: string;
213
+ componentPath?: string;
214
+ locale?: string;
215
+ version?: string;
216
+ collection?: string;
211
217
  /**
212
218
  * Used to obtain static resources through manifest
213
219
  *
@@ -245,7 +251,7 @@ interface RouterOptions {
245
251
  routes: RouteRecord[];
246
252
  basename?: string;
247
253
  future?: Partial<RouterFutureConfig>;
248
- customCreateRouter?: (...args: any[]) => Router;
254
+ customCreateRouter?: (...args: never[]) => Router;
249
255
  }
250
256
  interface StyleCollector {
251
257
  collect: (app: ReactElement) => ReactElement;
@@ -25,7 +25,7 @@ interface RouterRouteRecord {
25
25
  //#region src/types.d.ts
26
26
  /** Minimal router shape kept for the public SSG context without a DOM-router dependency. */
27
27
  interface Router {
28
- navigate?: (...args: any[]) => unknown;
28
+ navigate?: (...args: never[]) => unknown;
29
29
  state?: unknown;
30
30
  [key: string]: unknown;
31
31
  }
@@ -105,6 +105,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
105
105
  * @default 'zig-critters'
106
106
  */
107
107
  criticalCss?: 'zig-critters' | 'beasties' | false;
108
+ criticalCssMaxSize?: number;
108
109
  /**
109
110
  * Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
110
111
  * Falls back to beasties if the WASM binary is unavailable.
@@ -150,7 +151,7 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
150
151
  duration: number;
151
152
  success: boolean;
152
153
  details?: string;
153
- metrics?: Record<string, any>;
154
+ metrics?: Record<string, unknown>;
154
155
  }) => void;
155
156
  /**
156
157
  * The application's root container `id`.
@@ -177,11 +178,11 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
177
178
  router?: HasRouter extends true ? Router : undefined;
178
179
  routes: HasRouter extends true ? Readonly<RouteRecord[]> : undefined;
179
180
  routerOptions: HasRouter extends true ? RouterOptions : undefined;
180
- initialState: Record<string, any>;
181
+ initialState: Record<string, unknown>;
181
182
  isClient: boolean;
182
- onSSRAppRendered: (cb: Function) => void;
183
+ onSSRAppRendered: (cb: () => unknown) => void;
183
184
  triggerOnSSRAppRendered: (route: string, appHTML: string, appCtx: ViteReactSSGContext) => Promise<unknown[]>;
184
- transformState?: (state: any) => any;
185
+ transformState?: (state: unknown) => unknown;
185
186
  /**
186
187
  * Current router path on SSG, `undefined` on client side.
187
188
  */
@@ -192,7 +193,7 @@ interface ViteReactSSGContext<HasRouter extends boolean = true> {
192
193
  routerType: 'remix' | 'single-page';
193
194
  }
194
195
  interface ViteReactSSGClientOptions {
195
- transformState?: (state: any) => any;
196
+ transformState?: (state: unknown) => unknown;
196
197
  registerComponents?: boolean;
197
198
  /**
198
199
  * The application's root container query selector.
@@ -208,6 +209,11 @@ interface ViteReactSSGClientOptions {
208
209
  useLegacyRender?: boolean;
209
210
  }
210
211
  interface CommonRouteOptions {
212
+ filePath?: string;
213
+ componentPath?: string;
214
+ locale?: string;
215
+ version?: string;
216
+ collection?: string;
211
217
  /**
212
218
  * Used to obtain static resources through manifest
213
219
  *
@@ -245,7 +251,7 @@ interface RouterOptions {
245
251
  routes: RouteRecord[];
246
252
  basename?: string;
247
253
  future?: Partial<RouterFutureConfig>;
248
- customCreateRouter?: (...args: any[]) => Router;
254
+ customCreateRouter?: (...args: never[]) => Router;
249
255
  }
250
256
  interface StyleCollector {
251
257
  collect: (app: ReactElement) => ReactElement;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bdocs/ssg",
3
3
  "type": "module",
4
- "version": "0.4.3",
4
+ "version": "0.4.4",
5
5
  "description": "A Vite plugin for static site generation (SSG) with React.",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
@@ -64,7 +64,7 @@
64
64
  "react": "^19.0.0",
65
65
  "react-dom": "^19.0.0",
66
66
  "styled-components": "^6.0.0",
67
- "vite": "^7.0.0 || ^8.0.0"
67
+ "vite": "^8.1.0"
68
68
  },
69
69
  "peerDependenciesMeta": {
70
70
  "beasties": {
@@ -105,7 +105,7 @@
105
105
  "styled-components": "6.0.5",
106
106
  "tsdown": "^0.21.9",
107
107
  "typescript": "^5.9.3",
108
- "vite": "^8.0.0",
108
+ "vite": "8.1.5",
109
109
  "vitest": "^3.0.0",
110
110
  "tsdown-config": "1.0.0"
111
111
  },