@bdocs/ssg 0.0.7 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -201,7 +201,7 @@ declare module 'vite' {
201
201
  }
202
202
  }
203
203
  //#endregion
204
- //#region src/client/components/ClientOnly.d.ts
204
+ //#region src/client/components/client-only.d.ts
205
205
  interface ClientOnlyProps {
206
206
  children?: () => React.ReactNode;
207
207
  fallback?: React.ReactNode;
@@ -211,7 +211,7 @@ declare function ClientOnly({
211
211
  fallback
212
212
  }: ClientOnlyProps): React.ReactNode | null;
213
213
  //#endregion
214
- //#region src/client/components/Head.d.ts
214
+ //#region src/client/components/head.d.ts
215
215
  type Props = HelmetProps & {
216
216
  children: ReactNode;
217
217
  };
@@ -201,7 +201,7 @@ declare module 'vite' {
201
201
  }
202
202
  }
203
203
  //#endregion
204
- //#region src/client/components/ClientOnly.d.ts
204
+ //#region src/client/components/client-only.d.ts
205
205
  interface ClientOnlyProps {
206
206
  children?: () => React.ReactNode;
207
207
  fallback?: React.ReactNode;
@@ -211,7 +211,7 @@ declare function ClientOnly({
211
211
  fallback
212
212
  }: ClientOnlyProps): React.ReactNode | null;
213
213
  //#endregion
214
- //#region src/client/components/Head.d.ts
214
+ //#region src/client/components/head.d.ts
215
215
  type Props = HelmetProps & {
216
216
  children: ReactNode;
217
217
  };
package/dist/index.d.cts CHANGED
@@ -2,7 +2,7 @@ import { a as RouterOptions, c as ViteReactSSGContext, i as RouterFutureConfig,
2
2
  import { ReactNode } from "react";
3
3
  import { HelmetProps } from "react-helmet-async";
4
4
 
5
- //#region src/client/components/ClientOnly.d.ts
5
+ //#region src/client/components/client-only.d.ts
6
6
  interface ClientOnlyProps {
7
7
  children?: () => React.ReactNode;
8
8
  fallback?: React.ReactNode;
@@ -12,7 +12,7 @@ declare function ClientOnly({
12
12
  fallback
13
13
  }: ClientOnlyProps): React.ReactNode | null;
14
14
  //#endregion
15
- //#region src/client/components/Head.d.ts
15
+ //#region src/client/components/head.d.ts
16
16
  type Props = HelmetProps & {
17
17
  children: ReactNode;
18
18
  };
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ import { a as RouterOptions, c as ViteReactSSGContext, i as RouterFutureConfig,
2
2
  import { HelmetProps } from "react-helmet-async";
3
3
  import { ReactNode } from "react";
4
4
 
5
- //#region src/client/components/ClientOnly.d.ts
5
+ //#region src/client/components/client-only.d.ts
6
6
  interface ClientOnlyProps {
7
7
  children?: () => React.ReactNode;
8
8
  fallback?: React.ReactNode;
@@ -12,7 +12,7 @@ declare function ClientOnly({
12
12
  fallback
13
13
  }: ClientOnlyProps): React.ReactNode | null;
14
14
  //#endregion
15
- //#region src/client/components/Head.d.ts
15
+ //#region src/client/components/head.d.ts
16
16
  type Props = HelmetProps & {
17
17
  children: ReactNode;
18
18
  };
package/dist/node.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-CSrCqKLt.cjs`);let n=require(`react/jsx-runtime`),r=require(`@bdocs/dui`),i=require(`node:module`),a=require(`node:path`),o=require(`fs-extra`);o=e.t(o,1);let s=require(`jsdom`),c=require(`vite`),l=require(`node:crypto`);l=e.t(l,1);let u=require(`node:events`),d=require(`node:stream`),f=require(`react-dom/server`);f=e.t(f);let p=require(`node:fs/promises`);p=e.t(p,1);const m=/import\("([^)]+)"\)/g;async function h({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let{matchRoutes:o}=await import(`react-router-dom`),s=o([...e],t,n),c=s?.map(e=>e.route.entry).filter(Boolean)??[],l=new Set;s?.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)l.add(e[1].split(`/`).at(-1)??``)});let u=new Set;c.forEach(e=>u.add(e));let d=[...Object.entries(r)];l.forEach(e=>{let t=d.find(([t,n])=>n.file.endsWith(e));t&&u.add(t[0])});let f=g(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function g(e,t){let n=new Set;if(!t)return n;for(let r of t)_(e,r,n);return n}function _(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{_(e,t,n)}),n):n}async function v(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 y=`/* SCRIPT_COMMENT_PLACEHOLDER */`;async function b({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>${y}<\/script>`,l=`<head>`,u=r.join(``);t=t.replace(l,l+u);let d=`<body`;t=t.replace(d,`${d} ${i}`);let f=`<html`;t=t.replace(f,`${f} ${a}`);let p=`<div id="${e}"></div>`;if(t.includes(p))return t.replace(p,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`);let m=await import(`html5parser`),h=m.parse(t),g;if(m.walk(h,{enter:r=>{if(!g&&r?.type===m.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);g=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!g)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return g}async function x(e,t=`index.html`){let[,n]=[...(await o.default.readFile((0,a.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 ee(e){return`<link rel="stylesheet" href="${e}">`}function te(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),S(e,t))})}function S(e,t){t.endsWith(`.js`)?T(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?T(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?T(e,{rel:`preload`,as:`font`,type:`font/woff2`,href:t,crossOrigin:``}):(t.endsWith(`.png`)||t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)||t.endsWith(`.webp`)||t.endsWith(`.gif`)||t.endsWith(`.ico`)||t.endsWith(`.svg`))&&T(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function C(e){return e.createElement(`link`)}function w(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function T(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=C(e);w(n,t),e.head.appendChild(n)}function E(e,t){if(e===!1||e==null)throw(0,r.error)(`The following error is a bug in Vite-react-ssg; please open an issue! https://github.com/Daydreamer-riri/vite-react-ssg/issues/new`),Error(t)}function D(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 ne(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;E(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:D(e.headers)};return new Request(n.href,r)}async function O(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=d.Readable.from(n);r.pipe(t),await(0,u.once)(r,`end`)}else t.end()}function k(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)}async function A(e){if(!f.renderToPipeableStream)return f.renderToString((0,n.jsx)(n.Fragment,{children:e}));let t=new j,{pipe:r}=f.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){r(t)}});return t.getPromise()}var j=class extends d.Writable{constructor(){super(),this._output=``,this._deferred={promise:null,resolve:()=>null,reject:()=>null},this._deferred.promise=new Promise((e,t)=>{this._deferred.resolve=e,this._deferred.reject=t})}_write(e,t,n){this._output+=e.toString(),n()}_destroy(e,t){e instanceof Error?this._deferred.reject(e):t()}end(){return this._deferred.resolve(this._output),this.destroy()}getPromise(){return this._deferred.promise}};function M(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}}const{HelmetProvider:re}=(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href)(`react-helmet-async`);var N=class{constructor(e){this.handleLoader=async(e,n)=>{let{routes:r,base:i}=this.context,{matchRoutes:a}=await import(`react-router-dom`),o=ne(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)),l=a(t.r([...r],e=>e),{pathname:s.pathname,search:s.search,hash:s.hash,state:null,key:`default`},i);if(!l){n.statusCode=404,n.end(`Route not found: ${c}`);return}let u=l.find(e=>e.route.id===c);if(!u){n.statusCode=404,n.end(`Route not found: ${c}`);return}let d=u.route.loader??await u.route.lazy?.().then(e=>e.loader);if(!d){n.statusCode=200,n.end(`There is no loader for the route: ${c}`);return}await O(await P({loader:d,params:u.params,request:o,routeId:c}),n)},this.context=e}async render(e){let{base:r,routes:i,getStyleCollector:a,routerOptions:o}=this.context,s=t.s(e),c=s;if(r!==`/`){let e=t.s(r).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let l=`http://localhost${c}`,u=new Request(l),d=a?await a():null,f={},p=null,{StaticRouterProvider:m,createStaticHandler:h,createStaticRouter:g}=await import(`react-router-dom`),_=t.r([...i],e=>e),{query:v}=h(_,{basename:r}),y=await v(u);if(y instanceof Response){let e=y.headers.get(`Location`);if(e){let n=`http://localhost${t.s(e)}`;y=await v(new Request(n))}}if(y instanceof Response)throw y;p=y;let b=(0,n.jsx)(re,{context:f,children:(0,n.jsx)(m,{router:g(_,p,{future:o.future}),context:p})});d&&(b=d.collect(b));let x=await A(b),{htmlAttributes:ee,bodyAttributes:te,metaAttributes:S,styleTag:C}=M(x,f,d);return{appHTML:x,htmlAttributes:ee,bodyAttributes:te,metaAttributes:S,styleTag:C,routerContext:p}}};async function P({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:k(I(n)),params:t});if(a===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 F(a)?a:i(a)}function F(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function I(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 ie(e){return new N(e)}var L=`0.0.7`;function R(e,t){(0,r.info)(`${e}${t?r.colors.blue(` (${t})`):``}`)}function ae(e){return`${(e.length/1024).toFixed(2)} KiB`}async function z(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&&V(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(`/`),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 oe(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:(0,a.join)(e.root,t))}const B=/[:*?]/;function V(e){return e?B.test(e):!1}const H=Number.parseInt(c.version)>=5?[`.vite`]:[];function U(e){return Number.parseInt(c.version)>=8?{rolldownOptions:e}:{rollupOptions:e}}function W(e,t,n,r){let i=[];if(!o.default.existsSync(e))return i;let s=o.default.readdirSync(e);for(let c of s){let s=(0,a.join)(e,c),l=(0,a.relative)(t,s).replace(/\\/g,`/`),u=o.default.statSync(s),d=l.split(`/`);d.includes(`node_modules`)||d.includes(`.git`)||d.includes(`.boltdocs`)||d.includes(`.turbo`)||d.includes(`dist`)||d.includes(`coverage`)||n&&d[0]===n||r&&d[0]===r||(u.isDirectory()?i.push(...W(s,t,n,r)):i.push(s))}return i}function se(e,t,n){try{let r=W(e,e,t,n),i=(0,a.join)((0,a.join)(e,`..`),`packages`);if(o.default.existsSync(i)&&o.default.existsSync((0,a.join)(i,`core/package.json`))){let e=W(i,i,``,``);r.push(...e)}r.sort();let s=l.default.createHash(`sha256`);for(let t of r){let n=o.default.statSync(t),r=(0,a.relative)(e,t).replace(/\\/g,`/`);s.update(r),s.update(n.mtimeMs.toString()),s.update(n.size.toString())}return s.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function ce(e,n){return`static-loader-data${t.s(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function le(e,n=`/`){let r=t.s(e),i=r;if(n!==`/`){let e=t.s(n).replace(/\/$/,``);!r.startsWith(e+`/`)&&r!==e&&(i=`${e}${r}`)}return i!==`/`&&i.endsWith(`/`)?i.slice(0,-1):i}function ue(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function G(e={},n={}){let u=process.env.MODE||process.env.NODE_ENV||e.mode||`production`,d=await(0,c.resolveConfig)(n,`build`,u,u),f=process.cwd(),p=d.root||f,m=d.build.outDir||`dist`,g=d.base,_=Object.assign({},d.ssgOptions||{},e),{script:ee=`sync`,mock:S=!1,htmlEntry:C=`index.html`,entry:w=await x(p,C),formatting:T=`none`,includedRoutes:E=ue,onBeforePageRender:D,onPageRendered:ne,onFinished:O,dirStyle:k=`flat`,includeAllRoutes:A=!1,format:j=`esm`,concurrency:M=20,rootContainerId:re=`root`,routeToSourceFileMap:N={},cacheDir:P=`.boltdocs`}=_,F=_.beastiesOptions??{},I=`docs`,L=Object.values(N);if(L.length>0){let e=L[0],t=(0,a.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(I=t[0])}let B=(0,a.isAbsolute)(m)?m:(0,a.join)(p,m),V=se(p,I,m),W=V.substring(0,12),G=(0,a.join)(p,`.vite-react-ssg-temp`,W);o.default.existsSync(G)&&await o.default.remove(G);let K=(0,a.isAbsolute)(P)?P:(0,a.join)(p,P),q=(0,a.join)(K,`client-hash.txt`),J=(0,a.join)(K,`template-index.html`),Y=!1;try{o.default.existsSync(q)&&o.default.existsSync(J)&&o.default.existsSync(B)&&o.default.existsSync((0,a.join)(B,`assets`))&&(await o.default.readFile(q,`utf-8`)).trim()===V&&(Y=!0)}catch{}let pe=(0,c.createLogger)(),me=pe.warn;pe.warn=(e,t)=>{e.includes(`vite:resolve`)&&e.includes(`externalized for browser compatibility`)||me(e,t)},Y?(R(`Client code unchanged. Bypassing client build...`),await o.default.ensureDir(B),await o.default.copy(J,(0,a.join)(B,C))):(R(`Build for client...`),await(0,c.build)((0,c.mergeConfig)(n,{build:{manifest:!0,ssrManifest:!0,...U({input:{app:(0,a.join)(p,C||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:pe,mode:d.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){m=e.build.outDir||`dist`}}]})),await o.default.ensureDir(K),await o.default.copy((0,a.join)(B,C),J),await o.default.writeFile(q,V,`utf-8`));let he=()=>{};if(S){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));he=e()}R(`Build for server...`),process.env.VITE_SSG=`true`;let X=await oe(d,w);await(0,c.build)((0,c.mergeConfig)(n,{build:{ssr:X,manifest:!0,outDir:G,minify:!1,cssCodeSplit:!1,...U({output:j===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},mode:d.mode}));let ge=j===`esm`&&process.platform===`win32`?`file://`:``,_e=j===`esm`?`.mjs`:`.cjs`,ve=X.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),ye=ge+(0,a.join)(G,(X.includes(`/`)||X.includes(`\\`)?X.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(_e,``):ve)+_e).replace(/\\/g,`/`),be=JSON.parse(await o.default.readFile((0,a.join)(G,...H,`manifest.json`),`utf-8`)),xe=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),{createRoot:Se,includedRoutes:Ce}=j===`esm`?await import(ye):xe(ye),we=Ce||E,{routes:Te}=await Se(!1),{paths:Ee}=await z(Te),Z=A?Ee:await we(Ee,Te||[]);Z=ue(Z,Te||[]),Z=Array.from(new Set(Z)),R(`Rendering Pages...`,Z.length);let De=F===!1?void 0:await v(m,{publicPath:g,...F});De&&(0,r.info)("Critical CSS generation enabled via `beasties`");let Oe=JSON.parse(await o.default.readFile((0,a.join)(B,...H,`ssr-manifest.json`),`utf-8`)),ke=JSON.parse(await o.default.readFile((0,a.join)(B,...H,`manifest.json`),`utf-8`)),Ae=await o.default.readFile((0,a.join)(B,C),`utf-8`);o.default.rmSync((0,a.join)(B,C)),Ae=de(Ae,ee);let je=(await import(`p-queue`)).default||await import(`p-queue`),Me=new je({concurrency:M}),Ne=new je({concurrency:1}),Pe={},Fe=0,Ie=(0,a.join)(K,`ssg-cache.json`),Q=(0,a.join)(K,`ssg-pages`),$={};try{o.default.existsSync(Ie)&&($=await o.default.readJson(Ie))}catch{}let Le={...$};for(let e of Z){let n=l.default.createHash(`md5`).update(e).digest(`hex`),i=(0,a.join)(Q,`${n}.html`),c=(0,a.join)(Q,`${n}.json`),u=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`,d=k===`nested`?(0,a.join)(e.replace(/^\//g,``),`index.html`):u,f=(0,a.join)(B,d),p=t.s(e).replace(/\/$/,``),_=N[p]||N[e],v=!1,x=0;if(Y&&_&&o.default.existsSync(_))try{if(x=Math.round(o.default.statSync(_).mtimeMs),o.default.existsSync(i)){let t=$[p]||$[e];t&&Math.round(t.mtime)===x&&(v=!0)}}catch{}if(v){Me.add(async()=>{try{await o.default.ensureDir((0,a.dirname)(f)),await o.default.copy(i,f);let t=$[p]||$[e];if(t?.loaderDataFilePath&&o.default.existsSync(c)){let n=t.loaderDataFilePath;await o.default.ensureDir((0,a.join)(B,(0,a.dirname)(n))),await o.default.copy(c,(0,a.join)(B,n)),Pe[le(e,g)]=n,Fe++}(0,r.info)(`${r.colors.dim(`${m}/`)}${r.colors.cyan(d.padEnd(15,` `))} ${r.colors.green(`(cached)`)}`)}catch(t){throw Error(`Error on cached page: ${e}\n${t.stack}`)}});continue}Me.add(async()=>{try{let n=await Se(!1,e),{base:l,routes:u,triggerOnSSRAppRendered:f,transformState:p=t.n,app:v,routerType:ee}=n,S=await D?.(e,Ae,n)||Ae,C=`${t.c(l)}${t.a(e)}`,w=ie(n),E=!v&&ee===`remix`?await h({routes:[...u],locationArg:C,base:l,serverManifest:be,manifest:ke,ssrManifest:Oe}):new Set,{appHTML:O,bodyAttributes:k,htmlAttributes:A,metaAttributes:j,styleTag:M,routerContext:N}=await w.render(e),P=N?.loaderData,F;if(P&&Object.keys(P).length>0){let t=ce(e,W);F=t,await o.default.ensureDir((0,a.join)(B,(0,a.dirname)(t))),await o.default.writeFile((0,a.join)(B,t),JSON.stringify(P)),Pe[le(e,g)]=t,Fe++}await f?.(e,O,n);let I=new s.JSDOM(await b({rootContainerId:re,appHTML:O,indexHTML:S,metaAttributes:j,bodyAttributes:k,htmlAttributes:A,initialState:null}));te(I.window.document,E);let L=I.window.document;for(let e of L.querySelectorAll(`script`))e.textContent?.includes(`window.__staticRouterHydrationData`)&&e.remove();let R=I.serialize();I.window.close();let z=await ne?.(e,R,n)||R,oe=``;if(P&&Object.keys(P).length>0){let t=JSON.stringify(P).replace(/</g,`\\u003c`);oe=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${le(e,g)}': ${t} };`}let V=``;if(N){let e={loaderData:N.loaderData??{},actionData:N.actionData??null,errors:N.errors??null};V=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let H=`<script>window.__VITE_REACT_SSG_HASH__ = '${W}';${oe}${V}<\/script>`;z=z.replace(`<head>`,`<head>${H}`),z=z.replace(`<script>${y}<\/script>`,``),De&&(z=await Ne.add(()=>De.process(z)),z=z.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),M&&(z=z.replace(`<head>`,`<head>${M}`));let U=await fe(z,T);if(await o.default.ensureDir((0,a.join)(B,(0,a.dirname)(d))),await o.default.writeFile((0,a.join)(B,d),U,`utf-8`),_&&o.default.existsSync(_)){await o.default.ensureDir(Q),await o.default.writeFile(i,U,`utf-8`);let n=t.s(e).replace(/\/$/,``),r=Math.round(x);P&&Object.keys(P).length>0&&F?(await o.default.writeFile(c,JSON.stringify(P),`utf-8`),Le[n]={mtime:r,loaderDataFilePath:F}):Le[n]={mtime:r}}(0,r.info)(`${r.colors.dim(`${m}/`)}${r.colors.cyan(d.padEnd(15,` `))} ${r.colors.dim(ae(U))}`)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}})}await Me.start().onIdle();try{if(await o.default.ensureDir((0,a.dirname)(Ie)),await o.default.writeJson(Ie,Le),o.default.existsSync(Q)){let e=await o.default.readdir(Q),t=new Set;for(let e of Object.keys(Le)){let n=l.default.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}let n=0;for(let r of e)(r.endsWith(`.html`)||r.endsWith(`.json`))&&(t.has(r)||(await o.default.remove((0,a.join)(Q,r)),n++));n>0&&R(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}R(`Generating static loader data...`,Fe);let Re=JSON.stringify(Pe,null,0);await o.default.writeFile((0,a.join)(B,`static-loader-data-manifest-${W}.json`),Re),(0,r.info)(`${r.colors.dim(`${m}/`)}${r.colors.cyan(`static-loader-data-manifest-${W}.json`.padEnd(15,` `))} ${r.colors.dim(ae(Re))}`),await o.default.remove((0,a.join)(p,`.vite-react-ssg-temp`)),he();let ze=d.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;ze&&!ze.disabled&&ze.generateSW&&(R(`Regenerate PWA...`),await ze.generateSW()),(0,r.success)(`Build finished.`),await O?.(m),setTimeout(()=>{(0,r.warn)(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function de(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function fe(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 K({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,f)=>{try{let r=u.originalUrl,f=await(await l.ssrLoadModule(n).then(e=>e.createRoot))(!1,r),p=ie(f),{app:m,base:h}=f,[g,_]=r.split(`?`),v=new URLSearchParams(_);if(!m&&v.has(`_data`))return p.handleLoader(u,d);let y=await l.transformIndexHtml(r,e),x=await i?.(r,y,f)||y,{appHTML:te,bodyAttributes:S,htmlAttributes:C,metaAttributes:w,styleTag:T}=await p.render(t.o(g,h));w.push(T);let E=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),D=new Set,ne=new Set,O=async e=>{if(!e||!e?.ssrTransformResult||ne.has(e))return;ne.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 O(t)}};await Promise.all(E.map(async e=>O(e)));let k=[...D].map(e=>ee(t.i(l.config.base,e)));w.push(...k);let A=await b({rootContainerId:o,appHTML:te,indexHTML:x,metaAttributes:w,bodyAttributes:S,htmlAttributes:C,initialState:null}),j=await s?.(r,A,f)||A;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.send)(u,d,j,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){l.ssrFixStacktrace(e),(0,r.error)(`SSR render error`,e),d.statusCode=500,d.end(e.stack)}};return()=>{l.middlewares.use(u)}}}}async function q(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await(0,c.resolveConfig)(e,`serve`,n,n),i=process.cwd(),o=r.root||i,s={...r.ssgOptions,...t},{htmlEntry:l=`index.html`,onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:m=!1}=s,h=s.entry||await x(o,l),[g,_]=await Promise.all([oe(r,h),p.default.readFile((0,a.join)(o,l),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,m){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));e()}return await(0,c.createServer)({...e,plugins:[...e.plugins??[],K({template:_,ssrEntry:g,onBeforePageRender:u,onPageRendered:d,entry:h,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 J(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await q(t,e);return await r.listen(),Y(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Y(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.reset(r.colors.bold(`${e}ms`))}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${L} `)}`,{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()}exports.build=G,exports.createServer=q,exports.dev=J;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-CSrCqKLt.cjs`);let n=require(`react/jsx-runtime`),r=require(`@bdocs/dui`),i=require(`node:module`),a=require(`node:path`);a=e.t(a,1);let o=require(`fs-extra`);o=e.t(o,1);let s=require(`jsdom`),c=require(`vite`),l=require(`node:crypto`);l=e.t(l,1);let u=require(`node:events`),d=require(`node:stream`),f=require(`react-dom/server`);f=e.t(f);let p=require(`node:fs`);p=e.t(p,1);let m=require(`node:fs/promises`);m=e.t(m,1);const h=/import\("([^)]+)"\)/g;async function g({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let{matchRoutes:o}=await import(`react-router-dom`),s=o([...e],t,n),c=s?.map(e=>e.route.entry).filter(Boolean)??[],l=new Set;s?.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(h);for(let e of n)l.add(e[1].split(`/`).at(-1)??``)});let u=new Set;c.forEach(e=>u.add(e));let d=[...Object.entries(r)];l.forEach(e=>{let t=d.find(([t,n])=>n.file.endsWith(e));t&&u.add(t[0])});let f=_(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function _(e,t){let n=new Set;if(!t)return n;for(let r of t)v(e,r,n);return n}function v(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{v(e,t,n)}),n):n}async function y(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 b=`/* SCRIPT_COMMENT_PLACEHOLDER */`;async function x({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>${b}<\/script>`,l=`<head>`,u=r.join(``);t=t.replace(l,l+u);let d=`<body`;t=t.replace(d,`${d} ${i}`);let f=`<html`;t=t.replace(f,`${f} ${a}`);let p=`<div id="${e}"></div>`;if(t.includes(p))return t.replace(p,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`);let m=await import(`html5parser`),h=m.parse(t),g;if(m.walk(h,{enter:r=>{if(!g&&r?.type===m.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);g=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!g)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return g}async function S(e,t=`index.html`){let[,n]=[...(await o.default.readFile((0,a.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 C(e){return`<link rel="stylesheet" href="${e}">`}function ee(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),w(e,t))})}function w(e,t){t.endsWith(`.js`)?D(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?D(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?D(e,{rel:`preload`,as:`font`,type:`font/woff2`,href:t,crossOrigin:``}):(t.endsWith(`.png`)||t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)||t.endsWith(`.webp`)||t.endsWith(`.gif`)||t.endsWith(`.ico`)||t.endsWith(`.svg`))&&D(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function T(e){return e.createElement(`link`)}function E(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function D(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=T(e);E(n,t),e.head.appendChild(n)}function O(e,t){if(e===!1||e==null)throw(0,r.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 te(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 k(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;O(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:te(e.headers)};return new Request(n.href,r)}async function A(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=d.Readable.from(n);r.pipe(t),await(0,u.once)(r,`end`)}else t.end()}function j(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)}async function M(e){if(!f.renderToPipeableStream)return f.renderToString((0,n.jsx)(n.Fragment,{children:e}));let t=new N,{pipe:r}=f.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){r(t)}});return t.getPromise()}var N=class extends d.Writable{constructor(){super(),this._output=``,this._deferred={promise:null,resolve:()=>null,reject:()=>null},this._deferred.promise=new Promise((e,t)=>{this._deferred.resolve=e,this._deferred.reject=t})}_write(e,t,n){this._output+=e.toString(),n()}_destroy(e,t){e instanceof Error?this._deferred.reject(e):t()}end(){return this._deferred.resolve(this._output),this.destroy()}getPromise(){return this._deferred.promise}};function P(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}}const{HelmetProvider:ne}=(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href)(`react-helmet-async`);var F=class{constructor(e){this.handleLoader=async(e,n)=>{let{routes:r,base:i}=this.context,{matchRoutes:a}=await import(`react-router-dom`),o=k(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)),l=a(t.r([...r],e=>e),{pathname:s.pathname,search:s.search,hash:s.hash,state:null,key:`default`},i);if(!l){n.statusCode=404,n.end(`Route not found: ${c}`);return}let u=l.find(e=>e.route.id===c);if(!u){n.statusCode=404,n.end(`Route not found: ${c}`);return}let d=u.route.loader??await u.route.lazy?.().then(e=>e.loader);if(!d){n.statusCode=200,n.end(`There is no loader for the route: ${c}`);return}await A(await I({loader:d,params:u.params,request:o,routeId:c}),n)},this.context=e}async render(e){let{base:r,routes:i,getStyleCollector:a,routerOptions:o}=this.context,s=t.s(e),c=s;if(r!==`/`){let e=t.s(r).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let l=`http://localhost${c}`,u=new Request(l),d=a?await a():null,f={},p=null,{StaticRouterProvider:m,createStaticHandler:h,createStaticRouter:g}=await import(`react-router-dom`),_=t.r([...i],e=>e),{query:v}=h(_,{basename:r}),y=await v(u),b=0;for(;y instanceof Response&&b<10;){let e=y.headers.get(`Location`);if(!e)break;let n;if(/^https?:\/\//i.test(e))try{let r=new URL(e);if(r.hostname===`localhost`||r.hostname===``)n=`http://localhost${t.s(r.pathname+r.search+r.hash)}`;else break}catch{break}else n=`http://localhost${t.s(e)}`;y=await v(new Request(n)),b++}if(y instanceof Response)throw y;p=y;let x=(0,n.jsx)(ne,{context:f,children:(0,n.jsx)(m,{router:g(_,p,{future:o.future}),context:p})});d&&(x=d.collect(x));let S=await M(x),{htmlAttributes:C,bodyAttributes:ee,metaAttributes:w,styleTag:T}=P(S,f,d);return{appHTML:S,htmlAttributes:C,bodyAttributes:ee,metaAttributes:w,styleTag:T,routerContext:p}}};async function I({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:j(R(n)),params:t});if(a===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 L(a)?a:i(a)}function L(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function R(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 re(e){return new F(e)}var z=`0.1.0`;function B(e,t){(0,r.info)(`${e}${t?r.colors.blue(` (${t})`):``}`)}function ie(e){return`${(e.length/1024).toFixed(2)} KiB`}async function ae(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&&se(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 oe(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:(0,a.join)(e.root,t))}const V=/[:*?]/;function se(e){return e?V.test(e):!1}const H=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),U=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function W(e){try{return p.default.statSync(e).size}catch{return 0}}async function ce(e,t){let n=(0,a.join)(e,`.vite`),r=(0,a.join)(e,`assets`),i={},o=(0,a.join)(n,`manifest.json`);p.default.existsSync(o)&&(i=JSON.parse(await p.default.readFileSync(o,`utf-8`)));let s=0,c=0;for(let[,t]of Object.entries(i)){let{file:n,css:r=[]}=t,i=W((0,a.join)(e,n));s+=i;for(let t of r)c+=W((0,a.join)(e,t))}let l=0,u=0;if(p.default.existsSync(r)){let e=p.default.readdirSync(r,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=a.default.extname(t.name).toLowerCase(),n=(0,a.join)(r,t.name);H.has(e)?l+=W(n):U.has(e)&&u++}}let d=(0,a.join)(e,`index.html`),f=0,m=[];if(p.default.existsSync(d)){let e=W(d);f+=e,m.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}try{let t=p.default.readdirSync(e,{recursive:!0});for(let n of t){if(!n.endsWith(`.html`)||n===`index.html`)continue;let t=W((0,a.join)(e,n));if(t>0){let e=`/`+n.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);f+=t,m.push({route:e,htmlSize:t,htmlFile:n})}}}catch{}return{buildTime:t,totalJSBundleSize:s,totalCSSBundleSize:c,totalImagesSize:l,totalHTMLSize:f,fontCount:u,pages:m}}function le(e,t){let n=a.default.resolve(e,`..`,`.boltdocs`,`reports`);p.default.existsSync(n)||p.default.mkdirSync(n,{recursive:!0});let r=(0,a.join)(n,`performance.json`);p.default.writeFileSync(r,JSON.stringify(t,null,2))}const ue=Number.parseInt(c.version)>=5?[`.vite`]:[];function de(e){return Number.parseInt(c.version)>=8?{rolldownOptions:e}:{rollupOptions:e}}function G(e,t,n,r){let i=[];if(!o.default.existsSync(e))return i;let s=o.default.readdirSync(e,{withFileTypes:!0}),c=e===t;for(let l of s){let s=l.name;if(s===`node_modules`||s===`.git`||s===`.boltdocs`||s===`.turbo`||s===`dist`||s===`coverage`||c&&(n&&s===n||r&&s===r))continue;let u=(0,a.join)(e,s),d=l.isDirectory();if(l.isSymbolicLink())try{d=o.default.statSync(u).isDirectory()}catch{continue}d?i.push(...G(u,t,n,r)):i.push(u)}return i}function fe(e,t,n){try{let r=G(e,e,t,n),i=(0,a.join)((0,a.join)(e,`..`),`packages`);if(o.default.existsSync(i)&&o.default.existsSync((0,a.join)(i,`core/package.json`))){let e=G(i,i,``,``);r.push(...e)}r.sort();let s=l.default.createHash(`sha256`);for(let t of r){let n=o.default.statSync(t),r=(0,a.relative)(e,t).replace(/\\/g,`/`);s.update(r),s.update(n.mtimeMs.toString()),s.update(n.size.toString())}return s.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function pe(e,n){return`static-loader-data${t.s(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function me(e,n=`/`){let r=t.s(e),i=r;if(n!==`/`){let e=t.s(n).replace(/\/$/,``);!r.startsWith(e+`/`)&&r!==e&&(i=`${e}${r}`)}return i!==`/`&&i.endsWith(`/`)?i.slice(0,-1):i}function he(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function K(e={},n={}){let u=process.env.MODE||process.env.NODE_ENV||e.mode||`production`,d=await(0,c.resolveConfig)(n,`build`,u,u),f=process.cwd(),p=d.root||f,m=d.build.outDir||`dist`,h=d.base,_=Object.assign({},d.ssgOptions||{},e),v=performance.now(),{script:C=`sync`,mock:w=!1,htmlEntry:T=`index.html`,entry:E=await S(p,T),formatting:D=`none`,includedRoutes:O=he,onBeforePageRender:te,onPageRendered:k,onFinished:A,dirStyle:j=`flat`,includeAllRoutes:M=!1,format:N=`esm`,concurrency:P=20,rootContainerId:ne=`root`,routeToSourceFileMap:F={},cacheDir:I=`.boltdocs/build`}=_,L=_.beastiesOptions??{},R=`docs`,z=Object.values(F);if(z.length>0){let e=z[0],t=(0,a.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(R=t[0])}let V=(0,a.isAbsolute)(m)?m:(0,a.join)(p,m),se=fe(p,R,m),H=se.substring(0,12),U=(0,a.join)(p,`.vite-react-ssg-temp`,H);o.default.existsSync(U)&&await o.default.remove(U);let W=(0,a.isAbsolute)(I)?I:(0,a.join)(p,I),G=(0,a.join)(W,`client-hash.txt`),K=(0,a.join)(W,`template-index.html`),q=!1;try{o.default.existsSync(G)&&o.default.existsSync(K)&&o.default.existsSync(V)&&o.default.existsSync((0,a.join)(V,`assets`))&&(await o.default.readFile(G,`utf-8`)).trim()===se&&(q=!0)}catch{}let J=(0,c.createLogger)(),ve=J.warn;J.warn=(e,t)=>{e.includes(`externalized for browser compatibility`)||ve(e,t)};let ye=J.info;J.info=(e,t)=>{e.startsWith(`dist/`)||e.startsWith(`.vite-react-ssg-temp/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)||ye(e,t)},q?(B(`Client code unchanged. Bypassing client build...`),await o.default.ensureDir(V),await o.default.copy(K,(0,a.join)(V,T))):((0,r.dividerLog)(),B(`Build for client...`),await(0,c.build)((0,c.mergeConfig)(n,{build:{manifest:!0,ssrManifest:!0,...de({input:{app:(0,a.join)(p,T||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:J,mode:d.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){m=e.build.outDir||`dist`}}]})),(0,r.success)(`Client build complete`),await o.default.ensureDir(W),await o.default.copy((0,a.join)(V,T),K),await o.default.writeFile(G,se,`utf-8`)),(0,r.dividerLog)();let be=()=>{};if(w){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));be=e()}B(`Build for server...`),process.env.VITE_SSG=`true`;let Y=await oe(d,E);await(0,c.build)((0,c.mergeConfig)(n,{build:{ssr:Y,manifest:!0,outDir:U,minify:!1,cssCodeSplit:!1,...de({output:N===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:J,mode:d.mode})),(0,r.success)(`Server build complete`);let xe=N===`esm`&&process.platform===`win32`?`file://`:``,Se=N===`esm`?`.mjs`:`.cjs`,Ce=Y.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),we=xe+(0,a.join)(U,(Y.includes(`/`)||Y.includes(`\\`)?Y.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Se,``):Ce)+Se).replace(/\\/g,`/`),Te=JSON.parse(await o.default.readFile((0,a.join)(U,...ue,`manifest.json`),`utf-8`)),Ee=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),{createRoot:De,includedRoutes:Oe}=N===`esm`?await import(we):Ee(we),ke=Oe||O,{routes:Ae}=await De(!1),{paths:je}=await ae(Ae),X=M?je:await ke(je,Ae||[]);X=he(X,Ae||[]),X=Array.from(new Set(X)),(0,r.dividerLog)(),B(`Rendering Pages...`,X.length);let Me=L===!1?void 0:await y(m,{publicPath:h,...L});Me&&(0,r.info)("Critical CSS generation enabled via `beasties`");let Ne=JSON.parse(await o.default.readFile((0,a.join)(V,...ue,`ssr-manifest.json`),`utf-8`)),Pe=JSON.parse(await o.default.readFile((0,a.join)(V,...ue,`manifest.json`),`utf-8`)),Fe=await o.default.readFile((0,a.join)(V,T),`utf-8`);o.default.rmSync((0,a.join)(V,T)),Fe=ge(Fe,C);let Ie=(await import(`p-queue`)).default||await import(`p-queue`),Le=new Ie({concurrency:P}),Re=new Ie({concurrency:1}),ze={},Be=0,Ve=0,He=0,Ue=0,Z=(0,a.join)(W,`ssg-cache.json`),Q=(0,a.join)(W,`ssg-pages`),$={};try{o.default.existsSync(Z)&&($=await o.default.readJson(Z))}catch{}let We={...$};for(let e of X){let n=l.default.createHash(`md5`).update(e).digest(`hex`),r=(0,a.join)(Q,`${n}.html`),i=(0,a.join)(Q,`${n}.json`),c=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`,u=j===`nested`?(0,a.join)(e.replace(/^\//g,``),`index.html`):c,d=(0,a.join)(V,u),f=t.s(e).replace(/\/$/,``),p=F[f]||F[e],m=!1,_=0;if(q&&p&&o.default.existsSync(p))try{if(_=Math.round(o.default.statSync(p).mtimeMs),o.default.existsSync(r)){let t=$[f]||$[e];t&&Math.round(t.mtime)===_&&(m=!0)}}catch{}if(m){Le.add(async()=>{try{if(await o.default.ensureDir((0,a.dirname)(d)),q)await o.default.copy(r,d);else{let e=await o.default.readFile(r,`utf-8`);e=e.replace(/window\.__VITE_REACT_SSG_HASH__\s*=\s*'[^']*'/,`window.__VITE_REACT_SSG_HASH__ = '${H}'`),await o.default.writeFile(d,e,`utf-8`)}let t=$[f]||$[e];if(t?.loaderDataFilePath&&o.default.existsSync(i)){let n=q?t.loaderDataFilePath:pe(e,H);await o.default.ensureDir((0,a.join)(V,(0,a.dirname)(n))),await o.default.copy(i,(0,a.join)(V,n)),ze[me(e,h)]=n,Be++}He++}catch(t){throw Error(`Error on cached page: ${e}\n${t.stack}`)}});continue}Le.add(async()=>{try{let n=await De(!1,e),{base:c,routes:l,triggerOnSSRAppRendered:d,transformState:f=t.n,app:m,routerType:v}=n,y=await te?.(e,Fe,n)||Fe,S=`${t.c(c)}${t.a(e)}`,C=re(n),w=!m&&v===`remix`?await g({routes:[...l],locationArg:S,base:c,serverManifest:Te,manifest:Pe,ssrManifest:Ne}):new Set,{appHTML:T,bodyAttributes:E,htmlAttributes:O,metaAttributes:A,styleTag:j,routerContext:M}=await C.render(e),N=M?.loaderData,P;if(N&&Object.keys(N).length>0){let t=pe(e,H);P=t,await o.default.ensureDir((0,a.join)(V,(0,a.dirname)(t))),await o.default.writeFile((0,a.join)(V,t),JSON.stringify(N)),ze[me(e,h)]=t,Be++}await d?.(e,T,n);let F=new s.JSDOM(await x({rootContainerId:ne,appHTML:T,indexHTML:y,metaAttributes:A,bodyAttributes:E,htmlAttributes:O,initialState:null}));ee(F.window.document,w);let I=F.window.document;for(let e of I.querySelectorAll(`script`))e.textContent?.includes(`window.__staticRouterHydrationData`)&&e.remove();let L=F.serialize();F.window.close();let R=await k?.(e,L,n)||L,z=``;if(N&&Object.keys(N).length>0){let t=JSON.stringify(N).replace(/</g,`\\u003c`);z=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${me(e,h)}': ${t} };`}let B=``;if(M){let e={loaderData:M.loaderData??{},actionData:M.actionData??null,errors:M.errors??null};B=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let ie=`<script>window.__VITE_REACT_SSG_HASH__ = '${H}';${z}${B}<\/script>`;R=R.replace(`<head>`,`<head>${ie}`),R=R.replace(`<script>${b}<\/script>`,``),Me&&(R=await Re.add(()=>Me.process(R)),R=R.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),j&&(R=R.replace(`<head>`,`<head>${j}`));let ae=await _e(R,D);if(await o.default.ensureDir((0,a.join)(V,(0,a.dirname)(u))),await o.default.writeFile((0,a.join)(V,u),ae,`utf-8`),p&&o.default.existsSync(p)){await o.default.ensureDir(Q),await o.default.writeFile(r,ae,`utf-8`);let n=t.s(e).replace(/\/$/,``),a=Math.round(_);N&&Object.keys(N).length>0&&P?(await o.default.writeFile(i,JSON.stringify(N),`utf-8`),We[n]={mtime:a,loaderDataFilePath:P}):We[n]={mtime:a}}Ve++,Ue+=ae.length}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}})}await Le.start().onIdle();let Ge=Ve+He,Ke=(Ue/1024/1024).toFixed(2);(0,r.info)(`${r.colors.cyan(String(Ge).padStart(3,` `))} pages rendered ${r.colors.dim(`(${Ve} new, ${He} cached, ${Ke} MB)`)}`);try{if(await o.default.ensureDir((0,a.dirname)(Z)),await o.default.writeJson(Z,We),o.default.existsSync(Q)){let e=await o.default.readdir(Q),t=new Set;for(let e of Object.keys(We)){let n=l.default.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}let n=0;for(let r of e)(r.endsWith(`.html`)||r.endsWith(`.json`))&&(t.has(r)||(await o.default.remove((0,a.join)(Q,r)),n++));n>0&&B(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}(0,r.dividerLog)(),B(`Generating static loader data...`,Be);let qe=JSON.stringify(ze,null,0);await o.default.writeFile((0,a.join)(V,`static-loader-data-manifest-${H}.json`),qe),(0,r.info)(`${r.colors.dim(`${m}/`)}${r.colors.cyan(`static-loader-data-manifest-${H}.json`.padEnd(15,` `))} ${r.colors.dim(ie(qe))}`),await o.default.remove((0,a.join)(p,`.vite-react-ssg-temp`)),be();let Je=d.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;Je&&!Je.disabled&&Je.generateSW&&(B(`Regenerate PWA...`),await Je.generateSW());let Ye=Math.round(performance.now()-v),Xe=await ce(V,Ye);le(p,Xe),B(`Build took ${(Ye/1e3).toFixed(1)}s — JS: ${(Xe.totalJSBundleSize/1024).toFixed(0)}kb, CSS: ${(Xe.totalCSSBundleSize/1024).toFixed(0)}kb, Pages: ${Xe.pages.length}`),(0,r.dividerLog)(),(0,r.success)(`Build finished.`),await A?.(m),setTimeout(()=>{(0,r.warn)(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function ge(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function _e(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({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,f)=>{try{let r=u.originalUrl,f=await(await l.ssrLoadModule(n).then(e=>e.createRoot))(!1,r),p=re(f),{app:m,base:h}=f,[g,_]=r.split(`?`),v=new URLSearchParams(_);if(!m&&v.has(`_data`))return p.handleLoader(u,d);let y=await l.transformIndexHtml(r,e),b=await i?.(r,y,f)||y,{appHTML:S,bodyAttributes:ee,htmlAttributes:w,metaAttributes:T,styleTag:E}=await p.render(t.o(g,h));T.push(E);let D=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),O=new Set,te=new Set,k=async e=>{if(!e||!e?.ssrTransformResult||te.has(e))return;te.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`))O.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await k(t)}};await Promise.all(D.map(async e=>k(e)));let A=[...O].map(e=>C(t.i(l.config.base,e)));T.push(...A);let j=await x({rootContainerId:o,appHTML:S,indexHTML:b,metaAttributes:T,bodyAttributes:ee,htmlAttributes:w,initialState:null}),M=await s?.(r,j,f)||j;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.send)(u,d,M,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){l.ssrFixStacktrace(e),(0,r.error)(`SSR render error`,e),d.statusCode=500,d.end(e.stack)}};return()=>{l.middlewares.use(u)}}}}async function J(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await(0,c.resolveConfig)(e,`serve`,n,n),i=process.cwd(),o=r.root||i,s={...r.ssgOptions,...t},{htmlEntry:l=`index.html`,onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:p=!1}=s,h=s.entry||await S(o,l),[g,_]=await Promise.all([oe(r,h),m.default.readFile((0,a.join)(o,l),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,p){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));e()}return await(0,c.createServer)({...e,plugins:[...e.plugins??[],q({template:_,ssrEntry:g,onBeforePageRender:u,onPageRendered:d,entry:h,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 ve(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await J(t,e);return await r.listen(),ye(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function ye(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.reset(r.colors.bold(`${e}ms`))}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${z} `)}`,{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()}exports.build=K,exports.createServer=J,exports.dev=ve;
package/dist/node.mjs CHANGED
@@ -1 +1 @@
1
- import{a as e,c as t,i as n,n as r,o as i,r as a,s as o}from"./state-U8UuhxSd.mjs";import{createRequire as s}from"node:module";import{Fragment as c,jsx as l}from"react/jsx-runtime";import{colors as u,error as d,info as f,success as p,warn as m}from"@bdocs/dui";import{dirname as h,isAbsolute as g,join as _,relative as v}from"node:path";import y from"fs-extra";import{JSDOM as b}from"jsdom";import{build as x,createLogger as S,createServer as C,mergeConfig as w,resolveConfig as T,send as E,version as D}from"vite";import O from"node:crypto";import{once as k}from"node:events";import{Readable as A,Writable as j}from"node:stream";import*as M from"react-dom/server";import ee from"node:fs/promises";var te=s(import.meta.url);const N=/import\("([^)]+)"\)/g;async function ne({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let{matchRoutes:o}=await import(`react-router-dom`),s=o([...e],t,n),c=s?.map(e=>e.route.entry).filter(Boolean)??[],l=new Set;s?.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(N);for(let e of n)l.add(e[1].split(`/`).at(-1)??``)});let u=new Set;c.forEach(e=>u.add(e));let d=[...Object.entries(r)];l.forEach(e=>{let t=d.find(([t,n])=>n.file.endsWith(e));t&&u.add(t[0])});let f=re(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function re(e,t){let n=new Set;if(!t)return n;for(let r of t)ie(e,r,n);return n}function ie(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{ie(e,t,n)}),n):n}async function P(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 ae=`/* SCRIPT_COMMENT_PLACEHOLDER */`;async function oe({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>${ae}<\/script>`,l=`<head>`,u=r.join(``);t=t.replace(l,l+u);let d=`<body`;t=t.replace(d,`${d} ${i}`);let f=`<html`;t=t.replace(f,`${f} ${a}`);let p=`<div id="${e}"></div>`;if(t.includes(p))return t.replace(p,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`);let m=await import(`html5parser`),h=m.parse(t),g;if(m.walk(h,{enter:r=>{if(!g&&r?.type===m.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);g=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!g)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return g}async function F(e,t=`index.html`){let[,n]=[...(await y.readFile(_(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 I(e){return`<link rel="stylesheet" href="${e}">`}function se(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),ce(e,t))})}function ce(e,t){t.endsWith(`.js`)?z(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?z(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?z(e,{rel:`preload`,as:`font`,type:`font/woff2`,href:t,crossOrigin:``}):(t.endsWith(`.png`)||t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)||t.endsWith(`.webp`)||t.endsWith(`.gif`)||t.endsWith(`.ico`)||t.endsWith(`.svg`))&&z(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function L(e){return e.createElement(`link`)}function R(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function z(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=L(e);R(n,t),e.head.appendChild(n)}function le(e,t){if(e===!1||e==null)throw d(`The following error is a bug in Vite-react-ssg; please open an issue! https://github.com/Daydreamer-riri/vite-react-ssg/issues/new`),Error(t)}function B(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}`;le(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:B(e.headers)};return new Request(n.href,r)}async function H(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=A.from(n);r.pipe(t),await k(r,`end`)}else t.end()}function ue(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)}async function de(e){if(!M.renderToPipeableStream)return M.renderToString(l(c,{children:e}));let t=new U,{pipe:n}=M.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){n(t)}});return t.getPromise()}var U=class extends j{constructor(){super(),this._output=``,this._deferred={promise:null,resolve:()=>null,reject:()=>null},this._deferred.promise=new Promise((e,t)=>{this._deferred.resolve=e,this._deferred.reject=t})}_write(e,t,n){this._output+=e.toString(),n()}_destroy(e,t){e instanceof Error?this._deferred.reject(e):t()}end(){return this._deferred.resolve(this._output),this.destroy()}getPromise(){return this._deferred.promise}};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}}const{HelmetProvider:G}=s(import.meta.url)(`react-helmet-async`);var K=class{constructor(e){this.handleLoader=async(e,t)=>{let{routes:n,base:r}=this.context,{matchRoutes:i}=await import(`react-router-dom`),o=V(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)),l=i(a([...n],e=>e),{pathname:s.pathname,search:s.search,hash:s.hash,state:null,key:`default`},r);if(!l){t.statusCode=404,t.end(`Route not found: ${c}`);return}let u=l.find(e=>e.route.id===c);if(!u){t.statusCode=404,t.end(`Route not found: ${c}`);return}let d=u.route.loader??await u.route.lazy?.().then(e=>e.loader);if(!d){t.statusCode=200,t.end(`There is no loader for the route: ${c}`);return}await H(await q({loader:d,params:u.params,request:o,routeId:c}),t)},this.context=e}async render(e){let{base:t,routes:n,getStyleCollector:r,routerOptions:i}=this.context,s=o(e),c=s;if(t!==`/`){let e=o(t).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let u=`http://localhost${c}`,d=new Request(u),f=r?await r():null,p={},m=null,{StaticRouterProvider:h,createStaticHandler:g,createStaticRouter:_}=await import(`react-router-dom`),v=a([...n],e=>e),{query:y}=g(v,{basename:t}),b=await y(d);if(b instanceof Response){let e=b.headers.get(`Location`);if(e){let t=`http://localhost${o(e)}`;b=await y(new Request(t))}}if(b instanceof Response)throw b;m=b;let x=l(G,{context:p,children:l(h,{router:_(v,m,{future:i.future}),context:m})});f&&(x=f.collect(x));let S=await de(x),{htmlAttributes:C,bodyAttributes:w,metaAttributes:T,styleTag:E}=W(S,p,f);return{appHTML:S,htmlAttributes:C,bodyAttributes:w,metaAttributes:T,styleTag:E,routerContext:m}}};async function q({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:ue(pe(n)),params:t});if(a===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 fe(a)?a:i(a)}function fe(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function pe(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 me(e){return new K(e)}var he=`0.0.7`;function J(e,t){f(`${e}${t?u.blue(` (${t})`):``}`)}function ge(e){return`${(e.length/1024).toFixed(2)} KiB`}async function _e(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&be(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(`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function ve(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:_(e.root,t))}const ye=/[:*?]/;function be(e){return e?ye.test(e):!1}const xe=Number.parseInt(D)>=5?[`.vite`]:[];function Se(e){return Number.parseInt(D)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Y(e,t,n,r){let i=[];if(!y.existsSync(e))return i;let a=y.readdirSync(e);for(let o of a){let a=_(e,o),s=v(t,a).replace(/\\/g,`/`),c=y.statSync(a),l=s.split(`/`);l.includes(`node_modules`)||l.includes(`.git`)||l.includes(`.boltdocs`)||l.includes(`.turbo`)||l.includes(`dist`)||l.includes(`coverage`)||n&&l[0]===n||r&&l[0]===r||(c.isDirectory()?i.push(...Y(a,t,n,r)):i.push(a))}return i}function Ce(e,t,n){try{let r=Y(e,e,t,n),i=_(_(e,`..`),`packages`);if(y.existsSync(i)&&y.existsSync(_(i,`core/package.json`))){let e=Y(i,i,``,``);r.push(...e)}r.sort();let a=O.createHash(`sha256`);for(let t of r){let n=y.statSync(t),r=v(e,t).replace(/\\/g,`/`);a.update(r),a.update(n.mtimeMs.toString()),a.update(n.size.toString())}return a.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function we(e,t){return`static-loader-data${o(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${t}.json`}function Te(e,t=`/`){let n=o(e),r=n;if(t!==`/`){let e=o(t).replace(/\/$/,``);!n.startsWith(e+`/`)&&n!==e&&(r=`${e}${n}`)}return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Ee(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function X(n={},i={}){let a=process.env.MODE||process.env.NODE_ENV||n.mode||`production`,c=await T(i,`build`,a,a),l=process.cwd(),d=c.root||l,C=c.build.outDir||`dist`,E=c.base,D=Object.assign({},c.ssgOptions||{},n),{script:k=`sync`,mock:A=!1,htmlEntry:j=`index.html`,entry:M=await F(d,j),formatting:ee=`none`,includedRoutes:N=Ee,onBeforePageRender:re,onPageRendered:ie,onFinished:I,dirStyle:ce=`flat`,includeAllRoutes:L=!1,format:R=`esm`,concurrency:z=20,rootContainerId:le=`root`,routeToSourceFileMap:B={},cacheDir:V=`.boltdocs`}=D,H=D.beastiesOptions??{},ue=`docs`,de=Object.values(B);if(de.length>0){let e=de[0],t=v(d,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(ue=t[0])}let U=g(C)?C:_(d,C),W=Ce(d,ue,C),G=W.substring(0,12),K=_(d,`.vite-react-ssg-temp`,G);y.existsSync(K)&&await y.remove(K);let q=g(V)?V:_(d,V),fe=_(q,`client-hash.txt`),pe=_(q,`template-index.html`),he=!1;try{y.existsSync(fe)&&y.existsSync(pe)&&y.existsSync(U)&&y.existsSync(_(U,`assets`))&&(await y.readFile(fe,`utf-8`)).trim()===W&&(he=!0)}catch{}let ye=S(),be=ye.warn;ye.warn=(e,t)=>{e.includes(`vite:resolve`)&&e.includes(`externalized for browser compatibility`)||be(e,t)},he?(J(`Client code unchanged. Bypassing client build...`),await y.ensureDir(U),await y.copy(pe,_(U,j))):(J(`Build for client...`),await x(w(i,{build:{manifest:!0,ssrManifest:!0,...Se({input:{app:_(d,j||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:ye,mode:c.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){C=e.build.outDir||`dist`}}]})),await y.ensureDir(q),await y.copy(_(U,j),pe),await y.writeFile(fe,W,`utf-8`));let Y=()=>{};if(A){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);Y=e()}J(`Build for server...`),process.env.VITE_SSG=`true`;let X=await ve(c,M);await x(w(i,{build:{ssr:X,manifest:!0,outDir:K,minify:!1,cssCodeSplit:!1,...Se({output:R===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},mode:c.mode}));let ke=R===`esm`&&process.platform===`win32`?`file://`:``,Ae=R===`esm`?`.mjs`:`.cjs`,je=X.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Me=ke+_(K,(X.includes(`/`)||X.includes(`\\`)?X.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Ae,``):je)+Ae).replace(/\\/g,`/`),Ne=JSON.parse(await y.readFile(_(K,...xe,`manifest.json`),`utf-8`)),Pe=te===void 0?s(import.meta.url):te,{createRoot:Fe,includedRoutes:Ie}=R===`esm`?await import(Me):Pe(Me),Le=Ie||N,{routes:Re}=await Fe(!1),{paths:ze}=await _e(Re),Z=L?ze:await Le(ze,Re||[]);Z=Ee(Z,Re||[]),Z=Array.from(new Set(Z)),J(`Rendering Pages...`,Z.length);let Be=H===!1?void 0:await P(C,{publicPath:E,...H});Be&&f("Critical CSS generation enabled via `beasties`");let Ve=JSON.parse(await y.readFile(_(U,...xe,`ssr-manifest.json`),`utf-8`)),He=JSON.parse(await y.readFile(_(U,...xe,`manifest.json`),`utf-8`)),Ue=await y.readFile(_(U,j),`utf-8`);y.rmSync(_(U,j)),Ue=De(Ue,k);let We=(await import(`p-queue`)).default||await import(`p-queue`),Ge=new We({concurrency:z}),Ke=new We({concurrency:1}),qe={},Je=0,Ye=_(q,`ssg-cache.json`),Q=_(q,`ssg-pages`),$={};try{y.existsSync(Ye)&&($=await y.readJson(Ye))}catch{}let Xe={...$};for(let n of Z){let i=O.createHash(`md5`).update(n).digest(`hex`),a=_(Q,`${i}.html`),s=_(Q,`${i}.json`),c=`${(n.endsWith(`/`)?`${n}index`:n).replace(/^\//g,``)}.html`,l=ce===`nested`?_(n.replace(/^\//g,``),`index.html`):c,d=_(U,l),p=o(n).replace(/\/$/,``),m=B[p]||B[n],g=!1,v=0;if(he&&m&&y.existsSync(m))try{if(v=Math.round(y.statSync(m).mtimeMs),y.existsSync(a)){let e=$[p]||$[n];e&&Math.round(e.mtime)===v&&(g=!0)}}catch{}if(g){Ge.add(async()=>{try{await y.ensureDir(h(d)),await y.copy(a,d);let e=$[p]||$[n];if(e?.loaderDataFilePath&&y.existsSync(s)){let t=e.loaderDataFilePath;await y.ensureDir(_(U,h(t))),await y.copy(s,_(U,t)),qe[Te(n,E)]=t,Je++}f(`${u.dim(`${C}/`)}${u.cyan(l.padEnd(15,` `))} ${u.green(`(cached)`)}`)}catch(e){throw Error(`Error on cached page: ${n}\n${e.stack}`)}});continue}Ge.add(async()=>{try{let i=await Fe(!1,n),{base:c,routes:d,triggerOnSSRAppRendered:p,transformState:g=r,app:x,routerType:S}=i,w=await re?.(n,Ue,i)||Ue,T=`${t(c)}${e(n)}`,D=me(i),O=!x&&S===`remix`?await ne({routes:[...d],locationArg:T,base:c,serverManifest:Ne,manifest:He,ssrManifest:Ve}):new Set,{appHTML:k,bodyAttributes:A,htmlAttributes:j,metaAttributes:M,styleTag:te,routerContext:N}=await D.render(n),P=N?.loaderData,F;if(P&&Object.keys(P).length>0){let e=we(n,G);F=e,await y.ensureDir(_(U,h(e))),await y.writeFile(_(U,e),JSON.stringify(P)),qe[Te(n,E)]=e,Je++}await p?.(n,k,i);let I=new b(await oe({rootContainerId:le,appHTML:k,indexHTML:w,metaAttributes:M,bodyAttributes:A,htmlAttributes:j,initialState:null}));se(I.window.document,O);let ce=I.window.document;for(let e of ce.querySelectorAll(`script`))e.textContent?.includes(`window.__staticRouterHydrationData`)&&e.remove();let L=I.serialize();I.window.close();let R=await ie?.(n,L,i)||L,z=``;if(P&&Object.keys(P).length>0){let e=JSON.stringify(P).replace(/</g,`\\u003c`);z=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Te(n,E)}': ${e} };`}let B=``;if(N){let e={loaderData:N.loaderData??{},actionData:N.actionData??null,errors:N.errors??null};B=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let V=`<script>window.__VITE_REACT_SSG_HASH__ = '${G}';${z}${B}<\/script>`;R=R.replace(`<head>`,`<head>${V}`),R=R.replace(`<script>${ae}<\/script>`,``),Be&&(R=await Ke.add(()=>Be.process(R)),R=R.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),te&&(R=R.replace(`<head>`,`<head>${te}`));let H=await Oe(R,ee);if(await y.ensureDir(_(U,h(l))),await y.writeFile(_(U,l),H,`utf-8`),m&&y.existsSync(m)){await y.ensureDir(Q),await y.writeFile(a,H,`utf-8`);let e=o(n).replace(/\/$/,``),t=Math.round(v);P&&Object.keys(P).length>0&&F?(await y.writeFile(s,JSON.stringify(P),`utf-8`),Xe[e]={mtime:t,loaderDataFilePath:F}):Xe[e]={mtime:t}}f(`${u.dim(`${C}/`)}${u.cyan(l.padEnd(15,` `))} ${u.dim(ge(H))}`)}catch(e){throw Error(`Error on page: ${n}\n${e.stack}`)}})}await Ge.start().onIdle();try{if(await y.ensureDir(h(Ye)),await y.writeJson(Ye,Xe),y.existsSync(Q)){let e=await y.readdir(Q),t=new Set;for(let e of Object.keys(Xe)){let n=O.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}let n=0;for(let r of e)(r.endsWith(`.html`)||r.endsWith(`.json`))&&(t.has(r)||(await y.remove(_(Q,r)),n++));n>0&&J(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}J(`Generating static loader data...`,Je);let Ze=JSON.stringify(qe,null,0);await y.writeFile(_(U,`static-loader-data-manifest-${G}.json`),Ze),f(`${u.dim(`${C}/`)}${u.cyan(`static-loader-data-manifest-${G}.json`.padEnd(15,` `))} ${u.dim(ge(Ze))}`),await y.remove(_(d,`.vite-react-ssg-temp`)),Y();let Qe=c.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;Qe&&!Qe.disabled&&Qe.generateSW&&(J(`Regenerate PWA...`),await Qe.generateSW()),p(`Build finished.`),await I?.(C),setTimeout(()=>{m(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function De(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Oe(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 ke({template:e,ssrEntry:t,onBeforePageRender:r,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(c){let l=async(l,u,f)=>{try{let d=l.originalUrl,f=await(await c.ssrLoadModule(t).then(e=>e.createRoot))(!1,d),p=me(f),{app:m,base:h}=f,[g,_]=d.split(`?`),v=new URLSearchParams(_);if(!m&&v.has(`_data`))return p.handleLoader(l,u);let y=await c.transformIndexHtml(d,e),b=await r?.(d,y,f)||y,{appHTML:x,bodyAttributes:S,htmlAttributes:C,metaAttributes:w,styleTag:T}=await p.render(i(g,h));w.push(T);let D=await Promise.all([t,a].map(async e=>await c.moduleGraph.getModuleByUrl(e))),O=new Set,k=new Set,A=async e=>{if(!e||!e?.ssrTransformResult||k.has(e))return;k.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`))O.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await c.moduleGraph.getModuleByUrl(e);t&&await A(t)}};await Promise.all(D.map(async e=>A(e)));let j=[...O].map(e=>I(n(c.config.base,e)));w.push(...j);let M=await oe({rootContainerId:o,appHTML:x,indexHTML:b,metaAttributes:w,bodyAttributes:S,htmlAttributes:C,initialState:null}),ee=await s?.(d,M,f)||M;u.statusCode=200,u.setHeader(`Content-Type`,`text/html`),E(l,u,ee,`html`,{headers:`pluginContainer`in c?c.config.server.headers:c.config.preview.headers})}catch(e){c.ssrFixStacktrace(e),d(`SSR render error`,e),u.statusCode=500,u.end(e.stack)}};return()=>{c.middlewares.use(l)}}}}async function Ae(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await T(e,`serve`,n,n),i=process.cwd(),a=r.root||i,o={...r.ssgOptions,...t},{htmlEntry:s=`index.html`,onBeforePageRender:c,onPageRendered:l,rootContainerId:u=`root`,mock:d=!1}=o,f=o.entry||await F(a,s),[p,m]=await Promise.all([ve(r,f),ee.readFile(_(a,s),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,d){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);e()}return await C({...e,plugins:[...e.plugins??[],ke({template:m,ssrEntry:p,onBeforePageRender:c,onPageRendered:l,entry:f,rootContainerId:u})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function je(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Ae(t,e);return await r.listen(),Me(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){d(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Me(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.reset(u.bold(`${e}ms`))}`}n(`\n ${u.cyan(` VITE-REACT-SSG v${he} `)}`,{clear:!e.config.logger.hasWarned}),n(`${u.cyan(`\n VITE v${D}`)+u.dim(r)}\n`),n(u.green(` dev server running at:`)),e.printUrls()}export{X as build,Ae as createServer,je as dev};
1
+ import{a as e,c as t,i as n,n as r,o as i,r as a,s as o}from"./state-U8UuhxSd.mjs";import{createRequire as s}from"node:module";import{Fragment as c,jsx as l}from"react/jsx-runtime";import{colors as u,dividerLog as d,error as f,info as p,success as m,warn as h}from"@bdocs/dui";import g,{dirname as _,isAbsolute as v,join as y,relative as b}from"node:path";import x from"fs-extra";import{JSDOM as S}from"jsdom";import{build as C,createLogger as w,createServer as T,mergeConfig as E,resolveConfig as D,send as ee,version as O}from"vite";import k from"node:crypto";import{once as A}from"node:events";import{Readable as j,Writable as M}from"node:stream";import*as N from"react-dom/server";import P from"node:fs";import te from"node:fs/promises";var ne=s(import.meta.url);const re=/import\("([^)]+)"\)/g;async function ie({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let{matchRoutes:o}=await import(`react-router-dom`),s=o([...e],t,n),c=s?.map(e=>e.route.entry).filter(Boolean)??[],l=new Set;s?.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(re);for(let e of n)l.add(e[1].split(`/`).at(-1)??``)});let u=new Set;c.forEach(e=>u.add(e));let d=[...Object.entries(r)];l.forEach(e=>{let t=d.find(([t,n])=>n.file.endsWith(e));t&&u.add(t[0])});let f=ae(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function ae(e,t){let n=new Set;if(!t)return n;for(let r of t)F(e,r,n);return n}function F(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{F(e,t,n)}),n):n}async function oe(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 se=`/* SCRIPT_COMMENT_PLACEHOLDER */`;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=`<head>`,u=r.join(``);t=t.replace(l,l+u);let d=`<body`;t=t.replace(d,`${d} ${i}`);let f=`<html`;t=t.replace(f,`${f} ${a}`);let p=`<div id="${e}"></div>`;if(t.includes(p))return t.replace(p,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`);let m=await import(`html5parser`),h=m.parse(t),g;if(m.walk(h,{enter:r=>{if(!g&&r?.type===m.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);g=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!g)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return g}async function le(e,t=`index.html`){let[,n]=[...(await x.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 ue(e){return`<link rel="stylesheet" href="${e}">`}function de(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),I(e,t))})}function I(e,t){t.endsWith(`.js`)?R(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?R(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?R(e,{rel:`preload`,as:`font`,type:`font/woff2`,href:t,crossOrigin:``}):(t.endsWith(`.png`)||t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)||t.endsWith(`.webp`)||t.endsWith(`.gif`)||t.endsWith(`.ico`)||t.endsWith(`.svg`))&&R(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function L(e){return e.createElement(`link`)}function fe(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function R(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=L(e);fe(n,t),e.head.appendChild(n)}function pe(e,t){if(e===!1||e==null)throw f(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function me(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 he(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;pe(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:me(e.headers)};return new Request(n.href,r)}async function ge(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=j.from(n);r.pipe(t),await A(r,`end`)}else t.end()}function _e(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)}async function z(e){if(!N.renderToPipeableStream)return N.renderToString(l(c,{children:e}));let t=new ve,{pipe:n}=N.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){n(t)}});return t.getPromise()}var ve=class extends M{constructor(){super(),this._output=``,this._deferred={promise:null,resolve:()=>null,reject:()=>null},this._deferred.promise=new Promise((e,t)=>{this._deferred.resolve=e,this._deferred.reject=t})}_write(e,t,n){this._output+=e.toString(),n()}_destroy(e,t){e instanceof Error?this._deferred.reject(e):t()}end(){return this._deferred.resolve(this._output),this.destroy()}getPromise(){return this._deferred.promise}};function B(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}}const{HelmetProvider:V}=s(import.meta.url)(`react-helmet-async`);var H=class{constructor(e){this.handleLoader=async(e,t)=>{let{routes:n,base:r}=this.context,{matchRoutes:i}=await import(`react-router-dom`),o=he(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)),l=i(a([...n],e=>e),{pathname:s.pathname,search:s.search,hash:s.hash,state:null,key:`default`},r);if(!l){t.statusCode=404,t.end(`Route not found: ${c}`);return}let u=l.find(e=>e.route.id===c);if(!u){t.statusCode=404,t.end(`Route not found: ${c}`);return}let d=u.route.loader??await u.route.lazy?.().then(e=>e.loader);if(!d){t.statusCode=200,t.end(`There is no loader for the route: ${c}`);return}await ge(await ye({loader:d,params:u.params,request:o,routeId:c}),t)},this.context=e}async render(e){let{base:t,routes:n,getStyleCollector:r,routerOptions:i}=this.context,s=o(e),c=s;if(t!==`/`){let e=o(t).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let u=`http://localhost${c}`,d=new Request(u),f=r?await r():null,p={},m=null,{StaticRouterProvider:h,createStaticHandler:g,createStaticRouter:_}=await import(`react-router-dom`),v=a([...n],e=>e),{query:y}=g(v,{basename:t}),b=await y(d),x=0;for(;b instanceof Response&&x<10;){let e=b.headers.get(`Location`);if(!e)break;let t;if(/^https?:\/\//i.test(e))try{let n=new URL(e);if(n.hostname===`localhost`||n.hostname===``)t=`http://localhost${o(n.pathname+n.search+n.hash)}`;else break}catch{break}else t=`http://localhost${o(e)}`;b=await y(new Request(t)),x++}if(b instanceof Response)throw b;m=b;let S=l(V,{context:p,children:l(h,{router:_(v,m,{future:i.future}),context:m})});f&&(S=f.collect(S));let C=await z(S),{htmlAttributes:w,bodyAttributes:T,metaAttributes:E,styleTag:D}=B(C,p,f);return{appHTML:C,htmlAttributes:w,bodyAttributes:T,metaAttributes:E,styleTag:D,routerContext:m}}};async function ye({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:_e(W(n)),params:t});if(a===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 U(a)?a:i(a)}function U(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function W(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 be(e){return new H(e)}var G=`0.1.0`;function K(e,t){p(`${e}${t?u.blue(` (${t})`):``}`)}function xe(e){return`${(e.length/1024).toFixed(2)} KiB`}async function Se(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&&Te(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 Ce(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:y(e.root,t))}const we=/[:*?]/;function Te(e){return e?we.test(e):!1}const Ee=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),q=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function J(e){try{return P.statSync(e).size}catch{return 0}}async function De(e,t){let n=y(e,`.vite`),r=y(e,`assets`),i={},a=y(n,`manifest.json`);P.existsSync(a)&&(i=JSON.parse(await P.readFileSync(a,`utf-8`)));let o=0,s=0;for(let[,t]of Object.entries(i)){let{file:n,css:r=[]}=t,i=J(y(e,n));o+=i;for(let t of r)s+=J(y(e,t))}let c=0,l=0;if(P.existsSync(r)){let e=P.readdirSync(r,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=g.extname(t.name).toLowerCase(),n=y(r,t.name);Ee.has(e)?c+=J(n):q.has(e)&&l++}}let u=y(e,`index.html`),d=0,f=[];if(P.existsSync(u)){let e=J(u);d+=e,f.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}try{let t=P.readdirSync(e,{recursive:!0});for(let n of t){if(!n.endsWith(`.html`)||n===`index.html`)continue;let t=J(y(e,n));if(t>0){let e=`/`+n.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);d+=t,f.push({route:e,htmlSize:t,htmlFile:n})}}}catch{}return{buildTime:t,totalJSBundleSize:o,totalCSSBundleSize:s,totalImagesSize:c,totalHTMLSize:d,fontCount:l,pages:f}}function Oe(e,t){let n=g.resolve(e,`..`,`.boltdocs`,`reports`);P.existsSync(n)||P.mkdirSync(n,{recursive:!0});let r=y(n,`performance.json`);P.writeFileSync(r,JSON.stringify(t,null,2))}const ke=Number.parseInt(O)>=5?[`.vite`]:[];function Ae(e){return Number.parseInt(O)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Y(e,t,n,r){let i=[];if(!x.existsSync(e))return i;let a=x.readdirSync(e,{withFileTypes:!0}),o=e===t;for(let s of a){let a=s.name;if(a===`node_modules`||a===`.git`||a===`.boltdocs`||a===`.turbo`||a===`dist`||a===`coverage`||o&&(n&&a===n||r&&a===r))continue;let c=y(e,a),l=s.isDirectory();if(s.isSymbolicLink())try{l=x.statSync(c).isDirectory()}catch{continue}l?i.push(...Y(c,t,n,r)):i.push(c)}return i}function je(e,t,n){try{let r=Y(e,e,t,n),i=y(y(e,`..`),`packages`);if(x.existsSync(i)&&x.existsSync(y(i,`core/package.json`))){let e=Y(i,i,``,``);r.push(...e)}r.sort();let a=k.createHash(`sha256`);for(let t of r){let n=x.statSync(t),r=b(e,t).replace(/\\/g,`/`);a.update(r),a.update(n.mtimeMs.toString()),a.update(n.size.toString())}return a.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function Me(e,t){return`static-loader-data${o(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${t}.json`}function Ne(e,t=`/`){let n=o(e),r=n;if(t!==`/`){let e=o(t).replace(/\/$/,``);!n.startsWith(e+`/`)&&n!==e&&(r=`${e}${n}`)}return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Pe(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Fe(n={},i={}){let a=process.env.MODE||process.env.NODE_ENV||n.mode||`production`,c=await D(i,`build`,a,a),l=process.cwd(),f=c.root||l,g=c.build.outDir||`dist`,T=c.base,ee=Object.assign({},c.ssgOptions||{},n),O=performance.now(),{script:A=`sync`,mock:j=!1,htmlEntry:M=`index.html`,entry:N=await le(f,M),formatting:P=`none`,includedRoutes:te=Pe,onBeforePageRender:re,onPageRendered:ae,onFinished:F,dirStyle:ue=`flat`,includeAllRoutes:I=!1,format:L=`esm`,concurrency:fe=20,rootContainerId:R=`root`,routeToSourceFileMap:pe={},cacheDir:me=`.boltdocs/build`}=ee,he=ee.beastiesOptions??{},ge=`docs`,_e=Object.values(pe);if(_e.length>0){let e=_e[0],t=b(f,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(ge=t[0])}let z=v(g)?g:y(f,g),ve=je(f,ge,g),B=ve.substring(0,12),V=y(f,`.vite-react-ssg-temp`,B);x.existsSync(V)&&await x.remove(V);let H=v(me)?me:y(f,me),ye=y(H,`client-hash.txt`),U=y(H,`template-index.html`),W=!1;try{x.existsSync(ye)&&x.existsSync(U)&&x.existsSync(z)&&x.existsSync(y(z,`assets`))&&(await x.readFile(ye,`utf-8`)).trim()===ve&&(W=!0)}catch{}let G=w(),we=G.warn;G.warn=(e,t)=>{e.includes(`externalized for browser compatibility`)||we(e,t)};let Te=G.info;G.info=(e,t)=>{e.startsWith(`dist/`)||e.startsWith(`.vite-react-ssg-temp/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)||Te(e,t)},W?(K(`Client code unchanged. Bypassing client build...`),await x.ensureDir(z),await x.copy(U,y(z,M))):(d(),K(`Build for client...`),await C(E(i,{build:{manifest:!0,ssrManifest:!0,...Ae({input:{app:y(f,M||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:G,mode:c.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){g=e.build.outDir||`dist`}}]})),m(`Client build complete`),await x.ensureDir(H),await x.copy(y(z,M),U),await x.writeFile(ye,ve,`utf-8`)),d();let Ee=()=>{};if(j){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);Ee=e()}K(`Build for server...`),process.env.VITE_SSG=`true`;let q=await Ce(c,N);await C(E(i,{build:{ssr:q,manifest:!0,outDir:V,minify:!1,cssCodeSplit:!1,...Ae({output:L===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:G,mode:c.mode})),m(`Server build complete`);let J=L===`esm`&&process.platform===`win32`?`file://`:``,Y=L===`esm`?`.mjs`:`.cjs`,Fe=q.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Re=J+y(V,(q.includes(`/`)||q.includes(`\\`)?q.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Y,``):Fe)+Y).replace(/\\/g,`/`),ze=JSON.parse(await x.readFile(y(V,...ke,`manifest.json`),`utf-8`)),Be=ne===void 0?s(import.meta.url):ne,{createRoot:Ve,includedRoutes:He}=L===`esm`?await import(Re):Be(Re),Ue=He||te,{routes:We}=await Ve(!1),{paths:Ge}=await Se(We),X=I?Ge:await Ue(Ge,We||[]);X=Pe(X,We||[]),X=Array.from(new Set(X)),d(),K(`Rendering Pages...`,X.length);let Ke=he===!1?void 0:await oe(g,{publicPath:T,...he});Ke&&p("Critical CSS generation enabled via `beasties`");let qe=JSON.parse(await x.readFile(y(z,...ke,`ssr-manifest.json`),`utf-8`)),Je=JSON.parse(await x.readFile(y(z,...ke,`manifest.json`),`utf-8`)),Ye=await x.readFile(y(z,M),`utf-8`);x.rmSync(y(z,M)),Ye=Ie(Ye,A);let Xe=(await import(`p-queue`)).default||await import(`p-queue`),Ze=new Xe({concurrency:fe}),Qe=new Xe({concurrency:1}),$e={},et=0,tt=0,nt=0,rt=0,it=y(H,`ssg-cache.json`),Z=y(H,`ssg-pages`),Q={};try{x.existsSync(it)&&(Q=await x.readJson(it))}catch{}let at={...Q};for(let n of X){let i=k.createHash(`md5`).update(n).digest(`hex`),a=y(Z,`${i}.html`),s=y(Z,`${i}.json`),c=`${(n.endsWith(`/`)?`${n}index`:n).replace(/^\//g,``)}.html`,l=ue===`nested`?y(n.replace(/^\//g,``),`index.html`):c,u=y(z,l),d=o(n).replace(/\/$/,``),f=pe[d]||pe[n],p=!1,m=0;if(W&&f&&x.existsSync(f))try{if(m=Math.round(x.statSync(f).mtimeMs),x.existsSync(a)){let e=Q[d]||Q[n];e&&Math.round(e.mtime)===m&&(p=!0)}}catch{}if(p){Ze.add(async()=>{try{if(await x.ensureDir(_(u)),W)await x.copy(a,u);else{let e=await x.readFile(a,`utf-8`);e=e.replace(/window\.__VITE_REACT_SSG_HASH__\s*=\s*'[^']*'/,`window.__VITE_REACT_SSG_HASH__ = '${B}'`),await x.writeFile(u,e,`utf-8`)}let e=Q[d]||Q[n];if(e?.loaderDataFilePath&&x.existsSync(s)){let t=W?e.loaderDataFilePath:Me(n,B);await x.ensureDir(y(z,_(t))),await x.copy(s,y(z,t)),$e[Ne(n,T)]=t,et++}nt++}catch(e){throw Error(`Error on cached page: ${n}\n${e.stack}`)}});continue}Ze.add(async()=>{try{let i=await Ve(!1,n),{base:c,routes:u,triggerOnSSRAppRendered:d,transformState:p=r,app:h,routerType:g}=i,v=await re?.(n,Ye,i)||Ye,b=`${t(c)}${e(n)}`,C=be(i),w=!h&&g===`remix`?await ie({routes:[...u],locationArg:b,base:c,serverManifest:ze,manifest:Je,ssrManifest:qe}):new Set,{appHTML:E,bodyAttributes:D,htmlAttributes:ee,metaAttributes:O,styleTag:k,routerContext:A}=await C.render(n),j=A?.loaderData,M;if(j&&Object.keys(j).length>0){let e=Me(n,B);M=e,await x.ensureDir(y(z,_(e))),await x.writeFile(y(z,e),JSON.stringify(j)),$e[Ne(n,T)]=e,et++}await d?.(n,E,i);let N=new S(await ce({rootContainerId:R,appHTML:E,indexHTML:v,metaAttributes:O,bodyAttributes:D,htmlAttributes:ee,initialState:null}));de(N.window.document,w);let te=N.window.document;for(let e of te.querySelectorAll(`script`))e.textContent?.includes(`window.__staticRouterHydrationData`)&&e.remove();let ne=N.serialize();N.window.close();let F=await ae?.(n,ne,i)||ne,oe=``;if(j&&Object.keys(j).length>0){let e=JSON.stringify(j).replace(/</g,`\\u003c`);oe=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Ne(n,T)}': ${e} };`}let le=``;if(A){let e={loaderData:A.loaderData??{},actionData:A.actionData??null,errors:A.errors??null};le=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let ue=`<script>window.__VITE_REACT_SSG_HASH__ = '${B}';${oe}${le}<\/script>`;F=F.replace(`<head>`,`<head>${ue}`),F=F.replace(`<script>${se}<\/script>`,``),Ke&&(F=await Qe.add(()=>Ke.process(F)),F=F.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),k&&(F=F.replace(`<head>`,`<head>${k}`));let I=await Le(F,P);if(await x.ensureDir(y(z,_(l))),await x.writeFile(y(z,l),I,`utf-8`),f&&x.existsSync(f)){await x.ensureDir(Z),await x.writeFile(a,I,`utf-8`);let e=o(n).replace(/\/$/,``),t=Math.round(m);j&&Object.keys(j).length>0&&M?(await x.writeFile(s,JSON.stringify(j),`utf-8`),at[e]={mtime:t,loaderDataFilePath:M}):at[e]={mtime:t}}tt++,rt+=I.length}catch(e){throw Error(`Error on page: ${n}\n${e.stack}`)}})}await Ze.start().onIdle();let ot=tt+nt,st=(rt/1024/1024).toFixed(2);p(`${u.cyan(String(ot).padStart(3,` `))} pages rendered ${u.dim(`(${tt} new, ${nt} cached, ${st} MB)`)}`);try{if(await x.ensureDir(_(it)),await x.writeJson(it,at),x.existsSync(Z)){let e=await x.readdir(Z),t=new Set;for(let e of Object.keys(at)){let n=k.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}let n=0;for(let r of e)(r.endsWith(`.html`)||r.endsWith(`.json`))&&(t.has(r)||(await x.remove(y(Z,r)),n++));n>0&&K(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}d(),K(`Generating static loader data...`,et);let ct=JSON.stringify($e,null,0);await x.writeFile(y(z,`static-loader-data-manifest-${B}.json`),ct),p(`${u.dim(`${g}/`)}${u.cyan(`static-loader-data-manifest-${B}.json`.padEnd(15,` `))} ${u.dim(xe(ct))}`),await x.remove(y(f,`.vite-react-ssg-temp`)),Ee();let lt=c.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;lt&&!lt.disabled&&lt.generateSW&&(K(`Regenerate PWA...`),await lt.generateSW());let ut=Math.round(performance.now()-O),$=await De(z,ut);Oe(f,$),K(`Build took ${(ut/1e3).toFixed(1)}s — JS: ${($.totalJSBundleSize/1024).toFixed(0)}kb, CSS: ${($.totalCSSBundleSize/1024).toFixed(0)}kb, Pages: ${$.pages.length}`),d(),m(`Build finished.`),await F?.(g),setTimeout(()=>{h(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function Ie(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Le(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 f(`Error formatting html: ${t?.message}`),e}return e}function Re({template:e,ssrEntry:t,onBeforePageRender:r,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(c){let l=async(l,u,d)=>{try{let d=l.originalUrl,f=await(await c.ssrLoadModule(t).then(e=>e.createRoot))(!1,d),p=be(f),{app:m,base:h}=f,[g,_]=d.split(`?`),v=new URLSearchParams(_);if(!m&&v.has(`_data`))return p.handleLoader(l,u);let y=await c.transformIndexHtml(d,e),b=await r?.(d,y,f)||y,{appHTML:x,bodyAttributes:S,htmlAttributes:C,metaAttributes:w,styleTag:T}=await p.render(i(g,h));w.push(T);let E=await Promise.all([t,a].map(async e=>await c.moduleGraph.getModuleByUrl(e))),D=new Set,O=new Set,k=async e=>{if(!e||!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 c.moduleGraph.getModuleByUrl(e);t&&await k(t)}};await Promise.all(E.map(async e=>k(e)));let A=[...D].map(e=>ue(n(c.config.base,e)));w.push(...A);let j=await ce({rootContainerId:o,appHTML:x,indexHTML:b,metaAttributes:w,bodyAttributes:S,htmlAttributes:C,initialState:null}),M=await s?.(d,j,f)||j;u.statusCode=200,u.setHeader(`Content-Type`,`text/html`),ee(l,u,M,`html`,{headers:`pluginContainer`in c?c.config.server.headers:c.config.preview.headers})}catch(e){c.ssrFixStacktrace(e),f(`SSR render error`,e),u.statusCode=500,u.end(e.stack)}};return()=>{c.middlewares.use(l)}}}}async function ze(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await D(e,`serve`,n,n),i=process.cwd(),a=r.root||i,o={...r.ssgOptions,...t},{htmlEntry:s=`index.html`,onBeforePageRender:c,onPageRendered:l,rootContainerId:u=`root`,mock:d=!1}=o,f=o.entry||await le(a,s),[p,m]=await Promise.all([Ce(r,f),te.readFile(y(a,s),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,d){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);e()}return await T({...e,plugins:[...e.plugins??[],Re({template:m,ssrEntry:p,onBeforePageRender:c,onPageRendered:l,entry:f,rootContainerId:u})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function Be(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await ze(t,e);return await r.listen(),Ve(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){f(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Ve(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.reset(u.bold(`${e}ms`))}`}n(`\n ${u.cyan(` VITE-REACT-SSG v${G} `)}`,{clear:!e.config.logger.hasWarned}),n(`${u.cyan(`\n VITE v${O}`)+u.dim(r)}\n`),n(u.green(` dev server running at:`)),e.printUrls()}export{Fe as build,ze as createServer,Be as dev};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bdocs/ssg",
3
3
  "type": "module",
4
- "version": "0.0.7",
4
+ "version": "0.1.0",
5
5
  "description": "A Vite plugin for static site generation (SSG) with React.",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
@@ -88,7 +88,7 @@
88
88
  "p-queue": "^9.1.2",
89
89
  "react-helmet-async": "^2.0.1",
90
90
  "yargs": "^17.7.2",
91
- "@bdocs/dui": "0.1.1"
91
+ "@bdocs/dui": "0.1.2"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@ririd/eslint-config": "^2.1.1",