@bdocs/ssg 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
1
  Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-OWuAHBHy.cjs`);let n=require(`react-helmet-async`);n=e.t(n);let r=require(`react/jsx-runtime`),i=require(`react-router-dom`),a=require(`react-dom`);a=e.t(a,1);let o=require(`react`);const s={...a},{version:c,render:l,hydrate:u}=s,d=Number((c||``).split(`.`)[0])>17,f=Number((c||``).split(`.`)[0])>18;function p(e,t,n={}){let{useLegacyRender:r}=n;if(r||!d)l(e,t);else if(f)import(`react-dom/client`).then(({createRoot:n})=>{n(t).render(e)});else{s.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!0;let{createRoot:n}=s;if(!n)throw Error(`createRoot not found`);let r=n(t);s.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!1,r.render(e)}}function m(e,t,n={}){let{useLegacyRender:r}=n;if(r||!d)u(e,t);else if(f)import(`react-dom/client`).then(({hydrateRoot:n})=>{n(t,e)});else{s.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!0;let{hydrateRoot:n}=s;if(!n)throw Error(`hydrateRoot not found`);n(t,e),s.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!1}}function h(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function g(){let[e,t]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{t(!0)},[]),e}function _({children:e,fallback:t}){if(g()){if(typeof e!=`function`&&process.env.NODE_ENV===`development`)throw Error(`vite-react-ssg error: The children of <ClientOnly> must be a "render function", e.g. <ClientOnly>{() => <span>{window.location.href}</span>}</ClientOnly>.
2
- Current type: ${(0,o.isValidElement)(e)?`React element`:typeof e}`);return(0,r.jsx)(r.Fragment,{children:e?.()})}return t??null}const v=n,y=v.Helmet||v.default?.Helmet||(()=>null);function b(e){return(0,r.jsx)(y,{...e})}const{HelmetProvider:x}=n;function S(e,n,a={}){let{transformState:o,rootContainer:s=`#root`,ssrWhenDev:c,getStyleCollector:l=null}=a;process.env.NODE_ENV===`development`&&c!==void 0&&console.warn("[vite-react-ssg] `ssrWhenDev` option is no longer needed. If you want to use csr, just replace `vite-react-ssg dev` with `vite`.");let u=typeof window<`u`,d=e.basename??`/`,{v7_startTransition:f=!0,...g}=e.future??{};async function _(r=!1,a){let s=e.customCreateRouter??i.createBrowserRouter,c=r?s(t.r(e.routes,v),{future:g}):void 0,f=[],p=r?()=>{}:e=>f.push(e),m={isClient:u,routes:e.routes,router:c,routerOptions:e,onSSRAppRendered:p,triggerOnSSRAppRendered:()=>Promise.all(f.map(e=>e())),initialState:{},transformState:o,routePath:a,base:d,getStyleCollector:l,routerType:`remix`};r&&(await h(),m.initialState=o?.(window.__INITIAL_STATE__||{})||t.t(window.__INITIAL_STATE__)),await n?.(m);let _=m.initialState;return{...m,initialState:_}}return u&&(async()=>{let t=typeof s==`string`?document.querySelector(s):s;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let n=(0,i.matchRoutes)(e.routes,window.location)?.filter(e=>e.route.lazy);n&&n?.length>0&&await Promise.all(n.map(async e=>{let t=await e.route.lazy();Object.assign(e.route,{...t,lazy:void 0})}));let o=await _(!0);window.__VITE_REACT_SSG_CONTEXT__=o;let{router:c}=o,l=(0,r.jsx)(x,{children:(0,r.jsx)(i.RouterProvider,{router:c})});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?p(l,t,a):m(l,t,a)})(),_;function v(e){return document.querySelector(`[data-server-rendered=true]`)===null||(e.loader=async({request:n})=>{if(process.env.NODE_ENV===`development`){let t=`_data=${encodeURIComponent(e.id)}`,r=n.url.includes(`?`)?`${n.url}&${t}`:`${n.url}?${t}`;return fetch(r)}else{if(!window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__){let e=t.i(d,`static-loader-data-manifest-${window.__VITE_REACT_SSG_HASH__}.json`);window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__=await(await fetch(t.s(e))).json()}let{url:r}=n,{pathname:i}=new URL(r),a=window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__?.[i];if(!a)return null;if(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__||(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__={}),!window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]){let e=t.i(d,a);window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]=await(await fetch(t.s(e))).json()}return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]?.[e.id]??null}}),e}}exports.ClientOnly=_,exports.Head=b,exports.ViteReactSSG=S;
2
+ Current type: ${(0,o.isValidElement)(e)?`React element`:typeof e}`);return(0,r.jsx)(r.Fragment,{children:e?.()})}return t??null}const v=n,y=v.Helmet||v.default?.Helmet||(()=>null);function b(e){return(0,r.jsx)(y,{...e})}const{HelmetProvider:x}=n,S=Date.now();function C(e,n,a={}){let{transformState:o,rootContainer:s=`#root`,ssrWhenDev:c,getStyleCollector:l=null}=a;process.env.NODE_ENV===`development`&&c!==void 0&&console.warn("[vite-react-ssg] `ssrWhenDev` option is no longer needed. If you want to use csr, just replace `vite-react-ssg dev` with `vite`.");let u=typeof window<`u`,d=e.basename??`/`,{v7_startTransition:f=!0,...g}=e.future??{};async function _(r=!1,a){let s=e.customCreateRouter??i.createBrowserRouter,c=r?s(t.r(e.routes,v),{future:g}):void 0,f=[],p=r?()=>{}:e=>f.push(e),m={isClient:u,routes:e.routes,router:c,routerOptions:e,onSSRAppRendered:p,triggerOnSSRAppRendered:()=>Promise.all(f.map(e=>e())),initialState:{},transformState:o,routePath:a,base:d,getStyleCollector:l,routerType:`remix`};r&&(await h(),m.initialState=o?.(window.__INITIAL_STATE__||{})||t.t(window.__INITIAL_STATE__)),await n?.(m);let _=m.initialState;return{...m,initialState:_}}return u&&(async()=>{let t=typeof s==`string`?document.querySelector(s):s;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let n=(0,i.matchRoutes)(e.routes,window.location)?.filter(e=>e.route.lazy);n&&n?.length>0&&await Promise.all(n.map(async e=>{let t=await e.route.lazy();Object.assign(e.route,{...t,lazy:void 0})}));let o=await _(!0);window.__VITE_REACT_SSG_CONTEXT__=o;let{router:c}=o,l=(0,r.jsx)(x,{children:(0,r.jsx)(i.RouterProvider,{router:c})});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?p(l,t,a):m(l,t,a)})(),_;function v(e){return document.querySelector(`[data-server-rendered=true]`)===null||(e.loader=async({request:n})=>{if(process.env.NODE_ENV===`development`){let t=`_data=${encodeURIComponent(e.id)}`,r=n.url.includes(`?`)?`${n.url}&${t}`:`${n.url}?${t}`;return fetch(r)}else{if(!window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__){let e=t.i(d,`static-loader-data-manifest-${window.__VITE_REACT_SSG_HASH__}.json`);try{let n=await fetch(`${t.s(e)}?t=${S}`);n.ok?window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__=await n.json():(console.error(`[vite-react-ssg] Failed to fetch static loader manifest: ${n.status} ${n.statusText}`),window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__={})}catch(e){console.error(`[vite-react-ssg] Error loading static loader manifest:`,e),window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__={}}}let{url:r}=n,{pathname:i}=new URL(r),a=window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__?.[i];if(!a)return null;if(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__||(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__={}),!window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]){let e=t.i(d,a);try{let n=await fetch(`${t.s(e)}?t=${S}`);n.ok?window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]=await n.json():(console.error(`[vite-react-ssg] Failed to fetch loader data for ${i}: ${n.status} ${n.statusText}`),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]={})}catch(e){console.error(`[vite-react-ssg] Error loading loader data for ${i}:`,e),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]={}}}return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[i]?.[e.id]??null}}),e}}exports.ClientOnly=_,exports.Head=b,exports.ViteReactSSG=C;
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  import{i as e,r as t,s as n,t as r}from"./state-BLI6QppB.mjs";import*as i from"react-helmet-async";import{Fragment as a,jsx as o}from"react/jsx-runtime";import{RouterProvider as s,createBrowserRouter as c,matchRoutes as l}from"react-router-dom";import*as u from"react-dom";import{isValidElement as d,useEffect as f,useState as p}from"react";const m={...u},{version:h,render:g,hydrate:_}=m,v=Number((h||``).split(`.`)[0])>17,y=Number((h||``).split(`.`)[0])>18;function b(e,t,n={}){let{useLegacyRender:r}=n;if(r||!v)g(e,t);else if(y)import(`react-dom/client`).then(({createRoot:n})=>{n(t).render(e)});else{m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!0;let{createRoot:n}=m;if(!n)throw Error(`createRoot not found`);let r=n(t);m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!1,r.render(e)}}function x(e,t,n={}){let{useLegacyRender:r}=n;if(r||!v)_(e,t);else if(y)import(`react-dom/client`).then(({hydrateRoot:n})=>{n(t,e)});else{m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!0;let{hydrateRoot:n}=m;if(!n)throw Error(`hydrateRoot not found`);n(t,e),m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!1}}function S(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function C(){let[e,t]=p(!1);return f(()=>{t(!0)},[]),e}function w({children:e,fallback:t}){if(C()){if(typeof e!=`function`&&process.env.NODE_ENV===`development`)throw Error(`vite-react-ssg error: The children of <ClientOnly> must be a "render function", e.g. <ClientOnly>{() => <span>{window.location.href}</span>}</ClientOnly>.
2
- Current type: ${d(e)?`React element`:typeof e}`);return o(a,{children:e?.()})}return t??null}const T=i,E=T.Helmet||T.default?.Helmet||(()=>null);function D(e){return o(E,{...e})}const{HelmetProvider:O}=i;function k(i,a,u={}){let{transformState:d,rootContainer:f=`#root`,ssrWhenDev:p,getStyleCollector:m=null}=u;process.env.NODE_ENV===`development`&&p!==void 0&&console.warn("[vite-react-ssg] `ssrWhenDev` option is no longer needed. If you want to use csr, just replace `vite-react-ssg dev` with `vite`.");let h=typeof window<`u`,g=i.basename??`/`,{v7_startTransition:_=!0,...v}=i.future??{};async function y(e=!1,n){let o=i.customCreateRouter??c,s=e?o(t(i.routes,C),{future:v}):void 0,l=[],u=e?()=>{}:e=>l.push(e),f={isClient:h,routes:i.routes,router:s,routerOptions:i,onSSRAppRendered:u,triggerOnSSRAppRendered:()=>Promise.all(l.map(e=>e())),initialState:{},transformState:d,routePath:n,base:g,getStyleCollector:m,routerType:`remix`};e&&(await S(),f.initialState=d?.(window.__INITIAL_STATE__||{})||r(window.__INITIAL_STATE__)),await a?.(f);let p=f.initialState;return{...f,initialState:p}}return h&&(async()=>{let e=typeof f==`string`?document.querySelector(f):f;if(!e){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let t=l(i.routes,window.location)?.filter(e=>e.route.lazy);t&&t?.length>0&&await Promise.all(t.map(async e=>{let t=await e.route.lazy();Object.assign(e.route,{...t,lazy:void 0})}));let n=await y(!0);window.__VITE_REACT_SSG_CONTEXT__=n;let{router:r}=n,a=o(O,{children:o(s,{router:r})});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?b(a,e,u):x(a,e,u)})(),y;function C(t){return document.querySelector(`[data-server-rendered=true]`)===null||(t.loader=async({request:r})=>{if(process.env.NODE_ENV===`development`){let e=`_data=${encodeURIComponent(t.id)}`,n=r.url.includes(`?`)?`${r.url}&${e}`:`${r.url}?${e}`;return fetch(n)}else{if(!window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__){let t=e(g,`static-loader-data-manifest-${window.__VITE_REACT_SSG_HASH__}.json`);window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__=await(await fetch(n(t))).json()}let{url:i}=r,{pathname:a}=new URL(i),o=window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__?.[a];if(!o)return null;if(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__||(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__={}),!window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]){let t=e(g,o);window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]=await(await fetch(n(t))).json()}return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]?.[t.id]??null}}),t}}export{w as ClientOnly,D as Head,k as ViteReactSSG};
2
+ Current type: ${d(e)?`React element`:typeof e}`);return o(a,{children:e?.()})}return t??null}const T=i,E=T.Helmet||T.default?.Helmet||(()=>null);function D(e){return o(E,{...e})}const{HelmetProvider:O}=i,k=Date.now();function A(i,a,u={}){let{transformState:d,rootContainer:f=`#root`,ssrWhenDev:p,getStyleCollector:m=null}=u;process.env.NODE_ENV===`development`&&p!==void 0&&console.warn("[vite-react-ssg] `ssrWhenDev` option is no longer needed. If you want to use csr, just replace `vite-react-ssg dev` with `vite`.");let h=typeof window<`u`,g=i.basename??`/`,{v7_startTransition:_=!0,...v}=i.future??{};async function y(e=!1,n){let o=i.customCreateRouter??c,s=e?o(t(i.routes,C),{future:v}):void 0,l=[],u=e?()=>{}:e=>l.push(e),f={isClient:h,routes:i.routes,router:s,routerOptions:i,onSSRAppRendered:u,triggerOnSSRAppRendered:()=>Promise.all(l.map(e=>e())),initialState:{},transformState:d,routePath:n,base:g,getStyleCollector:m,routerType:`remix`};e&&(await S(),f.initialState=d?.(window.__INITIAL_STATE__||{})||r(window.__INITIAL_STATE__)),await a?.(f);let p=f.initialState;return{...f,initialState:p}}return h&&(async()=>{let e=typeof f==`string`?document.querySelector(f):f;if(!e){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let t=l(i.routes,window.location)?.filter(e=>e.route.lazy);t&&t?.length>0&&await Promise.all(t.map(async e=>{let t=await e.route.lazy();Object.assign(e.route,{...t,lazy:void 0})}));let n=await y(!0);window.__VITE_REACT_SSG_CONTEXT__=n;let{router:r}=n,a=o(O,{children:o(s,{router:r})});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?b(a,e,u):x(a,e,u)})(),y;function C(t){return document.querySelector(`[data-server-rendered=true]`)===null||(t.loader=async({request:r})=>{if(process.env.NODE_ENV===`development`){let e=`_data=${encodeURIComponent(t.id)}`,n=r.url.includes(`?`)?`${r.url}&${e}`:`${r.url}?${e}`;return fetch(n)}else{if(!window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__){let t=e(g,`static-loader-data-manifest-${window.__VITE_REACT_SSG_HASH__}.json`);try{let e=await fetch(`${n(t)}?t=${k}`);e.ok?window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__=await e.json():(console.error(`[vite-react-ssg] Failed to fetch static loader manifest: ${e.status} ${e.statusText}`),window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__={})}catch(e){console.error(`[vite-react-ssg] Error loading static loader manifest:`,e),window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__={}}}let{url:i}=r,{pathname:a}=new URL(i),o=window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__?.[a];if(!o)return null;if(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__||(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__={}),!window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]){let t=e(g,o);try{let e=await fetch(`${n(t)}?t=${k}`);e.ok?window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]=await e.json():(console.error(`[vite-react-ssg] Failed to fetch loader data for ${a}: ${e.status} ${e.statusText}`),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]={})}catch(e){console.error(`[vite-react-ssg] Error loading loader data for ${a}:`,e),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]={}}}return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[a]?.[t.id]??null}}),t}}export{w as ClientOnly,D as Head,A as ViteReactSSG};
package/dist/node.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-OWuAHBHy.cjs`);let n=require(`react/jsx-runtime`),r=require(`node:module`),i=require(`node:path`),a=require(`fs-extra`);a=e.t(a,1);let o=require(`jsdom`),s=require(`kolorist`),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 ee({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 b(e,t=`index.html`){let[,n]=[...(await a.default.readFile((0,i.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 x(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),ne(e,t))})}function ne(e,t){t.endsWith(`.js`)?w(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?w(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?w(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`))&&w(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function S(e){return e.createElement(`link`)}function C(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function w(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=S(e);C(n,t),e.head.appendChild(n)}function T(e,t){if(e===!1||e==null)throw console.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 E(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 D(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;T(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:E(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,r.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=D(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=`http://localhost${t.s(e)}`,c=new Request(s),l=a?await a():null,u={},d=null,{StaticRouterProvider:f,createStaticHandler:p,createStaticRouter:m}=await import(`react-router-dom`),h=t.r([...i],e=>e),{query:g}=p(h,{basename:r}),_=await g(c);if(_ instanceof Response)throw _;d=_;let v=(0,n.jsx)(re,{context:u,children:(0,n.jsx)(f,{router:m(h,d,{future:o.future}),context:d})});l&&(v=l.collect(v));let y=await A(v),{htmlAttributes:ee,bodyAttributes:b,metaAttributes:x,styleTag:te}=M(y,u,l);return{appHTML:y,htmlAttributes:ee,bodyAttributes:b,metaAttributes:x,styleTag:te,routerContext:d}}};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.3`;function R(e,t){console.log(`\n${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.yellow)(e)}${t?(0,s.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){return e!=null&&(e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)),e}}async function oe(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:(0,i.join)(e.root,t))}const B=/[:*?]/;function V(e){return e?B.test(e):!1}const se=Number.parseInt(c.version)>=5?[`.vite`]:[];function ce(e){return Number.parseInt(c.version)>=8?{rolldownOptions:e}:{rollupOptions:e}}function H(e,t,n,r){let o=[];if(!a.default.existsSync(e))return o;let s=a.default.readdirSync(e);for(let c of s){let s=(0,i.join)(e,c),l=(0,i.relative)(t,s).replace(/\\/g,`/`),u=a.default.statSync(s);l.startsWith(`node_modules/`)||l===`node_modules`||l.startsWith(`.git/`)||l===`.git`||l.startsWith(`.boltdocs/`)||l===`.boltdocs`||l.startsWith(`.turbo/`)||l===`.turbo`||l.startsWith(`${r}/`)||l===r||l.startsWith(`${n}/`)||l===n||(u.isDirectory()?o.push(...H(s,t,n,r)):o.push(s))}return o}function le(e,t,n){try{let r=H(e,e,t,n);r.sort();let o=l.default.createHash(`sha256`);for(let t of r){let n=a.default.statSync(t),r=(0,i.relative)(e,t).replace(/\\/g,`/`);o.update(r),o.update(n.mtimeMs.toString()),o.update(n.size.toString())}return o.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function ue(e,n){return`static-loader-data${t.s(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function de(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function U(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:x=`sync`,mock:ne=!1,htmlEntry:S=`index.html`,entry:C=await b(p,S),formatting:w=`none`,includedRoutes:T=de,onBeforePageRender:E,onPageRendered:D,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,i.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(I=t[0])}let B=(0,i.isAbsolute)(m)?m:(0,i.join)(p,m),V=le(p,I,m),H=V.substring(0,12),U=(0,i.join)(p,`.vite-react-ssg-temp`,H);a.default.existsSync(U)&&await a.default.remove(U);let W=(0,i.isAbsolute)(P)?P:(0,i.join)(p,P),G=(0,i.join)(W,`client-hash.txt`),K=(0,i.join)(W,`template-index.html`),q=!1;try{a.default.existsSync(G)&&a.default.existsSync(K)&&a.default.existsSync(B)&&(await a.default.readFile(G,`utf-8`)).trim()===V&&(q=!0)}catch{}let me=(0,c.createLogger)(),he=me.warn;me.warn=(e,t)=>{e.includes(`vite:resolve`)&&e.includes(`externalized for browser compatibility`)||he(e,t)},q?(R(`Client code unchanged. Bypassing client build...`),await a.default.ensureDir(B),await a.default.copy(K,(0,i.join)(B,S))):(R(`Build for client...`),await(0,c.build)((0,c.mergeConfig)(n,{build:{manifest:!0,ssrManifest:!0,...ce({input:{app:(0,i.join)(p,S||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:me,mode:d.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){m=e.build.outDir||`dist`}}]})),await a.default.ensureDir(W),await a.default.copy((0,i.join)(B,S),K),await a.default.writeFile(G,V,`utf-8`));let ge=()=>{};if(ne){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));ge=e()}R(`Build for server...`),process.env.VITE_SSG=`true`;let J=await oe(d,C);await(0,c.build)((0,c.mergeConfig)(n,{build:{ssr:J,manifest:!0,outDir:U,minify:!1,cssCodeSplit:!1,...ce({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 _e=j===`esm`&&process.platform===`win32`?`file://`:``,ve=j===`esm`?`.mjs`:`.cjs`,ye=J.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),be=_e+(0,i.join)(U,(J.includes(`/`)||J.includes(`\\`)?J.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(ve,``):ye)+ve).replace(/\\/g,`/`),xe=JSON.parse(await a.default.readFile((0,i.join)(U,...se,`manifest.json`),`utf-8`)),Se=typeof require<`u`?require:(0,r.createRequire)(require(`url`).pathToFileURL(__filename).href),{createRoot:Ce,includedRoutes:we}=j===`esm`?await import(be):Se(be),Te=we||T,{routes:Ee}=await Ce(!1),{paths:De}=await z(Ee),Y=A?De:await Te(De,Ee||[]);Y=de(Y,Ee||[]),Y=Array.from(new Set(Y)),R(`Rendering Pages...`,Y.length);let Oe=F===!1?void 0:await v(m,{publicPath:g,...F});Oe&&console.log(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.blue)("Critical CSS generation enabled via `beasties`")}`);let ke=JSON.parse(await a.default.readFile((0,i.join)(B,...se,`ssr-manifest.json`),`utf-8`)),Ae=JSON.parse(await a.default.readFile((0,i.join)(B,...se,`manifest.json`),`utf-8`)),X=await a.default.readFile((0,i.join)(B,S),`utf-8`);a.default.rmSync((0,i.join)(B,S)),X=fe(X,x);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,i.join)(W,`ssg-cache.json`),Z=(0,i.join)(W,`ssg-pages`),Q={};try{a.default.existsSync(Ie)&&(Q=await a.default.readJson(Ie))}catch{}let Le={...Q};for(let e of Y){let n=l.default.createHash(`md5`).update(e).digest(`hex`),r=(0,i.join)(Z,`${n}.html`),c=(0,i.join)(Z,`${n}.json`),u=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`,f=k===`nested`?(0,i.join)(e.replace(/^\//g,``),`index.html`):u,p=(0,i.join)(B,f),g=t.s(e).replace(/\/$/,``),_=N[g]||N[e],v=!1,b=0;if(q&&_&&a.default.existsSync(_))try{if(b=Math.round(a.default.statSync(_).mtimeMs),a.default.existsSync(r)){let t=Q[g]||Q[e];t&&Math.round(t.mtime)===b&&(v=!0)}}catch{}if(v){Me.add(async()=>{try{await a.default.ensureDir((0,i.dirname)(p)),await a.default.copy(r,p);let n=Q[g]||Q[e];if(n?.loaderDataFilePath&&a.default.existsSync(c)){let r=n.loaderDataFilePath;await a.default.ensureDir((0,i.join)(B,(0,i.dirname)(r))),await a.default.copy(c,(0,i.join)(B,r)),Pe[t.s(e)]=r,Fe++}d.logger.info(`${(0,s.dim)(`${m}/`)}${(0,s.cyan)(f.padEnd(15,` `))} ${(0,s.green)(`(cached)`)}`)}catch(t){throw Error(`${(0,s.gray)(`[vite-react-ssg]`)} Error on cached page: ${(0,s.cyan)(e)}\n${t.stack}`)}});continue}Me.add(async()=>{try{let n=await Ce(!1,e),{base:l,routes:u,triggerOnSSRAppRendered:p,transformState:g=t.n,app:v,routerType:x}=n,ne=await E?.(e,X,n)||X,S=`${t.c(l)}${t.a(e)}`,C=ie(n),T=!v&&x===`remix`?await h({routes:[...u],locationArg:S,base:l,serverManifest:xe,manifest:Ae,ssrManifest:ke}):new Set,{appHTML:O,bodyAttributes:k,htmlAttributes:A,metaAttributes:j,styleTag:M,routerContext:N}=await C.render(e),P=N?.loaderData,F;if(P&&Object.keys(P).length>0){let n=ue(e,H);F=n,await a.default.ensureDir((0,i.join)(B,(0,i.dirname)(n))),await a.default.writeFile((0,i.join)(B,n),JSON.stringify(P)),Pe[t.s(e)]=n,Fe++}await p?.(e,O,n);let I=new o.JSDOM(await ee({rootContainerId:re,appHTML:O,indexHTML:ne,metaAttributes:j,bodyAttributes:k,htmlAttributes:A,initialState:null}));te(I.window.document,T);let L=I.serialize();I.window.close();let R=await D?.(e,L,n)||L;R=R.replace(y,`window.__VITE_REACT_SSG_HASH__ = '${H}'`),Oe&&(R=await Ne.add(()=>Oe.process(R)),R=R.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),M&&(R=R.replace(`<head>`,`<head>${M}`));let z=await pe(R,w);if(await a.default.ensureDir((0,i.join)(B,(0,i.dirname)(f))),await a.default.writeFile((0,i.join)(B,f),z,`utf-8`),_&&a.default.existsSync(_)){await a.default.ensureDir(Z),await a.default.writeFile(r,z,`utf-8`);let n=t.s(e).replace(/\/$/,``),i=Math.round(b);P&&Object.keys(P).length>0&&F?(await a.default.writeFile(c,JSON.stringify(P),`utf-8`),Le[n]={mtime:i,loaderDataFilePath:F}):Le[n]={mtime:i}}d.logger.info(`${(0,s.dim)(`${m}/`)}${(0,s.cyan)(f.padEnd(15,` `))} ${(0,s.dim)(ae(z))}`)}catch(t){throw Error(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.red)(`Error on page: ${(0,s.cyan)(e)}`)}\n${t.stack}`)}})}await Me.start().onIdle();try{if(await a.default.ensureDir((0,i.dirname)(Ie)),await a.default.writeJson(Ie,Le),a.default.existsSync(Z)){let e=await a.default.readdir(Z),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 a.default.remove((0,i.join)(Z,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 a.default.writeFile((0,i.join)(B,`static-loader-data-manifest-${H}.json`),Re),d.logger.info(`${(0,s.dim)(`${m}/`)}${(0,s.cyan)(`static-loader-data-manifest-${H}.json`.padEnd(15,` `))} ${(0,s.dim)(ae(Re))}`),await a.default.remove((0,i.join)(p,`.vite-react-ssg-temp`)),ge();let $=d.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;$&&!$.disabled&&$.generateSW&&(R(`Regenerate PWA...`),await $.generateSW()),console.log(`\n${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.green)(`Build finished.`)}`),await O?.(m),setTimeout(()=>{console.log(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.yellow)(`Build process still running after 15s`)}. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function fe(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function pe(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 console.error(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.red)(`Error formatting html: ${t?.message}`)}`),e}return e}function W({template:e,ssrEntry:n,onBeforePageRender:r,entry:i,rootContainerId:a,onPageRendered:o}){return{name:`vite-react-ssg:dev-server`,configureServer(s){let l=async(l,u,d)=>{try{let d=l.originalUrl,f=await(await s.ssrLoadModule(n).then(e=>e.createRoot))(!1,d),p=ie(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 s.transformIndexHtml(d,e),b=await r?.(d,y,f)||y,{appHTML:te,bodyAttributes:ne,htmlAttributes:S,metaAttributes:C,styleTag:w}=await p.render(t.o(g,h));C.push(w);let T=await Promise.all([n,i].map(async e=>await s.moduleGraph.getModuleByUrl(e))),E=new Set,D=new Set,O=async e=>{if(!e||!e?.ssrTransformResult||D.has(e))return;D.add(e);let{deps:t=[],dynamicDeps:n=[]}=e?.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))E.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await s.moduleGraph.getModuleByUrl(e);t&&await O(t)}};await Promise.all(T.map(async e=>O(e)));let k=[...E].map(e=>x(t.i(s.config.base,e)));C.push(...k);let A=await ee({rootContainerId:a,appHTML:te,indexHTML:b,metaAttributes:C,bodyAttributes:ne,htmlAttributes:S,initialState:null}),j=await o?.(d,A,f)||A;u.statusCode=200,u.setHeader(`Content-Type`,`text/html`),(0,c.send)(l,u,j,`html`,{headers:`pluginContainer`in s?s.config.server.headers:s.config.preview.headers})}catch(e){s.ssrFixStacktrace(e),console.error(`[vite-react-ssg] error: ${e.stack}`),u.statusCode=500,u.end(e.stack)}};return()=>{s.middlewares.use(l)}}}}async function G(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await(0,c.resolveConfig)(e,`serve`,n,n),a=process.cwd(),o=r.root||a,s={...r.ssgOptions,...t},{htmlEntry:l=`index.html`,onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:m=!1}=s,h=s.entry||await b(o,l),[g,_]=await Promise.all([oe(r,h),p.default.readFile((0,i.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??[],W({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 K(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await G(t,e);return await r.listen(),q(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){console.error(`${(0,s.red)(`failed to start server. error:`)}\n${e.stack}`),process.exit(1)}}function q(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 ${(0,s.reset)((0,s.bold)(`${e}ms`))}`}n(`\n ${(0,s.bgLightCyan)(` VITE-REACT-SSG v${L} `)}`,{clear:!e.config.logger.hasWarned}),n(`${(0,s.cyan)(`\n VITE v${c.version}`)+(0,s.dim)(r)}\n`),n((0,s.green)(` dev server running at:`)),e.printUrls()}exports.build=U,exports.createServer=G,exports.dev=K;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-OWuAHBHy.cjs`);let n=require(`react/jsx-runtime`),r=require(`node:module`),i=require(`node:path`),a=require(`fs-extra`);a=e.t(a,1);let o=require(`jsdom`),s=require(`kolorist`),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 ee({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 b(e,t=`index.html`){let[,n]=[...(await a.default.readFile((0,i.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 x(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),ne(e,t))})}function ne(e,t){t.endsWith(`.js`)?w(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?w(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?w(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`))&&w(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function S(e){return e.createElement(`link`)}function C(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function w(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=S(e);C(n,t),e.head.appendChild(n)}function T(e,t){if(e===!1||e==null)throw console.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 E(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 D(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;T(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:E(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,r.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=D(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=`http://localhost${t.s(e)}`,c=new Request(s),l=a?await a():null,u={},d=null,{StaticRouterProvider:f,createStaticHandler:p,createStaticRouter:m}=await import(`react-router-dom`),h=t.r([...i],e=>e),{query:g}=p(h,{basename:r}),_=await g(c);if(_ instanceof Response){let e=_.headers.get(`Location`);if(e){let n=`http://localhost${t.s(e)}`;_=await g(new Request(n))}}if(_ instanceof Response)throw _;d=_;let v=(0,n.jsx)(re,{context:u,children:(0,n.jsx)(f,{router:m(h,d,{future:o.future}),context:d})});l&&(v=l.collect(v));let y=await A(v),{htmlAttributes:ee,bodyAttributes:b,metaAttributes:x,styleTag:te}=M(y,u,l);return{appHTML:y,htmlAttributes:ee,bodyAttributes:b,metaAttributes:x,styleTag:te,routerContext:d}}};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.4`;function R(e,t){console.log(`\n${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.yellow)(e)}${t?(0,s.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,i.join)(e.root,t))}const B=/[:*?]/;function V(e){return e?B.test(e):!1}const se=Number.parseInt(c.version)>=5?[`.vite`]:[];function ce(e){return Number.parseInt(c.version)>=8?{rolldownOptions:e}:{rollupOptions:e}}function H(e,t,n,r){let o=[];if(!a.default.existsSync(e))return o;let s=a.default.readdirSync(e);for(let c of s){let s=(0,i.join)(e,c),l=(0,i.relative)(t,s).replace(/\\/g,`/`),u=a.default.statSync(s);l.startsWith(`node_modules/`)||l===`node_modules`||l.startsWith(`.git/`)||l===`.git`||l.startsWith(`.boltdocs/`)||l===`.boltdocs`||l.startsWith(`.turbo/`)||l===`.turbo`||l.startsWith(`${r}/`)||l===r||l.startsWith(`${n}/`)||l===n||(u.isDirectory()?o.push(...H(s,t,n,r)):o.push(s))}return o}function le(e,t,n){try{let r=H(e,e,t,n);r.sort();let o=l.default.createHash(`sha256`);for(let t of r){let n=a.default.statSync(t),r=(0,i.relative)(e,t).replace(/\\/g,`/`);o.update(r),o.update(n.mtimeMs.toString()),o.update(n.size.toString())}return o.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function ue(e,n){return`static-loader-data${t.s(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function de(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function U(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:x=`sync`,mock:ne=!1,htmlEntry:S=`index.html`,entry:C=await b(p,S),formatting:w=`none`,includedRoutes:T=de,onBeforePageRender:E,onPageRendered:D,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,i.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(I=t[0])}let B=(0,i.isAbsolute)(m)?m:(0,i.join)(p,m),V=le(p,I,m),H=V.substring(0,12),U=(0,i.join)(p,`.vite-react-ssg-temp`,H);a.default.existsSync(U)&&await a.default.remove(U);let W=(0,i.isAbsolute)(P)?P:(0,i.join)(p,P),G=(0,i.join)(W,`client-hash.txt`),K=(0,i.join)(W,`template-index.html`),q=!1;try{a.default.existsSync(G)&&a.default.existsSync(K)&&a.default.existsSync(B)&&a.default.existsSync((0,i.join)(B,`assets`))&&(await a.default.readFile(G,`utf-8`)).trim()===V&&(q=!0)}catch{}let me=(0,c.createLogger)(),he=me.warn;me.warn=(e,t)=>{e.includes(`vite:resolve`)&&e.includes(`externalized for browser compatibility`)||he(e,t)},q?(R(`Client code unchanged. Bypassing client build...`),await a.default.ensureDir(B),await a.default.copy(K,(0,i.join)(B,S))):(R(`Build for client...`),await(0,c.build)((0,c.mergeConfig)(n,{build:{manifest:!0,ssrManifest:!0,...ce({input:{app:(0,i.join)(p,S||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:me,mode:d.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){m=e.build.outDir||`dist`}}]})),await a.default.ensureDir(W),await a.default.copy((0,i.join)(B,S),K),await a.default.writeFile(G,V,`utf-8`));let ge=()=>{};if(ne){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));ge=e()}R(`Build for server...`),process.env.VITE_SSG=`true`;let J=await oe(d,C);await(0,c.build)((0,c.mergeConfig)(n,{build:{ssr:J,manifest:!0,outDir:U,minify:!1,cssCodeSplit:!1,...ce({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 _e=j===`esm`&&process.platform===`win32`?`file://`:``,ve=j===`esm`?`.mjs`:`.cjs`,ye=J.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),be=_e+(0,i.join)(U,(J.includes(`/`)||J.includes(`\\`)?J.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(ve,``):ye)+ve).replace(/\\/g,`/`),xe=JSON.parse(await a.default.readFile((0,i.join)(U,...se,`manifest.json`),`utf-8`)),Se=typeof require<`u`?require:(0,r.createRequire)(require(`url`).pathToFileURL(__filename).href),{createRoot:Ce,includedRoutes:we}=j===`esm`?await import(be):Se(be),Te=we||T,{routes:Ee}=await Ce(!1),{paths:De}=await z(Ee),Y=A?De:await Te(De,Ee||[]);Y=de(Y,Ee||[]),Y=Array.from(new Set(Y)),R(`Rendering Pages...`,Y.length);let Oe=F===!1?void 0:await v(m,{publicPath:g,...F});Oe&&console.log(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.blue)("Critical CSS generation enabled via `beasties`")}`);let ke=JSON.parse(await a.default.readFile((0,i.join)(B,...se,`ssr-manifest.json`),`utf-8`)),Ae=JSON.parse(await a.default.readFile((0,i.join)(B,...se,`manifest.json`),`utf-8`)),X=await a.default.readFile((0,i.join)(B,S),`utf-8`);a.default.rmSync((0,i.join)(B,S)),X=fe(X,x);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,i.join)(W,`ssg-cache.json`),Z=(0,i.join)(W,`ssg-pages`),Q={};try{a.default.existsSync(Ie)&&(Q=await a.default.readJson(Ie))}catch{}let Le={...Q};for(let e of Y){let n=l.default.createHash(`md5`).update(e).digest(`hex`),r=(0,i.join)(Z,`${n}.html`),c=(0,i.join)(Z,`${n}.json`),u=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`,f=k===`nested`?(0,i.join)(e.replace(/^\//g,``),`index.html`):u,p=(0,i.join)(B,f),g=t.s(e).replace(/\/$/,``),_=N[g]||N[e],v=!1,b=0;if(q&&_&&a.default.existsSync(_))try{if(b=Math.round(a.default.statSync(_).mtimeMs),a.default.existsSync(r)){let t=Q[g]||Q[e];t&&Math.round(t.mtime)===b&&(v=!0)}}catch{}if(v){Me.add(async()=>{try{await a.default.ensureDir((0,i.dirname)(p)),await a.default.copy(r,p);let n=Q[g]||Q[e];if(n?.loaderDataFilePath&&a.default.existsSync(c)){let r=n.loaderDataFilePath;await a.default.ensureDir((0,i.join)(B,(0,i.dirname)(r))),await a.default.copy(c,(0,i.join)(B,r)),Pe[t.s(e)]=r,Fe++}d.logger.info(`${(0,s.dim)(`${m}/`)}${(0,s.cyan)(f.padEnd(15,` `))} ${(0,s.green)(`(cached)`)}`)}catch(t){throw Error(`${(0,s.gray)(`[vite-react-ssg]`)} Error on cached page: ${(0,s.cyan)(e)}\n${t.stack}`)}});continue}Me.add(async()=>{try{let n=await Ce(!1,e),{base:l,routes:u,triggerOnSSRAppRendered:p,transformState:g=t.n,app:v,routerType:x}=n,ne=await E?.(e,X,n)||X,S=`${t.c(l)}${t.a(e)}`,C=ie(n),T=!v&&x===`remix`?await h({routes:[...u],locationArg:S,base:l,serverManifest:xe,manifest:Ae,ssrManifest:ke}):new Set,{appHTML:O,bodyAttributes:k,htmlAttributes:A,metaAttributes:j,styleTag:M,routerContext:N}=await C.render(e),P=N?.loaderData,F;if(P&&Object.keys(P).length>0){let n=ue(e,H);F=n,await a.default.ensureDir((0,i.join)(B,(0,i.dirname)(n))),await a.default.writeFile((0,i.join)(B,n),JSON.stringify(P)),Pe[t.s(e)]=n,Fe++}await p?.(e,O,n);let I=new o.JSDOM(await ee({rootContainerId:re,appHTML:O,indexHTML:ne,metaAttributes:j,bodyAttributes:k,htmlAttributes:A,initialState:null}));te(I.window.document,T);let L=I.serialize();I.window.close();let R=await D?.(e,L,n)||L;R=R.replace(y,`window.__VITE_REACT_SSG_HASH__ = '${H}'`),Oe&&(R=await Ne.add(()=>Oe.process(R)),R=R.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),M&&(R=R.replace(`<head>`,`<head>${M}`));let z=await pe(R,w);if(await a.default.ensureDir((0,i.join)(B,(0,i.dirname)(f))),await a.default.writeFile((0,i.join)(B,f),z,`utf-8`),_&&a.default.existsSync(_)){await a.default.ensureDir(Z),await a.default.writeFile(r,z,`utf-8`);let n=t.s(e).replace(/\/$/,``),i=Math.round(b);P&&Object.keys(P).length>0&&F?(await a.default.writeFile(c,JSON.stringify(P),`utf-8`),Le[n]={mtime:i,loaderDataFilePath:F}):Le[n]={mtime:i}}d.logger.info(`${(0,s.dim)(`${m}/`)}${(0,s.cyan)(f.padEnd(15,` `))} ${(0,s.dim)(ae(z))}`)}catch(t){throw Error(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.red)(`Error on page: ${(0,s.cyan)(e)}`)}\n${t.stack}`)}})}await Me.start().onIdle();try{if(await a.default.ensureDir((0,i.dirname)(Ie)),await a.default.writeJson(Ie,Le),a.default.existsSync(Z)){let e=await a.default.readdir(Z),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 a.default.remove((0,i.join)(Z,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 a.default.writeFile((0,i.join)(B,`static-loader-data-manifest-${H}.json`),Re),d.logger.info(`${(0,s.dim)(`${m}/`)}${(0,s.cyan)(`static-loader-data-manifest-${H}.json`.padEnd(15,` `))} ${(0,s.dim)(ae(Re))}`),await a.default.remove((0,i.join)(p,`.vite-react-ssg-temp`)),ge();let $=d.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;$&&!$.disabled&&$.generateSW&&(R(`Regenerate PWA...`),await $.generateSW()),console.log(`\n${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.green)(`Build finished.`)}`),await O?.(m),setTimeout(()=>{console.log(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.yellow)(`Build process still running after 15s`)}. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function fe(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function pe(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 console.error(`${(0,s.gray)(`[vite-react-ssg]`)} ${(0,s.red)(`Error formatting html: ${t?.message}`)}`),e}return e}function W({template:e,ssrEntry:n,onBeforePageRender:r,entry:i,rootContainerId:a,onPageRendered:o}){return{name:`vite-react-ssg:dev-server`,configureServer(s){let l=async(l,u,d)=>{try{let d=l.originalUrl,f=await(await s.ssrLoadModule(n).then(e=>e.createRoot))(!1,d),p=ie(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 s.transformIndexHtml(d,e),b=await r?.(d,y,f)||y,{appHTML:te,bodyAttributes:ne,htmlAttributes:S,metaAttributes:C,styleTag:w}=await p.render(t.o(g,h));C.push(w);let T=await Promise.all([n,i].map(async e=>await s.moduleGraph.getModuleByUrl(e))),E=new Set,D=new Set,O=async e=>{if(!e||!e?.ssrTransformResult||D.has(e))return;D.add(e);let{deps:t=[],dynamicDeps:n=[]}=e?.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))E.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await s.moduleGraph.getModuleByUrl(e);t&&await O(t)}};await Promise.all(T.map(async e=>O(e)));let k=[...E].map(e=>x(t.i(s.config.base,e)));C.push(...k);let A=await ee({rootContainerId:a,appHTML:te,indexHTML:b,metaAttributes:C,bodyAttributes:ne,htmlAttributes:S,initialState:null}),j=await o?.(d,A,f)||A;u.statusCode=200,u.setHeader(`Content-Type`,`text/html`),(0,c.send)(l,u,j,`html`,{headers:`pluginContainer`in s?s.config.server.headers:s.config.preview.headers})}catch(e){s.ssrFixStacktrace(e),console.error(`[vite-react-ssg] error: ${e.stack}`),u.statusCode=500,u.end(e.stack)}};return()=>{s.middlewares.use(l)}}}}async function G(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await(0,c.resolveConfig)(e,`serve`,n,n),a=process.cwd(),o=r.root||a,s={...r.ssgOptions,...t},{htmlEntry:l=`index.html`,onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:m=!1}=s,h=s.entry||await b(o,l),[g,_]=await Promise.all([oe(r,h),p.default.readFile((0,i.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??[],W({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 K(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await G(t,e);return await r.listen(),q(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){console.error(`${(0,s.red)(`failed to start server. error:`)}\n${e.stack}`),process.exit(1)}}function q(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 ${(0,s.reset)((0,s.bold)(`${e}ms`))}`}n(`\n ${(0,s.bgLightCyan)(` VITE-REACT-SSG v${L} `)}`,{clear:!e.config.logger.hasWarned}),n(`${(0,s.cyan)(`\n VITE v${c.version}`)+(0,s.dim)(r)}\n`),n((0,s.green)(` dev server running at:`)),e.printUrls()}exports.build=U,exports.createServer=G,exports.dev=K;
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-BLI6QppB.mjs";import{createRequire as s}from"node:module";import{Fragment as c,jsx as l}from"react/jsx-runtime";import{dirname as u,isAbsolute as d,join as f,relative as p}from"node:path";import m from"fs-extra";import{JSDOM as h}from"jsdom";import{bgLightCyan as g,blue as _,bold as v,cyan as y,dim as b,gray as x,green as S,red as C,reset as w,yellow as T}from"kolorist";import{build as E,createLogger as D,createServer as O,mergeConfig as k,resolveConfig as A,send as ee,version as j}from"vite";import M from"node:crypto";import{once as N}from"node:events";import{Readable as P,Writable as te}from"node:stream";import*as F from"react-dom/server";import ne from"node:fs/promises";var I=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=L(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function L(e,t){let n=new Set;if(!t)return n;for(let r of t)R(e,r,n);return n}function R(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{R(e,t,n)}),n):n}async function z(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 se(e,t=`index.html`){let[,n]=[...(await m.readFile(f(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 ce(e){return`<link rel="stylesheet" href="${e}">`}function le(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),B(e,t))})}function B(e,t){t.endsWith(`.js`)?V(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?V(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?V(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`))&&V(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function ue(e){return e.createElement(`link`)}function de(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function V(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=ue(e);de(n,t),e.head.appendChild(n)}function H(e,t){if(e===!1||e==null)throw console.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 fe(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 pe(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;H(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:fe(e.headers)};return new Request(n.href,r)}async function me(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=P.from(n);r.pipe(t),await N(r,`end`)}else t.end()}function U(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 W(e){if(!F.renderToPipeableStream)return F.renderToString(l(c,{children:e}));let t=new G,{pipe:n}=F.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){n(t)}});return t.getPromise()}var G=class extends te{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 K(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:q}=s(import.meta.url)(`react-helmet-async`);var J=class{constructor(e){this.handleLoader=async(e,t)=>{let{routes:n,base:r}=this.context,{matchRoutes:i}=await import(`react-router-dom`),o=pe(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 me(await he({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=`http://localhost${o(e)}`,c=new Request(s),u=r?await r():null,d={},f=null,{StaticRouterProvider:p,createStaticHandler:m,createStaticRouter:h}=await import(`react-router-dom`),g=a([...n],e=>e),{query:_}=m(g,{basename:t}),v=await _(c);if(v instanceof Response)throw v;f=v;let y=l(q,{context:d,children:l(p,{router:h(g,f,{future:i.future}),context:f})});u&&(y=u.collect(y));let b=await W(y),{htmlAttributes:x,bodyAttributes:S,metaAttributes:C,styleTag:w}=K(b,d,u);return{appHTML:b,htmlAttributes:x,bodyAttributes:S,metaAttributes:C,styleTag:w,routerContext:f}}};async function he({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:U(_e(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 ge(a)?a:i(a)}function ge(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function _e(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 ve(e){return new J(e)}var ye=`0.0.3`;function Y(e,t){console.log(`\n${x(`[vite-react-ssg]`)} ${T(e)}${t?_(` (${t})`):``}`)}function be(e){return`${(e.length/1024).toFixed(2)} KiB`}async function xe(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&X(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){return e!=null&&(e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)),e}}async function Se(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:f(e.root,t))}const Ce=/[:*?]/;function X(e){return e?Ce.test(e):!1}const we=Number.parseInt(j)>=5?[`.vite`]:[];function Te(e){return Number.parseInt(j)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Ee(e,t,n,r){let i=[];if(!m.existsSync(e))return i;let a=m.readdirSync(e);for(let o of a){let a=f(e,o),s=p(t,a).replace(/\\/g,`/`),c=m.statSync(a);s.startsWith(`node_modules/`)||s===`node_modules`||s.startsWith(`.git/`)||s===`.git`||s.startsWith(`.boltdocs/`)||s===`.boltdocs`||s.startsWith(`.turbo/`)||s===`.turbo`||s.startsWith(`${r}/`)||s===r||s.startsWith(`${n}/`)||s===n||(c.isDirectory()?i.push(...Ee(a,t,n,r)):i.push(a))}return i}function De(e,t,n){try{let r=Ee(e,e,t,n);r.sort();let i=M.createHash(`sha256`);for(let t of r){let n=m.statSync(t),r=p(e,t).replace(/\\/g,`/`);i.update(r),i.update(n.mtimeMs.toString()),i.update(n.size.toString())}return i.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function Oe(e,t){return`static-loader-data${o(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${t}.json`}function ke(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Ae(n={},i={}){let a=process.env.MODE||process.env.NODE_ENV||n.mode||`production`,c=await A(i,`build`,a,a),l=process.cwd(),g=c.root||l,v=c.build.outDir||`dist`,w=c.base,O=Object.assign({},c.ssgOptions||{},n),{script:ee=`sync`,mock:j=!1,htmlEntry:N=`index.html`,entry:P=await se(g,N),formatting:te=`none`,includedRoutes:F=ke,onBeforePageRender:ne,onPageRendered:re,onFinished:L,dirStyle:R=`flat`,includeAllRoutes:ce=!1,format:B=`esm`,concurrency:ue=20,rootContainerId:de=`root`,routeToSourceFileMap:V={},cacheDir:H=`.boltdocs`}=O,fe=O.beastiesOptions??{},pe=`docs`,me=Object.values(V);if(me.length>0){let e=me[0],t=p(g,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(pe=t[0])}let U=d(v)?v:f(g,v),W=De(g,pe,v),G=W.substring(0,12),K=f(g,`.vite-react-ssg-temp`,G);m.existsSync(K)&&await m.remove(K);let q=d(H)?H:f(g,H),J=f(q,`client-hash.txt`),he=f(q,`template-index.html`),ge=!1;try{m.existsSync(J)&&m.existsSync(he)&&m.existsSync(U)&&(await m.readFile(J,`utf-8`)).trim()===W&&(ge=!0)}catch{}let _e=D(),ye=_e.warn;_e.warn=(e,t)=>{e.includes(`vite:resolve`)&&e.includes(`externalized for browser compatibility`)||ye(e,t)},ge?(Y(`Client code unchanged. Bypassing client build...`),await m.ensureDir(U),await m.copy(he,f(U,N))):(Y(`Build for client...`),await E(k(i,{build:{manifest:!0,ssrManifest:!0,...Te({input:{app:f(g,N||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:_e,mode:c.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){v=e.build.outDir||`dist`}}]})),await m.ensureDir(q),await m.copy(f(U,N),he),await m.writeFile(J,W,`utf-8`));let Ce=()=>{};if(j){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);Ce=e()}Y(`Build for server...`),process.env.VITE_SSG=`true`;let X=await Se(c,P);await E(k(i,{build:{ssr:X,manifest:!0,outDir:K,minify:!1,cssCodeSplit:!1,...Te({output:B===`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 Ee=B===`esm`&&process.platform===`win32`?`file://`:``,Ae=B===`esm`?`.mjs`:`.cjs`,Ne=X.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Pe=Ee+f(K,(X.includes(`/`)||X.includes(`\\`)?X.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Ae,``):Ne)+Ae).replace(/\\/g,`/`),Fe=JSON.parse(await m.readFile(f(K,...we,`manifest.json`),`utf-8`)),Ie=I===void 0?s(import.meta.url):I,{createRoot:Le,includedRoutes:Re}=B===`esm`?await import(Pe):Ie(Pe),ze=Re||F,{routes:Be}=await Le(!1),{paths:Ve}=await xe(Be),Z=ce?Ve:await ze(Ve,Be||[]);Z=ke(Z,Be||[]),Z=Array.from(new Set(Z)),Y(`Rendering Pages...`,Z.length);let He=fe===!1?void 0:await z(v,{publicPath:w,...fe});He&&console.log(`${x(`[vite-react-ssg]`)} ${_("Critical CSS generation enabled via `beasties`")}`);let Ue=JSON.parse(await m.readFile(f(U,...we,`ssr-manifest.json`),`utf-8`)),We=JSON.parse(await m.readFile(f(U,...we,`manifest.json`),`utf-8`)),Ge=await m.readFile(f(U,N),`utf-8`);m.rmSync(f(U,N)),Ge=je(Ge,ee);let Ke=(await import(`p-queue`)).default||await import(`p-queue`),qe=new Ke({concurrency:ue}),Je=new Ke({concurrency:1}),Ye={},Xe=0,Ze=f(q,`ssg-cache.json`),Q=f(q,`ssg-pages`),$={};try{m.existsSync(Ze)&&($=await m.readJson(Ze))}catch{}let Qe={...$};for(let n of Z){let i=M.createHash(`md5`).update(n).digest(`hex`),a=f(Q,`${i}.html`),s=f(Q,`${i}.json`),l=`${(n.endsWith(`/`)?`${n}index`:n).replace(/^\//g,``)}.html`,d=R===`nested`?f(n.replace(/^\//g,``),`index.html`):l,p=f(U,d),g=o(n).replace(/\/$/,``),_=V[g]||V[n],w=!1,T=0;if(ge&&_&&m.existsSync(_))try{if(T=Math.round(m.statSync(_).mtimeMs),m.existsSync(a)){let e=$[g]||$[n];e&&Math.round(e.mtime)===T&&(w=!0)}}catch{}if(w){qe.add(async()=>{try{await m.ensureDir(u(p)),await m.copy(a,p);let e=$[g]||$[n];if(e?.loaderDataFilePath&&m.existsSync(s)){let t=e.loaderDataFilePath;await m.ensureDir(f(U,u(t))),await m.copy(s,f(U,t)),Ye[o(n)]=t,Xe++}c.logger.info(`${b(`${v}/`)}${y(d.padEnd(15,` `))} ${S(`(cached)`)}`)}catch(e){throw Error(`${x(`[vite-react-ssg]`)} Error on cached page: ${y(n)}\n${e.stack}`)}});continue}qe.add(async()=>{try{let i=await Le(!1,n),{base:l,routes:p,triggerOnSSRAppRendered:g,transformState:x=r,app:S,routerType:C}=i,w=await ne?.(n,Ge,i)||Ge,E=`${t(l)}${e(n)}`,D=ve(i),O=!S&&C===`remix`?await ie({routes:[...p],locationArg:E,base:l,serverManifest:Fe,manifest:We,ssrManifest:Ue}):new Set,{appHTML:k,bodyAttributes:A,htmlAttributes:ee,metaAttributes:j,styleTag:M,routerContext:N}=await D.render(n),P=N?.loaderData,F;if(P&&Object.keys(P).length>0){let e=Oe(n,G);F=e,await m.ensureDir(f(U,u(e))),await m.writeFile(f(U,e),JSON.stringify(P)),Ye[o(n)]=e,Xe++}await g?.(n,k,i);let I=new h(await oe({rootContainerId:de,appHTML:k,indexHTML:w,metaAttributes:j,bodyAttributes:A,htmlAttributes:ee,initialState:null}));le(I.window.document,O);let L=I.serialize();I.window.close();let R=await re?.(n,L,i)||L;R=R.replace(ae,`window.__VITE_REACT_SSG_HASH__ = '${G}'`),He&&(R=await Je.add(()=>He.process(R)),R=R.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),M&&(R=R.replace(`<head>`,`<head>${M}`));let z=await Me(R,te);if(await m.ensureDir(f(U,u(d))),await m.writeFile(f(U,d),z,`utf-8`),_&&m.existsSync(_)){await m.ensureDir(Q),await m.writeFile(a,z,`utf-8`);let e=o(n).replace(/\/$/,``),t=Math.round(T);P&&Object.keys(P).length>0&&F?(await m.writeFile(s,JSON.stringify(P),`utf-8`),Qe[e]={mtime:t,loaderDataFilePath:F}):Qe[e]={mtime:t}}c.logger.info(`${b(`${v}/`)}${y(d.padEnd(15,` `))} ${b(be(z))}`)}catch(e){throw Error(`${x(`[vite-react-ssg]`)} ${C(`Error on page: ${y(n)}`)}\n${e.stack}`)}})}await qe.start().onIdle();try{if(await m.ensureDir(u(Ze)),await m.writeJson(Ze,Qe),m.existsSync(Q)){let e=await m.readdir(Q),t=new Set;for(let e of Object.keys(Qe)){let n=M.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 m.remove(f(Q,r)),n++));n>0&&Y(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}Y(`Generating static loader data...`,Xe);let $e=JSON.stringify(Ye,null,0);await m.writeFile(f(U,`static-loader-data-manifest-${G}.json`),$e),c.logger.info(`${b(`${v}/`)}${y(`static-loader-data-manifest-${G}.json`.padEnd(15,` `))} ${b(be($e))}`),await m.remove(f(g,`.vite-react-ssg-temp`)),Ce();let et=c.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;et&&!et.disabled&&et.generateSW&&(Y(`Regenerate PWA...`),await et.generateSW()),console.log(`\n${x(`[vite-react-ssg]`)} ${S(`Build finished.`)}`),await L?.(v),setTimeout(()=>{console.log(`${x(`[vite-react-ssg]`)} ${T(`Build process still running after 15s`)}. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function je(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Me(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 console.error(`${x(`[vite-react-ssg]`)} ${C(`Error formatting html: ${t?.message}`)}`),e}return e}function Ne({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=ve(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=>ce(n(c.config.base,e)));w.push(...A);let j=await oe({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),console.error(`[vite-react-ssg] error: ${e.stack}`),u.statusCode=500,u.end(e.stack)}};return()=>{c.middlewares.use(l)}}}}async function Pe(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await A(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,p=o.entry||await se(a,s),[m,h]=await Promise.all([Se(r,p),ne.readFile(f(a,s),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,d){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);e()}return await O({...e,plugins:[...e.plugins??[],Ne({template:h,ssrEntry:m,onBeforePageRender:c,onPageRendered:l,entry:p,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 Fe(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Pe(t,e);return await r.listen(),Ie(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){console.error(`${C(`failed to start server. error:`)}\n${e.stack}`),process.exit(1)}}function Ie(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 ${w(v(`${e}ms`))}`}n(`\n ${g(` VITE-REACT-SSG v${ye} `)}`,{clear:!e.config.logger.hasWarned}),n(`${y(`\n VITE v${j}`)+b(r)}\n`),n(S(` dev server running at:`)),e.printUrls()}export{Ae as build,Pe as createServer,Fe 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-BLI6QppB.mjs";import{createRequire as s}from"node:module";import{Fragment as c,jsx as l}from"react/jsx-runtime";import{dirname as u,isAbsolute as d,join as f,relative as p}from"node:path";import m from"fs-extra";import{JSDOM as h}from"jsdom";import{bgLightCyan as g,blue as _,bold as v,cyan as y,dim as b,gray as x,green as S,red as C,reset as w,yellow as T}from"kolorist";import{build as E,createLogger as D,createServer as O,mergeConfig as k,resolveConfig as A,send as ee,version as j}from"vite";import M from"node:crypto";import{once as N}from"node:events";import{Readable as P,Writable as te}from"node:stream";import*as F from"react-dom/server";import ne from"node:fs/promises";var I=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=L(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function L(e,t){let n=new Set;if(!t)return n;for(let r of t)R(e,r,n);return n}function R(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{R(e,t,n)}),n):n}async function z(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 se(e,t=`index.html`){let[,n]=[...(await m.readFile(f(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 ce(e){return`<link rel="stylesheet" href="${e}">`}function le(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),B(e,t))})}function B(e,t){t.endsWith(`.js`)?V(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?V(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?V(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`))&&V(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function ue(e){return e.createElement(`link`)}function de(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function V(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=ue(e);de(n,t),e.head.appendChild(n)}function H(e,t){if(e===!1||e==null)throw console.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 fe(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 pe(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;H(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:fe(e.headers)};return new Request(n.href,r)}async function me(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=P.from(n);r.pipe(t),await N(r,`end`)}else t.end()}function U(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 W(e){if(!F.renderToPipeableStream)return F.renderToString(l(c,{children:e}));let t=new G,{pipe:n}=F.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){n(t)}});return t.getPromise()}var G=class extends te{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 K(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:q}=s(import.meta.url)(`react-helmet-async`);var J=class{constructor(e){this.handleLoader=async(e,t)=>{let{routes:n,base:r}=this.context,{matchRoutes:i}=await import(`react-router-dom`),o=pe(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 me(await he({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=`http://localhost${o(e)}`,c=new Request(s),u=r?await r():null,d={},f=null,{StaticRouterProvider:p,createStaticHandler:m,createStaticRouter:h}=await import(`react-router-dom`),g=a([...n],e=>e),{query:_}=m(g,{basename:t}),v=await _(c);if(v instanceof Response){let e=v.headers.get(`Location`);if(e){let t=`http://localhost${o(e)}`;v=await _(new Request(t))}}if(v instanceof Response)throw v;f=v;let y=l(q,{context:d,children:l(p,{router:h(g,f,{future:i.future}),context:f})});u&&(y=u.collect(y));let b=await W(y),{htmlAttributes:x,bodyAttributes:S,metaAttributes:C,styleTag:w}=K(b,d,u);return{appHTML:b,htmlAttributes:x,bodyAttributes:S,metaAttributes:C,styleTag:w,routerContext:f}}};async function he({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:U(_e(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 ge(a)?a:i(a)}function ge(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function _e(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 ve(e){return new J(e)}var ye=`0.0.4`;function Y(e,t){console.log(`\n${x(`[vite-react-ssg]`)} ${T(e)}${t?_(` (${t})`):``}`)}function be(e){return`${(e.length/1024).toFixed(2)} KiB`}async function xe(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&X(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 Se(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:f(e.root,t))}const Ce=/[:*?]/;function X(e){return e?Ce.test(e):!1}const we=Number.parseInt(j)>=5?[`.vite`]:[];function Te(e){return Number.parseInt(j)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Ee(e,t,n,r){let i=[];if(!m.existsSync(e))return i;let a=m.readdirSync(e);for(let o of a){let a=f(e,o),s=p(t,a).replace(/\\/g,`/`),c=m.statSync(a);s.startsWith(`node_modules/`)||s===`node_modules`||s.startsWith(`.git/`)||s===`.git`||s.startsWith(`.boltdocs/`)||s===`.boltdocs`||s.startsWith(`.turbo/`)||s===`.turbo`||s.startsWith(`${r}/`)||s===r||s.startsWith(`${n}/`)||s===n||(c.isDirectory()?i.push(...Ee(a,t,n,r)):i.push(a))}return i}function De(e,t,n){try{let r=Ee(e,e,t,n);r.sort();let i=M.createHash(`sha256`);for(let t of r){let n=m.statSync(t),r=p(e,t).replace(/\\/g,`/`);i.update(r),i.update(n.mtimeMs.toString()),i.update(n.size.toString())}return i.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function Oe(e,t){return`static-loader-data${o(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${t}.json`}function ke(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Ae(n={},i={}){let a=process.env.MODE||process.env.NODE_ENV||n.mode||`production`,c=await A(i,`build`,a,a),l=process.cwd(),g=c.root||l,v=c.build.outDir||`dist`,w=c.base,O=Object.assign({},c.ssgOptions||{},n),{script:ee=`sync`,mock:j=!1,htmlEntry:N=`index.html`,entry:P=await se(g,N),formatting:te=`none`,includedRoutes:F=ke,onBeforePageRender:ne,onPageRendered:re,onFinished:L,dirStyle:R=`flat`,includeAllRoutes:ce=!1,format:B=`esm`,concurrency:ue=20,rootContainerId:de=`root`,routeToSourceFileMap:V={},cacheDir:H=`.boltdocs`}=O,fe=O.beastiesOptions??{},pe=`docs`,me=Object.values(V);if(me.length>0){let e=me[0],t=p(g,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(pe=t[0])}let U=d(v)?v:f(g,v),W=De(g,pe,v),G=W.substring(0,12),K=f(g,`.vite-react-ssg-temp`,G);m.existsSync(K)&&await m.remove(K);let q=d(H)?H:f(g,H),J=f(q,`client-hash.txt`),he=f(q,`template-index.html`),ge=!1;try{m.existsSync(J)&&m.existsSync(he)&&m.existsSync(U)&&m.existsSync(f(U,`assets`))&&(await m.readFile(J,`utf-8`)).trim()===W&&(ge=!0)}catch{}let _e=D(),ye=_e.warn;_e.warn=(e,t)=>{e.includes(`vite:resolve`)&&e.includes(`externalized for browser compatibility`)||ye(e,t)},ge?(Y(`Client code unchanged. Bypassing client build...`),await m.ensureDir(U),await m.copy(he,f(U,N))):(Y(`Build for client...`),await E(k(i,{build:{manifest:!0,ssrManifest:!0,...Te({input:{app:f(g,N||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:_e,mode:c.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){v=e.build.outDir||`dist`}}]})),await m.ensureDir(q),await m.copy(f(U,N),he),await m.writeFile(J,W,`utf-8`));let Ce=()=>{};if(j){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);Ce=e()}Y(`Build for server...`),process.env.VITE_SSG=`true`;let X=await Se(c,P);await E(k(i,{build:{ssr:X,manifest:!0,outDir:K,minify:!1,cssCodeSplit:!1,...Te({output:B===`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 Ee=B===`esm`&&process.platform===`win32`?`file://`:``,Ae=B===`esm`?`.mjs`:`.cjs`,Ne=X.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Pe=Ee+f(K,(X.includes(`/`)||X.includes(`\\`)?X.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Ae,``):Ne)+Ae).replace(/\\/g,`/`),Fe=JSON.parse(await m.readFile(f(K,...we,`manifest.json`),`utf-8`)),Ie=I===void 0?s(import.meta.url):I,{createRoot:Le,includedRoutes:Re}=B===`esm`?await import(Pe):Ie(Pe),ze=Re||F,{routes:Be}=await Le(!1),{paths:Ve}=await xe(Be),Z=ce?Ve:await ze(Ve,Be||[]);Z=ke(Z,Be||[]),Z=Array.from(new Set(Z)),Y(`Rendering Pages...`,Z.length);let He=fe===!1?void 0:await z(v,{publicPath:w,...fe});He&&console.log(`${x(`[vite-react-ssg]`)} ${_("Critical CSS generation enabled via `beasties`")}`);let Ue=JSON.parse(await m.readFile(f(U,...we,`ssr-manifest.json`),`utf-8`)),We=JSON.parse(await m.readFile(f(U,...we,`manifest.json`),`utf-8`)),Ge=await m.readFile(f(U,N),`utf-8`);m.rmSync(f(U,N)),Ge=je(Ge,ee);let Ke=(await import(`p-queue`)).default||await import(`p-queue`),qe=new Ke({concurrency:ue}),Je=new Ke({concurrency:1}),Ye={},Xe=0,Ze=f(q,`ssg-cache.json`),Q=f(q,`ssg-pages`),$={};try{m.existsSync(Ze)&&($=await m.readJson(Ze))}catch{}let Qe={...$};for(let n of Z){let i=M.createHash(`md5`).update(n).digest(`hex`),a=f(Q,`${i}.html`),s=f(Q,`${i}.json`),l=`${(n.endsWith(`/`)?`${n}index`:n).replace(/^\//g,``)}.html`,d=R===`nested`?f(n.replace(/^\//g,``),`index.html`):l,p=f(U,d),g=o(n).replace(/\/$/,``),_=V[g]||V[n],w=!1,T=0;if(ge&&_&&m.existsSync(_))try{if(T=Math.round(m.statSync(_).mtimeMs),m.existsSync(a)){let e=$[g]||$[n];e&&Math.round(e.mtime)===T&&(w=!0)}}catch{}if(w){qe.add(async()=>{try{await m.ensureDir(u(p)),await m.copy(a,p);let e=$[g]||$[n];if(e?.loaderDataFilePath&&m.existsSync(s)){let t=e.loaderDataFilePath;await m.ensureDir(f(U,u(t))),await m.copy(s,f(U,t)),Ye[o(n)]=t,Xe++}c.logger.info(`${b(`${v}/`)}${y(d.padEnd(15,` `))} ${S(`(cached)`)}`)}catch(e){throw Error(`${x(`[vite-react-ssg]`)} Error on cached page: ${y(n)}\n${e.stack}`)}});continue}qe.add(async()=>{try{let i=await Le(!1,n),{base:l,routes:p,triggerOnSSRAppRendered:g,transformState:x=r,app:S,routerType:C}=i,w=await ne?.(n,Ge,i)||Ge,E=`${t(l)}${e(n)}`,D=ve(i),O=!S&&C===`remix`?await ie({routes:[...p],locationArg:E,base:l,serverManifest:Fe,manifest:We,ssrManifest:Ue}):new Set,{appHTML:k,bodyAttributes:A,htmlAttributes:ee,metaAttributes:j,styleTag:M,routerContext:N}=await D.render(n),P=N?.loaderData,F;if(P&&Object.keys(P).length>0){let e=Oe(n,G);F=e,await m.ensureDir(f(U,u(e))),await m.writeFile(f(U,e),JSON.stringify(P)),Ye[o(n)]=e,Xe++}await g?.(n,k,i);let I=new h(await oe({rootContainerId:de,appHTML:k,indexHTML:w,metaAttributes:j,bodyAttributes:A,htmlAttributes:ee,initialState:null}));le(I.window.document,O);let L=I.serialize();I.window.close();let R=await re?.(n,L,i)||L;R=R.replace(ae,`window.__VITE_REACT_SSG_HASH__ = '${G}'`),He&&(R=await Je.add(()=>He.process(R)),R=R.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),M&&(R=R.replace(`<head>`,`<head>${M}`));let z=await Me(R,te);if(await m.ensureDir(f(U,u(d))),await m.writeFile(f(U,d),z,`utf-8`),_&&m.existsSync(_)){await m.ensureDir(Q),await m.writeFile(a,z,`utf-8`);let e=o(n).replace(/\/$/,``),t=Math.round(T);P&&Object.keys(P).length>0&&F?(await m.writeFile(s,JSON.stringify(P),`utf-8`),Qe[e]={mtime:t,loaderDataFilePath:F}):Qe[e]={mtime:t}}c.logger.info(`${b(`${v}/`)}${y(d.padEnd(15,` `))} ${b(be(z))}`)}catch(e){throw Error(`${x(`[vite-react-ssg]`)} ${C(`Error on page: ${y(n)}`)}\n${e.stack}`)}})}await qe.start().onIdle();try{if(await m.ensureDir(u(Ze)),await m.writeJson(Ze,Qe),m.existsSync(Q)){let e=await m.readdir(Q),t=new Set;for(let e of Object.keys(Qe)){let n=M.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 m.remove(f(Q,r)),n++));n>0&&Y(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}Y(`Generating static loader data...`,Xe);let $e=JSON.stringify(Ye,null,0);await m.writeFile(f(U,`static-loader-data-manifest-${G}.json`),$e),c.logger.info(`${b(`${v}/`)}${y(`static-loader-data-manifest-${G}.json`.padEnd(15,` `))} ${b(be($e))}`),await m.remove(f(g,`.vite-react-ssg-temp`)),Ce();let et=c.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;et&&!et.disabled&&et.generateSW&&(Y(`Regenerate PWA...`),await et.generateSW()),console.log(`\n${x(`[vite-react-ssg]`)} ${S(`Build finished.`)}`),await L?.(v),setTimeout(()=>{console.log(`${x(`[vite-react-ssg]`)} ${T(`Build process still running after 15s`)}. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function je(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Me(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 console.error(`${x(`[vite-react-ssg]`)} ${C(`Error formatting html: ${t?.message}`)}`),e}return e}function Ne({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=ve(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=>ce(n(c.config.base,e)));w.push(...A);let j=await oe({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),console.error(`[vite-react-ssg] error: ${e.stack}`),u.statusCode=500,u.end(e.stack)}};return()=>{c.middlewares.use(l)}}}}async function Pe(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await A(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,p=o.entry||await se(a,s),[m,h]=await Promise.all([Se(r,p),ne.readFile(f(a,s),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,d){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);e()}return await O({...e,plugins:[...e.plugins??[],Ne({template:h,ssrEntry:m,onBeforePageRender:c,onPageRendered:l,entry:p,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 Fe(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Pe(t,e);return await r.listen(),Ie(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){console.error(`${C(`failed to start server. error:`)}\n${e.stack}`),process.exit(1)}}function Ie(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 ${w(v(`${e}ms`))}`}n(`\n ${g(` VITE-REACT-SSG v${ye} `)}`,{clear:!e.config.logger.hasWarned}),n(`${y(`\n VITE v${j}`)+b(r)}\n`),n(S(` dev server running at:`)),e.printUrls()}export{Ae as build,Pe as createServer,Fe 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.3",
4
+ "version": "0.0.4",
5
5
  "description": "A Vite plugin for static site generation (SSG) with React.",
6
6
  "license": "MIT",
7
7
  "publishConfig": {