@bdocs/ssg 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/node.cjs CHANGED
@@ -1,3 +1,3 @@
1
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.2`;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=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].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=[...s,...l,...u];return o(Ce(n),[...new Set(d)].sort())?d.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);return!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`)?void 0:D(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function xe(e,t,n,r,i=[],a){let o=a||Ce(n),s=new Set(r),c=new Set(i);return Ee(e,D(t,i.length>0?[...c]:o.filter(e=>!s.has(e)),r,i.length>0?o.filter(e=>!s.has(e)&&!c.has(e)):[]))}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);return c.default.existsSync(r)&&I(r,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&&Ve.auxiliaryFiles.length===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.length===0&&ve(i,A,D,r,n,[]),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);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(),Jn=performance.now()-e}catch{Jn=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 Y=``,fn=``;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)Y+=c.default.readFileSync((0,s.join)(t,n),`utf-8`)+`
3
- `}Y&&(fn=u.default.createHash(`sha256`).update(Y).update(`\0`).update(e).digest(`hex`))}let pn={},mn={},X={},hn=null;if(G)for(let e of V){let t=O(e);X[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`)]);pn=JSON.parse(e),mn=JSON.parse(t),hn=oe(mn);let n=await Ct(D,mn,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])=>{X[e]=await ce({outDir:D,indexes:hn,ssrManifest:pn,routeSourceFile:t,root:m,clientHash:A,assetHashes:n,chunkPackMaps:r}),R.server&&(X[e]=`${X[e]}-${R.server}`),R.css&&(X[e]=`${X[e]}-${R.css}`)}));for(let e of V)X[e]||(X[e]=F)}let Z=await c.default.readFile((0,s.join)(D,w),`utf-8`);c.default.rmSync((0,s.join)(D,w)),Z=jt(Z,Xe);let gn=Z.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],_n=tt?null:ue({rootContainerId:mt,indexHTML:Z}),vn=(await import(`p-queue`)).default||await import(`p-queue`),yn=new vn({concurrency:pt}),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 V){let n=S[t.a(e).replace(/\/$/,``)]||S[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:Re(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let En=null;!G&&Xt&&(En=ee({routes:[...K],base:Zt,matchRouteBranchWithParams:Xt,serverManifest:qt,manifest:mn,ssrManifest:pn}));let Dn=dt({routes:V,outDir:D,ssgPagesDir:z,dirStyle:st,contextBase:Zt,fallbackHash:F,routeToSourceFileMap:S,sourceMeta:wn,routeToAssetHash:X}),On=U?void 0:(0,s.join)(k,`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=_e({writeFile:async(e,t)=>{await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeFile(e,t,`utf-8`)}}),rr=JSON.stringify(W),ir=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(!En)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();ue=new Set(await(ar.get(_)||En(b))),Pn+=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)),Sn[wt(_,g)]=e,Cn++}await h?.(_,t,f);let S=performance.now(),C=_n&&ie===Z?_n({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});In+=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();Rn++,Rn===1&&(zn=me);let he=await nt?.(_,pe,f)||pe;Rn--,Rn===0&&(Ln+=performance.now()-zn);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(Y){let e=te(E,fn,Y,`zig-critters`);try{let t=await kn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await J.extractCriticalCss(E,Y,{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,fn,Y,`beasties`),t=await kn.getOrCreate(e,async()=>{let e=await bn.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);Mn.push(Math.round(performance.now()-ve));let xe=performance.now();U?d&&Object.keys(d).length>0&&x&&await nr.enqueue((0,s.join)(D,x),JSON.stringify(d)):(await nr.enqueue(v,be),d&&Object.keys(d).length>0&&x?(await nr.enqueue(oe,JSON.stringify(d)),ir[y]={contentHash:se,mtime:ce?Math.round(ce):0,loaderDataFilePath:x,assetHash:e.routeAssetHash}):ir[y]={contentHash:se,mtime:ce?Math.round(ce):0,assetHash:e.routeAssetHash});let Se=performance.now()-xe;Nn.push(Math.round(Se)),jn.push(Math.round(performance.now()-ae)),Xn++,Un++,Qn+=be.length}let cr=performance.now(),lr=[];await vt({routes:V,canBypassClientBuild:L,getPlan:e=>ft(Dn,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=!$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[wt(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.stack}`)}},prepareRoute:e=>{!$t&&en===`remix`&&En&&ar.set(e.path,En(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`),Yn=!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)=>{Vn+=Math.max(0,r-(n.timings?.totalMs??0)),Hn++,n.timings&&(An.push(Math.round(n.timings.totalMs)),qn(n.timings));let i={...Jt,routePath:e},a=performance.now(),o=await tt?.(e,Z,i)||Z;Fn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await xn.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(yn.add(async()=>{try{let n={...Jt,routePath:e},i=performance.now(),a=await tt?.(e,Z,n)||Z;Fn+=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);An.push(Math.round(performance.now()-o)),qn(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:()=>xn.onIdle(),drainMainThread:async()=>{await Promise.all(lr),await yn.onIdle()},drainWrites:()=>nr.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`)}}),Kn+=performance.now()-cr;let ur=performance.now();for(let e of V){if(U)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)(D,n.loaderDataFilePath);er.has(r)||tr.push({source:t.cachedLoaderFile,destination:r})}await E(tr);let dr=Math.round(performance.now()-ur);Gn+=dr;let fr=Xn+Zn,pr=(Qn/1024/1024).toFixed(2),mr=0;if(!U){try{let e=JSON.stringify(ir)!==rr;e&&await Ee(B,ir),mr=await kt(z,ir,V,e)}catch{}if(On)try{await ae(On,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let hr=performance.now()-zt,gr=Be(an),_r={renderedCount:Xn,cachedCount:Zn,renderedSize:Qn,totalPages:fr,prunedCount:mr,clientBuildMs:Math.round(_),serverBuildMs:Math.round(v),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(v),ssrImportMs:Math.round(y),workerPoolSetupMs:Math.round(Jn),routePreparationMs:Math.round(rn),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)}};b?.({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=bt(Sn);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:`${Cn} loader data files`,metrics:{loaderDataFileCount:Cn}}),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}}),await xe((0,s.join)(k,`ssg-output.json`),Ae,D,Se(V,ir,st).concat(`static-loader-data-manifest-${M}.json`).concat(`page-source.json`),Bt.clientFiles,Sr)}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;
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;
package/dist/node.mjs CHANGED
@@ -1,3 +1,3 @@
1
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.2`;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=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].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=[...s,...c,...l];return o(Me(n),[...new Set(u)].sort())?u.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);return!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`)?void 0:Ee(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function Ae(e,t,n,r,i=[],a){let o=a||Me(n),s=new Set(r),c=new Set(i);return Fe(e,Ee(t,i.length>0?[...c]:o.filter(e=>!s.has(e)),r,i.length>0?o.filter(e=>!s.has(e)&&!c.has(e)):[]))}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 We(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()?We(r,t,n):a.isFile()&&Ue(t,r,n)}}function Ge(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)&&We(i,e,t)}catch{}}const Ke=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`];function qe(e,t){for(let n of Ke){let r=y(e,n);C.existsSync(r)&&Ue(e,r,t)}}function Je(e,t,n){try{C.removeSync(y(n,`hash-merkle.json`))}catch{}try{let n=k(`sha256`);Ge(e,n);let r=y(e,t);return C.existsSync(r)&&We(r,e,n),qe(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 Ye(e){return O.createHash(`md5`).update(e).digest(`hex`)}function Xe(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Ze(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 Qe(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 $e(e,t,n){let r=await Ze(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(Xe(o,e)){i.set(t,o.hash),a[t]=o;return}let s=Ye(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 Qe(n,a),i}function et(e){let t=O.createHash(`sha1`);return t.update(`v4`),t.update(`\0`),t.update(C.readFileSync(e)),t.digest(`hex`)}function tt(e,t){if(e)try{return et(e)}catch{}return t}function nt(e,t){try{return et(e)}catch{return t}}function rt({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 it(e){return e===null?null:e.poolMetrics()}function at(e,t){return v(t)?t:y(e,t)}function ot(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=W(r);n[t]=at(e,i)}return Object.freeze(n)}function st(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:ot(e.root,e.routeToSourceFileMap)})}function ct(e,t,n={}){let r=ot(e,n),i=t.map(t=>{let i=W(t.path),a=n[t.path],o=a?at(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 lt(e,t){return Object.freeze({...e,routeManifest:t})}const ut=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],dt=[`react`,`react-dom`];function ft(e){return Number.parseInt(D,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function pt(){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 mt(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 J(e){return e.map(e=>{if(Array.isArray(e))return J(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 ht(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 gt(e){try{let t=await C.readFile(e);return k(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function _t(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 vt(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 ht(e):[],a={};for(let t of i){let n=await gt(y(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=_t(t,e);r&&await gt(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 yt(e){return T(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...ft({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 bt(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,...ft({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:[...ut],external:[...dt]},plugins:[...J(e.viteConfig.plugins||[]),pt()]})}async function xt(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 vt(e.viteConfig.publicDir,t),Y(t,e.outDir),o=mt(y(e.clientCacheDir,`dist`),e.htmlEntry)}else{await w(yt({...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 vt(e.viteConfig.publicDir,u),o=mt(u,e.htmlEntry),await C.writeFile(l,i,`utf-8`),await Tt(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 St(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(bt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function Ct(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 wt(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 Y(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())Y(n,i);else if(r.isFile())try{C.linkSync(n,i)}catch{C.copyFileSync(n,i)}}}async function Tt(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 Et(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 Dt(e,t){return t===`nested`?y(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function Ot(e){return Object.freeze(e)}function kt(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,Ot({path:n,pathHash:r,cachedHtmlFile:y(e.ssgPagesDir,`${r}.html`),cachedLoaderFile:y(e.ssgPagesDir,`${r}.json`),finalOutFile:y(e.outDir,Dt(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 At(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function jt(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 Nt(e,t){return e>4&&!t}function Pt(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function Ft(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 It(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=jt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(Nt(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(!Ft(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=Pt(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):Ft(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!Ft(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(!Ft(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 Lt=Number.parseInt(D)>=5?[`.vite`]:[];function Rt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function zt(e,n){return`static-loader-data${t(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function Bt(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function Vt(e){let t=new Set;for(let n of Object.values(e)){Bt(n.file)&&t.add(n.file);for(let e of n.css||[])Bt(e)&&t.add(e);for(let e of n.imports||[])Bt(e)&&t.add(e);for(let e of n.dynamicImports||[])Bt(e)&&t.add(e)}return[...t]}async function Ht(e,t,n){return $e(e,Vt(t),n?y(n,`chunk-hashes.json`):void 0)}function Ut(e,n=`/`){let r=t(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Wt(e,t,n){let r=t?.[n];if(r)return v(r)?r:y(e,r)}function Gt(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,v(n)?b(e,n):n]))}function Kt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function qt(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=Je(p,j,P),I=st({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=Ct(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&&Re.auxiliaryFiles.length===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 rt({routePath:e,cacheItem:i,sourceContentHash:tt(D[r]||D[e]||Wt(p,t.sourceFiles,r)||Wt(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.length===0&&De(a,F,N,i,n,[]),s={};if(!o){C.existsSync(N)&&await C.remove(N);let e=y(z,`dist`);await vt(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[Ut(e,g)]=i.loaderDataFilePath)}}await we(n),await Pe(y(N,`static-loader-data-manifest-${L}.json`),Rt(s))}await Jt(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 Yt(N),await Ae(y(P,`ssg-output.json`),F,N,n,i);return}let We=await ie(r,`build`,i,i),Ge=Object.assign({},We.ssgOptions||{},n),{script:Ke=`sync`,mock:qe=!1,formatting:Ye=`none`,includedRoutes:Xe=Kt,onBeforePageRender:Ze,onPageRendered:Qe,dirStyle:$e=`flat`,includeAllRoutes:et=!1,format:at=`esm`,concurrency:ot=20,rootContainerId:ut=`root`,beastiesOptions:dt={},criticalCssMaxSize:ft}=Ge,pt=dt,mt=s(ft),J=Ge.turbo??!1,ht=y(P,`ssr`),gt=y(P,`ssr-cache-index.json`);if(R=y(ht,J?`turbo-ssr`:L),!J&&H)try{let e=(await C.readJson(gt))[F];if(typeof e==`string`){let t=Ct(ht,e);t&&(R=t)}}catch{}let _t=Et(ne(),wt),yt=()=>{};if(qe){let{jsdomGlobal:e}=await import(`./jsdomGlobal-FnVQDCiZ.mjs`);yt=e()}let bt={};try{if(C.existsSync(K)){let e=await C.readJson(K);bt=Ne(e,Object.keys(e))}}catch{}let Y=!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=bt[n];return rt({routePath:e,cacheItem:r,sourceContentHash:tt(D[n]||D[e]||Wt(p,t.sourceFiles,n)||Wt(p,t.sourceFiles,e),V),ssgPagesDir:G,requireAssetHash:!0})})&&(q=t.paths,Y=!0)}}catch{}let Dt=Y?``:await Se(We,ae),Ot=(J||H)&&C.existsSync(R)&&C.readdirSync(R).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,jt=null;if(!Y&&Ot&&at===`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&&(jt=import(e+y(t,n[0]).replace(/\\/g,`/`)).catch(()=>{}))}catch{}}let Mt=performance.now(),[Nt,Pt]=await Promise.all([xt({viteConfig:r,resolvedMode:We.mode,root:p,htmlEntry:A,outDir:N,clientCacheDir:z,finalCacheDir:P,docsDirName:j,initialClientHash:F,canBypassClientBuild:H,customLogger:_t,onStep:E,shouldSuppressLog:wt},()=>Je(p,j,P)),St({viteConfig:r,resolvedMode:We.mode,entry:ae,ssrEntry:Dt,ssgOut:R,format:at,canSkipSsrImport:Y,serverBuildSkipped:Ot,customLogger:_t,onStep:E,shouldSuppressLog:wt})]);if(m=Nt.outDir,fe=Nt.resolvedClientCacheDir,B=Nt.resolvedClientHash,V=Nt.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=Nt.durationMs,w=Pt.durationMs,!J)try{let e={};try{e=await C.readJson(gt)}catch{}e[B]=b(ht,R),await Fe(gt,e)}catch{}let Ft=at===`esm`&&process.platform===`win32`?`file://`:``,Bt=at===`esm`?`.mjs`:`.cjs`;Dt.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Vt=`combined`+Bt;try{if(C.existsSync(R)){let e=C.readdirSync(R).filter(e=>e.endsWith(Bt));e.length>0&&(Vt=e[0])}}catch{}let qt=Ft+y(R,Vt).replace(/\\/g,`/`),Qt=Vt.replace(/\.[^/.]+$/,``),$t=JSON.parse(await C.readFile(y(R,...Lt,`manifest.json`),`utf-8`)),en=null,tn=null,X=[],nn,rn=`/`,an,on=null,sn,cn=Xe;if(!Y){let t=e===void 0?f(import.meta.url):e,n=performance.now(),r=at===`esm`?await import(qt):t(qt);jt&&await jt.catch(()=>{}),re=performance.now()-n,nn=r.matchRouteBranchWithParams;let{createRoot:i,includedRoutes:a}=r;cn=a||Xe,en=await i(!1);let s=en;if(X=s.routes,rn=s.base,an=s.triggerOnSSRAppRendered,on=s.app,sn=s.routerType,X&&X.length>0)for(let e of X)e.path&&(e.filePath||e.entry)&&!D[e.path]&&(D[e.path]=e.filePath||e.entry);I=lt(I,ct(p,X,D)),tn=o(s,r)}let ln=``,un=0,dn=null,fn=null,pn=null,mn=!1;async function hn(){if(pn){await pn;return}let e=fn;e&&(pn=e.destroy(),await pn)}if(!Y){let e=performance.now(),{paths:t}=await xe(X);q=et?t:await cn(t,X||[]),q=Kt(q,X||[]),q=Array.from(new Set(q)),un+=performance.now()-e;try{await Fe(y(P,`routes-cache.json`),{paths:q,dirStyle:$e,base:g,sourceFiles:Gt(p,D)},0)}catch{}ln=y(R,Qt+Bt)}async function gn(){if(dn||mn||q.length<=4)return;mn=!0;let e=performance.now();try{ln=y(R,Qt+Bt);let{SsgWorkerPool:t}=await import(`./ssg-worker-pool-DArhALXL.mjs`);dn=new t({ssrEntryPath:ln,format:at===`esm`?`esm`:`cjs`}),fn=dn,await dn.ready(),ir=performance.now()-e}catch{ir=performance.now()-e,dn=null}}let _n=Ge.criticalCss??`zig-critters`,vn,yn;_n===`zig-critters`?(vn=await l({concurrency:Math.max(1,Math.min(ot,ee.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`&&pt!==!1&&(yn=await c(m,{publicPath:g,...pt}));let bn=``,xn=``;if(vn){let e=`unknown`;try{e=await vn.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)bn+=C.readFileSync(y(t,n),`utf-8`)+`
3
- `}bn&&(xn=O.createHash(`sha256`).update(bn).update(`\0`).update(e).digest(`hex`))}let Sn={},Cn={},Z={},wn=null;if(Y)for(let e of q){let t=W(e);Z[e]=bt[t]?.assetHash||F}else{let[e,t]=await Promise.all([C.readFile(y(N,...Lt,`ssr-manifest.json`),`utf-8`),C.readFile(y(N,...Lt,`manifest.json`),`utf-8`)]);Sn=JSON.parse(e),Cn=JSON.parse(t),wn=de(Cn);let n=await Ht(N,Cn,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])=>{Z[e]=await pe({outDir:N,indexes:wn,ssrManifest:Sn,routeSourceFile:t,root:p,clientHash:F,assetHashes:n,chunkPackMaps:r}),U.server&&(Z[e]=`${Z[e]}-${U.server}`),U.css&&(Z[e]=`${Z[e]}-${U.css}`)}));for(let e of q)Z[e]||(Z[e]=V)}let Tn=await C.readFile(y(N,A),`utf-8`);C.rmSync(y(N,A)),Tn=Xt(Tn,Ke);let En=Tn.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],Dn=Ze?null:he({rootContainerId:ut,indexHTML:Tn}),On=(await import(`p-queue`)).default||await import(`p-queue`),kn=new On({concurrency:ot}),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:nt(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let In=null;!Y&&nn&&(In=oe({routes:[...X],base:rn,matchRouteBranchWithParams:nn,serverManifest:$t,manifest:Cn,ssrManifest:Sn}));let Ln=kt({routes:q,outDir:N,ssgPagesDir:G,dirStyle:$e,contextBase:rn,fallbackHash:V,routeToSourceFileMap:D,sourceMeta:Pn,routeToAssetHash:Z}),Rn=J?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(bt),mr=Ne(bt,q),hr=new Map,gr=new Set;gr.add(G);for(let e of q){let t=$e===`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=zt(_,L);T=e,J&&await C.writeFile(y(N,e),JSON.stringify(s)),Mn[Ut(_,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:ut,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 Qe?.(_,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__ = { '${Ut(_,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>`,``),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:mt});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(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 oe=P+(a||``);oe&&(M=M.replace(`<head>`,`<head>${oe}`));let I=Ye===`none`?M:await Zt(M,Ye);Hn.push(Math.round(performance.now()-F));let le=performance.now();J?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 It({routes:q,canBypassClientBuild:H,getPlan:e=>At(Ln,e),isCached:e=>{if(J)return!1;try{return rt({routePath:e.path,cacheItem:bt[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:G})}catch{return!1}},onCacheHit:async e=>{let t=bt[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[Ut(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=>{!on&&sn===`remix`&&In&&hr.set(e.path,In(e.fetchUrl))},ensurePool:gn,getPool:()=>dn,getWorkerCount:()=>it(dn)?.totalWorkers??0,onWorkerFailure:async(e,t,n,r)=>{if(!tn)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{}dn=null,mn=!0;let i=await tn.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={...en,routePath:e},a=performance.now(),o=await Ze?.(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,rn,X,an,on,sn??`remix`,o))},scheduleMainThread:(e,t)=>{yr.push(kn.add(async()=>{try{let n={...en,routePath:e},r=performance.now(),i=await Ze?.(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 tn.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,rn,X,an,on,sn??`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: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||!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(!J){try{let e=JSON.stringify(mr)!==pr;e&&await Fe(K,mr),wr=await Jt(G,mr,q,e)}catch{}if(Rn)try{await ue(Rn,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let Tr=performance.now()-Mt,Er=it(fn),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(un),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=Rt(Mn);if(await Pe(y(N,`static-loader-data-manifest-${L}.json`),kr),await Tt(y(P,`ssr`),5,J?`turbo-ssr`:te(R)),yt(),vn?.dispose)try{await vn.dispose()}catch{}let Ar=We.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 Yt(N);let Mr=Me(N),Nr=await Be(N,jr,P,{outputFiles:Mr,manifestPath:y(fe,`dist`,...Lt,`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}}),await Ae(y(P,`ssg-output.json`),B,N,je(q,mr,$e).concat(`static-loader-data-manifest-${L}.json`).concat(`page-source.json`),Nt.clientFiles,Mr)}async function Jt(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 Yt(e){try{Lt.length>0?await C.remove(y(e,...Lt)):await Promise.all([C.remove(y(e,`manifest.json`)),C.remove(y(e,`ssr-manifest.json`))])}catch{}}function Xt(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?.message}`),e}return e}function Qt(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 $t({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(Qt),()=>{l.middlewares.use(u)}}}}async function en(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??[],$t({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 tn(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await en(t,e);return await r.listen(),X(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){m(`failed to start server: ${e?.message??e}`),process.exit(1)}}function X(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 nn=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{nn as ShellStitcher,qt as build,en as createServer,tn as dev};
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};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bdocs/ssg",
3
3
  "type": "module",
4
- "version": "0.4.2",
4
+ "version": "0.4.3",
5
5
  "description": "A Vite plugin for static site generation (SSG) with React.",
6
6
  "license": "MIT",
7
7
  "publishConfig": {