@bdocs/ssg 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/vite-react-ssg.js +1 -2
- package/dist/client/single-page.cjs +1 -1
- package/dist/client/single-page.d.cts +48 -8
- package/dist/client/single-page.d.ts +48 -8
- package/dist/client/single-page.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +4 -26
- package/dist/index.d.mts +4 -26
- package/dist/index.mjs +2 -2
- package/dist/node.cjs +3 -2
- package/dist/node.d.cts +42 -3
- package/dist/node.d.mts +42 -3
- package/dist/node.mjs +3 -2
- package/dist/router-adapter-BukFH1uk.mjs +1 -0
- package/dist/router-adapter-DtnukOfG.cjs +1 -0
- package/dist/ssg-worker-payload-BHsJklNf.mjs +1 -0
- package/dist/ssg-worker-payload-B_9N9o5p.cjs +1 -0
- package/dist/ssg-worker-pool-CZPcmzdb.cjs +1 -0
- package/dist/ssg-worker-pool-DxzleN_R.mjs +1 -0
- package/dist/ssg-worker.cjs +1 -0
- package/dist/ssg-worker.d.cts +26 -0
- package/dist/ssg-worker.d.mts +27 -0
- package/dist/ssg-worker.mjs +1 -0
- package/dist/{types-BMIDte34.d.cts → types-5bBDTafc.d.mts} +48 -8
- package/dist/{types-DefKqSqW.d.mts → types-ClSMhb8G.d.cts} +48 -8
- package/dist/zig-pool-Cpw16nuK.cjs +1 -0
- package/dist/zig-pool-lU4VVJjc.mjs +1 -0
- package/package.json +7 -9
- package/dist/state-CAM2wH0H.cjs +0 -1
- package/dist/state-CkhLd6hN.mjs +0 -1
- /package/dist/{jsdomGlobal-u0wZKDvc.mjs → jsdomGlobal-RTx-0uYL.mjs} +0 -0
- /package/dist/{jsdomGlobal-B4hHTFBO.cjs → jsdomGlobal-TVNgh-Jn.cjs} +0 -0
package/bin/vite-react-ssg.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'use strict'
|
|
3
2
|
|
|
4
3
|
// Suppress DEP0205 deprecation warning for module.register() in Node 26+
|
|
5
4
|
const { emitWarning: _emitWarn } = process
|
|
6
|
-
process.emitWarning =
|
|
5
|
+
process.emitWarning = (warning, ...args) => {
|
|
7
6
|
if (warning && typeof warning === 'object' && warning.code === 'DEP0205')
|
|
8
7
|
return
|
|
9
8
|
if (typeof warning === 'string' && args.includes('DEP0205')) return
|
|
@@ -1,2 +1,2 @@
|
|
|
1
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:
|
|
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:Array.isArray(e)?e:e?.routes||[],routerOptions:void 0,base:`/`,app:e,routerType:`single-page`};c.RouteRenderer=e?.RouteRenderer,c.matchRouteBranch=e?.matchRouteBranch,c.matchRouteBranchWithParams=e?.matchRouteBranchWithParams,c.resolveRouteBranch=e?.resolveRouteBranch,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=e,o=a.RouteRenderer,s=a.matchRouteBranch,u=a.resolveRouteBranch,d=e?.routes||(Array.isArray(e)?e:[]),f;if(o&&s&&u){let e=await u(s(d,window.location.pathname));f=(0,l.jsx)(E,{children:(0,l.jsx)(o,{routes:d,pathname:window.location.pathname,hasLoaderData:!1,resolvedBranch:e})})}else if(Array.isArray(e))throw Error(`An array of routes requires RouteRenderer, matchRouteBranch, and resolveRouteBranch on the application entry`);else f=(0,l.jsx)(E,{children:e});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?_(f,t,n):v(f,t,n)})(),c}exports.ClientOnly=S,exports.Head=T,exports.ViteReactSSG=D;
|
|
@@ -1,10 +1,35 @@
|
|
|
1
|
-
import { ReactElement, ReactNode } from "react";
|
|
1
|
+
import { ComponentType, ReactElement, ReactNode } from "react";
|
|
2
2
|
import { Options } from "beasties";
|
|
3
|
-
import { FutureConfig, IndexRouteObject, NonIndexRouteObject, createBrowserRouter } from "react-router-dom";
|
|
4
3
|
import { HelmetProps } from "react-helmet-async";
|
|
5
4
|
|
|
5
|
+
//#region src/router-contract.d.ts
|
|
6
|
+
interface LoaderFunctionArgs {
|
|
7
|
+
request: Request;
|
|
8
|
+
params: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
type LoaderFunction = (args: LoaderFunctionArgs) => Promise<unknown> | unknown;
|
|
11
|
+
interface RouterRouteRecord {
|
|
12
|
+
path?: string;
|
|
13
|
+
index?: boolean;
|
|
14
|
+
id?: string;
|
|
15
|
+
element?: ReactNode;
|
|
16
|
+
Component?: ComponentType<any>;
|
|
17
|
+
loader?: LoaderFunction;
|
|
18
|
+
action?: (...args: any[]) => unknown;
|
|
19
|
+
children?: RouterRouteRecord[];
|
|
20
|
+
lazy?: () => Promise<Record<string, unknown>>;
|
|
21
|
+
getStaticPaths?: () => string[] | Promise<string[]>;
|
|
22
|
+
entry?: string;
|
|
23
|
+
locale?: string;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
6
26
|
//#region src/types.d.ts
|
|
7
|
-
|
|
27
|
+
/** Minimal router shape kept for the public SSG context without a DOM-router dependency. */
|
|
28
|
+
interface Router {
|
|
29
|
+
navigate?: (...args: any[]) => unknown;
|
|
30
|
+
state?: unknown;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
8
33
|
interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
9
34
|
/**
|
|
10
35
|
* Set the scripts' loading mode. Only works for `type="module"`.
|
|
@@ -70,11 +95,23 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
|
70
95
|
* @see https://github.com/danielroe/beasties
|
|
71
96
|
*/
|
|
72
97
|
beastiesOptions?: Options | false;
|
|
98
|
+
/**
|
|
99
|
+
* Critical CSS processing strategy.
|
|
100
|
+
*
|
|
101
|
+
* - `'zig-critters'` (default): Use zig-critters WASM for fast critical CSS inlining.
|
|
102
|
+
* Falls back to **no critical CSS** if WASM is unavailable (no beasties fallback).
|
|
103
|
+
* - `'beasties'`: Use beasties (JS-based) for critical CSS. Slower but always available.
|
|
104
|
+
* - `false`: Skip critical CSS entirely.
|
|
105
|
+
*
|
|
106
|
+
* @default 'zig-critters'
|
|
107
|
+
*/
|
|
108
|
+
criticalCss?: 'zig-critters' | 'beasties' | false;
|
|
73
109
|
/**
|
|
74
110
|
* Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
|
|
75
111
|
* Falls back to beasties if the WASM binary is unavailable.
|
|
76
112
|
*
|
|
77
113
|
* @default false
|
|
114
|
+
* @deprecated Use `criticalCss` instead. `turbo=true` is equivalent to `criticalCss: 'zig-critters'`.
|
|
78
115
|
*/
|
|
79
116
|
turbo?: boolean;
|
|
80
117
|
/**
|
|
@@ -190,12 +227,15 @@ interface CommonRouteOptions {
|
|
|
190
227
|
*/
|
|
191
228
|
getStaticPaths?: () => string[] | Promise<string[]>;
|
|
192
229
|
}
|
|
193
|
-
type NonIndexRouteRecord = Omit<
|
|
230
|
+
type NonIndexRouteRecord = Omit<RouterRouteRecord, 'children'> & {
|
|
194
231
|
children?: RouteRecord[];
|
|
195
232
|
} & CommonRouteOptions;
|
|
196
|
-
type IndexRouteRecord =
|
|
233
|
+
type IndexRouteRecord = NonIndexRouteRecord & {
|
|
234
|
+
index: true;
|
|
235
|
+
};
|
|
197
236
|
type RouteRecord = NonIndexRouteRecord | IndexRouteRecord;
|
|
198
237
|
interface RouterFutureConfig {
|
|
238
|
+
[key: string]: boolean | undefined;
|
|
199
239
|
v7_fetcherPersist?: boolean;
|
|
200
240
|
v7_normalizeFormMethod?: boolean;
|
|
201
241
|
v7_partialHydration?: boolean;
|
|
@@ -205,8 +245,8 @@ interface RouterFutureConfig {
|
|
|
205
245
|
interface RouterOptions {
|
|
206
246
|
routes: RouteRecord[];
|
|
207
247
|
basename?: string;
|
|
208
|
-
future?: Partial<RouterFutureConfig
|
|
209
|
-
customCreateRouter?:
|
|
248
|
+
future?: Partial<RouterFutureConfig>;
|
|
249
|
+
customCreateRouter?: (...args: any[]) => Router;
|
|
210
250
|
}
|
|
211
251
|
interface StyleCollector {
|
|
212
252
|
collect: (app: ReactElement) => ReactElement;
|
|
@@ -238,4 +278,4 @@ declare function Head(props: Props): React.ReactNode;
|
|
|
238
278
|
//#region src/client/single-page.d.ts
|
|
239
279
|
declare function ViteReactSSG(App: ReactNode, fn?: (context: ViteReactSSGContext<false>) => Promise<void> | void, options?: ViteReactSSGClientOptions): (client?: boolean, routePath?: string) => Promise<ViteReactSSGContext<false>>;
|
|
240
280
|
//#endregion
|
|
241
|
-
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
|
281
|
+
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, Router, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
import { HelmetProps } from "react-helmet-async";
|
|
2
|
-
import { ReactElement, ReactNode } from "react";
|
|
2
|
+
import { ComponentType, ReactElement, ReactNode } from "react";
|
|
3
3
|
import { Options } from "beasties";
|
|
4
|
-
import { FutureConfig, IndexRouteObject, NonIndexRouteObject, createBrowserRouter } from "react-router-dom";
|
|
5
4
|
|
|
5
|
+
//#region src/router-contract.d.ts
|
|
6
|
+
interface LoaderFunctionArgs {
|
|
7
|
+
request: Request;
|
|
8
|
+
params: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
type LoaderFunction = (args: LoaderFunctionArgs) => Promise<unknown> | unknown;
|
|
11
|
+
interface RouterRouteRecord {
|
|
12
|
+
path?: string;
|
|
13
|
+
index?: boolean;
|
|
14
|
+
id?: string;
|
|
15
|
+
element?: ReactNode;
|
|
16
|
+
Component?: ComponentType<any>;
|
|
17
|
+
loader?: LoaderFunction;
|
|
18
|
+
action?: (...args: any[]) => unknown;
|
|
19
|
+
children?: RouterRouteRecord[];
|
|
20
|
+
lazy?: () => Promise<Record<string, unknown>>;
|
|
21
|
+
getStaticPaths?: () => string[] | Promise<string[]>;
|
|
22
|
+
entry?: string;
|
|
23
|
+
locale?: string;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
6
26
|
//#region src/types.d.ts
|
|
7
|
-
|
|
27
|
+
/** Minimal router shape kept for the public SSG context without a DOM-router dependency. */
|
|
28
|
+
interface Router {
|
|
29
|
+
navigate?: (...args: any[]) => unknown;
|
|
30
|
+
state?: unknown;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
8
33
|
interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
9
34
|
/**
|
|
10
35
|
* Set the scripts' loading mode. Only works for `type="module"`.
|
|
@@ -70,11 +95,23 @@ interface ViteReactSSGOptions<Context = ViteReactSSGContext> {
|
|
|
70
95
|
* @see https://github.com/danielroe/beasties
|
|
71
96
|
*/
|
|
72
97
|
beastiesOptions?: Options | false;
|
|
98
|
+
/**
|
|
99
|
+
* Critical CSS processing strategy.
|
|
100
|
+
*
|
|
101
|
+
* - `'zig-critters'` (default): Use zig-critters WASM for fast critical CSS inlining.
|
|
102
|
+
* Falls back to **no critical CSS** if WASM is unavailable (no beasties fallback).
|
|
103
|
+
* - `'beasties'`: Use beasties (JS-based) for critical CSS. Slower but always available.
|
|
104
|
+
* - `false`: Skip critical CSS entirely.
|
|
105
|
+
*
|
|
106
|
+
* @default 'zig-critters'
|
|
107
|
+
*/
|
|
108
|
+
criticalCss?: 'zig-critters' | 'beasties' | false;
|
|
73
109
|
/**
|
|
74
110
|
* Enable turbo mode: use zig-critters WASM instead of beasties JS for critical CSS.
|
|
75
111
|
* Falls back to beasties if the WASM binary is unavailable.
|
|
76
112
|
*
|
|
77
113
|
* @default false
|
|
114
|
+
* @deprecated Use `criticalCss` instead. `turbo=true` is equivalent to `criticalCss: 'zig-critters'`.
|
|
78
115
|
*/
|
|
79
116
|
turbo?: boolean;
|
|
80
117
|
/**
|
|
@@ -190,12 +227,15 @@ interface CommonRouteOptions {
|
|
|
190
227
|
*/
|
|
191
228
|
getStaticPaths?: () => string[] | Promise<string[]>;
|
|
192
229
|
}
|
|
193
|
-
type NonIndexRouteRecord = Omit<
|
|
230
|
+
type NonIndexRouteRecord = Omit<RouterRouteRecord, 'children'> & {
|
|
194
231
|
children?: RouteRecord[];
|
|
195
232
|
} & CommonRouteOptions;
|
|
196
|
-
type IndexRouteRecord =
|
|
233
|
+
type IndexRouteRecord = NonIndexRouteRecord & {
|
|
234
|
+
index: true;
|
|
235
|
+
};
|
|
197
236
|
type RouteRecord = NonIndexRouteRecord | IndexRouteRecord;
|
|
198
237
|
interface RouterFutureConfig {
|
|
238
|
+
[key: string]: boolean | undefined;
|
|
199
239
|
v7_fetcherPersist?: boolean;
|
|
200
240
|
v7_normalizeFormMethod?: boolean;
|
|
201
241
|
v7_partialHydration?: boolean;
|
|
@@ -205,8 +245,8 @@ interface RouterFutureConfig {
|
|
|
205
245
|
interface RouterOptions {
|
|
206
246
|
routes: RouteRecord[];
|
|
207
247
|
basename?: string;
|
|
208
|
-
future?: Partial<RouterFutureConfig
|
|
209
|
-
customCreateRouter?:
|
|
248
|
+
future?: Partial<RouterFutureConfig>;
|
|
249
|
+
customCreateRouter?: (...args: any[]) => Router;
|
|
210
250
|
}
|
|
211
251
|
interface StyleCollector {
|
|
212
252
|
collect: (app: ReactElement) => ReactElement;
|
|
@@ -238,4 +278,4 @@ declare function Head(props: Props): React.ReactNode;
|
|
|
238
278
|
//#region src/client/single-page.d.ts
|
|
239
279
|
declare function ViteReactSSG(App: ReactNode, fn?: (context: ViteReactSSGContext<false>) => Promise<void> | void, options?: ViteReactSSGClientOptions): (client?: boolean, routePath?: string) => Promise<ViteReactSSGContext<false>>;
|
|
240
280
|
//#endregion
|
|
241
|
-
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
|
281
|
+
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, Router, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
|
@@ -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{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:
|
|
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:Array.isArray(e)?e:e?.routes||[],routerOptions:void 0,base:`/`,app:e,routerType:`single-page`};o.RouteRenderer=e?.RouteRenderer,o.matchRouteBranch=e?.matchRouteBranch,o.matchRouteBranchWithParams=e?.matchRouteBranchWithParams,o.resolveRouteBranch=e?.resolveRouteBranch,n&&(await f(),o.initialState=i?.(window.__INITIAL_STATE__||{})||p(window.__INITIAL_STATE__)),await t?.(o);let l=o.initialState;return{...o,initialState:l}}return c&&(async()=>{let t=typeof a==`string`?document.querySelector(a):a;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let i=await l(!0);window.__VITE_REACT_SSG_CONTEXT__=i;let o=e,s=o.RouteRenderer,c=o.matchRouteBranch,u=o.resolveRouteBranch,f=e?.routes||(Array.isArray(e)?e:[]),p;if(s&&c&&u){let e=await u(c(f,window.location.pathname));p=n(y,{children:n(s,{routes:f,pathname:window.location.pathname,hasLoaderData:!1,resolvedBranch:e})})}else if(Array.isArray(e))throw Error(`An array of routes requires RouteRenderer, matchRouteBranch, and resolveRouteBranch on the application entry`);else p=n(y,{children:e});document.querySelector(`[data-server-rendered=true]`),d(p,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`)
|
|
2
|
-
Current type: ${(0,
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`);let t=require(`react-helmet-async`);t=e.t(t);let n=require(`react/jsx-runtime`),r=require(`react-dom`);r=e.t(r,1);let i=require(`react-dom/client`),a=require(`react`);const{version:o,render:s,hydrate:c}={...r},l=Number((o||``).split(`.`)[0])>17;function u(e,t,n={}){let{useLegacyRender:r}=n;r||!l?s(e,t):(0,i.createRoot)(t).render(e)}function d(e,t,n={}){let{useLegacyRender:r}=n;r||!l?c(e,t):(0,i.hydrateRoot)(t,e)}function f(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function p(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}function m(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{t(!0)},[]),e}function h({children:e,fallback:t}){if(m()){if(typeof e!=`function`&&process.env.NODE_ENV===`development`)throw Error(`vite-react-ssg error: The children of <ClientOnly> must be a "render function", e.g. <ClientOnly>{() => <span>{window.location.href}</span>}</ClientOnly>.
|
|
2
|
+
Current type: ${(0,a.isValidElement)(e)?`React element`:typeof e}`);return(0,n.jsx)(n.Fragment,{children:e?.()})}return t??null}const g=t,_=g.Helmet||g.default?.Helmet||(()=>null);function v(e){return(0,n.jsx)(_,{...e})}const{HelmetProvider:y}=t;function b(e,t,r={}){let{transformState:i,rootContainer:a=`#root`,ssrWhenDev:o,getStyleCollector:s=null}=r;process.env.NODE_ENV===`development`&&o!==void 0&&console.warn("[vite-react-ssg] `ssrWhenDev` option is no longer needed. If you want to use csr, just replace `vite-react-ssg dev` with `vite`.");let c=typeof window<`u`;async function l(n=!1,r){let a=[],o={isClient:c,onSSRAppRendered:n?()=>{}:e=>a.push(e),triggerOnSSRAppRendered:()=>Promise.all(a.map(e=>e())),initialState:{},transformState:i,routePath:r,getStyleCollector:s,routes:Array.isArray(e)?e:e?.routes||[],routerOptions:void 0,base:`/`,app:e,routerType:`single-page`};o.RouteRenderer=e?.RouteRenderer,o.matchRouteBranch=e?.matchRouteBranch,o.matchRouteBranchWithParams=e?.matchRouteBranchWithParams,o.resolveRouteBranch=e?.resolveRouteBranch,n&&(await f(),o.initialState=i?.(window.__INITIAL_STATE__||{})||p(window.__INITIAL_STATE__)),await t?.(o);let l=o.initialState;return{...o,initialState:l}}return c&&(async()=>{let t=typeof a==`string`?document.querySelector(a):a;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let i=await l(!0);window.__VITE_REACT_SSG_CONTEXT__=i;let o=e,s=o.RouteRenderer,c=o.matchRouteBranch,f=o.resolveRouteBranch,p=e?.routes||(Array.isArray(e)?e:[]),m;if(s&&c&&f){let e=await f(c(p,window.location.pathname));m=(0,n.jsx)(y,{children:(0,n.jsx)(s,{routes:p,pathname:window.location.pathname,hasLoaderData:!1,resolvedBranch:e})})}else if(Array.isArray(e))throw Error(`An array of routes requires RouteRenderer, matchRouteBranch, and resolveRouteBranch on the application entry`);else m=(0,n.jsx)(y,{children:e});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?u(m,t,r):d(m,t,r)})(),l}exports.ClientOnly=h,exports.Head=v,exports.ViteReactSSG=b;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-ClSMhb8G.cjs";
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
3
|
import { HelmetProps } from "react-helmet-async";
|
|
4
4
|
|
|
@@ -18,29 +18,7 @@ type Props = HelmetProps & {
|
|
|
18
18
|
};
|
|
19
19
|
declare function Head(props: Props): React.ReactNode;
|
|
20
20
|
//#endregion
|
|
21
|
-
//#region src/client/
|
|
22
|
-
declare function ViteReactSSG(
|
|
23
|
-
declare global {
|
|
24
|
-
interface Window {
|
|
25
|
-
/** Manifest index: route path -> data file path */
|
|
26
|
-
__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__: Record<string, string>;
|
|
27
|
-
/** Cached loader data: route path -> loader data */
|
|
28
|
-
__VITE_REACT_SSG_STATIC_LOADER_DATA__: Record<string, Record<string, unknown>>;
|
|
29
|
-
__VITE_REACT_SSG_HASH__: string;
|
|
30
|
-
__VITE_REACT_SSG_CONTEXT__: ViteReactSSGContext<true>;
|
|
31
|
-
/**
|
|
32
|
-
* Injected by the SSG build into every page's <head>.
|
|
33
|
-
* Contains the React Router static handler context (loaderData, actionData,
|
|
34
|
-
* errors) produced during server-side rendering of that page.
|
|
35
|
-
* Passed as `hydrationData` to createBrowserRouter so the client router
|
|
36
|
-
* starts with the correct loader data without re-fetching anything.
|
|
37
|
-
*/
|
|
38
|
-
__staticRouterHydrationData?: {
|
|
39
|
-
loaderData?: Record<string, unknown>;
|
|
40
|
-
actionData?: Record<string, unknown> | null;
|
|
41
|
-
errors?: Record<string, unknown> | null;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
}
|
|
21
|
+
//#region src/client/single-page.d.ts
|
|
22
|
+
declare function ViteReactSSG(App: ReactNode, fn?: (context: ViteReactSSGContext<false>) => Promise<void> | void, options?: ViteReactSSGClientOptions): (client?: boolean, routePath?: string) => Promise<ViteReactSSGContext<false>>;
|
|
45
23
|
//#endregion
|
|
46
|
-
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
|
24
|
+
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, Router, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as RouterFutureConfig, c as ViteReactSSGClientOptions, i as Router, l as ViteReactSSGContext, n as NonIndexRouteRecord, o as RouterOptions, r as RouteRecord, s as StyleCollector, t as IndexRouteRecord, u as ViteReactSSGOptions } from "./types-5bBDTafc.mjs";
|
|
2
2
|
import { HelmetProps } from "react-helmet-async";
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
|
|
@@ -18,29 +18,7 @@ type Props = HelmetProps & {
|
|
|
18
18
|
};
|
|
19
19
|
declare function Head(props: Props): React.ReactNode;
|
|
20
20
|
//#endregion
|
|
21
|
-
//#region src/client/
|
|
22
|
-
declare function ViteReactSSG(
|
|
23
|
-
declare global {
|
|
24
|
-
interface Window {
|
|
25
|
-
/** Manifest index: route path -> data file path */
|
|
26
|
-
__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__: Record<string, string>;
|
|
27
|
-
/** Cached loader data: route path -> loader data */
|
|
28
|
-
__VITE_REACT_SSG_STATIC_LOADER_DATA__: Record<string, Record<string, unknown>>;
|
|
29
|
-
__VITE_REACT_SSG_HASH__: string;
|
|
30
|
-
__VITE_REACT_SSG_CONTEXT__: ViteReactSSGContext<true>;
|
|
31
|
-
/**
|
|
32
|
-
* Injected by the SSG build into every page's <head>.
|
|
33
|
-
* Contains the React Router static handler context (loaderData, actionData,
|
|
34
|
-
* errors) produced during server-side rendering of that page.
|
|
35
|
-
* Passed as `hydrationData` to createBrowserRouter so the client router
|
|
36
|
-
* starts with the correct loader data without re-fetching anything.
|
|
37
|
-
*/
|
|
38
|
-
__staticRouterHydrationData?: {
|
|
39
|
-
loaderData?: Record<string, unknown>;
|
|
40
|
-
actionData?: Record<string, unknown> | null;
|
|
41
|
-
errors?: Record<string, unknown> | null;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
}
|
|
21
|
+
//#region src/client/single-page.d.ts
|
|
22
|
+
declare function ViteReactSSG(App: ReactNode, fn?: (context: ViteReactSSGContext<false>) => Promise<void> | void, options?: ViteReactSSGClientOptions): (client?: boolean, routePath?: string) => Promise<ViteReactSSGContext<false>>;
|
|
45
23
|
//#endregion
|
|
46
|
-
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
|
24
|
+
export { ClientOnly, Head, IndexRouteRecord, NonIndexRouteRecord, RouteRecord, Router, RouterFutureConfig, RouterOptions, StyleCollector, ViteReactSSG, ViteReactSSGClientOptions, ViteReactSSGContext, ViteReactSSGOptions };
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
Current type: ${
|
|
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{createRoot as i,hydrateRoot as a}from"react-dom/client";import{isValidElement as o,useEffect as s,useState as c}from"react";const{version:l,render:u,hydrate:d}={...r},f=Number((l||``).split(`.`)[0])>17;function p(e,t,n={}){let{useLegacyRender:r}=n;r||!f?u(e,t):i(t).render(e)}function m(e,t,n={}){let{useLegacyRender:r}=n;r||!f?d(e,t):a(t,e)}function h(e){return document.readyState===`loading`?new Promise(t=>{document.addEventListener(`DOMContentLoaded`,()=>t(e))}):Promise.resolve(e)}function g(e){try{return JSON.parse(e||`{}`)}catch(e){return console.error(`On state deserialization - ${e instanceof Error?e.message:String(e)}`),{}}}function _(){let[e,t]=c(!1);return s(()=>{t(!0)},[]),e}function v({children:e,fallback:r}){if(_()){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: ${o(e)?`React element`:typeof e}`);return n(t,{children:e?.()})}return r??null}const y=e,b=y.Helmet||y.default?.Helmet||(()=>null);function x(e){return n(b,{...e})}const{HelmetProvider:S}=e;function C(e,t,r={}){let{transformState:i,rootContainer:a=`#root`,ssrWhenDev:o,getStyleCollector:s=null}=r;process.env.NODE_ENV===`development`&&o!==void 0&&console.warn("[vite-react-ssg] `ssrWhenDev` option is no longer needed. If you want to use csr, just replace `vite-react-ssg dev` with `vite`.");let c=typeof window<`u`;async function l(n=!1,r){let a=[],o={isClient:c,onSSRAppRendered:n?()=>{}:e=>a.push(e),triggerOnSSRAppRendered:()=>Promise.all(a.map(e=>e())),initialState:{},transformState:i,routePath:r,getStyleCollector:s,routes:Array.isArray(e)?e:e?.routes||[],routerOptions:void 0,base:`/`,app:e,routerType:`single-page`};o.RouteRenderer=e?.RouteRenderer,o.matchRouteBranch=e?.matchRouteBranch,o.matchRouteBranchWithParams=e?.matchRouteBranchWithParams,o.resolveRouteBranch=e?.resolveRouteBranch,n&&(await h(),o.initialState=i?.(window.__INITIAL_STATE__||{})||g(window.__INITIAL_STATE__)),await t?.(o);let l=o.initialState;return{...o,initialState:l}}return c&&(async()=>{let t=typeof a==`string`?document.querySelector(a):a;if(!t){typeof $jsdom>`u`&&console.warn(`[vite-react-ssg] Root container not found.`);return}let i=await l(!0);window.__VITE_REACT_SSG_CONTEXT__=i;let o=e,s=o.RouteRenderer,c=o.matchRouteBranch,u=o.resolveRouteBranch,d=e?.routes||(Array.isArray(e)?e:[]),f;if(s&&c&&u){let e=await u(c(d,window.location.pathname));f=n(S,{children:n(s,{routes:d,pathname:window.location.pathname,hasLoaderData:!1,resolvedBranch:e})})}else if(Array.isArray(e))throw Error(`An array of routes requires RouteRenderer, matchRouteBranch, and resolveRouteBranch on the application entry`);else f=n(S,{children:e});document.querySelector(`[data-server-rendered=true]`)===null&&process.env.NODE_ENV===`development`?p(f,t,r):m(f,t,r)})(),l}export{v as ClientOnly,x as Head,C as ViteReactSSG};
|
package/dist/node.cjs
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
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:os`);a=e.t(a,1);let o=require(`node:path`);o=e.t(o,1);let s=require(`fs-extra`);s=e.t(s,1);let c=require(`vite`),l=require(`node:crypto`);l=e.t(l,1);let u=require(`node: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;let g=null;async function _(){if(!g){let{matchRoutes:e}=await import(`react-router-dom`);g=e}return g}async function ee({routes:e,locationArg:t,base:n,serverManifest:r,manifest:i,ssrManifest:a}){let o=(await _())([...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(h);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 te(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 b(){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 s.default.readFile((0,o.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)\>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function w(e){return`<link rel="stylesheet" href="${e}">`}function ne(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=T(e);r&&n.push(r)}}),n.join(``)}function T(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 E(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 re(e){let t=e.headers.origin&&e.headers.origin!==`null`?e.headers.origin:`http://${e.headers.host}`;E(e.originalUrl,"Expected `nodeReq.originalUrl` to be defined");let n=new URL(e.originalUrl,t),r={method:e.method,headers:D(e.headers)};return new Request(n.href,r)}async function ie(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 O(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 k(e){return f.renderToString((0,n.jsx)(n.Fragment,{children:e}))}function A(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 j=null;function M(){return j||(j=globalThis.__BOLTDOCS_HELMET_PROVIDER__||(()=>{let{createRequire:e}=require(`node:module`);return e(require(`url`).pathToFileURL(__filename).href)(`react-helmet-async`).HelmetProvider})(),j)}let N=null;async function ae(){return N||=await import(`react-router-dom`),N}var P=class{constructor(e){this._dataRoutes=null,this._staticHandler=null,this.handleLoader=async(e,n)=>{let{routes:r,base:i}=this.context,{matchRoutes:a}=await ae(),o=re(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 ie(await F({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 ae(),_=this._dataRoutes??=t.r([...i],e=>e);this._staticHandler??=h(_,{basename:r});let{query:ee}=this._staticHandler,v=await ee(u),y=0;for(;v instanceof Response&&y<10;){let e=v.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)}`;v=await ee(new Request(n)),y++}if(v instanceof Response)throw v;p=v;let te=g(_,p,{future:o.future}),b=M(),x=b;x&&typeof x==`function`&&(x.canUseDOM=!1);let S=(0,n.jsx)(b,{context:f,children:(0,n.jsx)(m,{router:te,context:p})});d&&(S=d.collect(S));let C=await k(S),{htmlAttributes:w,bodyAttributes:ne,metaAttributes:T,styleTag:E}=A(C,f,d);return{appHTML:C,htmlAttributes:w,bodyAttributes:ne,metaAttributes:T,styleTag:E,routerContext:p}}};async function F({loader:e,params:t,request:n,routeId:r}){let{json:i}=await ae(),a=await e({request:O(L(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 I(a)?a:i(a)}function I(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function L(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 P(e)}var R=`0.3.1`;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&&B(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 z(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)?t:(0,o.join)(e.root,t))}const ce=/[:*?]/;function B(e){return e?ce.test(e):!1}const V=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),le=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function H(e){try{return p.default.statSync(e).size}catch{return 0}}async function ue(e,t){let n=(0,o.join)(e,`.vite`),r=(0,o.join)(e,`assets`),i={},a=(0,o.join)(n,`manifest.json`);p.default.existsSync(a)&&(i=JSON.parse(await p.default.readFileSync(a,`utf-8`)));let s=0,c=0;for(let[,t]of Object.entries(i)){let{file:n,css:r=[]}=t,i=H((0,o.join)(e,n));s+=i;for(let t of r)c+=H((0,o.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=o.default.extname(t.name).toLowerCase(),n=(0,o.join)(r,t.name);V.has(e)?l+=H(n):le.has(e)&&u++}}let d=(0,o.join)(e,`index.html`),f=0,m=[];if(p.default.existsSync(d)){let e=H(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=H((0,o.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 de(e,t){let n=o.default.resolve(e,`..`,`.boltdocs`,`reports`);p.default.existsSync(n)||p.default.mkdirSync(n,{recursive:!0});let r=(0,o.join)(n,`performance.json`);p.default.writeFileSync(r,JSON.stringify(t,null,2))}const fe=Number.parseInt(c.version)>=5?[`.vite`]:[];function pe(e){return Number.parseInt(c.version)>=8?{rolldownOptions:e}:{rollupOptions:e}}const U=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`]),me=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`,`public`]);function he(e){let t=[];if(!s.default.existsSync(e))return t;let n=s.default.readdirSync(e,{withFileTypes:!0,recursive:!0});for(let e of n){if(!e.isFile()||e.name.startsWith(`.`))continue;let n=String(e.parentPath??e.path);if(n.split(`/`).slice(-1).some(e=>me.has(e)))continue;let r=`.`+e.name.split(`.`).pop()?.toLowerCase();U.has(r)&&t.push((0,o.join)(n,e.name))}return t}let W=null,G=null;function ge(e,t,n,r){try{let n=[],i=(0,o.join)(e,t);s.default.existsSync(i)&&n.push(...he(i));for(let t of[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`]){let r=(0,o.join)(e,t);s.default.existsSync(r)&&n.push(r)}n.sort();let a=`${n.length}:${n[0]}:${n[n.length-1]}`;if(W&&G===a)return W;let c=Array(n.length);for(let e=0;e<n.length;e++){let t=s.default.statSync(n[e]);c[e]={file:n[e],mtime:t.mtimeMs,size:t.size}}if(r){let e=(0,o.join)(r,`hash-meta.json`),t=(0,o.join)(r,`client-hash.txt`);try{if(s.default.existsSync(e)&&s.default.existsSync(t)){let r=JSON.parse(s.default.readFileSync(e,`utf-8`)),i=Math.max(...c.map(e=>e.mtime));if(r.fileCount===n.length&&r.lastMtime===i){let e=s.default.readFileSync(t,`utf-8`).trim();if(e)return W=e,G=a,e}}}catch{}}let u=l.default.createHash(`sha256`);for(let{file:t,mtime:n,size:r}of c)u.update((0,o.relative)(e,t).replace(/\\/g,`/`)),u.update(n.toString()),u.update(r.toString());let d=u.digest(`hex`);if(W=d,G=a,r)try{let e=Math.max(...c.map(e=>e.mtime)),t=(0,o.join)(r,`hash-meta.json`);s.default.mkdirSync(r,{recursive:!0}),s.default.writeFileSync(t,JSON.stringify({fileCount:n.length,lastMtime:e}))}catch{}return d}catch{return Math.random().toString(36).substring(2,12)}}function _e(e,n){return`static-loader-data${t.s(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function ve(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 ye(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`;u!==process.env.NODE_ENV&&(process.env.NODE_ENV=u);let d=await(0,c.resolveConfig)(n,`build`,u,u),f=process.cwd(),p=d.root||f,m=d.build.outDir||`dist`,h=d.base,g=Object.assign({},d.ssgOptions||{},e),_=performance.now(),{script:v=`sync`,mock:y=!1,htmlEntry:w=`index.html`,entry:T=await C(p,w),formatting:E=`none`,includedRoutes:D=ye,onBeforePageRender:re,onPageRendered:ie,onFinished:O,onStep:k,dirStyle:A=`flat`,includeAllRoutes:j=!1,format:M=`esm`,concurrency:N=20,rootContainerId:ae=`root`,routeToSourceFileMap:P={},cacheDir:F=`.boltdocs/build`}=g,I=g.beastiesOptions??{},L=g.turbo??!1,R=`docs`,ce=Object.values(P);if(ce.length>0){let e=ce[0],t=(0,o.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(R=t[0])}let B=(0,o.isAbsolute)(m)?m:(0,o.join)(p,m),V=(0,o.isAbsolute)(F)?F:(0,o.join)(p,F),le=ge(p,R,m,V),H=le.substring(0,12),U=(0,o.join)(V,`ssr`,L?`turbo-ssr`:H),me=(0,o.join)(V,`client-hash.txt`),he=(0,o.join)(V,`template-index.html`),W=!1;try{s.default.existsSync(me)&&s.default.existsSync(he)&&s.default.existsSync(B)&&s.default.existsSync((0,o.join)(B,`assets`))&&(await s.default.readFile(me,`utf-8`)).trim()===le&&(W=!0)}catch{}function G(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}let K=(0,c.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;if(K.info=(e,t)=>{G(e)||Ce(e,t)},W)k?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, skipped`}),await s.default.ensureDir(B),await s.default.copy(he,(0,o.join)(B,w));else{let e=performance.now();await(0,c.build)((0,c.mergeConfig)(n,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,...pe({input:{app:(0,o.join)(p,w||`./index.html`)},onLog(e,t,n){t.message.includes(`react-helmet-async`)||G(t.message)||n(e,t)}})},customLogger:K,mode:d.mode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(e){m=e.build.outDir||`dist`}}]})),k?.({name:`Client build`,duration:performance.now()-e,success:!0,details:`Vite production build`}),await s.default.ensureDir(V),await s.default.copy((0,o.join)(B,w),he),await s.default.writeFile(me,le,`utf-8`)}let we=()=>{};if(y){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-B4hHTFBO.cjs`));we=e()}let q=await z(d,T);if((L||W)&&s.default.existsSync(U)&&s.default.readdirSync(U).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0)k?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`});else{s.default.existsSync(U)&&await s.default.remove(U),process.env.VITE_SSG=`true`;let e=performance.now();await(0,c.build)((0,c.mergeConfig)(n,{logLevel:`warn`,build:{ssr:q,manifest:!0,outDir:U,minify:!1,cssCodeSplit:!1,...pe({output:M===`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:d.mode})),k?.({name:`Server build`,duration:performance.now()-e,success:!0,details:`Vite SSR bundle`})}let Te=M===`esm`&&process.platform===`win32`?`file://`:``,Ee=M===`esm`?`.mjs`:`.cjs`,De=q.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`),Oe=Te+(0,o.join)(U,(q.includes(`/`)||q.includes(`\\`)?q.split(/[/\\]/).pop().replace(/\.[^/.]+$/,``).replace(Ee,``):De)+Ee).replace(/\\/g,`/`),ke=JSON.parse(await s.default.readFile((0,o.join)(U,...fe,`manifest.json`),`utf-8`)),Ae=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),{createRoot:je,includedRoutes:Me}=M===`esm`?await import(Oe):Ae(Oe),Ne=Me||D,{routes:Pe}=await je(!1),{paths:Fe}=await se(Pe),J=j?Fe:await Ne(Fe,Pe||[]);J=ye(J,Pe||[]),J=Array.from(new Set(J));let Y;L&&(Y=await b(),Y||(0,r.warn)(`[zig-critters] WASM unavailable; falling back to beasties for critical CSS`));let Ie=I!==!1&&!Y?await te(m,{publicPath:h,...I}):void 0,Le=``;if(Y){let e=(0,o.join)(B,`assets`);if(s.default.existsSync(e)){let t=s.default.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)Le+=s.default.readFileSync((0,o.join)(e,n),`utf-8`)+`
|
|
2
|
-
`}}let Re=performance.now(),ze=JSON.parse(await s.default.readFile((0,o.join)(B,...fe,`ssr-manifest.json`),`utf-8`)),Be=JSON.parse(await s.default.readFile((0,o.join)(B,...fe,`manifest.json`),`utf-8`)),Ve=await s.default.readFile((0,o.join)(B,w),`utf-8`);s.default.rmSync((0,o.join)(B,w)),Ve=be(Ve,v);let He=(await import(`p-queue`)).default||await import(`p-queue`),Ue=new He({concurrency:N}),We=new He({concurrency:Math.min(a.default.cpus().length,4)}),Ge={},Ke=0,qe=new Map,Je=0,Ye=0,Xe=0,Ze=(0,o.join)(V,`ssg-cache.json`),X=(0,o.join)(V,`ssg-pages`),Z={};if(!L)try{s.default.existsSync(Ze)&&(Z=await s.default.readJson(Ze))}catch{}let Qe={...Z},Q=new Set;Q.add(X);for(let e of J){let t=A===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;Q.add((0,o.join)(B,(0,o.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;Q.add((0,o.join)(B,`static-loader-data`,(0,o.dirname)(n)))}Q.add((0,o.join)(B,`static-loader-data`)),await Promise.all([...Q].map(e=>s.default.ensureDir(e)));for(let e of J){let n=l.default.createHash(`md5`).update(e).digest(`hex`),i=(0,o.join)(X,`${n}.html`),a=(0,o.join)(X,`${n}.json`),c=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`,u=A===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):c,d=(0,o.join)(B,u),f=t.s(e).replace(/\/$/,``),p=P[f]||P[e],m=!1,g=0;if(!L&&W&&p&&s.default.existsSync(p))try{if(g=Math.round(s.default.statSync(p).mtimeMs),s.default.existsSync(i)){let t=Z[f]||Z[e];t&&Math.round(t.mtime)===g&&(m=!0)}}catch{}if(m){Ue.add(async()=>{try{if(W)await s.default.copy(i,d);else{let e=await s.default.readFile(i,`utf-8`);e=e.replace(/window\.__VITE_REACT_SSG_HASH__\s*=\s*'[^']*'/,`window.__VITE_REACT_SSG_HASH__ = '${H}'`),await s.default.writeFile(d,e,`utf-8`)}let t=Z[f]||Z[e];if(t?.loaderDataFilePath&&s.default.existsSync(a)){let n=W?t.loaderDataFilePath:_e(e,H);await s.default.copy(a,(0,o.join)(B,n)),Ge[ve(e,h)]=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:m,routerType:_}=n,v=await re?.(e,Ve,n)||Ve,y=`${t.c(c)}${t.a(e)}`,te=oe(n),b;if(!m&&_===`remix`){let t=qe.get(e);t?b=t:(b=await ee({routes:[...l],locationArg:y,base:c,serverManifest:ke,manifest:Be,ssrManifest:ze}),qe.set(e,b))}else b=new Set;let{appHTML:C,bodyAttributes:w,htmlAttributes:T,metaAttributes:D,styleTag:O,routerContext:k}=await te.render(e),A=k?.loaderData,j;if(A&&Object.keys(A).length>0){let t=_e(e,H);j=t,await s.default.writeFile((0,o.join)(B,t),JSON.stringify(A)),Ge[ve(e,h)]=t,Ke++}await d?.(e,C,n);let M=await S({rootContainerId:ae,appHTML:C,indexHTML:v,metaAttributes:D,bodyAttributes:w,htmlAttributes:T,initialState:null}),N=ne(b),P=M.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``);N&&(P=P.replace(`<head>`,`<head>${N}`));let F=await ie?.(e,P,n)||P,I=``;if(A&&Object.keys(A).length>0){let t=JSON.stringify(A).replace(/</g,`\\u003c`);I=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${ve(e,h)}': ${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__ = '${H}';${I}${R}<\/script>`;if(F=F.replace(`<head>`,`<head>${se}`),F=F.replace(`<script>${x}<\/script>`,``),Y){try{Le&&(F=await Y.processHtml(F,Le))}catch(t){(0,r.warn)(`[zig-critters] Failed to inline CSS for "${e}": ${t instanceof Error?t.message:String(t)}`)}F=F.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else Ie&&(F=await We.add(()=>Ie.process(F)),F=F.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`));O&&(F=F.replace(`<head>`,`<head>${O}`));let z=await xe(F,E);if(await s.default.writeFile((0,o.join)(B,u),z,`utf-8`),!L&&p&&s.default.existsSync(p)){await s.default.writeFile(i,z,`utf-8`);let n=t.s(e).replace(/\/$/,``),r=Math.round(g);A&&Object.keys(A).length>0&&j?(await s.default.writeFile(a,JSON.stringify(A),`utf-8`),Qe[n]={mtime:r,loaderDataFilePath:j}):Qe[n]={mtime:r}}Je++,Xe+=z.length}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}})}await Ue.start().onIdle();let $e=Je+Ye,et=(Xe/1024/1024).toFixed(2),tt=0;if(!L)try{if(await s.default.ensureDir((0,o.dirname)(Ze)),await s.default.writeJson(Ze,Qe),s.default.existsSync(X)){let e=await s.default.readdir(X),t=new Set;for(let e of Object.keys(Qe)){let n=l.default.createHash(`md5`).update(e).digest(`hex`);t.add(`${n}.html`),t.add(`${n}.json`)}for(let n of e)(n.endsWith(`.html`)||n.endsWith(`.json`))&&(t.has(n)||(await s.default.remove((0,o.join)(X,n)),tt++))}}catch{}k?.({name:`Render pages`,duration:performance.now()-Re,success:!0,details:`${$e} pages (${Je} new, ${Ye} cached, ${et} MB)`,metrics:{renderedCount:Je,cachedCount:Ye,renderedSize:Xe,totalPages:$e,prunedCount:tt}});let nt=performance.now(),rt=JSON.stringify(Ge,null,0);await s.default.writeFile((0,o.join)(B,`static-loader-data-manifest-${H}.json`),rt),W||await s.default.remove((0,o.join)(V,`ssr`)),we();let it=d.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;it&&!it.disabled&&it.generateSW&&await it.generateSW();let at=Math.round(performance.now()-_),$=await ue(B,at);de(B,$),k?.({name:`Static loader data`,duration:performance.now()-nt,success:!0,details:`${Ke} loader data files`,metrics:{loaderDataFileCount:Ke}}),k?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(at/1e3).toFixed(1)}s, JS: ${($.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${($.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:at,totalPages:$.pages.length,jsSize:$.totalJSBundleSize,cssSize:$.totalCSSBundleSize}}),await O?.(m),setTimeout(()=>{(0,r.warn)(`Build process still running after 15s. There might be something misconfigured in your setup. Force exit.`),process.exit(0)},15*1e3).unref()}function 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 Se(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function Ce({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=oe(f),{app:m,base:h}=f,[g,_]=r.split(`?`),ee=new URLSearchParams(_);if(!m&&ee.has(`_data`))return p.handleLoader(u,d);let v=await l.transformIndexHtml(r,e),y=await i?.(r,v,f)||v,{appHTML:te,bodyAttributes:b,htmlAttributes:x,metaAttributes:C,styleTag:ne}=await p.render(t.o(g,h));C.push(ne);let T=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),E=new Set,D=new Set,re=async e=>{if(!e||!e?.ssrTransformResult||D.has(e))return;D.add(e);let{deps:t=[],dynamicDeps:n=[]}=e?.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))E.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await re(t)}};await Promise.all(T.map(async e=>re(e)));let ie=[...E].map(e=>w(t.i(l.config.base,e)));C.push(...ie);let O=await S({rootContainerId:o,appHTML:te,indexHTML:y,metaAttributes:C,bodyAttributes:b,htmlAttributes:x,initialState:null}),k=await s?.(r,O,f)||O;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.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(Se),()=>{l.middlewares.use(u)}}}}async function we(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,r=await(0,c.resolveConfig)(e,`serve`,n,n),i=process.cwd(),a=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 C(a,l),[g,_]=await Promise.all([z(r,h),m.default.readFile((0,o.join)(a,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??[],Ce({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 q(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await we(t,e);return await r.listen(),Te(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Te(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${R} `)}`,{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=we,exports.dev=q;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./router-adapter-DtnukOfG.cjs`),n=require(`./ssg-worker-payload-B_9N9o5p.cjs`);let r=require(`@bdocs/dui`),i=require(`node:module`),a=require(`node:os`);a=e.t(a,1);let o=require(`node:path`);o=e.t(o,1);let s=require(`fs-extra`);s=e.t(s,1);let c=require(`vite`),l=require(`node:crypto`);l=e.t(l,1);let u=require(`node:fs/promises`);u=e.t(u,1);let d=require(`node:fs`);d=e.t(d,1);const f=/import\("([^)]+)"\)/g;function p(e,t){let n=new Set;if(!t)return n;for(let r of t)m(e,r,n);return n}function m(e,t,n=new Set){return t?(n.add(t),e[t]?.dynamicImports?.forEach(t=>{m(e,t,n)}),n):n}function h(e,t,n,r){let i=e?.map(e=>e.route.entry).filter(Boolean)??[],a=new Set;e?.forEach(e=>{let t=``;e.route.lazy&&(t+=e.route.lazy.toString()),e.route.Component?._payload?._result&&(t+=e.route.Component._payload._result.toString());let n=t.matchAll(f);for(let e of n)a.add(e[1].split(`/`).at(-1)??``)});let o=new Set(i);for(let e of a){let t=n.find(([t,n])=>n.file.endsWith(e));t&&o.add(t[0])}let s=new Set;for(let e of o){let n=r.get(e);if(!n){let i=p(t.manifest,new Set([e]));n=new Set;for(let e of i)for(let r of t.ssrManifest[e]||[])n.add(r);r.set(e,n)}for(let e of n)s.add(e)}return s}function g(e){let t=Object.entries(e.serverManifest),n=new Map,r=new Map;return i=>{let a=r.get(i);if(a)return a;let o=Promise.resolve().then(()=>{let r=h(e.matchRouteBranchWithParams([...e.routes],i,e.base),e,t,n);return new Set(r)});return r.set(i,o),o.catch(()=>{r.get(i)===o&&r.delete(i)}),o}}async function ee(e,t={}){try{let n=await import(`beasties`);return new(n.default||n)({path:e,logLevel:`warn`,external:!0,inlineFonts:!0,preloadFonts:!0,...t})}catch{return}}async function _(){try{let e=await import(`@bdocs/zig-critters`),t=e.extractCriticalCss||e.default?.extractCriticalCss;return t?{extractCriticalCss:t}:void 0}catch{return}}async function te(e={}){try{let{createZigCrittersPool:t}=await Promise.resolve().then(()=>require(`./zig-pool-Cpw16nuK.cjs`)),n=await t(e);if(n)return{extractCriticalCss:(e,t,r)=>n.extractCriticalCss(e,t,r),dispose:()=>n.dispose()}}catch{}return _()}function ne(e,t,n,r){let i=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return l.default.createHash(`sha256`).update(r).update(`\0`).update(i).update(`\0`).update(t||n).digest(`hex`)}function v(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function re(e,t){let n=new Set(v(e)),r=v(t).filter(e=>!n.has(e));return r.length>0?r.join(`
|
|
2
|
+
`):null}var y=class{constructor(e=512){this.maxEntries=e,this.entries=new Map}getOrCreate(e,t){let n=this.entries.get(e);if(n)return n.promise;let r={promise:Promise.resolve(null),settled:!1},i=Promise.resolve().then(t).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{r.settled=!0,this.evictSettledEntries()});return r.promise=i,this.entries.set(e,r),this.evictSettledEntries(),i}get size(){return this.entries.size}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};const ie=new Set([`.js`,`.mjs`,`.css`]);function b(e){let t=o.default.extname(e).toLowerCase();return ie.has(t)}function x(e){let t=new Map,n=new Map;for(let r of Object.values(e))t.set(r.file,r),r.src&&n.set(r.src,r);return{byFile:t,bySrc:n}}function S(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])b(t)&&S(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])b(t)&&!n.has(t)&&S(e,t,n)}}async function C(e,t,n){if(n){let e=l.default.createHash(`md5`);for(let r of t){let t=n.get(r);t&&e.update(t)}return e.digest(`hex`)}let r=new Map;await Promise.all(t.map(async t=>{try{let n=await(0,u.readFile)(o.default.join(e,t));r.set(t,n)}catch{}}));let i=l.default.createHash(`md5`);for(let e of Array.from(r.keys()).sort()){let t=r.get(e);t&&i.update(t)}return i.digest(`hex`)}async function ae(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:s,clientHash:c,assetHashes:l}=e,u=n;if(!u){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);u=x(r)}let{byFile:d,bySrc:f}=u,p=o.default.relative(s,a).replace(/\\/g,`/`),m=new Set,h=f.get(p);if(h)S(d,h.file,m);else{let e=[p,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)b(t)&&S(d,t,m)}}if(m.size===0){if(!c)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return c}return C(t,Array.from(m).sort(),l)}const oe=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function w(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function T({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${oe}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return w(w(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function se({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${oe}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return w(w(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return w(w(p,`html`,a),`body`,i)}async function ce(e,t=`index.html`){let[,n]=[...(await s.default.readFile((0,o.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function le(e){return`<link rel="stylesheet" href="${e}">`}function ue(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=E(e);r&&n.push(r)}}),n.join(``)}function E(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var D=`0.4.1`;async function de(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&pe(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function fe(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:(0,o.join)(e.root,t))}const O=/[:*?]/;function pe(e){return e?O.test(e):!1}async function k(e,t){if(e!==t){await s.default.ensureDir((0,o.dirname)(t)),await s.default.remove(t);try{await s.default.link(e,t)}catch{await s.default.copy(e,t)}}}async function A(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(k(r.source,r.destination)));await Promise.all(n)}function me({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=0,l=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),c+=performance.now()-t}),s};return{enqueue(e,t){let u=Buffer.byteLength(t,`utf8`);return u>i?(s=l().then(async()=>{let r=performance.now();await n(e,t),c+=performance.now()-r}),s):(a.push({filePath:e,content:t}),o+=u,a.length>=r||o>=i?l():Promise.resolve())},flush:l,pendingCount(){return a.length},writeTimeMs(){return c}}}function j(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function he(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,c=[...new Set(r)].sort(),l=[...new Set(i)].sort(),u=[...new Set(a)].sort();if(!o(e.clientFiles,c)||!o(e.pageFiles,l)||!o(e.auxiliaryFiles||[],u))return!1;let d=[...c,...l,...u];return o(be(n),[...new Set(d)].sort())?d.every(e=>s.default.existsSync(`${n}/${e}`)):!1}function ge(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function _e(e){try{let t=await s.default.readJson(e);return!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`)?void 0:j(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function ve(e,t,n,r,i=[],a){let o=a||be(n),s=new Set(r),c=new Set(i);return Ce(e,j(t,i.length>0?[...c]:o.filter(e=>!s.has(e)),r,i.length>0?o.filter(e=>!s.has(e)&&!c.has(e)):[]))}function ye(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[M(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function be(e){let t=[],n=r=>{let i;try{i=s.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push((0,o.relative)(e,i).split(o.sep).join(`/`))}};return n(e),t.sort()}function M(e){return!e||e===`/`?``:t.a(e).replace(/\/+$/,``)}function xe(e,t){let n=new Set(t.map(M)),r={};for(let[t,i]of Object.entries(e)){let e=M(t);n.has(e)&&(r[e]=i)}return r}async function Se(e,t){try{if(await s.default.readFile(e,`utf8`)===t)return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf8`),!0}async function Ce(e,t,n=2){try{let n=await s.default.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(e,t,{spaces:n}),!0}const N=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),P=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function F(e){try{return d.default.statSync(e).size}catch{return 0}}const I=`boltdocs-metrics.json`;function L(e){if(!e)return null;try{let t=(0,o.join)(e,I);return d.default.existsSync(t)?JSON.parse(d.default.readFileSync(t,`utf-8`)):null}catch{return null}}function we(e,t){try{let n=o.default.resolve(e,`..`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0}),d.default.writeFileSync((0,o.join)(e,I),JSON.stringify(t))}catch{}}async function Te(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=L(n);if(e)return e.buildTime=t,e}let i=(0,o.join)(e,`.vite`),a=(0,o.join)(e,`assets`),s={},c=r.manifestPath||(0,o.join)(i,`manifest.json`);d.default.existsSync(c)&&(s=JSON.parse(await d.default.readFileSync(c,`utf-8`)));let l=0,u=0;for(let[,t]of Object.entries(s)){let{file:n,css:r=[]}=t,i=F((0,o.join)(e,n));l+=i;for(let t of r)u+=F((0,o.join)(e,t))}let f=0,p=0;if(d.default.existsSync(a)){let e=d.default.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=o.default.extname(t.name).toLowerCase(),n=(0,o.join)(a,t.name);N.has(e)?f+=F(n):P.has(e)&&p++}}let m=(0,o.join)(e,`index.html`),h=0,g=[];if(d.default.existsSync(m)){let e=F(m);h+=e,g.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let ee=r.outputFiles?[...r.outputFiles]:(()=>{try{return d.default.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of ee){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=F((0,o.join)(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);h+=n,g.push({route:e,htmlSize:n,htmlFile:t})}}let _={buildTime:t,totalJSBundleSize:l,totalCSSBundleSize:u,totalImagesSize:f,totalHTMLSize:h,fontCount:p,pages:g};return n&&we(n,_),_}function Ee(e,t){let n=o.default.resolve(e,`..`,`.boltdocs`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0});let r=(0,o.join)(n,`performance.json`);d.default.writeFileSync(r,JSON.stringify(t,null,2))}function De(e,t){try{if(!s.default.existsSync(e))return!1;let n=s.default.readFileSync(e);return t.update(n),!0}catch{return!1}}const Oe=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`]),ke=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`,`.webp`,`.png`,`.jpg`,`.jpeg`,`.gif`,`.ico`]);function R(e){let t=e.lastIndexOf(`.`);if(t===-1)return!1;let n=e.slice(t).toLowerCase();return ke.has(n)}function z(e,t,n){let r;try{r=s.default.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`))continue;let r=(0,o.join)(e,i),a;try{a=s.default.statSync(r)}catch{continue}if(a.isDirectory()){if(Oe.has(i))continue;z(r,t,n)}else if(a.isFile()&&R(i)){let e=(0,o.relative)(t,r).replace(/\\/g,`/`);n.update(`${e}:${a.mtimeMs}:${a.size}\n`)}}}function B(e,t){let n=(0,i.createRequire)(n(`url`).pathToFileURL(__filename).href);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=(0,o.join)((0,o.dirname)(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);s.default.existsSync(i)&&z(i,e,t)}catch{}}function Ae(e,t,n){let r=[(0,o.join)(e,t,`public`),(0,o.join)(e,t,`src`)];for(let t of r)try{s.default.existsSync(t)&&z(t,e,n)}catch{}}const je=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`,`pnpm-lock.yaml`,`package-lock.json`,`yarn.lock`];function Me(e,t){for(let n of je){let r=(0,o.join)(e,n);try{if(s.default.existsSync(r)){let e=s.default.statSync(r);t.update(`${n}:${e.mtimeMs}:${e.size}\n`)}}catch{}}}function Ne(e,t,n){try{s.default.removeSync((0,o.join)(n,`hash-merkle.json`))}catch{}try{let n=(0,l.createHash)(`sha256`);if(B(e,n),De((0,o.join)(e,`.boltdocs`,`compiled`,`manifest.json`),n))Ae(e,t,n);else{let r=(0,o.join)(e,t);s.default.existsSync(r)&&z(r,e,n)}return Me(e,n),n.digest(`hex`)}catch(e){return(0,r.warn)(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),(0,l.createHash)(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function V(e){return l.default.createHash(`md5`).update(e).digest(`hex`)}function Pe(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Fe(e){if(e)try{let t=await s.default.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function Ie(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(n,{version:1,files:t},{spaces:0}),await s.default.move(n,e,{overwrite:!0})}catch{await s.default.remove(n).catch(()=>{})}}async function Le(e,t,n){let r=await Fe(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=(0,o.join)(e,t);try{let e=await s.default.stat(n);if(!e.isFile())return;let o=r?.files[t];if(Pe(o,e)){i.set(t,o.hash),a[t]=o;return}let c=V(await s.default.readFile(n));i.set(t,c),a[t]={hash:c,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await Ie(n,a),i}function Re(e,t){if(e)try{let t=s.default.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{}return t}function ze({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let c=l.default.createHash(`md5`).update(e).digest(`hex`);return!(!s.default.existsSync((0,o.join)(i,`${c}.html`))||t.loaderDataFilePath&&!s.default.existsSync((0,o.join)(i,`${c}.json`)))}function Be(e){return e===null?null:e.poolMetrics()}function Ve(e,t){return(0,o.isAbsolute)(t)?t:(0,o.join)(e,t)}function He(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=M(r);n[t]=Ve(e,i)}return Object.freeze(n)}function Ue(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:He(e.root,e.routeToSourceFileMap)})}function We(e,t,n={}){let r=He(e,n),i=t.map(t=>{let i=M(t.path),a=n[t.path],o=a?Ve(e,a):r[i]||t.componentPath;return{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function Ge(e,t){return Object.freeze({...e,routeManifest:t})}const Ke=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],qe=[`react`,`react-dom`];function Je(e){return Number.parseInt(c.version,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function Ye(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function Xe(e,t){let n=[],r=i=>{let a;try{a=s.default.readdirSync(i,{withFileTypes:!0})}catch{return}for(let s of a){if(s.name===`.vite`)continue;let a=(0,o.join)(i,s.name);if(s.isDirectory())r(a);else if(s.isFile()){let r=(0,o.relative)(e,a).split(o.sep).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function Ze(e){return e.map(e=>{if(Array.isArray(e))return Ze(e);if(e&&typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||typeof t==`string`&&t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return null}return e}).filter(Boolean)}async function Qe(e){let t=[],n=async r=>{let i;try{i=await s.default.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=(0,o.join)(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push((0,o.relative)(e,i).split(o.sep).join(`/`))}};return await n(e),t.sort()}async function $e(e){try{let t=await s.default.readFile(e);return(0,l.createHash)(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function et(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e),r=(0,o.resolve)(n,t),i=(0,o.relative)(n,r);if(!(!i||i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)))return r}async function tt(e,t){let n=(0,o.join)((0,o.resolve)(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await s.default.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&s.default.existsSync(e)?await Qe(e):[],a={};for(let t of i){let n=await $e((0,o.join)(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=et(t,e);r&&await $e(r)===n&&await s.default.remove(r)}e&&s.default.existsSync(e)&&(await s.default.ensureDir(t),await s.default.copy(e,t,{overwrite:!0,errorOnExist:!1})),await s.default.ensureDir((0,o.resolve)(t,`..`)),await s.default.writeJson(n,{version:1,files:a})}function nt(e){return(0,c.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...Je({input:{app:(0,o.join)(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir((0,o.isAbsolute)(t.build.outDir||``)?t.build.outDir||`dist`:(0,o.resolve)(e.root,t.build.outDir||`dist`))}}]})}function rt(e){return(0,c.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...Je({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...Ke],external:[...qe]},plugins:[...Ze(e.viteConfig.plugins||[]),Ye()]})}async function it(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,l=[],u=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),s.default.existsSync(e.outDir)&&await s.default.remove(e.outDir);let t=(0,o.join)(e.clientCacheDir,`dist`);await tt(e.viteConfig.publicDir,t),H(t,e.outDir),l=Xe((0,o.join)(e.clientCacheDir,`dist`),e.htmlEntry)}else{await(0,c.build)(nt({...e,onResolvedOutputDir:e=>{n=e}}));let d=performance.now()-u;e.onStep?.({name:`Client build`,duration:d,success:!0,details:`Vite production build`}),i=t(),a=i,r=(0,o.join)(e.finalCacheDir,`client-cache`,i);let f=(0,o.join)(r,`client-hash.txt`);await s.default.ensureDir(r);let p=(0,o.join)(r,`dist`);s.default.existsSync(p)&&await s.default.remove(p),await s.default.copy(n,p,{overwrite:!0,errorOnExist:!1}),await tt(e.viteConfig.publicDir,p),l=Xe(p,e.htmlEntry),await s.default.writeFile(f,i,`utf-8`),await ct((0,o.join)(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-u,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:l}}async function at(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};s.default.existsSync(e.ssgOut)&&await s.default.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await(0,c.build)(rt(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function ot(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e,t),r=(0,o.relative)((0,o.resolve)(e),n);if(!(r===`..`||r.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(r)))try{let t=s.default.realpathSync(e),r=s.default.realpathSync(n),i=(0,o.relative)(t,r);return i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)||!s.default.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function st(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function H(e,t){let n=s.default.readdirSync(e,{withFileTypes:!0});s.default.mkdirSync(t,{recursive:!0});for(let r of n){let n=(0,o.join)(e,r.name),i=(0,o.join)(t,r.name);if(r.isDirectory())H(n,i);else if(r.isFile())try{s.default.linkSync(n,i)}catch{s.default.copyFileSync(n,i)}}}async function ct(e,t=5,n){try{if(!s.default.existsSync(e))return;let r=await s.default.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=(0,o.join)(e,t.name),r=await s.default.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await s.default.remove((0,o.join)(e,t.name))}catch{}}function lt(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function ut(e,t){return t===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function dt(e){return Object.freeze(e)}function ft(e){let n=new Map;for(let r of e.routes){let i=l.default.createHash(`md5`).update(r).digest(`hex`),a=M(r),s=e.routeToSourceFileMap[a]||e.routeToSourceFileMap[r],c=s?e.sourceMeta.get(s):void 0;n.set(r,dt({path:r,pathHash:i,cachedHtmlFile:(0,o.join)(e.ssgPagesDir,`${i}.html`),cachedLoaderFile:(0,o.join)(e.ssgPagesDir,`${i}.json`),finalOutFile:(0,o.join)(e.outDir,ut(r,e.dirStyle)),normalizedKey:a,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[r]??e.fallbackHash,fetchUrl:`${t.o(e.contextBase)}${t.r(r)}`}))}return n}function pt(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function mt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function ht(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function U(e,t){return e>4&&!t}function W(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function gt(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function _t(e){let t=[],n=new Set,r=e.getPool(),i=ht(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},l=e=>{let r;r=mt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(U(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=ht(e.getWorkerCount?.()??0))),r?.renderBatch){let t=[];for(let n of e.routes){let r=e.getPlan(n);await e.isCached(r)?(await e.onCacheHit(r),o++):(await e.prepareRoute?.(r),t.push({path:n,plan:r}))}let c=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let o=0;o<t.length;o+=c){let u=t.slice(o,o+c);if(!r){for(let{path:n,plan:r}of t.slice(o))e.scheduleMainThread(n,r),a++;break}s=!0;let d=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of u){let i=await e.onWorkerFailure(n,r,t,d);if(!gt(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};l((async()=>{let t;try{t=await d.renderBatch(u.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==u.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<u.length;n++){let{path:r,plan:i}=u[n],o=t[n],s;if(s=W(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):gt(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!gt(s,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,s,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else for(let t of e.routes){let c=e.getPlan(t);if(await e.isCached(c)){await e.onCacheHit(c),o++;continue}if(await e.prepareRoute?.(c),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=ht(e.getWorkerCount?.()??0))),r){s=!0;let o=r,u=performance.now();l(o.render(t).catch(async n=>{let i=await e.onWorkerFailure(t,c,n,o);return r=e.getPool(),i}).then(async n=>{if(!gt(n,t))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(t,c,n,performance.now()-u),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(t,c),a++}return await c(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const vt=Number.parseInt(c.version)>=5?[`.vite`]:[];function yt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function bt(e,n){return`static-loader-data${t.a(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function xt(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function St(e){let t=new Set;for(let n of Object.values(e)){xt(n.file)&&t.add(n.file);for(let e of n.css||[])xt(e)&&t.add(e);for(let e of n.imports||[])xt(e)&&t.add(e);for(let e of n.dynamicImports||[])xt(e)&&t.add(e)}return[...t]}async function Ct(e,t,n){return Le(e,St(t),n?(0,o.join)(n,`chunk-hashes.json`):void 0)}function wt(e,n=`/`){let r=t.a(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function Tt(e,t,n){let r=t?.[n];if(r)return(0,o.isAbsolute)(r)?r:(0,o.join)(e,r)}function Et(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,(0,o.isAbsolute)(n)?(0,o.relative)(e,n):n]))}function Dt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function G(e={},u={}){let d=process.env.MODE||process.env.NODE_ENV||e.mode||`production`;d!==process.env.NODE_ENV&&(process.env.NODE_ENV=d);let f=process.cwd(),p=u.root||f,m=u.build?.outDir||`dist`,h=u.base||`/`,_=performance.now(),v=0,ie=0,b=0,{onFinished:S,onStep:C,routeToSourceFileMap:w={},cacheDir:le=`.boltdocs/build`,htmlEntry:E=`index.html`,entry:D=await ce(p,E)}=e,O=`docs`,pe=Object.values(w);if(pe.length>0){let e=pe[0],t=(0,o.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(O=t[0])}let k=(0,o.isAbsolute)(m)?m:(0,o.join)(p,m),j=(0,o.isAbsolute)(le)?le:(0,o.join)(p,le),N=Ne(p,O,j),P=Ue({root:p,outDir:k,cacheDir:j,base:h,mode:d,entry:D,htmlEntry:E,docsDirName:O,clientHash:N,routeToSourceFileMap:w}),F=P.clientHash.substring(0,12),I=(0,o.join)(P.cacheDir,`ssr`,F),L=(0,o.join)(P.cacheDir,`client-cache`,P.clientHash),we=L,De=N,Oe=N,ke=(0,o.join)(L,`client-hash.txt`),R=!1;try{s.default.existsSync(ke)&&s.default.existsSync((0,o.join)(L,`dist`))&&(R=(await s.default.readFile(ke,`utf-8`)).trim()===N)}catch{}let z=(0,o.join)(j,`ssg-pages`),B=(0,o.join)(j,`ssg-cache.json`),Ae=(0,o.join)(j,`ssg-output.json`),je=await _e(Ae),Me=je!==void 0&&je.auxiliaryFiles.length===0;R&&(ge(je,be((0,o.join)(L,`dist`)),E)||(R=!1));let V=[],Pe=!1,Fe=(e.dirStyle||u.ssgOptions?.dirStyle)??`flat`;if(R&&Me&&Fe!==`nested`){let e=(0,o.join)(j,`routes-cache.json`);try{if(s.default.existsSync(e)&&s.default.existsSync(B)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`)),n=xe(JSON.parse(s.default.readFileSync(B,`utf-8`)),t.paths);if(t.dirStyle===Fe&&t.base===h){let e=t.paths.every(e=>{let r=M(e),i=n[r];return ze({routePath:e,cacheItem:i,sourceContentHash:Re(w[r]||w[e]||Tt(p,t.sourceFiles,r)||Tt(p,t.sourceFiles,e),Oe),ssgPagesDir:z,requireAssetHash:!0})});t.paths.length>0&&e&&(V=t.paths,Pe=!0)}}}catch{}}if(Pe){let e=performance.now(),t={};try{s.default.existsSync(B)&&(t=xe(JSON.parse(s.default.readFileSync(B,`utf-8`)),V))}catch{}let n=[...ye(V,t,Fe===`nested`?`nested`:`flat`),`static-loader-data-manifest-${F}.json`],r=be((0,o.join)(L,`dist`)).filter(e=>e!==E),i=await _e(Ae),a=i?.auxiliaryFiles.length===0&&he(i,N,k,r,n,[]),c={};if(!a){s.default.existsSync(k)&&await s.default.remove(k);let e=(0,o.join)(L,`dist`);await tt(u.publicDir,e),await s.default.copy(e,k);let n=[];for(let e of V){let r=l.default.createHash(`md5`).update(e).digest(`hex`),i=(0,o.join)(z,`${r}.html`),a=(0,o.join)(z,`${r}.json`),u=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:(0,o.join)(k,u)}),s.default.existsSync(a)){let r=M(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:(0,o.join)(k,i.loaderDataFilePath)}),c[wt(e,h)]=i.loaderDataFilePath)}}await A(n),await Se((0,o.join)(k,`static-loader-data-manifest-${F}.json`),yt(c))}await Ot(z,t,V);let d=Math.round(performance.now()-_);C?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),C?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),C?.({name:`Render pages`,duration:0,success:!0,details:`${V.length} pages (all cached)`}),C?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(d/1e3).toFixed(1)}s, all cached`});let f=Math.round(performance.now()-e),p={renderedPageCount:0,cachedPageCount:V.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:f,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:f};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${V.length} pages / 0 new / ${V.length} cached`,metrics:{renderedCount:0,cachedCount:V.length,renderedSize:0,totalPages:V.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:p}})}`),await S?.(m),await kt(k),await ve((0,o.join)(j,`ssg-output.json`),N,k,n,r);return}let Ie=await(0,c.resolveConfig)(u,`build`,d,d),Le=Object.assign({},Ie.ssgOptions||{},e),{script:Ve=`sync`,mock:He=!1,formatting:Ke=`none`,includedRoutes:qe=Dt,onBeforePageRender:Je,onPageRendered:Ye,dirStyle:Xe=`flat`,includeAllRoutes:Ze=!1,format:Qe=`esm`,concurrency:$e=20,rootContainerId:et=`root`,beastiesOptions:nt={}}=Le,rt=nt,H=Le.turbo??!1,ut=(0,o.join)(j,`ssr`),dt=(0,o.join)(j,`ssr-cache-index.json`);if(I=(0,o.join)(ut,H?`turbo-ssr`:F),!H&&R)try{let e=(await s.default.readJson(dt))[N];if(typeof e==`string`){let t=ot(ut,e);t&&(I=t)}}catch{}let mt=lt((0,c.createLogger)(),st),ht=()=>{};if(He){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));ht=e()}let U={};try{if(s.default.existsSync(B)){let e=await s.default.readJson(B);U=xe(e,Object.keys(e))}}catch{}let W=!1;if(R)try{let e=(0,o.join)(j,`routes-cache.json`);if(s.default.existsSync(e)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=M(e),r=U[n];return ze({routePath:e,cacheItem:r,sourceContentHash:Re(w[n]||w[e]||Tt(p,t.sourceFiles,n)||Tt(p,t.sourceFiles,e),Oe),ssgPagesDir:z,requireAssetHash:!0})})&&(V=t.paths,W=!0)}}catch{}let gt=W?``:await fe(Ie,D),xt=(H||R)&&s.default.existsSync(I)&&s.default.readdirSync(I).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,St=performance.now(),[G,Mt]=await Promise.all([it({viteConfig:u,resolvedMode:Ie.mode,root:p,htmlEntry:E,outDir:k,clientCacheDir:L,finalCacheDir:j,docsDirName:O,initialClientHash:N,canBypassClientBuild:R,customLogger:mt,onStep:C,shouldSuppressLog:st},()=>Ne(p,O,j)),at({viteConfig:u,resolvedMode:Ie.mode,entry:D,ssrEntry:gt,ssgOut:I,format:Qe,canSkipSsrImport:W,serverBuildSkipped:xt,customLogger:mt,onStep:C,shouldSuppressLog:st})]);if(m=G.outDir,we=G.resolvedClientCacheDir,De=G.resolvedClientHash,Oe=G.pageContentFallbackHash,F=De.substring(0,12),v=G.durationMs,ie=Mt.durationMs,!H)try{let e={};try{e=await s.default.readJson(dt)}catch{}e[De]=(0,o.relative)(ut,I),await Ce(dt,e)}catch{}let Nt=Qe===`esm`&&process.platform===`win32`?`file://`:``,Pt=Qe===`esm`?`.mjs`:`.cjs`;gt.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Ft=`combined`+Pt;try{if(s.default.existsSync(I)){let e=s.default.readdirSync(I).filter(e=>e.endsWith(Pt));e.length>0&&(Ft=e[0])}}catch{}let It=Nt+(0,o.join)(I,Ft).replace(/\\/g,`/`),Lt=Ft.replace(/\.[^/.]+$/,``),Rt=JSON.parse(await s.default.readFile((0,o.join)(I,...vt,`manifest.json`),`utf-8`)),zt=null,Bt=null,K=[],Vt,Ht=`/`,Ut,Wt=null,Gt,Kt=qe;if(!W){let e=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),n=performance.now(),r=Qe===`esm`?await import(It):e(It);b=performance.now()-n,Vt=r.matchRouteBranchWithParams;let{createRoot:a,includedRoutes:o}=r;Kt=o||qe,zt=await a(!1);let s=zt;if(K=s.routes,Ht=s.base,Ut=s.triggerOnSSRAppRendered,Wt=s.app,Gt=s.routerType,K&&K.length>0)for(let e of K)e.path&&(e.filePath||e.entry)&&!w[e.path]&&(w[e.path]=e.filePath||e.entry);P=Ge(P,We(p,K,w)),Bt=t.t(s,r)}let qt=``,Jt=0,q=null,Yt=null,Xt=null,Zt=!1;async function Qt(){if(Xt){await Xt;return}let e=Yt;e&&(Xt=e.destroy(),await Xt)}if(!W){let e=performance.now(),{paths:t}=await de(K);V=Ze?t:await Kt(t,K||[]),V=Dt(V,K||[]),V=Array.from(new Set(V)),Jt+=performance.now()-e;try{await Ce((0,o.join)(j,`routes-cache.json`),{paths:V,dirStyle:Xe,base:h,sourceFiles:Et(p,w)},0)}catch{}qt=(0,o.join)(I,Lt+Pt)}async function $t(){if(q||Zt||V.length<=4)return;Zt=!0;let e=performance.now();try{qt=(0,o.join)(I,Lt+Pt);let{SsgWorkerPool:t}=await Promise.resolve().then(()=>require(`./ssg-worker-pool-CZPcmzdb.cjs`));q=new t({ssrEntryPath:qt,format:Qe===`esm`?`esm`:`cjs`}),Yt=q,await q.ready(),In=performance.now()-e}catch{In=performance.now()-e,q=null}}let en=Le.criticalCss??`zig-critters`,J,tn;en===`zig-critters`?(J=await te({concurrency:Math.max(1,Math.min($e,a.default.cpus().length,8))}),J||(0,r.warn)("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):en===`beasties`&&rt!==!1&&(tn=await ee(m,{publicPath:h,...rt}));let Y=``,nn=``;if(J){let e=(0,o.join)(k,`assets`);if(s.default.existsSync(e)){let t=s.default.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)Y+=s.default.readFileSync((0,o.join)(e,n),`utf-8`)+`
|
|
3
|
+
`}Y&&(nn=l.default.createHash(`sha256`).update(Y).digest())}let rn={},an={},on={},sn=null;if(W)for(let e of V){let t=M(e);on[e]=U[t]?.assetHash||N}else{let[e,t]=await Promise.all([s.default.readFile((0,o.join)(k,...vt,`ssr-manifest.json`),`utf-8`),s.default.readFile((0,o.join)(k,...vt,`manifest.json`),`utf-8`)]);rn=JSON.parse(e),an=JSON.parse(t),sn=x(an);let n=await Ct(k,an,j);await Promise.all(Object.entries(w).map(async([e,t])=>{on[e]=await ae({outDir:k,indexes:sn,ssrManifest:rn,routeSourceFile:t,root:p,clientHash:N,assetHashes:n})}));for(let e of V)on[e]||(on[e]=Oe)}let X=await s.default.readFile((0,o.join)(k,E),`utf-8`);s.default.rmSync((0,o.join)(k,E)),X=At(X,Ve);let cn=Je?null:T({rootContainerId:et,indexHTML:X}),ln=(await import(`p-queue`)).default||await import(`p-queue`),un=new ln({concurrency:$e}),dn=new ln({concurrency:Math.min(a.default.cpus().length,4)}),fn=new ln({concurrency:Math.max(2,Math.min(a.default.cpus().length,6))}),pn={},mn=0,hn=new Map,gn=new Set;for(let e of V){let n=w[t.a(e).replace(/\/$/,``)]||w[e];n&&gn.add(n)}for(let e of gn)try{if(s.default.existsSync(e)){let t=s.default.statSync(e);hn.set(e,{hash:`${t.mtimeMs}:${t.size}`,mtimeMs:t.mtimeMs})}}catch{}let _n=null;!W&&Vt&&(_n=g({routes:[...K],base:Ht,matchRouteBranchWithParams:Vt,serverManifest:Rt,manifest:an,ssrManifest:rn}));let vn=ft({routes:V,outDir:k,ssgPagesDir:z,dirStyle:Xe,contextBase:Ht,fallbackHash:Oe,routeToSourceFileMap:w,sourceMeta:hn,routeToAssetHash:on}),yn=new y,bn=[],xn=[],Sn=[],Cn=[],wn=0,Tn=0,En=0,Dn=0,On=0,kn=0,An=0,jn=0,Mn=0,Nn=0,Pn=0,Z={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function Fn(e){e&&(Z.count++,Z.matchMs+=e.matchMs,Z.resolveMs+=e.resolveMs,Z.loadersMs+=e.loadersMs,Z.renderMs+=e.renderMs,Z.helmetMs+=e.helmetMs,Z.totalMs+=e.totalMs)}let In=0,Ln=!1;function Q(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let Rn=0,zn=0,Bn=0,Vn=new Set,Hn=new Set,Un=[],Wn=me({writeFile:async(e,t)=>{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf-8`)}}),Gn=JSON.stringify(U),$=xe(U,V),Kn=new Map,qn=new Set;qn.add(z);for(let e of V){let t=Xe===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;qn.add((0,o.join)(k,(0,o.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;qn.add((0,o.join)(k,`static-loader-data`,(0,o.dirname)(n)))}qn.add((0,o.join)(k,`static-loader-data`)),await Promise.all([...qn].map(e=>s.default.ensureDir(e)));async function Jn(e,t,i,a,c,l,u,d,f,p,m,g,ee,_,te){let v=performance.now(),{path:y,cachedHtmlFile:ie,cachedLoaderFile:b,normalizedKey:x,sourceContentHash:S,sourceMtimeMs:C,fetchUrl:ae}=e,w;if(!ee&&_===`remix`){if(!_n)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();w=new Set(await(Kn.get(y)||_n(ae))),wn+=performance.now()-e}else w=new Set;let T;if(d&&Object.keys(d).length>0){let e=bt(y,F);T=e,H&&await s.default.writeFile((0,o.join)(k,e),JSON.stringify(d)),pn[wt(y,h)]=e,mn++}await g?.(y,t,f);let ce=performance.now(),le=cn&&te===X?cn({appHTML:t,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null}):await se({rootContainerId:et,appHTML:t,indexHTML:te,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null});En+=performance.now()-ce;let E=ee?``:ue(w),D=u?le.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):le;E&&(D=D.replace(`<head>`,`<head>${E}`));let de=performance.now(),fe=await Ye?.(y,D,f)||D;Dn+=performance.now()-de;let O=``;if(d&&Object.keys(d).length>0){let e=JSON.stringify(d).replace(/</g,`\\u003c`);O=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${wt(y,h)}': ${e} };`}let pe=n.t(u),A=fe,me=`<script>window.__VITE_REACT_SSG_HASH__ = '${F}';${O}${pe}<\/script>`,j=performance.now();if(A=A.replace(`<script>${oe}<\/script>`,``),J){if(Y){let e=ne(A,nn,Y,`zig-critters`);try{let t=await yn.getOrCreate(e,async()=>{let{criticalCss:e,stats:t}=await J.extractCriticalCss(A,Y);return e?`<style data-zig-critters>${e}</style>`:(t.truncated&&(0,r.warn)(`[zig-critters] Critical CSS for "${y}" exceeded maxSize (${t.originalSize} bytes) and was skipped.`),null)});t&&!A.includes(`data-zig-critters`)&&(A=A.replace(`</head>`,`${t}</head>`))}catch(e){(0,r.warn)(`[zig-critters] Failed to inline CSS for "${y}": ${e instanceof Error?e.message:String(e)}`)}}A=A.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(tn){let e=ne(A,nn,Y,`beasties`),t=await yn.getOrCreate(e,async()=>{let e=await dn.add(()=>tn.process(A));return re(A,e)});t&&!A.includes(t)&&(A=A.replace(`</head>`,`${t}</head>`)),A=A.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let he=me+(l||``);he&&(A=A.replace(`<head>`,`<head>${he}`));let ge=Ke===`none`?A:await jt(A,Ke);Sn.push(Math.round(performance.now()-j));let _e=performance.now();H?d&&Object.keys(d).length>0&&T&&await Wn.enqueue((0,o.join)(k,T),JSON.stringify(d)):(await Wn.enqueue(ie,ge),d&&Object.keys(d).length>0&&T?(await Wn.enqueue(b,JSON.stringify(d)),$[x]={contentHash:S,mtime:C?Math.round(C):0,loaderDataFilePath:T,assetHash:e.routeAssetHash}):$[x]={contentHash:S,mtime:C?Math.round(C):0,assetHash:e.routeAssetHash});let ve=performance.now()-_e;Cn.push(Math.round(ve)),xn.push(Math.round(performance.now()-v)),Rn++,jn++,Bn+=ge.length}let Yn=performance.now(),Xn=[];await _t({routes:V,canBypassClientBuild:R,getPlan:e=>pt(vn,e),isCached:e=>{if(H||!R)return!1;try{return ze({routePath:e.path,cacheItem:U[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:z})}catch{return!1}},onCacheHit:async e=>{let t=U[e.normalizedKey]?.loaderDataFilePath,n=t?(0,o.join)(k,t):void 0,r=!Vn.has(e.finalOutFile),i=!!n&&!Hn.has(n);r&&Vn.add(e.finalOutFile),i&&n&&Hn.add(n);let a=performance.now();try{r&&Un.push({source:e.cachedHtmlFile,destination:e.finalOutFile}),n&&t&&s.default.existsSync(e.cachedLoaderFile)&&(i&&Un.push({source:e.cachedLoaderFile,destination:n}),pn[wt(e.path,h)]=t,mn++),zn++,Mn++,On+=performance.now()-a}catch(t){throw r&&Vn.delete(e.finalOutFile),i&&n&&Hn.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!Wt&&Gt===`remix`&&_n&&Kn.set(e.path,_n(e.fetchUrl))},ensurePool:$t,getPool:()=>q,getWorkerCount:()=>Be(q)?.totalWorkers??0,onWorkerFailure:async(e,t,i,a)=>{if(!Bt)throw Error(`Error on page: ${e}\n${String(i)}`);(0,r.warn)(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),Ln=!0;try{await Qt()}catch{}q=null,Zt=!0;let o=await Bt.render(e);return{path:e,appHTML:o.appHTML,metaAttributes:o.metaAttributes,bodyAttributes:o.bodyAttributes,htmlAttributes:o.htmlAttributes,styleTag:o.styleTag,timings:o.timings,routerContext:n.n(o.routerContext)}},onWorkerResult:async(e,t,n,r)=>{kn+=Math.max(0,r-(n.timings?.totalMs??0)),An++,n.timings&&(bn.push(Math.round(n.timings.totalMs)),Fn(n.timings));let i={...zt,routePath:e},a=performance.now(),o=await Je?.(e,X,i)||X;Tn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await fn.add(()=>Jn(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,Ht,K,Ut,Wt,Gt??`remix`,o))},scheduleMainThread:(e,t)=>{Xn.push(un.add(async()=>{try{let r={...zt,routePath:e},i=performance.now(),a=await Je?.(e,X,r)||X;Tn+=performance.now()-i;let o=performance.now(),{appHTML:s,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Bt.render(e);bn.push(Math.round(performance.now()-o)),Fn(p);let m=f?.loaderData;await Jn(t,s,u,c,l,d,n.n(f),m||null,r,Ht,K,Ut,Wt,Gt??`remix`,a)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>fn.onIdle(),drainMainThread:async()=>{await Promise.all(Xn),await un.onIdle()},drainWrites:()=>Wn.flush(),cleanupAfterFailure:async()=>{try{s.default.existsSync(k)&&await s.default.remove(k)}catch{}},destroyPool:Qt,onNoRenderer:e=>{(0,r.warn)(`[ssg] No SSR context available for ${e}, skipping`)}}),Pn+=performance.now()-Yn;let Zn=performance.now();for(let e of V){if(H)continue;let t=vn.get(e);if(!t||!s.default.existsSync(t.cachedHtmlFile))continue;Vn.has(t.finalOutFile)||Un.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=$[t.normalizedKey];if(!n?.loaderDataFilePath||!s.default.existsSync(t.cachedLoaderFile))continue;let r=(0,o.join)(k,n.loaderDataFilePath);Hn.has(r)||Un.push({source:t.cachedLoaderFile,destination:r})}await A(Un);let Qn=Math.round(performance.now()-Zn);Nn+=Qn;let $n=Rn+zn,er=(Bn/1024/1024).toFixed(2),tr=0;if(!H)try{let e=JSON.stringify($)!==Gn;e&&await Ce(B,$),tr=await Ot(z,$,V,e)}catch{}let nr=performance.now()-St,rr=Be(Yt),ir={renderedCount:Rn,cachedCount:zn,renderedSize:Bn,totalPages:$n,prunedCount:tr,clientBuildMs:Math.round(v),serverBuildMs:Math.round(ie),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(In),workerUsed:rr!==null&&!Ln,workerCount:rr?.totalWorkers??0,fallbackMainThread:Ln,ssrP50Ms:Q(bn,50),ssrP95Ms:Q(bn,95),ssrP99Ms:Q(bn,99),crittersP50Ms:Q(Sn,50),crittersP95Ms:Q(Sn,95),writeP50Ms:Q(Cn,50),writeP95Ms:Q(Cn,95),routerTimingCount:Z.count,routerMatchAvgMs:Z.count>0?Z.matchMs/Z.count:0,routerResolveAvgMs:Z.count>0?Z.resolveMs/Z.count:0,routerLoadersAvgMs:Z.count>0?Z.loadersMs/Z.count:0,routerRenderAvgMs:Z.count>0?Z.renderMs/Z.count:0,routerHelmetAvgMs:Z.count>0?Z.helmetMs/Z.count:0,routerTotalAvgMs:Z.count>0?Z.totalMs/Z.count:0,pagesPerSecond:$n>0&&nr>0?Math.round($n/(nr/1e3)*10)/10:0,pipeline:{renderedPageCount:jn,cachedPageCount:Mn,clientBuildMs:Math.round(v),serverBuildMs:Math.round(ie),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(In),routePreparationMs:Math.round(Jt),workerTransportMs:Math.round(kn),workerRoundTripMs:Math.round(kn),workerTransportAvgMs:An>0?Math.round(kn/An):0,finalizeP50Ms:Q(xn,50),finalizeP95Ms:Q(xn,95),assetCollectionMs:Math.round(wn),beforeHookMs:Math.round(Tn),htmlAssemblyMs:Math.round(En),onPageRenderedHookMs:Math.round(Dn),criticalCssP50Ms:Q(Sn,50),criticalCssP95Ms:Q(Sn,95),cacheWriteMs:Math.round(0+Wn.writeTimeMs()),cachedOutputMs:Math.round(On),renderQueueDrainMs:Math.round(Pn),renderPipelineSettleMs:Math.round(Pn),outputLinkMs:Math.round(Nn)}};C?.({name:`Render pages`,duration:nr,success:!0,details:`${$n} pages (${Rn} new, ${zn} cached, ${er} MB)`,metrics:ir}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(nr),success:!0,details:`${$n} pages / ${Rn} new / ${zn} cached / ${er} MB`,metrics:ir})}`);let ar=performance.now(),or=yt(pn);if(await Se((0,o.join)(k,`static-loader-data-manifest-${F}.json`),or),await ct((0,o.join)(j,`ssr`),5,H?`turbo-ssr`:(0,o.basename)(I)),ht(),J?.dispose)try{await J.dispose()}catch{}let sr=Ie.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;sr&&!sr.disabled&&sr.generateSW&&await sr.generateSW();let cr=Math.round(performance.now()-_);C?.({name:`Static loader data`,duration:performance.now()-ar,success:!0,details:`${mn} loader data files`,metrics:{loaderDataFileCount:mn}}),await S?.(m),await kt(k);let lr=be(k),ur=await Te(k,cr,j,{outputFiles:lr,manifestPath:(0,o.join)(we,`dist`,...vt,`manifest.json`)});Ee(k,ur),C?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(cr/1e3).toFixed(1)}s, JS: ${(ur.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(ur.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:cr,totalPages:ur.pages.length,jsSize:ur.totalJSBundleSize,cssSize:ur.totalCSSBundleSize}}),await ve((0,o.join)(j,`ssg-output.json`),De,k,ye(V,$,Xe).concat(`static-loader-data-manifest-${F}.json`),G.clientFiles,lr)}async function Ot(e,t,n=[],r=!1){try{if(!s.default.existsSync(e))return 0;let i=(0,o.join)(e,`.prune-state`);if(!r)try{let e=await s.default.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await s.default.readdir(e),c=new Set,u=new Set([...Object.keys(t),...n]);for(let e of u){let t=l.default.createHash(`md5`).update(e).digest(`hex`);c.add(`${t}.html`),c.add(`${t}.json`)}let d=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!c.has(t)&&(await s.default.remove((0,o.join)(e,t)),d++);return await s.default.writeFile(i,String(Date.now()),`utf8`),d}catch{return 0}}async function kt(e){try{vt.length>0?await s.default.remove((0,o.join)(e,...vt)):await Promise.all([s.default.remove((0,o.join)(e,`manifest.json`)),s.default.remove((0,o.join)(e,`ssr-manifest.json`))])}catch{}}function At(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function jt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return(0,r.error)(`Error formatting html: ${t?.message}`),e}return e}function Mt(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function Nt({template:e,ssrEntry:n,onBeforePageRender:i,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d)=>{try{let r=u.originalUrl??u.url??`/`,f=await l.ssrLoadModule(n),p=f.createRoot,m=await p(!1,r),h=t.t(m,f),{app:g,base:ee}=m,[_=`/`,te=``]=r.split(`?`),ne=new URLSearchParams(te);if(!g&&ne.has(`_data`))return h.handleLoader(u,d);let v=await l.transformIndexHtml(r,e),re=await i?.(r,v,m)||v,{appHTML:y,bodyAttributes:ie,htmlAttributes:b,metaAttributes:x,styleTag:S}=await h.render(t.i(_,ee));x.push(S);let C=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),ae=new Set,oe=new Set,w=async e=>{if(!e?.ssrTransformResult||oe.has(e))return;oe.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))ae.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await w(t)}};await Promise.all(C.map(async e=>w(e)));let T=[...ae].map(e=>le(t.n(l.config.base,e)));x.push(...T);let ce=await se({rootContainerId:o,appHTML:y,indexHTML:re,metaAttributes:x,bodyAttributes:ie,htmlAttributes:b,initialState:null}),ue=await s?.(r,ce,m)||ce;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.send)(u,d,ue,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));l.ssrFixStacktrace(t),(0,r.error)(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return l.middlewares.use(Mt),()=>{l.middlewares.use(u)}}}}async function Pt(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),s,l,d,f;if(r){s=e.root||a,l={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=l,n=l.entry||await ce(s,t);d=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:(0,o.join)(s,n),f=await u.default.readFile((0,o.join)(s,t),`utf-8`)}else{let t=await(0,c.resolveConfig)(e,`serve`,n,n);s=t.root||a,l={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=l,p=l.entry||await ce(s,r),[m,h]=await Promise.all([fe(t,p),u.default.readFile((0,o.join)(s,r),`utf-8`)]);d=m,f=h}let{onBeforePageRender:p,onPageRendered:m,rootContainerId:h=`root`,mock:g=!1}=l;if(process.env.__DEV_MODE_SSR=`true`,g){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));e()}return await(0,c.createServer)({...e,plugins:[...e.plugins??[],Nt({template:f,ssrEntry:d,onBeforePageRender:p,onPageRendered:m,entry:l.entry||`src/main.ts`,rootContainerId:h})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function Ft(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await Pt(t,e);return await r.listen(),It(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function It(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,i=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);i+=` ready in ${r.colors.bold(`${e}ms`)}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${D} `)}`,{clear:!e.config.logger.hasWarned}),n(`${r.colors.cyan(`\n VITE v${c.version}`)+r.colors.dim(i)}\n`),n(r.colors.green(` dev server running at:`)),e.printUrls()}var Lt=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};exports.ShellStitcher=Lt,exports.build=G,exports.createServer=Pt,exports.dev=Ft;
|