@bdocs/ssg 0.4.0 → 0.4.1

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/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-Y1Rvl_Nv.mjs";
1
+ import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-5bBDTafc.mjs";
2
2
  import { HelmetProps } from "react-helmet-async";
3
3
  import { ReactNode } from "react";
4
4
 
package/dist/node.cjs CHANGED
@@ -1,3 +1,3 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./router-adapter-DtnukOfG.cjs`),n=require(`./ssg-worker-payload-B_9N9o5p.cjs`);let r=require(`@bdocs/dui`),i=require(`node:module`),a=require(`node:os`);a=e.t(a,1);let o=require(`node:path`);o=e.t(o,1);let s=require(`fs-extra`);s=e.t(s,1);let c=require(`vite`),l=require(`node:crypto`);l=e.t(l,1);let u=require(`node:fs/promises`);u=e.t(u,1);let d=require(`node:fs`);d=e.t(d,1);const f=/import\("([^)]+)"\)/g;function p(e,t){let n=new Set;if(!t)return n;for(let r of t)m(e,r,n);return n}function m(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{m(e,t,n)}),n):n}function h(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(f);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=p(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 g(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=h(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}}async function ee(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}async function te(){try{let e=await import(`@bdocs/zig-critters`),t=e.processHtml||e.default?.processHtml;return t?{processHtml:t}:void 0}catch{return}}function ne(e,t,n){let r=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return l.default.createHash(`sha256`).update(n).update(`\0`).update(r).update(`\0`).update(t).digest(`hex`)}function _(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function re(e,t){let n=new Set(_(e)),r=_(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
- `):null}var ie=class{constructor(e=512){this.maxEntries=e,this.entries=new Map}getOrCreate(e,t){let n=this.entries.get(e);if(n)return n.promise;let r={promise:Promise.resolve(null),settled:!1},i=Promise.resolve().then(t).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{r.settled=!0,this.evictSettledEntries()});return r.promise=i,this.entries.set(e,r),this.evictSettledEntries(),i}get size(){return this.entries.size}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}}};const v=new Set([`.js`,`.mjs`,`.css`]);function y(e){let t=o.default.extname(e).toLowerCase();return v.has(t)}function ae(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 b(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])y(t)&&b(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])y(t)&&!n.has(t)&&b(e,t,n)}}async function x(e,t,n){if(n){let e=l.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,u.readFile)(o.default.join(e,t));r.set(t,n)}catch{}}));let i=l.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 oe(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:s,clientHash:c,assetHashes:l}=e,u=n;if(!u){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);u=ae(r)}let{byFile:d,bySrc:f}=u,p=o.default.relative(s,a).replace(/\\/g,`/`),m=new Set,h=f.get(p);if(h)b(d,h.file,m);else{let e=[p,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)y(t)&&b(d,t,m)}}if(m.size===0){if(!c)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return c}return x(t,Array.from(m).sort(),l)}const se=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function S(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 C({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>${se}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return S(S(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function ce({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${se}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return S(S(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 S(S(p,`html`,a),`body`,i)}async function w(e,t=`index.html`){let[,n]=[...(await s.default.readFile((0,o.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 T(e){return`<link rel="stylesheet" href="${e}">`}function le(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=E(e);r&&n.push(r)}}),n.join(``)}function E(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 D=`0.4.0`;async function ue(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&&O(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 de(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,o.join)(e.root,t))}const fe=/[:*?]/;function O(e){return e?fe.test(e):!1}async function pe(e,t){if(e!==t){await s.default.ensureDir((0,o.dirname)(t)),await s.default.remove(t);try{await s.default.link(e,t)}catch{await s.default.copy(e,t)}}}async function k(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(pe(r.source,r.destination)));await Promise.all(n)}function me({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 A(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function he(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,c=[...new Set(r)].sort(),l=[...new Set(i)].sort(),u=[...new Set(a)].sort();if(!o(e.clientFiles,c)||!o(e.pageFiles,l)||!o(e.auxiliaryFiles||[],u))return!1;let d=[...c,...l,...u];return o(be(n),[...new Set(d)].sort())?d.every(e=>s.default.existsSync(`${n}/${e}`)):!1}function ge(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 _e(e){try{let t=await s.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:A(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function ve(e,t,n,r,i=[],a){let o=a||be(n),s=new Set(r),c=new Set(i);return Ce(e,A(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 ye(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[j(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function be(e){let t=[],n=r=>{let i;try{i=s.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,o.relative)(e,i).split(o.sep).join(`/`))}};return n(e),t.sort()}function j(e){return!e||e===`/`?``:t.a(e).replace(/\/+$/,``)}function xe(e,t){let n=new Set(t.map(j)),r={};for(let[t,i]of Object.entries(e)){let e=j(t);n.has(e)&&(r[e]=i)}return r}async function Se(e,t){try{if(await s.default.readFile(e,`utf8`)===t)return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf8`),!0}async function Ce(e,t,n=2){try{let n=await s.default.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(e,t,{spaces:n}),!0}const M=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),N=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function P(e){try{return d.default.statSync(e).size}catch{return 0}}const F=`boltdocs-metrics.json`;function I(e){if(!e)return null;try{let t=(0,o.join)(e,F);return d.default.existsSync(t)?JSON.parse(d.default.readFileSync(t,`utf-8`)):null}catch{return null}}function L(e,t){try{let n=o.default.resolve(e,`..`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0}),d.default.writeFileSync((0,o.join)(e,F),JSON.stringify(t))}catch{}}async function we(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=I(n);if(e)return e.buildTime=t,e}let i=(0,o.join)(e,`.vite`),a=(0,o.join)(e,`assets`),s={},c=r.manifestPath||(0,o.join)(i,`manifest.json`);d.default.existsSync(c)&&(s=JSON.parse(await d.default.readFileSync(c,`utf-8`)));let l=0,u=0;for(let[,t]of Object.entries(s)){let{file:n,css:r=[]}=t,i=P((0,o.join)(e,n));l+=i;for(let t of r)u+=P((0,o.join)(e,t))}let f=0,p=0;if(d.default.existsSync(a)){let e=d.default.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=o.default.extname(t.name).toLowerCase(),n=(0,o.join)(a,t.name);M.has(e)?f+=P(n):N.has(e)&&p++}}let m=(0,o.join)(e,`index.html`),h=0,g=[];if(d.default.existsSync(m)){let e=P(m);h+=e,g.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let ee=r.outputFiles?[...r.outputFiles]:(()=>{try{return d.default.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of ee){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=P((0,o.join)(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);h+=n,g.push({route:e,htmlSize:n,htmlFile:t})}}let te={buildTime:t,totalJSBundleSize:l,totalCSSBundleSize:u,totalImagesSize:f,totalHTMLSize:h,fontCount:p,pages:g};return n&&L(n,te),te}function Te(e,t){let n=o.default.resolve(e,`..`,`.boltdocs`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0});let r=(0,o.join)(n,`performance.json`);d.default.writeFileSync(r,JSON.stringify(t,null,2))}function Ee(e,t){try{if(!s.default.existsSync(e))return!1;let n=s.default.readFileSync(e);return t.update(n),!0}catch{return!1}}const De=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`]),R=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`,`.webp`,`.png`,`.jpg`,`.jpeg`,`.gif`,`.ico`]);function Oe(e){let t=e.lastIndexOf(`.`);if(t===-1)return!1;let n=e.slice(t).toLowerCase();return R.has(n)}function z(e,t,n){let r;try{r=s.default.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`))continue;let r=(0,o.join)(e,i),a;try{a=s.default.statSync(r)}catch{continue}if(a.isDirectory()){if(De.has(i))continue;z(r,t,n)}else if(a.isFile()&&Oe(i)){let e=(0,o.relative)(t,r).replace(/\\/g,`/`);n.update(`${e}:${a.mtimeMs}:${a.size}\n`)}}}function B(e,t){let n=(0,i.createRequire)(n(`url`).pathToFileURL(__filename).href);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=(0,o.join)((0,o.dirname)(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);s.default.existsSync(i)&&z(i,e,t)}catch{}}function V(e,t,n){let r=[(0,o.join)(e,t,`public`),(0,o.join)(e,t,`src`)];for(let t of r)try{s.default.existsSync(t)&&z(t,e,n)}catch{}}const ke=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`,`pnpm-lock.yaml`,`package-lock.json`,`yarn.lock`];function Ae(e,t){for(let n of ke){let r=(0,o.join)(e,n);try{if(s.default.existsSync(r)){let e=s.default.statSync(r);t.update(`${n}:${e.mtimeMs}:${e.size}\n`)}}catch{}}}function je(e,t,n){try{s.default.removeSync((0,o.join)(n,`hash-merkle.json`))}catch{}try{let n=(0,l.createHash)(`sha256`);if(B(e,n),Ee((0,o.join)(e,`.boltdocs`,`compiled`,`manifest.json`),n))V(e,t,n);else{let r=(0,o.join)(e,t);s.default.existsSync(r)&&z(r,e,n)}return Ae(e,n),n.digest(`hex`)}catch(e){return(0,r.warn)(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),(0,l.createHash)(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Me(e){return l.default.createHash(`md5`).update(e).digest(`hex`)}function H(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Ne(e){if(e)try{let t=await s.default.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function Pe(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(n,{version:1,files:t},{spaces:0}),await s.default.move(n,e,{overwrite:!0})}catch{await s.default.remove(n).catch(()=>{})}}async function Fe(e,t,n){let r=await Ne(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=(0,o.join)(e,t);try{let e=await s.default.stat(n);if(!e.isFile())return;let o=r?.files[t];if(H(o,e)){i.set(t,o.hash),a[t]=o;return}let c=Me(await s.default.readFile(n));i.set(t,c),a[t]={hash:c,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await Pe(n,a),i}function Ie(e,t){if(e)try{let t=s.default.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{}return t}function Le({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 c=l.default.createHash(`md5`).update(e).digest(`hex`);return!(!s.default.existsSync((0,o.join)(i,`${c}.html`))||t.loaderDataFilePath&&!s.default.existsSync((0,o.join)(i,`${c}.json`)))}function Re(e){return e===null?null:e.poolMetrics()}function ze(e,t){return(0,o.isAbsolute)(t)?t:(0,o.join)(e,t)}function Be(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=j(r);n[t]=ze(e,i)}return Object.freeze(n)}function Ve(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:Be(e.root,e.routeToSourceFileMap)})}function He(e,t,n={}){let r=Be(e,n),i=t.map(t=>{let i=j(t.path),a=n[t.path],o=a?ze(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 Ue(e,t){return Object.freeze({...e,routeManifest:t})}const We=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],Ge=[`react`,`react-dom`];function Ke(e){return Number.parseInt(c.version,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function qe(){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 Je(e,t){let n=[],r=i=>{let a;try{a=s.default.readdirSync(i,{withFileTypes:!0})}catch{return}for(let s of a){if(s.name===`.vite`)continue;let a=(0,o.join)(i,s.name);if(s.isDirectory())r(a);else if(s.isFile()){let r=(0,o.relative)(e,a).split(o.sep).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function Ye(e){return e.map(e=>{if(Array.isArray(e))return Ye(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 Xe(e){let t=[],n=async r=>{let i;try{i=await s.default.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=(0,o.join)(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push((0,o.relative)(e,i).split(o.sep).join(`/`))}};return await n(e),t.sort()}async function U(e){try{let t=await s.default.readFile(e);return(0,l.createHash)(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function Ze(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e),r=(0,o.resolve)(n,t),i=(0,o.relative)(n,r);if(!(!i||i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)))return r}async function Qe(e,t){let n=(0,o.join)((0,o.resolve)(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await s.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&&s.default.existsSync(e)?await Xe(e):[],a={};for(let t of i){let n=await U((0,o.join)(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=Ze(t,e);r&&await U(r)===n&&await s.default.remove(r)}e&&s.default.existsSync(e)&&(await s.default.ensureDir(t),await s.default.copy(e,t,{overwrite:!0,errorOnExist:!1})),await s.default.ensureDir((0,o.resolve)(t,`..`)),await s.default.writeJson(n,{version:1,files:a})}function $e(e){return(0,c.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...Ke({input:{app:(0,o.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,o.isAbsolute)(t.build.outDir||``)?t.build.outDir||`dist`:(0,o.resolve)(e.root,t.build.outDir||`dist`))}}]})}function et(e){return(0,c.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,...Ke({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:[...We],external:[...Ge]},plugins:[...Ye(e.viteConfig.plugins||[]),qe()]})}async function tt(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,l=[],u=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),s.default.existsSync(e.outDir)&&await s.default.remove(e.outDir);let t=(0,o.join)(e.clientCacheDir,`dist`);await Qe(e.viteConfig.publicDir,t),at(t,e.outDir),l=Je((0,o.join)(e.clientCacheDir,`dist`),e.htmlEntry)}else{await(0,c.build)($e({...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,o.join)(e.finalCacheDir,`client-cache`,i);let f=(0,o.join)(r,`client-hash.txt`);await s.default.ensureDir(r);let p=(0,o.join)(r,`dist`);s.default.existsSync(p)&&await s.default.remove(p),await s.default.copy(n,p,{overwrite:!0,errorOnExist:!1}),await Qe(e.viteConfig.publicDir,p),l=Je(p,e.htmlEntry),await s.default.writeFile(f,i,`utf-8`),await ot((0,o.join)(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-u,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:l}}async function nt(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};s.default.existsSync(e.ssgOut)&&await s.default.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await(0,c.build)(et(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function rt(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e,t),r=(0,o.relative)((0,o.resolve)(e),n);if(!(r===`..`||r.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(r)))try{let t=s.default.realpathSync(e),r=s.default.realpathSync(n),i=(0,o.relative)(t,r);return i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)||!s.default.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function it(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 at(e,t){let n=s.default.readdirSync(e,{withFileTypes:!0});s.default.mkdirSync(t,{recursive:!0});for(let r of n){let n=(0,o.join)(e,r.name),i=(0,o.join)(t,r.name);if(r.isDirectory())at(n,i);else if(r.isFile())try{s.default.linkSync(n,i)}catch{s.default.copyFileSync(n,i)}}}async function ot(e,t=5,n){try{if(!s.default.existsSync(e))return;let r=await s.default.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=(0,o.join)(e,t.name),r=await s.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 s.default.remove((0,o.join)(e,t.name))}catch{}}function st(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 W(e,t){return t===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function ct(e){return Object.freeze(e)}function lt(e){let n=new Map;for(let r of e.routes){let i=l.default.createHash(`md5`).update(r).digest(`hex`),a=j(r),s=e.routeToSourceFileMap[a]||e.routeToSourceFileMap[r],c=s?e.sourceMeta.get(s):void 0;n.set(r,ct({path:r,pathHash:i,cachedHtmlFile:(0,o.join)(e.ssgPagesDir,`${i}.html`),cachedLoaderFile:(0,o.join)(e.ssgPagesDir,`${i}.json`),finalOutFile:(0,o.join)(e.outDir,W(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 ut(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function dt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function ft(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function pt(e,t){return e>4&&!t}function G(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function K(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 mt(e){let t=[],n=new Set,r=e.getPool(),i=ft(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=dt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(pt(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=ft(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(!K(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=G(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):K(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!K(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=ft(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(!K(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 ht=Number.parseInt(c.version)>=5?[`.vite`]:[];function gt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function _t(e,n){return`static-loader-data${t.a(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function vt(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function yt(e){let t=new Set;for(let n of Object.values(e)){vt(n.file)&&t.add(n.file);for(let e of n.css||[])vt(e)&&t.add(e);for(let e of n.imports||[])vt(e)&&t.add(e);for(let e of n.dynamicImports||[])vt(e)&&t.add(e)}return[...t]}async function bt(e,t,n){return Fe(e,yt(t),n?(0,o.join)(n,`chunk-hashes.json`):void 0)}function xt(e,n=`/`){let r=t.a(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function St(e,t,n){let r=t?.[n];if(r)return(0,o.isAbsolute)(r)?r:(0,o.join)(e,r)}function Ct(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,(0,o.isAbsolute)(n)?(0,o.relative)(e,n):n]))}function wt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Tt(e={},u={}){let d=process.env.MODE||process.env.NODE_ENV||e.mode||`production`;d!==process.env.NODE_ENV&&(process.env.NODE_ENV=d);let f=process.cwd(),p=u.root||f,m=u.build?.outDir||`dist`,h=u.base||`/`,_=performance.now(),v=0,y=0,b=0,{onFinished:x,onStep:S,routeToSourceFileMap:T={},cacheDir:E=`.boltdocs/build`,htmlEntry:D=`index.html`,entry:fe=await w(p,D)}=e,O=`docs`,pe=Object.values(T);if(pe.length>0){let e=pe[0],t=(0,o.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(O=t[0])}let A=(0,o.isAbsolute)(m)?m:(0,o.join)(p,m),M=(0,o.isAbsolute)(E)?E:(0,o.join)(p,E),N=je(p,O,M),P=Ve({root:p,outDir:A,cacheDir:M,base:h,mode:d,entry:fe,htmlEntry:D,docsDirName:O,clientHash:N,routeToSourceFileMap:T}),F=P.clientHash.substring(0,12),I=(0,o.join)(P.cacheDir,`ssr`,F),L=(0,o.join)(P.cacheDir,`client-cache`,P.clientHash),Ee=L,De=N,R=N,Oe=(0,o.join)(L,`client-hash.txt`),z=!1;try{s.default.existsSync(Oe)&&s.default.existsSync((0,o.join)(L,`dist`))&&(z=(await s.default.readFile(Oe,`utf-8`)).trim()===N)}catch{}let B=(0,o.join)(M,`ssg-pages`),V=(0,o.join)(M,`ssg-cache.json`),ke=(0,o.join)(M,`ssg-output.json`),Ae=await _e(ke),Me=Ae!==void 0&&Ae.auxiliaryFiles.length===0;z&&(ge(Ae,be((0,o.join)(L,`dist`)),D)||(z=!1));let H=[],Ne=!1,Pe=(e.dirStyle||u.ssgOptions?.dirStyle)??`flat`;if(z&&Me&&Pe!==`nested`){let e=(0,o.join)(M,`routes-cache.json`);try{if(s.default.existsSync(e)&&s.default.existsSync(V)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`)),n=xe(JSON.parse(s.default.readFileSync(V,`utf-8`)),t.paths);if(t.dirStyle===Pe&&t.base===h){let e=t.paths.every(e=>{let r=j(e),i=n[r];return Le({routePath:e,cacheItem:i,sourceContentHash:Ie(T[r]||T[e]||St(p,t.sourceFiles,r)||St(p,t.sourceFiles,e),R),ssgPagesDir:B,requireAssetHash:!0})});t.paths.length>0&&e&&(H=t.paths,Ne=!0)}}}catch{}}if(Ne){let e=performance.now(),t={};try{s.default.existsSync(V)&&(t=xe(JSON.parse(s.default.readFileSync(V,`utf-8`)),H))}catch{}let n=[...ye(H,t,Pe===`nested`?`nested`:`flat`),`static-loader-data-manifest-${F}.json`],r=be((0,o.join)(L,`dist`)).filter(e=>e!==D),i=await _e(ke),a=i?.auxiliaryFiles.length===0&&he(i,N,A,r,n,[]),c={};if(!a){s.default.existsSync(A)&&await s.default.remove(A);let e=(0,o.join)(L,`dist`);await Qe(u.publicDir,e),await s.default.copy(e,A);let n=[];for(let e of H){let r=l.default.createHash(`md5`).update(e).digest(`hex`),i=(0,o.join)(B,`${r}.html`),a=(0,o.join)(B,`${r}.json`),u=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:(0,o.join)(A,u)}),s.default.existsSync(a)){let r=j(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:(0,o.join)(A,i.loaderDataFilePath)}),c[xt(e,h)]=i.loaderDataFilePath)}}await k(n),await Se((0,o.join)(A,`static-loader-data-manifest-${F}.json`),gt(c))}await Et(B,t,H);let d=Math.round(performance.now()-_);S?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),S?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),S?.({name:`Render pages`,duration:0,success:!0,details:`${H.length} pages (all cached)`}),S?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(d/1e3).toFixed(1)}s, all cached`});let f=Math.round(performance.now()-e),p={renderedPageCount:0,cachedPageCount:H.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:f,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:f};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${H.length} pages / 0 new / ${H.length} cached`,metrics:{renderedCount:0,cachedCount:H.length,renderedSize:0,totalPages:H.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:p}})}`),await x?.(m),await Dt(A),await ve((0,o.join)(M,`ssg-output.json`),N,A,n,r);return}let Fe=await(0,c.resolveConfig)(u,`build`,d,d),ze=Object.assign({},Fe.ssgOptions||{},e),{script:Be=`sync`,mock:We=!1,formatting:Ge=`none`,includedRoutes:Ke=wt,onBeforePageRender:qe,onPageRendered:Je,dirStyle:Ye=`flat`,includeAllRoutes:Xe=!1,format:U=`esm`,concurrency:Ze=20,rootContainerId:$e=`root`,beastiesOptions:et={}}=ze,at=et,W=ze.turbo??!1,ct=(0,o.join)(M,`ssr`),dt=(0,o.join)(M,`ssr-cache-index.json`);if(I=(0,o.join)(ct,W?`turbo-ssr`:F),!W&&z)try{let e=(await s.default.readJson(dt))[N];if(typeof e==`string`){let t=rt(ct,e);t&&(I=t)}}catch{}let ft=st((0,c.createLogger)(),it),pt=()=>{};if(We){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));pt=e()}let G={};try{if(s.default.existsSync(V)){let e=await s.default.readJson(V);G=xe(e,Object.keys(e))}}catch{}let K=!1;if(z)try{let e=(0,o.join)(M,`routes-cache.json`);if(s.default.existsSync(e)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=j(e),r=G[n];return Le({routePath:e,cacheItem:r,sourceContentHash:Ie(T[n]||T[e]||St(p,t.sourceFiles,n)||St(p,t.sourceFiles,e),R),ssgPagesDir:B,requireAssetHash:!0})})&&(H=t.paths,K=!0)}}catch{}let vt=K?``:await de(Fe,fe),yt=(W||z)&&s.default.existsSync(I)&&s.default.readdirSync(I).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,Tt=performance.now(),[q,At]=await Promise.all([tt({viteConfig:u,resolvedMode:Fe.mode,root:p,htmlEntry:D,outDir:A,clientCacheDir:L,finalCacheDir:M,docsDirName:O,initialClientHash:N,canBypassClientBuild:z,customLogger:ft,onStep:S,shouldSuppressLog:it},()=>je(p,O,M)),nt({viteConfig:u,resolvedMode:Fe.mode,entry:fe,ssrEntry:vt,ssgOut:I,format:U,canSkipSsrImport:K,serverBuildSkipped:yt,customLogger:ft,onStep:S,shouldSuppressLog:it})]);if(m=q.outDir,Ee=q.resolvedClientCacheDir,De=q.resolvedClientHash,R=q.pageContentFallbackHash,F=De.substring(0,12),v=q.durationMs,y=At.durationMs,!W)try{let e={};try{e=await s.default.readJson(dt)}catch{}e[De]=(0,o.relative)(ct,I),await Ce(dt,e)}catch{}let jt=U===`esm`&&process.platform===`win32`?`file://`:``,Mt=U===`esm`?`.mjs`:`.cjs`;vt.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Nt=`combined`+Mt;try{if(s.default.existsSync(I)){let e=s.default.readdirSync(I).filter(e=>e.endsWith(Mt));e.length>0&&(Nt=e[0])}}catch{}let Pt=jt+(0,o.join)(I,Nt).replace(/\\/g,`/`),Ft=Nt.replace(/\.[^/.]+$/,``),It=JSON.parse(await s.default.readFile((0,o.join)(I,...ht,`manifest.json`),`utf-8`)),Lt=null,Rt=null,J=[],zt,Bt=`/`,Vt,Ht=null,Ut,Wt=Ke;if(!K){let e=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),n=performance.now(),r=U===`esm`?await import(Pt):e(Pt);b=performance.now()-n,zt=r.matchRouteBranchWithParams;let{createRoot:a,includedRoutes:o}=r;Wt=o||Ke,Lt=await a(!1);let s=Lt;if(J=s.routes,Bt=s.base,Vt=s.triggerOnSSRAppRendered,Ht=s.app,Ut=s.routerType,J&&J.length>0)for(let e of J)e.path&&(e.filePath||e.entry)&&!T[e.path]&&(T[e.path]=e.filePath||e.entry);P=Ue(P,He(p,J,T)),Rt=t.t(s,r)}let Gt=``,Kt=0,Y=null,qt=null,Jt=null,Yt=!1;async function Xt(){if(Jt){await Jt;return}let e=qt;e&&(Jt=e.destroy(),await Jt)}if(!K){let e=performance.now(),{paths:t}=await ue(J);H=Xe?t:await Wt(t,J||[]),H=wt(H,J||[]),H=Array.from(new Set(H)),Kt+=performance.now()-e;try{await Ce((0,o.join)(M,`routes-cache.json`),{paths:H,dirStyle:Ye,base:h,sourceFiles:Ct(p,T)},0)}catch{}Gt=(0,o.join)(I,Ft+Mt)}async function Zt(){if(Y||Yt||H.length<=4)return;Yt=!0;let e=performance.now();try{Gt=(0,o.join)(I,Ft+Mt);let{SsgWorkerPool:t}=await Promise.resolve().then(()=>require(`./ssg-worker-pool-CZPcmzdb.cjs`));Y=new t({ssrEntryPath:Gt,format:U===`esm`?`esm`:`cjs`}),qt=Y,await Y.ready(),Fn=performance.now()-e}catch{Fn=performance.now()-e,Y=null}}let Qt=ze.criticalCss??!1,$t,en;Qt===`zig-critters`?($t=await te(),$t||(0,r.warn)("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):Qt===`beasties`&&at!==!1&&(en=await ee(m,{publicPath:h,...at}));let tn=``;if($t){let e=(0,o.join)(A,`assets`);if(s.default.existsSync(e)){let t=s.default.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)tn+=s.default.readFileSync((0,o.join)(e,n),`utf-8`)+`
3
- `}}let nn={},rn={},an={},on=null;if(K)for(let e of H){let t=j(e);an[e]=G[t]?.assetHash||N}else{let[e,t]=await Promise.all([s.default.readFile((0,o.join)(A,...ht,`ssr-manifest.json`),`utf-8`),s.default.readFile((0,o.join)(A,...ht,`manifest.json`),`utf-8`)]);nn=JSON.parse(e),rn=JSON.parse(t),on=ae(rn);let n=await bt(A,rn,M);await Promise.all(Object.entries(T).map(async([e,t])=>{an[e]=await oe({outDir:A,indexes:on,ssrManifest:nn,routeSourceFile:t,root:p,clientHash:N,assetHashes:n})}));for(let e of H)an[e]||(an[e]=R)}let X=await s.default.readFile((0,o.join)(A,D),`utf-8`);s.default.rmSync((0,o.join)(A,D)),X=Ot(X,Be);let sn=qe?null:C({rootContainerId:$e,indexHTML:X}),cn=(await import(`p-queue`)).default||await import(`p-queue`),ln=new cn({concurrency:Ze}),un=new cn({concurrency:Math.min(a.default.cpus().length,4)}),dn=new cn({concurrency:Math.max(2,Math.min(a.default.cpus().length,6))}),fn={},pn=0,mn=new Map,hn=new Set;for(let e of H){let n=T[t.a(e).replace(/\/$/,``)]||T[e];n&&hn.add(n)}for(let e of hn)try{if(s.default.existsSync(e)){let t=s.default.statSync(e);mn.set(e,{hash:`${t.mtimeMs}:${t.size}`,mtimeMs:t.mtimeMs})}}catch{}let gn=null;!K&&zt&&(gn=g({routes:[...J],base:Bt,matchRouteBranchWithParams:zt,serverManifest:It,manifest:rn,ssrManifest:nn}));let _n=lt({routes:H,outDir:A,ssgPagesDir:B,dirStyle:Ye,contextBase:Bt,fallbackHash:R,routeToSourceFileMap:T,sourceMeta:mn,routeToAssetHash:an}),vn=new ie,yn=[],bn=[],xn=[],Sn=[],Cn=0,wn=0,Tn=0,En=0,Dn=0,On=0,kn=0,An=0,jn=0,Mn=0,Nn=0,Z={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function Pn(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 Fn=0,In=!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 Ln=0,Rn=0,zn=0,Bn=new Set,Vn=new Set,Hn=[],Un=me({writeFile:async(e,t)=>{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf-8`)}}),Wn=JSON.stringify(G),$=xe(G,H),Gn=new Map,Kn=new Set;Kn.add(B);for(let e of H){let t=Ye===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;Kn.add((0,o.join)(A,(0,o.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;Kn.add((0,o.join)(A,`static-loader-data`,(0,o.dirname)(n)))}Kn.add((0,o.join)(A,`static-loader-data`)),await Promise.all([...Kn].map(e=>s.default.ensureDir(e)));async function qn(e,t,i,a,c,l,u,d,f,p,m,g,ee,te,_){let ie=performance.now(),{path:v,cachedHtmlFile:y,cachedLoaderFile:ae,normalizedKey:b,sourceContentHash:x,sourceMtimeMs:oe,fetchUrl:S}=e,C;if(!ee&&te===`remix`){if(!gn)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();C=new Set(await(Gn.get(v)||gn(S))),Cn+=performance.now()-e}else C=new Set;let w;if(d&&Object.keys(d).length>0){let e=_t(v,F);w=e,W&&await s.default.writeFile((0,o.join)(A,e),JSON.stringify(d)),fn[xt(v,h)]=e,pn++}await g?.(v,t,f);let T=performance.now(),E=sn&&_===X?sn({appHTML:t,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null}):await ce({rootContainerId:$e,appHTML:t,indexHTML:_,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null});Tn+=performance.now()-T;let D=ee?``:le(C),ue=u?E.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):E;D&&(ue=ue.replace(`<head>`,`<head>${D}`));let de=performance.now(),fe=await Je?.(v,ue,f)||ue;En+=performance.now()-de;let O=``;if(d&&Object.keys(d).length>0){let e=JSON.stringify(d).replace(/</g,`\\u003c`);O=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${xt(v,h)}': ${e} };`}let pe=n.t(u),k=fe,me=`<script>window.__VITE_REACT_SSG_HASH__ = '${F}';${O}${pe}<\/script>`,he=performance.now();if(k=k.replace(`<script>${se}<\/script>`,``),$t){if(tn){let e=ne(k,tn,`zig-critters`);try{let t=await vn.getOrCreate(e,async()=>(await $t.processHtml(k,tn)).match(/<style[^>]*data-zig-critters[^>]*>[\s\S]*?<\/style>/g)?.join(`\\n`)||null);t&&!k.includes(`data-zig-critters`)&&(k=k.replace(`</head>`,`${t}</head>`))}catch(e){(0,r.warn)(`[zig-critters] Failed to inline CSS for "${v}": ${e instanceof Error?e.message:String(e)}`)}}k=k.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(en){let e=ne(k,tn,`beasties`),t=await vn.getOrCreate(e,async()=>{let e=await un.add(()=>en.process(k));return re(k,e)});t&&!k.includes(t)&&(k=k.replace(`</head>`,`${t}</head>`)),k=k.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let ge=me+(l||``);ge&&(k=k.replace(`<head>`,`<head>${ge}`));let _e=Ge===`none`?k:await kt(k,Ge);xn.push(Math.round(performance.now()-he));let ve=performance.now();W?d&&Object.keys(d).length>0&&w&&await Un.enqueue((0,o.join)(A,w),JSON.stringify(d)):(await Un.enqueue(y,_e),d&&Object.keys(d).length>0&&w?(await Un.enqueue(ae,JSON.stringify(d)),$[b]={contentHash:x,mtime:oe?Math.round(oe):0,loaderDataFilePath:w,assetHash:e.routeAssetHash}):$[b]={contentHash:x,mtime:oe?Math.round(oe):0,assetHash:e.routeAssetHash});let ye=performance.now()-ve;Sn.push(Math.round(ye)),bn.push(Math.round(performance.now()-ie)),Ln++,An++,zn+=_e.length}let Jn=performance.now(),Yn=[];await mt({routes:H,canBypassClientBuild:z,getPlan:e=>ut(_n,e),isCached:e=>{if(W||!z)return!1;try{return Le({routePath:e.path,cacheItem:G[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:B})}catch{return!1}},onCacheHit:async e=>{let t=G[e.normalizedKey]?.loaderDataFilePath,n=t?(0,o.join)(A,t):void 0,r=!Bn.has(e.finalOutFile),i=!!n&&!Vn.has(n);r&&Bn.add(e.finalOutFile),i&&n&&Vn.add(n);let a=performance.now();try{r&&Hn.push({source:e.cachedHtmlFile,destination:e.finalOutFile}),n&&t&&s.default.existsSync(e.cachedLoaderFile)&&(i&&Hn.push({source:e.cachedLoaderFile,destination:n}),fn[xt(e.path,h)]=t,pn++),Rn++,jn++,Dn+=performance.now()-a}catch(t){throw r&&Bn.delete(e.finalOutFile),i&&n&&Vn.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!Ht&&Ut===`remix`&&gn&&Gn.set(e.path,gn(e.fetchUrl))},ensurePool:Zt,getPool:()=>Y,getWorkerCount:()=>Re(Y)?.totalWorkers??0,onWorkerFailure:async(e,t,i,a)=>{if(!Rt)throw Error(`Error on page: ${e}\n${String(i)}`);(0,r.warn)(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),In=!0;try{await Xt()}catch{}Y=null,Yt=!0;let o=await Rt.render(e);return{path:e,appHTML:o.appHTML,metaAttributes:o.metaAttributes,bodyAttributes:o.bodyAttributes,htmlAttributes:o.htmlAttributes,styleTag:o.styleTag,timings:o.timings,routerContext:n.n(o.routerContext)}},onWorkerResult:async(e,t,n,r)=>{On+=Math.max(0,r-(n.timings?.totalMs??0)),kn++,n.timings&&(yn.push(Math.round(n.timings.totalMs)),Pn(n.timings));let i={...Lt,routePath:e},a=performance.now(),o=await qe?.(e,X,i)||X;wn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await dn.add(()=>qn(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,Bt,J,Vt,Ht,Ut??`remix`,o))},scheduleMainThread:(e,t)=>{Yn.push(ln.add(async()=>{try{let r={...Lt,routePath:e},i=performance.now(),a=await qe?.(e,X,r)||X;wn+=performance.now()-i;let o=performance.now(),{appHTML:s,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Rt.render(e);yn.push(Math.round(performance.now()-o)),Pn(p);let m=f?.loaderData;await qn(t,s,u,c,l,d,n.n(f),m||null,r,Bt,J,Vt,Ht,Ut??`remix`,a)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>dn.onIdle(),drainMainThread:async()=>{await Promise.all(Yn),await ln.onIdle()},drainWrites:()=>Un.flush(),cleanupAfterFailure:async()=>{try{s.default.existsSync(A)&&await s.default.remove(A)}catch{}},destroyPool:Xt,onNoRenderer:e=>{(0,r.warn)(`[ssg] No SSR context available for ${e}, skipping`)}}),Nn+=performance.now()-Jn;let Xn=performance.now();for(let e of H){if(W)continue;let t=_n.get(e);if(!t||!s.default.existsSync(t.cachedHtmlFile))continue;Bn.has(t.finalOutFile)||Hn.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=$[t.normalizedKey];if(!n?.loaderDataFilePath||!s.default.existsSync(t.cachedLoaderFile))continue;let r=(0,o.join)(A,n.loaderDataFilePath);Vn.has(r)||Hn.push({source:t.cachedLoaderFile,destination:r})}await k(Hn);let Zn=Math.round(performance.now()-Xn);Mn+=Zn;let Qn=Ln+Rn,$n=(zn/1024/1024).toFixed(2),er=0;if(!W)try{let e=JSON.stringify($)!==Wn;e&&await Ce(V,$),er=await Et(B,$,H,e)}catch{}let tr=performance.now()-Tt,nr=Re(qt),rr={renderedCount:Ln,cachedCount:Rn,renderedSize:zn,totalPages:Qn,prunedCount:er,clientBuildMs:Math.round(v),serverBuildMs:Math.round(y),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(Fn),workerUsed:nr!==null&&!In,workerCount:nr?.totalWorkers??0,fallbackMainThread:In,ssrP50Ms:Q(yn,50),ssrP95Ms:Q(yn,95),ssrP99Ms:Q(yn,99),crittersP50Ms:Q(xn,50),crittersP95Ms:Q(xn,95),writeP50Ms:Q(Sn,50),writeP95Ms:Q(Sn,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:Qn>0&&tr>0?Math.round(Qn/(tr/1e3)*10)/10:0,pipeline:{renderedPageCount:An,cachedPageCount:jn,clientBuildMs:Math.round(v),serverBuildMs:Math.round(y),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(Fn),routePreparationMs:Math.round(Kt),workerTransportMs:Math.round(On),workerRoundTripMs:Math.round(On),workerTransportAvgMs:kn>0?Math.round(On/kn):0,finalizeP50Ms:Q(bn,50),finalizeP95Ms:Q(bn,95),assetCollectionMs:Math.round(Cn),beforeHookMs:Math.round(wn),htmlAssemblyMs:Math.round(Tn),onPageRenderedHookMs:Math.round(En),criticalCssP50Ms:Q(xn,50),criticalCssP95Ms:Q(xn,95),cacheWriteMs:Math.round(0+Un.writeTimeMs()),cachedOutputMs:Math.round(Dn),renderQueueDrainMs:Math.round(Nn),renderPipelineSettleMs:Math.round(Nn),outputLinkMs:Math.round(Mn)}};S?.({name:`Render pages`,duration:tr,success:!0,details:`${Qn} pages (${Ln} new, ${Rn} cached, ${$n} MB)`,metrics:rr}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(tr),success:!0,details:`${Qn} pages / ${Ln} new / ${Rn} cached / ${$n} MB`,metrics:rr})}`);let ir=performance.now(),ar=gt(fn);await Se((0,o.join)(A,`static-loader-data-manifest-${F}.json`),ar),await ot((0,o.join)(M,`ssr`),5,W?`turbo-ssr`:(0,o.basename)(I)),pt();let or=Fe.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;or&&!or.disabled&&or.generateSW&&await or.generateSW();let sr=Math.round(performance.now()-_);S?.({name:`Static loader data`,duration:performance.now()-ir,success:!0,details:`${pn} loader data files`,metrics:{loaderDataFileCount:pn}}),await x?.(m),await Dt(A);let cr=be(A),lr=await we(A,sr,M,{outputFiles:cr,manifestPath:(0,o.join)(Ee,`dist`,...ht,`manifest.json`)});Te(A,lr),S?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(sr/1e3).toFixed(1)}s, JS: ${(lr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(lr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:sr,totalPages:lr.pages.length,jsSize:lr.totalJSBundleSize,cssSize:lr.totalCSSBundleSize}}),await ve((0,o.join)(M,`ssg-output.json`),De,A,ye(H,$,Ye).concat(`static-loader-data-manifest-${F}.json`),q.clientFiles,cr)}async function Et(e,t,n=[],r=!1){try{if(!s.default.existsSync(e))return 0;let i=(0,o.join)(e,`.prune-state`);if(!r)try{let e=await s.default.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await s.default.readdir(e),c=new Set,u=new Set([...Object.keys(t),...n]);for(let e of u){let t=l.default.createHash(`md5`).update(e).digest(`hex`);c.add(`${t}.html`),c.add(`${t}.json`)}let d=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!c.has(t)&&(await s.default.remove((0,o.join)(e,t)),d++);return await s.default.writeFile(i,String(Date.now()),`utf8`),d}catch{return 0}}async function Dt(e){try{ht.length>0?await s.default.remove((0,o.join)(e,...ht)):await Promise.all([s.default.remove((0,o.join)(e,`manifest.json`)),s.default.remove((0,o.join)(e,`ssr-manifest.json`))])}catch{}}function Ot(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function kt(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,r.error)(`Error formatting html: ${t?.message}`),e}return e}function q(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 At({template:e,ssrEntry:n,onBeforePageRender:i,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d)=>{try{let r=u.originalUrl??u.url??`/`,f=await l.ssrLoadModule(n),p=f.createRoot,m=await p(!1,r),h=t.t(m,f),{app:g,base:ee}=m,[te=`/`,ne=``]=r.split(`?`),_=new URLSearchParams(ne);if(!g&&_.has(`_data`))return h.handleLoader(u,d);let re=await l.transformIndexHtml(r,e),ie=await i?.(r,re,m)||re,{appHTML:v,bodyAttributes:y,htmlAttributes:ae,metaAttributes:b,styleTag:x}=await h.render(t.i(te,ee));b.push(x);let oe=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),se=new Set,S=new Set,C=async e=>{if(!e?.ssrTransformResult||S.has(e))return;S.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`))se.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await C(t)}};await Promise.all(oe.map(async e=>C(e)));let w=[...se].map(e=>T(t.n(l.config.base,e)));b.push(...w);let le=await ce({rootContainerId:o,appHTML:v,indexHTML:ie,metaAttributes:b,bodyAttributes:y,htmlAttributes:ae,initialState:null}),E=await s?.(r,le,m)||le;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.send)(u,d,E,`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),(0,r.error)(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return l.middlewares.use(q),()=>{l.middlewares.use(u)}}}}async function jt(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),s,l,d,f;if(r){s=e.root||a,l={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=l,n=l.entry||await w(s,t);d=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:(0,o.join)(s,n),f=await u.default.readFile((0,o.join)(s,t),`utf-8`)}else{let t=await(0,c.resolveConfig)(e,`serve`,n,n);s=t.root||a,l={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=l,p=l.entry||await w(s,r),[m,h]=await Promise.all([de(t,p),u.default.readFile((0,o.join)(s,r),`utf-8`)]);d=m,f=h}let{onBeforePageRender:p,onPageRendered:m,rootContainerId:h=`root`,mock:g=!1}=l;if(process.env.__DEV_MODE_SSR=`true`,g){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));e()}return await(0,c.createServer)({...e,plugins:[...e.plugins??[],At({template:f,ssrEntry:d,onBeforePageRender:p,onPageRendered:m,entry:l.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 Mt(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await jt(t,e);return await r.listen(),Nt(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Nt(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,i=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);i+=` ready in ${r.colors.bold(`${e}ms`)}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${D} `)}`,{clear:!e.config.logger.hasWarned}),n(`${r.colors.cyan(`\n VITE v${c.version}`)+r.colors.dim(i)}\n`),n(r.colors.green(` dev server running at:`)),e.printUrls()}var Pt=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=Pt,exports.build=Tt,exports.createServer=jt,exports.dev=Mt;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./router-adapter-DtnukOfG.cjs`),n=require(`./ssg-worker-payload-B_9N9o5p.cjs`);let r=require(`@bdocs/dui`),i=require(`node:module`),a=require(`node:os`);a=e.t(a,1);let o=require(`node:path`);o=e.t(o,1);let s=require(`fs-extra`);s=e.t(s,1);let c=require(`vite`),l=require(`node:crypto`);l=e.t(l,1);let u=require(`node:fs/promises`);u=e.t(u,1);let d=require(`node:fs`);d=e.t(d,1);const f=/import\("([^)]+)"\)/g;function p(e,t){let n=new Set;if(!t)return n;for(let r of t)m(e,r,n);return n}function m(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{m(e,t,n)}),n):n}function h(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(f);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=p(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 g(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=h(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}}async function ee(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}async function _(){try{let e=await import(`@bdocs/zig-critters`),t=e.extractCriticalCss||e.default?.extractCriticalCss;return t?{extractCriticalCss:t}:void 0}catch{return}}async function te(e={}){try{let{createZigCrittersPool:t}=await Promise.resolve().then(()=>require(`./zig-pool-Cpw16nuK.cjs`)),n=await t(e);if(n)return{extractCriticalCss:(e,t,r)=>n.extractCriticalCss(e,t,r),dispose:()=>n.dispose()}}catch{}return _()}function ne(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return l.default.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function v(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function re(e,t){let n=new Set(v(e)),r=v(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
+ `):null}var y=class{constructor(e=512){this.maxEntries=e,this.entries=new Map}getOrCreate(e,t){let n=this.entries.get(e);if(n)return n.promise;let r={promise:Promise.resolve(null),settled:!1},i=Promise.resolve().then(t).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{r.settled=!0,this.evictSettledEntries()});return r.promise=i,this.entries.set(e,r),this.evictSettledEntries(),i}get size(){return this.entries.size}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}}};const ie=new Set([`.js`,`.mjs`,`.css`]);function b(e){let t=o.default.extname(e).toLowerCase();return ie.has(t)}function x(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 S(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])b(t)&&S(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])b(t)&&!n.has(t)&&S(e,t,n)}}async function C(e,t,n){if(n){let e=l.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,u.readFile)(o.default.join(e,t));r.set(t,n)}catch{}}));let i=l.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 ae(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:s,clientHash:c,assetHashes:l}=e,u=n;if(!u){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);u=x(r)}let{byFile:d,bySrc:f}=u,p=o.default.relative(s,a).replace(/\\/g,`/`),m=new Set,h=f.get(p);if(h)S(d,h.file,m);else{let e=[p,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)b(t)&&S(d,t,m)}}if(m.size===0){if(!c)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return c}return C(t,Array.from(m).sort(),l)}const oe=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function w(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 T({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${oe}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return w(w(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 se({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${oe}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return w(w(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 w(w(p,`html`,a),`body`,i)}async function ce(e,t=`index.html`){let[,n]=[...(await s.default.readFile((0,o.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function le(e){return`<link rel="stylesheet" href="${e}">`}function ue(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=E(e);r&&n.push(r)}}),n.join(``)}function E(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 D=`0.4.1`;async function de(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&pe(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 fe(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,o.join)(e.root,t))}const O=/[:*?]/;function pe(e){return e?O.test(e):!1}async function k(e,t){if(e!==t){await s.default.ensureDir((0,o.dirname)(t)),await s.default.remove(t);try{await s.default.link(e,t)}catch{await s.default.copy(e,t)}}}async function A(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(k(r.source,r.destination)));await Promise.all(n)}function me({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 j(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function he(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,c=[...new Set(r)].sort(),l=[...new Set(i)].sort(),u=[...new Set(a)].sort();if(!o(e.clientFiles,c)||!o(e.pageFiles,l)||!o(e.auxiliaryFiles||[],u))return!1;let d=[...c,...l,...u];return o(be(n),[...new Set(d)].sort())?d.every(e=>s.default.existsSync(`${n}/${e}`)):!1}function ge(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 _e(e){try{let t=await s.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:j(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function ve(e,t,n,r,i=[],a){let o=a||be(n),s=new Set(r),c=new Set(i);return Ce(e,j(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 ye(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[M(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function be(e){let t=[],n=r=>{let i;try{i=s.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,o.relative)(e,i).split(o.sep).join(`/`))}};return n(e),t.sort()}function M(e){return!e||e===`/`?``:t.a(e).replace(/\/+$/,``)}function xe(e,t){let n=new Set(t.map(M)),r={};for(let[t,i]of Object.entries(e)){let e=M(t);n.has(e)&&(r[e]=i)}return r}async function Se(e,t){try{if(await s.default.readFile(e,`utf8`)===t)return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf8`),!0}async function Ce(e,t,n=2){try{let n=await s.default.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(e,t,{spaces:n}),!0}const N=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),P=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function F(e){try{return d.default.statSync(e).size}catch{return 0}}const I=`boltdocs-metrics.json`;function L(e){if(!e)return null;try{let t=(0,o.join)(e,I);return d.default.existsSync(t)?JSON.parse(d.default.readFileSync(t,`utf-8`)):null}catch{return null}}function we(e,t){try{let n=o.default.resolve(e,`..`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0}),d.default.writeFileSync((0,o.join)(e,I),JSON.stringify(t))}catch{}}async function Te(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=L(n);if(e)return e.buildTime=t,e}let i=(0,o.join)(e,`.vite`),a=(0,o.join)(e,`assets`),s={},c=r.manifestPath||(0,o.join)(i,`manifest.json`);d.default.existsSync(c)&&(s=JSON.parse(await d.default.readFileSync(c,`utf-8`)));let l=0,u=0;for(let[,t]of Object.entries(s)){let{file:n,css:r=[]}=t,i=F((0,o.join)(e,n));l+=i;for(let t of r)u+=F((0,o.join)(e,t))}let f=0,p=0;if(d.default.existsSync(a)){let e=d.default.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=o.default.extname(t.name).toLowerCase(),n=(0,o.join)(a,t.name);N.has(e)?f+=F(n):P.has(e)&&p++}}let m=(0,o.join)(e,`index.html`),h=0,g=[];if(d.default.existsSync(m)){let e=F(m);h+=e,g.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let ee=r.outputFiles?[...r.outputFiles]:(()=>{try{return d.default.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of ee){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=F((0,o.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 _={buildTime:t,totalJSBundleSize:l,totalCSSBundleSize:u,totalImagesSize:f,totalHTMLSize:h,fontCount:p,pages:g};return n&&we(n,_),_}function Ee(e,t){let n=o.default.resolve(e,`..`,`.boltdocs`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0});let r=(0,o.join)(n,`performance.json`);d.default.writeFileSync(r,JSON.stringify(t,null,2))}function De(e,t){try{if(!s.default.existsSync(e))return!1;let n=s.default.readFileSync(e);return t.update(n),!0}catch{return!1}}const Oe=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`]),ke=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`,`.webp`,`.png`,`.jpg`,`.jpeg`,`.gif`,`.ico`]);function R(e){let t=e.lastIndexOf(`.`);if(t===-1)return!1;let n=e.slice(t).toLowerCase();return ke.has(n)}function z(e,t,n){let r;try{r=s.default.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`))continue;let r=(0,o.join)(e,i),a;try{a=s.default.statSync(r)}catch{continue}if(a.isDirectory()){if(Oe.has(i))continue;z(r,t,n)}else if(a.isFile()&&R(i)){let e=(0,o.relative)(t,r).replace(/\\/g,`/`);n.update(`${e}:${a.mtimeMs}:${a.size}\n`)}}}function B(e,t){let n=(0,i.createRequire)(n(`url`).pathToFileURL(__filename).href);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=(0,o.join)((0,o.dirname)(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);s.default.existsSync(i)&&z(i,e,t)}catch{}}function Ae(e,t,n){let r=[(0,o.join)(e,t,`public`),(0,o.join)(e,t,`src`)];for(let t of r)try{s.default.existsSync(t)&&z(t,e,n)}catch{}}const je=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`,`pnpm-lock.yaml`,`package-lock.json`,`yarn.lock`];function Me(e,t){for(let n of je){let r=(0,o.join)(e,n);try{if(s.default.existsSync(r)){let e=s.default.statSync(r);t.update(`${n}:${e.mtimeMs}:${e.size}\n`)}}catch{}}}function Ne(e,t,n){try{s.default.removeSync((0,o.join)(n,`hash-merkle.json`))}catch{}try{let n=(0,l.createHash)(`sha256`);if(B(e,n),De((0,o.join)(e,`.boltdocs`,`compiled`,`manifest.json`),n))Ae(e,t,n);else{let r=(0,o.join)(e,t);s.default.existsSync(r)&&z(r,e,n)}return Me(e,n),n.digest(`hex`)}catch(e){return(0,r.warn)(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),(0,l.createHash)(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function V(e){return l.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 s.default.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function Ie(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(n,{version:1,files:t},{spaces:0}),await s.default.move(n,e,{overwrite:!0})}catch{await s.default.remove(n).catch(()=>{})}}async function Le(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,o.join)(e,t);try{let e=await s.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 c=V(await s.default.readFile(n));i.set(t,c),a[t]={hash:c,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await Ie(n,a),i}function Re(e,t){if(e)try{let t=s.default.statSync(e);return`${t.mtimeMs}:${t.size}`}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 c=l.default.createHash(`md5`).update(e).digest(`hex`);return!(!s.default.existsSync((0,o.join)(i,`${c}.html`))||t.loaderDataFilePath&&!s.default.existsSync((0,o.join)(i,`${c}.json`)))}function Be(e){return e===null?null:e.poolMetrics()}function Ve(e,t){return(0,o.isAbsolute)(t)?t:(0,o.join)(e,t)}function He(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=M(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=M(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 Ke=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],qe=[`react`,`react-dom`];function Je(e){return Number.parseInt(c.version,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Ye(){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 Xe(e,t){let n=[],r=i=>{let a;try{a=s.default.readdirSync(i,{withFileTypes:!0})}catch{return}for(let s of a){if(s.name===`.vite`)continue;let a=(0,o.join)(i,s.name);if(s.isDirectory())r(a);else if(s.isFile()){let r=(0,o.relative)(e,a).split(o.sep).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function Ze(e){return e.map(e=>{if(Array.isArray(e))return Ze(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 Qe(e){let t=[],n=async r=>{let i;try{i=await s.default.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=(0,o.join)(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push((0,o.relative)(e,i).split(o.sep).join(`/`))}};return await n(e),t.sort()}async function $e(e){try{let t=await s.default.readFile(e);return(0,l.createHash)(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function et(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e),r=(0,o.resolve)(n,t),i=(0,o.relative)(n,r);if(!(!i||i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)))return r}async function tt(e,t){let n=(0,o.join)((0,o.resolve)(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await s.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&&s.default.existsSync(e)?await Qe(e):[],a={};for(let t of i){let n=await $e((0,o.join)(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=et(t,e);r&&await $e(r)===n&&await s.default.remove(r)}e&&s.default.existsSync(e)&&(await s.default.ensureDir(t),await s.default.copy(e,t,{overwrite:!0,errorOnExist:!1})),await s.default.ensureDir((0,o.resolve)(t,`..`)),await s.default.writeJson(n,{version:1,files:a})}function nt(e){return(0,c.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...Je({input:{app:(0,o.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,o.isAbsolute)(t.build.outDir||``)?t.build.outDir||`dist`:(0,o.resolve)(e.root,t.build.outDir||`dist`))}}]})}function rt(e){return(0,c.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,...Je({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:[...Ke],external:[...qe]},plugins:[...Ze(e.viteConfig.plugins||[]),Ye()]})}async function it(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,l=[],u=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),s.default.existsSync(e.outDir)&&await s.default.remove(e.outDir);let t=(0,o.join)(e.clientCacheDir,`dist`);await tt(e.viteConfig.publicDir,t),H(t,e.outDir),l=Xe((0,o.join)(e.clientCacheDir,`dist`),e.htmlEntry)}else{await(0,c.build)(nt({...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,o.join)(e.finalCacheDir,`client-cache`,i);let f=(0,o.join)(r,`client-hash.txt`);await s.default.ensureDir(r);let p=(0,o.join)(r,`dist`);s.default.existsSync(p)&&await s.default.remove(p),await s.default.copy(n,p,{overwrite:!0,errorOnExist:!1}),await tt(e.viteConfig.publicDir,p),l=Xe(p,e.htmlEntry),await s.default.writeFile(f,i,`utf-8`),await ct((0,o.join)(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-u,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:l}}async function at(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};s.default.existsSync(e.ssgOut)&&await s.default.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await(0,c.build)(rt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function ot(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e,t),r=(0,o.relative)((0,o.resolve)(e),n);if(!(r===`..`||r.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(r)))try{let t=s.default.realpathSync(e),r=s.default.realpathSync(n),i=(0,o.relative)(t,r);return i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)||!s.default.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function st(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 H(e,t){let n=s.default.readdirSync(e,{withFileTypes:!0});s.default.mkdirSync(t,{recursive:!0});for(let r of n){let n=(0,o.join)(e,r.name),i=(0,o.join)(t,r.name);if(r.isDirectory())H(n,i);else if(r.isFile())try{s.default.linkSync(n,i)}catch{s.default.copyFileSync(n,i)}}}async function ct(e,t=5,n){try{if(!s.default.existsSync(e))return;let r=await s.default.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=(0,o.join)(e,t.name),r=await s.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 s.default.remove((0,o.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,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function dt(e){return Object.freeze(e)}function ft(e){let n=new Map;for(let r of e.routes){let i=l.default.createHash(`md5`).update(r).digest(`hex`),a=M(r),s=e.routeToSourceFileMap[a]||e.routeToSourceFileMap[r],c=s?e.sourceMeta.get(s):void 0;n.set(r,dt({path:r,pathHash:i,cachedHtmlFile:(0,o.join)(e.ssgPagesDir,`${i}.html`),cachedLoaderFile:(0,o.join)(e.ssgPagesDir,`${i}.json`),finalOutFile:(0,o.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 pt(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function mt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function ht(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function U(e,t){return e>4&&!t}function W(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function gt(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 _t(e){let t=[],n=new Set,r=e.getPool(),i=ht(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=mt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(U(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=ht(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(!gt(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=W(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):gt(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!gt(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=ht(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(!gt(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 vt=Number.parseInt(c.version)>=5?[`.vite`]:[];function yt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function bt(e,n){return`static-loader-data${t.a(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function xt(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function St(e){let t=new Set;for(let n of Object.values(e)){xt(n.file)&&t.add(n.file);for(let e of n.css||[])xt(e)&&t.add(e);for(let e of n.imports||[])xt(e)&&t.add(e);for(let e of n.dynamicImports||[])xt(e)&&t.add(e)}return[...t]}async function Ct(e,t,n){return Le(e,St(t),n?(0,o.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,o.isAbsolute)(r)?r:(0,o.join)(e,r)}function Et(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,(0,o.isAbsolute)(n)?(0,o.relative)(e,n):n]))}function Dt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function G(e={},u={}){let d=process.env.MODE||process.env.NODE_ENV||e.mode||`production`;d!==process.env.NODE_ENV&&(process.env.NODE_ENV=d);let f=process.cwd(),p=u.root||f,m=u.build?.outDir||`dist`,h=u.base||`/`,_=performance.now(),v=0,ie=0,b=0,{onFinished:S,onStep:C,routeToSourceFileMap:w={},cacheDir:le=`.boltdocs/build`,htmlEntry:E=`index.html`,entry:D=await ce(p,E)}=e,O=`docs`,pe=Object.values(w);if(pe.length>0){let e=pe[0],t=(0,o.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(O=t[0])}let k=(0,o.isAbsolute)(m)?m:(0,o.join)(p,m),j=(0,o.isAbsolute)(le)?le:(0,o.join)(p,le),N=Ne(p,O,j),P=Ue({root:p,outDir:k,cacheDir:j,base:h,mode:d,entry:D,htmlEntry:E,docsDirName:O,clientHash:N,routeToSourceFileMap:w}),F=P.clientHash.substring(0,12),I=(0,o.join)(P.cacheDir,`ssr`,F),L=(0,o.join)(P.cacheDir,`client-cache`,P.clientHash),we=L,De=N,Oe=N,ke=(0,o.join)(L,`client-hash.txt`),R=!1;try{s.default.existsSync(ke)&&s.default.existsSync((0,o.join)(L,`dist`))&&(R=(await s.default.readFile(ke,`utf-8`)).trim()===N)}catch{}let z=(0,o.join)(j,`ssg-pages`),B=(0,o.join)(j,`ssg-cache.json`),Ae=(0,o.join)(j,`ssg-output.json`),je=await _e(Ae),Me=je!==void 0&&je.auxiliaryFiles.length===0;R&&(ge(je,be((0,o.join)(L,`dist`)),E)||(R=!1));let V=[],Pe=!1,Fe=(e.dirStyle||u.ssgOptions?.dirStyle)??`flat`;if(R&&Me&&Fe!==`nested`){let e=(0,o.join)(j,`routes-cache.json`);try{if(s.default.existsSync(e)&&s.default.existsSync(B)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`)),n=xe(JSON.parse(s.default.readFileSync(B,`utf-8`)),t.paths);if(t.dirStyle===Fe&&t.base===h){let e=t.paths.every(e=>{let r=M(e),i=n[r];return ze({routePath:e,cacheItem:i,sourceContentHash:Re(w[r]||w[e]||Tt(p,t.sourceFiles,r)||Tt(p,t.sourceFiles,e),Oe),ssgPagesDir:z,requireAssetHash:!0})});t.paths.length>0&&e&&(V=t.paths,Pe=!0)}}}catch{}}if(Pe){let e=performance.now(),t={};try{s.default.existsSync(B)&&(t=xe(JSON.parse(s.default.readFileSync(B,`utf-8`)),V))}catch{}let n=[...ye(V,t,Fe===`nested`?`nested`:`flat`),`static-loader-data-manifest-${F}.json`],r=be((0,o.join)(L,`dist`)).filter(e=>e!==E),i=await _e(Ae),a=i?.auxiliaryFiles.length===0&&he(i,N,k,r,n,[]),c={};if(!a){s.default.existsSync(k)&&await s.default.remove(k);let e=(0,o.join)(L,`dist`);await tt(u.publicDir,e),await s.default.copy(e,k);let n=[];for(let e of V){let r=l.default.createHash(`md5`).update(e).digest(`hex`),i=(0,o.join)(z,`${r}.html`),a=(0,o.join)(z,`${r}.json`),u=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:(0,o.join)(k,u)}),s.default.existsSync(a)){let r=M(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:(0,o.join)(k,i.loaderDataFilePath)}),c[wt(e,h)]=i.loaderDataFilePath)}}await A(n),await Se((0,o.join)(k,`static-loader-data-manifest-${F}.json`),yt(c))}await Ot(z,t,V);let d=Math.round(performance.now()-_);C?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),C?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),C?.({name:`Render pages`,duration:0,success:!0,details:`${V.length} pages (all cached)`}),C?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(d/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 S?.(m),await kt(k),await ve((0,o.join)(j,`ssg-output.json`),N,k,n,r);return}let Ie=await(0,c.resolveConfig)(u,`build`,d,d),Le=Object.assign({},Ie.ssgOptions||{},e),{script:Ve=`sync`,mock:He=!1,formatting:Ke=`none`,includedRoutes:qe=Dt,onBeforePageRender:Je,onPageRendered:Ye,dirStyle:Xe=`flat`,includeAllRoutes:Ze=!1,format:Qe=`esm`,concurrency:$e=20,rootContainerId:et=`root`,beastiesOptions:nt={}}=Le,rt=nt,H=Le.turbo??!1,ut=(0,o.join)(j,`ssr`),dt=(0,o.join)(j,`ssr-cache-index.json`);if(I=(0,o.join)(ut,H?`turbo-ssr`:F),!H&&R)try{let e=(await s.default.readJson(dt))[N];if(typeof e==`string`){let t=ot(ut,e);t&&(I=t)}}catch{}let mt=lt((0,c.createLogger)(),st),ht=()=>{};if(He){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));ht=e()}let U={};try{if(s.default.existsSync(B)){let e=await s.default.readJson(B);U=xe(e,Object.keys(e))}}catch{}let W=!1;if(R)try{let e=(0,o.join)(j,`routes-cache.json`);if(s.default.existsSync(e)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=M(e),r=U[n];return ze({routePath:e,cacheItem:r,sourceContentHash:Re(w[n]||w[e]||Tt(p,t.sourceFiles,n)||Tt(p,t.sourceFiles,e),Oe),ssgPagesDir:z,requireAssetHash:!0})})&&(V=t.paths,W=!0)}}catch{}let gt=W?``:await fe(Ie,D),xt=(H||R)&&s.default.existsSync(I)&&s.default.readdirSync(I).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,St=performance.now(),[G,Mt]=await Promise.all([it({viteConfig:u,resolvedMode:Ie.mode,root:p,htmlEntry:E,outDir:k,clientCacheDir:L,finalCacheDir:j,docsDirName:O,initialClientHash:N,canBypassClientBuild:R,customLogger:mt,onStep:C,shouldSuppressLog:st},()=>Ne(p,O,j)),at({viteConfig:u,resolvedMode:Ie.mode,entry:D,ssrEntry:gt,ssgOut:I,format:Qe,canSkipSsrImport:W,serverBuildSkipped:xt,customLogger:mt,onStep:C,shouldSuppressLog:st})]);if(m=G.outDir,we=G.resolvedClientCacheDir,De=G.resolvedClientHash,Oe=G.pageContentFallbackHash,F=De.substring(0,12),v=G.durationMs,ie=Mt.durationMs,!H)try{let e={};try{e=await s.default.readJson(dt)}catch{}e[De]=(0,o.relative)(ut,I),await Ce(dt,e)}catch{}let Nt=Qe===`esm`&&process.platform===`win32`?`file://`:``,Pt=Qe===`esm`?`.mjs`:`.cjs`;gt.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Ft=`combined`+Pt;try{if(s.default.existsSync(I)){let e=s.default.readdirSync(I).filter(e=>e.endsWith(Pt));e.length>0&&(Ft=e[0])}}catch{}let It=Nt+(0,o.join)(I,Ft).replace(/\\/g,`/`),Lt=Ft.replace(/\.[^/.]+$/,``),Rt=JSON.parse(await s.default.readFile((0,o.join)(I,...vt,`manifest.json`),`utf-8`)),zt=null,Bt=null,K=[],Vt,Ht=`/`,Ut,Wt=null,Gt,Kt=qe;if(!W){let e=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),n=performance.now(),r=Qe===`esm`?await import(It):e(It);b=performance.now()-n,Vt=r.matchRouteBranchWithParams;let{createRoot:a,includedRoutes:o}=r;Kt=o||qe,zt=await a(!1);let s=zt;if(K=s.routes,Ht=s.base,Ut=s.triggerOnSSRAppRendered,Wt=s.app,Gt=s.routerType,K&&K.length>0)for(let e of K)e.path&&(e.filePath||e.entry)&&!w[e.path]&&(w[e.path]=e.filePath||e.entry);P=Ge(P,We(p,K,w)),Bt=t.t(s,r)}let qt=``,Jt=0,q=null,Yt=null,Xt=null,Zt=!1;async function Qt(){if(Xt){await Xt;return}let e=Yt;e&&(Xt=e.destroy(),await Xt)}if(!W){let e=performance.now(),{paths:t}=await de(K);V=Ze?t:await Kt(t,K||[]),V=Dt(V,K||[]),V=Array.from(new Set(V)),Jt+=performance.now()-e;try{await Ce((0,o.join)(j,`routes-cache.json`),{paths:V,dirStyle:Xe,base:h,sourceFiles:Et(p,w)},0)}catch{}qt=(0,o.join)(I,Lt+Pt)}async function $t(){if(q||Zt||V.length<=4)return;Zt=!0;let e=performance.now();try{qt=(0,o.join)(I,Lt+Pt);let{SsgWorkerPool:t}=await Promise.resolve().then(()=>require(`./ssg-worker-pool-CZPcmzdb.cjs`));q=new t({ssrEntryPath:qt,format:Qe===`esm`?`esm`:`cjs`}),Yt=q,await q.ready(),In=performance.now()-e}catch{In=performance.now()-e,q=null}}let en=Le.criticalCss??`zig-critters`,J,tn;en===`zig-critters`?(J=await te({concurrency:Math.max(1,Math.min($e,a.default.cpus().length,8))}),J||(0,r.warn)("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):en===`beasties`&&rt!==!1&&(tn=await ee(m,{publicPath:h,...rt}));let Y=``,nn=``;if(J){let e=(0,o.join)(k,`assets`);if(s.default.existsSync(e)){let t=s.default.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)Y+=s.default.readFileSync((0,o.join)(e,n),`utf-8`)+`
3
+ `}Y&&(nn=l.default.createHash(`sha256`).update(Y).digest())}let rn={},an={},on={},sn=null;if(W)for(let e of V){let t=M(e);on[e]=U[t]?.assetHash||N}else{let[e,t]=await Promise.all([s.default.readFile((0,o.join)(k,...vt,`ssr-manifest.json`),`utf-8`),s.default.readFile((0,o.join)(k,...vt,`manifest.json`),`utf-8`)]);rn=JSON.parse(e),an=JSON.parse(t),sn=x(an);let n=await Ct(k,an,j);await Promise.all(Object.entries(w).map(async([e,t])=>{on[e]=await ae({outDir:k,indexes:sn,ssrManifest:rn,routeSourceFile:t,root:p,clientHash:N,assetHashes:n})}));for(let e of V)on[e]||(on[e]=Oe)}let X=await s.default.readFile((0,o.join)(k,E),`utf-8`);s.default.rmSync((0,o.join)(k,E)),X=At(X,Ve);let cn=Je?null:T({rootContainerId:et,indexHTML:X}),ln=(await import(`p-queue`)).default||await import(`p-queue`),un=new ln({concurrency:$e}),dn=new ln({concurrency:Math.min(a.default.cpus().length,4)}),fn=new ln({concurrency:Math.max(2,Math.min(a.default.cpus().length,6))}),pn={},mn=0,hn=new Map,gn=new Set;for(let e of V){let n=w[t.a(e).replace(/\/$/,``)]||w[e];n&&gn.add(n)}for(let e of gn)try{if(s.default.existsSync(e)){let t=s.default.statSync(e);hn.set(e,{hash:`${t.mtimeMs}:${t.size}`,mtimeMs:t.mtimeMs})}}catch{}let _n=null;!W&&Vt&&(_n=g({routes:[...K],base:Ht,matchRouteBranchWithParams:Vt,serverManifest:Rt,manifest:an,ssrManifest:rn}));let vn=ft({routes:V,outDir:k,ssgPagesDir:z,dirStyle:Xe,contextBase:Ht,fallbackHash:Oe,routeToSourceFileMap:w,sourceMeta:hn,routeToAssetHash:on}),yn=new y,bn=[],xn=[],Sn=[],Cn=[],wn=0,Tn=0,En=0,Dn=0,On=0,kn=0,An=0,jn=0,Mn=0,Nn=0,Pn=0,Z={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function Fn(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 In=0,Ln=!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 Rn=0,zn=0,Bn=0,Vn=new Set,Hn=new Set,Un=[],Wn=me({writeFile:async(e,t)=>{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf-8`)}}),Gn=JSON.stringify(U),$=xe(U,V),Kn=new Map,qn=new Set;qn.add(z);for(let e of V){let t=Xe===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;qn.add((0,o.join)(k,(0,o.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;qn.add((0,o.join)(k,`static-loader-data`,(0,o.dirname)(n)))}qn.add((0,o.join)(k,`static-loader-data`)),await Promise.all([...qn].map(e=>s.default.ensureDir(e)));async function Jn(e,t,i,a,c,l,u,d,f,p,m,g,ee,_,te){let v=performance.now(),{path:y,cachedHtmlFile:ie,cachedLoaderFile:b,normalizedKey:x,sourceContentHash:S,sourceMtimeMs:C,fetchUrl:ae}=e,w;if(!ee&&_===`remix`){if(!_n)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();w=new Set(await(Kn.get(y)||_n(ae))),wn+=performance.now()-e}else w=new Set;let T;if(d&&Object.keys(d).length>0){let e=bt(y,F);T=e,H&&await s.default.writeFile((0,o.join)(k,e),JSON.stringify(d)),pn[wt(y,h)]=e,mn++}await g?.(y,t,f);let ce=performance.now(),le=cn&&te===X?cn({appHTML:t,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null}):await se({rootContainerId:et,appHTML:t,indexHTML:te,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null});En+=performance.now()-ce;let E=ee?``:ue(w),D=u?le.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):le;E&&(D=D.replace(`<head>`,`<head>${E}`));let de=performance.now(),fe=await Ye?.(y,D,f)||D;Dn+=performance.now()-de;let O=``;if(d&&Object.keys(d).length>0){let e=JSON.stringify(d).replace(/</g,`\\u003c`);O=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${wt(y,h)}': ${e} };`}let pe=n.t(u),A=fe,me=`<script>window.__VITE_REACT_SSG_HASH__ = '${F}';${O}${pe}<\/script>`,j=performance.now();if(A=A.replace(`<script>${oe}<\/script>`,``),J){if(Y){let e=ne(A,nn,Y,`zig-critters`);try{let t=await yn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await J.extractCriticalCss(A,Y);return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&(0,r.warn)(`[zig-critters] Critical CSS for "${y}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)});t&&!A.includes(`data-zig-critters`)&&(A=A.replace(`</head>`,`${t}</head>`))}catch(e){(0,r.warn)(`[zig-critters] Failed to inline CSS for "${y}": ${e instanceof Error?e.message:String(e)}`)}}A=A.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(tn){let e=ne(A,nn,Y,`beasties`),t=await yn.getOrCreate(e,async()=>{let e=await dn.add(()=>tn.process(A));return re(A,e)});t&&!A.includes(t)&&(A=A.replace(`</head>`,`${t}</head>`)),A=A.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let he=me+(l||``);he&&(A=A.replace(`<head>`,`<head>${he}`));let ge=Ke===`none`?A:await jt(A,Ke);Sn.push(Math.round(performance.now()-j));let _e=performance.now();H?d&&Object.keys(d).length>0&&T&&await Wn.enqueue((0,o.join)(k,T),JSON.stringify(d)):(await Wn.enqueue(ie,ge),d&&Object.keys(d).length>0&&T?(await Wn.enqueue(b,JSON.stringify(d)),$[x]={contentHash:S,mtime:C?Math.round(C):0,loaderDataFilePath:T,assetHash:e.routeAssetHash}):$[x]={contentHash:S,mtime:C?Math.round(C):0,assetHash:e.routeAssetHash});let ve=performance.now()-_e;Cn.push(Math.round(ve)),xn.push(Math.round(performance.now()-v)),Rn++,jn++,Bn+=ge.length}let Yn=performance.now(),Xn=[];await _t({routes:V,canBypassClientBuild:R,getPlan:e=>pt(vn,e),isCached:e=>{if(H||!R)return!1;try{return ze({routePath:e.path,cacheItem:U[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:z})}catch{return!1}},onCacheHit:async e=>{let t=U[e.normalizedKey]?.loaderDataFilePath,n=t?(0,o.join)(k,t):void 0,r=!Vn.has(e.finalOutFile),i=!!n&&!Hn.has(n);r&&Vn.add(e.finalOutFile),i&&n&&Hn.add(n);let a=performance.now();try{r&&Un.push({source:e.cachedHtmlFile,destination:e.finalOutFile}),n&&t&&s.default.existsSync(e.cachedLoaderFile)&&(i&&Un.push({source:e.cachedLoaderFile,destination:n}),pn[wt(e.path,h)]=t,mn++),zn++,Mn++,On+=performance.now()-a}catch(t){throw r&&Vn.delete(e.finalOutFile),i&&n&&Hn.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!Wt&&Gt===`remix`&&_n&&Kn.set(e.path,_n(e.fetchUrl))},ensurePool:$t,getPool:()=>q,getWorkerCount:()=>Be(q)?.totalWorkers??0,onWorkerFailure:async(e,t,i,a)=>{if(!Bt)throw Error(`Error on page: ${e}\n${String(i)}`);(0,r.warn)(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),Ln=!0;try{await Qt()}catch{}q=null,Zt=!0;let o=await Bt.render(e);return{path:e,appHTML:o.appHTML,metaAttributes:o.metaAttributes,bodyAttributes:o.bodyAttributes,htmlAttributes:o.htmlAttributes,styleTag:o.styleTag,timings:o.timings,routerContext:n.n(o.routerContext)}},onWorkerResult:async(e,t,n,r)=>{kn+=Math.max(0,r-(n.timings?.totalMs??0)),An++,n.timings&&(bn.push(Math.round(n.timings.totalMs)),Fn(n.timings));let i={...zt,routePath:e},a=performance.now(),o=await Je?.(e,X,i)||X;Tn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await fn.add(()=>Jn(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,Ht,K,Ut,Wt,Gt??`remix`,o))},scheduleMainThread:(e,t)=>{Xn.push(un.add(async()=>{try{let r={...zt,routePath:e},i=performance.now(),a=await Je?.(e,X,r)||X;Tn+=performance.now()-i;let o=performance.now(),{appHTML:s,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Bt.render(e);bn.push(Math.round(performance.now()-o)),Fn(p);let m=f?.loaderData;await Jn(t,s,u,c,l,d,n.n(f),m||null,r,Ht,K,Ut,Wt,Gt??`remix`,a)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>fn.onIdle(),drainMainThread:async()=>{await Promise.all(Xn),await un.onIdle()},drainWrites:()=>Wn.flush(),cleanupAfterFailure:async()=>{try{s.default.existsSync(k)&&await s.default.remove(k)}catch{}},destroyPool:Qt,onNoRenderer:e=>{(0,r.warn)(`[ssg] No SSR context available for ${e}, skipping`)}}),Pn+=performance.now()-Yn;let Zn=performance.now();for(let e of V){if(H)continue;let t=vn.get(e);if(!t||!s.default.existsSync(t.cachedHtmlFile))continue;Vn.has(t.finalOutFile)||Un.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=$[t.normalizedKey];if(!n?.loaderDataFilePath||!s.default.existsSync(t.cachedLoaderFile))continue;let r=(0,o.join)(k,n.loaderDataFilePath);Hn.has(r)||Un.push({source:t.cachedLoaderFile,destination:r})}await A(Un);let Qn=Math.round(performance.now()-Zn);Nn+=Qn;let $n=Rn+zn,er=(Bn/1024/1024).toFixed(2),tr=0;if(!H)try{let e=JSON.stringify($)!==Gn;e&&await Ce(B,$),tr=await Ot(z,$,V,e)}catch{}let nr=performance.now()-St,rr=Be(Yt),ir={renderedCount:Rn,cachedCount:zn,renderedSize:Bn,totalPages:$n,prunedCount:tr,clientBuildMs:Math.round(v),serverBuildMs:Math.round(ie),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(In),workerUsed:rr!==null&&!Ln,workerCount:rr?.totalWorkers??0,fallbackMainThread:Ln,ssrP50Ms:Q(bn,50),ssrP95Ms:Q(bn,95),ssrP99Ms:Q(bn,99),crittersP50Ms:Q(Sn,50),crittersP95Ms:Q(Sn,95),writeP50Ms:Q(Cn,50),writeP95Ms:Q(Cn,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:$n>0&&nr>0?Math.round($n/(nr/1e3)*10)/10:0,pipeline:{renderedPageCount:jn,cachedPageCount:Mn,clientBuildMs:Math.round(v),serverBuildMs:Math.round(ie),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(In),routePreparationMs:Math.round(Jt),workerTransportMs:Math.round(kn),workerRoundTripMs:Math.round(kn),workerTransportAvgMs:An>0?Math.round(kn/An):0,finalizeP50Ms:Q(xn,50),finalizeP95Ms:Q(xn,95),assetCollectionMs:Math.round(wn),beforeHookMs:Math.round(Tn),htmlAssemblyMs:Math.round(En),onPageRenderedHookMs:Math.round(Dn),criticalCssP50Ms:Q(Sn,50),criticalCssP95Ms:Q(Sn,95),cacheWriteMs:Math.round(0+Wn.writeTimeMs()),cachedOutputMs:Math.round(On),renderQueueDrainMs:Math.round(Pn),renderPipelineSettleMs:Math.round(Pn),outputLinkMs:Math.round(Nn)}};C?.({name:`Render pages`,duration:nr,success:!0,details:`${$n} pages (${Rn} new, ${zn} cached, ${er} MB)`,metrics:ir}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(nr),success:!0,details:`${$n} pages / ${Rn} new / ${zn} cached / ${er} MB`,metrics:ir})}`);let ar=performance.now(),or=yt(pn);if(await Se((0,o.join)(k,`static-loader-data-manifest-${F}.json`),or),await ct((0,o.join)(j,`ssr`),5,H?`turbo-ssr`:(0,o.basename)(I)),ht(),J?.dispose)try{await J.dispose()}catch{}let sr=Ie.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;sr&&!sr.disabled&&sr.generateSW&&await sr.generateSW();let cr=Math.round(performance.now()-_);C?.({name:`Static loader data`,duration:performance.now()-ar,success:!0,details:`${mn} loader data files`,metrics:{loaderDataFileCount:mn}}),await S?.(m),await kt(k);let lr=be(k),ur=await Te(k,cr,j,{outputFiles:lr,manifestPath:(0,o.join)(we,`dist`,...vt,`manifest.json`)});Ee(k,ur),C?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(cr/1e3).toFixed(1)}s, JS: ${(ur.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(ur.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:cr,totalPages:ur.pages.length,jsSize:ur.totalJSBundleSize,cssSize:ur.totalCSSBundleSize}}),await ve((0,o.join)(j,`ssg-output.json`),De,k,ye(V,$,Xe).concat(`static-loader-data-manifest-${F}.json`),G.clientFiles,lr)}async function Ot(e,t,n=[],r=!1){try{if(!s.default.existsSync(e))return 0;let i=(0,o.join)(e,`.prune-state`);if(!r)try{let e=await s.default.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await s.default.readdir(e),c=new Set,u=new Set([...Object.keys(t),...n]);for(let e of u){let t=l.default.createHash(`md5`).update(e).digest(`hex`);c.add(`${t}.html`),c.add(`${t}.json`)}let d=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!c.has(t)&&(await s.default.remove((0,o.join)(e,t)),d++);return await s.default.writeFile(i,String(Date.now()),`utf8`),d}catch{return 0}}async function kt(e){try{vt.length>0?await s.default.remove((0,o.join)(e,...vt)):await Promise.all([s.default.remove((0,o.join)(e,`manifest.json`)),s.default.remove((0,o.join)(e,`ssr-manifest.json`))])}catch{}}function At(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function jt(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,r.error)(`Error formatting html: ${t?.message}`),e}return e}function Mt(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 Nt({template:e,ssrEntry:n,onBeforePageRender:i,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d)=>{try{let r=u.originalUrl??u.url??`/`,f=await l.ssrLoadModule(n),p=f.createRoot,m=await p(!1,r),h=t.t(m,f),{app:g,base:ee}=m,[_=`/`,te=``]=r.split(`?`),ne=new URLSearchParams(te);if(!g&&ne.has(`_data`))return h.handleLoader(u,d);let v=await l.transformIndexHtml(r,e),re=await i?.(r,v,m)||v,{appHTML:y,bodyAttributes:ie,htmlAttributes:b,metaAttributes:x,styleTag:S}=await h.render(t.i(_,ee));x.push(S);let C=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),ae=new Set,oe=new Set,w=async e=>{if(!e?.ssrTransformResult||oe.has(e))return;oe.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`))ae.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await w(t)}};await Promise.all(C.map(async e=>w(e)));let T=[...ae].map(e=>le(t.n(l.config.base,e)));x.push(...T);let ce=await se({rootContainerId:o,appHTML:y,indexHTML:re,metaAttributes:x,bodyAttributes:ie,htmlAttributes:b,initialState:null}),ue=await s?.(r,ce,m)||ce;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.send)(u,d,ue,`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),(0,r.error)(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return l.middlewares.use(Mt),()=>{l.middlewares.use(u)}}}}async function Pt(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),s,l,d,f;if(r){s=e.root||a,l={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=l,n=l.entry||await ce(s,t);d=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:(0,o.join)(s,n),f=await u.default.readFile((0,o.join)(s,t),`utf-8`)}else{let t=await(0,c.resolveConfig)(e,`serve`,n,n);s=t.root||a,l={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=l,p=l.entry||await ce(s,r),[m,h]=await Promise.all([fe(t,p),u.default.readFile((0,o.join)(s,r),`utf-8`)]);d=m,f=h}let{onBeforePageRender:p,onPageRendered:m,rootContainerId:h=`root`,mock:g=!1}=l;if(process.env.__DEV_MODE_SSR=`true`,g){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));e()}return await(0,c.createServer)({...e,plugins:[...e.plugins??[],Nt({template:f,ssrEntry:d,onBeforePageRender:p,onPageRendered:m,entry:l.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 Ft(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Pt(t,e);return await r.listen(),It(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function It(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,i=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);i+=` ready in ${r.colors.bold(`${e}ms`)}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${D} `)}`,{clear:!e.config.logger.hasWarned}),n(`${r.colors.cyan(`\n VITE v${c.version}`)+r.colors.dim(i)}\n`),n(r.colors.green(` dev server running at:`)),e.printUrls()}var Lt=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=Lt,exports.build=G,exports.createServer=Pt,exports.dev=Ft;
package/dist/node.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { u as ViteReactSSGOptions } from "./types-Y1Rvl_Nv.mjs";
1
+ import { u as ViteReactSSGOptions } from "./types-5bBDTafc.mjs";
2
2
  import { InlineConfig, ViteDevServer } from "vite";
3
3
 
4
4
  //#region src/node/build.d.ts
package/dist/node.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"./router-adapter-BukFH1uk.mjs";import{n as s,t as c}from"./ssg-worker-payload-BHsJklNf.mjs";import{createRequire as l}from"node:module";import{colors as u,error as d,warn as f}from"@bdocs/dui";import p from"node:os";import m,{basename as h,dirname as g,isAbsolute as _,join as v,relative as y,resolve as b,sep as x}from"node:path";import S from"fs-extra";import{build as ee,createLogger as te,createServer as ne,mergeConfig as C,resolveConfig as re,send as w,version as T}from"vite";import E,{createHash as D}from"node:crypto";import O,{readFile as k}from"node:fs/promises";import A from"node:fs";const ie=/import\("([^)]+)"\)/g;function j(e,t){let n=new Set;if(!t)return n;for(let r of t)M(e,r,n);return n}function M(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{M(e,t,n)}),n):n}function N(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(ie);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=j(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 P(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=N(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}}async function ae(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}async function oe(){try{let e=await import(`@bdocs/zig-critters`),t=e.processHtml||e.default?.processHtml;return t?{processHtml:t}:void 0}catch{return}}function se(e,t,n){let r=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return E.createHash(`sha256`).update(n).update(`\0`).update(r).update(`\0`).update(t).digest(`hex`)}function F(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function ce(e,t){let n=new Set(F(e)),r=F(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
- `):null}var le=class{constructor(e=512){this.maxEntries=e,this.entries=new Map}getOrCreate(e,t){let n=this.entries.get(e);if(n)return n.promise;let r={promise:Promise.resolve(null),settled:!1},i=Promise.resolve().then(t).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{r.settled=!0,this.evictSettledEntries()});return r.promise=i,this.entries.set(e,r),this.evictSettledEntries(),i}get size(){return this.entries.size}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}}};const I=new Set([`.js`,`.mjs`,`.css`]);function L(e){let t=m.extname(e).toLowerCase();return I.has(t)}function ue(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 R(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])L(t)&&R(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])L(t)&&!n.has(t)&&R(e,t,n)}}async function de(e,t,n){if(n){let e=E.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 k(m.join(e,t));r.set(t,n)}catch{}}));let i=E.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 fe(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:o,clientHash:s,assetHashes:c}=e,l=n;if(!l){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);l=ue(r)}let{byFile:u,bySrc:d}=l,f=m.relative(o,a).replace(/\\/g,`/`),p=new Set,h=d.get(f);if(h)R(u,h.file,p);else{let e=[f,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)L(t)&&R(u,t,p)}}if(p.size===0){if(!s)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return s}return de(t,Array.from(p).sort(),c)}const pe=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function z(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 me({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>${pe}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return z(z(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 he({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>${pe}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return z(z(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 z(z(p,`html`,a),`body`,i)}async function ge(e,t=`index.html`){let[,n]=[...(await S.readFile(v(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 _e(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 B=`0.4.0`;async function be(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&&H(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 xe(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:v(e.root,t))}const V=/[:*?]/;function H(e){return e?V.test(e):!1}async function Se(e,t){if(e!==t){await S.ensureDir(g(t)),await S.remove(t);try{await S.link(e,t)}catch{await S.copy(e,t)}}}async function Ce(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(Se(r.source,r.destination)));await Promise.all(n)}function we({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 Te(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function Ee(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(je(n),[...new Set(u)].sort())?u.every(e=>S.existsSync(`${n}/${e}`)):!1}function De(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 Oe(e){try{let t=await S.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:Te(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function ke(e,t,n,r,i=[],a){let o=a||je(n),s=new Set(r),c=new Set(i);return Pe(e,Te(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 Ae(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[U(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function je(e){let t=[],n=r=>{let i;try{i=S.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(y(e,i).split(x).join(`/`))}};return n(e),t.sort()}function U(t){return!t||t===`/`?``:e(t).replace(/\/+$/,``)}function Me(e,t){let n=new Set(t.map(U)),r={};for(let[t,i]of Object.entries(e)){let e=U(t);n.has(e)&&(r[e]=i)}return r}async function Ne(e,t){try{if(await S.readFile(e,`utf8`)===t)return!1}catch{}return await S.ensureDir(g(e)),await S.writeFile(e,t,`utf8`),!0}async function Pe(e,t,n=2){try{let n=await S.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await S.ensureDir(g(e)),await S.writeJson(e,t,{spaces:n}),!0}const Fe=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),W=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function Ie(e){try{return A.statSync(e).size}catch{return 0}}const Le=`boltdocs-metrics.json`;function Re(e){if(!e)return null;try{let t=v(e,Le);return A.existsSync(t)?JSON.parse(A.readFileSync(t,`utf-8`)):null}catch{return null}}function ze(e,t){try{let n=m.resolve(e,`..`,`reports`);A.existsSync(n)||A.mkdirSync(n,{recursive:!0}),A.writeFileSync(v(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=v(e,`.vite`),a=v(e,`assets`),o={},s=r.manifestPath||v(i,`manifest.json`);A.existsSync(s)&&(o=JSON.parse(await A.readFileSync(s,`utf-8`)));let c=0,l=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=Ie(v(e,n));c+=i;for(let t of r)l+=Ie(v(e,t))}let u=0,d=0;if(A.existsSync(a)){let e=A.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=m.extname(t.name).toLowerCase(),n=v(a,t.name);Fe.has(e)?u+=Ie(n):W.has(e)&&d++}}let f=v(e,`index.html`),p=0,h=[];if(A.existsSync(f)){let e=Ie(f);p+=e,h.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let g=r.outputFiles?[...r.outputFiles]:(()=>{try{return A.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of g){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=Ie(v(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);p+=n,h.push({route:e,htmlSize:n,htmlFile:t})}}let _={buildTime:t,totalJSBundleSize:c,totalCSSBundleSize:l,totalImagesSize:u,totalHTMLSize:p,fontCount:d,pages:h};return n&&ze(n,_),_}function Ve(e,t){let n=m.resolve(e,`..`,`.boltdocs`,`reports`);A.existsSync(n)||A.mkdirSync(n,{recursive:!0});let r=v(n,`performance.json`);A.writeFileSync(r,JSON.stringify(t,null,2))}function He(e,t){try{if(!S.existsSync(e))return!1;let n=S.readFileSync(e);return t.update(n),!0}catch{return!1}}const Ue=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`]),We=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`,`.webp`,`.png`,`.jpg`,`.jpeg`,`.gif`,`.ico`]);function Ge(e){let t=e.lastIndexOf(`.`);if(t===-1)return!1;let n=e.slice(t).toLowerCase();return We.has(n)}function Ke(e,t,n){let r;try{r=S.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`))continue;let r=v(e,i),a;try{a=S.statSync(r)}catch{continue}if(a.isDirectory()){if(Ue.has(i))continue;Ke(r,t,n)}else if(a.isFile()&&Ge(i)){let e=y(t,r).replace(/\\/g,`/`);n.update(`${e}:${a.mtimeMs}:${a.size}\n`)}}}function qe(e,t){let n=l(import.meta.url);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=v(g(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);S.existsSync(i)&&Ke(i,e,t)}catch{}}function Je(e,t,n){let r=[v(e,t,`public`),v(e,t,`src`)];for(let t of r)try{S.existsSync(t)&&Ke(t,e,n)}catch{}}const Ye=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`,`pnpm-lock.yaml`,`package-lock.json`,`yarn.lock`];function Xe(e,t){for(let n of Ye){let r=v(e,n);try{if(S.existsSync(r)){let e=S.statSync(r);t.update(`${n}:${e.mtimeMs}:${e.size}\n`)}}catch{}}}function Ze(e,t,n){try{S.removeSync(v(n,`hash-merkle.json`))}catch{}try{let n=D(`sha256`);if(qe(e,n),He(v(e,`.boltdocs`,`compiled`,`manifest.json`),n))Je(e,t,n);else{let r=v(e,t);S.existsSync(r)&&Ke(r,e,n)}return Xe(e,n),n.digest(`hex`)}catch(e){return f(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),D(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Qe(e){return E.createHash(`md5`).update(e).digest(`hex`)}function $e(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function et(e){if(e)try{let t=await S.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function tt(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await S.ensureDir(g(e)),await S.writeJson(n,{version:1,files:t},{spaces:0}),await S.move(n,e,{overwrite:!0})}catch{await S.remove(n).catch(()=>{})}}async function G(e,t,n){let r=await et(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=v(e,t);try{let e=await S.stat(n);if(!e.isFile())return;let o=r?.files[t];if($e(o,e)){i.set(t,o.hash),a[t]=o;return}let s=Qe(await S.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 tt(n,a),i}function nt(e,t){if(e)try{let t=S.statSync(e);return`${t.mtimeMs}:${t.size}`}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=E.createHash(`md5`).update(e).digest(`hex`);return!(!S.existsSync(v(i,`${o}.html`))||t.loaderDataFilePath&&!S.existsSync(v(i,`${o}.json`)))}function it(e){return e===null?null:e.poolMetrics()}function at(e,t){return _(t)?t:v(e,t)}function ot(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=U(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=U(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 K(e){return Number.parseInt(T,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function q(){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 ft(e,t){let n=[],r=i=>{let a;try{a=S.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=v(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=y(e,a).split(x).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function pt(e){return e.map(e=>{if(Array.isArray(e))return pt(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 S.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=v(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push(y(e,i).split(x).join(`/`))}};return await n(e),t.sort()}async function J(e){try{let t=await S.readFile(e);return D(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function ht(e,t){if(!t||_(t))return;let n=b(e),r=b(n,t),i=y(n,r);if(!(!i||i===`..`||i.startsWith(`..${x}`)||_(i)))return r}async function gt(e,t){let n=v(b(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await S.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&&S.existsSync(e)?await mt(e):[],a={};for(let t of i){let n=await J(v(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=ht(t,e);r&&await J(r)===n&&await S.remove(r)}e&&S.existsSync(e)&&(await S.ensureDir(t),await S.copy(e,t,{overwrite:!0,errorOnExist:!1})),await S.ensureDir(b(t,`..`)),await S.writeJson(n,{version:1,files:a})}function _t(e){return C(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...K({input:{app:v(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(_(t.build.outDir||``)?t.build.outDir||`dist`:b(e.root,t.build.outDir||`dist`))}}]})}function vt(e){return C(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,...K({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:[...pt(e.viteConfig.plugins||[]),q()]})}async function yt(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`}),S.existsSync(e.outDir)&&await S.remove(e.outDir);let t=v(e.clientCacheDir,`dist`);await gt(e.viteConfig.publicDir,t),Ct(t,e.outDir),o=ft(v(e.clientCacheDir,`dist`),e.htmlEntry)}else{await ee(_t({...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=v(e.finalCacheDir,`client-cache`,i);let l=v(r,`client-hash.txt`);await S.ensureDir(r);let u=v(r,`dist`);S.existsSync(u)&&await S.remove(u),await S.copy(n,u,{overwrite:!0,errorOnExist:!1}),await gt(e.viteConfig.publicDir,u),o=ft(u,e.htmlEntry),await S.writeFile(l,i,`utf-8`),await wt(v(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-s,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:o}}async function bt(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};S.existsSync(e.ssgOut)&&await S.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await ee(vt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function xt(e,t){if(!t||_(t))return;let n=b(e,t),r=y(b(e),n);if(!(r===`..`||r.startsWith(`..${x}`)||_(r)))try{let t=S.realpathSync(e),r=S.realpathSync(n),i=y(t,r);return i===`..`||i.startsWith(`..${x}`)||_(i)||!S.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function St(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 Ct(e,t){let n=S.readdirSync(e,{withFileTypes:!0});S.mkdirSync(t,{recursive:!0});for(let r of n){let n=v(e,r.name),i=v(t,r.name);if(r.isDirectory())Ct(n,i);else if(r.isFile())try{S.linkSync(n,i)}catch{S.copyFileSync(n,i)}}}async function wt(e,t=5,n){try{if(!S.existsSync(e))return;let r=await S.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=v(e,t.name),r=await S.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 S.remove(v(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`?v(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 a=E.createHash(`md5`).update(n).digest(`hex`),o=U(n),s=e.routeToSourceFileMap[o]||e.routeToSourceFileMap[n],c=s?e.sourceMeta.get(s):void 0;t.set(n,Dt({path:n,pathHash:a,cachedHtmlFile:v(e.ssgPagesDir,`${a}.html`),cachedLoaderFile:v(e.ssgPagesDir,`${a}.json`),finalOutFile:v(e.outDir,Et(n,e.dirStyle)),normalizedKey:o,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[n]??e.fallbackHash,fetchUrl:`${r(e.contextBase)}${i(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 Y(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function Nt(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 Pt(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(!Nt(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=Y(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):Nt(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!Nt(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(!Nt(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 Ft=Number.parseInt(T)>=5?[`.vite`]:[];function It(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function Lt(t,n){return`static-loader-data${e(t===`/`?`/index`:t.endsWith(`/`)?`${t}index`:t)}.${n}.json`}function X(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function Rt(e){let t=new Set;for(let n of Object.values(e)){X(n.file)&&t.add(n.file);for(let e of n.css||[])X(e)&&t.add(e);for(let e of n.imports||[])X(e)&&t.add(e);for(let e of n.dynamicImports||[])X(e)&&t.add(e)}return[...t]}async function zt(e,t,n){return G(e,Rt(t),n?v(n,`chunk-hashes.json`):void 0)}function Bt(t,n=`/`){let r=e(t);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Vt(e,t,n){let r=t?.[n];if(r)return _(r)?r:v(e,r)}function Ht(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,_(n)?y(e,n):n]))}function Ut(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Wt(t={},n={}){let r=process.env.MODE||process.env.NODE_ENV||t.mode||`production`;r!==process.env.NODE_ENV&&(process.env.NODE_ENV=r);let i=process.cwd(),u=n.root||i,d=n.build?.outDir||`dist`,m=n.base||`/`,b=performance.now(),x=0,ee=0,ne=0,{onFinished:C,onStep:w,routeToSourceFileMap:T={},cacheDir:D=`.boltdocs/build`,htmlEntry:O=`index.html`,entry:k=await ge(u,O)}=t,A=`docs`,ie=Object.values(T);if(ie.length>0){let e=ie[0],t=y(u,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(A=t[0])}let j=_(d)?d:v(u,d),M=_(D)?D:v(u,D),N=Ze(u,A,M),F=st({root:u,outDir:j,cacheDir:M,base:m,mode:r,entry:k,htmlEntry:O,docsDirName:A,clientHash:N,routeToSourceFileMap:T}),I=F.clientHash.substring(0,12),L=v(F.cacheDir,`ssr`,I),R=v(F.cacheDir,`client-cache`,F.clientHash),de=R,z=N,_e=N,ye=v(R,`client-hash.txt`),B=!1;try{S.existsSync(ye)&&S.existsSync(v(R,`dist`))&&(B=(await S.readFile(ye,`utf-8`)).trim()===N)}catch{}let V=v(M,`ssg-pages`),H=v(M,`ssg-cache.json`),Se=v(M,`ssg-output.json`),Te=await Oe(Se),Fe=Te!==void 0&&Te.auxiliaryFiles.length===0;B&&(De(Te,je(v(R,`dist`)),O)||(B=!1));let W=[],Ie=!1,Le=(t.dirStyle||n.ssgOptions?.dirStyle)??`flat`;if(B&&Fe&&Le!==`nested`){let e=v(M,`routes-cache.json`);try{if(S.existsSync(e)&&S.existsSync(H)){let t=JSON.parse(S.readFileSync(e,`utf-8`)),n=Me(JSON.parse(S.readFileSync(H,`utf-8`)),t.paths);if(t.dirStyle===Le&&t.base===m){let e=t.paths.every(e=>{let r=U(e),i=n[r];return rt({routePath:e,cacheItem:i,sourceContentHash:nt(T[r]||T[e]||Vt(u,t.sourceFiles,r)||Vt(u,t.sourceFiles,e),_e),ssgPagesDir:V,requireAssetHash:!0})});t.paths.length>0&&e&&(W=t.paths,Ie=!0)}}}catch{}}if(Ie){let e=performance.now(),t={};try{S.existsSync(H)&&(t=Me(JSON.parse(S.readFileSync(H,`utf-8`)),W))}catch{}let r=[...Ae(W,t,Le===`nested`?`nested`:`flat`),`static-loader-data-manifest-${I}.json`],i=je(v(R,`dist`)).filter(e=>e!==O),a=await Oe(Se),o=a?.auxiliaryFiles.length===0&&Ee(a,N,j,i,r,[]),s={};if(!o){S.existsSync(j)&&await S.remove(j);let e=v(R,`dist`);await gt(n.publicDir,e),await S.copy(e,j);let r=[];for(let e of W){let n=E.createHash(`md5`).update(e).digest(`hex`),i=v(V,`${n}.html`),a=v(V,`${n}.json`),o=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(r.push({source:i,destination:v(j,o)}),S.existsSync(a)){let n=U(e),i=t[n];i?.loaderDataFilePath&&(r.push({source:a,destination:v(j,i.loaderDataFilePath)}),s[Bt(e,m)]=i.loaderDataFilePath)}}await Ce(r),await Ne(v(j,`static-loader-data-manifest-${I}.json`),It(s))}await Gt(V,t,W);let c=Math.round(performance.now()-b);w?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),w?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),w?.({name:`Render pages`,duration:0,success:!0,details:`${W.length} pages (all cached)`}),w?.({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:W.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:`${W.length} pages / 0 new / ${W.length} cached`,metrics:{renderedCount:0,cachedCount:W.length,renderedSize:0,totalPages:W.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 C?.(d),await Kt(j),await ke(v(M,`ssg-output.json`),N,j,r,i);return}let Re=await re(n,`build`,r,r),ze=Object.assign({},Re.ssgOptions||{},t),{script:He=`sync`,mock:Ue=!1,formatting:We=`none`,includedRoutes:Ge=Ut,onBeforePageRender:Ke,onPageRendered:qe,dirStyle:Je=`flat`,includeAllRoutes:Ye=!1,format:Xe=`esm`,concurrency:Qe=20,rootContainerId:$e=`root`,beastiesOptions:et={}}=ze,tt=et,G=ze.turbo??!1,at=v(M,`ssr`),ot=v(M,`ssr-cache-index.json`);if(L=v(at,G?`turbo-ssr`:I),!G&&B)try{let e=(await S.readJson(ot))[N];if(typeof e==`string`){let t=xt(at,e);t&&(L=t)}}catch{}let ut=Tt(te(),St),dt=()=>{};if(Ue){let{jsdomGlobal:e}=await import(`./jsdomGlobal-RTx-0uYL.mjs`);dt=e()}let K={};try{if(S.existsSync(H)){let e=await S.readJson(H);K=Me(e,Object.keys(e))}}catch{}let q=!1;if(B)try{let e=v(M,`routes-cache.json`);if(S.existsSync(e)){let t=JSON.parse(S.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=U(e),r=K[n];return rt({routePath:e,cacheItem:r,sourceContentHash:nt(T[n]||T[e]||Vt(u,t.sourceFiles,n)||Vt(u,t.sourceFiles,e),_e),ssgPagesDir:V,requireAssetHash:!0})})&&(W=t.paths,q=!0)}}catch{}let ft=q?``:await xe(Re,k),pt=(G||B)&&S.existsSync(L)&&S.readdirSync(L).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,mt=performance.now(),[J,ht]=await Promise.all([yt({viteConfig:n,resolvedMode:Re.mode,root:u,htmlEntry:O,outDir:j,clientCacheDir:R,finalCacheDir:M,docsDirName:A,initialClientHash:N,canBypassClientBuild:B,customLogger:ut,onStep:w,shouldSuppressLog:St},()=>Ze(u,A,M)),bt({viteConfig:n,resolvedMode:Re.mode,entry:k,ssrEntry:ft,ssgOut:L,format:Xe,canSkipSsrImport:q,serverBuildSkipped:pt,customLogger:ut,onStep:w,shouldSuppressLog:St})]);if(d=J.outDir,de=J.resolvedClientCacheDir,z=J.resolvedClientHash,_e=J.pageContentFallbackHash,I=z.substring(0,12),x=J.durationMs,ee=ht.durationMs,!G)try{let e={};try{e=await S.readJson(ot)}catch{}e[z]=y(at,L),await Pe(ot,e)}catch{}let _t=Xe===`esm`&&process.platform===`win32`?`file://`:``,vt=Xe===`esm`?`.mjs`:`.cjs`;ft.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Ct=`combined`+vt;try{if(S.existsSync(L)){let e=S.readdirSync(L).filter(e=>e.endsWith(vt));e.length>0&&(Ct=e[0])}}catch{}let Et=_t+v(L,Ct).replace(/\\/g,`/`),Dt=Ct.replace(/\.[^/.]+$/,``),At=JSON.parse(await S.readFile(v(L,...Ft,`manifest.json`),`utf-8`)),jt=null,Mt=null,Y=[],Nt,X=`/`,Rt,Wt=null,Yt,Xt=Ge;if(!q){let e=a===void 0?l(import.meta.url):a,t=performance.now(),n=Xe===`esm`?await import(Et):e(Et);ne=performance.now()-t,Nt=n.matchRouteBranchWithParams;let{createRoot:r,includedRoutes:i}=n;Xt=i||Ge,jt=await r(!1);let s=jt;if(Y=s.routes,X=s.base,Rt=s.triggerOnSSRAppRendered,Wt=s.app,Yt=s.routerType,Y&&Y.length>0)for(let e of Y)e.path&&(e.filePath||e.entry)&&!T[e.path]&&(T[e.path]=e.filePath||e.entry);F=lt(F,ct(u,Y,T)),Mt=o(s,n)}let Zt=``,Qt=0,Z=null,$t=null,en=null,tn=!1;async function nn(){if(en){await en;return}let e=$t;e&&(en=e.destroy(),await en)}if(!q){let e=performance.now(),{paths:t}=await be(Y);W=Ye?t:await Xt(t,Y||[]),W=Ut(W,Y||[]),W=Array.from(new Set(W)),Qt+=performance.now()-e;try{await Pe(v(M,`routes-cache.json`),{paths:W,dirStyle:Je,base:m,sourceFiles:Ht(u,T)},0)}catch{}Zt=v(L,Dt+vt)}async function rn(){if(Z||tn||W.length<=4)return;tn=!0;let e=performance.now();try{Zt=v(L,Dt+vt);let{SsgWorkerPool:t}=await import(`./ssg-worker-pool-DxzleN_R.mjs`);Z=new t({ssrEntryPath:Zt,format:Xe===`esm`?`esm`:`cjs`}),$t=Z,await Z.ready(),Hn=performance.now()-e}catch{Hn=performance.now()-e,Z=null}}let an=ze.criticalCss??!1,on,sn;an===`zig-critters`?(on=await oe(),on||f("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):an===`beasties`&&tt!==!1&&(sn=await ae(d,{publicPath:m,...tt}));let cn=``;if(on){let e=v(j,`assets`);if(S.existsSync(e)){let t=S.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)cn+=S.readFileSync(v(e,n),`utf-8`)+`
3
- `}}let ln={},un={},dn={},fn=null;if(q)for(let e of W){let t=U(e);dn[e]=K[t]?.assetHash||N}else{let[e,t]=await Promise.all([S.readFile(v(j,...Ft,`ssr-manifest.json`),`utf-8`),S.readFile(v(j,...Ft,`manifest.json`),`utf-8`)]);ln=JSON.parse(e),un=JSON.parse(t),fn=ue(un);let n=await zt(j,un,M);await Promise.all(Object.entries(T).map(async([e,t])=>{dn[e]=await fe({outDir:j,indexes:fn,ssrManifest:ln,routeSourceFile:t,root:u,clientHash:N,assetHashes:n})}));for(let e of W)dn[e]||(dn[e]=_e)}let pn=await S.readFile(v(j,O),`utf-8`);S.rmSync(v(j,O)),pn=qt(pn,He);let mn=Ke?null:me({rootContainerId:$e,indexHTML:pn}),hn=(await import(`p-queue`)).default||await import(`p-queue`),gn=new hn({concurrency:Qe}),_n=new hn({concurrency:Math.min(p.cpus().length,4)}),vn=new hn({concurrency:Math.max(2,Math.min(p.cpus().length,6))}),yn={},bn=0,xn=new Map,Sn=new Set;for(let t of W){let n=T[e(t).replace(/\/$/,``)]||T[t];n&&Sn.add(n)}for(let e of Sn)try{if(S.existsSync(e)){let t=S.statSync(e);xn.set(e,{hash:`${t.mtimeMs}:${t.size}`,mtimeMs:t.mtimeMs})}}catch{}let Cn=null;!q&&Nt&&(Cn=P({routes:[...Y],base:X,matchRouteBranchWithParams:Nt,serverManifest:At,manifest:un,ssrManifest:ln}));let wn=Ot({routes:W,outDir:j,ssgPagesDir:V,dirStyle:Je,contextBase:X,fallbackHash:_e,routeToSourceFileMap:T,sourceMeta:xn,routeToAssetHash:dn}),Tn=new le,En=[],Dn=[],On=[],kn=[],An=0,jn=0,Mn=0,Nn=0,Pn=0,Fn=0,In=0,Ln=0,Rn=0,zn=0,Bn=0,Q={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function Vn(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 Hn=0,Un=!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 Wn=0,Gn=0,Kn=0,qn=new Set,Jn=new Set,Yn=[],Xn=we({writeFile:async(e,t)=>{await S.ensureDir(g(e)),await S.writeFile(e,t,`utf-8`)}}),Zn=JSON.stringify(K),Qn=Me(K,W),$n=new Map,er=new Set;er.add(V);for(let e of W){let t=Je===`nested`?v(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;er.add(v(j,g(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;er.add(v(j,`static-loader-data`,g(n)))}er.add(v(j,`static-loader-data`)),await Promise.all([...er].map(e=>S.ensureDir(e)));async function tr(e,t,n,r,i,a,o,s,l,u,d,p,h,g,_){let y=performance.now(),{path:b,cachedHtmlFile:x,cachedLoaderFile:ee,normalizedKey:te,sourceContentHash:ne,sourceMtimeMs:C,fetchUrl:re}=e,w;if(!h&&g===`remix`){if(!Cn)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();w=new Set(await($n.get(b)||Cn(re))),An+=performance.now()-e}else w=new Set;let T;if(s&&Object.keys(s).length>0){let e=Lt(b,I);T=e,G&&await S.writeFile(v(j,e),JSON.stringify(s)),yn[Bt(b,m)]=e,bn++}await p?.(b,t,l);let E=performance.now(),D=mn&&_===pn?mn({appHTML:t,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null}):await he({rootContainerId:$e,appHTML:t,indexHTML:_,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null});Mn+=performance.now()-E;let O=h?``:ve(w),k=o?D.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):D;O&&(k=k.replace(`<head>`,`<head>${O}`));let A=performance.now(),ie=await qe?.(b,k,l)||k;Nn+=performance.now()-A;let M=``;if(s&&Object.keys(s).length>0){let e=JSON.stringify(s).replace(/</g,`\\u003c`);M=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Bt(b,m)}': ${e} };`}let N=c(o),P=ie,ae=`<script>window.__VITE_REACT_SSG_HASH__ = '${I}';${M}${N}<\/script>`,oe=performance.now();if(P=P.replace(`<script>${pe}<\/script>`,``),on){if(cn){let e=se(P,cn,`zig-critters`);try{let t=await Tn.getOrCreate(e,async()=>(await on.processHtml(P,cn)).match(/<style[^>]*data-zig-critters[^>]*>[\s\S]*?<\/style>/g)?.join(`\\n`)||null);t&&!P.includes(`data-zig-critters`)&&(P=P.replace(`</head>`,`${t}</head>`))}catch(e){f(`[zig-critters] Failed to inline CSS for "${b}": ${e instanceof Error?e.message:String(e)}`)}}P=P.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(sn){let e=se(P,cn,`beasties`),t=await Tn.getOrCreate(e,async()=>{let e=await _n.add(()=>sn.process(P));return ce(P,e)});t&&!P.includes(t)&&(P=P.replace(`</head>`,`${t}</head>`)),P=P.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let F=ae+(a||``);F&&(P=P.replace(`<head>`,`<head>${F}`));let le=We===`none`?P:await Jt(P,We);On.push(Math.round(performance.now()-oe));let L=performance.now();G?s&&Object.keys(s).length>0&&T&&await Xn.enqueue(v(j,T),JSON.stringify(s)):(await Xn.enqueue(x,le),s&&Object.keys(s).length>0&&T?(await Xn.enqueue(ee,JSON.stringify(s)),Qn[te]={contentHash:ne,mtime:C?Math.round(C):0,loaderDataFilePath:T,assetHash:e.routeAssetHash}):Qn[te]={contentHash:ne,mtime:C?Math.round(C):0,assetHash:e.routeAssetHash});let ue=performance.now()-L;kn.push(Math.round(ue)),Dn.push(Math.round(performance.now()-y)),Wn++,Ln++,Kn+=le.length}let nr=performance.now(),rr=[];await Pt({routes:W,canBypassClientBuild:B,getPlan:e=>kt(wn,e),isCached:e=>{if(G||!B)return!1;try{return rt({routePath:e.path,cacheItem:K[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:V})}catch{return!1}},onCacheHit:async e=>{let t=K[e.normalizedKey]?.loaderDataFilePath,n=t?v(j,t):void 0,r=!qn.has(e.finalOutFile),i=!!n&&!Jn.has(n);r&&qn.add(e.finalOutFile),i&&n&&Jn.add(n);let a=performance.now();try{r&&Yn.push({source:e.cachedHtmlFile,destination:e.finalOutFile}),n&&t&&S.existsSync(e.cachedLoaderFile)&&(i&&Yn.push({source:e.cachedLoaderFile,destination:n}),yn[Bt(e.path,m)]=t,bn++),Gn++,Rn++,Pn+=performance.now()-a}catch(t){throw r&&qn.delete(e.finalOutFile),i&&n&&Jn.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!Wt&&Yt===`remix`&&Cn&&$n.set(e.path,Cn(e.fetchUrl))},ensurePool:rn,getPool:()=>Z,getWorkerCount:()=>it(Z)?.totalWorkers??0,onWorkerFailure:async(e,t,n,r)=>{if(!Mt)throw Error(`Error on page: ${e}\n${String(n)}`);f(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),Un=!0;try{await nn()}catch{}Z=null,tn=!0;let i=await Mt.render(e);return{path:e,appHTML:i.appHTML,metaAttributes:i.metaAttributes,bodyAttributes:i.bodyAttributes,htmlAttributes:i.htmlAttributes,styleTag:i.styleTag,timings:i.timings,routerContext:s(i.routerContext)}},onWorkerResult:async(e,t,n,r)=>{Fn+=Math.max(0,r-(n.timings?.totalMs??0)),In++,n.timings&&(En.push(Math.round(n.timings.totalMs)),Vn(n.timings));let i={...jt,routePath:e},a=performance.now(),o=await Ke?.(e,pn,i)||pn;jn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await vn.add(()=>tr(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,X,Y,Rt,Wt,Yt??`remix`,o))},scheduleMainThread:(e,t)=>{rr.push(gn.add(async()=>{try{let n={...jt,routePath:e},r=performance.now(),i=await Ke?.(e,pn,n)||pn;jn+=performance.now()-r;let a=performance.now(),{appHTML:o,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Mt.render(e);En.push(Math.round(performance.now()-a)),Vn(p);let m=f?.loaderData;await tr(t,o,u,c,l,d,s(f),m||null,n,X,Y,Rt,Wt,Yt??`remix`,i)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>vn.onIdle(),drainMainThread:async()=>{await Promise.all(rr),await gn.onIdle()},drainWrites:()=>Xn.flush(),cleanupAfterFailure:async()=>{try{S.existsSync(j)&&await S.remove(j)}catch{}},destroyPool:nn,onNoRenderer:e=>{f(`[ssg] No SSR context available for ${e}, skipping`)}}),Bn+=performance.now()-nr;let ir=performance.now();for(let e of W){if(G)continue;let t=wn.get(e);if(!t||!S.existsSync(t.cachedHtmlFile))continue;qn.has(t.finalOutFile)||Yn.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=Qn[t.normalizedKey];if(!n?.loaderDataFilePath||!S.existsSync(t.cachedLoaderFile))continue;let r=v(j,n.loaderDataFilePath);Jn.has(r)||Yn.push({source:t.cachedLoaderFile,destination:r})}await Ce(Yn);let ar=Math.round(performance.now()-ir);zn+=ar;let or=Wn+Gn,sr=(Kn/1024/1024).toFixed(2),cr=0;if(!G)try{let e=JSON.stringify(Qn)!==Zn;e&&await Pe(H,Qn),cr=await Gt(V,Qn,W,e)}catch{}let lr=performance.now()-mt,ur=it($t),dr={renderedCount:Wn,cachedCount:Gn,renderedSize:Kn,totalPages:or,prunedCount:cr,clientBuildMs:Math.round(x),serverBuildMs:Math.round(ee),ssrImportMs:Math.round(ne),workerPoolSetupMs:Math.round(Hn),workerUsed:ur!==null&&!Un,workerCount:ur?.totalWorkers??0,fallbackMainThread:Un,ssrP50Ms:$(En,50),ssrP95Ms:$(En,95),ssrP99Ms:$(En,99),crittersP50Ms:$(On,50),crittersP95Ms:$(On,95),writeP50Ms:$(kn,50),writeP95Ms:$(kn,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:or>0&&lr>0?Math.round(or/(lr/1e3)*10)/10:0,pipeline:{renderedPageCount:Ln,cachedPageCount:Rn,clientBuildMs:Math.round(x),serverBuildMs:Math.round(ee),ssrImportMs:Math.round(ne),workerPoolSetupMs:Math.round(Hn),routePreparationMs:Math.round(Qt),workerTransportMs:Math.round(Fn),workerRoundTripMs:Math.round(Fn),workerTransportAvgMs:In>0?Math.round(Fn/In):0,finalizeP50Ms:$(Dn,50),finalizeP95Ms:$(Dn,95),assetCollectionMs:Math.round(An),beforeHookMs:Math.round(jn),htmlAssemblyMs:Math.round(Mn),onPageRenderedHookMs:Math.round(Nn),criticalCssP50Ms:$(On,50),criticalCssP95Ms:$(On,95),cacheWriteMs:Math.round(0+Xn.writeTimeMs()),cachedOutputMs:Math.round(Pn),renderQueueDrainMs:Math.round(Bn),renderPipelineSettleMs:Math.round(Bn),outputLinkMs:Math.round(zn)}};w?.({name:`Render pages`,duration:lr,success:!0,details:`${or} pages (${Wn} new, ${Gn} cached, ${sr} MB)`,metrics:dr}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(lr),success:!0,details:`${or} pages / ${Wn} new / ${Gn} cached / ${sr} MB`,metrics:dr})}`);let fr=performance.now(),pr=It(yn);await Ne(v(j,`static-loader-data-manifest-${I}.json`),pr),await wt(v(M,`ssr`),5,G?`turbo-ssr`:h(L)),dt();let mr=Re.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;mr&&!mr.disabled&&mr.generateSW&&await mr.generateSW();let hr=Math.round(performance.now()-b);w?.({name:`Static loader data`,duration:performance.now()-fr,success:!0,details:`${bn} loader data files`,metrics:{loaderDataFileCount:bn}}),await C?.(d),await Kt(j);let gr=je(j),_r=await Be(j,hr,M,{outputFiles:gr,manifestPath:v(de,`dist`,...Ft,`manifest.json`)});Ve(j,_r),w?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(hr/1e3).toFixed(1)}s, JS: ${(_r.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(_r.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:hr,totalPages:_r.pages.length,jsSize:_r.totalJSBundleSize,cssSize:_r.totalCSSBundleSize}}),await ke(v(M,`ssg-output.json`),z,j,Ae(W,Qn,Je).concat(`static-loader-data-manifest-${I}.json`),J.clientFiles,gr)}async function Gt(e,t,n=[],r=!1){try{if(!S.existsSync(e))return 0;let i=v(e,`.prune-state`);if(!r)try{let e=await S.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await S.readdir(e),o=new Set,s=new Set([...Object.keys(t),...n]);for(let e of s){let t=E.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 S.remove(v(e,t)),c++);return await S.writeFile(i,String(Date.now()),`utf8`),c}catch{return 0}}async function Kt(e){try{Ft.length>0?await S.remove(v(e,...Ft)):await Promise.all([S.remove(v(e,`manifest.json`)),S.remove(v(e,`ssr-manifest.json`))])}catch{}}function qt(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Jt(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 d(`Error formatting html: ${t?.message}`),e}return e}function Yt(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 Xt({template:e,ssrEntry:r,onBeforePageRender:i,entry:a,rootContainerId:s,onPageRendered:c}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,f)=>{try{let d=u.originalUrl??u.url??`/`,p=await l.ssrLoadModule(r),m=p.createRoot,h=await m(!1,d),g=o(h,p),{app:_,base:v}=h,[y=`/`,b=``]=d.split(`?`),x=new URLSearchParams(b);if(!_&&x.has(`_data`))return g.handleLoader(u,f);let S=await l.transformIndexHtml(d,e),ee=await i?.(d,S,h)||S,{appHTML:te,bodyAttributes:ne,htmlAttributes:C,metaAttributes:re,styleTag:T}=await g.render(t(y,v));re.push(T);let E=await Promise.all([r,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),D=new Set,O=new Set,k=async e=>{if(!e?.ssrTransformResult||O.has(e))return;O.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))D.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await k(t)}};await Promise.all(E.map(async e=>k(e)));let A=[...D].map(e=>_e(n(l.config.base,e)));re.push(...A);let ie=await he({rootContainerId:s,appHTML:te,indexHTML:ee,metaAttributes:re,bodyAttributes:ne,htmlAttributes:C,initialState:null}),j=await c?.(d,ie,h)||ie;f.statusCode=200,f.setHeader(`Content-Type`,`text/html`),w(u,f,j,`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),d(`SSR render error`,t),f.statusCode=500,f.end(t.stack??t.message)}};return l.middlewares.use(Yt),()=>{l.middlewares.use(u)}}}}async function Zt(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 ge(o,t);c=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:v(o,n),l=await O.readFile(v(o,t),`utf-8`)}else{let t=await re(e,`serve`,n,n);o=t.root||a,s={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=s,u=s.entry||await ge(o,r),[d,f]=await Promise.all([xe(t,u),O.readFile(v(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-RTx-0uYL.mjs`);e()}return await ne({...e,plugins:[...e.plugins??[],Xt({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 Qt(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Zt(t,e);return await r.listen(),Z(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){d(`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 ${u.bold(`${e}ms`)}`}n(`\n ${u.cyan(` VITE-REACT-SSG v${B} `)}`,{clear:!e.config.logger.hasWarned}),n(`${u.cyan(`\n VITE v${T}`)+u.dim(r)}\n`),n(u.green(` dev server running at:`)),e.printUrls()}var $t=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{$t as ShellStitcher,Wt as build,Zt as createServer,Qt as dev};
1
+ import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"./router-adapter-BukFH1uk.mjs";import{n as s,t as c}from"./ssg-worker-payload-BHsJklNf.mjs";import{createRequire as l}from"node:module";import{colors as u,error as d,warn as f}from"@bdocs/dui";import p from"node:os";import m,{basename as h,dirname as g,isAbsolute as _,join as v,relative as y,resolve as b,sep as x}from"node:path";import S from"fs-extra";import{build as ee,createLogger as te,createServer as ne,mergeConfig as C,resolveConfig as re,send as w,version as T}from"vite";import E,{createHash as D}from"node:crypto";import O,{readFile as k}from"node:fs/promises";import A from"node:fs";const ie=/import\("([^)]+)"\)/g;function j(e,t){let n=new Set;if(!t)return n;for(let r of t)M(e,r,n);return n}function M(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{M(e,t,n)}),n):n}function N(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(ie);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=j(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 P(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=N(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}}async function ae(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}async function F(){try{let e=await import(`@bdocs/zig-critters`),t=e.extractCriticalCss||e.default?.extractCriticalCss;return t?{extractCriticalCss:t}:void 0}catch{return}}async function oe(e={}){try{let{createZigCrittersPool:t}=await import(`./zig-pool-lU4VVJjc.mjs`),n=await t(e);if(n)return{extractCriticalCss:(e,t,r)=>n.extractCriticalCss(e,t,r),dispose:()=>n.dispose()}}catch{}return F()}function se(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return E.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=512){this.maxEntries=e,this.entries=new Map}getOrCreate(e,t){let n=this.entries.get(e);if(n)return n.promise;let r={promise:Promise.resolve(null),settled:!1},i=Promise.resolve().then(t).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{r.settled=!0,this.evictSettledEntries()});return r.promise=i,this.entries.set(e,r),this.evictSettledEntries(),i}get size(){return this.entries.size}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}}};const L=new Set([`.js`,`.mjs`,`.css`]);function R(e){let t=m.extname(e).toLowerCase();return L.has(t)}function ue(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 de(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)&&de(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])R(t)&&!n.has(t)&&de(e,t,n)}}async function fe(e,t,n){if(n){let e=E.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 k(m.join(e,t));r.set(t,n)}catch{}}));let i=E.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}=e,l=n;if(!l){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);l=ue(r)}let{byFile:u,bySrc:d}=l,f=m.relative(o,a).replace(/\\/g,`/`),p=new Set,h=d.get(f);if(h)de(u,h.file,p);else{let e=[f,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)R(t)&&de(u,t,p)}}if(p.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(p).sort(),c)}const me=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function z(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 z(z(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 z(z(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 z(z(p,`html`,a),`body`,i)}async function _e(e,t=`index.html`){let[,n]=[...(await S.readFile(v(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 ve(e){return`<link rel="stylesheet" href="${e}">`}function ye(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=B(e);r&&n.push(r)}}),n.join(``)}function B(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 V=`0.4.1`;async function be(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&&Ce(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 xe(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:v(e.root,t))}const Se=/[:*?]/;function Ce(e){return e?Se.test(e):!1}async function we(e,t){if(e!==t){await S.ensureDir(g(t)),await S.remove(t);try{await S.link(e,t)}catch{await S.copy(e,t)}}}async function Te(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(we(r.source,r.destination)));await Promise.all(n)}function Ee({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 De(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function Oe(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(Ne(n),[...new Set(u)].sort())?u.every(e=>S.existsSync(`${n}/${e}`)):!1}function ke(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 Ae(e){try{let t=await S.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:De(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function je(e,t,n,r,i=[],a){let o=a||Ne(n),s=new Set(r),c=new Set(i);return Ie(e,De(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 Me(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[H(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function Ne(e){let t=[],n=r=>{let i;try{i=S.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(y(e,i).split(x).join(`/`))}};return n(e),t.sort()}function H(t){return!t||t===`/`?``:e(t).replace(/\/+$/,``)}function Pe(e,t){let n=new Set(t.map(H)),r={};for(let[t,i]of Object.entries(e)){let e=H(t);n.has(e)&&(r[e]=i)}return r}async function Fe(e,t){try{if(await S.readFile(e,`utf8`)===t)return!1}catch{}return await S.ensureDir(g(e)),await S.writeFile(e,t,`utf8`),!0}async function Ie(e,t,n=2){try{let n=await S.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await S.ensureDir(g(e)),await S.writeJson(e,t,{spaces:n}),!0}const U=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),Le=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function W(e){try{return A.statSync(e).size}catch{return 0}}const Re=`boltdocs-metrics.json`;function ze(e){if(!e)return null;try{let t=v(e,Re);return A.existsSync(t)?JSON.parse(A.readFileSync(t,`utf-8`)):null}catch{return null}}function Be(e,t){try{let n=m.resolve(e,`..`,`reports`);A.existsSync(n)||A.mkdirSync(n,{recursive:!0}),A.writeFileSync(v(e,Re),JSON.stringify(t))}catch{}}async function Ve(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=ze(n);if(e)return e.buildTime=t,e}let i=v(e,`.vite`),a=v(e,`assets`),o={},s=r.manifestPath||v(i,`manifest.json`);A.existsSync(s)&&(o=JSON.parse(await A.readFileSync(s,`utf-8`)));let c=0,l=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=W(v(e,n));c+=i;for(let t of r)l+=W(v(e,t))}let u=0,d=0;if(A.existsSync(a)){let e=A.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=m.extname(t.name).toLowerCase(),n=v(a,t.name);U.has(e)?u+=W(n):Le.has(e)&&d++}}let f=v(e,`index.html`),p=0,h=[];if(A.existsSync(f)){let e=W(f);p+=e,h.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let g=r.outputFiles?[...r.outputFiles]:(()=>{try{return A.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of g){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=W(v(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);p+=n,h.push({route:e,htmlSize:n,htmlFile:t})}}let _={buildTime:t,totalJSBundleSize:c,totalCSSBundleSize:l,totalImagesSize:u,totalHTMLSize:p,fontCount:d,pages:h};return n&&Be(n,_),_}function He(e,t){let n=m.resolve(e,`..`,`.boltdocs`,`reports`);A.existsSync(n)||A.mkdirSync(n,{recursive:!0});let r=v(n,`performance.json`);A.writeFileSync(r,JSON.stringify(t,null,2))}function Ue(e,t){try{if(!S.existsSync(e))return!1;let n=S.readFileSync(e);return t.update(n),!0}catch{return!1}}const We=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`]),Ge=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`,`.webp`,`.png`,`.jpg`,`.jpeg`,`.gif`,`.ico`]);function Ke(e){let t=e.lastIndexOf(`.`);if(t===-1)return!1;let n=e.slice(t).toLowerCase();return Ge.has(n)}function qe(e,t,n){let r;try{r=S.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`))continue;let r=v(e,i),a;try{a=S.statSync(r)}catch{continue}if(a.isDirectory()){if(We.has(i))continue;qe(r,t,n)}else if(a.isFile()&&Ke(i)){let e=y(t,r).replace(/\\/g,`/`);n.update(`${e}:${a.mtimeMs}:${a.size}\n`)}}}function Je(e,t){let n=l(import.meta.url);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=v(g(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);S.existsSync(i)&&qe(i,e,t)}catch{}}function Ye(e,t,n){let r=[v(e,t,`public`),v(e,t,`src`)];for(let t of r)try{S.existsSync(t)&&qe(t,e,n)}catch{}}const Xe=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`,`pnpm-lock.yaml`,`package-lock.json`,`yarn.lock`];function Ze(e,t){for(let n of Xe){let r=v(e,n);try{if(S.existsSync(r)){let e=S.statSync(r);t.update(`${n}:${e.mtimeMs}:${e.size}\n`)}}catch{}}}function Qe(e,t,n){try{S.removeSync(v(n,`hash-merkle.json`))}catch{}try{let n=D(`sha256`);if(Je(e,n),Ue(v(e,`.boltdocs`,`compiled`,`manifest.json`),n))Ye(e,t,n);else{let r=v(e,t);S.existsSync(r)&&qe(r,e,n)}return Ze(e,n),n.digest(`hex`)}catch(e){return f(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),D(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function $e(e){return E.createHash(`md5`).update(e).digest(`hex`)}function et(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function tt(e){if(e)try{let t=await S.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function G(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await S.ensureDir(g(e)),await S.writeJson(n,{version:1,files:t},{spaces:0}),await S.move(n,e,{overwrite:!0})}catch{await S.remove(n).catch(()=>{})}}async function nt(e,t,n){let r=await tt(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=v(e,t);try{let e=await S.stat(n);if(!e.isFile())return;let o=r?.files[t];if(et(o,e)){i.set(t,o.hash),a[t]=o;return}let s=$e(await S.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 G(n,a),i}function rt(e,t){if(e)try{let t=S.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{}return t}function it({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=E.createHash(`md5`).update(e).digest(`hex`);return!(!S.existsSync(v(i,`${o}.html`))||t.loaderDataFilePath&&!S.existsSync(v(i,`${o}.json`)))}function at(e){return e===null?null:e.poolMetrics()}function ot(e,t){return _(t)?t:v(e,t)}function st(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=H(r);n[t]=ot(e,i)}return Object.freeze(n)}function ct(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:st(e.root,e.routeToSourceFileMap)})}function lt(e,t,n={}){let r=st(e,n),i=t.map(t=>{let i=H(t.path),a=n[t.path],o=a?ot(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 ut(e,t){return Object.freeze({...e,routeManifest:t})}const dt=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],K=[`react`,`react-dom`];function q(e){return Number.parseInt(T,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=S.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=v(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=y(e,a).split(x).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function mt(e){return e.map(e=>{if(Array.isArray(e))return mt(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 S.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=v(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push(y(e,i).split(x).join(`/`))}};return await n(e),t.sort()}async function gt(e){try{let t=await S.readFile(e);return D(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function _t(e,t){if(!t||_(t))return;let n=b(e),r=b(n,t),i=y(n,r);if(!(!i||i===`..`||i.startsWith(`..${x}`)||_(i)))return r}async function vt(e,t){let n=v(b(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await S.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&&S.existsSync(e)?await ht(e):[],a={};for(let t of i){let n=await gt(v(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 S.remove(r)}e&&S.existsSync(e)&&(await S.ensureDir(t),await S.copy(e,t,{overwrite:!0,errorOnExist:!1})),await S.ensureDir(b(t,`..`)),await S.writeJson(n,{version:1,files:a})}function yt(e){return C(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...q({input:{app:v(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(_(t.build.outDir||``)?t.build.outDir||`dist`:b(e.root,t.build.outDir||`dist`))}}]})}function bt(e){return C(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,...q({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:[...dt],external:[...K]},plugins:[...mt(e.viteConfig.plugins||[]),ft()]})}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`}),S.existsSync(e.outDir)&&await S.remove(e.outDir);let t=v(e.clientCacheDir,`dist`);await vt(e.viteConfig.publicDir,t),Tt(t,e.outDir),o=pt(v(e.clientCacheDir,`dist`),e.htmlEntry)}else{await ee(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=v(e.finalCacheDir,`client-cache`,i);let l=v(r,`client-hash.txt`);await S.ensureDir(r);let u=v(r,`dist`);S.existsSync(u)&&await S.remove(u),await S.copy(n,u,{overwrite:!0,errorOnExist:!1}),await vt(e.viteConfig.publicDir,u),o=pt(u,e.htmlEntry),await S.writeFile(l,i,`utf-8`),await Et(v(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};S.existsSync(e.ssgOut)&&await S.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await ee(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||_(t))return;let n=b(e,t),r=y(b(e),n);if(!(r===`..`||r.startsWith(`..${x}`)||_(r)))try{let t=S.realpathSync(e),r=S.realpathSync(n),i=y(t,r);return i===`..`||i.startsWith(`..${x}`)||_(i)||!S.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 Tt(e,t){let n=S.readdirSync(e,{withFileTypes:!0});S.mkdirSync(t,{recursive:!0});for(let r of n){let n=v(e,r.name),i=v(t,r.name);if(r.isDirectory())Tt(n,i);else if(r.isFile())try{S.linkSync(n,i)}catch{S.copyFileSync(n,i)}}}async function Et(e,t=5,n){try{if(!S.existsSync(e))return;let r=await S.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=v(e,t.name),r=await S.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 S.remove(v(e,t.name))}catch{}}function Dt(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 Ot(e,t){return t===`nested`?v(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function kt(e){return Object.freeze(e)}function At(e){let t=new Map;for(let n of e.routes){let a=E.createHash(`md5`).update(n).digest(`hex`),o=H(n),s=e.routeToSourceFileMap[o]||e.routeToSourceFileMap[n],c=s?e.sourceMeta.get(s):void 0;t.set(n,kt({path:n,pathHash:a,cachedHtmlFile:v(e.ssgPagesDir,`${a}.html`),cachedLoaderFile:v(e.ssgPagesDir,`${a}.json`),finalOutFile:v(e.outDir,Ot(n,e.dirStyle)),normalizedKey:o,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[n]??e.fallbackHash,fetchUrl:`${r(e.contextBase)}${i(n)}`}))}return t}function jt(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function Mt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function Nt(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function J(e,t){return e>4&&!t}function Pt(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function Y(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=Nt(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=Mt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(J(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=Nt(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(!Y(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):Y(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!Y(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=Nt(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(!Y(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(T)>=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(t,n){return`static-loader-data${e(t===`/`?`/index`:t.endsWith(`/`)?`${t}index`:t)}.${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 nt(e,Bt(t),n?v(n,`chunk-hashes.json`):void 0)}function Ht(t,n=`/`){let r=e(t);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Ut(e,t,n){let r=t?.[n];if(r)return _(r)?r:v(e,r)}function Wt(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,_(n)?y(e,n):n]))}function Gt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Kt(t={},n={}){let r=process.env.MODE||process.env.NODE_ENV||t.mode||`production`;r!==process.env.NODE_ENV&&(process.env.NODE_ENV=r);let i=process.cwd(),u=n.root||i,d=n.build?.outDir||`dist`,m=n.base||`/`,b=performance.now(),x=0,ee=0,ne=0,{onFinished:C,onStep:w,routeToSourceFileMap:T={},cacheDir:D=`.boltdocs/build`,htmlEntry:O=`index.html`,entry:k=await _e(u,O)}=t,A=`docs`,ie=Object.values(T);if(ie.length>0){let e=ie[0],t=y(u,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(A=t[0])}let j=_(d)?d:v(u,d),M=_(D)?D:v(u,D),N=Qe(u,A,M),F=ct({root:u,outDir:j,cacheDir:M,base:m,mode:r,entry:k,htmlEntry:O,docsDirName:A,clientHash:N,routeToSourceFileMap:T}),I=F.clientHash.substring(0,12),L=v(F.cacheDir,`ssr`,I),R=v(F.cacheDir,`client-cache`,F.clientHash),de=R,fe=N,z=N,ve=v(R,`client-hash.txt`),B=!1;try{S.existsSync(ve)&&S.existsSync(v(R,`dist`))&&(B=(await S.readFile(ve,`utf-8`)).trim()===N)}catch{}let V=v(M,`ssg-pages`),Se=v(M,`ssg-cache.json`),Ce=v(M,`ssg-output.json`),we=await Ae(Ce),De=we!==void 0&&we.auxiliaryFiles.length===0;B&&(ke(we,Ne(v(R,`dist`)),O)||(B=!1));let U=[],Le=!1,W=(t.dirStyle||n.ssgOptions?.dirStyle)??`flat`;if(B&&De&&W!==`nested`){let e=v(M,`routes-cache.json`);try{if(S.existsSync(e)&&S.existsSync(Se)){let t=JSON.parse(S.readFileSync(e,`utf-8`)),n=Pe(JSON.parse(S.readFileSync(Se,`utf-8`)),t.paths);if(t.dirStyle===W&&t.base===m){let e=t.paths.every(e=>{let r=H(e),i=n[r];return it({routePath:e,cacheItem:i,sourceContentHash:rt(T[r]||T[e]||Ut(u,t.sourceFiles,r)||Ut(u,t.sourceFiles,e),z),ssgPagesDir:V,requireAssetHash:!0})});t.paths.length>0&&e&&(U=t.paths,Le=!0)}}}catch{}}if(Le){let e=performance.now(),t={};try{S.existsSync(Se)&&(t=Pe(JSON.parse(S.readFileSync(Se,`utf-8`)),U))}catch{}let r=[...Me(U,t,W===`nested`?`nested`:`flat`),`static-loader-data-manifest-${I}.json`],i=Ne(v(R,`dist`)).filter(e=>e!==O),a=await Ae(Ce),o=a?.auxiliaryFiles.length===0&&Oe(a,N,j,i,r,[]),s={};if(!o){S.existsSync(j)&&await S.remove(j);let e=v(R,`dist`);await vt(n.publicDir,e),await S.copy(e,j);let r=[];for(let e of U){let n=E.createHash(`md5`).update(e).digest(`hex`),i=v(V,`${n}.html`),a=v(V,`${n}.json`),o=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(r.push({source:i,destination:v(j,o)}),S.existsSync(a)){let n=H(e),i=t[n];i?.loaderDataFilePath&&(r.push({source:a,destination:v(j,i.loaderDataFilePath)}),s[Ht(e,m)]=i.loaderDataFilePath)}}await Te(r),await Fe(v(j,`static-loader-data-manifest-${I}.json`),Lt(s))}await qt(V,t,U);let c=Math.round(performance.now()-b);w?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),w?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),w?.({name:`Render pages`,duration:0,success:!0,details:`${U.length} pages (all cached)`}),w?.({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:U.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:`${U.length} pages / 0 new / ${U.length} cached`,metrics:{renderedCount:0,cachedCount:U.length,renderedSize:0,totalPages:U.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 C?.(d),await Jt(j),await je(v(M,`ssg-output.json`),N,j,r,i);return}let Re=await re(n,`build`,r,r),ze=Object.assign({},Re.ssgOptions||{},t),{script:Be=`sync`,mock:Ue=!1,formatting:We=`none`,includedRoutes:Ge=Gt,onBeforePageRender:Ke,onPageRendered:qe,dirStyle:Je=`flat`,includeAllRoutes:Ye=!1,format:Xe=`esm`,concurrency:Ze=20,rootContainerId:$e=`root`,beastiesOptions:et={}}=ze,tt=et,G=ze.turbo??!1,nt=v(M,`ssr`),ot=v(M,`ssr-cache-index.json`);if(L=v(nt,G?`turbo-ssr`:I),!G&&B)try{let e=(await S.readJson(ot))[N];if(typeof e==`string`){let t=Ct(nt,e);t&&(L=t)}}catch{}let st=Dt(te(),wt),dt=()=>{};if(Ue){let{jsdomGlobal:e}=await import(`./jsdomGlobal-RTx-0uYL.mjs`);dt=e()}let K={};try{if(S.existsSync(Se)){let e=await S.readJson(Se);K=Pe(e,Object.keys(e))}}catch{}let q=!1;if(B)try{let e=v(M,`routes-cache.json`);if(S.existsSync(e)){let t=JSON.parse(S.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=H(e),r=K[n];return it({routePath:e,cacheItem:r,sourceContentHash:rt(T[n]||T[e]||Ut(u,t.sourceFiles,n)||Ut(u,t.sourceFiles,e),z),ssgPagesDir:V,requireAssetHash:!0})})&&(U=t.paths,q=!0)}}catch{}let ft=q?``:await xe(Re,k),pt=(G||B)&&S.existsSync(L)&&S.readdirSync(L).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,mt=performance.now(),[ht,gt]=await Promise.all([xt({viteConfig:n,resolvedMode:Re.mode,root:u,htmlEntry:O,outDir:j,clientCacheDir:R,finalCacheDir:M,docsDirName:A,initialClientHash:N,canBypassClientBuild:B,customLogger:st,onStep:w,shouldSuppressLog:wt},()=>Qe(u,A,M)),St({viteConfig:n,resolvedMode:Re.mode,entry:k,ssrEntry:ft,ssgOut:L,format:Xe,canSkipSsrImport:q,serverBuildSkipped:pt,customLogger:st,onStep:w,shouldSuppressLog:wt})]);if(d=ht.outDir,de=ht.resolvedClientCacheDir,fe=ht.resolvedClientHash,z=ht.pageContentFallbackHash,I=fe.substring(0,12),x=ht.durationMs,ee=gt.durationMs,!G)try{let e={};try{e=await S.readJson(ot)}catch{}e[fe]=y(nt,L),await Ie(ot,e)}catch{}let _t=Xe===`esm`&&process.platform===`win32`?`file://`:``,yt=Xe===`esm`?`.mjs`:`.cjs`;ft.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let bt=`combined`+yt;try{if(S.existsSync(L)){let e=S.readdirSync(L).filter(e=>e.endsWith(yt));e.length>0&&(bt=e[0])}}catch{}let Tt=_t+v(L,bt).replace(/\\/g,`/`),Ot=bt.replace(/\.[^/.]+$/,``),kt=JSON.parse(await S.readFile(v(L,...It,`manifest.json`),`utf-8`)),Mt=null,Nt=null,J=[],Pt,Y=`/`,zt,Bt=null,Kt,Zt=Ge;if(!q){let e=a===void 0?l(import.meta.url):a,t=performance.now(),n=Xe===`esm`?await import(Tt):e(Tt);ne=performance.now()-t,Pt=n.matchRouteBranchWithParams;let{createRoot:r,includedRoutes:i}=n;Zt=i||Ge,Mt=await r(!1);let s=Mt;if(J=s.routes,Y=s.base,zt=s.triggerOnSSRAppRendered,Bt=s.app,Kt=s.routerType,J&&J.length>0)for(let e of J)e.path&&(e.filePath||e.entry)&&!T[e.path]&&(T[e.path]=e.filePath||e.entry);F=ut(F,lt(u,J,T)),Nt=o(s,n)}let Qt=``,$t=0,X=null,en=null,tn=null,nn=!1;async function rn(){if(tn){await tn;return}let e=en;e&&(tn=e.destroy(),await tn)}if(!q){let e=performance.now(),{paths:t}=await be(J);U=Ye?t:await Zt(t,J||[]),U=Gt(U,J||[]),U=Array.from(new Set(U)),$t+=performance.now()-e;try{await Ie(v(M,`routes-cache.json`),{paths:U,dirStyle:Je,base:m,sourceFiles:Wt(u,T)},0)}catch{}Qt=v(L,Ot+yt)}async function an(){if(X||nn||U.length<=4)return;nn=!0;let e=performance.now();try{Qt=v(L,Ot+yt);let{SsgWorkerPool:t}=await import(`./ssg-worker-pool-DxzleN_R.mjs`);X=new t({ssrEntryPath:Qt,format:Xe===`esm`?`esm`:`cjs`}),en=X,await X.ready(),Un=performance.now()-e}catch{Un=performance.now()-e,X=null}}let on=ze.criticalCss??`zig-critters`,sn,cn;on===`zig-critters`?(sn=await oe({concurrency:Math.max(1,Math.min(Ze,p.cpus().length,8))}),sn||f("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):on===`beasties`&&tt!==!1&&(cn=await ae(d,{publicPath:m,...tt}));let ln=``,un=``;if(sn){let e=v(j,`assets`);if(S.existsSync(e)){let t=S.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)ln+=S.readFileSync(v(e,n),`utf-8`)+`
3
+ `}ln&&(un=E.createHash(`sha256`).update(ln).digest())}let dn={},fn={},pn={},mn=null;if(q)for(let e of U){let t=H(e);pn[e]=K[t]?.assetHash||N}else{let[e,t]=await Promise.all([S.readFile(v(j,...It,`ssr-manifest.json`),`utf-8`),S.readFile(v(j,...It,`manifest.json`),`utf-8`)]);dn=JSON.parse(e),fn=JSON.parse(t),mn=ue(fn);let n=await Vt(j,fn,M);await Promise.all(Object.entries(T).map(async([e,t])=>{pn[e]=await pe({outDir:j,indexes:mn,ssrManifest:dn,routeSourceFile:t,root:u,clientHash:N,assetHashes:n})}));for(let e of U)pn[e]||(pn[e]=z)}let Z=await S.readFile(v(j,O),`utf-8`);S.rmSync(v(j,O)),Z=Yt(Z,Be);let hn=Ke?null:he({rootContainerId:$e,indexHTML:Z}),gn=(await import(`p-queue`)).default||await import(`p-queue`),_n=new gn({concurrency:Ze}),vn=new gn({concurrency:Math.min(p.cpus().length,4)}),yn=new gn({concurrency:Math.max(2,Math.min(p.cpus().length,6))}),bn={},xn=0,Sn=new Map,Cn=new Set;for(let t of U){let n=T[e(t).replace(/\/$/,``)]||T[t];n&&Cn.add(n)}for(let e of Cn)try{if(S.existsSync(e)){let t=S.statSync(e);Sn.set(e,{hash:`${t.mtimeMs}:${t.size}`,mtimeMs:t.mtimeMs})}}catch{}let wn=null;!q&&Pt&&(wn=P({routes:[...J],base:Y,matchRouteBranchWithParams:Pt,serverManifest:kt,manifest:fn,ssrManifest:dn}));let Tn=At({routes:U,outDir:j,ssgPagesDir:V,dirStyle:Je,contextBase:Y,fallbackHash:z,routeToSourceFileMap:T,sourceMeta:Sn,routeToAssetHash:pn}),En=new le,Dn=[],On=[],kn=[],An=[],jn=0,Mn=0,Nn=0,Pn=0,Fn=0,In=0,Ln=0,Rn=0,zn=0,Bn=0,Vn=0,Q={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function Hn(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 Un=0,Wn=!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 Gn=0,Kn=0,qn=0,Jn=new Set,Yn=new Set,Xn=[],Zn=Ee({writeFile:async(e,t)=>{await S.ensureDir(g(e)),await S.writeFile(e,t,`utf-8`)}}),Qn=JSON.stringify(K),$n=Pe(K,U),er=new Map,tr=new Set;tr.add(V);for(let e of U){let t=Je===`nested`?v(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;tr.add(v(j,g(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;tr.add(v(j,`static-loader-data`,g(n)))}tr.add(v(j,`static-loader-data`)),await Promise.all([...tr].map(e=>S.ensureDir(e)));async function nr(e,t,n,r,i,a,o,s,l,u,d,p,h,g,_){let y=performance.now(),{path:b,cachedHtmlFile:x,cachedLoaderFile:ee,normalizedKey:te,sourceContentHash:ne,sourceMtimeMs:C,fetchUrl:re}=e,w;if(!h&&g===`remix`){if(!wn)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();w=new Set(await(er.get(b)||wn(re))),jn+=performance.now()-e}else w=new Set;let T;if(s&&Object.keys(s).length>0){let e=Rt(b,I);T=e,G&&await S.writeFile(v(j,e),JSON.stringify(s)),bn[Ht(b,m)]=e,xn++}await p?.(b,t,l);let E=performance.now(),D=hn&&_===Z?hn({appHTML:t,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null}):await ge({rootContainerId:$e,appHTML:t,indexHTML:_,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null});Nn+=performance.now()-E;let O=h?``:ye(w),k=o?D.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):D;O&&(k=k.replace(`<head>`,`<head>${O}`));let A=performance.now(),ie=await qe?.(b,k,l)||k;Pn+=performance.now()-A;let M=``;if(s&&Object.keys(s).length>0){let e=JSON.stringify(s).replace(/</g,`\\u003c`);M=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Ht(b,m)}': ${e} };`}let N=c(o),P=ie,ae=`<script>window.__VITE_REACT_SSG_HASH__ = '${I}';${M}${N}<\/script>`,F=performance.now();if(P=P.replace(`<script>${me}<\/script>`,``),sn){if(ln){let e=se(P,un,ln,`zig-critters`);try{let t=await En.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await sn.extractCriticalCss(P,ln);return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&f(`[zig-critters] Critical CSS for "${b}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)});t&&!P.includes(`data-zig-critters`)&&(P=P.replace(`</head>`,`${t}</head>`))}catch(e){f(`[zig-critters] Failed to inline CSS for "${b}": ${e instanceof Error?e.message:String(e)}`)}}P=P.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(cn){let e=se(P,un,ln,`beasties`),t=await En.getOrCreate(e,async()=>{let e=await vn.add(()=>cn.process(P));return ce(P,e)});t&&!P.includes(t)&&(P=P.replace(`</head>`,`${t}</head>`)),P=P.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let oe=ae+(a||``);oe&&(P=P.replace(`<head>`,`<head>${oe}`));let le=We===`none`?P:await Xt(P,We);kn.push(Math.round(performance.now()-F));let L=performance.now();G?s&&Object.keys(s).length>0&&T&&await Zn.enqueue(v(j,T),JSON.stringify(s)):(await Zn.enqueue(x,le),s&&Object.keys(s).length>0&&T?(await Zn.enqueue(ee,JSON.stringify(s)),$n[te]={contentHash:ne,mtime:C?Math.round(C):0,loaderDataFilePath:T,assetHash:e.routeAssetHash}):$n[te]={contentHash:ne,mtime:C?Math.round(C):0,assetHash:e.routeAssetHash});let R=performance.now()-L;An.push(Math.round(R)),On.push(Math.round(performance.now()-y)),Gn++,Rn++,qn+=le.length}let rr=performance.now(),ir=[];await Ft({routes:U,canBypassClientBuild:B,getPlan:e=>jt(Tn,e),isCached:e=>{if(G||!B)return!1;try{return it({routePath:e.path,cacheItem:K[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:V})}catch{return!1}},onCacheHit:async e=>{let t=K[e.normalizedKey]?.loaderDataFilePath,n=t?v(j,t):void 0,r=!Jn.has(e.finalOutFile),i=!!n&&!Yn.has(n);r&&Jn.add(e.finalOutFile),i&&n&&Yn.add(n);let a=performance.now();try{r&&Xn.push({source:e.cachedHtmlFile,destination:e.finalOutFile}),n&&t&&S.existsSync(e.cachedLoaderFile)&&(i&&Xn.push({source:e.cachedLoaderFile,destination:n}),bn[Ht(e.path,m)]=t,xn++),Kn++,zn++,Fn+=performance.now()-a}catch(t){throw r&&Jn.delete(e.finalOutFile),i&&n&&Yn.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!Bt&&Kt===`remix`&&wn&&er.set(e.path,wn(e.fetchUrl))},ensurePool:an,getPool:()=>X,getWorkerCount:()=>at(X)?.totalWorkers??0,onWorkerFailure:async(e,t,n,r)=>{if(!Nt)throw Error(`Error on page: ${e}\n${String(n)}`);f(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),Wn=!0;try{await rn()}catch{}X=null,nn=!0;let i=await Nt.render(e);return{path:e,appHTML:i.appHTML,metaAttributes:i.metaAttributes,bodyAttributes:i.bodyAttributes,htmlAttributes:i.htmlAttributes,styleTag:i.styleTag,timings:i.timings,routerContext:s(i.routerContext)}},onWorkerResult:async(e,t,n,r)=>{In+=Math.max(0,r-(n.timings?.totalMs??0)),Ln++,n.timings&&(Dn.push(Math.round(n.timings.totalMs)),Hn(n.timings));let i={...Mt,routePath:e},a=performance.now(),o=await Ke?.(e,Z,i)||Z;Mn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await yn.add(()=>nr(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,Y,J,zt,Bt,Kt??`remix`,o))},scheduleMainThread:(e,t)=>{ir.push(_n.add(async()=>{try{let n={...Mt,routePath:e},r=performance.now(),i=await Ke?.(e,Z,n)||Z;Mn+=performance.now()-r;let a=performance.now(),{appHTML:o,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Nt.render(e);Dn.push(Math.round(performance.now()-a)),Hn(p);let m=f?.loaderData;await nr(t,o,u,c,l,d,s(f),m||null,n,Y,J,zt,Bt,Kt??`remix`,i)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>yn.onIdle(),drainMainThread:async()=>{await Promise.all(ir),await _n.onIdle()},drainWrites:()=>Zn.flush(),cleanupAfterFailure:async()=>{try{S.existsSync(j)&&await S.remove(j)}catch{}},destroyPool:rn,onNoRenderer:e=>{f(`[ssg] No SSR context available for ${e}, skipping`)}}),Vn+=performance.now()-rr;let ar=performance.now();for(let e of U){if(G)continue;let t=Tn.get(e);if(!t||!S.existsSync(t.cachedHtmlFile))continue;Jn.has(t.finalOutFile)||Xn.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=$n[t.normalizedKey];if(!n?.loaderDataFilePath||!S.existsSync(t.cachedLoaderFile))continue;let r=v(j,n.loaderDataFilePath);Yn.has(r)||Xn.push({source:t.cachedLoaderFile,destination:r})}await Te(Xn);let or=Math.round(performance.now()-ar);Bn+=or;let sr=Gn+Kn,cr=(qn/1024/1024).toFixed(2),lr=0;if(!G)try{let e=JSON.stringify($n)!==Qn;e&&await Ie(Se,$n),lr=await qt(V,$n,U,e)}catch{}let ur=performance.now()-mt,dr=at(en),fr={renderedCount:Gn,cachedCount:Kn,renderedSize:qn,totalPages:sr,prunedCount:lr,clientBuildMs:Math.round(x),serverBuildMs:Math.round(ee),ssrImportMs:Math.round(ne),workerPoolSetupMs:Math.round(Un),workerUsed:dr!==null&&!Wn,workerCount:dr?.totalWorkers??0,fallbackMainThread:Wn,ssrP50Ms:$(Dn,50),ssrP95Ms:$(Dn,95),ssrP99Ms:$(Dn,99),crittersP50Ms:$(kn,50),crittersP95Ms:$(kn,95),writeP50Ms:$(An,50),writeP95Ms:$(An,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&&ur>0?Math.round(sr/(ur/1e3)*10)/10:0,pipeline:{renderedPageCount:Rn,cachedPageCount:zn,clientBuildMs:Math.round(x),serverBuildMs:Math.round(ee),ssrImportMs:Math.round(ne),workerPoolSetupMs:Math.round(Un),routePreparationMs:Math.round($t),workerTransportMs:Math.round(In),workerRoundTripMs:Math.round(In),workerTransportAvgMs:Ln>0?Math.round(In/Ln):0,finalizeP50Ms:$(On,50),finalizeP95Ms:$(On,95),assetCollectionMs:Math.round(jn),beforeHookMs:Math.round(Mn),htmlAssemblyMs:Math.round(Nn),onPageRenderedHookMs:Math.round(Pn),criticalCssP50Ms:$(kn,50),criticalCssP95Ms:$(kn,95),cacheWriteMs:Math.round(0+Zn.writeTimeMs()),cachedOutputMs:Math.round(Fn),renderQueueDrainMs:Math.round(Vn),renderPipelineSettleMs:Math.round(Vn),outputLinkMs:Math.round(Bn)}};w?.({name:`Render pages`,duration:ur,success:!0,details:`${sr} pages (${Gn} new, ${Kn} cached, ${cr} MB)`,metrics:fr}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(ur),success:!0,details:`${sr} pages / ${Gn} new / ${Kn} cached / ${cr} MB`,metrics:fr})}`);let pr=performance.now(),mr=Lt(bn);if(await Fe(v(j,`static-loader-data-manifest-${I}.json`),mr),await Et(v(M,`ssr`),5,G?`turbo-ssr`:h(L)),dt(),sn?.dispose)try{await sn.dispose()}catch{}let hr=Re.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;hr&&!hr.disabled&&hr.generateSW&&await hr.generateSW();let gr=Math.round(performance.now()-b);w?.({name:`Static loader data`,duration:performance.now()-pr,success:!0,details:`${xn} loader data files`,metrics:{loaderDataFileCount:xn}}),await C?.(d),await Jt(j);let _r=Ne(j),vr=await Ve(j,gr,M,{outputFiles:_r,manifestPath:v(de,`dist`,...It,`manifest.json`)});He(j,vr),w?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(gr/1e3).toFixed(1)}s, JS: ${(vr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(vr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:gr,totalPages:vr.pages.length,jsSize:vr.totalJSBundleSize,cssSize:vr.totalCSSBundleSize}}),await je(v(M,`ssg-output.json`),fe,j,Me(U,$n,Je).concat(`static-loader-data-manifest-${I}.json`),ht.clientFiles,_r)}async function qt(e,t,n=[],r=!1){try{if(!S.existsSync(e))return 0;let i=v(e,`.prune-state`);if(!r)try{let e=await S.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await S.readdir(e),o=new Set,s=new Set([...Object.keys(t),...n]);for(let e of s){let t=E.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 S.remove(v(e,t)),c++);return await S.writeFile(i,String(Date.now()),`utf8`),c}catch{return 0}}async function Jt(e){try{It.length>0?await S.remove(v(e,...It)):await Promise.all([S.remove(v(e,`manifest.json`)),S.remove(v(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 d(`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:r,onBeforePageRender:i,entry:a,rootContainerId:s,onPageRendered:c}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,f)=>{try{let d=u.originalUrl??u.url??`/`,p=await l.ssrLoadModule(r),m=p.createRoot,h=await m(!1,d),g=o(h,p),{app:_,base:v}=h,[y=`/`,b=``]=d.split(`?`),x=new URLSearchParams(b);if(!_&&x.has(`_data`))return g.handleLoader(u,f);let S=await l.transformIndexHtml(d,e),ee=await i?.(d,S,h)||S,{appHTML:te,bodyAttributes:ne,htmlAttributes:C,metaAttributes:re,styleTag:T}=await g.render(t(y,v));re.push(T);let E=await Promise.all([r,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),D=new Set,O=new Set,k=async e=>{if(!e?.ssrTransformResult||O.has(e))return;O.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))D.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await k(t)}};await Promise.all(E.map(async e=>k(e)));let A=[...D].map(e=>ve(n(l.config.base,e)));re.push(...A);let ie=await ge({rootContainerId:s,appHTML:te,indexHTML:ee,metaAttributes:re,bodyAttributes:ne,htmlAttributes:C,initialState:null}),j=await c?.(d,ie,h)||ie;f.statusCode=200,f.setHeader(`Content-Type`,`text/html`),w(u,f,j,`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),d(`SSR render error`,t),f.statusCode=500,f.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:v(o,n),l=await O.readFile(v(o,t),`utf-8`)}else{let t=await re(e,`serve`,n,n);o=t.root||a,s={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=s,u=s.entry||await _e(o,r),[d,f]=await Promise.all([xe(t,u),O.readFile(v(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-RTx-0uYL.mjs`);e()}return await ne({...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 X(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await $t(t,e);return await r.listen(),en(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){d(`failed to start server: ${e?.message??e}`),process.exit(1)}}function en(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 ${u.bold(`${e}ms`)}`}n(`\n ${u.cyan(` VITE-REACT-SSG v${V} `)}`,{clear:!e.config.logger.hasWarned}),n(`${u.cyan(`\n VITE v${T}`)+u.dim(r)}\n`),n(u.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,X as dev};
@@ -0,0 +1 @@
1
+ async function e(e={}){let t;try{t=await import(`@bdocs/zig-critters`)}catch{return null}if(typeof t.createPool!=`function`)return null;try{let n=await t.createPool(e);return n?{concurrency:n.concurrency,extractCriticalCss:(e,t,r)=>n.extractCriticalCss(e,t,r),dispose:()=>n.close()}:null}catch{return null}}exports.createZigCrittersPool=e;
@@ -0,0 +1 @@
1
+ async function e(e={}){let t;try{t=await import(`@bdocs/zig-critters`)}catch{return null}if(typeof t.createPool!=`function`)return null;try{let n=await t.createPool(e);return n?{concurrency:n.concurrency,extractCriticalCss:(e,t,r)=>n.extractCriticalCss(e,t,r),dispose:()=>n.close()}:null}catch{return null}}export{e as createZigCrittersPool};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bdocs/ssg",
3
3
  "type": "module",
4
- "version": "0.4.0",
4
+ "version": "0.4.1",
5
5
  "description": "A Vite plugin for static site generation (SSG) with React.",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
@@ -86,10 +86,10 @@
86
86
  "piscina": "^5.3.0",
87
87
  "react-helmet-async": "^2.0.1",
88
88
  "yargs": "^17.7.2",
89
- "@bdocs/zig-critters": "0.2.1"
89
+ "@bdocs/zig-critters": "0.2.2"
90
90
  },
91
91
  "optionalDependencies": {
92
- "@bdocs/zig-critters": "0.2.1"
92
+ "@bdocs/zig-critters": "0.2.2"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@types/fs-extra": "^11.0.4",