@bdocs/ssg 0.4.0 → 0.4.2

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.
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
@@ -0,0 +1 @@
1
+ import{t as e}from"./rolldown-runtime-C-zNXMYg.mjs";var t=e({DEFAULT_CRITICAL_CSS_MAX_SIZE:()=>r,createZigCrittersEngine:()=>o,getBeasties:()=>n,getZigCritters:()=>a,resolveCriticalCssMaxSize:()=>i});async function n(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}}const r=32*1024;function i(e){return typeof e==`number`&&e>=0?e:r}async function a(){try{let e=await import(`@bdocs/zig-critters`),t=e.extractCriticalCss||e.default?.extractCriticalCss;return t?{extractCriticalCss:t,getEngineIdentity:()=>{let t=e.getEngineIdentity||e.default?.getEngineIdentity;return t?t().then(e=>String(e)).catch(()=>`unknown`):Promise.resolve(`unknown`)}}:void 0}catch{return}}async function o(e={}){try{let{createZigCrittersPool:t}=await import(`./zig-pool-C14JyXVw.mjs`),n=await t(e);if(n){let e=await a().then(e=>e?.getEngineIdentity());return{extractCriticalCss:(e,t,r)=>n.extractCriticalCss(e,t,r),getEngineIdentity:async()=>e??`unknown`,dispose:()=>n.dispose()}}}catch{}return a()}export{i,t as n,n as r,o as t};
@@ -0,0 +1 @@
1
+ var e=require(`./chunk-D-qHiVGv.cjs`).t({DEFAULT_CRITICAL_CSS_MAX_SIZE:()=>n,createZigCrittersEngine:()=>a,getBeasties:()=>t,getZigCritters:()=>i,resolveCriticalCssMaxSize:()=>r});async function t(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}}const n=32*1024;function r(e){return typeof e==`number`&&e>=0?e:n}async function i(){try{let e=await import(`@bdocs/zig-critters`),t=e.extractCriticalCss||e.default?.extractCriticalCss;return t?{extractCriticalCss:t,getEngineIdentity:()=>{let t=e.getEngineIdentity||e.default?.getEngineIdentity;return t?t().then(e=>String(e)).catch(()=>`unknown`):Promise.resolve(`unknown`)}}:void 0}catch{return}}async function a(e={}){try{let{createZigCrittersPool:t}=await Promise.resolve().then(()=>require(`./zig-pool-DumgDn4A.cjs`)),n=await t(e);if(n){let e=await i().then(e=>e?.getEngineIdentity());return{extractCriticalCss:(e,t,r)=>n.extractCriticalCss(e,t,r),getEngineIdentity:async()=>e??`unknown`,dispose:()=>n.dispose()}}}catch{}return i()}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`);let t=require(`react-helmet-async`);t=e.t(t);let n=require(`react/jsx-runtime`),r=require(`react-dom`);r=e.t(r,1);let i=require(`react-dom/client`),a=require(`react`);const{version:o,render:s,hydrate:c}={...r},l=Number((o||``).split(`.`)[0])>17;function u(e,t,n={}){let{useLegacyRender:r}=n;r||!l?s(e,t):(0,i.createRoot)(t).render(e)}function d(e,t,n={}){let{useLegacyRender:r}=n;r||!l?c(e,t):(0,i.hydrateRoot)(t,e)}function f(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function p(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}function m(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{t(!0)},[]),e}function h({children:e,fallback:t}){if(m()){if(typeof e!=`function`&&process.env.NODE_ENV===`development`)throw Error(`vite-react-ssg error: The children of <ClientOnly> must be a "render function", e.g. <ClientOnly>{() => <span>{window.location.href}</span>}</ClientOnly>.
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-D-qHiVGv.cjs`);let t=require(`react-helmet-async`);t=e.n(t);let n=require(`react/jsx-runtime`),r=require(`react-dom`);r=e.n(r,1);let i=require(`react-dom/client`),a=require(`react`);const{version:o,render:s,hydrate:c}={...r},l=Number((o||``).split(`.`)[0])>17;function u(e,t,n={}){let{useLegacyRender:r}=n;r||!l?s(e,t):(0,i.createRoot)(t).render(e)}function d(e,t,n={}){let{useLegacyRender:r}=n;r||!l?c(e,t):(0,i.hydrateRoot)(t,e)}function f(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function p(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}function m(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{t(!0)},[]),e}function h({children:e,fallback:t}){if(m()){if(typeof e!=`function`&&process.env.NODE_ENV===`development`)throw Error(`vite-react-ssg error: The children of <ClientOnly> must be a "render function", e.g. <ClientOnly>{() => <span>{window.location.href}</span>}</ClientOnly>.
2
2
  Current type: ${(0,a.isValidElement)(e)?`React element`:typeof e}`);return(0,n.jsx)(n.Fragment,{children:e?.()})}return t??null}const g=t,_=g.Helmet||g.default?.Helmet||(()=>null);function v(e){return(0,n.jsx)(_,{...e})}const{HelmetProvider:y}=t;function b(e,t,r={}){let{transformState:i,rootContainer:a=`#root`,ssrWhenDev:o,getStyleCollector:s=null}=r;process.env.NODE_ENV===`development`&&o!==void 0&&console.warn("[vite-react-ssg] `ssrWhenDev` option is no longer needed. If you want to use csr, just replace `vite-react-ssg dev` with `vite`.");let c=typeof window<`u`;async function l(n=!1,r){let a=[],o={isClient:c,onSSRAppRendered:n?()=>{}:e=>a.push(e),triggerOnSSRAppRendered:()=>Promise.all(a.map(e=>e())),initialState:{},transformState:i,routePath:r,getStyleCollector:s,routes:Array.isArray(e)?e:e?.routes||[],routerOptions:void 0,base:`/`,app:e,routerType:`single-page`};o.RouteRenderer=e?.RouteRenderer,o.matchRouteBranch=e?.matchRouteBranch,o.matchRouteBranchWithParams=e?.matchRouteBranchWithParams,o.resolveRouteBranch=e?.resolveRouteBranch,n&&(await f(),o.initialState=i?.(window.__INITIAL_STATE__||{})||p(window.__INITIAL_STATE__)),await t?.(o);let l=o.initialState;return{...o,initialState:l}}return c&&(async()=>{let t=typeof a==`string`?document.querySelector(a):a;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let i=await l(!0);window.__VITE_REACT_SSG_CONTEXT__=i;let o=e,s=o.RouteRenderer,c=o.matchRouteBranch,f=o.resolveRouteBranch,p=e?.routes||(Array.isArray(e)?e:[]),m;if(s&&c&&f){let e=await f(c(p,window.location.pathname));m=(0,n.jsx)(y,{children:(0,n.jsx)(s,{routes:p,pathname:window.location.pathname,hasLoaderData:!1,resolvedBranch:e})})}else if(Array.isArray(e))throw Error(`An array of routes requires RouteRenderer, matchRouteBranch, and resolveRouteBranch on the application entry`);else m=(0,n.jsx)(y,{children:e});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?u(m,t,r):d(m,t,r)})(),l}exports.ClientOnly=h,exports.Head=v,exports.ViteReactSSG=b;
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-CipD5Jrk.mjs";
2
2
  import { HelmetProps } from "react-helmet-async";
3
3
  import { ReactNode } from "react";
4
4
 
@@ -1 +1 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`);let t=require(`jsdom`);t=e.t(t,1);const n=[];function r(e=`<!doctype html><html><head><meta charset="utf-8"></head><body></body></html>`,r={}){if(global.navigator&&global.navigator.userAgent&&global.navigator.userAgent.includes(`Node.js`)&&global.document&&typeof global.document.destroy==`function`)return global.document.destroy;`url`in r||Object.assign(r,{url:`http://localhost:3000`}),`pretendToBeVisual`in r||Object.assign(r,{pretendToBeVisual:!0});let i=new t.default.JSDOM(e,r),{window:a}=i,{document:o}=a;n.length===0&&(n.push(...Object.getOwnPropertyNames(a).filter(e=>!e.startsWith(`_`)).filter(e=>!(e in global))),n.push(`$jsdom`)),n.forEach(e=>global[e]=a[e]),global.document=o,global.window=a,a.console=global.console,global.$jsdom=i;let s=()=>{n.forEach(e=>delete global[e]);try{a.close()}catch{}};return o.destroy=s,s}exports.jsdomGlobal=r;
1
+ const e=require(`./chunk-D-qHiVGv.cjs`);let t=require(`jsdom`);t=e.n(t,1);const n=[];function r(e=`<!doctype html><html><head><meta charset="utf-8"></head><body></body></html>`,r={}){if(global.navigator&&global.navigator.userAgent&&global.navigator.userAgent.includes(`Node.js`)&&global.document&&typeof global.document.destroy==`function`)return global.document.destroy;`url`in r||Object.assign(r,{url:`http://localhost:3000`}),`pretendToBeVisual`in r||Object.assign(r,{pretendToBeVisual:!0});let i=new t.default.JSDOM(e,r),{window:a}=i,{document:o}=a;n.length===0&&(n.push(...Object.getOwnPropertyNames(a).filter(e=>!e.startsWith(`_`)).filter(e=>!(e in global))),n.push(`$jsdom`)),n.forEach(e=>global[e]=a[e]),global.document=o,global.window=a,a.console=global.console,global.$jsdom=i;let s=()=>{n.forEach(e=>delete global[e]);try{a.close()}catch{}};return o.destroy=s,s}exports.jsdomGlobal=r;
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-D-qHiVGv.cjs`),t=require(`./router-adapter-DR3BzW_i.cjs`),n=require(`./critical-FFUmobto.cjs`),r=require(`./ssg-worker-payload-D6kDQQtE.cjs`);let i=require(`@bdocs/dui`),a=require(`node:module`),o=require(`node:os`);o=e.n(o,1);let s=require(`node:path`);s=e.n(s,1);let c=require(`fs-extra`);c=e.n(c,1);let l=require(`vite`),u=require(`node:crypto`);u=e.n(u,1);let d=require(`node:fs/promises`);d=e.n(d,1);let f=require(`node:fs`);f=e.n(f,1);const p=/import\("([^)]+)"\)/g;function m(e,t){let n=new Set;if(!t)return n;for(let r of t)h(e,r,n);return n}function h(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{h(e,t,n)}),n):n}function g(e,t,n,r){let i=e?.map(e=>e.route.entry).filter(Boolean)??[],a=new Set;e?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(p);for(let e of n)a.add(e[1].split(`/`).at(-1)??``)});let o=new Set(i);for(let e of a){let t=n.find(([t,n])=>n.file.endsWith(e));t&&o.add(t[0])}let s=new Set;for(let e of o){let n=r.get(e);if(!n){let i=m(t.manifest,new Set([e]));n=new Set;for(let e of i)for(let r of t.ssrManifest[e]||[])n.add(r);r.set(e,n)}for(let e of n)s.add(e)}return s}function ee(e){let t=Object.entries(e.serverManifest),n=new Map,r=new Map;return i=>{let a=r.get(i);if(a)return a;let o=Promise.resolve().then(()=>{let r=g(e.matchRouteBranchWithParams([...e.routes],i,e.base),e,t,n);return new Set(r)});return r.set(i,o),o.catch(()=>{r.get(i)===o&&r.delete(i)}),o}}function te(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return u.default.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function ne(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function re(e,t){let n=new Set(ne(e)),r=ne(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
+ `):null}var ie=class{constructor(e={}){this.entries=new Map,this.cacheDir=e.cacheDir,this.maxEntries=e.maxEntries??1024}getOrCreate(e,t,n={}){let r=this.entries.get(e);if(r)return r.promise;let i=n.engine??`zig-critters`,a={promise:Promise.resolve(null),settled:!1},o=Promise.resolve().then(async()=>{if(this.cacheDir){let t=await this.readDisk(e,i);if(t!==void 0)return t}return t()}).then(t=>(this.cacheDir&&this.writeDisk(e,i,t).catch(()=>{}),t)).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{a.settled=!0,this.evictSettledEntries()});return a.promise=o,this.entries.set(e,a),this.evictSettledEntries(),o}get size(){return this.entries.size}diskPath(e){return(0,s.join)(this.cacheDir,`critical-css-${e}.json`)}async readDisk(e,t){try{let n=await c.default.readFile(this.diskPath(e),`utf-8`),r=JSON.parse(n);if(r?.v!==2||r?.engine!==t||!(r.style===null||typeof r.style==`string`))return;let i=new Date;return c.default.utimes(this.diskPath(e),i,i).catch(()=>{}),r.style}catch{return}}async writeDisk(e,t,n){if(!this.cacheDir||n!==null&&n.length>262144)return;let r={v:2,engine:t,style:n};await c.default.ensureDir(this.cacheDir),await c.default.writeFile(this.diskPath(e),JSON.stringify(r),`utf-8`)}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};async function ae(e,t={}){let n=t.maxAgeMs??720*60*60*1e3,r=t.maxEntries??5e3;try{if(!c.default.existsSync(e))return 0;let t=Date.now()-n,i=[];for(let n of await c.default.readdir(e)){if(!n.startsWith(`critical-css-`)||!n.endsWith(`.json`))continue;let r=(0,s.join)(e,n);try{let e=await c.default.stat(r),a=Math.max(e.mtimeMs,e.atimeMs);a<t?(await c.default.remove(r),i.push({file:n,usedAt:0})):i.push({file:n,usedAt:a})}catch{}}let a=i.filter(e=>e.usedAt===0).length;if(i.length>r){let t=i.filter(e=>e.usedAt>0).sort((e,t)=>t.usedAt-e.usedAt);for(let n of t.slice(r))try{await c.default.remove((0,s.join)(e,n.file)),a++}catch{}}return a}catch{return 0}}const _=new Set([`.js`,`.mjs`,`.css`]);function v(e){let t=s.default.extname(e).toLowerCase();return _.has(t)}function oe(e){let t=new Map,n=new Map;for(let r of Object.values(e))t.set(r.file,r),r.src&&n.set(r.src,r);return{byFile:t,bySrc:n}}function y(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])v(t)&&y(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])v(t)&&!n.has(t)&&y(e,t,n)}}async function se(e,t,n){if(n){let e=u.default.createHash(`md5`);for(let r of t){let t=n.get(r);t&&e.update(t)}return e.digest(`hex`)}let r=new Map;await Promise.all(t.map(async t=>{try{let n=await(0,d.readFile)(s.default.join(e,t));r.set(t,n)}catch{}}));let i=u.default.createHash(`md5`);for(let e of Array.from(r.keys()).sort()){let t=r.get(e);t&&i.update(t)}return i.digest(`hex`)}async function ce(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:o,clientHash:c,assetHashes:l,chunkPackMaps:u}=e,d=n;if(!d){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);d=oe(r)}let{byFile:f,bySrc:p}=d,m=s.default.relative(o,a).replace(/\\/g,`/`),h=new Set,g=p.get(m);if(g)y(f,g.file,h);else if(u){let e=s.default.isAbsolute(a)?a:s.default.resolve(o,a),t=u.chunkMap[a]??u.chunkMap[e]??u.chunkMap[`/${e}`];if(t!==void 0){for(let e of f.values())if((e.src||``).includes(`chunk-${t}.mjs`)||e.file.includes(`chunk-${t}`)){y(f,e.file,h);break}}}if(h.size===0){let e=[m,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)v(t)&&y(f,t,h)}}if(h.size===0){if(!c)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return c}return se(t,Array.from(h).sort(),l)}const le=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function b(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function ue({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${le}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return b(b(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function de({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${le}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return b(b(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return b(b(p,`html`,a),`body`,i)}async function x(e,t=`index.html`){let[,n]=[...(await c.default.readFile((0,s.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function S(e){return`<link rel="stylesheet" href="${e}">`}function fe(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=C(e);r&&n.push(r)}}),n.join(``)}function C(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var w=`0.4.2`;async function pe(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&T(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function me(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:(0,s.join)(e.root,t))}const he=/[:*?]/;function T(e){return e?he.test(e):!1}async function ge(e,t){if(e!==t){await c.default.ensureDir((0,s.dirname)(t)),await c.default.remove(t);try{await c.default.link(e,t)}catch{await c.default.copy(e,t)}}}async function E(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(ge(r.source,r.destination)));await Promise.all(n)}function _e({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=0,l=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),c+=performance.now()-t}),s};return{enqueue(e,t){let u=Buffer.byteLength(t,`utf8`);return u>i?(s=l().then(async()=>{let r=performance.now();await n(e,t),c+=performance.now()-r}),s):(a.push({filePath:e,content:t}),o+=u,a.length>=r||o>=i?l():Promise.resolve())},flush:l,pendingCount(){return a.length},writeTimeMs(){return c}}}function D(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function ve(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,s=[...new Set(r)].sort(),l=[...new Set(i)].sort(),u=[...new Set(a)].sort();if(!o(e.clientFiles,s)||!o(e.pageFiles,l)||!o(e.auxiliaryFiles||[],u))return!1;let d=[...s,...l,...u];return o(Ce(n),[...new Set(d)].sort())?d.every(e=>c.default.existsSync(`${n}/${e}`)):!1}function ye(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function be(e){try{let t=await c.default.readJson(e);return!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`)?void 0:D(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function xe(e,t,n,r,i=[],a){let o=a||Ce(n),s=new Set(r),c=new Set(i);return Ee(e,D(t,i.length>0?[...c]:o.filter(e=>!s.has(e)),r,i.length>0?o.filter(e=>!s.has(e)&&!c.has(e)):[]))}function Se(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[O(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function Ce(e){let t=[],n=r=>{let i;try{i=c.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push((0,s.relative)(e,i).split(s.sep).join(`/`))}};return n(e),t.sort()}function O(e){return!e||e===`/`?``:t.a(e).replace(/\/+$/,``)}function we(e,t){let n=new Set(t.map(O)),r={};for(let[t,i]of Object.entries(e)){let e=O(t);n.has(e)&&(r[e]=i)}return r}async function Te(e,t){try{if(await c.default.readFile(e,`utf8`)===t)return!1}catch{}return await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeFile(e,t,`utf8`),!0}async function Ee(e,t,n=2){try{let n=await c.default.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeJson(e,t,{spaces:n}),!0}const k=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),A=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function j(e){try{return f.default.statSync(e).size}catch{return 0}}const M=`boltdocs-metrics.json`;function N(e){if(!e)return null;try{let t=(0,s.join)(e,M);return f.default.existsSync(t)?JSON.parse(f.default.readFileSync(t,`utf-8`)):null}catch{return null}}function P(e,t){try{let n=s.default.resolve(e,`..`,`reports`);f.default.existsSync(n)||f.default.mkdirSync(n,{recursive:!0}),f.default.writeFileSync((0,s.join)(e,M),JSON.stringify(t))}catch{}}async function De(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=N(n);if(e)return e.buildTime=t,e}let i=(0,s.join)(e,`.vite`),a=(0,s.join)(e,`assets`),o={},c=r.manifestPath||(0,s.join)(i,`manifest.json`);f.default.existsSync(c)&&(o=JSON.parse(await f.default.readFileSync(c,`utf-8`)));let l=0,u=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=j((0,s.join)(e,n));l+=i;for(let t of r)u+=j((0,s.join)(e,t))}let d=0,p=0;if(f.default.existsSync(a)){let e=f.default.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=s.default.extname(t.name).toLowerCase(),n=(0,s.join)(a,t.name);k.has(e)?d+=j(n):A.has(e)&&p++}}let m=(0,s.join)(e,`index.html`),h=0,g=[];if(f.default.existsSync(m)){let e=j(m);h+=e,g.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let ee=r.outputFiles?[...r.outputFiles]:(()=>{try{return f.default.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of ee){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=j((0,s.join)(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);h+=n,g.push({route:e,htmlSize:n,htmlFile:t})}}let te={buildTime:t,totalJSBundleSize:l,totalCSSBundleSize:u,totalImagesSize:d,totalHTMLSize:h,fontCount:p,pages:g};return n&&P(n,te),te}function Oe(e,t){let n=s.default.resolve(e,`..`,`.boltdocs`,`reports`);f.default.existsSync(n)||f.default.mkdirSync(n,{recursive:!0});let r=(0,s.join)(n,`performance.json`);f.default.writeFileSync(r,JSON.stringify(t,null,2))}const ke=new Set([`node_modules`,`dist`,`coverage`]);function Ae(e,t){return(0,s.relative)(e,t).replace(/\\/g,`/`)}function F(e,t,n){try{let r=c.default.readFileSync(t),i=new Uint8Array(r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)),a=(0,u.createHash)(`sha1`).update(i).digest(`hex`);n.update(`${Ae(e,t)}\0${a}\0`)}catch{}}function I(e,t,n){let r;try{r=c.default.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`)||ke.has(i))continue;let r=(0,s.join)(e,i),a;try{a=c.default.statSync(r)}catch{continue}a.isDirectory()?I(r,t,n):a.isFile()&&F(t,r,n)}}function je(e,t){let n=(0,a.createRequire)(n(`url`).pathToFileURL(__filename).href);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=(0,s.join)((0,s.dirname)(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);c.default.existsSync(i)&&I(i,e,t)}catch{}}const L=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`];function R(e,t){for(let n of L){let r=(0,s.join)(e,n);c.default.existsSync(r)&&F(e,r,t)}}function Me(e,t,n){try{c.default.removeSync((0,s.join)(n,`hash-merkle.json`))}catch{}try{let n=(0,u.createHash)(`sha256`);je(e,n);let r=(0,s.join)(e,t);return c.default.existsSync(r)&&I(r,e,n),R(e,n),n.update(`v4\0`),n.digest(`hex`)}catch(e){return(0,i.warn)(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),(0,u.createHash)(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Ne(e){return u.default.createHash(`md5`).update(e).digest(`hex`)}function Pe(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Fe(e){if(e)try{let t=await c.default.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function z(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeJson(n,{version:1,files:t},{spaces:0}),await c.default.move(n,e,{overwrite:!0})}catch{await c.default.remove(n).catch(()=>{})}}async function B(e,t,n){let r=await Fe(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=(0,s.join)(e,t);try{let e=await c.default.stat(n);if(!e.isFile())return;let o=r?.files[t];if(Pe(o,e)){i.set(t,o.hash),a[t]=o;return}let s=Ne(await c.default.readFile(n));i.set(t,s),a[t]={hash:s,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await z(n,a),i}function Ie(e){let t=u.default.createHash(`sha1`);return t.update(`v4`),t.update(`\0`),t.update(c.default.readFileSync(e)),t.digest(`hex`)}function Le(e,t){if(e)try{return Ie(e)}catch{}return t}function Re(e,t){try{return Ie(e)}catch{return t}}function ze({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let o=u.default.createHash(`md5`).update(e).digest(`hex`);return!(!c.default.existsSync((0,s.join)(i,`${o}.html`))||t.loaderDataFilePath&&!c.default.existsSync((0,s.join)(i,`${o}.json`)))}function Be(e){return e===null?null:e.poolMetrics()}function Ve(e,t){return(0,s.isAbsolute)(t)?t:(0,s.join)(e,t)}function He(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=O(r);n[t]=Ve(e,i)}return Object.freeze(n)}function Ue(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:He(e.root,e.routeToSourceFileMap)})}function We(e,t,n={}){let r=He(e,n),i=t.map(t=>{let i=O(t.path),a=n[t.path],o=a?Ve(e,a):r[i]||t.componentPath;return{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function Ge(e,t){return Object.freeze({...e,routeManifest:t})}const V=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],Ke=[`react`,`react-dom`];function qe(e){return Number.parseInt(l.version,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Je(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function Ye(e,t){let n=[],r=i=>{let a;try{a=c.default.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=(0,s.join)(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=(0,s.relative)(e,a).split(s.sep).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function Xe(e){return e.map(e=>{if(Array.isArray(e))return Xe(e);if(e&&typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||typeof t==`string`&&t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return null}return e}).filter(Boolean)}async function Ze(e){let t=[],n=async r=>{let i;try{i=await c.default.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=(0,s.join)(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push((0,s.relative)(e,i).split(s.sep).join(`/`))}};return await n(e),t.sort()}async function Qe(e){try{let t=await c.default.readFile(e);return(0,u.createHash)(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function $e(e,t){if(!t||(0,s.isAbsolute)(t))return;let n=(0,s.resolve)(e),r=(0,s.resolve)(n,t),i=(0,s.relative)(n,r);if(!(!i||i===`..`||i.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(i)))return r}async function et(e,t){let n=(0,s.join)((0,s.resolve)(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await c.default.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&c.default.existsSync(e)?await Ze(e):[],a={};for(let t of i){let n=await Qe((0,s.join)(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=$e(t,e);r&&await Qe(r)===n&&await c.default.remove(r)}e&&c.default.existsSync(e)&&(await c.default.ensureDir(t),await c.default.copy(e,t,{overwrite:!0,errorOnExist:!1})),await c.default.ensureDir((0,s.resolve)(t,`..`)),await c.default.writeJson(n,{version:1,files:a})}function tt(e){return(0,l.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...qe({input:{app:(0,s.join)(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir((0,s.isAbsolute)(t.build.outDir||``)?t.build.outDir||`dist`:(0,s.resolve)(e.root,t.build.outDir||`dist`))}}]})}function nt(e){return(0,l.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...qe({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...V],external:[...Ke]},plugins:[...Xe(e.viteConfig.plugins||[]),Je()]})}async function rt(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,o=[],u=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),c.default.existsSync(e.outDir)&&await c.default.remove(e.outDir);let t=(0,s.join)(e.clientCacheDir,`dist`);await et(e.viteConfig.publicDir,t),st(t,e.outDir),o=Ye((0,s.join)(e.clientCacheDir,`dist`),e.htmlEntry)}else{await(0,l.build)(tt({...e,onResolvedOutputDir:e=>{n=e}}));let d=performance.now()-u;e.onStep?.({name:`Client build`,duration:d,success:!0,details:`Vite production build`}),i=t(),a=i,r=(0,s.join)(e.finalCacheDir,`client-cache`,i);let f=(0,s.join)(r,`client-hash.txt`);await c.default.ensureDir(r);let p=(0,s.join)(r,`dist`);c.default.existsSync(p)&&await c.default.remove(p),await c.default.copy(n,p,{overwrite:!0,errorOnExist:!1}),await et(e.viteConfig.publicDir,p),o=Ye(p,e.htmlEntry),await c.default.writeFile(f,i,`utf-8`),await ct((0,s.join)(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-u,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:o}}async function it(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};c.default.existsSync(e.ssgOut)&&await c.default.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await(0,l.build)(nt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function at(e,t){if(!t||(0,s.isAbsolute)(t))return;let n=(0,s.resolve)(e,t),r=(0,s.relative)((0,s.resolve)(e),n);if(!(r===`..`||r.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(r)))try{let t=c.default.realpathSync(e),r=c.default.realpathSync(n),i=(0,s.relative)(t,r);return i===`..`||i.startsWith(`..${s.sep}`)||(0,s.isAbsolute)(i)||!c.default.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function ot(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function st(e,t){let n=c.default.readdirSync(e,{withFileTypes:!0});c.default.mkdirSync(t,{recursive:!0});for(let r of n){let n=(0,s.join)(e,r.name),i=(0,s.join)(t,r.name);if(r.isDirectory())st(n,i);else if(r.isFile())try{c.default.linkSync(n,i)}catch{c.default.copyFileSync(n,i)}}}async function ct(e,t=5,n){try{if(!c.default.existsSync(e))return;let r=await c.default.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=(0,s.join)(e,t.name),r=await c.default.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await c.default.remove((0,s.join)(e,t.name))}catch{}}function lt(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function ut(e,t){return t===`nested`?(0,s.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function H(e){return Object.freeze(e)}function dt(e){let n=new Map;for(let r of e.routes){let i=u.default.createHash(`md5`).update(r).digest(`hex`),a=O(r),o=e.routeToSourceFileMap[a]||e.routeToSourceFileMap[r],c=o?e.sourceMeta.get(o):void 0;n.set(r,H({path:r,pathHash:i,cachedHtmlFile:(0,s.join)(e.ssgPagesDir,`${i}.html`),cachedLoaderFile:(0,s.join)(e.ssgPagesDir,`${i}.json`),finalOutFile:(0,s.join)(e.outDir,ut(r,e.dirStyle)),normalizedKey:a,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[r]??e.fallbackHash,fetchUrl:`${t.o(e.contextBase)}${t.r(r)}`}))}return n}function ft(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function pt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function mt(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function ht(e,t){return e>4&&!t}function gt(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function _t(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function vt(e){let t=[],n=new Set,r=e.getPool(),i=mt(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},l=e=>{let r;r=pt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(ht(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=mt(e.getWorkerCount?.()??0))),r?.renderBatch){let t=[];for(let n of e.routes){let r=e.getPlan(n);await e.isCached(r)?(await e.onCacheHit(r),o++):(await e.prepareRoute?.(r),t.push({path:n,plan:r}))}let c=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let o=0;o<t.length;o+=c){let u=t.slice(o,o+c);if(!r){for(let{path:n,plan:r}of t.slice(o))e.scheduleMainThread(n,r),a++;break}s=!0;let d=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of u){let i=await e.onWorkerFailure(n,r,t,d);if(!_t(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};l((async()=>{let t;try{t=await d.renderBatch(u.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==u.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<u.length;n++){let{path:r,plan:i}=u[n],o=t[n],s;if(s=gt(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):_t(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!_t(s,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,s,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else for(let t of e.routes){let c=e.getPlan(t);if(await e.isCached(c)){await e.onCacheHit(c),o++;continue}if(await e.prepareRoute?.(c),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=mt(e.getWorkerCount?.()??0))),r){s=!0;let o=r,u=performance.now();l(o.render(t).catch(async n=>{let i=await e.onWorkerFailure(t,c,n,o);return r=e.getPool(),i}).then(async n=>{if(!_t(n,t))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(t,c,n,performance.now()-u),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(t,c),a++}return await c(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const yt=Number.parseInt(l.version)>=5?[`.vite`]:[];function bt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function xt(e,n){return`static-loader-data${t.a(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function St(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function U(e){let t=new Set;for(let n of Object.values(e)){St(n.file)&&t.add(n.file);for(let e of n.css||[])St(e)&&t.add(e);for(let e of n.imports||[])St(e)&&t.add(e);for(let e of n.dynamicImports||[])St(e)&&t.add(e)}return[...t]}async function Ct(e,t,n){return B(e,U(t),n?(0,s.join)(n,`chunk-hashes.json`):void 0)}function wt(e,n=`/`){let r=t.a(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Tt(e,t,n){let r=t?.[n];if(r)return(0,s.isAbsolute)(r)?r:(0,s.join)(e,r)}function Et(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,(0,s.isAbsolute)(n)?(0,s.relative)(e,n):n]))}function Dt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Ot(e={},d={}){let f=process.env.MODE||process.env.NODE_ENV||e.mode||`production`;f!==process.env.NODE_ENV&&(process.env.NODE_ENV=f);let p=process.cwd(),m=d.root||p,h=d.build?.outDir||`dist`,g=d.base||`/`,ne=performance.now(),_=0,v=0,y=0,{onFinished:se,onStep:b,routeToSourceFileMap:S={},cacheDir:C=`.boltdocs/build`,htmlEntry:w=`index.html`,entry:he=await x(m,w)}=e,T=`docs`,ge=Object.values(S);if(ge.length>0){let e=ge[0],t=(0,s.relative)(m,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(T=t[0])}let D=(0,s.isAbsolute)(h)?h:(0,s.join)(m,h),k=(0,s.isAbsolute)(C)?C:(0,s.join)(m,C),A=Me(m,T,k),j=Ue({root:m,outDir:D,cacheDir:k,base:g,mode:f,entry:he,htmlEntry:w,docsDirName:T,clientHash:A,routeToSourceFileMap:S}),M=j.clientHash.substring(0,12),N=(0,s.join)(j.cacheDir,`ssr`,M),P=(0,s.join)(j.cacheDir,`client-cache`,j.clientHash),ke=P,Ae=A,F=A,I=``;try{let{getZigCritters:e}=await Promise.resolve().then(()=>require(`./critical-FFUmobto.cjs`)).then(e=>e.n),t=await e();if(t){let e=await t.getEngineIdentity();e&&e!==`unknown`&&(I=e.slice(0,16))}}catch{}I&&(F=`${A}-${I}`);let je=(0,s.join)(P,`client-hash.txt`),L=!1;try{c.default.existsSync(je)&&c.default.existsSync((0,s.join)(P,`dist`))&&(L=(await c.default.readFile(je,`utf-8`)).trim()===A)}catch{}let R={server:``,css:``},Ne=()=>{let e=``,t=``;try{let t=[],n=(e,r)=>{let i;try{i=c.default.readdirSync(e,{withFileTypes:!0})}catch{return}for(let a of i){let i=r?`${r}/${a.name}`:a.name;i!==`.vite`&&(i.startsWith(`.vite/`)||/^assets\/combined-.*\.js$/.test(i)||(a.isDirectory()?n((0,s.join)(e,a.name),i):a.isFile()&&t.push(i)))}};if(n(N,``),t.length>0){t.sort();let n=u.default.createHash(`sha256`);for(let e of t){n.update(e),n.update(`\0`);let t=c.default.readFileSync((0,s.join)(N,e));e===`combined.mjs`&&(t=Buffer.from(t.toString(`utf-8`).replace(/combined-[A-Za-z0-9_-]+\.js/g,`combined.js`))),n.update(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),n.update(`\0`)}e=n.digest(`hex`).slice(0,16)}}catch{}try{let e=L?(0,s.join)(P,`dist`,`assets`):(0,s.join)(D,`assets`);if(c.default.existsSync(e)){let n=c.default.readdirSync(e).filter(e=>e.endsWith(`.css`)).sort();if(n.length>0){let r=u.default.createHash(`sha256`);for(let t of n){r.update(t),r.update(`\0`);let n=c.default.readFileSync((0,s.join)(e,t));r.update(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),r.update(`\0`)}t=r.digest(`hex`).slice(0,16)}}}catch{}return{server:e,css:t}},Pe=()=>{let e=A;I&&(e=`${e}-${I}`),(R.server||R.css)&&(e=`${e}-${R.server}-${R.css}`),F=e},Fe=!1;if(L){try{let e=(await c.default.readJson((0,s.join)(k,`ssr-cache-index.json`)))[A];if(typeof e==`string`){let t=at((0,s.join)(k,`ssr`),e);t&&(N=t)}}catch{}if(c.default.existsSync(N)){let e=Ne();R.server=e.server,R.css=e.css,(e.server||e.css)&&(Pe(),Fe=!0)}}let z=(0,s.join)(k,`ssg-pages`),B=(0,s.join)(k,`ssg-cache.json`),Ie=(0,s.join)(k,`ssg-output.json`),Ve=await be(Ie),He=Ve!==void 0&&Ve.auxiliaryFiles.length===0;L&&(ye(Ve,Ce((0,s.join)(P,`dist`)),w)||(L=!1));let V=[],Ke=!1,qe=(e.dirStyle||d.ssgOptions?.dirStyle)??`flat`;if(L&&He&&qe!==`nested`){let e=(0,s.join)(k,`routes-cache.json`);try{if(c.default.existsSync(e)&&c.default.existsSync(B)){let t=JSON.parse(c.default.readFileSync(e,`utf-8`)),n=we(JSON.parse(c.default.readFileSync(B,`utf-8`)),t.paths);if(t.dirStyle===qe&&t.base===g){let e=t.paths.every(e=>{let r=O(e),i=n[r];return ze({routePath:e,cacheItem:i,sourceContentHash:Le(S[r]||S[e]||Tt(m,t.sourceFiles,r)||Tt(m,t.sourceFiles,e),F),ssgPagesDir:z,requireAssetHash:!0})});t.paths.length>0&&e&&(V=t.paths,Ke=!0)}}}catch{}}if(Ke){let e=performance.now(),t={};try{c.default.existsSync(B)&&(t=we(JSON.parse(c.default.readFileSync(B,`utf-8`)),V))}catch{}let n=[...Se(V,t,qe===`nested`?`nested`:`flat`),`static-loader-data-manifest-${M}.json`,`page-source.json`],r=Ce((0,s.join)(P,`dist`)).filter(e=>e!==w),i=await be(Ie),a=i?.auxiliaryFiles.length===0&&ve(i,A,D,r,n,[]),o={};if(!a){c.default.existsSync(D)&&await c.default.remove(D);let e=(0,s.join)(P,`dist`);await et(d.publicDir,e),await c.default.copy(e,D);let n=[];for(let e of V){let r=u.default.createHash(`md5`).update(e).digest(`hex`),i=(0,s.join)(z,`${r}.html`),a=(0,s.join)(z,`${r}.json`),l=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:(0,s.join)(D,l)}),c.default.existsSync(a)){let r=O(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:(0,s.join)(D,i.loaderDataFilePath)}),o[wt(e,g)]=i.loaderDataFilePath)}}await E(n),await Te((0,s.join)(D,`static-loader-data-manifest-${M}.json`),bt(o))}await kt(z,t,V);let l=Math.round(performance.now()-ne);b?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),b?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),b?.({name:`Render pages`,duration:0,success:!0,details:`${V.length} pages (all cached)`}),b?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(l/1e3).toFixed(1)}s, all cached`});let f=Math.round(performance.now()-e),p={renderedPageCount:0,cachedPageCount:V.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:f,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:f};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${V.length} pages / 0 new / ${V.length} cached`,metrics:{renderedCount:0,cachedCount:V.length,renderedSize:0,totalPages:V.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:p}})}`),await se?.(h),await At(D),await xe((0,s.join)(k,`ssg-output.json`),A,D,n,r);return}let Je=await(0,l.resolveConfig)(d,`build`,f,f),Ye=Object.assign({},Je.ssgOptions||{},e),{script:Xe=`sync`,mock:Ze=!1,formatting:Qe=`none`,includedRoutes:$e=Dt,onBeforePageRender:tt,onPageRendered:nt,dirStyle:st=`flat`,includeAllRoutes:ut=!1,format:H=`esm`,concurrency:pt=20,rootContainerId:mt=`root`,beastiesOptions:ht={},criticalCssMaxSize:gt}=Ye,_t=ht,St=n.i(gt),U=Ye.turbo??!1,Ot=(0,s.join)(k,`ssr`),Nt=(0,s.join)(k,`ssr-cache-index.json`);if(N=(0,s.join)(Ot,U?`turbo-ssr`:M),!U&&L)try{let e=(await c.default.readJson(Nt))[A];if(typeof e==`string`){let t=at(Ot,e);t&&(N=t)}}catch{}let Pt=lt((0,l.createLogger)(),ot),Ft=()=>{};if(Ze){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-9nTqUjri.cjs`));Ft=e()}let W={};try{if(c.default.existsSync(B)){let e=await c.default.readJson(B);W=we(e,Object.keys(e))}}catch{}let G=!1;if(L)try{let e=(0,s.join)(k,`routes-cache.json`);if(c.default.existsSync(e)){let t=JSON.parse(c.default.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=O(e),r=W[n];return ze({routePath:e,cacheItem:r,sourceContentHash:Le(S[n]||S[e]||Tt(m,t.sourceFiles,n)||Tt(m,t.sourceFiles,e),F),ssgPagesDir:z,requireAssetHash:!0})})&&(V=t.paths,G=!0)}}catch{}let It=G?``:await me(Je,he),Lt=(U||L)&&c.default.existsSync(N)&&c.default.readdirSync(N).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,Rt=null;if(!G&&Lt&&H===`esm`){let e=process.platform===`win32`?`file://`:``;try{let t=N,n=c.default.existsSync(t)?c.default.readdirSync(t).filter(e=>e.endsWith(`.mjs`)):[];n.length>0&&(Rt=import(e+(0,s.join)(t,n[0]).replace(/\\/g,`/`)).catch(()=>{}))}catch{}}let zt=performance.now(),[Bt,Vt]=await Promise.all([rt({viteConfig:d,resolvedMode:Je.mode,root:m,htmlEntry:w,outDir:D,clientCacheDir:P,finalCacheDir:k,docsDirName:T,initialClientHash:A,canBypassClientBuild:L,customLogger:Pt,onStep:b,shouldSuppressLog:ot},()=>Me(m,T,k)),it({viteConfig:d,resolvedMode:Je.mode,entry:he,ssrEntry:It,ssgOut:N,format:H,canSkipSsrImport:G,serverBuildSkipped:Lt,customLogger:Pt,onStep:b,shouldSuppressLog:ot})]);if(h=Bt.outDir,ke=Bt.resolvedClientCacheDir,Ae=Bt.resolvedClientHash,F=Bt.pageContentFallbackHash,I&&(F=`${F}-${I}`),!Fe){let e=Ne();R.server=e.server,R.css=e.css,(e.server||e.css)&&Pe(),Fe=!0}if(M=Ae.substring(0,12),_=Bt.durationMs,v=Vt.durationMs,!U)try{let e={};try{e=await c.default.readJson(Nt)}catch{}e[Ae]=(0,s.relative)(Ot,N),await Ee(Nt,e)}catch{}let Ht=H===`esm`&&process.platform===`win32`?`file://`:``,Ut=H===`esm`?`.mjs`:`.cjs`;It.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Wt=`combined`+Ut;try{if(c.default.existsSync(N)){let e=c.default.readdirSync(N).filter(e=>e.endsWith(Ut));e.length>0&&(Wt=e[0])}}catch{}let Gt=Ht+(0,s.join)(N,Wt).replace(/\\/g,`/`),Kt=Wt.replace(/\.[^/.]+$/,``),qt=JSON.parse(await c.default.readFile((0,s.join)(N,...yt,`manifest.json`),`utf-8`)),Jt=null,Yt=null,K=[],Xt,Zt=`/`,Qt,$t=null,en,tn=$e;if(!G){let e=typeof require<`u`?require:(0,a.createRequire)(require(`url`).pathToFileURL(__filename).href),n=performance.now(),r=H===`esm`?await import(Gt):e(Gt);Rt&&await Rt.catch(()=>{}),y=performance.now()-n,Xt=r.matchRouteBranchWithParams;let{createRoot:i,includedRoutes:o}=r;tn=o||$e,Jt=await i(!1);let s=Jt;if(K=s.routes,Zt=s.base,Qt=s.triggerOnSSRAppRendered,$t=s.app,en=s.routerType,K&&K.length>0)for(let e of K)e.path&&(e.filePath||e.entry)&&!S[e.path]&&(S[e.path]=e.filePath||e.entry);j=Ge(j,We(m,K,S)),Yt=t.t(s,r)}let nn=``,rn=0,q=null,an=null,on=null,sn=!1;async function cn(){if(on){await on;return}let e=an;e&&(on=e.destroy(),await on)}if(!G){let e=performance.now(),{paths:t}=await pe(K);V=ut?t:await tn(t,K||[]),V=Dt(V,K||[]),V=Array.from(new Set(V)),rn+=performance.now()-e;try{await Ee((0,s.join)(k,`routes-cache.json`),{paths:V,dirStyle:st,base:g,sourceFiles:Et(m,S)},0)}catch{}nn=(0,s.join)(N,Kt+Ut)}async function ln(){if(q||sn||V.length<=4)return;sn=!0;let e=performance.now();try{nn=(0,s.join)(N,Kt+Ut);let{SsgWorkerPool:t}=await Promise.resolve().then(()=>require(`./ssg-worker-pool-CfVq6hp_.cjs`));q=new t({ssrEntryPath:nn,format:H===`esm`?`esm`:`cjs`}),an=q,await q.ready(),Jn=performance.now()-e}catch{Jn=performance.now()-e,q=null}}let un=Ye.criticalCss??`zig-critters`,J,dn;un===`zig-critters`?(J=await n.t({concurrency:Math.max(1,Math.min(pt,o.default.cpus().length,8))}),J||(0,i.warn)("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):un===`beasties`&&_t!==!1&&(dn=await n.r(h,{publicPath:g,..._t}));let Y=``,fn=``;if(J){let e=`unknown`;try{e=await J.getEngineIdentity()}catch{}let t=(0,s.join)(D,`assets`);if(c.default.existsSync(t)){let e=c.default.readdirSync(t).filter(e=>e.endsWith(`.css`));for(let n of e)Y+=c.default.readFileSync((0,s.join)(t,n),`utf-8`)+`
3
+ `}Y&&(fn=u.default.createHash(`sha256`).update(Y).update(`\0`).update(e).digest(`hex`))}let pn={},mn={},X={},hn=null;if(G)for(let e of V){let t=O(e);X[e]=W[t]?.assetHash||A}else{let[e,t]=await Promise.all([c.default.readFile((0,s.join)(D,...yt,`ssr-manifest.json`),`utf-8`),c.default.readFile((0,s.join)(D,...yt,`manifest.json`),`utf-8`)]);pn=JSON.parse(e),mn=JSON.parse(t),hn=oe(mn);let n=await Ct(D,mn,k),r;try{let e=(0,s.join)(m,`.boltdocs`,`compiled`,`pages-chunk-map.json`);c.default.existsSync(e)&&(r={chunkMap:JSON.parse(c.default.readFileSync(e,`utf-8`))})}catch{r=void 0}await Promise.all(Object.entries(S).map(async([e,t])=>{X[e]=await ce({outDir:D,indexes:hn,ssrManifest:pn,routeSourceFile:t,root:m,clientHash:A,assetHashes:n,chunkPackMaps:r}),R.server&&(X[e]=`${X[e]}-${R.server}`),R.css&&(X[e]=`${X[e]}-${R.css}`)}));for(let e of V)X[e]||(X[e]=F)}let Z=await c.default.readFile((0,s.join)(D,w),`utf-8`);c.default.rmSync((0,s.join)(D,w)),Z=jt(Z,Xe);let gn=Z.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],_n=tt?null:ue({rootContainerId:mt,indexHTML:Z}),vn=(await import(`p-queue`)).default||await import(`p-queue`),yn=new vn({concurrency:pt}),bn=new vn({concurrency:Math.min(o.default.cpus().length,4)}),xn=new vn({concurrency:Math.max(2,Math.min(o.default.cpus().length,8))}),Sn={},Cn=0,wn=new Map,Tn=new Set;for(let e of V){let n=S[t.a(e).replace(/\/$/,``)]||S[e];n&&Tn.add(n)}for(let e of Tn)try{if(c.default.existsSync(e)){let t=c.default.statSync(e);wn.set(e,{hash:Re(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let En=null;!G&&Xt&&(En=ee({routes:[...K],base:Zt,matchRouteBranchWithParams:Xt,serverManifest:qt,manifest:mn,ssrManifest:pn}));let Dn=dt({routes:V,outDir:D,ssgPagesDir:z,dirStyle:st,contextBase:Zt,fallbackHash:F,routeToSourceFileMap:S,sourceMeta:wn,routeToAssetHash:X}),On=U?void 0:(0,s.join)(k,`critical-css`),kn=new ie({cacheDir:On}),An=[],jn=[],Mn=[],Nn=[],Pn=0,Fn=0,In=0,Ln=0,Rn=0,zn=0,Bn=0,Vn=0,Hn=0,Un=0,Wn=0,Gn=0,Kn=0,Q={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function qn(e){e&&(Q.count++,Q.matchMs+=e.matchMs,Q.resolveMs+=e.resolveMs,Q.loadersMs+=e.loadersMs,Q.renderMs+=e.renderMs,Q.helmetMs+=e.helmetMs,Q.totalMs+=e.totalMs)}let Jn=0,Yn=!1;function $(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let Xn=0,Zn=0,Qn=0,$n=new Set,er=new Set,tr=[],nr=_e({writeFile:async(e,t)=>{await c.default.ensureDir((0,s.dirname)(e)),await c.default.writeFile(e,t,`utf-8`)}}),rr=JSON.stringify(W),ir=we(W,V),ar=new Map,or=new Set;or.add(z);for(let e of V){let t=st===`nested`?(0,s.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;or.add((0,s.join)(D,(0,s.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;or.add((0,s.join)(D,`static-loader-data`,(0,s.dirname)(n)))}or.add((0,s.join)(D,`static-loader-data`)),await Promise.all([...or].map(e=>c.default.ensureDir(e)));async function sr(e,t,n,a,o,l,u,d,f,p,m,h,ee,ne,ie){let ae=performance.now(),{path:_,cachedHtmlFile:v,cachedLoaderFile:oe,normalizedKey:y,sourceContentHash:se,sourceMtimeMs:ce,fetchUrl:b}=e,ue;if(!ee&&ne===`remix`){if(!En)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();ue=new Set(await(ar.get(_)||En(b))),Pn+=performance.now()-e}else ue=new Set;let x;if(d&&Object.keys(d).length>0){let e=xt(_,M);x=e,U&&await c.default.writeFile((0,s.join)(D,e),JSON.stringify(d)),Sn[wt(_,g)]=e,Cn++}await h?.(_,t,f);let S=performance.now(),C=_n&&ie===Z?_n({appHTML:t,metaAttributes:n,bodyAttributes:a,htmlAttributes:o,initialState:null}):await de({rootContainerId:mt,appHTML:t,indexHTML:ie,metaAttributes:n,bodyAttributes:a,htmlAttributes:o,initialState:null});In+=performance.now()-S;let w=ee?``:fe(ue),pe=u?C.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):C;w&&(pe=pe.replace(`<head>`,`<head>${w}`));let me=performance.now();Rn++,Rn===1&&(zn=me);let he=await nt?.(_,pe,f)||pe;Rn--,Rn===0&&(Ln+=performance.now()-zn);let T=``;if(d&&Object.keys(d).length>0){let e=JSON.stringify(d).replace(/</g,`\\u003c`);T=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${wt(_,g)}': ${e} };`}let ge=r.t(u),E=he,_e=`<script>window.__VITE_REACT_SSG_HASH__ = '${M}';${T}${ge}<\/script>`,ve=performance.now();if(E=E.replace(`<script>${le}<\/script>`,``),J){if(Y){let e=te(E,fn,Y,`zig-critters`);try{let t=await kn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await J.extractCriticalCss(E,Y,{maxSize:St});return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&(0,i.warn)(`[zig-critters] Critical CSS for "${_}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)},{engine:`zig-critters`});t&&!E.includes(`data-zig-critters`)&&(E=E.replace(`</head>`,`${t}</head>`))}catch(e){(0,i.warn)(`[zig-critters] Failed to inline CSS for "${_}": ${e instanceof Error?e.message:String(e)}`)}}E=E.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(dn){let e=te(E,fn,Y,`beasties`),t=await kn.getOrCreate(e,async()=>{let e=await bn.add(()=>dn.process(E));return re(E,e)},{engine:`beasties`});t&&!E.includes(t)&&(E=E.replace(`</head>`,`${t}</head>`)),E=E.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let ye=_e+(l||``);ye&&(E=E.replace(`<head>`,`<head>${ye}`));let be=Qe===`none`?E:await Mt(E,Qe);Mn.push(Math.round(performance.now()-ve));let xe=performance.now();U?d&&Object.keys(d).length>0&&x&&await nr.enqueue((0,s.join)(D,x),JSON.stringify(d)):(await nr.enqueue(v,be),d&&Object.keys(d).length>0&&x?(await nr.enqueue(oe,JSON.stringify(d)),ir[y]={contentHash:se,mtime:ce?Math.round(ce):0,loaderDataFilePath:x,assetHash:e.routeAssetHash}):ir[y]={contentHash:se,mtime:ce?Math.round(ce):0,assetHash:e.routeAssetHash});let Se=performance.now()-xe;Nn.push(Math.round(Se)),jn.push(Math.round(performance.now()-ae)),Xn++,Un++,Qn+=be.length}let cr=performance.now(),lr=[];await vt({routes:V,canBypassClientBuild:L,getPlan:e=>ft(Dn,e),isCached:e=>{if(U)return!1;try{return ze({routePath:e.path,cacheItem:W[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:z})}catch{return!1}},onCacheHit:async e=>{let t=W[e.normalizedKey]?.loaderDataFilePath,n=t?(0,s.join)(D,t):void 0,r=!$n.has(e.finalOutFile),i=!!n&&!er.has(n);r&&$n.add(e.finalOutFile),i&&n&&er.add(n);let a=performance.now();try{if(r){let t=!1;if(gn)try{let n=await c.default.readFile(e.cachedHtmlFile,`utf-8`),r=n.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1];r&&r!==gn&&(await c.default.ensureDir((0,s.dirname)(e.finalOutFile)),await c.default.writeFile(e.finalOutFile,n.split(r).join(gn)),t=!0)}catch{t=!1}t||tr.push({source:e.cachedHtmlFile,destination:e.finalOutFile})}n&&t&&c.default.existsSync(e.cachedLoaderFile)&&(i&&tr.push({source:e.cachedLoaderFile,destination:n}),Sn[wt(e.path,g)]=t,Cn++),Zn++,Wn++,Bn+=performance.now()-a}catch(t){throw r&&$n.delete(e.finalOutFile),i&&n&&er.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!$t&&en===`remix`&&En&&ar.set(e.path,En(e.fetchUrl))},ensurePool:ln,getPool:()=>q,getWorkerCount:()=>Be(q)?.totalWorkers??0,onWorkerFailure:async(e,t,n,a)=>{if(!Yt)throw Error(`Error on page: ${e}\n${String(n)}`);(0,i.warn)(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),Yn=!0;try{await cn()}catch{}q=null,sn=!0;let o=await Yt.render(e);return{path:e,appHTML:o.appHTML,metaAttributes:o.metaAttributes,bodyAttributes:o.bodyAttributes,htmlAttributes:o.htmlAttributes,styleTag:o.styleTag,timings:o.timings,routerContext:r.n(o.routerContext)}},onWorkerResult:async(e,t,n,r)=>{Vn+=Math.max(0,r-(n.timings?.totalMs??0)),Hn++,n.timings&&(An.push(Math.round(n.timings.totalMs)),qn(n.timings));let i={...Jt,routePath:e},a=performance.now(),o=await tt?.(e,Z,i)||Z;Fn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await xn.add(()=>sr(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,Zt,K,Qt,$t,en??`remix`,o))},scheduleMainThread:(e,t)=>{lr.push(yn.add(async()=>{try{let n={...Jt,routePath:e},i=performance.now(),a=await tt?.(e,Z,n)||Z;Fn+=performance.now()-i;let o=performance.now(),{appHTML:s,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Yt.render(e);An.push(Math.round(performance.now()-o)),qn(p);let m=f?.loaderData;await sr(t,s,u,c,l,d,r.n(f),m||null,n,Zt,K,Qt,$t,en??`remix`,a)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>xn.onIdle(),drainMainThread:async()=>{await Promise.all(lr),await yn.onIdle()},drainWrites:()=>nr.flush(),cleanupAfterFailure:async()=>{try{c.default.existsSync(D)&&await c.default.remove(D)}catch{}},destroyPool:cn,onNoRenderer:e=>{(0,i.warn)(`[ssg] No SSR context available for ${e}, skipping`)}}),Kn+=performance.now()-cr;let ur=performance.now();for(let e of V){if(U)continue;let t=Dn.get(e);if(!t||!c.default.existsSync(t.cachedHtmlFile))continue;$n.has(t.finalOutFile)||tr.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=ir[t.normalizedKey];if(!n?.loaderDataFilePath||!c.default.existsSync(t.cachedLoaderFile))continue;let r=(0,s.join)(D,n.loaderDataFilePath);er.has(r)||tr.push({source:t.cachedLoaderFile,destination:r})}await E(tr);let dr=Math.round(performance.now()-ur);Gn+=dr;let fr=Xn+Zn,pr=(Qn/1024/1024).toFixed(2),mr=0;if(!U){try{let e=JSON.stringify(ir)!==rr;e&&await Ee(B,ir),mr=await kt(z,ir,V,e)}catch{}if(On)try{await ae(On,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let hr=performance.now()-zt,gr=Be(an),_r={renderedCount:Xn,cachedCount:Zn,renderedSize:Qn,totalPages:fr,prunedCount:mr,clientBuildMs:Math.round(_),serverBuildMs:Math.round(v),ssrImportMs:Math.round(y),workerPoolSetupMs:Math.round(Jn),workerUsed:gr!==null&&!Yn,workerCount:gr?.totalWorkers??0,fallbackMainThread:Yn,ssrP50Ms:$(An,50),ssrP95Ms:$(An,95),ssrP99Ms:$(An,99),crittersP50Ms:$(Mn,50),crittersP95Ms:$(Mn,95),writeP50Ms:$(Nn,50),writeP95Ms:$(Nn,95),routerTimingCount:Q.count,routerMatchAvgMs:Q.count>0?Q.matchMs/Q.count:0,routerResolveAvgMs:Q.count>0?Q.resolveMs/Q.count:0,routerLoadersAvgMs:Q.count>0?Q.loadersMs/Q.count:0,routerRenderAvgMs:Q.count>0?Q.renderMs/Q.count:0,routerHelmetAvgMs:Q.count>0?Q.helmetMs/Q.count:0,routerTotalAvgMs:Q.count>0?Q.totalMs/Q.count:0,pagesPerSecond:fr>0&&hr>0?Math.round(fr/(hr/1e3)*10)/10:0,pipeline:{renderedPageCount:Un,cachedPageCount:Wn,clientBuildMs:Math.round(_),serverBuildMs:Math.round(v),ssrImportMs:Math.round(y),workerPoolSetupMs:Math.round(Jn),routePreparationMs:Math.round(rn),workerTransportMs:Math.round(Vn),workerRoundTripMs:Math.round(Vn),workerTransportAvgMs:Hn>0?Math.round(Vn/Hn):0,finalizeP50Ms:$(jn,50),finalizeP95Ms:$(jn,95),assetCollectionMs:Math.round(Pn),beforeHookMs:Math.round(Fn),htmlAssemblyMs:Math.round(In),onPageRenderedHookMs:Math.round(Ln),criticalCssP50Ms:$(Mn,50),criticalCssP95Ms:$(Mn,95),cacheWriteMs:Math.round(0+nr.writeTimeMs()),cachedOutputMs:Math.round(Bn),renderQueueDrainMs:Math.round(Kn),renderPipelineSettleMs:Math.round(Kn),outputLinkMs:Math.round(Gn)}};b?.({name:`Render pages`,duration:hr,success:!0,details:`${fr} pages (${Xn} new, ${Zn} cached, ${pr} MB)`,metrics:_r}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(hr),success:!0,details:`${fr} pages / ${Xn} new / ${Zn} cached / ${pr} MB`,metrics:_r})}`);let vr=performance.now(),yr=bt(Sn);if(await Te((0,s.join)(D,`static-loader-data-manifest-${M}.json`),yr),await ct((0,s.join)(k,`ssr`),5,U?`turbo-ssr`:(0,s.basename)(N)),Ft(),J?.dispose)try{await J.dispose()}catch{}let br=Je.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;br&&!br.disabled&&br.generateSW&&await br.generateSW();let xr=Math.round(performance.now()-ne);b?.({name:`Static loader data`,duration:performance.now()-vr,success:!0,details:`${Cn} loader data files`,metrics:{loaderDataFileCount:Cn}}),await se?.(h),await At(D);let Sr=Ce(D),Cr=await De(D,xr,k,{outputFiles:Sr,manifestPath:(0,s.join)(ke,`dist`,...yt,`manifest.json`)});Oe(D,Cr),b?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(xr/1e3).toFixed(1)}s, JS: ${(Cr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(Cr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:xr,totalPages:Cr.pages.length,jsSize:Cr.totalJSBundleSize,cssSize:Cr.totalCSSBundleSize}}),await xe((0,s.join)(k,`ssg-output.json`),Ae,D,Se(V,ir,st).concat(`static-loader-data-manifest-${M}.json`).concat(`page-source.json`),Bt.clientFiles,Sr)}async function kt(e,t,n=[],r=!1){try{if(!c.default.existsSync(e))return 0;let i=(0,s.join)(e,`.prune-state`);if(!r)try{let e=await c.default.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await c.default.readdir(e),o=new Set,l=new Set([...Object.keys(t),...n]);for(let e of l){let t=u.default.createHash(`md5`).update(e).digest(`hex`);o.add(`${t}.html`),o.add(`${t}.json`)}let d=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!o.has(t)&&(await c.default.remove((0,s.join)(e,t)),d++);return await c.default.writeFile(i,String(Date.now()),`utf8`),d}catch{return 0}}async function At(e){try{yt.length>0?await c.default.remove((0,s.join)(e,...yt)):await Promise.all([c.default.remove((0,s.join)(e,`manifest.json`)),c.default.remove((0,s.join)(e,`ssr-manifest.json`))])}catch{}}function jt(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Mt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return(0,i.error)(`Error formatting html: ${t?.message}`),e}return e}function Nt(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function Pt({template:e,ssrEntry:n,onBeforePageRender:r,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(c){let u=async(u,d)=>{try{let i=u.originalUrl??u.url??`/`,f=await c.ssrLoadModule(n),p=f.createRoot,m=await p(!1,i),h=t.t(m,f),{app:g,base:ee}=m,[te=`/`,ne=``]=i.split(`?`),re=new URLSearchParams(ne);if(!g&&re.has(`_data`))return h.handleLoader(u,d);let ie=await c.transformIndexHtml(i,e),ae=await r?.(i,ie,m)||ie,{appHTML:_,bodyAttributes:v,htmlAttributes:oe,metaAttributes:y,styleTag:se}=await h.render(t.i(te,ee));y.push(se);let ce=await Promise.all([n,a].map(async e=>await c.moduleGraph.getModuleByUrl(e))),le=new Set,b=new Set,ue=async e=>{if(!e?.ssrTransformResult||b.has(e))return;b.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))le.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await c.moduleGraph.getModuleByUrl(e);t&&await ue(t)}};await Promise.all(ce.map(async e=>ue(e)));let x=[...le].map(e=>S(t.n(c.config.base,e)));y.push(...x);let fe=await de({rootContainerId:o,appHTML:_,indexHTML:ae,metaAttributes:y,bodyAttributes:v,htmlAttributes:oe,initialState:null}),C=await s?.(i,fe,m)||fe;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,l.send)(u,d,C,`html`,{headers:`pluginContainer`in c?c.config.server.headers:c.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));c.ssrFixStacktrace(t),(0,i.error)(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return c.middlewares.use(Nt),()=>{c.middlewares.use(u)}}}}async function Ft(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),o,c,u,f;if(r){o=e.root||a,c={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=c,n=c.entry||await x(o,t);u=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:(0,s.join)(o,n),f=await d.default.readFile((0,s.join)(o,t),`utf-8`)}else{let t=await(0,l.resolveConfig)(e,`serve`,n,n);o=t.root||a,c={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=c,p=c.entry||await x(o,r),[m,h]=await Promise.all([me(t,p),d.default.readFile((0,s.join)(o,r),`utf-8`)]);u=m,f=h}let{onBeforePageRender:p,onPageRendered:m,rootContainerId:h=`root`,mock:g=!1}=c;if(process.env.__DEV_MODE_SSR=`true`,g){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-9nTqUjri.cjs`));e()}return await(0,l.createServer)({...e,plugins:[...e.plugins??[],Pt({template:f,ssrEntry:u,onBeforePageRender:p,onPageRendered:m,entry:c.entry||`src/main.ts`,rootContainerId:h})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function W(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Ft(t,e);return await r.listen(),G(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,i.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function G(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${i.colors.bold(`${e}ms`)}`}n(`\n ${i.colors.cyan(` VITE-REACT-SSG v${w} `)}`,{clear:!e.config.logger.hasWarned}),n(`${i.colors.cyan(`\n VITE v${l.version}`)+i.colors.dim(r)}\n`),n(i.colors.green(` dev server running at:`)),e.printUrls()}var It=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};exports.ShellStitcher=It,exports.build=Ot,exports.createServer=Ft,exports.dev=W;
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-CipD5Jrk.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{n as e}from"./rolldown-runtime-C-zNXMYg.mjs";import{a as t,i as n,n as r,o as i,r as a,t as o}from"./router-adapter-CJuW_Xmp.mjs";import{i as s,r as c,t as l}from"./critical-CRZJx8-f.mjs";import{n as u,t as d}from"./ssg-worker-payload-CWmidVcz.mjs";import{createRequire as f}from"node:module";import{colors as p,error as m,warn as h}from"@bdocs/dui";import ee from"node:os";import g,{basename as te,dirname as _,isAbsolute as v,join as y,relative as b,resolve as x,sep as S}from"node:path";import C from"fs-extra";import{build as w,createLogger as ne,createServer as re,mergeConfig as T,resolveConfig as ie,send as E,version as D}from"vite";import O,{createHash as k}from"node:crypto";import A,{readFile as ae}from"node:fs/promises";import j from"node:fs";const M=/import\("([^)]+)"\)/g;function N(e,t){let n=new Set;if(!t)return n;for(let r of t)P(e,r,n);return n}function P(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{P(e,t,n)}),n):n}function F(e,t,n,r){let i=e?.map(e=>e.route.entry).filter(Boolean)??[],a=new Set;e?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(M);for(let e of n)a.add(e[1].split(`/`).at(-1)??``)});let o=new Set(i);for(let e of a){let t=n.find(([t,n])=>n.file.endsWith(e));t&&o.add(t[0])}let s=new Set;for(let e of o){let n=r.get(e);if(!n){let i=N(t.manifest,new Set([e]));n=new Set;for(let e of i)for(let r of t.ssrManifest[e]||[])n.add(r);r.set(e,n)}for(let e of n)s.add(e)}return s}function oe(e){let t=Object.entries(e.serverManifest),n=new Map,r=new Map;return i=>{let a=r.get(i);if(a)return a;let o=Promise.resolve().then(()=>{let r=F(e.matchRouteBranchWithParams([...e.routes],i,e.base),e,t,n);return new Set(r)});return r.set(i,o),o.catch(()=>{r.get(i)===o&&r.delete(i)}),o}}function se(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return O.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function I(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function ce(e,t){let n=new Set(I(e)),r=I(t).filter(e=>!n.has(e));return r.length>0?r.join(`
2
+ `):null}var le=class{constructor(e={}){this.entries=new Map,this.cacheDir=e.cacheDir,this.maxEntries=e.maxEntries??1024}getOrCreate(e,t,n={}){let r=this.entries.get(e);if(r)return r.promise;let i=n.engine??`zig-critters`,a={promise:Promise.resolve(null),settled:!1},o=Promise.resolve().then(async()=>{if(this.cacheDir){let t=await this.readDisk(e,i);if(t!==void 0)return t}return t()}).then(t=>(this.cacheDir&&this.writeDisk(e,i,t).catch(()=>{}),t)).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{a.settled=!0,this.evictSettledEntries()});return a.promise=o,this.entries.set(e,a),this.evictSettledEntries(),o}get size(){return this.entries.size}diskPath(e){return y(this.cacheDir,`critical-css-${e}.json`)}async readDisk(e,t){try{let n=await C.readFile(this.diskPath(e),`utf-8`),r=JSON.parse(n);if(r?.v!==2||r?.engine!==t||!(r.style===null||typeof r.style==`string`))return;let i=new Date;return C.utimes(this.diskPath(e),i,i).catch(()=>{}),r.style}catch{return}}async writeDisk(e,t,n){if(!this.cacheDir||n!==null&&n.length>262144)return;let r={v:2,engine:t,style:n};await C.ensureDir(this.cacheDir),await C.writeFile(this.diskPath(e),JSON.stringify(r),`utf-8`)}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};async function ue(e,t={}){let n=t.maxAgeMs??720*60*60*1e3,r=t.maxEntries??5e3;try{if(!C.existsSync(e))return 0;let t=Date.now()-n,i=[];for(let n of await C.readdir(e)){if(!n.startsWith(`critical-css-`)||!n.endsWith(`.json`))continue;let r=y(e,n);try{let e=await C.stat(r),a=Math.max(e.mtimeMs,e.atimeMs);a<t?(await C.remove(r),i.push({file:n,usedAt:0})):i.push({file:n,usedAt:a})}catch{}}let a=i.filter(e=>e.usedAt===0).length;if(i.length>r){let t=i.filter(e=>e.usedAt>0).sort((e,t)=>t.usedAt-e.usedAt);for(let n of t.slice(r))try{await C.remove(y(e,n.file)),a++}catch{}}return a}catch{return 0}}const L=new Set([`.js`,`.mjs`,`.css`]);function R(e){let t=g.extname(e).toLowerCase();return L.has(t)}function de(e){let t=new Map,n=new Map;for(let r of Object.values(e))t.set(r.file,r),r.src&&n.set(r.src,r);return{byFile:t,bySrc:n}}function z(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])R(t)&&z(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])R(t)&&!n.has(t)&&z(e,t,n)}}async function fe(e,t,n){if(n){let e=O.createHash(`md5`);for(let r of t){let t=n.get(r);t&&e.update(t)}return e.digest(`hex`)}let r=new Map;await Promise.all(t.map(async t=>{try{let n=await ae(g.join(e,t));r.set(t,n)}catch{}}));let i=O.createHash(`md5`);for(let e of Array.from(r.keys()).sort()){let t=r.get(e);t&&i.update(t)}return i.digest(`hex`)}async function pe(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:o,clientHash:s,assetHashes:c,chunkPackMaps:l}=e,u=n;if(!u){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);u=de(r)}let{byFile:d,bySrc:f}=u,p=g.relative(o,a).replace(/\\/g,`/`),m=new Set,h=f.get(p);if(h)z(d,h.file,m);else if(l){let e=g.isAbsolute(a)?a:g.resolve(o,a),t=l.chunkMap[a]??l.chunkMap[e]??l.chunkMap[`/${e}`];if(t!==void 0){for(let e of d.values())if((e.src||``).includes(`chunk-${t}.mjs`)||e.file.includes(`chunk-${t}`)){z(d,e.file,m);break}}}if(m.size===0){let e=[p,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)R(t)&&z(d,t,m)}}if(m.size===0){if(!s)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return s}return fe(t,Array.from(m).sort(),c)}const me=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function B(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function he({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${me}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return B(B(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function ge({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${me}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return B(B(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return B(B(p,`html`,a),`body`,i)}async function _e(e,t=`index.html`){let[,n]=[...(await C.readFile(y(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function V(e){return`<link rel="stylesheet" href="${e}">`}function ve(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=ye(e);r&&n.push(r)}}),n.join(``)}function ye(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var be=`0.4.2`;async function xe(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&U(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function Se(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:y(e.root,t))}const H=/[:*?]/;function U(e){return e?H.test(e):!1}async function Ce(e,t){if(e!==t){await C.ensureDir(_(t)),await C.remove(t);try{await C.link(e,t)}catch{await C.copy(e,t)}}}async function we(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(Ce(r.source,r.destination)));await Promise.all(n)}function Te({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=0,l=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),c+=performance.now()-t}),s};return{enqueue(e,t){let u=Buffer.byteLength(t,`utf8`);return u>i?(s=l().then(async()=>{let r=performance.now();await n(e,t),c+=performance.now()-r}),s):(a.push({filePath:e,content:t}),o+=u,a.length>=r||o>=i?l():Promise.resolve())},flush:l,pendingCount(){return a.length},writeTimeMs(){return c}}}function Ee(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function De(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,s=[...new Set(r)].sort(),c=[...new Set(i)].sort(),l=[...new Set(a)].sort();if(!o(e.clientFiles,s)||!o(e.pageFiles,c)||!o(e.auxiliaryFiles||[],l))return!1;let u=[...s,...c,...l];return o(Me(n),[...new Set(u)].sort())?u.every(e=>C.existsSync(`${n}/${e}`)):!1}function Oe(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function ke(e){try{let t=await C.readJson(e);return!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`)?void 0:Ee(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function Ae(e,t,n,r,i=[],a){let o=a||Me(n),s=new Set(r),c=new Set(i);return Fe(e,Ee(t,i.length>0?[...c]:o.filter(e=>!s.has(e)),r,i.length>0?o.filter(e=>!s.has(e)&&!c.has(e)):[]))}function je(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[W(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function Me(e){let t=[],n=r=>{let i;try{i=C.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push(b(e,i).split(S).join(`/`))}};return n(e),t.sort()}function W(e){return!e||e===`/`?``:t(e).replace(/\/+$/,``)}function Ne(e,t){let n=new Set(t.map(W)),r={};for(let[t,i]of Object.entries(e)){let e=W(t);n.has(e)&&(r[e]=i)}return r}async function Pe(e,t){try{if(await C.readFile(e,`utf8`)===t)return!1}catch{}return await C.ensureDir(_(e)),await C.writeFile(e,t,`utf8`),!0}async function Fe(e,t,n=2){try{let n=await C.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await C.ensureDir(_(e)),await C.writeJson(e,t,{spaces:n}),!0}const Ie=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),G=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function K(e){try{return j.statSync(e).size}catch{return 0}}const Le=`boltdocs-metrics.json`;function Re(e){if(!e)return null;try{let t=y(e,Le);return j.existsSync(t)?JSON.parse(j.readFileSync(t,`utf-8`)):null}catch{return null}}function ze(e,t){try{let n=g.resolve(e,`..`,`reports`);j.existsSync(n)||j.mkdirSync(n,{recursive:!0}),j.writeFileSync(y(e,Le),JSON.stringify(t))}catch{}}async function Be(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=Re(n);if(e)return e.buildTime=t,e}let i=y(e,`.vite`),a=y(e,`assets`),o={},s=r.manifestPath||y(i,`manifest.json`);j.existsSync(s)&&(o=JSON.parse(await j.readFileSync(s,`utf-8`)));let c=0,l=0;for(let[,t]of Object.entries(o)){let{file:n,css:r=[]}=t,i=K(y(e,n));c+=i;for(let t of r)l+=K(y(e,t))}let u=0,d=0;if(j.existsSync(a)){let e=j.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=g.extname(t.name).toLowerCase(),n=y(a,t.name);Ie.has(e)?u+=K(n):G.has(e)&&d++}}let f=y(e,`index.html`),p=0,m=[];if(j.existsSync(f)){let e=K(f);p+=e,m.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let h=r.outputFiles?[...r.outputFiles]:(()=>{try{return j.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of h){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=K(y(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);p+=n,m.push({route:e,htmlSize:n,htmlFile:t})}}let ee={buildTime:t,totalJSBundleSize:c,totalCSSBundleSize:l,totalImagesSize:u,totalHTMLSize:p,fontCount:d,pages:m};return n&&ze(n,ee),ee}function Ve(e,t){let n=g.resolve(e,`..`,`.boltdocs`,`reports`);j.existsSync(n)||j.mkdirSync(n,{recursive:!0});let r=y(n,`performance.json`);j.writeFileSync(r,JSON.stringify(t,null,2))}const q=new Set([`node_modules`,`dist`,`coverage`]);function He(e,t){return b(e,t).replace(/\\/g,`/`)}function Ue(e,t,n){try{let r=C.readFileSync(t),i=new Uint8Array(r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)),a=k(`sha1`).update(i).digest(`hex`);n.update(`${He(e,t)}\0${a}\0`)}catch{}}function We(e,t,n){let r;try{r=C.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`)||q.has(i))continue;let r=y(e,i),a;try{a=C.statSync(r)}catch{continue}a.isDirectory()?We(r,t,n):a.isFile()&&Ue(t,r,n)}}function Ge(e,t){let n=f(import.meta.url);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=y(_(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);C.existsSync(i)&&We(i,e,t)}catch{}}const Ke=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`];function qe(e,t){for(let n of Ke){let r=y(e,n);C.existsSync(r)&&Ue(e,r,t)}}function Je(e,t,n){try{C.removeSync(y(n,`hash-merkle.json`))}catch{}try{let n=k(`sha256`);Ge(e,n);let r=y(e,t);return C.existsSync(r)&&We(r,e,n),qe(e,n),n.update(`v4\0`),n.digest(`hex`)}catch(e){return h(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),k(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Ye(e){return O.createHash(`md5`).update(e).digest(`hex`)}function Xe(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Ze(e){if(e)try{let t=await C.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function Qe(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await C.ensureDir(_(e)),await C.writeJson(n,{version:1,files:t},{spaces:0}),await C.move(n,e,{overwrite:!0})}catch{await C.remove(n).catch(()=>{})}}async function $e(e,t,n){let r=await Ze(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=y(e,t);try{let e=await C.stat(n);if(!e.isFile())return;let o=r?.files[t];if(Xe(o,e)){i.set(t,o.hash),a[t]=o;return}let s=Ye(await C.readFile(n));i.set(t,s),a[t]={hash:s,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await Qe(n,a),i}function et(e){let t=O.createHash(`sha1`);return t.update(`v4`),t.update(`\0`),t.update(C.readFileSync(e)),t.digest(`hex`)}function tt(e,t){if(e)try{return et(e)}catch{}return t}function nt(e,t){try{return et(e)}catch{return t}}function rt({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let o=O.createHash(`md5`).update(e).digest(`hex`);return!(!C.existsSync(y(i,`${o}.html`))||t.loaderDataFilePath&&!C.existsSync(y(i,`${o}.json`)))}function it(e){return e===null?null:e.poolMetrics()}function at(e,t){return v(t)?t:y(e,t)}function ot(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=W(r);n[t]=at(e,i)}return Object.freeze(n)}function st(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:ot(e.root,e.routeToSourceFileMap)})}function ct(e,t,n={}){let r=ot(e,n),i=t.map(t=>{let i=W(t.path),a=n[t.path],o=a?at(e,a):r[i]||t.componentPath;return{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function lt(e,t){return Object.freeze({...e,routeManifest:t})}const ut=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],dt=[`react`,`react-dom`];function ft(e){return Number.parseInt(D,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function pt(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function mt(e,t){let n=[],r=i=>{let a;try{a=C.readdirSync(i,{withFileTypes:!0})}catch{return}for(let o of a){if(o.name===`.vite`)continue;let a=y(i,o.name);if(o.isDirectory())r(a);else if(o.isFile()){let r=b(e,a).split(S).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function J(e){return e.map(e=>{if(Array.isArray(e))return J(e);if(e&&typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||typeof t==`string`&&t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return null}return e}).filter(Boolean)}async function ht(e){let t=[],n=async r=>{let i;try{i=await C.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=y(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push(b(e,i).split(S).join(`/`))}};return await n(e),t.sort()}async function gt(e){try{let t=await C.readFile(e);return k(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function _t(e,t){if(!t||v(t))return;let n=x(e),r=x(n,t),i=b(n,r);if(!(!i||i===`..`||i.startsWith(`..${S}`)||v(i)))return r}async function vt(e,t){let n=y(x(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await C.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&C.existsSync(e)?await ht(e):[],a={};for(let t of i){let n=await gt(y(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=_t(t,e);r&&await gt(r)===n&&await C.remove(r)}e&&C.existsSync(e)&&(await C.ensureDir(t),await C.copy(e,t,{overwrite:!0,errorOnExist:!1})),await C.ensureDir(x(t,`..`)),await C.writeJson(n,{version:1,files:a})}function yt(e){return T(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...ft({input:{app:y(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir(v(t.build.outDir||``)?t.build.outDir||`dist`:x(e.root,t.build.outDir||`dist`))}}]})}function bt(e){return T(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...ft({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...ut],external:[...dt]},plugins:[...J(e.viteConfig.plugins||[]),pt()]})}async function xt(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,o=[],s=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),C.existsSync(e.outDir)&&await C.remove(e.outDir);let t=y(e.clientCacheDir,`dist`);await vt(e.viteConfig.publicDir,t),Y(t,e.outDir),o=mt(y(e.clientCacheDir,`dist`),e.htmlEntry)}else{await w(yt({...e,onResolvedOutputDir:e=>{n=e}}));let c=performance.now()-s;e.onStep?.({name:`Client build`,duration:c,success:!0,details:`Vite production build`}),i=t(),a=i,r=y(e.finalCacheDir,`client-cache`,i);let l=y(r,`client-hash.txt`);await C.ensureDir(r);let u=y(r,`dist`);C.existsSync(u)&&await C.remove(u),await C.copy(n,u,{overwrite:!0,errorOnExist:!1}),await vt(e.viteConfig.publicDir,u),o=mt(u,e.htmlEntry),await C.writeFile(l,i,`utf-8`),await Tt(y(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-s,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:o}}async function St(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};C.existsSync(e.ssgOut)&&await C.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await w(bt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function Ct(e,t){if(!t||v(t))return;let n=x(e,t),r=b(x(e),n);if(!(r===`..`||r.startsWith(`..${S}`)||v(r)))try{let t=C.realpathSync(e),r=C.realpathSync(n),i=b(t,r);return i===`..`||i.startsWith(`..${S}`)||v(i)||!C.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function wt(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function Y(e,t){let n=C.readdirSync(e,{withFileTypes:!0});C.mkdirSync(t,{recursive:!0});for(let r of n){let n=y(e,r.name),i=y(t,r.name);if(r.isDirectory())Y(n,i);else if(r.isFile())try{C.linkSync(n,i)}catch{C.copyFileSync(n,i)}}}async function Tt(e,t=5,n){try{if(!C.existsSync(e))return;let r=await C.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=y(e,t.name),r=await C.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await C.remove(y(e,t.name))}catch{}}function Et(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function Dt(e,t){return t===`nested`?y(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function Ot(e){return Object.freeze(e)}function kt(e){let t=new Map;for(let n of e.routes){let r=O.createHash(`md5`).update(n).digest(`hex`),o=W(n),s=e.routeToSourceFileMap[o]||e.routeToSourceFileMap[n],c=s?e.sourceMeta.get(s):void 0;t.set(n,Ot({path:n,pathHash:r,cachedHtmlFile:y(e.ssgPagesDir,`${r}.html`),cachedLoaderFile:y(e.ssgPagesDir,`${r}.json`),finalOutFile:y(e.outDir,Dt(n,e.dirStyle)),normalizedKey:o,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[n]??e.fallbackHash,fetchUrl:`${i(e.contextBase)}${a(n)}`}))}return t}function At(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function jt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function Mt(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function Nt(e,t){return e>4&&!t}function Pt(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function Ft(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function It(e){let t=[],n=new Set,r=e.getPool(),i=Mt(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},l=e=>{let r;r=jt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(Nt(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=Mt(e.getWorkerCount?.()??0))),r?.renderBatch){let t=[];for(let n of e.routes){let r=e.getPlan(n);await e.isCached(r)?(await e.onCacheHit(r),o++):(await e.prepareRoute?.(r),t.push({path:n,plan:r}))}let c=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let o=0;o<t.length;o+=c){let u=t.slice(o,o+c);if(!r){for(let{path:n,plan:r}of t.slice(o))e.scheduleMainThread(n,r),a++;break}s=!0;let d=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of u){let i=await e.onWorkerFailure(n,r,t,d);if(!Ft(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};l((async()=>{let t;try{t=await d.renderBatch(u.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==u.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<u.length;n++){let{path:r,plan:i}=u[n],o=t[n],s;if(s=Pt(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):Ft(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!Ft(s,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,s,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else for(let t of e.routes){let c=e.getPlan(t);if(await e.isCached(c)){await e.onCacheHit(c),o++;continue}if(await e.prepareRoute?.(c),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=Mt(e.getWorkerCount?.()??0))),r){s=!0;let o=r,u=performance.now();l(o.render(t).catch(async n=>{let i=await e.onWorkerFailure(t,c,n,o);return r=e.getPool(),i}).then(async n=>{if(!Ft(n,t))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(t,c,n,performance.now()-u),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(t,c),a++}return await c(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const Lt=Number.parseInt(D)>=5?[`.vite`]:[];function Rt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function zt(e,n){return`static-loader-data${t(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function Bt(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function Vt(e){let t=new Set;for(let n of Object.values(e)){Bt(n.file)&&t.add(n.file);for(let e of n.css||[])Bt(e)&&t.add(e);for(let e of n.imports||[])Bt(e)&&t.add(e);for(let e of n.dynamicImports||[])Bt(e)&&t.add(e)}return[...t]}async function Ht(e,t,n){return $e(e,Vt(t),n?y(n,`chunk-hashes.json`):void 0)}function Ut(e,n=`/`){let r=t(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Wt(e,t,n){let r=t?.[n];if(r)return v(r)?r:y(e,r)}function Gt(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,v(n)?b(e,n):n]))}function Kt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function qt(n={},r={}){let i=process.env.MODE||process.env.NODE_ENV||n.mode||`production`;i!==process.env.NODE_ENV&&(process.env.NODE_ENV=i);let a=process.cwd(),p=r.root||a,m=r.build?.outDir||`dist`,g=r.base||`/`,x=performance.now(),S=0,w=0,re=0,{onFinished:T,onStep:E,routeToSourceFileMap:D={},cacheDir:k=`.boltdocs/build`,htmlEntry:A=`index.html`,entry:ae=await _e(p,A)}=n,j=`docs`,M=Object.values(D);if(M.length>0){let e=M[0],t=b(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(j=t[0])}let N=v(m)?m:y(p,m),P=v(k)?k:y(p,k),F=Je(p,j,P),I=st({root:p,outDir:N,cacheDir:P,base:g,mode:i,entry:ae,htmlEntry:A,docsDirName:j,clientHash:F,routeToSourceFileMap:D}),L=I.clientHash.substring(0,12),R=y(I.cacheDir,`ssr`,L),z=y(I.cacheDir,`client-cache`,I.clientHash),fe=z,B=F,V=F,ye=``;try{let{getZigCritters:e}=await import(`./critical-CRZJx8-f.mjs`).then(e=>e.n),t=await e();if(t){let e=await t.getEngineIdentity();e&&e!==`unknown`&&(ye=e.slice(0,16))}}catch{}ye&&(V=`${F}-${ye}`);let be=y(z,`client-hash.txt`),H=!1;try{C.existsSync(be)&&C.existsSync(y(z,`dist`))&&(H=(await C.readFile(be,`utf-8`)).trim()===F)}catch{}let U={server:``,css:``},Ce=()=>{let e=``,t=``;try{let t=[],n=(e,r)=>{let i;try{i=C.readdirSync(e,{withFileTypes:!0})}catch{return}for(let a of i){let i=r?`${r}/${a.name}`:a.name;i!==`.vite`&&(i.startsWith(`.vite/`)||/^assets\/combined-.*\.js$/.test(i)||(a.isDirectory()?n(y(e,a.name),i):a.isFile()&&t.push(i)))}};if(n(R,``),t.length>0){t.sort();let n=O.createHash(`sha256`);for(let e of t){n.update(e),n.update(`\0`);let t=C.readFileSync(y(R,e));e===`combined.mjs`&&(t=Buffer.from(t.toString(`utf-8`).replace(/combined-[A-Za-z0-9_-]+\.js/g,`combined.js`))),n.update(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),n.update(`\0`)}e=n.digest(`hex`).slice(0,16)}}catch{}try{let e=H?y(z,`dist`,`assets`):y(N,`assets`);if(C.existsSync(e)){let n=C.readdirSync(e).filter(e=>e.endsWith(`.css`)).sort();if(n.length>0){let r=O.createHash(`sha256`);for(let t of n){r.update(t),r.update(`\0`);let n=C.readFileSync(y(e,t));r.update(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),r.update(`\0`)}t=r.digest(`hex`).slice(0,16)}}}catch{}return{server:e,css:t}},Ee=()=>{let e=F;ye&&(e=`${e}-${ye}`),(U.server||U.css)&&(e=`${e}-${U.server}-${U.css}`),V=e},Ie=!1;if(H){try{let e=(await C.readJson(y(P,`ssr-cache-index.json`)))[F];if(typeof e==`string`){let t=Ct(y(P,`ssr`),e);t&&(R=t)}}catch{}if(C.existsSync(R)){let e=Ce();U.server=e.server,U.css=e.css,(e.server||e.css)&&(Ee(),Ie=!0)}}let G=y(P,`ssg-pages`),K=y(P,`ssg-cache.json`),Le=y(P,`ssg-output.json`),Re=await ke(Le),ze=Re!==void 0&&Re.auxiliaryFiles.length===0;H&&(Oe(Re,Me(y(z,`dist`)),A)||(H=!1));let q=[],He=!1,Ue=(n.dirStyle||r.ssgOptions?.dirStyle)??`flat`;if(H&&ze&&Ue!==`nested`){let e=y(P,`routes-cache.json`);try{if(C.existsSync(e)&&C.existsSync(K)){let t=JSON.parse(C.readFileSync(e,`utf-8`)),n=Ne(JSON.parse(C.readFileSync(K,`utf-8`)),t.paths);if(t.dirStyle===Ue&&t.base===g){let e=t.paths.every(e=>{let r=W(e),i=n[r];return rt({routePath:e,cacheItem:i,sourceContentHash:tt(D[r]||D[e]||Wt(p,t.sourceFiles,r)||Wt(p,t.sourceFiles,e),V),ssgPagesDir:G,requireAssetHash:!0})});t.paths.length>0&&e&&(q=t.paths,He=!0)}}}catch{}}if(He){let e=performance.now(),t={};try{C.existsSync(K)&&(t=Ne(JSON.parse(C.readFileSync(K,`utf-8`)),q))}catch{}let n=[...je(q,t,Ue===`nested`?`nested`:`flat`),`static-loader-data-manifest-${L}.json`,`page-source.json`],i=Me(y(z,`dist`)).filter(e=>e!==A),a=await ke(Le),o=a?.auxiliaryFiles.length===0&&De(a,F,N,i,n,[]),s={};if(!o){C.existsSync(N)&&await C.remove(N);let e=y(z,`dist`);await vt(r.publicDir,e),await C.copy(e,N);let n=[];for(let e of q){let r=O.createHash(`md5`).update(e).digest(`hex`),i=y(G,`${r}.html`),a=y(G,`${r}.json`),o=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:y(N,o)}),C.existsSync(a)){let r=W(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:y(N,i.loaderDataFilePath)}),s[Ut(e,g)]=i.loaderDataFilePath)}}await we(n),await Pe(y(N,`static-loader-data-manifest-${L}.json`),Rt(s))}await Jt(G,t,q);let c=Math.round(performance.now()-x);E?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),E?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),E?.({name:`Render pages`,duration:0,success:!0,details:`${q.length} pages (all cached)`}),E?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(c/1e3).toFixed(1)}s, all cached`});let l=Math.round(performance.now()-e),u={renderedPageCount:0,cachedPageCount:q.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:l,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:l};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${q.length} pages / 0 new / ${q.length} cached`,metrics:{renderedCount:0,cachedCount:q.length,renderedSize:0,totalPages:q.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:u}})}`),await T?.(m),await Yt(N),await Ae(y(P,`ssg-output.json`),F,N,n,i);return}let We=await ie(r,`build`,i,i),Ge=Object.assign({},We.ssgOptions||{},n),{script:Ke=`sync`,mock:qe=!1,formatting:Ye=`none`,includedRoutes:Xe=Kt,onBeforePageRender:Ze,onPageRendered:Qe,dirStyle:$e=`flat`,includeAllRoutes:et=!1,format:at=`esm`,concurrency:ot=20,rootContainerId:ut=`root`,beastiesOptions:dt={},criticalCssMaxSize:ft}=Ge,pt=dt,mt=s(ft),J=Ge.turbo??!1,ht=y(P,`ssr`),gt=y(P,`ssr-cache-index.json`);if(R=y(ht,J?`turbo-ssr`:L),!J&&H)try{let e=(await C.readJson(gt))[F];if(typeof e==`string`){let t=Ct(ht,e);t&&(R=t)}}catch{}let _t=Et(ne(),wt),yt=()=>{};if(qe){let{jsdomGlobal:e}=await import(`./jsdomGlobal-FnVQDCiZ.mjs`);yt=e()}let bt={};try{if(C.existsSync(K)){let e=await C.readJson(K);bt=Ne(e,Object.keys(e))}}catch{}let Y=!1;if(H)try{let e=y(P,`routes-cache.json`);if(C.existsSync(e)){let t=JSON.parse(C.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=W(e),r=bt[n];return rt({routePath:e,cacheItem:r,sourceContentHash:tt(D[n]||D[e]||Wt(p,t.sourceFiles,n)||Wt(p,t.sourceFiles,e),V),ssgPagesDir:G,requireAssetHash:!0})})&&(q=t.paths,Y=!0)}}catch{}let Dt=Y?``:await Se(We,ae),Ot=(J||H)&&C.existsSync(R)&&C.readdirSync(R).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,jt=null;if(!Y&&Ot&&at===`esm`){let e=process.platform===`win32`?`file://`:``;try{let t=R,n=C.existsSync(t)?C.readdirSync(t).filter(e=>e.endsWith(`.mjs`)):[];n.length>0&&(jt=import(e+y(t,n[0]).replace(/\\/g,`/`)).catch(()=>{}))}catch{}}let Mt=performance.now(),[Nt,Pt]=await Promise.all([xt({viteConfig:r,resolvedMode:We.mode,root:p,htmlEntry:A,outDir:N,clientCacheDir:z,finalCacheDir:P,docsDirName:j,initialClientHash:F,canBypassClientBuild:H,customLogger:_t,onStep:E,shouldSuppressLog:wt},()=>Je(p,j,P)),St({viteConfig:r,resolvedMode:We.mode,entry:ae,ssrEntry:Dt,ssgOut:R,format:at,canSkipSsrImport:Y,serverBuildSkipped:Ot,customLogger:_t,onStep:E,shouldSuppressLog:wt})]);if(m=Nt.outDir,fe=Nt.resolvedClientCacheDir,B=Nt.resolvedClientHash,V=Nt.pageContentFallbackHash,ye&&(V=`${V}-${ye}`),!Ie){let e=Ce();U.server=e.server,U.css=e.css,(e.server||e.css)&&Ee(),Ie=!0}if(L=B.substring(0,12),S=Nt.durationMs,w=Pt.durationMs,!J)try{let e={};try{e=await C.readJson(gt)}catch{}e[B]=b(ht,R),await Fe(gt,e)}catch{}let Ft=at===`esm`&&process.platform===`win32`?`file://`:``,Bt=at===`esm`?`.mjs`:`.cjs`;Dt.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Vt=`combined`+Bt;try{if(C.existsSync(R)){let e=C.readdirSync(R).filter(e=>e.endsWith(Bt));e.length>0&&(Vt=e[0])}}catch{}let qt=Ft+y(R,Vt).replace(/\\/g,`/`),Qt=Vt.replace(/\.[^/.]+$/,``),$t=JSON.parse(await C.readFile(y(R,...Lt,`manifest.json`),`utf-8`)),en=null,tn=null,X=[],nn,rn=`/`,an,on=null,sn,cn=Xe;if(!Y){let t=e===void 0?f(import.meta.url):e,n=performance.now(),r=at===`esm`?await import(qt):t(qt);jt&&await jt.catch(()=>{}),re=performance.now()-n,nn=r.matchRouteBranchWithParams;let{createRoot:i,includedRoutes:a}=r;cn=a||Xe,en=await i(!1);let s=en;if(X=s.routes,rn=s.base,an=s.triggerOnSSRAppRendered,on=s.app,sn=s.routerType,X&&X.length>0)for(let e of X)e.path&&(e.filePath||e.entry)&&!D[e.path]&&(D[e.path]=e.filePath||e.entry);I=lt(I,ct(p,X,D)),tn=o(s,r)}let ln=``,un=0,dn=null,fn=null,pn=null,mn=!1;async function hn(){if(pn){await pn;return}let e=fn;e&&(pn=e.destroy(),await pn)}if(!Y){let e=performance.now(),{paths:t}=await xe(X);q=et?t:await cn(t,X||[]),q=Kt(q,X||[]),q=Array.from(new Set(q)),un+=performance.now()-e;try{await Fe(y(P,`routes-cache.json`),{paths:q,dirStyle:$e,base:g,sourceFiles:Gt(p,D)},0)}catch{}ln=y(R,Qt+Bt)}async function gn(){if(dn||mn||q.length<=4)return;mn=!0;let e=performance.now();try{ln=y(R,Qt+Bt);let{SsgWorkerPool:t}=await import(`./ssg-worker-pool-DArhALXL.mjs`);dn=new t({ssrEntryPath:ln,format:at===`esm`?`esm`:`cjs`}),fn=dn,await dn.ready(),ir=performance.now()-e}catch{ir=performance.now()-e,dn=null}}let _n=Ge.criticalCss??`zig-critters`,vn,yn;_n===`zig-critters`?(vn=await l({concurrency:Math.max(1,Math.min(ot,ee.cpus().length,8))}),vn||h("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):_n===`beasties`&&pt!==!1&&(yn=await c(m,{publicPath:g,...pt}));let bn=``,xn=``;if(vn){let e=`unknown`;try{e=await vn.getEngineIdentity()}catch{}let t=y(N,`assets`);if(C.existsSync(t)){let e=C.readdirSync(t).filter(e=>e.endsWith(`.css`));for(let n of e)bn+=C.readFileSync(y(t,n),`utf-8`)+`
3
+ `}bn&&(xn=O.createHash(`sha256`).update(bn).update(`\0`).update(e).digest(`hex`))}let Sn={},Cn={},Z={},wn=null;if(Y)for(let e of q){let t=W(e);Z[e]=bt[t]?.assetHash||F}else{let[e,t]=await Promise.all([C.readFile(y(N,...Lt,`ssr-manifest.json`),`utf-8`),C.readFile(y(N,...Lt,`manifest.json`),`utf-8`)]);Sn=JSON.parse(e),Cn=JSON.parse(t),wn=de(Cn);let n=await Ht(N,Cn,P),r;try{let e=y(p,`.boltdocs`,`compiled`,`pages-chunk-map.json`);C.existsSync(e)&&(r={chunkMap:JSON.parse(C.readFileSync(e,`utf-8`))})}catch{r=void 0}await Promise.all(Object.entries(D).map(async([e,t])=>{Z[e]=await pe({outDir:N,indexes:wn,ssrManifest:Sn,routeSourceFile:t,root:p,clientHash:F,assetHashes:n,chunkPackMaps:r}),U.server&&(Z[e]=`${Z[e]}-${U.server}`),U.css&&(Z[e]=`${Z[e]}-${U.css}`)}));for(let e of q)Z[e]||(Z[e]=V)}let Tn=await C.readFile(y(N,A),`utf-8`);C.rmSync(y(N,A)),Tn=Xt(Tn,Ke);let En=Tn.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1],Dn=Ze?null:he({rootContainerId:ut,indexHTML:Tn}),On=(await import(`p-queue`)).default||await import(`p-queue`),kn=new On({concurrency:ot}),An=new On({concurrency:Math.min(ee.cpus().length,4)}),jn=new On({concurrency:Math.max(2,Math.min(ee.cpus().length,8))}),Mn={},Nn=0,Pn=new Map,Fn=new Set;for(let e of q){let n=D[t(e).replace(/\/$/,``)]||D[e];n&&Fn.add(n)}for(let e of Fn)try{if(C.existsSync(e)){let t=C.statSync(e);Pn.set(e,{hash:nt(e,`${t.mtimeMs}:${t.size}`),mtimeMs:t.mtimeMs})}}catch{}let In=null;!Y&&nn&&(In=oe({routes:[...X],base:rn,matchRouteBranchWithParams:nn,serverManifest:$t,manifest:Cn,ssrManifest:Sn}));let Ln=kt({routes:q,outDir:N,ssgPagesDir:G,dirStyle:$e,contextBase:rn,fallbackHash:V,routeToSourceFileMap:D,sourceMeta:Pn,routeToAssetHash:Z}),Rn=J?void 0:y(P,`critical-css`),zn=new le({cacheDir:Rn}),Bn=[],Vn=[],Hn=[],Un=[],Wn=0,Gn=0,Kn=0,qn=0,Jn=0,Yn=0,Xn=0,Zn=0,Qn=0,$n=0,er=0,tr=0,nr=0,Q={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function rr(e){e&&(Q.count++,Q.matchMs+=e.matchMs,Q.resolveMs+=e.resolveMs,Q.loadersMs+=e.loadersMs,Q.renderMs+=e.renderMs,Q.helmetMs+=e.helmetMs,Q.totalMs+=e.totalMs)}let ir=0,ar=!1;function $(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let or=0,sr=0,cr=0,lr=new Set,ur=new Set,dr=[],fr=Te({writeFile:async(e,t)=>{await C.ensureDir(_(e)),await C.writeFile(e,t,`utf-8`)}}),pr=JSON.stringify(bt),mr=Ne(bt,q),hr=new Map,gr=new Set;gr.add(G);for(let e of q){let t=$e===`nested`?y(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;gr.add(y(N,_(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;gr.add(y(N,`static-loader-data`,_(n)))}gr.add(y(N,`static-loader-data`)),await Promise.all([...gr].map(e=>C.ensureDir(e)));async function _r(e,t,n,r,i,a,o,s,c,l,u,f,p,m,ee){let te=performance.now(),{path:_,cachedHtmlFile:v,cachedLoaderFile:b,normalizedKey:x,sourceContentHash:S,sourceMtimeMs:w,fetchUrl:ne}=e,re;if(!p&&m===`remix`){if(!In)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();re=new Set(await(hr.get(_)||In(ne))),Wn+=performance.now()-e}else re=new Set;let T;if(s&&Object.keys(s).length>0){let e=zt(_,L);T=e,J&&await C.writeFile(y(N,e),JSON.stringify(s)),Mn[Ut(_,g)]=e,Nn++}await f?.(_,t,c);let ie=performance.now(),E=Dn&&ee===Tn?Dn({appHTML:t,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null}):await ge({rootContainerId:ut,appHTML:t,indexHTML:ee,metaAttributes:n,bodyAttributes:r,htmlAttributes:i,initialState:null});Kn+=performance.now()-ie;let D=p?``:ve(re),O=o?E.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):E;D&&(O=O.replace(`<head>`,`<head>${D}`));let k=performance.now();Jn++,Jn===1&&(Yn=k);let A=await Qe?.(_,O,c)||O;Jn--,Jn===0&&(qn+=performance.now()-Yn);let ae=``;if(s&&Object.keys(s).length>0){let e=JSON.stringify(s).replace(/</g,`\\u003c`);ae=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Ut(_,g)}': ${e} };`}let j=d(o),M=A,P=`<script>window.__VITE_REACT_SSG_HASH__ = '${L}';${ae}${j}<\/script>`,F=performance.now();if(M=M.replace(`<script>${me}<\/script>`,``),vn){if(bn){let e=se(M,xn,bn,`zig-critters`);try{let t=await zn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await vn.extractCriticalCss(M,bn,{maxSize:mt});return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&h(`[zig-critters] Critical CSS for "${_}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)},{engine:`zig-critters`});t&&!M.includes(`data-zig-critters`)&&(M=M.replace(`</head>`,`${t}</head>`))}catch(e){h(`[zig-critters] Failed to inline CSS for "${_}": ${e instanceof Error?e.message:String(e)}`)}}M=M.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(yn){let e=se(M,xn,bn,`beasties`),t=await zn.getOrCreate(e,async()=>{let e=await An.add(()=>yn.process(M));return ce(M,e)},{engine:`beasties`});t&&!M.includes(t)&&(M=M.replace(`</head>`,`${t}</head>`)),M=M.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let oe=P+(a||``);oe&&(M=M.replace(`<head>`,`<head>${oe}`));let I=Ye===`none`?M:await Zt(M,Ye);Hn.push(Math.round(performance.now()-F));let le=performance.now();J?s&&Object.keys(s).length>0&&T&&await fr.enqueue(y(N,T),JSON.stringify(s)):(await fr.enqueue(v,I),s&&Object.keys(s).length>0&&T?(await fr.enqueue(b,JSON.stringify(s)),mr[x]={contentHash:S,mtime:w?Math.round(w):0,loaderDataFilePath:T,assetHash:e.routeAssetHash}):mr[x]={contentHash:S,mtime:w?Math.round(w):0,assetHash:e.routeAssetHash});let ue=performance.now()-le;Un.push(Math.round(ue)),Vn.push(Math.round(performance.now()-te)),or++,$n++,cr+=I.length}let vr=performance.now(),yr=[];await It({routes:q,canBypassClientBuild:H,getPlan:e=>At(Ln,e),isCached:e=>{if(J)return!1;try{return rt({routePath:e.path,cacheItem:bt[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:G})}catch{return!1}},onCacheHit:async e=>{let t=bt[e.normalizedKey]?.loaderDataFilePath,n=t?y(N,t):void 0,r=!lr.has(e.finalOutFile),i=!!n&&!ur.has(n);r&&lr.add(e.finalOutFile),i&&n&&ur.add(n);let a=performance.now();try{if(r){let t=!1;if(En)try{let n=await C.readFile(e.cachedHtmlFile,`utf-8`),r=n.match(/<script type="module"[^>]*src="([^"]+)"/)?.[1];r&&r!==En&&(await C.ensureDir(_(e.finalOutFile)),await C.writeFile(e.finalOutFile,n.split(r).join(En)),t=!0)}catch{t=!1}t||dr.push({source:e.cachedHtmlFile,destination:e.finalOutFile})}n&&t&&C.existsSync(e.cachedLoaderFile)&&(i&&dr.push({source:e.cachedLoaderFile,destination:n}),Mn[Ut(e.path,g)]=t,Nn++),sr++,er++,Xn+=performance.now()-a}catch(t){throw r&&lr.delete(e.finalOutFile),i&&n&&ur.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!on&&sn===`remix`&&In&&hr.set(e.path,In(e.fetchUrl))},ensurePool:gn,getPool:()=>dn,getWorkerCount:()=>it(dn)?.totalWorkers??0,onWorkerFailure:async(e,t,n,r)=>{if(!tn)throw Error(`Error on page: ${e}\n${String(n)}`);h(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),ar=!0;try{await hn()}catch{}dn=null,mn=!0;let i=await tn.render(e);return{path:e,appHTML:i.appHTML,metaAttributes:i.metaAttributes,bodyAttributes:i.bodyAttributes,htmlAttributes:i.htmlAttributes,styleTag:i.styleTag,timings:i.timings,routerContext:u(i.routerContext)}},onWorkerResult:async(e,t,n,r)=>{Zn+=Math.max(0,r-(n.timings?.totalMs??0)),Qn++,n.timings&&(Bn.push(Math.round(n.timings.totalMs)),rr(n.timings));let i={...en,routePath:e},a=performance.now(),o=await Ze?.(e,Tn,i)||Tn;Gn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await jn.add(()=>_r(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,rn,X,an,on,sn??`remix`,o))},scheduleMainThread:(e,t)=>{yr.push(kn.add(async()=>{try{let n={...en,routePath:e},r=performance.now(),i=await Ze?.(e,Tn,n)||Tn;Gn+=performance.now()-r;let a=performance.now(),{appHTML:o,bodyAttributes:s,htmlAttributes:c,metaAttributes:l,styleTag:d,routerContext:f,timings:p}=await tn.render(e);Bn.push(Math.round(performance.now()-a)),rr(p);let m=f?.loaderData;await _r(t,o,l,s,c,d,u(f),m||null,n,rn,X,an,on,sn??`remix`,i)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>jn.onIdle(),drainMainThread:async()=>{await Promise.all(yr),await kn.onIdle()},drainWrites:()=>fr.flush(),cleanupAfterFailure:async()=>{try{C.existsSync(N)&&await C.remove(N)}catch{}},destroyPool:hn,onNoRenderer:e=>{h(`[ssg] No SSR context available for ${e}, skipping`)}}),nr+=performance.now()-vr;let br=performance.now();for(let e of q){if(J)continue;let t=Ln.get(e);if(!t||!C.existsSync(t.cachedHtmlFile))continue;lr.has(t.finalOutFile)||dr.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=mr[t.normalizedKey];if(!n?.loaderDataFilePath||!C.existsSync(t.cachedLoaderFile))continue;let r=y(N,n.loaderDataFilePath);ur.has(r)||dr.push({source:t.cachedLoaderFile,destination:r})}await we(dr);let xr=Math.round(performance.now()-br);tr+=xr;let Sr=or+sr,Cr=(cr/1024/1024).toFixed(2),wr=0;if(!J){try{let e=JSON.stringify(mr)!==pr;e&&await Fe(K,mr),wr=await Jt(G,mr,q,e)}catch{}if(Rn)try{await ue(Rn,{maxAgeMs:720*60*60*1e3,maxEntries:5e3})}catch{}}let Tr=performance.now()-Mt,Er=it(fn),Dr={renderedCount:or,cachedCount:sr,renderedSize:cr,totalPages:Sr,prunedCount:wr,clientBuildMs:Math.round(S),serverBuildMs:Math.round(w),ssrImportMs:Math.round(re),workerPoolSetupMs:Math.round(ir),workerUsed:Er!==null&&!ar,workerCount:Er?.totalWorkers??0,fallbackMainThread:ar,ssrP50Ms:$(Bn,50),ssrP95Ms:$(Bn,95),ssrP99Ms:$(Bn,99),crittersP50Ms:$(Hn,50),crittersP95Ms:$(Hn,95),writeP50Ms:$(Un,50),writeP95Ms:$(Un,95),routerTimingCount:Q.count,routerMatchAvgMs:Q.count>0?Q.matchMs/Q.count:0,routerResolveAvgMs:Q.count>0?Q.resolveMs/Q.count:0,routerLoadersAvgMs:Q.count>0?Q.loadersMs/Q.count:0,routerRenderAvgMs:Q.count>0?Q.renderMs/Q.count:0,routerHelmetAvgMs:Q.count>0?Q.helmetMs/Q.count:0,routerTotalAvgMs:Q.count>0?Q.totalMs/Q.count:0,pagesPerSecond:Sr>0&&Tr>0?Math.round(Sr/(Tr/1e3)*10)/10:0,pipeline:{renderedPageCount:$n,cachedPageCount:er,clientBuildMs:Math.round(S),serverBuildMs:Math.round(w),ssrImportMs:Math.round(re),workerPoolSetupMs:Math.round(ir),routePreparationMs:Math.round(un),workerTransportMs:Math.round(Zn),workerRoundTripMs:Math.round(Zn),workerTransportAvgMs:Qn>0?Math.round(Zn/Qn):0,finalizeP50Ms:$(Vn,50),finalizeP95Ms:$(Vn,95),assetCollectionMs:Math.round(Wn),beforeHookMs:Math.round(Gn),htmlAssemblyMs:Math.round(Kn),onPageRenderedHookMs:Math.round(qn),criticalCssP50Ms:$(Hn,50),criticalCssP95Ms:$(Hn,95),cacheWriteMs:Math.round(0+fr.writeTimeMs()),cachedOutputMs:Math.round(Xn),renderQueueDrainMs:Math.round(nr),renderPipelineSettleMs:Math.round(nr),outputLinkMs:Math.round(tr)}};E?.({name:`Render pages`,duration:Tr,success:!0,details:`${Sr} pages (${or} new, ${sr} cached, ${Cr} MB)`,metrics:Dr}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(Tr),success:!0,details:`${Sr} pages / ${or} new / ${sr} cached / ${Cr} MB`,metrics:Dr})}`);let Or=performance.now(),kr=Rt(Mn);if(await Pe(y(N,`static-loader-data-manifest-${L}.json`),kr),await Tt(y(P,`ssr`),5,J?`turbo-ssr`:te(R)),yt(),vn?.dispose)try{await vn.dispose()}catch{}let Ar=We.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;Ar&&!Ar.disabled&&Ar.generateSW&&await Ar.generateSW();let jr=Math.round(performance.now()-x);E?.({name:`Static loader data`,duration:performance.now()-Or,success:!0,details:`${Nn} loader data files`,metrics:{loaderDataFileCount:Nn}}),await T?.(m),await Yt(N);let Mr=Me(N),Nr=await Be(N,jr,P,{outputFiles:Mr,manifestPath:y(fe,`dist`,...Lt,`manifest.json`)});Ve(N,Nr),E?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(jr/1e3).toFixed(1)}s, JS: ${(Nr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(Nr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:jr,totalPages:Nr.pages.length,jsSize:Nr.totalJSBundleSize,cssSize:Nr.totalCSSBundleSize}}),await Ae(y(P,`ssg-output.json`),B,N,je(q,mr,$e).concat(`static-loader-data-manifest-${L}.json`).concat(`page-source.json`),Nt.clientFiles,Mr)}async function Jt(e,t,n=[],r=!1){try{if(!C.existsSync(e))return 0;let i=y(e,`.prune-state`);if(!r)try{let e=await C.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await C.readdir(e),o=new Set,s=new Set([...Object.keys(t),...n]);for(let e of s){let t=O.createHash(`md5`).update(e).digest(`hex`);o.add(`${t}.html`),o.add(`${t}.json`)}let c=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!o.has(t)&&(await C.remove(y(e,t)),c++);return await C.writeFile(i,String(Date.now()),`utf8`),c}catch{return 0}}async function Yt(e){try{Lt.length>0?await C.remove(y(e,...Lt)):await Promise.all([C.remove(y(e,`manifest.json`)),C.remove(y(e,`ssr-manifest.json`))])}catch{}}function Xt(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Zt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return m(`Error formatting html: ${t?.message}`),e}return e}function Qt(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function $t({template:e,ssrEntry:t,onBeforePageRender:i,entry:a,rootContainerId:s,onPageRendered:c}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d)=>{try{let f=u.originalUrl??u.url??`/`,p=await l.ssrLoadModule(t),m=p.createRoot,h=await m(!1,f),ee=o(h,p),{app:g,base:te}=h,[_=`/`,v=``]=f.split(`?`),y=new URLSearchParams(v);if(!g&&y.has(`_data`))return ee.handleLoader(u,d);let b=await l.transformIndexHtml(f,e),x=await i?.(f,b,h)||b,{appHTML:S,bodyAttributes:C,htmlAttributes:w,metaAttributes:ne,styleTag:re}=await ee.render(n(_,te));ne.push(re);let T=await Promise.all([t,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),ie=new Set,D=new Set,O=async e=>{if(!e?.ssrTransformResult||D.has(e))return;D.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))ie.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await O(t)}};await Promise.all(T.map(async e=>O(e)));let k=[...ie].map(e=>V(r(l.config.base,e)));ne.push(...k);let A=await ge({rootContainerId:s,appHTML:S,indexHTML:x,metaAttributes:ne,bodyAttributes:C,htmlAttributes:w,initialState:null}),ae=await c?.(f,A,h)||A;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),E(u,d,ae,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));l.ssrFixStacktrace(t),m(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return l.middlewares.use(Qt),()=>{l.middlewares.use(u)}}}}async function en(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),o,s,c,l;if(r){o=e.root||a,s={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=s,n=s.entry||await _e(o,t);c=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:y(o,n),l=await A.readFile(y(o,t),`utf-8`)}else{let t=await ie(e,`serve`,n,n);o=t.root||a,s={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=s,u=s.entry||await _e(o,r),[d,f]=await Promise.all([Se(t,u),A.readFile(y(o,r),`utf-8`)]);c=d,l=f}let{onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:p=!1}=s;if(process.env.__DEV_MODE_SSR=`true`,p){let{jsdomGlobal:e}=await import(`./jsdomGlobal-FnVQDCiZ.mjs`);e()}return await re({...e,plugins:[...e.plugins??[],$t({template:l,ssrEntry:c,onBeforePageRender:u,onPageRendered:d,entry:s.entry||`src/main.ts`,rootContainerId:f})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function tn(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await en(t,e);return await r.listen(),X(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){m(`failed to start server: ${e?.message??e}`),process.exit(1)}}function X(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${p.bold(`${e}ms`)}`}n(`\n ${p.cyan(` VITE-REACT-SSG v${be} `)}`,{clear:!e.config.logger.hasWarned}),n(`${p.cyan(`\n VITE v${D}`)+p.dim(r)}\n`),n(p.green(` dev server running at:`)),e.printUrls()}var nn=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};export{nn as ShellStitcher,qt as build,en as createServer,tn as dev};
@@ -0,0 +1 @@
1
+ import{createRequire as e}from"node:module";var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=e(import.meta.url);export{r as n,n as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-C-zNXMYg.mjs";import{Fragment as t,jsx as n}from"react/jsx-runtime";import{Fragment as r,createElement as i}from"react";import{once as a}from"node:events";import{Readable as o}from"node:stream";import*as s from"react-dom/server";function c(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function l(e){return e[0]===`/`?e.slice(1):e}function u(e,t){if(e===t)return`/`;let n=d(t);return e.startsWith(n)?e.slice(n.length-1):e}function d(e){return e[e.length-1]===`/`?e:`${e}/`}function f(e){return e[0]===`/`?e:`/${e}`}function p(e,t=``){return e.map((e,n)=>{let r=e.id||(t?`${t}-${n}`:String(n));return{...e,id:r,children:e.children?p(e.children,r):e.children}})}function m(e){if(!e?.RouteRenderer||!e.matchRouteBranchWithParams||!e.resolveRouteBranch)throw Error(`The SSR entry must expose RouteRenderer, matchRouteBranchWithParams, and resolveRouteBranch`);return{RouteRenderer:e.RouteRenderer,matchRouteBranchWithParams:e.matchRouteBranchWithParams,resolveRouteBranch:e.resolveRouteBranch}}function h(e,t){if(e===!1||e==null)throw console.error(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function g(e){let t=new Headers;for(let[n,r]of Object.entries(e))if(r)if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r);return t}function _(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;h(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:g(e.headers)};return new Request(n.href,r)}async function v(e,t){t.statusCode=e.status,t.statusMessage=e.statusText;for(let[n,r]of e.headers)t.setHeader(n,r);if(e.body){let n=e.body,r=o.from(n);r.pipe(t),await a(r,`end`)}else t.end()}function y(e){let t=new URL(e.url);t.searchParams.delete(`_data`);let n={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return n.body&&(n.duplex=`half`),new Request(t.href,n)}const b=x();async function x(){try{let e=(await import(`react-dom/static`)).prerenderToNodeStream;return typeof e==`function`?e:void 0}catch{return}}async function S(e){let t=await b;if(!t)return s.renderToString(i(r,null,e));let{prelude:n}=await t(i(r,null,e)),a=new TextDecoder,o=``;for await(let e of n)typeof e==`string`?(o+=a.decode(),o+=e):o+=a.decode(new Uint8Array(e),{stream:!0});return o+a.decode()}function C(e,t,n){let{helmet:r}=t,i=r.htmlAttributes.toString(),a=r.bodyAttributes.toString(),o=r.title.toString();o.split(`>`)[1]===`</title`&&(o=``);let s=[o,r.meta.toString(),r.link.toString(),r.script.toString()],c=n?.toString?.(e)??``;return{htmlAttributes:i,bodyAttributes:a,metaAttributes:s.filter(Boolean),styleTag:c}}let w=null;function T(){if(w)return w;let r=globalThis.__BOLTDOCS_HELMET_PROVIDER__;if(r)w=r.HelmetProvider||r.default?.HelmetProvider||r;else try{let{createRequire:t}=e(`node:module`),n=t(import.meta.url)(`react-helmet-async`);w=n.HelmetProvider||n.default?.HelmetProvider||n.default||n}catch{w=({children:e})=>n(t,{children:e})}return typeof w!=`function`&&(w=({children:e})=>n(t,{children:e})),w}var E=class{constructor(e,t){this.matchedBranches=new Map,this.resolvedBranches=new Map,this.context=e,this.entryMod=t,this.routerApi=m(t),this.base=e.base,this.getStyleCollector=e.getStyleCollector;let n=e.app;this.coreRoutes=(n?.routes||(Array.isArray(n)?n:e.routes))??[],this.RouteRenderer=this.routerApi.RouteRenderer,this.matchRouteBranchWithParams=this.routerApi.matchRouteBranchWithParams,this.resolveRouteBranch=this.routerApi.resolveRouteBranch}getMatchedBranch(e){let t=`${this.base}\0${e}`,n=this.matchedBranches.get(t);if(n)return n;let r=this.matchRouteBranchWithParams(this.coreRoutes,e,this.base);return this.matchedBranches.set(t,r),r}async getResolvedBranch(e,t){let n=this.resolvedBranches.get(e);if(n)return n;let r=this.resolveRouteBranch(t).catch(t=>{throw this.resolvedBranches.delete(e),t});return this.resolvedBranches.set(e,r),r}async render(e){let t=performance.now(),r=f(e),i=`http://localhost${this.base===`/`||r.startsWith(`${f(this.base).replace(/\/$/,``)}/`)||r===f(this.base).replace(/\/$/,``)?r:`${f(this.base).replace(/\/$/,``)}${r}`}`,a=new Request(i),o=this.getStyleCollector?await this.getStyleCollector():null,s={},c=new URL(a.url).pathname,l=performance.now(),u=this.getMatchedBranch(c),d=performance.now()-l,p=u.map(e=>e.route),m={},h=!1,g=[],_=0,v=0;if(p.length>0){let e=performance.now();g=await this.getResolvedBranch(`${this.base}\0${c}`,p),_=performance.now()-e;let t=performance.now(),n=[];for(let[e,t]of u.entries()){let r=g[e];if(!(!r||typeof r.loader!=`function`))try{let e=await r.loader({request:a,params:{...t.params}});e&&typeof e==`object`&&`data`in e?(h=!0,n.push(e.data)):e&&typeof e==`object`&&(h=!0,n.push(e))}catch{}}m=n.reduce((e,t)=>({...e,...t}),{}),v=performance.now()-t}let y=T(),b=y;b&&typeof b==`function`&&(b.canUseDOM=!1);let x=this.RouteRenderer,w=performance.now(),E=n(y,{context:s,children:n(x,{routes:this.coreRoutes,pathname:c,loaderData:m,hasLoaderData:h,resolvedBranch:g,basename:this.base})});o&&(E=o.collect(E));let D=``;try{D=await S(E)}catch(e){throw console.error(`[SSG Render Error] routePath="${c}":`,e?.stack||e),e}let O=performance.now()-w,k=performance.now(),{htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N}=C(D,s,o),P=performance.now()-k;return{appHTML:D,htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N,timings:{matchMs:d,resolveMs:_,loadersMs:v,renderMs:O,helmetMs:P,totalMs:performance.now()-t},routerContext:{loaderData:{root:m}}}}async handleLoader(e,t){let{routes:n,base:r}=this.context,{matchRouteBranchWithParams:i,resolveRouteBranch:a}=this.routerApi,o=_(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)||``),l=i(p([...n]),s.pathname,r);if(l.length===0){t.statusCode=404,t.end(`Route not found: ${c}`);return}let u=l.find((e,t)=>(e.route.id||String(t))===c);if(!u){t.statusCode=404,t.end(`Route not found: ${c}`);return}let d=((await a(l.map(e=>e.route)))[l.indexOf(u)]||u.route).loader;if(!d){t.statusCode=200,t.end(`There is no loader for the route: ${c}`);return}await v(await D({loader:d,params:u.params,request:o,routeId:c}),t)}};async function D({loader:e,params:t,request:n,routeId:r}){let i=await e({request:y(k(n)),params:t});if(i===void 0)throw Error(`You defined a loader for route "${r}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`);return O(i)?i:new Response(JSON.stringify(i),{status:200,headers:{"Content-Type":`application/json`}})}function O(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function k(e){let t=new URL(e.url),n=t.searchParams.getAll(`index`);t.searchParams.delete(`index`);let r=[];for(let e of n)e&&r.push(e);for(let e of r)t.searchParams.append(`index`,e);let i={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return i.body&&(i.duplex=`half`),new Request(t.href,i)}function A(e,t){return new E(e,t)}export{f as a,u as i,c as n,d as o,l as r,A as t};
@@ -1 +1 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`);let t=require(`react/jsx-runtime`),n=require(`react`),r=require(`node:events`),i=require(`node:stream`),a=require(`react-dom/server`);a=e.t(a);function o(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function s(e){return e[0]===`/`?e.slice(1):e}function c(e,t){if(e===t)return`/`;let n=l(t);return e.startsWith(n)?e.slice(n.length-1):e}function l(e){return e[e.length-1]===`/`?e:`${e}/`}function u(e){return e[0]===`/`?e:`/${e}`}function d(e,t=``){return e.map((e,n)=>{let r=e.id||(t?`${t}-${n}`:String(n));return{...e,id:r,children:e.children?d(e.children,r):e.children}})}function f(e){if(!e?.RouteRenderer||!e.matchRouteBranchWithParams||!e.resolveRouteBranch)throw Error(`The SSR entry must expose RouteRenderer, matchRouteBranchWithParams, and resolveRouteBranch`);return{RouteRenderer:e.RouteRenderer,matchRouteBranchWithParams:e.matchRouteBranchWithParams,resolveRouteBranch:e.resolveRouteBranch}}function p(e,t){if(e===!1||e==null)throw console.error(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function m(e){let t=new Headers;for(let[n,r]of Object.entries(e))if(r)if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r);return t}function h(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;p(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:m(e.headers)};return new Request(n.href,r)}async function g(e,t){t.statusCode=e.status,t.statusMessage=e.statusText;for(let[n,r]of e.headers)t.setHeader(n,r);if(e.body){let n=e.body,a=i.Readable.from(n);a.pipe(t),await(0,r.once)(a,`end`)}else t.end()}function _(e){let t=new URL(e.url);t.searchParams.delete(`_data`);let n={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return n.body&&(n.duplex=`half`),new Request(t.href,n)}const v=y();async function y(){try{let e=(await import(`react-dom/static`)).prerenderToNodeStream;return typeof e==`function`?e:void 0}catch{return}}async function b(e){let t=await v;if(!t)return a.renderToString((0,n.createElement)(n.Fragment,null,e));let{prelude:r}=await t((0,n.createElement)(n.Fragment,null,e)),i=new TextDecoder,o=``;for await(let e of r)typeof e==`string`?(o+=i.decode(),o+=e):o+=i.decode(new Uint8Array(e),{stream:!0});return o+i.decode()}function x(e,t,n){let{helmet:r}=t,i=r.htmlAttributes.toString(),a=r.bodyAttributes.toString(),o=r.title.toString();o.split(`>`)[1]===`</title`&&(o=``);let s=[o,r.meta.toString(),r.link.toString(),r.script.toString()],c=n?.toString?.(e)??``;return{htmlAttributes:i,bodyAttributes:a,metaAttributes:s.filter(Boolean),styleTag:c}}let S=null;function C(){if(S)return S;let e=globalThis.__BOLTDOCS_HELMET_PROVIDER__;if(e)S=e.HelmetProvider||e.default?.HelmetProvider||e;else try{let{createRequire:e}=require(`node:module`),t=e(require(`url`).pathToFileURL(__filename).href)(`react-helmet-async`);S=t.HelmetProvider||t.default?.HelmetProvider||t.default||t}catch{S=({children:e})=>(0,t.jsx)(t.Fragment,{children:e})}return typeof S!=`function`&&(S=({children:e})=>(0,t.jsx)(t.Fragment,{children:e})),S}var w=class{constructor(e,t){this.matchedBranches=new Map,this.resolvedBranches=new Map,this.context=e,this.entryMod=t,this.routerApi=f(t),this.base=e.base,this.getStyleCollector=e.getStyleCollector;let n=e.app;this.coreRoutes=(n?.routes||(Array.isArray(n)?n:e.routes))??[],this.RouteRenderer=this.routerApi.RouteRenderer,this.matchRouteBranchWithParams=this.routerApi.matchRouteBranchWithParams,this.resolveRouteBranch=this.routerApi.resolveRouteBranch}getMatchedBranch(e){let t=`${this.base}\0${e}`,n=this.matchedBranches.get(t);if(n)return n;let r=this.matchRouteBranchWithParams(this.coreRoutes,e,this.base);return this.matchedBranches.set(t,r),r}async getResolvedBranch(e,t){let n=this.resolvedBranches.get(e);if(n)return n;let r=this.resolveRouteBranch(t).catch(t=>{throw this.resolvedBranches.delete(e),t});return this.resolvedBranches.set(e,r),r}async render(e){let n=performance.now(),r=u(e),i=`http://localhost${this.base===`/`||r.startsWith(`${u(this.base).replace(/\/$/,``)}/`)||r===u(this.base).replace(/\/$/,``)?r:`${u(this.base).replace(/\/$/,``)}${r}`}`,a=new Request(i),o=this.getStyleCollector?await this.getStyleCollector():null,s={},c=new URL(a.url).pathname,l=performance.now(),d=this.getMatchedBranch(c),f=performance.now()-l,p=d.map(e=>e.route),m={},h=!1,g=[],_=0,v=0;if(p.length>0){let e=performance.now();g=await this.getResolvedBranch(`${this.base}\0${c}`,p),_=performance.now()-e;let t=performance.now(),n=[];for(let[e,t]of d.entries()){let r=g[e];if(!(!r||typeof r.loader!=`function`))try{let e=await r.loader({request:a,params:{...t.params}});e&&typeof e==`object`&&`data`in e?(h=!0,n.push(e.data)):e&&typeof e==`object`&&(h=!0,n.push(e))}catch{}}m=n.reduce((e,t)=>({...e,...t}),{}),v=performance.now()-t}let y=C(),S=y;S&&typeof S==`function`&&(S.canUseDOM=!1);let w=this.RouteRenderer,T=performance.now(),E=(0,t.jsx)(y,{context:s,children:(0,t.jsx)(w,{routes:this.coreRoutes,pathname:c,loaderData:m,hasLoaderData:h,resolvedBranch:g,basename:this.base})});o&&(E=o.collect(E));let D=``;try{D=await b(E)}catch(e){throw console.error(`[SSG Render Error] routePath="${c}":`,e?.stack||e),e}let O=performance.now()-T,k=performance.now(),{htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N}=x(D,s,o),P=performance.now()-k;return{appHTML:D,htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N,timings:{matchMs:f,resolveMs:_,loadersMs:v,renderMs:O,helmetMs:P,totalMs:performance.now()-n},routerContext:{loaderData:{root:m}}}}async handleLoader(e,t){let{routes:n,base:r}=this.context,{matchRouteBranchWithParams:i,resolveRouteBranch:a}=this.routerApi,o=h(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)||``),l=i(d([...n]),s.pathname,r);if(l.length===0){t.statusCode=404,t.end(`Route not found: ${c}`);return}let u=l.find((e,t)=>(e.route.id||String(t))===c);if(!u){t.statusCode=404,t.end(`Route not found: ${c}`);return}let f=((await a(l.map(e=>e.route)))[l.indexOf(u)]||u.route).loader;if(!f){t.statusCode=200,t.end(`There is no loader for the route: ${c}`);return}await g(await T({loader:f,params:u.params,request:o,routeId:c}),t)}};async function T({loader:e,params:t,request:n,routeId:r}){let i=await e({request:_(D(n)),params:t});if(i===void 0)throw Error(`You defined a loader for route "${r}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`);return E(i)?i:new Response(JSON.stringify(i),{status:200,headers:{"Content-Type":`application/json`}})}function E(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function D(e){let t=new URL(e.url),n=t.searchParams.getAll(`index`);t.searchParams.delete(`index`);let r=[];for(let e of n)e&&r.push(e);for(let e of r)t.searchParams.append(`index`,e);let i={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return i.body&&(i.duplex=`half`),new Request(t.href,i)}function O(e,t){return new w(e,t)}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return O}});
1
+ const e=require(`./chunk-D-qHiVGv.cjs`);let t=require(`react/jsx-runtime`),n=require(`react`),r=require(`node:events`),i=require(`node:stream`),a=require(`react-dom/server`);a=e.n(a);function o(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function s(e){return e[0]===`/`?e.slice(1):e}function c(e,t){if(e===t)return`/`;let n=l(t);return e.startsWith(n)?e.slice(n.length-1):e}function l(e){return e[e.length-1]===`/`?e:`${e}/`}function u(e){return e[0]===`/`?e:`/${e}`}function d(e,t=``){return e.map((e,n)=>{let r=e.id||(t?`${t}-${n}`:String(n));return{...e,id:r,children:e.children?d(e.children,r):e.children}})}function f(e){if(!e?.RouteRenderer||!e.matchRouteBranchWithParams||!e.resolveRouteBranch)throw Error(`The SSR entry must expose RouteRenderer, matchRouteBranchWithParams, and resolveRouteBranch`);return{RouteRenderer:e.RouteRenderer,matchRouteBranchWithParams:e.matchRouteBranchWithParams,resolveRouteBranch:e.resolveRouteBranch}}function p(e,t){if(e===!1||e==null)throw console.error(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function m(e){let t=new Headers;for(let[n,r]of Object.entries(e))if(r)if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r);return t}function h(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;p(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:m(e.headers)};return new Request(n.href,r)}async function g(e,t){t.statusCode=e.status,t.statusMessage=e.statusText;for(let[n,r]of e.headers)t.setHeader(n,r);if(e.body){let n=e.body,a=i.Readable.from(n);a.pipe(t),await(0,r.once)(a,`end`)}else t.end()}function _(e){let t=new URL(e.url);t.searchParams.delete(`_data`);let n={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return n.body&&(n.duplex=`half`),new Request(t.href,n)}const v=y();async function y(){try{let e=(await import(`react-dom/static`)).prerenderToNodeStream;return typeof e==`function`?e:void 0}catch{return}}async function b(e){let t=await v;if(!t)return a.renderToString((0,n.createElement)(n.Fragment,null,e));let{prelude:r}=await t((0,n.createElement)(n.Fragment,null,e)),i=new TextDecoder,o=``;for await(let e of r)typeof e==`string`?(o+=i.decode(),o+=e):o+=i.decode(new Uint8Array(e),{stream:!0});return o+i.decode()}function x(e,t,n){let{helmet:r}=t,i=r.htmlAttributes.toString(),a=r.bodyAttributes.toString(),o=r.title.toString();o.split(`>`)[1]===`</title`&&(o=``);let s=[o,r.meta.toString(),r.link.toString(),r.script.toString()],c=n?.toString?.(e)??``;return{htmlAttributes:i,bodyAttributes:a,metaAttributes:s.filter(Boolean),styleTag:c}}let S=null;function C(){if(S)return S;let e=globalThis.__BOLTDOCS_HELMET_PROVIDER__;if(e)S=e.HelmetProvider||e.default?.HelmetProvider||e;else try{let{createRequire:e}=require(`node:module`),t=e(require(`url`).pathToFileURL(__filename).href)(`react-helmet-async`);S=t.HelmetProvider||t.default?.HelmetProvider||t.default||t}catch{S=({children:e})=>(0,t.jsx)(t.Fragment,{children:e})}return typeof S!=`function`&&(S=({children:e})=>(0,t.jsx)(t.Fragment,{children:e})),S}var w=class{constructor(e,t){this.matchedBranches=new Map,this.resolvedBranches=new Map,this.context=e,this.entryMod=t,this.routerApi=f(t),this.base=e.base,this.getStyleCollector=e.getStyleCollector;let n=e.app;this.coreRoutes=(n?.routes||(Array.isArray(n)?n:e.routes))??[],this.RouteRenderer=this.routerApi.RouteRenderer,this.matchRouteBranchWithParams=this.routerApi.matchRouteBranchWithParams,this.resolveRouteBranch=this.routerApi.resolveRouteBranch}getMatchedBranch(e){let t=`${this.base}\0${e}`,n=this.matchedBranches.get(t);if(n)return n;let r=this.matchRouteBranchWithParams(this.coreRoutes,e,this.base);return this.matchedBranches.set(t,r),r}async getResolvedBranch(e,t){let n=this.resolvedBranches.get(e);if(n)return n;let r=this.resolveRouteBranch(t).catch(t=>{throw this.resolvedBranches.delete(e),t});return this.resolvedBranches.set(e,r),r}async render(e){let n=performance.now(),r=u(e),i=`http://localhost${this.base===`/`||r.startsWith(`${u(this.base).replace(/\/$/,``)}/`)||r===u(this.base).replace(/\/$/,``)?r:`${u(this.base).replace(/\/$/,``)}${r}`}`,a=new Request(i),o=this.getStyleCollector?await this.getStyleCollector():null,s={},c=new URL(a.url).pathname,l=performance.now(),d=this.getMatchedBranch(c),f=performance.now()-l,p=d.map(e=>e.route),m={},h=!1,g=[],_=0,v=0;if(p.length>0){let e=performance.now();g=await this.getResolvedBranch(`${this.base}\0${c}`,p),_=performance.now()-e;let t=performance.now(),n=[];for(let[e,t]of d.entries()){let r=g[e];if(!(!r||typeof r.loader!=`function`))try{let e=await r.loader({request:a,params:{...t.params}});e&&typeof e==`object`&&`data`in e?(h=!0,n.push(e.data)):e&&typeof e==`object`&&(h=!0,n.push(e))}catch{}}m=n.reduce((e,t)=>({...e,...t}),{}),v=performance.now()-t}let y=C(),S=y;S&&typeof S==`function`&&(S.canUseDOM=!1);let w=this.RouteRenderer,T=performance.now(),E=(0,t.jsx)(y,{context:s,children:(0,t.jsx)(w,{routes:this.coreRoutes,pathname:c,loaderData:m,hasLoaderData:h,resolvedBranch:g,basename:this.base})});o&&(E=o.collect(E));let D=``;try{D=await b(E)}catch(e){throw console.error(`[SSG Render Error] routePath="${c}":`,e?.stack||e),e}let O=performance.now()-T,k=performance.now(),{htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N}=x(D,s,o),P=performance.now()-k;return{appHTML:D,htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N,timings:{matchMs:f,resolveMs:_,loadersMs:v,renderMs:O,helmetMs:P,totalMs:performance.now()-n},routerContext:{loaderData:{root:m}}}}async handleLoader(e,t){let{routes:n,base:r}=this.context,{matchRouteBranchWithParams:i,resolveRouteBranch:a}=this.routerApi,o=h(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)||``),l=i(d([...n]),s.pathname,r);if(l.length===0){t.statusCode=404,t.end(`Route not found: ${c}`);return}let u=l.find((e,t)=>(e.route.id||String(t))===c);if(!u){t.statusCode=404,t.end(`Route not found: ${c}`);return}let f=((await a(l.map(e=>e.route)))[l.indexOf(u)]||u.route).loader;if(!f){t.statusCode=200,t.end(`There is no loader for the route: ${c}`);return}await g(await T({loader:f,params:u.params,request:o,routeId:c}),t)}};async function T({loader:e,params:t,request:n,routeId:r}){let i=await e({request:_(D(n)),params:t});if(i===void 0)throw Error(`You defined a loader for route "${r}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`);return E(i)?i:new Response(JSON.stringify(i),{status:200,headers:{"Content-Type":`application/json`}})}function E(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function D(e){let t=new URL(e.url),n=t.searchParams.getAll(`index`);t.searchParams.delete(`index`);let r=[];for(let e of n)e&&r.push(e);for(let e of r)t.searchParams.append(`index`,e);let i={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return i.body&&(i.duplex=`half`),new Request(t.href,i)}function O(e,t){return new w(e,t)}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return O}});
@@ -0,0 +1 @@
1
+ const e=require(`./chunk-D-qHiVGv.cjs`),t=require(`./ssg-worker-payload-D6kDQQtE.cjs`);let n=require(`node:os`),r=require(`node:path`),i=require(`piscina`);i=e.n(i,1);let a=require(`node:url`);function o({cpuCount:e,totalMemoryGB:t,freeMemoryGB:n,requestedWorkers:r,envWorkers:i}){let a=Math.max(1,e||4),o=Math.max(1,a-1),s=t>=4?Math.min(o,12):4,c=Math.max(2,Math.floor(t*.35/.256)),l=Math.max(2,Math.floor(n/.3)),u=Math.min(c,l),d=Number.parseInt(i||``,10),f=Math.max(2,Math.min(a-1,6));return Math.max(2,Math.min(r??(Number.isFinite(d)&&d>0?d:f),o,u,s))}const s=(0,r.dirname)((0,a.fileURLToPath)(require(`url`).pathToFileURL(__filename).href));function c(e){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`}var l=class{constructor(e){this.totalRendered=0,this.totalErrors=0,this.destroyPromise=null;let{ssrEntryPath:t,format:a=`esm`}=e,c=(0,n.freemem)()/1024/1024/1024,l=(0,n.totalmem)()/1024/1024/1024;this.totalWorkers=o({cpuCount:(0,n.cpus)().length||4,totalMemoryGB:l,freeMemoryGB:c,requestedWorkers:e.numWorkers,envWorkers:process.env.BOLTDOCS_SSG_WORKERS});let u=(0,r.join)(s,`ssg-worker.mjs`);this.startTime=performance.now(),this.piscina=new i.default({filename:u,workerData:{ssrEntryPath:t,format:a},maxThreads:this.totalWorkers,minThreads:0,idleTimeout:1e4}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[ssg-worker/piscina] Piscina pool initialized with ${this.totalWorkers} workers (RAM: ${l.toFixed(1)} GB total, ${c.toFixed(1)} GB free)`)}async ready(){return Promise.resolve()}decodeResult(e,n){if(!e||typeof e!=`object`||e.path!==n||(e.routerContext=e.routerContext??null,e._appHTMLBuffer&&(e.appHTML=t.r(e._appHTMLBuffer),delete e._appHTMLBuffer),e._routerContextBuffer||typeof e.appHTML!=`string`||!Array.isArray(e.metaAttributes)||typeof e.bodyAttributes!=`string`||typeof e.htmlAttributes!=`string`||e.routerContext!==null&&(typeof e.routerContext!=`object`||Array.isArray(e.routerContext))))throw Error(`SSG worker returned an invalid render payload`);return e}async render(e){try{let t=this.decodeResult(await this.piscina.run({type:`render`,path:e}),e);return this.totalRendered++,t}catch(e){throw this.totalErrors++,e}}async renderBatch(e){if(e.length===0)return[];try{let t=await this.piscina.run({type:`render-batch`,paths:[...e]});if(!Array.isArray(t)||t.length!==e.length)throw Error(`SSG worker returned an invalid batch payload`);let n=t.map((t,n)=>{if(c(t))return t;if(!t||typeof t!=`object`)throw Error(`SSG worker returned an invalid batch item`);return this.decodeResult(t,e[n])});return this.totalRendered+=n.filter(e=>!c(e)).length,this.totalErrors+=n.filter(c).length,n}catch(e){throw this.totalErrors++,e}}async destroy(){if(this.destroyPromise)return this.destroyPromise;this.destroyPromise=this.piscina.destroy(),await this.destroyPromise}poolMetrics(){return{totalWorkers:this.totalWorkers,readyCount:this.totalWorkers,busyCount:this.piscina.completed,pagesPerWorker:[],initTimesMs:[],totalRendered:this.totalRendered,totalErrors:this.totalErrors,allReadyMs:Math.round(performance.now()-this.startTime),failedCount:0}}};exports.SsgWorkerPool=l;
@@ -0,0 +1 @@
1
+ import{r as e}from"./ssg-worker-payload-CWmidVcz.mjs";import{cpus as t,freemem as n,totalmem as r}from"node:os";import{dirname as i,join as a}from"node:path";import o from"piscina";import{fileURLToPath as s}from"node:url";function c({cpuCount:e,totalMemoryGB:t,freeMemoryGB:n,requestedWorkers:r,envWorkers:i}){let a=Math.max(1,e||4),o=Math.max(1,a-1),s=t>=4?Math.min(o,12):4,c=Math.max(2,Math.floor(t*.35/.256)),l=Math.max(2,Math.floor(n/.3)),u=Math.min(c,l),d=Number.parseInt(i||``,10),f=Math.max(2,Math.min(a-1,6));return Math.max(2,Math.min(r??(Number.isFinite(d)&&d>0?d:f),o,u,s))}const l=i(s(import.meta.url));function u(e){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`}var d=class{constructor(e){this.totalRendered=0,this.totalErrors=0,this.destroyPromise=null;let{ssrEntryPath:i,format:s=`esm`}=e,u=n()/1024/1024/1024,d=r()/1024/1024/1024;this.totalWorkers=c({cpuCount:t().length||4,totalMemoryGB:d,freeMemoryGB:u,requestedWorkers:e.numWorkers,envWorkers:process.env.BOLTDOCS_SSG_WORKERS});let f=a(l,`ssg-worker.mjs`);this.startTime=performance.now(),this.piscina=new o({filename:f,workerData:{ssrEntryPath:i,format:s},maxThreads:this.totalWorkers,minThreads:0,idleTimeout:1e4}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[ssg-worker/piscina] Piscina pool initialized with ${this.totalWorkers} workers (RAM: ${d.toFixed(1)} GB total, ${u.toFixed(1)} GB free)`)}async ready(){return Promise.resolve()}decodeResult(t,n){if(!t||typeof t!=`object`||t.path!==n||(t.routerContext=t.routerContext??null,t._appHTMLBuffer&&(t.appHTML=e(t._appHTMLBuffer),delete t._appHTMLBuffer),t._routerContextBuffer||typeof t.appHTML!=`string`||!Array.isArray(t.metaAttributes)||typeof t.bodyAttributes!=`string`||typeof t.htmlAttributes!=`string`||t.routerContext!==null&&(typeof t.routerContext!=`object`||Array.isArray(t.routerContext))))throw Error(`SSG worker returned an invalid render payload`);return t}async render(e){try{let t=this.decodeResult(await this.piscina.run({type:`render`,path:e}),e);return this.totalRendered++,t}catch(e){throw this.totalErrors++,e}}async renderBatch(e){if(e.length===0)return[];try{let t=await this.piscina.run({type:`render-batch`,paths:[...e]});if(!Array.isArray(t)||t.length!==e.length)throw Error(`SSG worker returned an invalid batch payload`);let n=t.map((t,n)=>{if(u(t))return t;if(!t||typeof t!=`object`)throw Error(`SSG worker returned an invalid batch item`);return this.decodeResult(t,e[n])});return this.totalRendered+=n.filter(e=>!u(e)).length,this.totalErrors+=n.filter(u).length,n}catch(e){throw this.totalErrors++,e}}async destroy(){if(this.destroyPromise)return this.destroyPromise;this.destroyPromise=this.piscina.destroy(),await this.destroyPromise}poolMetrics(){return{totalWorkers:this.totalWorkers,readyCount:this.totalWorkers,busyCount:this.piscina.completed,pagesPerWorker:[],initTimesMs:[],totalRendered:this.totalRendered,totalErrors:this.totalErrors,allReadyMs:Math.round(performance.now()-this.startTime),failedCount:0}}};export{d as SsgWorkerPool};
@@ -1 +1 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./router-adapter-DtnukOfG.cjs`),n=require(`./ssg-worker-payload-B_9N9o5p.cjs`);let r=require(`node:module`),i=require(`piscina`);i=e.t(i,1);let a=require(`node:worker_threads`),o=null;async function s(e,s=!0){if(!e)throw Error(`Invalid render job payload`);if(!o){let{ssrEntryPath:e,format:n}=a.workerData,i=n===`esm`?await import(e):(0,r.createRequire)(require(`url`).pathToFileURL(__filename).href)(e);o=t.t(await i.createRoot(!1),i)}let{appHTML:c,bodyAttributes:l,htmlAttributes:u,metaAttributes:d,styleTag:f,routerContext:p,timings:m}=await o.render(e),h=n.n(p),g=n.i(c),_={path:e,_appHTMLBuffer:g,metaAttributes:d,bodyAttributes:l,htmlAttributes:u,styleTag:f,routerContext:h,timings:m},v={get[i.default.transferableSymbol](){return[g]},get[i.default.valueSymbol](){return _}};return s?i.default.move(v):_}async function c(e){if(e.type===`render`)return s(e.path||``);if(e.type===`render-batch`&&Array.isArray(e.paths)){let t=[],n=[];for(let r of e.paths)try{let e=await s(r,!1);t.push(e);let i=e._appHTMLBuffer;if(i instanceof ArrayBuffer)n.push(i);else if(i&&ArrayBuffer.isView(i)){let e=i.buffer;e instanceof ArrayBuffer&&n.push(e)}}catch(e){t.push({path:r,error:e instanceof Error?e.message:String(e)})}return i.default.move({get[i.default.transferableSymbol](){return n},get[i.default.valueSymbol](){return t}})}throw Error(`Invalid render job payload`)}module.exports=c;
1
+ const e=require(`./chunk-D-qHiVGv.cjs`),t=require(`./router-adapter-DR3BzW_i.cjs`),n=require(`./ssg-worker-payload-D6kDQQtE.cjs`);let r=require(`node:module`),i=require(`piscina`);i=e.n(i,1);let a=require(`node:worker_threads`),o=null;async function s(e,s=!0){if(!e)throw Error(`Invalid render job payload`);if(!o){let{ssrEntryPath:e,format:n}=a.workerData,i=n===`esm`?await import(e):(0,r.createRequire)(require(`url`).pathToFileURL(__filename).href)(e);o=t.t(await i.createRoot(!1),i)}let{appHTML:c,bodyAttributes:l,htmlAttributes:u,metaAttributes:d,styleTag:f,routerContext:p,timings:m}=await o.render(e),h=n.n(p),g=n.i(c),_={path:e,_appHTMLBuffer:g,metaAttributes:d,bodyAttributes:l,htmlAttributes:u,styleTag:f,routerContext:h,timings:m},v={get[i.default.transferableSymbol](){return[g]},get[i.default.valueSymbol](){return _}};return s?i.default.move(v):_}async function c(e){if(e.type===`render`)return s(e.path||``);if(e.type===`render-batch`&&Array.isArray(e.paths)){let t=[],n=[];for(let r of e.paths)try{let e=await s(r,!1);t.push(e);let i=e._appHTMLBuffer;if(i instanceof ArrayBuffer)n.push(i);else if(i&&ArrayBuffer.isView(i)){let e=i.buffer;e instanceof ArrayBuffer&&n.push(e)}}catch(e){t.push({path:r,error:e instanceof Error?e.message:String(e)})}return i.default.move({get[i.default.transferableSymbol](){return n},get[i.default.valueSymbol](){return t}})}throw Error(`Invalid render job payload`)}module.exports=c;
@@ -1 +1 @@
1
- import{t as e}from"./router-adapter-BukFH1uk.mjs";import{i as t,n}from"./ssg-worker-payload-BHsJklNf.mjs";import{createRequire as r}from"node:module";import i from"piscina";import{workerData as a}from"node:worker_threads";let o=null;async function s(s,c=!0){if(!s)throw Error(`Invalid render job payload`);if(!o){let{ssrEntryPath:t,format:n}=a,i=n===`esm`?await import(t):r(import.meta.url)(t);o=e(await i.createRoot(!1),i)}let{appHTML:l,bodyAttributes:u,htmlAttributes:d,metaAttributes:f,styleTag:p,routerContext:m,timings:h}=await o.render(s),g=n(m),_=t(l),v={path:s,_appHTMLBuffer:_,metaAttributes:f,bodyAttributes:u,htmlAttributes:d,styleTag:p,routerContext:g,timings:h},y={get[i.transferableSymbol](){return[_]},get[i.valueSymbol](){return v}};return c?i.move(y):v}async function c(e){if(e.type===`render`)return s(e.path||``);if(e.type===`render-batch`&&Array.isArray(e.paths)){let t=[],n=[];for(let r of e.paths)try{let e=await s(r,!1);t.push(e);let i=e._appHTMLBuffer;if(i instanceof ArrayBuffer)n.push(i);else if(i&&ArrayBuffer.isView(i)){let e=i.buffer;e instanceof ArrayBuffer&&n.push(e)}}catch(e){t.push({path:r,error:e instanceof Error?e.message:String(e)})}return i.move({get[i.transferableSymbol](){return n},get[i.valueSymbol](){return t}})}throw Error(`Invalid render job payload`)}export{c as default};
1
+ import{t as e}from"./router-adapter-CJuW_Xmp.mjs";import{i as t,n}from"./ssg-worker-payload-CWmidVcz.mjs";import{createRequire as r}from"node:module";import i from"piscina";import{workerData as a}from"node:worker_threads";let o=null;async function s(s,c=!0){if(!s)throw Error(`Invalid render job payload`);if(!o){let{ssrEntryPath:t,format:n}=a,i=n===`esm`?await import(t):r(import.meta.url)(t);o=e(await i.createRoot(!1),i)}let{appHTML:l,bodyAttributes:u,htmlAttributes:d,metaAttributes:f,styleTag:p,routerContext:m,timings:h}=await o.render(s),g=n(m),_=t(l),v={path:s,_appHTMLBuffer:_,metaAttributes:f,bodyAttributes:u,htmlAttributes:d,styleTag:p,routerContext:g,timings:h},y={get[i.transferableSymbol](){return[_]},get[i.valueSymbol](){return v}};return c?i.move(y):v}async function c(e){if(e.type===`render`)return s(e.path||``);if(e.type===`render-batch`&&Array.isArray(e.paths)){let t=[],n=[];for(let r of e.paths)try{let e=await s(r,!1);t.push(e);let i=e._appHTMLBuffer;if(i instanceof ArrayBuffer)n.push(i);else if(i&&ArrayBuffer.isView(i)){let e=i.buffer;e instanceof ArrayBuffer&&n.push(e)}}catch(e){t.push({path:r,error:e instanceof Error?e.message:String(e)})}return i.move({get[i.transferableSymbol](){return n},get[i.valueSymbol](){return t}})}throw Error(`Invalid render job payload`)}export{c as default};
@@ -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};
@@ -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;
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.2",
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.3"
90
90
  },
91
91
  "optionalDependencies": {
92
- "@bdocs/zig-critters": "0.2.1"
92
+ "@bdocs/zig-critters": "0.2.3"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@types/fs-extra": "^11.0.4",
@@ -1 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
@@ -1 +0,0 @@
1
- import{createRequire as e}from"node:module";import{Fragment as t,jsx as n}from"react/jsx-runtime";import{Fragment as r,createElement as i}from"react";import{once as a}from"node:events";import{Readable as o}from"node:stream";import*as s from"react-dom/server";var c=e(import.meta.url);function l(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function u(e){return e[0]===`/`?e.slice(1):e}function d(e,t){if(e===t)return`/`;let n=f(t);return e.startsWith(n)?e.slice(n.length-1):e}function f(e){return e[e.length-1]===`/`?e:`${e}/`}function p(e){return e[0]===`/`?e:`/${e}`}function m(e,t=``){return e.map((e,n)=>{let r=e.id||(t?`${t}-${n}`:String(n));return{...e,id:r,children:e.children?m(e.children,r):e.children}})}function h(e){if(!e?.RouteRenderer||!e.matchRouteBranchWithParams||!e.resolveRouteBranch)throw Error(`The SSR entry must expose RouteRenderer, matchRouteBranchWithParams, and resolveRouteBranch`);return{RouteRenderer:e.RouteRenderer,matchRouteBranchWithParams:e.matchRouteBranchWithParams,resolveRouteBranch:e.resolveRouteBranch}}function g(e,t){if(e===!1||e==null)throw console.error(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function _(e){let t=new Headers;for(let[n,r]of Object.entries(e))if(r)if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r);return t}function v(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;g(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:_(e.headers)};return new Request(n.href,r)}async function y(e,t){t.statusCode=e.status,t.statusMessage=e.statusText;for(let[n,r]of e.headers)t.setHeader(n,r);if(e.body){let n=e.body,r=o.from(n);r.pipe(t),await a(r,`end`)}else t.end()}function b(e){let t=new URL(e.url);t.searchParams.delete(`_data`);let n={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return n.body&&(n.duplex=`half`),new Request(t.href,n)}const x=S();async function S(){try{let e=(await import(`react-dom/static`)).prerenderToNodeStream;return typeof e==`function`?e:void 0}catch{return}}async function C(e){let t=await x;if(!t)return s.renderToString(i(r,null,e));let{prelude:n}=await t(i(r,null,e)),a=new TextDecoder,o=``;for await(let e of n)typeof e==`string`?(o+=a.decode(),o+=e):o+=a.decode(new Uint8Array(e),{stream:!0});return o+a.decode()}function w(e,t,n){let{helmet:r}=t,i=r.htmlAttributes.toString(),a=r.bodyAttributes.toString(),o=r.title.toString();o.split(`>`)[1]===`</title`&&(o=``);let s=[o,r.meta.toString(),r.link.toString(),r.script.toString()],c=n?.toString?.(e)??``;return{htmlAttributes:i,bodyAttributes:a,metaAttributes:s.filter(Boolean),styleTag:c}}let T=null;function E(){if(T)return T;let e=globalThis.__BOLTDOCS_HELMET_PROVIDER__;if(e)T=e.HelmetProvider||e.default?.HelmetProvider||e;else try{let{createRequire:e}=c(`node:module`),t=e(import.meta.url)(`react-helmet-async`);T=t.HelmetProvider||t.default?.HelmetProvider||t.default||t}catch{T=({children:e})=>n(t,{children:e})}return typeof T!=`function`&&(T=({children:e})=>n(t,{children:e})),T}var D=class{constructor(e,t){this.matchedBranches=new Map,this.resolvedBranches=new Map,this.context=e,this.entryMod=t,this.routerApi=h(t),this.base=e.base,this.getStyleCollector=e.getStyleCollector;let n=e.app;this.coreRoutes=(n?.routes||(Array.isArray(n)?n:e.routes))??[],this.RouteRenderer=this.routerApi.RouteRenderer,this.matchRouteBranchWithParams=this.routerApi.matchRouteBranchWithParams,this.resolveRouteBranch=this.routerApi.resolveRouteBranch}getMatchedBranch(e){let t=`${this.base}\0${e}`,n=this.matchedBranches.get(t);if(n)return n;let r=this.matchRouteBranchWithParams(this.coreRoutes,e,this.base);return this.matchedBranches.set(t,r),r}async getResolvedBranch(e,t){let n=this.resolvedBranches.get(e);if(n)return n;let r=this.resolveRouteBranch(t).catch(t=>{throw this.resolvedBranches.delete(e),t});return this.resolvedBranches.set(e,r),r}async render(e){let t=performance.now(),r=p(e),i=`http://localhost${this.base===`/`||r.startsWith(`${p(this.base).replace(/\/$/,``)}/`)||r===p(this.base).replace(/\/$/,``)?r:`${p(this.base).replace(/\/$/,``)}${r}`}`,a=new Request(i),o=this.getStyleCollector?await this.getStyleCollector():null,s={},c=new URL(a.url).pathname,l=performance.now(),u=this.getMatchedBranch(c),d=performance.now()-l,f=u.map(e=>e.route),m={},h=!1,g=[],_=0,v=0;if(f.length>0){let e=performance.now();g=await this.getResolvedBranch(`${this.base}\0${c}`,f),_=performance.now()-e;let t=performance.now(),n=[];for(let[e,t]of u.entries()){let r=g[e];if(!(!r||typeof r.loader!=`function`))try{let e=await r.loader({request:a,params:{...t.params}});e&&typeof e==`object`&&`data`in e?(h=!0,n.push(e.data)):e&&typeof e==`object`&&(h=!0,n.push(e))}catch{}}m=n.reduce((e,t)=>({...e,...t}),{}),v=performance.now()-t}let y=E(),b=y;b&&typeof b==`function`&&(b.canUseDOM=!1);let x=this.RouteRenderer,S=performance.now(),T=n(y,{context:s,children:n(x,{routes:this.coreRoutes,pathname:c,loaderData:m,hasLoaderData:h,resolvedBranch:g,basename:this.base})});o&&(T=o.collect(T));let D=``;try{D=await C(T)}catch(e){throw console.error(`[SSG Render Error] routePath="${c}":`,e?.stack||e),e}let O=performance.now()-S,k=performance.now(),{htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N}=w(D,s,o),P=performance.now()-k;return{appHTML:D,htmlAttributes:A,bodyAttributes:j,metaAttributes:M,styleTag:N,timings:{matchMs:d,resolveMs:_,loadersMs:v,renderMs:O,helmetMs:P,totalMs:performance.now()-t},routerContext:{loaderData:{root:m}}}}async handleLoader(e,t){let{routes:n,base:r}=this.context,{matchRouteBranchWithParams:i,resolveRouteBranch:a}=this.routerApi,o=v(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)||``),l=i(m([...n]),s.pathname,r);if(l.length===0){t.statusCode=404,t.end(`Route not found: ${c}`);return}let u=l.find((e,t)=>(e.route.id||String(t))===c);if(!u){t.statusCode=404,t.end(`Route not found: ${c}`);return}let d=((await a(l.map(e=>e.route)))[l.indexOf(u)]||u.route).loader;if(!d){t.statusCode=200,t.end(`There is no loader for the route: ${c}`);return}await y(await O({loader:d,params:u.params,request:o,routeId:c}),t)}};async function O({loader:e,params:t,request:n,routeId:r}){let i=await e({request:b(A(n)),params:t});if(i===void 0)throw Error(`You defined a loader for route "${r}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`);return k(i)?i:new Response(JSON.stringify(i),{status:200,headers:{"Content-Type":`application/json`}})}function k(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function A(e){let t=new URL(e.url),n=t.searchParams.getAll(`index`);t.searchParams.delete(`index`);let r=[];for(let e of n)e&&r.push(e);for(let e of r)t.searchParams.append(`index`,e);let i={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return i.body&&(i.duplex=`half`),new Request(t.href,i)}function j(e,t){return new D(e,t)}export{p as a,d as i,l as n,f as o,u as r,c as s,j as t};
@@ -1 +0,0 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./ssg-worker-payload-B_9N9o5p.cjs`);let n=require(`node:os`),r=require(`node:path`),i=require(`piscina`);i=e.t(i,1);let a=require(`node:url`);function o({cpuCount:e,totalMemoryGB:t,freeMemoryGB:n,requestedWorkers:r,envWorkers:i}){let a=Math.max(1,e||4),o=Math.max(1,a-1),s=t>=4?Math.min(o,12):4,c=Math.max(2,Math.floor(t*.35/.256)),l=Math.max(2,Math.floor(n/.3)),u=Math.min(c,l),d=Number.parseInt(i||``,10),f=Math.max(2,Math.min(Math.floor(a/2),4));return Math.max(2,Math.min(r??(Number.isFinite(d)&&d>0?d:f),o,u,s))}const s=(0,r.dirname)((0,a.fileURLToPath)(require(`url`).pathToFileURL(__filename).href));function c(e){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`}var l=class{constructor(e){this.totalRendered=0,this.totalErrors=0,this.destroyPromise=null;let{ssrEntryPath:t,format:a=`esm`}=e,c=(0,n.freemem)()/1024/1024/1024,l=(0,n.totalmem)()/1024/1024/1024;this.totalWorkers=o({cpuCount:(0,n.cpus)().length||4,totalMemoryGB:l,freeMemoryGB:c,requestedWorkers:e.numWorkers,envWorkers:process.env.BOLTDOCS_SSG_WORKERS});let u=(0,r.join)(s,`ssg-worker.mjs`);this.startTime=performance.now(),this.piscina=new i.default({filename:u,workerData:{ssrEntryPath:t,format:a},maxThreads:this.totalWorkers,minThreads:0,idleTimeout:1e4}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[ssg-worker/piscina] Piscina pool initialized with ${this.totalWorkers} workers (RAM: ${l.toFixed(1)} GB total, ${c.toFixed(1)} GB free)`)}async ready(){return Promise.resolve()}decodeResult(e,n){if(!e||typeof e!=`object`||e.path!==n||(e.routerContext=e.routerContext??null,e._appHTMLBuffer&&(e.appHTML=t.r(e._appHTMLBuffer),delete e._appHTMLBuffer),e._routerContextBuffer||typeof e.appHTML!=`string`||!Array.isArray(e.metaAttributes)||typeof e.bodyAttributes!=`string`||typeof e.htmlAttributes!=`string`||e.routerContext!==null&&(typeof e.routerContext!=`object`||Array.isArray(e.routerContext))))throw Error(`SSG worker returned an invalid render payload`);return e}async render(e){try{let t=this.decodeResult(await this.piscina.run({type:`render`,path:e}),e);return this.totalRendered++,t}catch(e){throw this.totalErrors++,e}}async renderBatch(e){if(e.length===0)return[];try{let t=await this.piscina.run({type:`render-batch`,paths:[...e]});if(!Array.isArray(t)||t.length!==e.length)throw Error(`SSG worker returned an invalid batch payload`);let n=t.map((t,n)=>{if(c(t))return t;if(!t||typeof t!=`object`)throw Error(`SSG worker returned an invalid batch item`);return this.decodeResult(t,e[n])});return this.totalRendered+=n.filter(e=>!c(e)).length,this.totalErrors+=n.filter(c).length,n}catch(e){throw this.totalErrors++,e}}async destroy(){if(this.destroyPromise)return this.destroyPromise;this.destroyPromise=this.piscina.destroy(),await this.destroyPromise}poolMetrics(){return{totalWorkers:this.totalWorkers,readyCount:this.totalWorkers,busyCount:this.piscina.completed,pagesPerWorker:[],initTimesMs:[],totalRendered:this.totalRendered,totalErrors:this.totalErrors,allReadyMs:Math.round(performance.now()-this.startTime),failedCount:0}}};exports.SsgWorkerPool=l;
@@ -1 +0,0 @@
1
- import{r as e}from"./ssg-worker-payload-BHsJklNf.mjs";import{cpus as t,freemem as n,totalmem as r}from"node:os";import{dirname as i,join as a}from"node:path";import o from"piscina";import{fileURLToPath as s}from"node:url";function c({cpuCount:e,totalMemoryGB:t,freeMemoryGB:n,requestedWorkers:r,envWorkers:i}){let a=Math.max(1,e||4),o=Math.max(1,a-1),s=t>=4?Math.min(o,12):4,c=Math.max(2,Math.floor(t*.35/.256)),l=Math.max(2,Math.floor(n/.3)),u=Math.min(c,l),d=Number.parseInt(i||``,10),f=Math.max(2,Math.min(Math.floor(a/2),4));return Math.max(2,Math.min(r??(Number.isFinite(d)&&d>0?d:f),o,u,s))}const l=i(s(import.meta.url));function u(e){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`}var d=class{constructor(e){this.totalRendered=0,this.totalErrors=0,this.destroyPromise=null;let{ssrEntryPath:i,format:s=`esm`}=e,u=n()/1024/1024/1024,d=r()/1024/1024/1024;this.totalWorkers=c({cpuCount:t().length||4,totalMemoryGB:d,freeMemoryGB:u,requestedWorkers:e.numWorkers,envWorkers:process.env.BOLTDOCS_SSG_WORKERS});let f=a(l,`ssg-worker.mjs`);this.startTime=performance.now(),this.piscina=new o({filename:f,workerData:{ssrEntryPath:i,format:s},maxThreads:this.totalWorkers,minThreads:0,idleTimeout:1e4}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[ssg-worker/piscina] Piscina pool initialized with ${this.totalWorkers} workers (RAM: ${d.toFixed(1)} GB total, ${u.toFixed(1)} GB free)`)}async ready(){return Promise.resolve()}decodeResult(t,n){if(!t||typeof t!=`object`||t.path!==n||(t.routerContext=t.routerContext??null,t._appHTMLBuffer&&(t.appHTML=e(t._appHTMLBuffer),delete t._appHTMLBuffer),t._routerContextBuffer||typeof t.appHTML!=`string`||!Array.isArray(t.metaAttributes)||typeof t.bodyAttributes!=`string`||typeof t.htmlAttributes!=`string`||t.routerContext!==null&&(typeof t.routerContext!=`object`||Array.isArray(t.routerContext))))throw Error(`SSG worker returned an invalid render payload`);return t}async render(e){try{let t=this.decodeResult(await this.piscina.run({type:`render`,path:e}),e);return this.totalRendered++,t}catch(e){throw this.totalErrors++,e}}async renderBatch(e){if(e.length===0)return[];try{let t=await this.piscina.run({type:`render-batch`,paths:[...e]});if(!Array.isArray(t)||t.length!==e.length)throw Error(`SSG worker returned an invalid batch payload`);let n=t.map((t,n)=>{if(u(t))return t;if(!t||typeof t!=`object`)throw Error(`SSG worker returned an invalid batch item`);return this.decodeResult(t,e[n])});return this.totalRendered+=n.filter(e=>!u(e)).length,this.totalErrors+=n.filter(u).length,n}catch(e){throw this.totalErrors++,e}}async destroy(){if(this.destroyPromise)return this.destroyPromise;this.destroyPromise=this.piscina.destroy(),await this.destroyPromise}poolMetrics(){return{totalWorkers:this.totalWorkers,readyCount:this.totalWorkers,busyCount:this.piscina.completed,pagesPerWorker:[],initTimesMs:[],totalRendered:this.totalRendered,totalErrors:this.totalErrors,allReadyMs:Math.round(performance.now()-this.startTime),failedCount:0}}};export{d as SsgWorkerPool};