@bdocs/ssg 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/vite-react-ssg.js +10 -0
- package/dist/client/single-page.cjs +2 -2
- package/dist/client/single-page.d.cts +6 -0
- package/dist/client/single-page.d.ts +6 -0
- package/dist/client/single-page.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/node.cjs +2 -1
- package/dist/node.d.cts +1 -1
- package/dist/node.d.mts +1 -1
- package/dist/node.mjs +2 -1
- package/dist/state-CAM2wH0H.cjs +1 -0
- package/dist/state-CkhLd6hN.mjs +1 -0
- package/dist/{types-CZ2WOXHQ.d.mts → types-BC2n-pCm.d.mts} +6 -0
- package/dist/{types-DqcL3sh6.d.cts → types-DnC0a9DP.d.cts} +6 -0
- package/package.json +3 -2
- package/dist/state-CSrCqKLt.cjs +0 -1
- package/dist/state-U8UuhxSd.mjs +0 -1
package/bin/vite-react-ssg.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict'
|
|
3
|
+
|
|
4
|
+
// Suppress DEP0205 deprecation warning for module.register() in Node 26+
|
|
5
|
+
const { emitWarning: _emitWarn } = process
|
|
6
|
+
process.emitWarning = function (warning, ...args) {
|
|
7
|
+
if (warning && typeof warning === 'object' && warning.code === 'DEP0205')
|
|
8
|
+
return
|
|
9
|
+
if (typeof warning === 'string' && args.includes('DEP0205')) return
|
|
10
|
+
return Reflect.apply(_emitWarn, process, [warning, ...args])
|
|
11
|
+
}
|
|
12
|
+
|
|
3
13
|
import('../dist/node/cli.mjs')
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`react-helmet-async`);c=s(c);let l=require(`react/jsx-runtime`),u=require(`react-dom`);u=s(u,1);let d=require(`react-dom/client`),f=require(
|
|
2
|
-
Current type: ${(0,
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`react-helmet-async`);c=s(c);let l=require(`react/jsx-runtime`),u=require(`react-dom`);u=s(u,1);let d=require(`react-dom/client`),f=require(`react`);const{version:p,render:m,hydrate:h}={...u},g=Number((p||``).split(`.`)[0])>17;function _(e,t,n={}){let{useLegacyRender:r}=n;r||!g?m(e,t):(0,d.createRoot)(t).render(e)}function v(e,t,n={}){let{useLegacyRender:r}=n;r||!g?h(e,t):(0,d.hydrateRoot)(t,e)}function y(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function b(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}function x(){let[e,t]=(0,f.useState)(!1);return(0,f.useEffect)(()=>{t(!0)},[]),e}function S({children:e,fallback:t}){if(x()){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,f.isValidElement)(e)?`React element`:typeof e}`);return(0,l.jsx)(l.Fragment,{children:e?.()})}return t??null}const C=c,w=C.Helmet||C.default?.Helmet||(()=>null);function T(e){return(0,l.jsx)(w,{...e})}const{HelmetProvider:E}=c;function D(e,t,n={}){let{transformState:r,rootContainer:i=`#root`,ssrWhenDev:a,getStyleCollector:o=null}=n;process.env.NODE_ENV===`development`&&a!==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 s=typeof window<`u`;async function c(n=!1,i){let a=[],c={isClient:s,onSSRAppRendered:n?()=>{}:e=>a.push(e),triggerOnSSRAppRendered:()=>Promise.all(a.map(e=>e())),initialState:{},transformState:r,routePath:i,getStyleCollector:o,routes:void 0,routerOptions:void 0,base:`/`,app:e,routerType:`single-page`};n&&(await y(),c.initialState=r?.(window.__INITIAL_STATE__||{})||b(window.__INITIAL_STATE__)),await t?.(c);let l=c.initialState;return{...c,initialState:l}}return s&&(async()=>{let t=typeof i==`string`?document.querySelector(i):i;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let r=await c(!0);window.__VITE_REACT_SSG_CONTEXT__=r;let a=(0,l.jsx)(E,{children:e});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?_(a,t,n):v(a,t,n)})(),c}exports.ClientOnly=S,exports.Head=T,exports.ViteReactSSG=D;
|
|
@@ -70,6 +70,12 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
|
70
70
|
* @see https://github.com/danielroe/beasties
|
|
71
71
|
*/
|
|
72
72
|
beastiesOptions?: Options | false;
|
|
73
|
+
/**
|
|
74
|
+
* Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
|
|
75
|
+
*
|
|
76
|
+
* @default false
|
|
77
|
+
*/
|
|
78
|
+
turbo?: boolean;
|
|
73
79
|
/**
|
|
74
80
|
* Custom function to modify the routes to do the SSG.
|
|
75
81
|
*
|
|
@@ -70,6 +70,12 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
|
70
70
|
* @see https://github.com/danielroe/beasties
|
|
71
71
|
*/
|
|
72
72
|
beastiesOptions?: Options | false;
|
|
73
|
+
/**
|
|
74
|
+
* Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
|
|
75
|
+
*
|
|
76
|
+
* @default false
|
|
77
|
+
*/
|
|
78
|
+
turbo?: boolean;
|
|
73
79
|
/**
|
|
74
80
|
* Custom function to modify the routes to do the SSG.
|
|
75
81
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as e from"react-helmet-async";import{Fragment as t,jsx as n}from"react/jsx-runtime";import*as r from"react-dom";import{hydrateRoot as i}from"react-dom/client";import{
|
|
1
|
+
import*as e from"react-helmet-async";import{Fragment as t,jsx as n}from"react/jsx-runtime";import*as r from"react-dom";import{hydrateRoot as i}from"react-dom/client";import{useEffect as a,useState as o}from"react";const{version:s,render:c,hydrate:l}={...r},u=Number((s||``).split(`.`)[0])>17;function d(e,t,n={}){let{useLegacyRender:r}=n;r||!u?l(e,t):i(t,e)}function f(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function p(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}function m(){let[e,t]=o(!1);return a(()=>{t(!0)},[]),e}function h({children:e,fallback:r}){return m()?n(t,{children:e?.()}):r??null}const g=e,_=g.Helmet||g.default?.Helmet||(()=>null);function v(e){return n(_,{...e})}const{HelmetProvider:y}=e;function b(e,t,r={}){let{transformState:i,rootContainer:a=`#root`,ssrWhenDev:o,getStyleCollector:s=null}=r,c=typeof window<`u`;async function l(n=!1,r){let a=[],o={isClient:c,onSSRAppRendered:n?()=>{}:e=>a.push(e),triggerOnSSRAppRendered:()=>Promise.all(a.map(e=>e())),initialState:{},transformState:i,routePath:r,getStyleCollector:s,routes:void 0,routerOptions:void 0,base:`/`,app:e,routerType:`single-page`};n&&(await f(),o.initialState=i?.(window.__INITIAL_STATE__||{})||p(window.__INITIAL_STATE__)),await t?.(o);let l=o.initialState;return{...o,initialState:l}}return c&&(async()=>{let t=typeof a==`string`?document.querySelector(a):a;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let i=await l(!0);window.__VITE_REACT_SSG_CONTEXT__=i;let o=n(y,{children:e});document.querySelector(`[data-server-rendered=true]`),d(o,t,r)})(),l}export{h as ClientOnly,v as Head,b as ViteReactSSG};
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-CAM2wH0H.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-dom/client`),s=require(`react`);const{version:c,render:l,hydrate:u}={...a},d=Number((c||``).split(`.`)[0])>17;function f(e,t,n={}){let{useLegacyRender:r}=n;r||!d?l(e,t):(0,o.createRoot)(t).render(e)}function p(e,t,n={}){let{useLegacyRender:r}=n;r||!d?u(e,t):(0,o.hydrateRoot)(t,e)}function m(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function h(){let[e,t]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{t(!0)},[]),e}function g({children:e,fallback:t}){if(h()){if(typeof e!=`function`&&process.env.NODE_ENV===`development`)throw Error(`vite-react-ssg error: The children of <ClientOnly> must be a "render function", e.g. <ClientOnly>{() => <span>{window.location.href}</span>}</ClientOnly>.
|
|
2
2
|
Current type: ${(0,s.isValidElement)(e)?`React element`:typeof e}`);return(0,r.jsx)(r.Fragment,{children:e?.()})}return t??null}const _=n,v=_.Helmet||_.default?.Helmet||(()=>null);function y(e){return(0,r.jsx)(v,{...e})}const{HelmetProvider:b}=n,x=Date.now();function S(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return e}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:h=!0,...g}=e.future??{};async function _(r=!1,a){let s=e.customCreateRouter??i.createBrowserRouter,c=r?s(t.r(e.routes,v),{basename:d===`/`?void 0:d,future:g,hydrationData:S(window.__staticRouterHydrationData)}):void 0,f=[],p=r?()=>{}:e=>f.push(e),h={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 m(),h.initialState=o?.(window.__INITIAL_STATE__||{})||t.t(window.__INITIAL_STATE__)),await n?.(h);let _=h.initialState;return{...h,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)(b,{children:(0,r.jsx)(i.RouterProvider,{router:c})});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?f(l,t,a):p(l,t,a)})(),_;function v(e){if(document.querySelector(`[data-server-rendered=true]`)===null||!e.loader)return e;let n=e.loader;return e.loader=async r=>{let{request:i}=r;if(process.env.NODE_ENV===`development`){let t=`_data=${encodeURIComponent(e.id)}`,n=i.url.includes(`?`)?`${i.url}&${t}`:`${i.url}?${t}`;return fetch(n)}else{let{url:a}=i,{pathname:o}=new URL(a);if(o!==`/`&&o.endsWith(`/`)&&(o=o.slice(0,-1)),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__||(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__={}),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[o])return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[o]?.[e.id]??n(r);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=${x}`);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 s=window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__?.[o];if(!s)return n(r);if(!window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[o]){let e=t.i(d,s);try{let n=await fetch(`${t.s(e)}?t=${x}`);n.ok?window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[o]=await n.json():(console.error(`[vite-react-ssg] Failed to fetch loader data for ${o}: ${n.status} ${n.statusText}`),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[o]={})}catch(e){console.error(`[vite-react-ssg] Error loading loader data for`,o,e),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[o]={}}}return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[o]?.[e.id]??n(r)}},e}}exports.ClientOnly=g,exports.Head=y,exports.ViteReactSSG=C;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as RouterOptions, c as ViteReactSSGContext, i as RouterFutureConfig, l as ViteReactSSGOptions, n as NonIndexRouteRecord, o as StyleCollector, r as RouteRecord, s as ViteReactSSGClientOptions, t as IndexRouteRecord } from "./types-
|
|
1
|
+
import { a as RouterOptions, c as ViteReactSSGContext, i as RouterFutureConfig, l as ViteReactSSGOptions, n as NonIndexRouteRecord, o as StyleCollector, r as RouteRecord, s as ViteReactSSGClientOptions, t as IndexRouteRecord } from "./types-DnC0a9DP.cjs";
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
3
|
import { HelmetProps } from "react-helmet-async";
|
|
4
4
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as RouterOptions, c as ViteReactSSGContext, i as RouterFutureConfig, l as ViteReactSSGOptions, n as NonIndexRouteRecord, o as StyleCollector, r as RouteRecord, s as ViteReactSSGClientOptions, t as IndexRouteRecord } from "./types-
|
|
1
|
+
import { a as RouterOptions, c as ViteReactSSGContext, i as RouterFutureConfig, l as ViteReactSSGOptions, n as NonIndexRouteRecord, o as StyleCollector, r as RouteRecord, s as ViteReactSSGClientOptions, t as IndexRouteRecord } from "./types-BC2n-pCm.mjs";
|
|
2
2
|
import { HelmetProps } from "react-helmet-async";
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e,r as t,s as n,t as r}from"./state-
|
|
1
|
+
import{i as e,r as t,s as n,t as r}from"./state-CkhLd6hN.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{createRoot as d,hydrateRoot as f}from"react-dom/client";import{isValidElement as p,useEffect as m,useState as h}from"react";const{version:g,render:_,hydrate:v}={...u},y=Number((g||``).split(`.`)[0])>17;function b(e,t,n={}){let{useLegacyRender:r}=n;r||!y?_(e,t):d(t).render(e)}function x(e,t,n={}){let{useLegacyRender:r}=n;r||!y?v(e,t):f(t,e)}function S(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function C(){let[e,t]=h(!1);return m(()=>{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
2
|
Current type: ${p(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(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return e}function j(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),{basename:g===`/`?void 0:g,future:v,hydrationData:A(window.__staticRouterHydrationData)}):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){if(document.querySelector(`[data-server-rendered=true]`)===null||!t.loader)return t;let r=t.loader;return t.loader=async i=>{let{request:a}=i;if(process.env.NODE_ENV===`development`){let e=`_data=${encodeURIComponent(t.id)}`,n=a.url.includes(`?`)?`${a.url}&${e}`:`${a.url}?${e}`;return fetch(n)}else{let{url:o}=a,{pathname:s}=new URL(o);if(s!==`/`&&s.endsWith(`/`)&&(s=s.slice(0,-1)),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__||(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__={}),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[s])return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[s]?.[t.id]??r(i);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 c=window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__?.[s];if(!c)return r(i);if(!window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[s]){let t=e(g,c);try{let e=await fetch(`${n(t)}?t=${k}`);e.ok?window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[s]=await e.json():(console.error(`[vite-react-ssg] Failed to fetch loader data for ${s}: ${e.status} ${e.statusText}`),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[s]={})}catch(e){console.error(`[vite-react-ssg] Error loading loader data for`,s,e),window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[s]={}}}return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[s]?.[t.id]??r(i)}},t}}export{w as ClientOnly,D as Head,j as ViteReactSSG};
|
package/dist/node.cjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-CSrCqKLt.cjs`);let n=require(`react/jsx-runtime`),r=require(`@bdocs/dui`),i=require(`node:module`),a=require(`node:path`);a=e.t(a,1);let o=require(`fs-extra`);o=e.t(o,1);let s=require(`jsdom`),c=require(`vite`),l=require(`node:crypto`);l=e.t(l,1);let u=require(`node:events`),d=require(`node:stream`),f=require(`react-dom/server`);f=e.t(f);let p=require(`node:fs`);p=e.t(p,1);let m=require(`node:fs/promises`);m=e.t(m,1);const h=/import\("([^)]+)"\)/g;async function g({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let{matchRoutes:o}=await import(`react-router-dom`),s=o([...e],t,n),c=s?.map(e=>e.route.entry).filter(Boolean)??[],l=new Set;s?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(h);for(let e of n)l.add(e[1].split(`/`).at(-1)??``)});let u=new Set;c.forEach(e=>u.add(e));let d=[...Object.entries(r)];l.forEach(e=>{let t=d.find(([t,n])=>n.file.endsWith(e));t&&u.add(t[0])});let f=_(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function _(e,t){let n=new Set;if(!t)return n;for(let r of t)v(e,r,n);return n}function v(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{v(e,t,n)}),n):n}async function y(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}const b=`/* SCRIPT_COMMENT_PLACEHOLDER */`;async function x({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${b}<\/script>`,l=`<head>`,u=r.join(``);t=t.replace(l,l+u);let d=`<body`;t=t.replace(d,`${d} ${i}`);let f=`<html`;t=t.replace(f,`${f} ${a}`);let p=`<div id="${e}"></div>`;if(t.includes(p))return t.replace(p,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`);let m=await import(`html5parser`),h=m.parse(t),g;if(m.walk(h,{enter:r=>{if(!g&&r?.type===m.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);g=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!g)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return g}async function S(e,t=`index.html`){let[,n]=[...(await o.default.readFile((0,a.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)\>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function C(e){return`<link rel="stylesheet" href="${e}">`}function ee(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),w(e,t))})}function w(e,t){t.endsWith(`.js`)?D(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?D(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?D(e,{rel:`preload`,as:`font`,type:`font/woff2`,href:t,crossOrigin:``}):(t.endsWith(`.png`)||t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)||t.endsWith(`.webp`)||t.endsWith(`.gif`)||t.endsWith(`.ico`)||t.endsWith(`.svg`))&&D(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function T(e){return e.createElement(`link`)}function E(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function D(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=T(e);E(n,t),e.head.appendChild(n)}function O(e,t){if(e===!1||e==null)throw(0,r.error)(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function te(e){let t=new Headers;for(let[n,r]of Object.entries(e))if(r)if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r);return t}function k(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;O(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:te(e.headers)};return new Request(n.href,r)}async function A(e,t){t.statusCode=e.status,t.statusMessage=e.statusText;for(let[n,r]of e.headers)t.setHeader(n,r);if(e.body){let n=e.body,r=d.Readable.from(n);r.pipe(t),await(0,u.once)(r,`end`)}else t.end()}function j(e){let t=new URL(e.url);t.searchParams.delete(`_data`);let n={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return n.body&&(n.duplex=`half`),new Request(t.href,n)}async function M(e){if(!f.renderToPipeableStream)return f.renderToString((0,n.jsx)(n.Fragment,{children:e}));let t=new N,{pipe:r}=f.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){r(t)}});return t.getPromise()}var N=class extends d.Writable{constructor(){super(),this._output=``,this._deferred={promise:null,resolve:()=>null,reject:()=>null},this._deferred.promise=new Promise((e,t)=>{this._deferred.resolve=e,this._deferred.reject=t})}_write(e,t,n){this._output+=e.toString(),n()}_destroy(e,t){e instanceof Error?this._deferred.reject(e):t()}end(){return this._deferred.resolve(this._output),this.destroy()}getPromise(){return this._deferred.promise}};function P(e,t,n){let{helmet:r}=t,i=r.htmlAttributes.toString(),a=r.bodyAttributes.toString(),o=r.title.toString();o.split(`>`)[1]===`</title`&&(o=``);let s=[o,r.meta.toString(),r.link.toString(),r.script.toString()],c=n?.toString?.(e)??``;return{htmlAttributes:i,bodyAttributes:a,metaAttributes:s.filter(Boolean),styleTag:c}}const{HelmetProvider:ne}=(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href)(`react-helmet-async`);var F=class{constructor(e){this.handleLoader=async(e,n)=>{let{routes:r,base:i}=this.context,{matchRoutes:a}=await import(`react-router-dom`),o=k(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)),l=a(t.r([...r],e=>e),{pathname:s.pathname,search:s.search,hash:s.hash,state:null,key:`default`},i);if(!l){n.statusCode=404,n.end(`Route not found: ${c}`);return}let u=l.find(e=>e.route.id===c);if(!u){n.statusCode=404,n.end(`Route not found: ${c}`);return}let d=u.route.loader??await u.route.lazy?.().then(e=>e.loader);if(!d){n.statusCode=200,n.end(`There is no loader for the route: ${c}`);return}await A(await I({loader:d,params:u.params,request:o,routeId:c}),n)},this.context=e}async render(e){let{base:r,routes:i,getStyleCollector:a,routerOptions:o}=this.context,s=t.s(e),c=s;if(r!==`/`){let e=t.s(r).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let l=`http://localhost${c}`,u=new Request(l),d=a?await a():null,f={},p=null,{StaticRouterProvider:m,createStaticHandler:h,createStaticRouter:g}=await import(`react-router-dom`),_=t.r([...i],e=>e),{query:v}=h(_,{basename:r}),y=await v(u),b=0;for(;y instanceof Response&&b<10;){let e=y.headers.get(`Location`);if(!e)break;let n;if(/^https?:\/\//i.test(e))try{let r=new URL(e);if(r.hostname===`localhost`||r.hostname===``)n=`http://localhost${t.s(r.pathname+r.search+r.hash)}`;else break}catch{break}else n=`http://localhost${t.s(e)}`;y=await v(new Request(n)),b++}if(y instanceof Response)throw y;p=y;let x=(0,n.jsx)(ne,{context:f,children:(0,n.jsx)(m,{router:g(_,p,{future:o.future}),context:p})});d&&(x=d.collect(x));let S=await M(x),{htmlAttributes:C,bodyAttributes:ee,metaAttributes:w,styleTag:T}=P(S,f,d);return{appHTML:S,htmlAttributes:C,bodyAttributes:ee,metaAttributes:w,styleTag:T,routerContext:p}}};async function I({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:j(R(n)),params:t});if(a===void 0)throw Error(`You defined a loader for route "${r}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`);return L(a)?a:i(a)}function L(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function R(e){let t=new URL(e.url),n=t.searchParams.getAll(`index`);t.searchParams.delete(`index`);let r=[];for(let e of n)e&&r.push(e);for(let e of r)t.searchParams.append(`index`,e);let i={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return i.body&&(i.duplex=`half`),new Request(t.href,i)}function re(e){return new F(e)}var z=`0.1.1`;function B(e,t){(0,r.info)(`${e}${t?r.colors.blue(` (${t})`):``}`)}function ie(e){return`${(e.length/1024).toFixed(2)} KiB`}async function ae(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&se(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function oe(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:(0,a.join)(e.root,t))}const V=/[:*?]/;function se(e){return e?V.test(e):!1}const H=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),U=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function W(e){try{return p.default.statSync(e).size}catch{return 0}}async function ce(e,t){let n=(0,a.join)(e,`.vite`),r=(0,a.join)(e,`assets`),i={},o=(0,a.join)(n,`manifest.json`);p.default.existsSync(o)&&(i=JSON.parse(await p.default.readFileSync(o,`utf-8`)));let s=0,c=0;for(let[,t]of Object.entries(i)){let{file:n,css:r=[]}=t,i=W((0,a.join)(e,n));s+=i;for(let t of r)c+=W((0,a.join)(e,t))}let l=0,u=0;if(p.default.existsSync(r)){let e=p.default.readdirSync(r,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=a.default.extname(t.name).toLowerCase(),n=(0,a.join)(r,t.name);H.has(e)?l+=W(n):U.has(e)&&u++}}let d=(0,a.join)(e,`index.html`),f=0,m=[];if(p.default.existsSync(d)){let e=W(d);f+=e,m.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}try{let t=p.default.readdirSync(e,{recursive:!0});for(let n of t){if(!n.endsWith(`.html`)||n===`index.html`)continue;let t=W((0,a.join)(e,n));if(t>0){let e=`/`+n.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);f+=t,m.push({route:e,htmlSize:t,htmlFile:n})}}}catch{}return{buildTime:t,totalJSBundleSize:s,totalCSSBundleSize:c,totalImagesSize:l,totalHTMLSize:f,fontCount:u,pages:m}}function le(e,t){let n=a.default.resolve(e,`..`,`.boltdocs`,`reports`);p.default.existsSync(n)||p.default.mkdirSync(n,{recursive:!0});let r=(0,a.join)(n,`performance.json`);p.default.writeFileSync(r,JSON.stringify(t,null,2))}const ue=Number.parseInt(c.version)>=5?[`.vite`]:[];function de(e){return Number.parseInt(c.version)>=8?{rolldownOptions:e}:{rollupOptions:e}}function G(e,t,n,r){let i=[];if(!o.default.existsSync(e))return i;let s=o.default.readdirSync(e,{withFileTypes:!0}),c=e===t;for(let l of s){let s=l.name;if(s===`node_modules`||s===`.git`||s===`.boltdocs`||s===`.turbo`||s===`dist`||s===`coverage`||c&&(n&&s===n||r&&s===r))continue;let u=(0,a.join)(e,s),d=l.isDirectory();if(l.isSymbolicLink())try{d=o.default.statSync(u).isDirectory()}catch{continue}d?i.push(...G(u,t,n,r)):i.push(u)}return i}function fe(e,t,n){try{let r=G(e,e,t,n),i=(0,a.join)((0,a.join)(e,`..`),`packages`);if(o.default.existsSync(i)&&o.default.existsSync((0,a.join)(i,`core/package.json`))){let e=G(i,i,``,``);r.push(...e)}r.sort();let s=l.default.createHash(`sha256`);for(let t of r){let n=o.default.statSync(t),r=(0,a.relative)(e,t).replace(/\\/g,`/`);s.update(r),s.update(n.mtimeMs.toString()),s.update(n.size.toString())}return s.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function pe(e,n){return`static-loader-data${t.s(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function me(e,n=`/`){let r=t.s(e),i=r;if(n!==`/`){let e=t.s(n).replace(/\/$/,``);!r.startsWith(e+`/`)&&r!==e&&(i=`${e}${r}`)}return i!==`/`&&i.endsWith(`/`)?i.slice(0,-1):i}function he(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function K(e={},n={}){let u=process.env.MODE||process.env.NODE_ENV||e.mode||`production`,d=await(0,c.resolveConfig)(n,`build`,u,u),f=process.cwd(),p=d.root||f,m=d.build.outDir||`dist`,h=d.base,_=Object.assign({},d.ssgOptions||{},e),v=performance.now(),{script:C=`sync`,mock:w=!1,htmlEntry:T=`index.html`,entry:E=await S(p,T),formatting:D=`none`,includedRoutes:O=he,onBeforePageRender:te,onPageRendered:k,onFinished:A,dirStyle:j=`flat`,includeAllRoutes:M=!1,format:N=`esm`,concurrency:P=20,rootContainerId:ne=`root`,routeToSourceFileMap:F={},cacheDir:I=`.boltdocs/build`}=_,L=_.beastiesOptions??{},R=`docs`,z=Object.values(F);if(z.length>0){let e=z[0],t=(0,a.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(R=t[0])}let V=(0,a.isAbsolute)(m)?m:(0,a.join)(p,m),se=fe(p,R,m),H=se.substring(0,12),U=(0,a.join)(p,`.vite-react-ssg-temp`,H);o.default.existsSync(U)&&await o.default.remove(U);let W=(0,a.isAbsolute)(I)?I:(0,a.join)(p,I),G=(0,a.join)(W,`client-hash.txt`),K=(0,a.join)(W,`template-index.html`),q=!1;try{o.default.existsSync(G)&&o.default.existsSync(K)&&o.default.existsSync(V)&&o.default.existsSync((0,a.join)(V,`assets`))&&(await o.default.readFile(G,`utf-8`)).trim()===se&&(q=!0)}catch{}let J=(0,c.createLogger)(),ve=J.warn;J.warn=(e,t)=>{e.includes(`externalized for browser compatibility`)||ve(e,t)};let ye=J.info;J.info=(e,t)=>{e.startsWith(`dist/`)||e.startsWith(`.vite-react-ssg-temp/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)||ye(e,t)},q?(B(`Client code unchanged. Bypassing client build...`),await o.default.ensureDir(V),await o.default.copy(K,(0,a.join)(V,T))):((0,r.dividerLog)(),B(`Build for client...`),await(0,c.build)((0,c.mergeConfig)(n,{build:{manifest:!0,ssrManifest:!0,...de({input:{app:(0,a.join)(p,T||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:J,mode:d.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){m=e.build.outDir||`dist`}}]})),(0,r.success)(`Client build complete`),await o.default.ensureDir(W),await o.default.copy((0,a.join)(V,T),K),await o.default.writeFile(G,se,`utf-8`)),(0,r.dividerLog)();let be=()=>{};if(w){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));be=e()}B(`Build for server...`),process.env.VITE_SSG=`true`;let Y=await oe(d,E);await(0,c.build)((0,c.mergeConfig)(n,{build:{ssr:Y,manifest:!0,outDir:U,minify:!1,cssCodeSplit:!1,...de({output:N===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:J,mode:d.mode})),(0,r.success)(`Server build complete`);let xe=N===`esm`&&process.platform===`win32`?`file://`:``,Se=N===`esm`?`.mjs`:`.cjs`,Ce=Y.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),we=xe+(0,a.join)(U,(Y.includes(`/`)||Y.includes(`\\`)?Y.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Se,``):Ce)+Se).replace(/\\/g,`/`),Te=JSON.parse(await o.default.readFile((0,a.join)(U,...ue,`manifest.json`),`utf-8`)),Ee=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),{createRoot:De,includedRoutes:Oe}=N===`esm`?await import(we):Ee(we),ke=Oe||O,{routes:Ae}=await De(!1),{paths:je}=await ae(Ae),X=M?je:await ke(je,Ae||[]);X=he(X,Ae||[]),X=Array.from(new Set(X)),(0,r.dividerLog)(),B(`Rendering Pages...`,X.length);let Me=L===!1?void 0:await y(m,{publicPath:h,...L});Me&&(0,r.info)("Critical CSS generation enabled via `beasties`");let Ne=JSON.parse(await o.default.readFile((0,a.join)(V,...ue,`ssr-manifest.json`),`utf-8`)),Pe=JSON.parse(await o.default.readFile((0,a.join)(V,...ue,`manifest.json`),`utf-8`)),Fe=await o.default.readFile((0,a.join)(V,T),`utf-8`);o.default.rmSync((0,a.join)(V,T)),Fe=ge(Fe,C);let Ie=(await import(`p-queue`)).default||await import(`p-queue`),Le=new Ie({concurrency:P}),Re=new Ie({concurrency:1}),ze={},Be=0,Ve=0,He=0,Ue=0,Z=(0,a.join)(W,`ssg-cache.json`),Q=(0,a.join)(W,`ssg-pages`),$={};try{o.default.existsSync(Z)&&($=await o.default.readJson(Z))}catch{}let We={...$};for(let e of X){let n=l.default.createHash(`md5`).update(e).digest(`hex`),r=(0,a.join)(Q,`${n}.html`),i=(0,a.join)(Q,`${n}.json`),c=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`,u=j===`nested`?(0,a.join)(e.replace(/^\//g,``),`index.html`):c,d=(0,a.join)(V,u),f=t.s(e).replace(/\/$/,``),p=F[f]||F[e],m=!1,_=0;if(q&&p&&o.default.existsSync(p))try{if(_=Math.round(o.default.statSync(p).mtimeMs),o.default.existsSync(r)){let t=$[f]||$[e];t&&Math.round(t.mtime)===_&&(m=!0)}}catch{}if(m){Le.add(async()=>{try{if(await o.default.ensureDir((0,a.dirname)(d)),q)await o.default.copy(r,d);else{let e=await o.default.readFile(r,`utf-8`);e=e.replace(/window\.__VITE_REACT_SSG_HASH__\s*=\s*'[^']*'/,`window.__VITE_REACT_SSG_HASH__ = '${H}'`),await o.default.writeFile(d,e,`utf-8`)}let t=$[f]||$[e];if(t?.loaderDataFilePath&&o.default.existsSync(i)){let n=q?t.loaderDataFilePath:pe(e,H);await o.default.ensureDir((0,a.join)(V,(0,a.dirname)(n))),await o.default.copy(i,(0,a.join)(V,n)),ze[me(e,h)]=n,Be++}He++}catch(t){throw Error(`Error on cached page: ${e}\n${t.stack}`)}});continue}Le.add(async()=>{try{let n=await De(!1,e),{base:c,routes:l,triggerOnSSRAppRendered:d,transformState:f=t.n,app:m,routerType:v}=n,y=await te?.(e,Fe,n)||Fe,S=`${t.c(c)}${t.a(e)}`,C=re(n),w=!m&&v===`remix`?await g({routes:[...l],locationArg:S,base:c,serverManifest:Te,manifest:Pe,ssrManifest:Ne}):new Set,{appHTML:T,bodyAttributes:E,htmlAttributes:O,metaAttributes:A,styleTag:j,routerContext:M}=await C.render(e),N=M?.loaderData,P;if(N&&Object.keys(N).length>0){let t=pe(e,H);P=t,await o.default.ensureDir((0,a.join)(V,(0,a.dirname)(t))),await o.default.writeFile((0,a.join)(V,t),JSON.stringify(N)),ze[me(e,h)]=t,Be++}await d?.(e,T,n);let F=new s.JSDOM(await x({rootContainerId:ne,appHTML:T,indexHTML:y,metaAttributes:A,bodyAttributes:E,htmlAttributes:O,initialState:null}));ee(F.window.document,w);let I=F.window.document;for(let e of I.querySelectorAll(`script`))e.textContent?.includes(`window.__staticRouterHydrationData`)&&e.remove();let L=F.serialize();F.window.close();let R=await k?.(e,L,n)||L,z=``;if(N&&Object.keys(N).length>0){let t=JSON.stringify(N).replace(/</g,`\\u003c`);z=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${me(e,h)}': ${t} };`}let B=``;if(M){let e={loaderData:M.loaderData??{},actionData:M.actionData??null,errors:M.errors??null};B=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let ie=`<script>window.__VITE_REACT_SSG_HASH__ = '${H}';${z}${B}<\/script>`;R=R.replace(`<head>`,`<head>${ie}`),R=R.replace(`<script>${b}<\/script>`,``),Me&&(R=await Re.add(()=>Me.process(R)),R=R.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),j&&(R=R.replace(`<head>`,`<head>${j}`));let ae=await _e(R,D);if(await o.default.ensureDir((0,a.join)(V,(0,a.dirname)(u))),await o.default.writeFile((0,a.join)(V,u),ae,`utf-8`),p&&o.default.existsSync(p)){await o.default.ensureDir(Q),await o.default.writeFile(r,ae,`utf-8`);let n=t.s(e).replace(/\/$/,``),a=Math.round(_);N&&Object.keys(N).length>0&&P?(await o.default.writeFile(i,JSON.stringify(N),`utf-8`),We[n]={mtime:a,loaderDataFilePath:P}):We[n]={mtime:a}}Ve++,Ue+=ae.length}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}})}await Le.start().onIdle();let Ge=Ve+He,Ke=(Ue/1024/1024).toFixed(2);(0,r.info)(`${r.colors.cyan(String(Ge).padStart(3,` `))} pages rendered ${r.colors.dim(`(${Ve} new, ${He} cached, ${Ke} MB)`)}`);try{if(await o.default.ensureDir((0,a.dirname)(Z)),await o.default.writeJson(Z,We),o.default.existsSync(Q)){let e=await o.default.readdir(Q),t=new Set;for(let e of Object.keys(We)){let n=l.default.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}let n=0;for(let r of e)(r.endsWith(`.html`)||r.endsWith(`.json`))&&(t.has(r)||(await o.default.remove((0,a.join)(Q,r)),n++));n>0&&B(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}(0,r.dividerLog)(),B(`Generating static loader data...`,Be);let qe=JSON.stringify(ze,null,0);await o.default.writeFile((0,a.join)(V,`static-loader-data-manifest-${H}.json`),qe),(0,r.info)(`${r.colors.dim(`${m}/`)}${r.colors.cyan(`static-loader-data-manifest-${H}.json`.padEnd(15,` `))} ${r.colors.dim(ie(qe))}`),await o.default.remove((0,a.join)(p,`.vite-react-ssg-temp`)),be();let Je=d.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;Je&&!Je.disabled&&Je.generateSW&&(B(`Regenerate PWA...`),await Je.generateSW());let Ye=Math.round(performance.now()-v),Xe=await ce(V,Ye);le(V,Xe),B(`Build took ${(Ye/1e3).toFixed(1)}s — JS: ${(Xe.totalJSBundleSize/1024).toFixed(0)}kb, CSS: ${(Xe.totalCSSBundleSize/1024).toFixed(0)}kb, Pages: ${Xe.pages.length}`),(0,r.dividerLog)(),(0,r.success)(`Build finished.`),await A?.(m),setTimeout(()=>{(0,r.warn)(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function ge(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function _e(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return(0,r.error)(`Error formatting html: ${t?.message}`),e}return e}function q({template:e,ssrEntry:n,onBeforePageRender:i,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d,f)=>{try{let r=u.originalUrl,f=await(await l.ssrLoadModule(n).then(e=>e.createRoot))(!1,r),p=re(f),{app:m,base:h}=f,[g,_]=r.split(`?`),v=new URLSearchParams(_);if(!m&&v.has(`_data`))return p.handleLoader(u,d);let y=await l.transformIndexHtml(r,e),b=await i?.(r,y,f)||y,{appHTML:S,bodyAttributes:ee,htmlAttributes:w,metaAttributes:T,styleTag:E}=await p.render(t.o(g,h));T.push(E);let D=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),O=new Set,te=new Set,k=async e=>{if(!e||!e?.ssrTransformResult||te.has(e))return;te.add(e);let{deps:t=[],dynamicDeps:n=[]}=e?.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))O.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await k(t)}};await Promise.all(D.map(async e=>k(e)));let A=[...O].map(e=>C(t.i(l.config.base,e)));T.push(...A);let j=await x({rootContainerId:o,appHTML:S,indexHTML:b,metaAttributes:T,bodyAttributes:ee,htmlAttributes:w,initialState:null}),M=await s?.(r,j,f)||j;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.send)(u,d,M,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){l.ssrFixStacktrace(e),(0,r.error)(`SSR render error`,e),d.statusCode=500,d.end(e.stack)}};return()=>{l.middlewares.use(u)}}}}async function J(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await(0,c.resolveConfig)(e,`serve`,n,n),i=process.cwd(),o=r.root||i,s={...r.ssgOptions,...t},{htmlEntry:l=`index.html`,onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:p=!1}=s,h=s.entry||await S(o,l),[g,_]=await Promise.all([oe(r,h),m.default.readFile((0,a.join)(o,l),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,p){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));e()}return await(0,c.createServer)({...e,plugins:[...e.plugins??[],q({template:_,ssrEntry:g,onBeforePageRender:u,onPageRendered:d,entry:h,rootContainerId:f})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function ve(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await J(t,e);return await r.listen(),ye(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function ye(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,i=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);i+=` ready in ${r.colors.reset(r.colors.bold(`${e}ms`))}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${z} `)}`,{clear:!e.config.logger.hasWarned}),n(`${r.colors.cyan(`\n VITE v${c.version}`)+r.colors.dim(i)}\n`),n(r.colors.green(` dev server running at:`)),e.printUrls()}exports.build=K,exports.createServer=J,exports.dev=ve;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./state-CAM2wH0H.cjs`);let n=require(`react/jsx-runtime`),r=require(`@bdocs/dui`),i=require(`node:module`),a=require(`node:path`);a=e.t(a,1);let o=require(`fs-extra`);o=e.t(o,1);let s=require(`vite`),c=require(`node:crypto`);c=e.t(c,1);let l=require(`node:events`),u=require(`node:stream`),d=require(`react-dom/server`);d=e.t(d);let f=require(`node:fs`);f=e.t(f,1);let p=require(`node:fs/promises`);p=e.t(p,1);const m=/import\("([^)]+)"\)/g;let h=null;async function g(){if(!h){let{matchRoutes:e}=await import(`react-router-dom`);h=e}return h}async function _({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let o=(await g())([...e],t,n),s=o?.map(e=>e.route.entry).filter(Boolean)??[],c=new Set;o?.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)c.add(e[1].split(`/`).at(-1)??``)});let l=new Set;s.forEach(e=>l.add(e));let u=[...Object.entries(r)];c.forEach(e=>{let t=u.find(([t,n])=>n.file.endsWith(e));t&&l.add(t[0])});let d=v(i,l),f=new Set;return Array.from(d).forEach(e=>{(a[e]||[]).forEach(e=>{f.add(e)})}),f}function v(e,t){let n=new Set;if(!t)return n;for(let r of t)y(e,r,n);return n}function y(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{y(e,t,n)}),n):n}async function b(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}async function ee(){try{let e=await import(`@bdocs/zig-critters`),t=e.processHtml||e.default?.processHtml;return t?{processHtml:t}:void 0}catch{return}}const x=`/* SCRIPT_COMMENT_PLACEHOLDER */`;async function S({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>${x}<\/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 C(e,t=`index.html`){let[,n]=[...(await o.default.readFile((0,a.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)\>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function w(e){return`<link rel="stylesheet" href="${e}">`}function T(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=E(e);r&&n.push(r)}}),n.join(``)}function E(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}function te(e,t){if(e===!1||e==null)throw console.error(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function D(e){let t=new Headers;for(let[n,r]of Object.entries(e))if(r)if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r);return t}function ne(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;te(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:D(e.headers)};return new Request(n.href,r)}async function re(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=u.Readable.from(n);r.pipe(t),await(0,l.once)(r,`end`)}else t.end()}function ie(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 O(e){return d.renderToString((0,n.jsx)(n.Fragment,{children:e}))}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}}let A=null;function j(){return A||(A=globalThis.__BOLTDOCS_HELMET_PROVIDER__||(()=>{let{createRequire:e}=require(`node:module`);return e(require(`url`).pathToFileURL(__filename).href)(`react-helmet-async`).HelmetProvider})(),A)}let ae=null;async function M(){return ae||=await import(`react-router-dom`),ae}var N=class{constructor(e){this._dataRoutes=null,this._staticHandler=null,this.handleLoader=async(e,n)=>{let{routes:r,base:i}=this.context,{matchRoutes:a}=await M(),o=ne(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)),l=a(t.r([...r],e=>e),{pathname:s.pathname,search:s.search,hash:s.hash,state:null,key:`default`},i);if(!l){n.statusCode=404,n.end(`Route not found: ${c}`);return}let u=l.find(e=>e.route.id===c);if(!u){n.statusCode=404,n.end(`Route not found: ${c}`);return}let d=u.route.loader??await u.route.lazy?.().then(e=>e.loader);if(!d){n.statusCode=200,n.end(`There is no loader for the route: ${c}`);return}await re(await P({loader:d,params:u.params,request:o,routeId:c}),n)},this.context=e}async render(e){let{base:r,routes:i,getStyleCollector:a,routerOptions:o}=this.context,s=t.s(e),c=s;if(r!==`/`){let e=t.s(r).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let l=`http://localhost${c}`,u=new Request(l),d=a?await a():null,f={},p=null,{StaticRouterProvider:m,createStaticHandler:h,createStaticRouter:g}=await M(),_=this._dataRoutes??=t.r([...i],e=>e);this._staticHandler??=h(_,{basename:r});let{query:v}=this._staticHandler,y=await v(u),b=0;for(;y instanceof Response&&b<10;){let e=y.headers.get(`Location`);if(!e)break;let n;if(/^https?:\/\//i.test(e))try{let r=new URL(e);if(r.hostname===`localhost`||r.hostname===``)n=`http://localhost${t.s(r.pathname+r.search+r.hash)}`;else break}catch{break}else n=`http://localhost${t.s(e)}`;y=await v(new Request(n)),b++}if(y instanceof Response)throw y;p=y;let ee=g(_,p,{future:o.future}),x=j(),S=x;S&&typeof S==`function`&&(S.canUseDOM=!1);let C=(0,n.jsx)(x,{context:f,children:(0,n.jsx)(m,{router:ee,context:p})});d&&(C=d.collect(C));let w=await O(C),{htmlAttributes:T,bodyAttributes:E,metaAttributes:te,styleTag:D}=k(w,f,d);return{appHTML:w,htmlAttributes:T,bodyAttributes:E,metaAttributes:te,styleTag:D,routerContext:p}}};async function P({loader:e,params:t,request:n,routeId:r}){let{json:i}=await M(),a=await e({request:ie(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 oe(e){return new N(e)}var L=`0.2.0`;function R(e,t){(0,r.info)(`${e}${t?r.colors.blue(` (${t})`):``}`)}function se(e){return`${(e.length/1024).toFixed(2)} KiB`}async function ce(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&&ue(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function le(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:(0,a.join)(e.root,t))}const z=/[:*?]/;function ue(e){return e?z.test(e):!1}const B=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),V=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function H(e){try{return f.default.statSync(e).size}catch{return 0}}async function de(e,t){let n=(0,a.join)(e,`.vite`),r=(0,a.join)(e,`assets`),i={},o=(0,a.join)(n,`manifest.json`);f.default.existsSync(o)&&(i=JSON.parse(await f.default.readFileSync(o,`utf-8`)));let s=0,c=0;for(let[,t]of Object.entries(i)){let{file:n,css:r=[]}=t,i=H((0,a.join)(e,n));s+=i;for(let t of r)c+=H((0,a.join)(e,t))}let l=0,u=0;if(f.default.existsSync(r)){let e=f.default.readdirSync(r,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=a.default.extname(t.name).toLowerCase(),n=(0,a.join)(r,t.name);B.has(e)?l+=H(n):V.has(e)&&u++}}let d=(0,a.join)(e,`index.html`),p=0,m=[];if(f.default.existsSync(d)){let e=H(d);p+=e,m.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}try{let t=f.default.readdirSync(e,{recursive:!0});for(let n of t){if(!n.endsWith(`.html`)||n===`index.html`)continue;let t=H((0,a.join)(e,n));if(t>0){let e=`/`+n.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);p+=t,m.push({route:e,htmlSize:t,htmlFile:n})}}}catch{}return{buildTime:t,totalJSBundleSize:s,totalCSSBundleSize:c,totalImagesSize:l,totalHTMLSize:p,fontCount:u,pages:m}}function fe(e,t){let n=a.default.resolve(e,`..`,`.boltdocs`,`reports`);f.default.existsSync(n)||f.default.mkdirSync(n,{recursive:!0});let r=(0,a.join)(n,`performance.json`);f.default.writeFileSync(r,JSON.stringify(t,null,2))}const pe=Number.parseInt(s.version)>=5?[`.vite`]:[];function me(e){return Number.parseInt(s.version)>=8?{rolldownOptions:e}:{rollupOptions:e}}function U(e){let t=[];if(!o.default.existsSync(e))return t;let n=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`]),r=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`,`public`]),i=o.default.readdirSync(e,{withFileTypes:!0});for(let o of i){if(o.name.startsWith(`.`)||r.has(o.name))continue;let i=(0,a.join)(e,o.name);if(o.isDirectory())t.push(...U(i));else{let e=`.`+o.name.split(`.`).pop()?.toLowerCase();n.has(e)&&t.push(i)}}return t}function he(e,t,n){try{let n=[],r=(0,a.join)(e,t);o.default.existsSync(r)&&n.push(...U(r));for(let t of[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`]){let r=(0,a.join)(e,t);o.default.existsSync(r)&&n.push(r)}n.sort();let i=c.default.createHash(`sha256`);for(let t of n){let n=o.default.statSync(t),r=(0,a.relative)(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 ge(e,n){return`static-loader-data${t.s(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function _e(e,n=`/`){let r=t.s(e),i=r;if(n!==`/`){let e=t.s(n).replace(/\/$/,``);!r.startsWith(e+`/`)&&r!==e&&(i=`${e}${r}`)}return i!==`/`&&i.endsWith(`/`)?i.slice(0,-1):i}function ve(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function ye(e={},n={}){let l=process.env.MODE||process.env.NODE_ENV||e.mode||`production`,u=await(0,s.resolveConfig)(n,`build`,l,l),d=process.cwd(),f=u.root||d,p=u.build.outDir||`dist`,m=u.base,h=Object.assign({},u.ssgOptions||{},e),g=performance.now(),{script:v=`sync`,mock:y=!1,htmlEntry:w=`index.html`,entry:E=await C(f,w),formatting:te=`none`,includedRoutes:D=ve,onBeforePageRender:ne,onPageRendered:re,onFinished:ie,dirStyle:O=`flat`,includeAllRoutes:k=!1,format:A=`esm`,concurrency:j=20,rootContainerId:ae=`root`,routeToSourceFileMap:M={},cacheDir:N=`.boltdocs/build`}=h,P=h.beastiesOptions??{},F=h.turbo??!1,I=`docs`,L=Object.values(M);if(L.length>0){let e=L[0],t=(0,a.relative)(f,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(I=t[0])}let z=(0,a.isAbsolute)(p)?p:(0,a.join)(f,p),ue=he(f,I,p),B=ue.substring(0,12),V=(0,a.join)(f,`.vite-react-ssg-temp`,F?`turbo-ssr`:B),H=(0,a.isAbsolute)(N)?N:(0,a.join)(f,N),U=(0,a.join)(H,`client-hash.txt`),ye=(0,a.join)(H,`template-index.html`),W=!1;try{o.default.existsSync(U)&&o.default.existsSync(ye)&&o.default.existsSync(z)&&o.default.existsSync((0,a.join)(z,`assets`))&&(await o.default.readFile(U,`utf-8`)).trim()===ue&&(W=!0)}catch{}function G(e){return e.startsWith(`dist/`)||e.startsWith(`.vite-react-ssg-temp/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}let K=(0,s.createLogger)(),Se=K.warn;K.warn=(e,t)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||G(e)||Se(e,t)};let Ce=K.info;K.info=(e,t)=>{G(e)||Ce(e,t)},W?(R(`Client code unchanged. Bypassing client build...`),await o.default.ensureDir(z),await o.default.copy(ye,(0,a.join)(z,w))):((0,r.dividerLog)(),R(`Build for client...`),await(0,s.build)((0,s.mergeConfig)(n,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,...me({input:{app:(0,a.join)(f,w||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||G(t.message)||n(e,t)}})},customLogger:K,mode:u.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){p=e.build.outDir||`dist`}}]})),(0,r.success)(`Client build complete`),await o.default.ensureDir(H),await o.default.copy((0,a.join)(z,w),ye),await o.default.writeFile(U,ue,`utf-8`)),(0,r.dividerLog)();let we=()=>{};if(y){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));we=e()}let q=await le(u,E);(F||W)&&o.default.existsSync(V)&&o.default.readdirSync(V).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0?R(`Server build unchanged. Bypassing server build...`):(o.default.existsSync(V)&&await o.default.remove(V),R(`Build for server...`),process.env.VITE_SSG=`true`,await(0,s.build)((0,s.mergeConfig)(n,{logLevel:`warn`,build:{ssr:q,manifest:!0,outDir:V,minify:!1,cssCodeSplit:!1,...me({output:A===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||G(t.message)||n(e,t)}})},customLogger:K,mode:u.mode})),(0,r.success)(`Server build complete`));let Te=A===`esm`&&process.platform===`win32`?`file://`:``,Ee=A===`esm`?`.mjs`:`.cjs`,De=q.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Oe=Te+(0,a.join)(V,(q.includes(`/`)||q.includes(`\\`)?q.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Ee,``):De)+Ee).replace(/\\/g,`/`),ke=JSON.parse(await o.default.readFile((0,a.join)(V,...pe,`manifest.json`),`utf-8`)),Ae=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),{createRoot:je,includedRoutes:Me}=A===`esm`?await import(Oe):Ae(Oe),Ne=Me||D,{routes:Pe}=await je(!1),{paths:Fe}=await ce(Pe),J=k?Fe:await Ne(Fe,Pe||[]);J=ve(J,Pe||[]),J=Array.from(new Set(J)),(0,r.dividerLog)(),R(`Rendering Pages...`,J.length);let Ie=P!==!1&&!F?await b(p,{publicPath:m,...P}):void 0,Y;F&&(Y=await ee(),Y?(0,r.info)("Critical CSS generation enabled via `zig-critters` (turbo)"):(0,r.warn)(`zig-critters not available, falling back to beasties`)),Ie&&!Y&&(0,r.info)("Critical CSS generation enabled via `beasties`");let Le=``;if(Y){let e=(0,a.join)(z,`assets`);if(o.default.existsSync(e)){let t=o.default.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)Le+=o.default.readFileSync((0,a.join)(e,n),`utf-8`)+`
|
|
2
|
+
`}}let Re=(0,r.createSpinner)(`Rendering pages...`);Re.start();let ze=JSON.parse(await o.default.readFile((0,a.join)(z,...pe,`ssr-manifest.json`),`utf-8`)),Be=JSON.parse(await o.default.readFile((0,a.join)(z,...pe,`manifest.json`),`utf-8`)),Ve=await o.default.readFile((0,a.join)(z,w),`utf-8`);o.default.rmSync((0,a.join)(z,w)),Ve=be(Ve,v);let He=(await import(`p-queue`)).default||await import(`p-queue`),Ue=new He({concurrency:j}),We=new He({concurrency:1}),Ge={},Ke=0,qe=new Map,Je=0,Ye=0,Xe=0,Ze=(0,a.join)(H,`ssg-cache.json`),X=(0,a.join)(H,`ssg-pages`),Z={};if(!F)try{o.default.existsSync(Ze)&&(Z=await o.default.readJson(Ze))}catch{}let Qe={...Z},Q=new Set;Q.add(X);for(let e of J){let t=O===`nested`?(0,a.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;Q.add((0,a.join)(z,(0,a.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;Q.add((0,a.join)(z,`static-loader-data`,(0,a.dirname)(n)))}Q.add((0,a.join)(z,`static-loader-data`)),await Promise.all([...Q].map(e=>o.default.ensureDir(e)));for(let e of J){let n=c.default.createHash(`md5`).update(e).digest(`hex`),i=(0,a.join)(X,`${n}.html`),s=(0,a.join)(X,`${n}.json`),l=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`,u=O===`nested`?(0,a.join)(e.replace(/^\//g,``),`index.html`):l,d=(0,a.join)(z,u),f=t.s(e).replace(/\/$/,``),p=M[f]||M[e],h=!1,g=0;if(!F&&W&&p&&o.default.existsSync(p))try{if(g=Math.round(o.default.statSync(p).mtimeMs),o.default.existsSync(i)){let t=Z[f]||Z[e];t&&Math.round(t.mtime)===g&&(h=!0)}}catch{}if(h){Ue.add(async()=>{try{if(W)await o.default.copy(i,d);else{let e=await o.default.readFile(i,`utf-8`);e=e.replace(/window\.__VITE_REACT_SSG_HASH__\s*=\s*'[^']*'/,`window.__VITE_REACT_SSG_HASH__ = '${B}'`),await o.default.writeFile(d,e,`utf-8`)}let t=Z[f]||Z[e];if(t?.loaderDataFilePath&&o.default.existsSync(s)){let n=W?t.loaderDataFilePath:ge(e,B);await o.default.copy(s,(0,a.join)(z,n)),Ge[_e(e,m)]=n,Ke++}Ye++}catch(t){throw Error(`Error on cached page: ${e}\n${t.stack}`)}});continue}Ue.add(async()=>{try{let n=await je(!1,e),{base:c,routes:l,triggerOnSSRAppRendered:d,transformState:f=t.n,app:h,routerType:v}=n,y=await ne?.(e,Ve,n)||Ve,b=`${t.c(c)}${t.a(e)}`,ee=oe(n),C;if(!h&&v===`remix`){let t=qe.get(e);t?C=t:(C=await _({routes:[...l],locationArg:b,base:c,serverManifest:ke,manifest:Be,ssrManifest:ze}),qe.set(e,C))}else C=new Set;let{appHTML:w,bodyAttributes:E,htmlAttributes:D,metaAttributes:ie,styleTag:O,routerContext:k}=await ee.render(e),A=k?.loaderData,j;if(A&&Object.keys(A).length>0){let t=ge(e,B);j=t,await o.default.writeFile((0,a.join)(z,t),JSON.stringify(A)),Ge[_e(e,m)]=t,Ke++}await d?.(e,w,n);let M=await S({rootContainerId:ae,appHTML:w,indexHTML:y,metaAttributes:ie,bodyAttributes:E,htmlAttributes:D,initialState:null}),N=T(C),P=M.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``);N&&(P=P.replace(`<head>`,`<head>${N}`));let I=await re?.(e,P,n)||P,L=``;if(A&&Object.keys(A).length>0){let t=JSON.stringify(A).replace(/</g,`\\u003c`);L=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${_e(e,m)}': ${t} };`}let R=``;if(k){let e={loaderData:k.loaderData??{},actionData:k.actionData??null,errors:k.errors??null};R=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let se=`<script>window.__VITE_REACT_SSG_HASH__ = '${B}';${L}${R}<\/script>`;if(I=I.replace(`<head>`,`<head>${se}`),I=I.replace(`<script>${x}<\/script>`,``),Y){try{Le&&(I=await Y.processHtml(I,Le))}catch(t){(0,r.warn)(`[zig-critters] Failed to inline CSS for "${e}": ${t instanceof Error?t.message:String(t)}`)}I=I.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else Ie&&(I=await We.add(()=>Ie.process(I)),I=I.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`));O&&(I=I.replace(`<head>`,`<head>${O}`));let ce=await xe(I,te);if(await o.default.writeFile((0,a.join)(z,u),ce,`utf-8`),!F&&p&&o.default.existsSync(p)){await o.default.writeFile(i,ce,`utf-8`);let n=t.s(e).replace(/\/$/,``),r=Math.round(g);A&&Object.keys(A).length>0&&j?(await o.default.writeFile(s,JSON.stringify(A),`utf-8`),Qe[n]={mtime:r,loaderDataFilePath:j}):Qe[n]={mtime:r}}Je++,Xe+=ce.length}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}})}await Ue.start().onIdle(),Re.stop(`success`,`Rendering complete`);let $e=Je+Ye,et=(Xe/1024/1024).toFixed(2);if((0,r.info)(`${r.colors.cyan(String($e).padStart(3,` `))} pages rendered ${r.colors.dim(`(${Je} new, ${Ye} cached, ${et} MB)`)}`),!F)try{if(await o.default.ensureDir((0,a.dirname)(Ze)),await o.default.writeJson(Ze,Qe),o.default.existsSync(X)){let e=await o.default.readdir(X),t=new Set;for(let e of Object.keys(Qe)){let n=c.default.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}let n=0;for(let r of e)(r.endsWith(`.html`)||r.endsWith(`.json`))&&(t.has(r)||(await o.default.remove((0,a.join)(X,r)),n++));n>0&&R(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}(0,r.dividerLog)(),R(`Generating static loader data...`,Ke);let tt=JSON.stringify(Ge,null,0);await o.default.writeFile((0,a.join)(z,`static-loader-data-manifest-${B}.json`),tt),(0,r.info)(`${r.colors.dim(`${p}/`)}${r.colors.cyan(`static-loader-data-manifest-${B}.json`.padEnd(15,` `))} ${r.colors.dim(se(tt))}`),await o.default.remove((0,a.join)(f,`.vite-react-ssg-temp`)),we();let nt=u.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;nt&&!nt.disabled&&nt.generateSW&&(R(`Regenerate PWA...`),await nt.generateSW());let rt=Math.round(performance.now()-g),$=await de(z,rt);fe(z,$);let it=e=>(e/1024).toFixed(0),at=e=>(e/1024/1024).toFixed(1),ot=$.totalJSBundleSize>1024*1024?at($.totalJSBundleSize)+` MB`:it($.totalJSBundleSize)+` kB`,st=$.totalCSSBundleSize>1024*1024?at($.totalCSSBundleSize)+` MB`:it($.totalCSSBundleSize)+` kB`;console.log((0,r.table)([`Metric`,`Result`],[[`Build Time`,`${(rt/1e3).toFixed(1)}s`],[`Pages`,String($.pages.length)],[`JavaScript`,ot],[`CSS`,st]],{style:`round`,headerSeparator:!0})),(0,r.success)(`Build finished.`),await ie?.(p),setTimeout(()=>{(0,r.warn)(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function be(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function xe(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return(0,r.error)(`Error formatting html: ${t?.message}`),e}return e}function W({template:e,ssrEntry:n,onBeforePageRender:i,entry:a,rootContainerId:o,onPageRendered:c}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d,f)=>{try{let r=u.originalUrl,f=await(await l.ssrLoadModule(n).then(e=>e.createRoot))(!1,r),p=oe(f),{app:m,base:h}=f,[g,_]=r.split(`?`),v=new URLSearchParams(_);if(!m&&v.has(`_data`))return p.handleLoader(u,d);let y=await l.transformIndexHtml(r,e),b=await i?.(r,y,f)||y,{appHTML:ee,bodyAttributes:x,htmlAttributes:C,metaAttributes:T,styleTag:E}=await p.render(t.o(g,h));T.push(E);let te=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),D=new Set,ne=new Set,re=async e=>{if(!e||!e?.ssrTransformResult||ne.has(e))return;ne.add(e);let{deps:t=[],dynamicDeps:n=[]}=e?.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))D.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await re(t)}};await Promise.all(te.map(async e=>re(e)));let ie=[...D].map(e=>w(t.i(l.config.base,e)));T.push(...ie);let O=await S({rootContainerId:o,appHTML:ee,indexHTML:b,metaAttributes:T,bodyAttributes:x,htmlAttributes:C,initialState:null}),k=await c?.(r,O,f)||O;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,s.send)(u,d,k,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){l.ssrFixStacktrace(e),(0,r.error)(`SSR render error`,e),d.statusCode=500,d.end(e.stack)}};return()=>{l.middlewares.use(u)}}}}async function G(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await(0,s.resolveConfig)(e,`serve`,n,n),i=process.cwd(),o=r.root||i,c={...r.ssgOptions,...t},{htmlEntry:l=`index.html`,onBeforePageRender:u,onPageRendered:d,rootContainerId:f=`root`,mock:m=!1}=c,h=c.entry||await C(o,l),[g,_]=await Promise.all([le(r,h),p.default.readFile((0,a.join)(o,l),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,m){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));e()}return await(0,s.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(),Se(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Se(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,i=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);i+=` ready in ${r.colors.reset(r.colors.bold(`${e}ms`))}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${L} `)}`,{clear:!e.config.logger.hasWarned}),n(`${r.colors.cyan(`\n VITE v${s.version}`)+r.colors.dim(i)}\n`),n(r.colors.green(` dev server running at:`)),e.printUrls()}exports.build=ye,exports.createServer=G,exports.dev=K;
|
package/dist/node.d.cts
CHANGED
package/dist/node.d.mts
CHANGED
package/dist/node.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o}from"./state-U8UuhxSd.mjs";import{createRequire as s}from"node:module";import{Fragment as c,jsx as l}from"react/jsx-runtime";import{colors as u,dividerLog as d,error as f,info as p,success as m,warn as h}from"@bdocs/dui";import g,{dirname as _,isAbsolute as v,join as y,relative as b}from"node:path";import x from"fs-extra";import{JSDOM as S}from"jsdom";import{build as C,createLogger as w,createServer as T,mergeConfig as E,resolveConfig as D,send as ee,version as O}from"vite";import k from"node:crypto";import{once as A}from"node:events";import{Readable as j,Writable as M}from"node:stream";import*as N from"react-dom/server";import P from"node:fs";import te from"node:fs/promises";var ne=s(import.meta.url);const re=/import\("([^)]+)"\)/g;async function ie({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let{matchRoutes:o}=await import(`react-router-dom`),s=o([...e],t,n),c=s?.map(e=>e.route.entry).filter(Boolean)??[],l=new Set;s?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(re);for(let e of n)l.add(e[1].split(`/`).at(-1)??``)});let u=new Set;c.forEach(e=>u.add(e));let d=[...Object.entries(r)];l.forEach(e=>{let t=d.find(([t,n])=>n.file.endsWith(e));t&&u.add(t[0])});let f=ae(i,u),p=new Set;return Array.from(f).forEach(e=>{(a[e]||[]).forEach(e=>{p.add(e)})}),p}function ae(e,t){let n=new Set;if(!t)return n;for(let r of t)F(e,r,n);return n}function F(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{F(e,t,n)}),n):n}async function oe(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}const se=`/* SCRIPT_COMMENT_PLACEHOLDER */`;async function ce({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${se}<\/script>`,l=`<head>`,u=r.join(``);t=t.replace(l,l+u);let d=`<body`;t=t.replace(d,`${d} ${i}`);let f=`<html`;t=t.replace(f,`${f} ${a}`);let p=`<div id="${e}"></div>`;if(t.includes(p))return t.replace(p,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`);let m=await import(`html5parser`),h=m.parse(t),g;if(m.walk(h,{enter:r=>{if(!g&&r?.type===m.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);g=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!g)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return g}async function le(e,t=`index.html`){let[,n]=[...(await x.readFile(y(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)\>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function ue(e){return`<link rel="stylesheet" href="${e}">`}function de(e,t){let n=new Set;t&&t.forEach(t=>{n.has(t)||(n.add(t),I(e,t))})}function I(e,t){t.endsWith(`.js`)?R(e,{rel:`modulepreload`,crossOrigin:``,href:t}):t.endsWith(`.css`)?R(e,{rel:`stylesheet`,href:t,crossOrigin:``}):t.endsWith(`.woff`)||t.endsWith(`.woff2`)||t.endsWith(`.ttf`)?R(e,{rel:`preload`,as:`font`,type:`font/woff2`,href:t,crossOrigin:``}):(t.endsWith(`.png`)||t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)||t.endsWith(`.webp`)||t.endsWith(`.gif`)||t.endsWith(`.ico`)||t.endsWith(`.svg`))&&R(e,{rel:`preload`,as:`image`,href:t,crossOrigin:``})}function L(e){return e.createElement(`link`)}function fe(e,t){let n=Object.keys(t);for(let r of n)e.setAttribute(r,t[r])}function R(e,t){if(e.head.querySelector(`link[href='${t.file}']`))return;let n=L(e);fe(n,t),e.head.appendChild(n)}function pe(e,t){if(e===!1||e==null)throw f(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function me(e){let t=new Headers;for(let[n,r]of Object.entries(e))if(r)if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r);return t}function he(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;pe(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:me(e.headers)};return new Request(n.href,r)}async function ge(e,t){t.statusCode=e.status,t.statusMessage=e.statusText;for(let[n,r]of e.headers)t.setHeader(n,r);if(e.body){let n=e.body,r=j.from(n);r.pipe(t),await A(r,`end`)}else t.end()}function _e(e){let t=new URL(e.url);t.searchParams.delete(`_data`);let n={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return n.body&&(n.duplex=`half`),new Request(t.href,n)}async function z(e){if(!N.renderToPipeableStream)return N.renderToString(l(c,{children:e}));let t=new ve,{pipe:n}=N.renderToPipeableStream(e,{onError(e){t.destroy(e)},onAllReady(){n(t)}});return t.getPromise()}var ve=class extends M{constructor(){super(),this._output=``,this._deferred={promise:null,resolve:()=>null,reject:()=>null},this._deferred.promise=new Promise((e,t)=>{this._deferred.resolve=e,this._deferred.reject=t})}_write(e,t,n){this._output+=e.toString(),n()}_destroy(e,t){e instanceof Error?this._deferred.reject(e):t()}end(){return this._deferred.resolve(this._output),this.destroy()}getPromise(){return this._deferred.promise}};function B(e,t,n){let{helmet:r}=t,i=r.htmlAttributes.toString(),a=r.bodyAttributes.toString(),o=r.title.toString();o.split(`>`)[1]===`</title`&&(o=``);let s=[o,r.meta.toString(),r.link.toString(),r.script.toString()],c=n?.toString?.(e)??``;return{htmlAttributes:i,bodyAttributes:a,metaAttributes:s.filter(Boolean),styleTag:c}}const{HelmetProvider:V}=s(import.meta.url)(`react-helmet-async`);var H=class{constructor(e){this.handleLoader=async(e,t)=>{let{routes:n,base:r}=this.context,{matchRoutes:i}=await import(`react-router-dom`),o=he(e),s=new URL(o.url),c=decodeURIComponent(s.searchParams.get(`_data`)),l=i(a([...n],e=>e),{pathname:s.pathname,search:s.search,hash:s.hash,state:null,key:`default`},r);if(!l){t.statusCode=404,t.end(`Route not found: ${c}`);return}let u=l.find(e=>e.route.id===c);if(!u){t.statusCode=404,t.end(`Route not found: ${c}`);return}let d=u.route.loader??await u.route.lazy?.().then(e=>e.loader);if(!d){t.statusCode=200,t.end(`There is no loader for the route: ${c}`);return}await ge(await ye({loader:d,params:u.params,request:o,routeId:c}),t)},this.context=e}async render(e){let{base:t,routes:n,getStyleCollector:r,routerOptions:i}=this.context,s=o(e),c=s;if(t!==`/`){let e=o(t).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let u=`http://localhost${c}`,d=new Request(u),f=r?await r():null,p={},m=null,{StaticRouterProvider:h,createStaticHandler:g,createStaticRouter:_}=await import(`react-router-dom`),v=a([...n],e=>e),{query:y}=g(v,{basename:t}),b=await y(d),x=0;for(;b instanceof Response&&x<10;){let e=b.headers.get(`Location`);if(!e)break;let t;if(/^https?:\/\//i.test(e))try{let n=new URL(e);if(n.hostname===`localhost`||n.hostname===``)t=`http://localhost${o(n.pathname+n.search+n.hash)}`;else break}catch{break}else t=`http://localhost${o(e)}`;b=await y(new Request(t)),x++}if(b instanceof Response)throw b;m=b;let S=l(V,{context:p,children:l(h,{router:_(v,m,{future:i.future}),context:m})});f&&(S=f.collect(S));let C=await z(S),{htmlAttributes:w,bodyAttributes:T,metaAttributes:E,styleTag:D}=B(C,p,f);return{appHTML:C,htmlAttributes:w,bodyAttributes:T,metaAttributes:E,styleTag:D,routerContext:m}}};async function ye({loader:e,params:t,request:n,routeId:r}){let{json:i}=await import(`react-router-dom`),a=await e({request:_e(W(n)),params:t});if(a===void 0)throw Error(`You defined a loader for route "${r}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`);return U(a)?a:i(a)}function U(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function W(e){let t=new URL(e.url),n=t.searchParams.getAll(`index`);t.searchParams.delete(`index`);let r=[];for(let e of n)e&&r.push(e);for(let e of r)t.searchParams.append(`index`,e);let i={method:e.method,body:e.body,headers:e.headers,signal:e.signal};return i.body&&(i.duplex=`half`),new Request(t.href,i)}function be(e){return new H(e)}var G=`0.1.1`;function K(e,t){p(`${e}${t?u.blue(` (${t})`):``}`)}function xe(e){return`${(e.length/1024).toFixed(2)} KiB`}async function Se(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&Te(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function Ce(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:y(e.root,t))}const we=/[:*?]/;function Te(e){return e?we.test(e):!1}const Ee=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),q=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function J(e){try{return P.statSync(e).size}catch{return 0}}async function De(e,t){let n=y(e,`.vite`),r=y(e,`assets`),i={},a=y(n,`manifest.json`);P.existsSync(a)&&(i=JSON.parse(await P.readFileSync(a,`utf-8`)));let o=0,s=0;for(let[,t]of Object.entries(i)){let{file:n,css:r=[]}=t,i=J(y(e,n));o+=i;for(let t of r)s+=J(y(e,t))}let c=0,l=0;if(P.existsSync(r)){let e=P.readdirSync(r,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=g.extname(t.name).toLowerCase(),n=y(r,t.name);Ee.has(e)?c+=J(n):q.has(e)&&l++}}let u=y(e,`index.html`),d=0,f=[];if(P.existsSync(u)){let e=J(u);d+=e,f.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}try{let t=P.readdirSync(e,{recursive:!0});for(let n of t){if(!n.endsWith(`.html`)||n===`index.html`)continue;let t=J(y(e,n));if(t>0){let e=`/`+n.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);d+=t,f.push({route:e,htmlSize:t,htmlFile:n})}}}catch{}return{buildTime:t,totalJSBundleSize:o,totalCSSBundleSize:s,totalImagesSize:c,totalHTMLSize:d,fontCount:l,pages:f}}function Oe(e,t){let n=g.resolve(e,`..`,`.boltdocs`,`reports`);P.existsSync(n)||P.mkdirSync(n,{recursive:!0});let r=y(n,`performance.json`);P.writeFileSync(r,JSON.stringify(t,null,2))}const ke=Number.parseInt(O)>=5?[`.vite`]:[];function Ae(e){return Number.parseInt(O)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Y(e,t,n,r){let i=[];if(!x.existsSync(e))return i;let a=x.readdirSync(e,{withFileTypes:!0}),o=e===t;for(let s of a){let a=s.name;if(a===`node_modules`||a===`.git`||a===`.boltdocs`||a===`.turbo`||a===`dist`||a===`coverage`||o&&(n&&a===n||r&&a===r))continue;let c=y(e,a),l=s.isDirectory();if(s.isSymbolicLink())try{l=x.statSync(c).isDirectory()}catch{continue}l?i.push(...Y(c,t,n,r)):i.push(c)}return i}function je(e,t,n){try{let r=Y(e,e,t,n),i=y(y(e,`..`),`packages`);if(x.existsSync(i)&&x.existsSync(y(i,`core/package.json`))){let e=Y(i,i,``,``);r.push(...e)}r.sort();let a=k.createHash(`sha256`);for(let t of r){let n=x.statSync(t),r=b(e,t).replace(/\\/g,`/`);a.update(r),a.update(n.mtimeMs.toString()),a.update(n.size.toString())}return a.digest(`hex`)}catch{return Math.random().toString(36).substring(2,12)}}function Me(e,t){return`static-loader-data${o(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${t}.json`}function Ne(e,t=`/`){let n=o(e),r=n;if(t!==`/`){let e=o(t).replace(/\/$/,``);!n.startsWith(e+`/`)&&n!==e&&(r=`${e}${n}`)}return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Pe(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Fe(n={},i={}){let a=process.env.MODE||process.env.NODE_ENV||n.mode||`production`,c=await D(i,`build`,a,a),l=process.cwd(),f=c.root||l,g=c.build.outDir||`dist`,T=c.base,ee=Object.assign({},c.ssgOptions||{},n),O=performance.now(),{script:A=`sync`,mock:j=!1,htmlEntry:M=`index.html`,entry:N=await le(f,M),formatting:P=`none`,includedRoutes:te=Pe,onBeforePageRender:re,onPageRendered:ae,onFinished:F,dirStyle:ue=`flat`,includeAllRoutes:I=!1,format:L=`esm`,concurrency:fe=20,rootContainerId:R=`root`,routeToSourceFileMap:pe={},cacheDir:me=`.boltdocs/build`}=ee,he=ee.beastiesOptions??{},ge=`docs`,_e=Object.values(pe);if(_e.length>0){let e=_e[0],t=b(f,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(ge=t[0])}let z=v(g)?g:y(f,g),ve=je(f,ge,g),B=ve.substring(0,12),V=y(f,`.vite-react-ssg-temp`,B);x.existsSync(V)&&await x.remove(V);let H=v(me)?me:y(f,me),ye=y(H,`client-hash.txt`),U=y(H,`template-index.html`),W=!1;try{x.existsSync(ye)&&x.existsSync(U)&&x.existsSync(z)&&x.existsSync(y(z,`assets`))&&(await x.readFile(ye,`utf-8`)).trim()===ve&&(W=!0)}catch{}let G=w(),we=G.warn;G.warn=(e,t)=>{e.includes(`externalized for browser compatibility`)||we(e,t)};let Te=G.info;G.info=(e,t)=>{e.startsWith(`dist/`)||e.startsWith(`.vite-react-ssg-temp/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)||Te(e,t)},W?(K(`Client code unchanged. Bypassing client build...`),await x.ensureDir(z),await x.copy(U,y(z,M))):(d(),K(`Build for client...`),await C(E(i,{build:{manifest:!0,ssrManifest:!0,...Ae({input:{app:y(f,M||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:G,mode:c.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){g=e.build.outDir||`dist`}}]})),m(`Client build complete`),await x.ensureDir(H),await x.copy(y(z,M),U),await x.writeFile(ye,ve,`utf-8`)),d();let Ee=()=>{};if(j){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);Ee=e()}K(`Build for server...`),process.env.VITE_SSG=`true`;let q=await Ce(c,N);await C(E(i,{build:{ssr:q,manifest:!0,outDir:V,minify:!1,cssCodeSplit:!1,...Ae({output:L===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||n(e,t)}})},customLogger:G,mode:c.mode})),m(`Server build complete`);let J=L===`esm`&&process.platform===`win32`?`file://`:``,Y=L===`esm`?`.mjs`:`.cjs`,Fe=q.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Re=J+y(V,(q.includes(`/`)||q.includes(`\\`)?q.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Y,``):Fe)+Y).replace(/\\/g,`/`),ze=JSON.parse(await x.readFile(y(V,...ke,`manifest.json`),`utf-8`)),Be=ne===void 0?s(import.meta.url):ne,{createRoot:Ve,includedRoutes:He}=L===`esm`?await import(Re):Be(Re),Ue=He||te,{routes:We}=await Ve(!1),{paths:Ge}=await Se(We),X=I?Ge:await Ue(Ge,We||[]);X=Pe(X,We||[]),X=Array.from(new Set(X)),d(),K(`Rendering Pages...`,X.length);let Ke=he===!1?void 0:await oe(g,{publicPath:T,...he});Ke&&p("Critical CSS generation enabled via `beasties`");let qe=JSON.parse(await x.readFile(y(z,...ke,`ssr-manifest.json`),`utf-8`)),Je=JSON.parse(await x.readFile(y(z,...ke,`manifest.json`),`utf-8`)),Ye=await x.readFile(y(z,M),`utf-8`);x.rmSync(y(z,M)),Ye=Ie(Ye,A);let Xe=(await import(`p-queue`)).default||await import(`p-queue`),Ze=new Xe({concurrency:fe}),Qe=new Xe({concurrency:1}),$e={},et=0,tt=0,nt=0,rt=0,it=y(H,`ssg-cache.json`),Z=y(H,`ssg-pages`),Q={};try{x.existsSync(it)&&(Q=await x.readJson(it))}catch{}let at={...Q};for(let n of X){let i=k.createHash(`md5`).update(n).digest(`hex`),a=y(Z,`${i}.html`),s=y(Z,`${i}.json`),c=`${(n.endsWith(`/`)?`${n}index`:n).replace(/^\//g,``)}.html`,l=ue===`nested`?y(n.replace(/^\//g,``),`index.html`):c,u=y(z,l),d=o(n).replace(/\/$/,``),f=pe[d]||pe[n],p=!1,m=0;if(W&&f&&x.existsSync(f))try{if(m=Math.round(x.statSync(f).mtimeMs),x.existsSync(a)){let e=Q[d]||Q[n];e&&Math.round(e.mtime)===m&&(p=!0)}}catch{}if(p){Ze.add(async()=>{try{if(await x.ensureDir(_(u)),W)await x.copy(a,u);else{let e=await x.readFile(a,`utf-8`);e=e.replace(/window\.__VITE_REACT_SSG_HASH__\s*=\s*'[^']*'/,`window.__VITE_REACT_SSG_HASH__ = '${B}'`),await x.writeFile(u,e,`utf-8`)}let e=Q[d]||Q[n];if(e?.loaderDataFilePath&&x.existsSync(s)){let t=W?e.loaderDataFilePath:Me(n,B);await x.ensureDir(y(z,_(t))),await x.copy(s,y(z,t)),$e[Ne(n,T)]=t,et++}nt++}catch(e){throw Error(`Error on cached page: ${n}\n${e.stack}`)}});continue}Ze.add(async()=>{try{let i=await Ve(!1,n),{base:c,routes:u,triggerOnSSRAppRendered:d,transformState:p=r,app:h,routerType:g}=i,v=await re?.(n,Ye,i)||Ye,b=`${t(c)}${e(n)}`,C=be(i),w=!h&&g===`remix`?await ie({routes:[...u],locationArg:b,base:c,serverManifest:ze,manifest:Je,ssrManifest:qe}):new Set,{appHTML:E,bodyAttributes:D,htmlAttributes:ee,metaAttributes:O,styleTag:k,routerContext:A}=await C.render(n),j=A?.loaderData,M;if(j&&Object.keys(j).length>0){let e=Me(n,B);M=e,await x.ensureDir(y(z,_(e))),await x.writeFile(y(z,e),JSON.stringify(j)),$e[Ne(n,T)]=e,et++}await d?.(n,E,i);let N=new S(await ce({rootContainerId:R,appHTML:E,indexHTML:v,metaAttributes:O,bodyAttributes:D,htmlAttributes:ee,initialState:null}));de(N.window.document,w);let te=N.window.document;for(let e of te.querySelectorAll(`script`))e.textContent?.includes(`window.__staticRouterHydrationData`)&&e.remove();let ne=N.serialize();N.window.close();let F=await ae?.(n,ne,i)||ne,oe=``;if(j&&Object.keys(j).length>0){let e=JSON.stringify(j).replace(/</g,`\\u003c`);oe=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Ne(n,T)}': ${e} };`}let le=``;if(A){let e={loaderData:A.loaderData??{},actionData:A.actionData??null,errors:A.errors??null};le=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let ue=`<script>window.__VITE_REACT_SSG_HASH__ = '${B}';${oe}${le}<\/script>`;F=F.replace(`<head>`,`<head>${ue}`),F=F.replace(`<script>${se}<\/script>`,``),Ke&&(F=await Qe.add(()=>Ke.process(F)),F=F.replace(/<link\srel="stylesheet"/g,`<link rel="stylesheet" crossorigin`)),k&&(F=F.replace(`<head>`,`<head>${k}`));let I=await Le(F,P);if(await x.ensureDir(y(z,_(l))),await x.writeFile(y(z,l),I,`utf-8`),f&&x.existsSync(f)){await x.ensureDir(Z),await x.writeFile(a,I,`utf-8`);let e=o(n).replace(/\/$/,``),t=Math.round(m);j&&Object.keys(j).length>0&&M?(await x.writeFile(s,JSON.stringify(j),`utf-8`),at[e]={mtime:t,loaderDataFilePath:M}):at[e]={mtime:t}}tt++,rt+=I.length}catch(e){throw Error(`Error on page: ${n}\n${e.stack}`)}})}await Ze.start().onIdle();let ot=tt+nt,st=(rt/1024/1024).toFixed(2);p(`${u.cyan(String(ot).padStart(3,` `))} pages rendered ${u.dim(`(${tt} new, ${nt} cached, ${st} MB)`)}`);try{if(await x.ensureDir(_(it)),await x.writeJson(it,at),x.existsSync(Z)){let e=await x.readdir(Z),t=new Set;for(let e of Object.keys(at)){let n=k.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}let n=0;for(let r of e)(r.endsWith(`.html`)||r.endsWith(`.json`))&&(t.has(r)||(await x.remove(y(Z,r)),n++));n>0&&K(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}d(),K(`Generating static loader data...`,et);let ct=JSON.stringify($e,null,0);await x.writeFile(y(z,`static-loader-data-manifest-${B}.json`),ct),p(`${u.dim(`${g}/`)}${u.cyan(`static-loader-data-manifest-${B}.json`.padEnd(15,` `))} ${u.dim(xe(ct))}`),await x.remove(y(f,`.vite-react-ssg-temp`)),Ee();let lt=c.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;lt&&!lt.disabled&<.generateSW&&(K(`Regenerate PWA...`),await lt.generateSW());let ut=Math.round(performance.now()-O),$=await De(z,ut);Oe(z,$),K(`Build took ${(ut/1e3).toFixed(1)}s — JS: ${($.totalJSBundleSize/1024).toFixed(0)}kb, CSS: ${($.totalCSSBundleSize/1024).toFixed(0)}kb, Pages: ${$.pages.length}`),d(),m(`Build finished.`),await F?.(g),setTimeout(()=>{h(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function Ie(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Le(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return f(`Error formatting html: ${t?.message}`),e}return e}function Re({template:e,ssrEntry:t,onBeforePageRender:r,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(c){let l=async(l,u,d)=>{try{let d=l.originalUrl,f=await(await c.ssrLoadModule(t).then(e=>e.createRoot))(!1,d),p=be(f),{app:m,base:h}=f,[g,_]=d.split(`?`),v=new URLSearchParams(_);if(!m&&v.has(`_data`))return p.handleLoader(l,u);let y=await c.transformIndexHtml(d,e),b=await r?.(d,y,f)||y,{appHTML:x,bodyAttributes:S,htmlAttributes:C,metaAttributes:w,styleTag:T}=await p.render(i(g,h));w.push(T);let E=await Promise.all([t,a].map(async e=>await c.moduleGraph.getModuleByUrl(e))),D=new Set,O=new Set,k=async e=>{if(!e||!e?.ssrTransformResult||O.has(e))return;O.add(e);let{deps:t=[],dynamicDeps:n=[]}=e?.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))D.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await c.moduleGraph.getModuleByUrl(e);t&&await k(t)}};await Promise.all(E.map(async e=>k(e)));let A=[...D].map(e=>ue(n(c.config.base,e)));w.push(...A);let j=await ce({rootContainerId:o,appHTML:x,indexHTML:b,metaAttributes:w,bodyAttributes:S,htmlAttributes:C,initialState:null}),M=await s?.(d,j,f)||j;u.statusCode=200,u.setHeader(`Content-Type`,`text/html`),ee(l,u,M,`html`,{headers:`pluginContainer`in c?c.config.server.headers:c.config.preview.headers})}catch(e){c.ssrFixStacktrace(e),f(`SSR render error`,e),u.statusCode=500,u.end(e.stack)}};return()=>{c.middlewares.use(l)}}}}async function ze(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await D(e,`serve`,n,n),i=process.cwd(),a=r.root||i,o={...r.ssgOptions,...t},{htmlEntry:s=`index.html`,onBeforePageRender:c,onPageRendered:l,rootContainerId:u=`root`,mock:d=!1}=o,f=o.entry||await le(a,s),[p,m]=await Promise.all([Ce(r,f),te.readFile(y(a,s),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,d){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);e()}return await T({...e,plugins:[...e.plugins??[],Re({template:m,ssrEntry:p,onBeforePageRender:c,onPageRendered:l,entry:f,rootContainerId:u})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function Be(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await ze(t,e);return await r.listen(),Ve(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){f(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Ve(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${u.reset(u.bold(`${e}ms`))}`}n(`\n ${u.cyan(` VITE-REACT-SSG v${G} `)}`,{clear:!e.config.logger.hasWarned}),n(`${u.cyan(`\n VITE v${O}`)+u.dim(r)}\n`),n(u.green(` dev server running at:`)),e.printUrls()}export{Fe as build,ze as createServer,Be as dev};
|
|
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-CkhLd6hN.mjs";import{createRequire as s}from"node:module";import{Fragment as c,jsx as l}from"react/jsx-runtime";import{colors as u,createSpinner as d,dividerLog as f,error as p,info as m,success as h,table as g,warn as _}from"@bdocs/dui";import v,{dirname as y,isAbsolute as b,join as x,relative as S}from"node:path";import C from"fs-extra";import{build as w,createLogger as T,createServer as E,mergeConfig as D,resolveConfig as O,send as k,version as A}from"vite";import j from"node:crypto";import{once as M}from"node:events";import{Readable as ee}from"node:stream";import*as N from"react-dom/server";import P from"node:fs";import te from"node:fs/promises";var F=s(import.meta.url);const ne=/import\("([^)]+)"\)/g;let re=null;async function ie(){if(!re){let{matchRoutes:e}=await import(`react-router-dom`);re=e}return re}async function ae({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let o=(await ie())([...e],t,n),s=o?.map(e=>e.route.entry).filter(Boolean)??[],c=new Set;o?.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(ne);for(let e of n)c.add(e[1].split(`/`).at(-1)??``)});let l=new Set;s.forEach(e=>l.add(e));let u=[...Object.entries(r)];c.forEach(e=>{let t=u.find(([t,n])=>n.file.endsWith(e));t&&l.add(t[0])});let d=oe(i,l),f=new Set;return Array.from(d).forEach(e=>{(a[e]||[]).forEach(e=>{f.add(e)})}),f}function oe(e,t){let n=new Set;if(!t)return n;for(let r of t)se(e,r,n);return n}function se(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{se(e,t,n)}),n):n}async function ce(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}async function le(){try{let e=await import(`@bdocs/zig-critters`),t=e.processHtml||e.default?.processHtml;return t?{processHtml:t}:void 0}catch{return}}const ue=`/* SCRIPT_COMMENT_PLACEHOLDER */`;async function de({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${ue}<\/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 fe(e,t=`index.html`){let[,n]=[...(await C.readFile(x(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 pe(e){return`<link rel="stylesheet" href="${e}">`}function me(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=he(e);r&&n.push(r)}}),n.join(``)}function he(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}function ge(e,t){if(e===!1||e==null)throw console.error(`The following error is a bug in Boltdocs SSG; please open an issue! https://github.com/bolt-docs/boltdocs/issues/new`),Error(t)}function _e(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 ve(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;ge(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 ye(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=ee.from(n);r.pipe(t),await M(r,`end`)}else t.end()}function be(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 I(e){return N.renderToString(l(c,{children:e}))}function xe(e,t,n){let{helmet:r}=t,i=r.htmlAttributes.toString(),a=r.bodyAttributes.toString(),o=r.title.toString();o.split(`>`)[1]===`</title`&&(o=``);let s=[o,r.meta.toString(),r.link.toString(),r.script.toString()],c=n?.toString?.(e)??``;return{htmlAttributes:i,bodyAttributes:a,metaAttributes:s.filter(Boolean),styleTag:c}}let L=null;function R(){return L||(L=globalThis.__BOLTDOCS_HELMET_PROVIDER__||(()=>{let{createRequire:e}=F(`node:module`);return e(import.meta.url)(`react-helmet-async`).HelmetProvider})(),L)}let z=null;async function B(){return z||=await import(`react-router-dom`),z}var V=class{constructor(e){this._dataRoutes=null,this._staticHandler=null,this.handleLoader=async(e,t)=>{let{routes:n,base:r}=this.context,{matchRoutes:i}=await B(),o=ve(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 ye(await H({loader:d,params:u.params,request:o,routeId:c}),t)},this.context=e}async render(e){let{base:t,routes:n,getStyleCollector:r,routerOptions:i}=this.context,s=o(e),c=s;if(t!==`/`){let e=o(t).replace(/\/$/,``);!s.startsWith(e+`/`)&&s!==e&&(c=`${e}${s}`)}let u=`http://localhost${c}`,d=new Request(u),f=r?await r():null,p={},m=null,{StaticRouterProvider:h,createStaticHandler:g,createStaticRouter:_}=await B(),v=this._dataRoutes??=a([...n],e=>e);this._staticHandler??=g(v,{basename:t});let{query:y}=this._staticHandler,b=await y(d),x=0;for(;b instanceof Response&&x<10;){let e=b.headers.get(`Location`);if(!e)break;let t;if(/^https?:\/\//i.test(e))try{let n=new URL(e);if(n.hostname===`localhost`||n.hostname===``)t=`http://localhost${o(n.pathname+n.search+n.hash)}`;else break}catch{break}else t=`http://localhost${o(e)}`;b=await y(new Request(t)),x++}if(b instanceof Response)throw b;m=b;let S=_(v,m,{future:i.future}),C=R(),w=C;w&&typeof w==`function`&&(w.canUseDOM=!1);let T=l(C,{context:p,children:l(h,{router:S,context:m})});f&&(T=f.collect(T));let E=await I(T),{htmlAttributes:D,bodyAttributes:O,metaAttributes:k,styleTag:A}=xe(E,p,f);return{appHTML:E,htmlAttributes:D,bodyAttributes:O,metaAttributes:k,styleTag:A,routerContext:m}}};async function H({loader:e,params:t,request:n,routeId:r}){let{json:i}=await B(),a=await e({request:be(Ce(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 Se(a)?a:i(a)}function Se(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function Ce(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 we(e){return new V(e)}var U=`0.2.0`;function W(e,t){m(`${e}${t?u.blue(` (${t})`):``}`)}function Te(e){return`${(e.length/1024).toFixed(2)} KiB`}async function Ee(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&&K(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function De(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:x(e.root,t))}const G=/[:*?]/;function K(e){return e?G.test(e):!1}const Oe=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),ke=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function q(e){try{return P.statSync(e).size}catch{return 0}}async function Ae(e,t){let n=x(e,`.vite`),r=x(e,`assets`),i={},a=x(n,`manifest.json`);P.existsSync(a)&&(i=JSON.parse(await P.readFileSync(a,`utf-8`)));let o=0,s=0;for(let[,t]of Object.entries(i)){let{file:n,css:r=[]}=t,i=q(x(e,n));o+=i;for(let t of r)s+=q(x(e,t))}let c=0,l=0;if(P.existsSync(r)){let e=P.readdirSync(r,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=v.extname(t.name).toLowerCase(),n=x(r,t.name);Oe.has(e)?c+=q(n):ke.has(e)&&l++}}let u=x(e,`index.html`),d=0,f=[];if(P.existsSync(u)){let e=q(u);d+=e,f.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}try{let t=P.readdirSync(e,{recursive:!0});for(let n of t){if(!n.endsWith(`.html`)||n===`index.html`)continue;let t=q(x(e,n));if(t>0){let e=`/`+n.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);d+=t,f.push({route:e,htmlSize:t,htmlFile:n})}}}catch{}return{buildTime:t,totalJSBundleSize:o,totalCSSBundleSize:s,totalImagesSize:c,totalHTMLSize:d,fontCount:l,pages:f}}function je(e,t){let n=v.resolve(e,`..`,`.boltdocs`,`reports`);P.existsSync(n)||P.mkdirSync(n,{recursive:!0});let r=x(n,`performance.json`);P.writeFileSync(r,JSON.stringify(t,null,2))}const Me=Number.parseInt(A)>=5?[`.vite`]:[];function Ne(e){return Number.parseInt(A)>=8?{rolldownOptions:e}:{rollupOptions:e}}function J(e){let t=[];if(!C.existsSync(e))return t;let n=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`]),r=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`,`public`]),i=C.readdirSync(e,{withFileTypes:!0});for(let a of i){if(a.name.startsWith(`.`)||r.has(a.name))continue;let i=x(e,a.name);if(a.isDirectory())t.push(...J(i));else{let e=`.`+a.name.split(`.`).pop()?.toLowerCase();n.has(e)&&t.push(i)}}return t}function Pe(e,t,n){try{let n=[],r=x(e,t);C.existsSync(r)&&n.push(...J(r));for(let t of[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`]){let r=x(e,t);C.existsSync(r)&&n.push(r)}n.sort();let i=j.createHash(`sha256`);for(let t of n){let n=C.statSync(t),r=S(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 Fe(e,t){return`static-loader-data${o(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${t}.json`}function Ie(e,t=`/`){let n=o(e),r=n;if(t!==`/`){let e=o(t).replace(/\/$/,``);!n.startsWith(e+`/`)&&n!==e&&(r=`${e}${n}`)}return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Le(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Re(n={},i={}){let a=process.env.MODE||process.env.NODE_ENV||n.mode||`production`,c=await O(i,`build`,a,a),l=process.cwd(),p=c.root||l,v=c.build.outDir||`dist`,E=c.base,k=Object.assign({},c.ssgOptions||{},n),A=performance.now(),{script:M=`sync`,mock:ee=!1,htmlEntry:N=`index.html`,entry:P=await fe(p,N),formatting:te=`none`,includedRoutes:ne=Le,onBeforePageRender:re,onPageRendered:ie,onFinished:oe,dirStyle:se=`flat`,includeAllRoutes:pe=!1,format:he=`esm`,concurrency:ge=20,rootContainerId:_e=`root`,routeToSourceFileMap:ve={},cacheDir:ye=`.boltdocs/build`}=k,be=k.beastiesOptions??{},I=k.turbo??!1,xe=`docs`,L=Object.values(ve);if(L.length>0){let e=L[0],t=S(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(xe=t[0])}let R=b(v)?v:x(p,v),z=Pe(p,xe,v),B=z.substring(0,12),V=x(p,`.vite-react-ssg-temp`,I?`turbo-ssr`:B),H=b(ye)?ye:x(p,ye),Se=x(H,`client-hash.txt`),Ce=x(H,`template-index.html`),U=!1;try{C.existsSync(Se)&&C.existsSync(Ce)&&C.existsSync(R)&&C.existsSync(x(R,`assets`))&&(await C.readFile(Se,`utf-8`)).trim()===z&&(U=!0)}catch{}function G(e){return e.startsWith(`dist/`)||e.startsWith(`.vite-react-ssg-temp/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}let K=T(),Oe=K.warn;K.warn=(e,t)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||G(e)||Oe(e,t)};let ke=K.info;K.info=(e,t)=>{G(e)||ke(e,t)},U?(W(`Client code unchanged. Bypassing client build...`),await C.ensureDir(R),await C.copy(Ce,x(R,N))):(f(),W(`Build for client...`),await w(D(i,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,...Ne({input:{app:x(p,N||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||G(t.message)||n(e,t)}})},customLogger:K,mode:c.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){v=e.build.outDir||`dist`}}]})),h(`Client build complete`),await C.ensureDir(H),await C.copy(x(R,N),Ce),await C.writeFile(Se,z,`utf-8`)),f();let q=()=>{};if(ee){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);q=e()}let J=await De(c,P);(I||U)&&C.existsSync(V)&&C.readdirSync(V).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0?W(`Server build unchanged. Bypassing server build...`):(C.existsSync(V)&&await C.remove(V),W(`Build for server...`),process.env.VITE_SSG=`true`,await w(D(i,{logLevel:`warn`,build:{ssr:J,manifest:!0,outDir:V,minify:!1,cssCodeSplit:!1,...Ne({output:he===`esm`?{entryFileNames:`[name].mjs`,format:`esm`}:{entryFileNames:`[name].cjs`,format:`cjs`},onLog(e,t,n){t.message.includes(`react-helmet-async`)||G(t.message)||n(e,t)}})},customLogger:K,mode:c.mode})),h(`Server build complete`));let Re=he===`esm`&&process.platform===`win32`?`file://`:``,Ve=he===`esm`?`.mjs`:`.cjs`,He=J.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Ue=Re+x(V,(J.includes(`/`)||J.includes(`\\`)?J.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Ve,``):He)+Ve).replace(/\\/g,`/`),We=JSON.parse(await C.readFile(x(V,...Me,`manifest.json`),`utf-8`)),Ge=F===void 0?s(import.meta.url):F,{createRoot:Ke,includedRoutes:qe}=he===`esm`?await import(Ue):Ge(Ue),Je=qe||ne,{routes:Ye}=await Ke(!1),{paths:Xe}=await Ee(Ye),Y=pe?Xe:await Je(Xe,Ye||[]);Y=Le(Y,Ye||[]),Y=Array.from(new Set(Y)),f(),W(`Rendering Pages...`,Y.length);let Ze=be!==!1&&!I?await ce(v,{publicPath:E,...be}):void 0,X;I&&(X=await le(),X?m("Critical CSS generation enabled via `zig-critters` (turbo)"):_(`zig-critters not available, falling back to beasties`)),Ze&&!X&&m("Critical CSS generation enabled via `beasties`");let Qe=``;if(X){let e=x(R,`assets`);if(C.existsSync(e)){let t=C.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)Qe+=C.readFileSync(x(e,n),`utf-8`)+`
|
|
2
|
+
`}}let $e=d(`Rendering pages...`);$e.start();let et=JSON.parse(await C.readFile(x(R,...Me,`ssr-manifest.json`),`utf-8`)),tt=JSON.parse(await C.readFile(x(R,...Me,`manifest.json`),`utf-8`)),nt=await C.readFile(x(R,N),`utf-8`);C.rmSync(x(R,N)),nt=ze(nt,M);let rt=(await import(`p-queue`)).default||await import(`p-queue`),it=new rt({concurrency:ge}),at=new rt({concurrency:1}),ot={},st=0,ct=new Map,lt=0,ut=0,dt=0,ft=x(H,`ssg-cache.json`),Z=x(H,`ssg-pages`),Q={};if(!I)try{C.existsSync(ft)&&(Q=await C.readJson(ft))}catch{}let pt={...Q},mt=new Set;mt.add(Z);for(let e of Y){let t=se===`nested`?x(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;mt.add(x(R,y(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;mt.add(x(R,`static-loader-data`,y(n)))}mt.add(x(R,`static-loader-data`)),await Promise.all([...mt].map(e=>C.ensureDir(e)));for(let n of Y){let i=j.createHash(`md5`).update(n).digest(`hex`),a=x(Z,`${i}.html`),s=x(Z,`${i}.json`),c=`${(n.endsWith(`/`)?`${n}index`:n).replace(/^\//g,``)}.html`,l=se===`nested`?x(n.replace(/^\//g,``),`index.html`):c,u=x(R,l),d=o(n).replace(/\/$/,``),f=ve[d]||ve[n],p=!1,m=0;if(!I&&U&&f&&C.existsSync(f))try{if(m=Math.round(C.statSync(f).mtimeMs),C.existsSync(a)){let e=Q[d]||Q[n];e&&Math.round(e.mtime)===m&&(p=!0)}}catch{}if(p){it.add(async()=>{try{if(U)await C.copy(a,u);else{let e=await C.readFile(a,`utf-8`);e=e.replace(/window\.__VITE_REACT_SSG_HASH__\s*=\s*'[^']*'/,`window.__VITE_REACT_SSG_HASH__ = '${B}'`),await C.writeFile(u,e,`utf-8`)}let e=Q[d]||Q[n];if(e?.loaderDataFilePath&&C.existsSync(s)){let t=U?e.loaderDataFilePath:Fe(n,B);await C.copy(s,x(R,t)),ot[Ie(n,E)]=t,st++}ut++}catch(e){throw Error(`Error on cached page: ${n}\n${e.stack}`)}});continue}it.add(async()=>{try{let i=await Ke(!1,n),{base:c,routes:u,triggerOnSSRAppRendered:d,transformState:p=r,app:h,routerType:g}=i,v=await re?.(n,nt,i)||nt,y=`${t(c)}${e(n)}`,b=we(i),S;if(!h&&g===`remix`){let e=ct.get(n);e?S=e:(S=await ae({routes:[...u],locationArg:y,base:c,serverManifest:We,manifest:tt,ssrManifest:et}),ct.set(n,S))}else S=new Set;let{appHTML:w,bodyAttributes:T,htmlAttributes:D,metaAttributes:O,styleTag:k,routerContext:A}=await b.render(n),j=A?.loaderData,M;if(j&&Object.keys(j).length>0){let e=Fe(n,B);M=e,await C.writeFile(x(R,e),JSON.stringify(j)),ot[Ie(n,E)]=e,st++}await d?.(n,w,i);let ee=await de({rootContainerId:_e,appHTML:w,indexHTML:v,metaAttributes:O,bodyAttributes:T,htmlAttributes:D,initialState:null}),N=me(S),P=ee.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``);N&&(P=P.replace(`<head>`,`<head>${N}`));let F=await ie?.(n,P,i)||P,ne=``;if(j&&Object.keys(j).length>0){let e=JSON.stringify(j).replace(/</g,`\\u003c`);ne=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${Ie(n,E)}': ${e} };`}let oe=``;if(A){let e={loaderData:A.loaderData??{},actionData:A.actionData??null,errors:A.errors??null};oe=`window.__staticRouterHydrationData = ${JSON.stringify(e).replace(/</g,`\\u003c`)};`}let se=`<script>window.__VITE_REACT_SSG_HASH__ = '${B}';${ne}${oe}<\/script>`;if(F=F.replace(`<head>`,`<head>${se}`),F=F.replace(`<script>${ue}<\/script>`,``),X){try{Qe&&(F=await X.processHtml(F,Qe))}catch(e){_(`[zig-critters] Failed to inline CSS for "${n}": ${e instanceof Error?e.message:String(e)}`)}F=F.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else Ze&&(F=await at.add(()=>Ze.process(F)),F=F.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`));k&&(F=F.replace(`<head>`,`<head>${k}`));let ce=await Be(F,te);if(await C.writeFile(x(R,l),ce,`utf-8`),!I&&f&&C.existsSync(f)){await C.writeFile(a,ce,`utf-8`);let e=o(n).replace(/\/$/,``),t=Math.round(m);j&&Object.keys(j).length>0&&M?(await C.writeFile(s,JSON.stringify(j),`utf-8`),pt[e]={mtime:t,loaderDataFilePath:M}):pt[e]={mtime:t}}lt++,dt+=ce.length}catch(e){throw Error(`Error on page: ${n}\n${e.stack}`)}})}await it.start().onIdle(),$e.stop(`success`,`Rendering complete`);let ht=lt+ut,gt=(dt/1024/1024).toFixed(2);if(m(`${u.cyan(String(ht).padStart(3,` `))} pages rendered ${u.dim(`(${lt} new, ${ut} cached, ${gt} MB)`)}`),!I)try{if(await C.ensureDir(y(ft)),await C.writeJson(ft,pt),C.existsSync(Z)){let e=await C.readdir(Z),t=new Set;for(let e of Object.keys(pt)){let n=j.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 C.remove(x(Z,r)),n++));n>0&&W(`Pruned ${n} obsolete files from SSG cache.`)}}catch{}f(),W(`Generating static loader data...`,st);let _t=JSON.stringify(ot,null,0);await C.writeFile(x(R,`static-loader-data-manifest-${B}.json`),_t),m(`${u.dim(`${v}/`)}${u.cyan(`static-loader-data-manifest-${B}.json`.padEnd(15,` `))} ${u.dim(Te(_t))}`),await C.remove(x(p,`.vite-react-ssg-temp`)),q();let vt=c.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;vt&&!vt.disabled&&vt.generateSW&&(W(`Regenerate PWA...`),await vt.generateSW());let yt=Math.round(performance.now()-A),$=await Ae(R,yt);je(R,$);let bt=e=>(e/1024).toFixed(0),xt=e=>(e/1024/1024).toFixed(1),St=$.totalJSBundleSize>1024*1024?xt($.totalJSBundleSize)+` MB`:bt($.totalJSBundleSize)+` kB`,Ct=$.totalCSSBundleSize>1024*1024?xt($.totalCSSBundleSize)+` MB`:bt($.totalCSSBundleSize)+` kB`;console.log(g([`Metric`,`Result`],[[`Build Time`,`${(yt/1e3).toFixed(1)}s`],[`Pages`,String($.pages.length)],[`JavaScript`,St],[`CSS`,Ct]],{style:`round`,headerSeparator:!0})),h(`Build finished.`),await oe?.(v),setTimeout(()=>{_(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function ze(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function Be(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 p(`Error formatting html: ${t?.message}`),e}return e}function Ve({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=we(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,A=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 A(t)}};await Promise.all(E.map(async e=>A(e)));let j=[...D].map(e=>pe(n(c.config.base,e)));w.push(...j);let M=await de({rootContainerId:o,appHTML:x,indexHTML:b,metaAttributes:w,bodyAttributes:S,htmlAttributes:C,initialState:null}),ee=await s?.(d,M,f)||M;u.statusCode=200,u.setHeader(`Content-Type`,`text/html`),k(l,u,ee,`html`,{headers:`pluginContainer`in c?c.config.server.headers:c.config.preview.headers})}catch(e){c.ssrFixStacktrace(e),p(`SSR render error`,e),u.statusCode=500,u.end(e.stack)}};return()=>{c.middlewares.use(l)}}}}async function He(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await O(e,`serve`,n,n),i=process.cwd(),a=r.root||i,o={...r.ssgOptions,...t},{htmlEntry:s=`index.html`,onBeforePageRender:c,onPageRendered:l,rootContainerId:u=`root`,mock:d=!1}=o,f=o.entry||await fe(a,s),[p,m]=await Promise.all([De(r,f),te.readFile(x(a,s),`utf-8`)]);if(process.env.__DEV_MODE_SSR=`true`,d){let{jsdomGlobal:e}=await import(`./jsdomGlobal-u0wZKDvc.mjs`);e()}return await E({...e,plugins:[...e.plugins??[],Ve({template:m,ssrEntry:p,onBeforePageRender:c,onPageRendered:l,entry:f,rootContainerId:u})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function Ue(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await He(t,e);return await r.listen(),We(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){p(`failed to start server: ${e?.message??e}`),process.exit(1)}}function We(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,r=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);r+=` ready in ${u.reset(u.bold(`${e}ms`))}`}n(`\n ${u.cyan(` VITE-REACT-SSG v${U} `)}`,{clear:!e.config.logger.hasWarned}),n(`${u.cyan(`\n VITE v${A}`)+u.dim(r)}\n`),n(u.green(` dev server running at:`)),e.printUrls()}export{Re as build,He as createServer,Ue as dev};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function t(e){return e[0]===`/`?e.slice(1):e}function n(e,t){if(e===t)return`/`;let n=r(t);return e.startsWith(n)?e.slice(n.length-1):e}function r(e){return e[e.length-1]===`/`?e:`${e}/`}function i(e){return e[0]===`/`?e:`/${e}`}function a(e,t,n=[]){return e.map((e,r)=>{let i=[...n,String(r)],s=typeof e.id==`string`?e.id:i.join(`-`);if(e.id=s,o(e))return{...e,...t(e),id:s};{let n={...e,...t(e),id:s,children:void 0};return e.children&&(n.children=a(e.children,t,i)),n}})}function o(e){return e.index===!0}const s=/[<>/\u2028\u2029]/g,c={"<":`\\u003C`,">":`\\u003E`,"/":`\\u002F`,"\u2028":`\\u2028`,"\u2029":`\\u2029`};function l(e){return c[e]}function u(e){if(e==null||Object.keys(e).length===0)return null;try{return JSON.stringify(JSON.stringify(e||{})).replace(s,l)}catch(e){return console.error(`[SSG] On state serialization - ${e instanceof Error?e.message:String(e)}`),null}}function d(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return d}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function t(e){return e[0]===`/`?e.slice(1):e}function n(e,t){if(e===t)return`/`;let n=r(t);return e.startsWith(n)?e.slice(n.length-1):e}function r(e){return e[e.length-1]===`/`?e:`${e}/`}function i(e){return e[0]===`/`?e:`/${e}`}function a(e,t,n=[]){return e.map((e,r)=>{let i=[...n,String(r)],s=typeof e.id==`string`?e.id:i.join(`-`);if(e.id=s,o(e))return{...e,...t(e),id:s};{let n={...e,...t(e),id:s,children:void 0};return e.children&&(n.children=a(e.children,t,i)),n}})}function o(e){return e.index===!0}const s=/[<>/\u2028\u2029]/g,c={"<":`\\u003C`,">":`\\u003E`,"/":`\\u002F`,"\u2028":`\\u2028`,"\u2029":`\\u2029`};function l(e){return c[e]}function u(e){if(e==null||Object.keys(e).length===0)return null;try{return JSON.stringify(JSON.stringify(e||{})).replace(s,l)}catch(e){return console.error(`[SSG] On state serialization - ${e instanceof Error?e.message:String(e)}`),null}}function d(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}export{t as a,r as c,e as i,u as n,n as o,a as r,i as s,d as t};
|
|
@@ -69,6 +69,12 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
|
69
69
|
* @see https://github.com/danielroe/beasties
|
|
70
70
|
*/
|
|
71
71
|
beastiesOptions?: Options | false;
|
|
72
|
+
/**
|
|
73
|
+
* Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
|
|
74
|
+
*
|
|
75
|
+
* @default false
|
|
76
|
+
*/
|
|
77
|
+
turbo?: boolean;
|
|
72
78
|
/**
|
|
73
79
|
* Custom function to modify the routes to do the SSG.
|
|
74
80
|
*
|
|
@@ -69,6 +69,12 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
|
69
69
|
* @see https://github.com/danielroe/beasties
|
|
70
70
|
*/
|
|
71
71
|
beastiesOptions?: Options | false;
|
|
72
|
+
/**
|
|
73
|
+
* Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
|
|
74
|
+
*
|
|
75
|
+
* @default false
|
|
76
|
+
*/
|
|
77
|
+
turbo?: boolean;
|
|
72
78
|
/**
|
|
73
79
|
* Custom function to modify the routes to do the SSG.
|
|
74
80
|
*
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bdocs/ssg",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"description": "A Vite plugin for static site generation (SSG) with React.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"publishConfig": {
|
|
@@ -85,10 +85,11 @@
|
|
|
85
85
|
"fs-extra": "^11.3.4",
|
|
86
86
|
"html5parser": "^2.0.2",
|
|
87
87
|
"jsdom": "^24.1.3",
|
|
88
|
+
"@bdocs/dui": "^0.2.0",
|
|
88
89
|
"p-queue": "^9.1.2",
|
|
89
90
|
"react-helmet-async": "^2.0.1",
|
|
90
91
|
"yargs": "^17.7.2",
|
|
91
|
-
"@bdocs/
|
|
92
|
+
"@bdocs/zig-critters": "0.2.0"
|
|
92
93
|
},
|
|
93
94
|
"devDependencies": {
|
|
94
95
|
"@ririd/eslint-config": "^2.1.1",
|
package/dist/state-CSrCqKLt.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
require(`./chunk-Bmb41Sf3.cjs`);let e=require(`@bdocs/dui`);function t(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function n(e){return e[0]===`/`?e.slice(1):e}function r(e,t){if(e===t)return`/`;let n=i(t);return e.startsWith(n)?e.slice(n.length-1):e}function i(e){return e[e.length-1]===`/`?e:`${e}/`}function a(e){return e[0]===`/`?e:`/${e}`}function o(e,t,n=[]){return e.map((e,r)=>{let i=[...n,String(r)],a=typeof e.id==`string`?e.id:i.join(`-`);if(e.id=a,s(e))return{...e,...t(e),id:a};{let n={...e,...t(e),id:a,children:void 0};return e.children&&(n.children=o(e.children,t,i)),n}})}function s(e){return e.index===!0}const c=/[<>/\u2028\u2029]/g,l={"<":`\\u003C`,">":`\\u003E`,"/":`\\u002F`,"\u2028":`\\u2028`,"\u2029":`\\u2029`};function u(e){return l[e]}function d(t){if(t==null||Object.keys(t).length===0)return null;try{return JSON.stringify(JSON.stringify(t||{})).replace(c,u)}catch(t){return(0,e.error)(`[SSG] On state serialization - ${t instanceof Error?t.message:String(t)}`),null}}function f(t){try{return JSON.parse(t||`{}`)}catch(t){return(0,e.error)(`[SSG] On state deserialization - ${t instanceof Error?t.message:String(t)}`),{}}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
|
package/dist/state-U8UuhxSd.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{error as e}from"@bdocs/dui";function t(e,t){return!e||!t?e||t||``:(e[e.length-1]===`/`&&(e=e.substring(0,e.length-1)),t[0]!==`/`&&(t=`/${t}`),e+t)}function n(e){return e[0]===`/`?e.slice(1):e}function r(e,t){if(e===t)return`/`;let n=i(t);return e.startsWith(n)?e.slice(n.length-1):e}function i(e){return e[e.length-1]===`/`?e:`${e}/`}function a(e){return e[0]===`/`?e:`/${e}`}function o(e,t,n=[]){return e.map((e,r)=>{let i=[...n,String(r)],a=typeof e.id==`string`?e.id:i.join(`-`);if(e.id=a,s(e))return{...e,...t(e),id:a};{let n={...e,...t(e),id:a,children:void 0};return e.children&&(n.children=o(e.children,t,i)),n}})}function s(e){return e.index===!0}const c=/[<>/\u2028\u2029]/g,l={"<":`\\u003C`,">":`\\u003E`,"/":`\\u002F`,"\u2028":`\\u2028`,"\u2029":`\\u2029`};function u(e){return l[e]}function d(t){if(t==null||Object.keys(t).length===0)return null;try{return JSON.stringify(JSON.stringify(t||{})).replace(c,u)}catch(t){return e(`[SSG] On state serialization - ${t instanceof Error?t.message:String(t)}`),null}}function f(t){try{return JSON.parse(t||`{}`)}catch(t){return e(`[SSG] On state deserialization - ${t instanceof Error?t.message:String(t)}`),{}}}export{n as a,i as c,t as i,d as n,r as o,o as r,a as s,f as t};
|