@bdocs/ssg 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/vite-react-ssg.js +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-ClSMhb8G.d.cts} +48 -8
- package/dist/{types-DefKqSqW.d.mts → types-Y1Rvl_Nv.d.mts} +48 -8
- 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-Y1Rvl_Nv.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 te(){try{let e=await import(`@bdocs/zig-critters`),t=e.processHtml||e.default?.processHtml;return t?{processHtml:t}:void 0}catch{return}}function ne(e,t,n){let r=e.replace(/<!--[\s\S]*?-->/g,``).replace(/>([^<]+)</g,`><`).replace(/\s+/g,` `).trim();return l.default.createHash(`sha256`).update(n).update(`\0`).update(r).update(`\0`).update(t).digest(`hex`)}function _(e){return e.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)??[]}function re(e,t){let n=new Set(_(e)),r=_(t).filter(e=>!n.has(e));return r.length>0?r.join(`
|
|
2
|
+
`):null}var ie=class{constructor(e=512){this.maxEntries=e,this.entries=new Map}getOrCreate(e,t){let n=this.entries.get(e);if(n)return n.promise;let r={promise:Promise.resolve(null),settled:!1},i=Promise.resolve().then(t).catch(t=>{throw this.entries.delete(e),t}).finally(()=>{r.settled=!0,this.evictSettledEntries()});return r.promise=i,this.entries.set(e,r),this.evictSettledEntries(),i}get size(){return this.entries.size}evictSettledEntries(){for(;this.entries.size>this.maxEntries;){let e=!1;for(let[t,n]of this.entries)if(n.settled){this.entries.delete(t),e=!0;break}if(!e)return}}};const v=new Set([`.js`,`.mjs`,`.css`]);function y(e){let t=o.default.extname(e).toLowerCase();return v.has(t)}function ae(e){let t=new Map,n=new Map;for(let r of Object.values(e))t.set(r.file,r),r.src&&n.set(r.src,r);return{byFile:t,bySrc:n}}function b(e,t,n){if(n.has(t))return;let r=e.get(t);if(r){n.add(t);for(let t of r.imports||[])y(t)&&b(e,t,n);for(let e of r.css||[])n.add(e);for(let t of r.dynamicImports||[])y(t)&&!n.has(t)&&b(e,t,n)}}async function x(e,t,n){if(n){let e=l.default.createHash(`md5`);for(let r of t){let t=n.get(r);t&&e.update(t)}return e.digest(`hex`)}let r=new Map;await Promise.all(t.map(async t=>{try{let n=await(0,u.readFile)(o.default.join(e,t));r.set(t,n)}catch{}}));let i=l.default.createHash(`md5`);for(let e of Array.from(r.keys()).sort()){let t=r.get(e);t&&i.update(t)}return i.digest(`hex`)}async function oe(e){let{outDir:t,indexes:n,manifest:r,ssrManifest:i,routeSourceFile:a,root:s,clientHash:c,assetHashes:l}=e,u=n;if(!u){if(!r)throw Error(`computeRouteClientAssetHash requires either indexes or manifest`);u=ae(r)}let{byFile:d,bySrc:f}=u,p=o.default.relative(s,a).replace(/\\/g,`/`),m=new Set,h=f.get(p);if(h)b(d,h.file,m);else{let e=[p,a.replace(/\\/g,`/`)];for(let t of e){let e=i[t];if(Array.isArray(e))for(let t of e)y(t)&&b(d,t,m)}}if(m.size===0){if(!c)throw Error(`No client chunk found for ${a} and no global client hash was provided`);return c}return x(t,Array.from(m).sort(),l)}const se=`/* SCRIPT_COMMENT_PLACEHOLDER */`;function S(e,t,n){let r=n.trim();if(!r)return e;let i=RegExp(`<${t}\\b([^>]*)>`,`i`).exec(e);if(!i)return e;let a=[...r.matchAll(/(?:^|\s)([A-Za-z_:][\w:.-]*)\s*=/g)].map(e=>e[1]),o=i[1];for(let e of a){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`\\s+${t}\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]*)`,`gi`),``)}let s=o.trim()?`${o.trim()} ${r}`:r;return e.replace(i[0],`<${t} ${s}>`)}function C({rootContainerId:e,indexHTML:t}){let n=[{token:`<html`,kind:`html`},{token:`<head>`,kind:`head`},{token:`<body`,kind:`body`},{token:`<div id="${e}"></div>`,kind:`container`}].map(({token:e,kind:n})=>({kind:n,token:e,index:t.indexOf(e),lastIndex:t.lastIndexOf(e)})).sort((e,t)=>e.index-t.index);if(n.some(e=>e.index<0||e.index!==e.lastIndex))return null;let r=[],i=0;for(let e of n)r.push({text:t.slice(i,e.index)}),r.push({kind:e.kind,text:``}),i=e.index+e.token.length;return r.push({text:t.slice(i)}),({appHTML:t,metaAttributes:n,bodyAttributes:i,htmlAttributes:a,initialState:o})=>{let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${se}<\/script>`,l=n.join(``),u=`<div id="${e}" data-server-rendered="true">${t}</div>${s}${c}`;return S(S(r.map(e=>{if(!e.kind)return e.text;switch(e.kind){case`html`:return`<html`;case`head`:return`<head>${l}`;case`body`:return`<body`;case`container`:return u;default:return e.text}}).join(``),`html`,a),`body`,i)}}async function ce({rootContainerId:e,indexHTML:t,appHTML:n,metaAttributes:r,bodyAttributes:i,htmlAttributes:a,initialState:o}){let s=o?`\n<script>window.__INITIAL_STATE__=${o}<\/script>`:``,c=`\n<script>${se}<\/script>`,l=r.join(``),u=`<div id="${e}"></div>`;if(t.includes(u))return S(S(t.replace(`<head>`,`<head>${l}`).replace(u,`<div id="${e}" data-server-rendered="true">${n}</div>${s}${c}`),`html`,a),`body`,i);let d=await import(`html5parser`),f=d.parse(t),p;if(d.walk(f,{enter:r=>{if(!p&&r?.type===d.SyntaxKind.Tag&&Array.isArray(r.attributes)&&r.attributes.length>0&&r.attributes.some(t=>t.name.value===`id`&&t.value?.value===e)){let e=[...r.attributes.map(({name:{value:e},value:t})=>`${e}="${t.value}"`)].join(` `),i=t.slice(0,r.start),a=t.slice(r.end);p=`${i}<${r.name} ${e} data-server-rendered="true">${n}</${r.name}>${s}${c}${a}`}}}),!p)throw Error(`Could not find a tag with id="${e}" to replace it with server-side rendered HTML`);return S(S(p,`html`,a),`body`,i)}async function w(e,t=`index.html`){let[,n]=[...(await s.default.readFile((0,o.join)(e,t),`utf-8`)).matchAll(/<script(?:.*?)src=["'](.+?)["'](?!<)(?:.*)>(?:[\n\r\s]*?)(?:<\/script>)/gim)].find(e=>{let[t]=e,[,n]=t.match(/.*\stype=(?:'|")?([^>'"\s]+)/i)||[];return n===`module`})||[];return n||`src/main.ts`}function T(e){return`<link rel="stylesheet" href="${e}">`}function le(e){let t=new Set,n=[];return e&&e.forEach(e=>{if(!t.has(e)){t.add(e);let r=E(e);r&&n.push(r)}}),n.join(``)}function E(e){return e.endsWith(`.js`)?`<link rel="modulepreload" crossorigin href="${e}">`:e.endsWith(`.css`)?`<link rel="stylesheet" crossorigin href="${e}">`:e.endsWith(`.woff`)||e.endsWith(`.woff2`)||e.endsWith(`.ttf`)?`<link rel="preload" as="font" type="font/woff2" crossorigin href="${e}">`:e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`)||e.endsWith(`.gif`)||e.endsWith(`.ico`)||e.endsWith(`.svg`)?`<link rel="preload" as="image" crossorigin href="${e}">`:null}var D=`0.4.0`;async function ue(e){if(!e||e.length===0)return{paths:[`/`]};let t=new Set,n=async(e,i=``)=>{i=i.replace(/\/$/g,``);for(let a of e){if(a.lazy){let e=await a.lazy();e&&(a={...a,...e})}let e=a.path;if(e=r(e,i),a.getStaticPaths&&O(e)){let e=await a.getStaticPaths();for(let t of e)t=r(t,i),Array.isArray(a.children)&&await n(a.children,t)}a.index&&!e&&t.add(i||`/`),Array.isArray(a.children)&&await n(a.children,e)}};return await n(e),{paths:Array.from(t)};function r(e,n){if(e!=null){if(e===`.`){let e=n||`/`;return t.add(e),e}e=n&&!e.startsWith(`/`)?`${n}${e?`/${e}`:``}`:e,t.add(e)}return e}}async function de(e,t){return await e.createResolver()(t,e.root)||(t.startsWith(`virtual:`)||t.includes(`\0`)||t.includes(`boltdocs/entry`)||t.includes(`boltdocs-entry`)?t:(0,o.join)(e.root,t))}const fe=/[:*?]/;function O(e){return e?fe.test(e):!1}async function pe(e,t){if(e!==t){await s.default.ensureDir((0,o.dirname)(t)),await s.default.remove(t);try{await s.default.link(e,t)}catch{await s.default.copy(e,t)}}}async function k(e){let t=new Set,n=[];for(let r of e)t.has(r.destination)||(t.add(r.destination),n.push(pe(r.source,r.destination)));await Promise.all(n)}function me({batchSize:e=64,maxBytes:t=8388608,writeFile:n}){let r=Math.max(1,Math.floor(e)),i=Math.max(1,Math.floor(t)),a=[],o=0,s=Promise.resolve(),c=0,l=()=>{if(a.length===0)return s;let e=a;return a=[],o=0,s=s.then(async()=>{let t=performance.now();await Promise.all(e.map(({filePath:e,content:t})=>n(e,t))),c+=performance.now()-t}),s};return{enqueue(e,t){let u=Buffer.byteLength(t,`utf8`);return u>i?(s=l().then(async()=>{let r=performance.now();await n(e,t),c+=performance.now()-r}),s):(a.push({filePath:e,content:t}),o+=u,a.length>=r||o>=i?l():Promise.resolve())},flush:l,pendingCount(){return a.length},writeTimeMs(){return c}}}function A(e,t,n,r=[]){return{cacheHash:e,clientFiles:[...new Set(t)].sort(),pageFiles:[...new Set(n)].sort(),auxiliaryFiles:[...new Set(r)].sort()}}function he(e,t,n,r,i,a=e?.auxiliaryFiles||[]){if(!e||e.cacheHash!==t)return!1;let o=(e,t)=>e.length===t.length?e.every((e,n)=>e===t[n]):!1,c=[...new Set(r)].sort(),l=[...new Set(i)].sort(),u=[...new Set(a)].sort();if(!o(e.clientFiles,c)||!o(e.pageFiles,l)||!o(e.auxiliaryFiles||[],u))return!1;let d=[...c,...l,...u];return o(be(n),[...new Set(d)].sort())?d.every(e=>s.default.existsSync(`${n}/${e}`)):!1}function ge(e,t,n){if(!e)return!1;let r=e.clientFiles.filter(e=>e!==n).sort(),i=t.filter(e=>e!==n).sort();return r.length===i.length&&r.every((e,t)=>e===i[t])}async function _e(e){try{let t=await s.default.readJson(e);return!t||typeof t.cacheHash!=`string`||!Array.isArray(t.clientFiles)||!Array.isArray(t.pageFiles)||!Array.isArray(t.auxiliaryFiles)||t.clientFiles.some(e=>typeof e!=`string`)||t.pageFiles.some(e=>typeof e!=`string`)||t.auxiliaryFiles.some(e=>typeof e!=`string`)?void 0:A(t.cacheHash,t.clientFiles,t.pageFiles,t.auxiliaryFiles)}catch{return}}async function ve(e,t,n,r,i=[],a){let o=a||be(n),s=new Set(r),c=new Set(i);return Ce(e,A(t,i.length>0?[...c]:o.filter(e=>!s.has(e)),r,i.length>0?o.filter(e=>!s.has(e)&&!c.has(e)):[]))}function ye(e,t,n){let r=[];for(let i of e){let e=i.replace(/^\/+/,``).replace(/\/+$/,``),a=n===`nested`?`${e?`${e}/`:``}index.html`:`${(i.endsWith(`/`)?`${i}index`:i).replace(/^\/+/,``)}.html`;r.push(a);let o=t[j(i)]?.loaderDataFilePath;o&&r.push(o)}return[...new Set(r)]}function be(e){let t=[],n=r=>{let i;try{i=s.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of i){if(a.name===`.vite`)continue;let i=`${r}/${a.name}`;a.isDirectory()?n(i):a.isFile()&&t.push((0,o.relative)(e,i).split(o.sep).join(`/`))}};return n(e),t.sort()}function j(e){return!e||e===`/`?``:t.a(e).replace(/\/+$/,``)}function xe(e,t){let n=new Set(t.map(j)),r={};for(let[t,i]of Object.entries(e)){let e=j(t);n.has(e)&&(r[e]=i)}return r}async function Se(e,t){try{if(await s.default.readFile(e,`utf8`)===t)return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf8`),!0}async function Ce(e,t,n=2){try{let n=await s.default.readJson(e);if(JSON.stringify(n)===JSON.stringify(t))return!1}catch{}return await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(e,t,{spaces:n}),!0}const M=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.svg`,`.webp`,`.avif`,`.ico`]),N=new Set([`.woff`,`.woff2`,`.ttf`,`.otf`,`.eot`]);function P(e){try{return d.default.statSync(e).size}catch{return 0}}const F=`boltdocs-metrics.json`;function I(e){if(!e)return null;try{let t=(0,o.join)(e,F);return d.default.existsSync(t)?JSON.parse(d.default.readFileSync(t,`utf-8`)):null}catch{return null}}function L(e,t){try{let n=o.default.resolve(e,`..`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0}),d.default.writeFileSync((0,o.join)(e,F),JSON.stringify(t))}catch{}}async function we(e,t,n,r={}){if(!r.outputFiles&&!r.manifestPath){let e=I(n);if(e)return e.buildTime=t,e}let i=(0,o.join)(e,`.vite`),a=(0,o.join)(e,`assets`),s={},c=r.manifestPath||(0,o.join)(i,`manifest.json`);d.default.existsSync(c)&&(s=JSON.parse(await d.default.readFileSync(c,`utf-8`)));let l=0,u=0;for(let[,t]of Object.entries(s)){let{file:n,css:r=[]}=t,i=P((0,o.join)(e,n));l+=i;for(let t of r)u+=P((0,o.join)(e,t))}let f=0,p=0;if(d.default.existsSync(a)){let e=d.default.readdirSync(a,{withFileTypes:!0});for(let t of e){if(!t.isFile())continue;let e=o.default.extname(t.name).toLowerCase(),n=(0,o.join)(a,t.name);M.has(e)?f+=P(n):N.has(e)&&p++}}let m=(0,o.join)(e,`index.html`),h=0,g=[];if(d.default.existsSync(m)){let e=P(m);h+=e,g.push({route:`/`,htmlSize:e,htmlFile:`index.html`})}let ee=r.outputFiles?[...r.outputFiles]:(()=>{try{return d.default.readdirSync(e,{recursive:!0})}catch{return[]}})();for(let t of ee){if(!t.endsWith(`.html`)||t===`index.html`)continue;let n=P((0,o.join)(e,t));if(n>0){let e=`/`+t.replace(/\\/g,`/`).replace(/\/index\.html$/,``).replace(/\.html$/,``);h+=n,g.push({route:e,htmlSize:n,htmlFile:t})}}let te={buildTime:t,totalJSBundleSize:l,totalCSSBundleSize:u,totalImagesSize:f,totalHTMLSize:h,fontCount:p,pages:g};return n&&L(n,te),te}function Te(e,t){let n=o.default.resolve(e,`..`,`.boltdocs`,`reports`);d.default.existsSync(n)||d.default.mkdirSync(n,{recursive:!0});let r=(0,o.join)(n,`performance.json`);d.default.writeFileSync(r,JSON.stringify(t,null,2))}function Ee(e,t){try{if(!s.default.existsSync(e))return!1;let n=s.default.readFileSync(e);return t.update(n),!0}catch{return!1}}const De=new Set([`node_modules`,`.git`,`.boltdocs`,`.turbo`,`dist`,`coverage`,`__tests__`,`test`,`tests`,`.next`,`.cache`]),R=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.css`,`.json`,`.md`,`.mdx`,`.html`,`.svg`,`.yaml`,`.yml`,`.webp`,`.png`,`.jpg`,`.jpeg`,`.gif`,`.ico`]);function Oe(e){let t=e.lastIndexOf(`.`);if(t===-1)return!1;let n=e.slice(t).toLowerCase();return R.has(n)}function z(e,t,n){let r;try{r=s.default.readdirSync(e)}catch{return}r.sort();for(let i of r){if(i.startsWith(`.`))continue;let r=(0,o.join)(e,i),a;try{a=s.default.statSync(r)}catch{continue}if(a.isDirectory()){if(De.has(i))continue;z(r,t,n)}else if(a.isFile()&&Oe(i)){let e=(0,o.relative)(t,r).replace(/\\/g,`/`);n.update(`${e}:${a.mtimeMs}:${a.size}\n`)}}}function B(e,t){let n=(0,i.createRequire)(n(`url`).pathToFileURL(__filename).href);for(let r of[`boltdocs`,`@bdocs/ssg`])try{let i=(0,o.join)((0,o.dirname)(n.resolve(`${r}/package.json`,{paths:[e]})),`dist`);s.default.existsSync(i)&&z(i,e,t)}catch{}}function V(e,t,n){let r=[(0,o.join)(e,t,`public`),(0,o.join)(e,t,`src`)];for(let t of r)try{s.default.existsSync(t)&&z(t,e,n)}catch{}}const ke=[`boltdocs.config.ts`,`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.cjs`,`package.json`,`tsconfig.json`,`pnpm-lock.yaml`,`package-lock.json`,`yarn.lock`];function Ae(e,t){for(let n of ke){let r=(0,o.join)(e,n);try{if(s.default.existsSync(r)){let e=s.default.statSync(r);t.update(`${n}:${e.mtimeMs}:${e.size}\n`)}}catch{}}}function je(e,t,n){try{s.default.removeSync((0,o.join)(n,`hash-merkle.json`))}catch{}try{let n=(0,l.createHash)(`sha256`);if(B(e,n),Ee((0,o.join)(e,`.boltdocs`,`compiled`,`manifest.json`),n))V(e,t,n);else{let r=(0,o.join)(e,t);s.default.existsSync(r)&&z(r,e,n)}return Ae(e,n),n.digest(`hex`)}catch(e){return(0,r.warn)(`[client-hash] Failed to compute client code hash: ${e instanceof Error?e.message:String(e)}`),(0,l.createHash)(`sha256`).update(`__client_hash_error__`).digest(`hex`)}}function Me(e){return l.default.createHash(`md5`).update(e).digest(`hex`)}function H(e,t){return!!(e&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs&&e.ino===t.ino)}async function Ne(e){if(e)try{let t=await s.default.readJson(e);return!t||t.version!==1||typeof t.files!=`object`?void 0:t}catch{return}}async function Pe(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeJson(n,{version:1,files:t},{spaces:0}),await s.default.move(n,e,{overwrite:!0})}catch{await s.default.remove(n).catch(()=>{})}}async function Fe(e,t,n){let r=await Ne(n),i=new Map,a={};return await Promise.all([...new Set(t)].map(async t=>{let n=(0,o.join)(e,t);try{let e=await s.default.stat(n);if(!e.isFile())return;let o=r?.files[t];if(H(o,e)){i.set(t,o.hash),a[t]=o;return}let c=Me(await s.default.readFile(n));i.set(t,c),a[t]={hash:c,size:e.size,mtimeMs:e.mtimeMs,ctimeMs:e.ctimeMs,ino:e.ino}}catch{}})),n&&await Pe(n,a),i}function Ie(e,t){if(e)try{let t=s.default.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{}return t}function Le({routePath:e,cacheItem:t,sourceContentHash:n,expectedAssetHash:r,ssgPagesDir:i,requireAssetHash:a=!1}){if(!t||t.contentHash!==n||a&&!t.assetHash||r!==void 0&&t.assetHash!==r)return!1;let c=l.default.createHash(`md5`).update(e).digest(`hex`);return!(!s.default.existsSync((0,o.join)(i,`${c}.html`))||t.loaderDataFilePath&&!s.default.existsSync((0,o.join)(i,`${c}.json`)))}function Re(e){return e===null?null:e.poolMetrics()}function ze(e,t){return(0,o.isAbsolute)(t)?t:(0,o.join)(e,t)}function Be(e,t={}){let n={};for(let[r,i]of Object.entries(t)){let t=j(r);n[t]=ze(e,i)}return Object.freeze(n)}function Ve(e){return Object.freeze({root:e.root,outDir:e.outDir,cacheDir:e.cacheDir,base:e.base,mode:e.mode,entry:e.entry,htmlEntry:e.htmlEntry,docsDirName:e.docsDirName,clientHash:e.clientHash,sourceFiles:Be(e.root,e.routeToSourceFileMap)})}function He(e,t,n={}){let r=Be(e,n),i=t.map(t=>{let i=j(t.path),a=n[t.path],o=a?ze(e,a):r[i]||t.componentPath;return{path:t.path,key:i,sourceFile:o,componentPath:t.componentPath,locale:t.locale,version:t.version,collection:t.collection}}),a=new Map;for(let e of i)a.has(e.key)||a.set(e.key,e);return Object.freeze({routes:Object.freeze(i),byPath:a,sourceFiles:r})}function Ue(e,t){return Object.freeze({...e,routeManifest:t})}const We=[/^@bdocs\//,/^boltdocs(?:\/|$)/,/^react-helmet-async(?:\/|$)/],Ge=[`react`,`react-dom`];function Ke(e){return Number.parseInt(c.version,10)>=8?{rolldownOptions:e}:{rollupOptions:e}}function qe(){let e=`\0virtual:ssr-empty-css`;return{name:`vite-react-ssg:ssr-skip-css`,enforce:`pre`,resolveId(t){return t.endsWith(`.css`)&&!t.startsWith(`\0`)?e+t:null},load(t){return t.startsWith(e)?{code:`export default undefined`,map:null}:null}}}function Je(e,t){let n=[],r=i=>{let a;try{a=s.default.readdirSync(i,{withFileTypes:!0})}catch{return}for(let s of a){if(s.name===`.vite`)continue;let a=(0,o.join)(i,s.name);if(s.isDirectory())r(a);else if(s.isFile()){let r=(0,o.relative)(e,a).split(o.sep).join(`/`);r!==t&&n.push(r)}}};return r(e),n.sort()}function Ye(e){return e.map(e=>{if(Array.isArray(e))return Ye(e);if(e&&typeof e==`object`&&`name`in e){let t=e.name;if(t===`vite:react-babel`||t===`vite:react-refresh`||t===`vite:react-jsx`||typeof t==`string`&&t.includes(`tailwind`)||t===`vite-plugin-image-optimizer`||t===`vite-plugin-boltdocs-dev-server`)return null}return e}).filter(Boolean)}async function Xe(e){let t=[],n=async r=>{let i;try{i=await s.default.readdir(r,{withFileTypes:!0})}catch{return}for(let a of i){let i=(0,o.join)(r,a.name);a.isDirectory()?await n(i):(a.isFile()||a.isSymbolicLink())&&t.push((0,o.relative)(e,i).split(o.sep).join(`/`))}};return await n(e),t.sort()}async function U(e){try{let t=await s.default.readFile(e);return(0,l.createHash)(`sha256`).update(t.toString()).digest(`hex`)}catch{return}}function Ze(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e),r=(0,o.resolve)(n,t),i=(0,o.relative)(n,r);if(!(!i||i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)))return r}async function Qe(e,t){let n=(0,o.join)((0,o.resolve)(t,`..`),`.boltdocs-public-assets.json`),r={};try{let e=await s.default.readJson(n);if(Array.isArray(e))for(let t of e)typeof t==`string`&&(r[t]=``);else if(e&&typeof e==`object`){let t=e.files;if(t&&typeof t==`object`)for(let[e,n]of Object.entries(t))typeof n==`string`&&(r[e]=n)}}catch{}let i=e&&s.default.existsSync(e)?await Xe(e):[],a={};for(let t of i){let n=await U((0,o.join)(e,t));n&&(a[t]=n)}for(let[e,n]of Object.entries(r)){if(a[e]!==void 0||!n)continue;let r=Ze(t,e);r&&await U(r)===n&&await s.default.remove(r)}e&&s.default.existsSync(e)&&(await s.default.ensureDir(t),await s.default.copy(e,t,{overwrite:!0,errorOnExist:!1})),await s.default.ensureDir((0,o.resolve)(t,`..`)),await s.default.writeJson(n,{version:1,files:a})}function $e(e){return(0,c.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{manifest:!0,ssrManifest:!0,chunkSizeWarningLimit:2e3,reportCompressedSize:!1,sourcemap:!1,cssMinify:`esbuild`,...Ke({input:{app:(0,o.join)(e.root,e.htmlEntry||`./index.html`)},output:{manualChunks(e){if(!(!e.includes(`node_modules`)&&!e.includes(`.boltdocs`))){if(e.includes(`/node_modules/react/`)||e.includes(`/node_modules/react-dom/`)||e.includes(`/node_modules/scheduler/`))return`react-vendor`;if(e.includes(`/node_modules/react-router`))return`react-router`;if(e.includes(`/node_modules/lucide-react`))return`lucide-icons`;if(e.includes(`/node_modules/react-helmet-async`))return`react-helmet`}}},onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,plugins:[{name:`vite-react-ssg:get-oup-dir`,configResolved(t){e.onResolvedOutputDir((0,o.isAbsolute)(t.build.outDir||``)?t.build.outDir||`dist`:(0,o.resolve)(e.root,t.build.outDir||`dist`))}}]})}function et(e){return(0,c.mergeConfig)(e.viteConfig,{logLevel:`warn`,build:{ssr:e.entry.includes(`boltdocs`)||e.entry.startsWith(`virtual:`)?`virtual:boltdocs-entry`:!e.canSkipSsrImport&&e.ssrEntry?e.ssrEntry:e.entry,manifest:!0,outDir:e.ssgOut,reportCompressedSize:!1,target:`es2022`,minify:!1,cssCodeSplit:!1,cssMinify:!1,...Ke({output:e.format===`esm`?{entryFileNames:`combined.mjs`,format:`esm`}:{entryFileNames:`combined.cjs`,format:`cjs`},platform:`node`,onLog(t,n,r){n.message.includes(`react-helmet-async`)||e.shouldSuppressLog(n.message)||r(t,n)}})},customLogger:e.customLogger,mode:e.resolvedMode,ssr:{noExternal:[...We],external:[...Ge]},plugins:[...Ye(e.viteConfig.plugins||[]),qe()]})}async function tt(e,t){let n=e.outDir,r=e.clientCacheDir,i=e.initialClientHash??t(),a=i,l=[],u=performance.now();if(e.canBypassClientBuild){e.onStep?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),s.default.existsSync(e.outDir)&&await s.default.remove(e.outDir);let t=(0,o.join)(e.clientCacheDir,`dist`);await Qe(e.viteConfig.publicDir,t),at(t,e.outDir),l=Je((0,o.join)(e.clientCacheDir,`dist`),e.htmlEntry)}else{await(0,c.build)($e({...e,onResolvedOutputDir:e=>{n=e}}));let d=performance.now()-u;e.onStep?.({name:`Client build`,duration:d,success:!0,details:`Vite production build`}),i=t(),a=i,r=(0,o.join)(e.finalCacheDir,`client-cache`,i);let f=(0,o.join)(r,`client-hash.txt`);await s.default.ensureDir(r);let p=(0,o.join)(r,`dist`);s.default.existsSync(p)&&await s.default.remove(p),await s.default.copy(n,p,{overwrite:!0,errorOnExist:!1}),await Qe(e.viteConfig.publicDir,p),l=Je(p,e.htmlEntry),await s.default.writeFile(f,i,`utf-8`),await ot((0,o.join)(e.finalCacheDir,`client-cache`))}return{outDir:n,durationMs:e.canBypassClientBuild?0:performance.now()-u,resolvedClientCacheDir:r,resolvedClientHash:i,pageContentFallbackHash:a,clientFiles:l}}async function nt(e){if(e.serverBuildSkipped)return e.onStep?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),{durationMs:0};s.default.existsSync(e.ssgOut)&&await s.default.remove(e.ssgOut),process.env.VITE_SSG=`true`;let t=performance.now();await(0,c.build)(et(e));let n=performance.now()-t;return e.onStep?.({name:`Server build`,duration:n,success:!0,details:`Vite SSR bundle`}),{durationMs:n}}function rt(e,t){if(!t||(0,o.isAbsolute)(t))return;let n=(0,o.resolve)(e,t),r=(0,o.relative)((0,o.resolve)(e),n);if(!(r===`..`||r.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(r)))try{let t=s.default.realpathSync(e),r=s.default.realpathSync(n),i=(0,o.relative)(t,r);return i===`..`||i.startsWith(`..${o.sep}`)||(0,o.isAbsolute)(i)||!s.default.readdirSync(r).some(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`))?void 0:r}catch{return}}function it(e){return e.startsWith(`dist/`)||e.startsWith(`.boltdocs/build/ssr/`)||e.startsWith(`rendering chunks`)||e===`computing gzip size...`||e.includes(`built in`)&&e.includes(`s`)}function at(e,t){let n=s.default.readdirSync(e,{withFileTypes:!0});s.default.mkdirSync(t,{recursive:!0});for(let r of n){let n=(0,o.join)(e,r.name),i=(0,o.join)(t,r.name);if(r.isDirectory())at(n,i);else if(r.isFile())try{s.default.linkSync(n,i)}catch{s.default.copyFileSync(n,i)}}}async function ot(e,t=5,n){try{if(!s.default.existsSync(e))return;let r=await s.default.readdir(e,{withFileTypes:!0}),i=[];for(let t of r){if(!t.isDirectory())continue;let n=(0,o.join)(e,t.name),r=await s.default.stat(n);i.push({name:t.name,mtime:r.mtimeMs})}i.sort((e,t)=>t.mtime-e.mtime);let a=new Set(i.slice(0,t).map(e=>e.name));for(let t of i)n&&t.name===n||a.has(t.name)||await s.default.remove((0,o.join)(e,t.name))}catch{}}function st(e,t){let n=e.warn;e.warn=(e,r)=>{e.includes(`externalized for browser compatibility`)||e.includes(`can't be bundled without type`)||t(e)||n(e,r)};let r=e.info;return e.info=(e,n)=>{t(e)||r(e,n)},e}function W(e,t){return t===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`}function ct(e){return Object.freeze(e)}function lt(e){let n=new Map;for(let r of e.routes){let i=l.default.createHash(`md5`).update(r).digest(`hex`),a=j(r),s=e.routeToSourceFileMap[a]||e.routeToSourceFileMap[r],c=s?e.sourceMeta.get(s):void 0;n.set(r,ct({path:r,pathHash:i,cachedHtmlFile:(0,o.join)(e.ssgPagesDir,`${i}.html`),cachedLoaderFile:(0,o.join)(e.ssgPagesDir,`${i}.json`),finalOutFile:(0,o.join)(e.outDir,W(r,e.dirStyle)),normalizedKey:a,sourceContentHash:c?.hash||e.fallbackHash,sourceMtimeMs:c?.mtimeMs||0,routeAssetHash:e.routeToAssetHash[r]??e.fallbackHash,fetchUrl:`${t.o(e.contextBase)}${t.r(r)}`}))}return n}function ut(e,t){let n=e.get(t);if(!n)throw Error(`Missing render plan for route: ${t}`);return n}function dt(e){return e.then(e=>({ok:!0,value:e}),e=>({ok:!1,error:e}))}function ft(e){return!Number.isFinite(e)||e<=0?2:Math.max(2,Math.min(32,Math.ceil(e)*2))}function pt(e,t){return e>4&&!t}function G(e,t){return!!e&&typeof e==`object`&&typeof e.path==`string`&&typeof e.error==`string`&&(t===void 0||e.path===t)}function K(e,t){if(!e||typeof e!=`object`)return!1;let n=e;return n.path===t&&typeof n.appHTML==`string`&&Array.isArray(n.metaAttributes)&&typeof n.bodyAttributes==`string`&&typeof n.htmlAttributes==`string`&&(n.routerContext===null||typeof n.routerContext==`object`&&!Array.isArray(n.routerContext))}async function mt(e){let t=[],n=new Set,r=e.getPool(),i=ft(r?e.getWorkerCount?.()??0:0),a=0,o=0,s=!1,c=async()=>{if(t.length===0)return;let e=(await Promise.all(t)).find(e=>!e.ok);if(e&&!e.ok)throw e.error},l=e=>{let r;r=dt(e).finally(()=>{n.delete(r)}),t.push(r),n.add(r)};try{if(pt(e.routes.length,e.canBypassClientBuild)&&(await e.ensurePool(),r=e.getPool(),r&&(i=ft(e.getWorkerCount?.()??0))),r?.renderBatch){let t=[];for(let n of e.routes){let r=e.getPlan(n);await e.isCached(r)?(await e.onCacheHit(r),o++):(await e.prepareRoute?.(r),t.push({path:n,plan:r}))}let c=Math.max(2,e.batchSize??(e.getWorkerCount?.()??1)*2);for(let o=0;o<t.length;o+=c){let u=t.slice(o,o+c);if(!r){for(let{path:n,plan:r}of t.slice(o))e.scheduleMainThread(n,r),a++;break}s=!0;let d=r,f=performance.now(),p=async t=>{for(let{path:n,plan:r}of u){let i=await e.onWorkerFailure(n,r,t,d);if(!K(i,n))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(n,r,i,performance.now()-f),a++}r=e.getPool()};l((async()=>{let t;try{t=await d.renderBatch(u.map(({path:e})=>e))}catch(e){await p(e);return}if(!Array.isArray(t)||t.length!==u.length){await p(Error(`SSG worker returned an invalid batch payload`));return}for(let n=0;n<u.length;n++){let{path:r,plan:i}=u[n],o=t[n],s;if(s=G(o,r)?await e.onWorkerFailure(r,i,Error(o.error),d):K(o,r)?o:await e.onWorkerFailure(r,i,Error(`SSG worker returned an invalid batch item`),d),!K(s,r))throw Error(`SSG fallback returned an invalid render result`);await e.onWorkerResult(r,i,s,performance.now()-f),a++}r=e.getPool()})()),n.size>=i&&await Promise.race(n)}}else for(let t of e.routes){let c=e.getPlan(t);if(await e.isCached(c)){await e.onCacheHit(c),o++;continue}if(await e.prepareRoute?.(c),!r&&e.routes.length>4&&(await e.ensurePool(),r=e.getPool(),r&&(i=ft(e.getWorkerCount?.()??0))),r){s=!0;let o=r,u=performance.now();l(o.render(t).catch(async n=>{let i=await e.onWorkerFailure(t,c,n,o);return r=e.getPool(),i}).then(async n=>{if(!K(n,t))throw Error(`SSG worker returned an invalid render result`);await e.onWorkerResult(t,c,n,performance.now()-u),a++})),n.size>=i&&await Promise.race(n)}else e.scheduleMainThread(t,c),a++}return await c(),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),{renderedCount:a,cachedCount:o,workerTaskCount:t.length,usedWorker:s}}catch(n){throw await Promise.all(t),await e.drainFinalizers(),await e.drainMainThread(),await e.drainWrites(),await e.cleanupAfterFailure(),n}finally{await e.destroyPool()}}const ht=Number.parseInt(c.version)>=5?[`.vite`]:[];function gt(e){let t=Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)));return JSON.stringify(t)}function _t(e,n){return`static-loader-data${t.a(e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e)}.${n}.json`}function vt(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.js`||t===`.mjs`||t===`.css`}function yt(e){let t=new Set;for(let n of Object.values(e)){vt(n.file)&&t.add(n.file);for(let e of n.css||[])vt(e)&&t.add(e);for(let e of n.imports||[])vt(e)&&t.add(e);for(let e of n.dynamicImports||[])vt(e)&&t.add(e)}return[...t]}async function bt(e,t,n){return Fe(e,yt(t),n?(0,o.join)(n,`chunk-hashes.json`):void 0)}function xt(e,n=`/`){let r=t.a(e);return r!==`/`&&r.endsWith(`/`)?r.slice(0,-1):r}function St(e,t,n){let r=t?.[n];if(r)return(0,o.isAbsolute)(r)?r:(0,o.join)(e,r)}function Ct(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,(0,o.isAbsolute)(n)?(0,o.relative)(e,n):n]))}function wt(e,t){return e.filter(e=>!e.includes(`:`)&&!e.includes(`*`))}async function Tt(e={},u={}){let d=process.env.MODE||process.env.NODE_ENV||e.mode||`production`;d!==process.env.NODE_ENV&&(process.env.NODE_ENV=d);let f=process.cwd(),p=u.root||f,m=u.build?.outDir||`dist`,h=u.base||`/`,_=performance.now(),v=0,y=0,b=0,{onFinished:x,onStep:S,routeToSourceFileMap:T={},cacheDir:E=`.boltdocs/build`,htmlEntry:D=`index.html`,entry:fe=await w(p,D)}=e,O=`docs`,pe=Object.values(T);if(pe.length>0){let e=pe[0],t=(0,o.relative)(p,e).replace(/\\/g,`/`).split(`/`);t.length>0&&(O=t[0])}let A=(0,o.isAbsolute)(m)?m:(0,o.join)(p,m),M=(0,o.isAbsolute)(E)?E:(0,o.join)(p,E),N=je(p,O,M),P=Ve({root:p,outDir:A,cacheDir:M,base:h,mode:d,entry:fe,htmlEntry:D,docsDirName:O,clientHash:N,routeToSourceFileMap:T}),F=P.clientHash.substring(0,12),I=(0,o.join)(P.cacheDir,`ssr`,F),L=(0,o.join)(P.cacheDir,`client-cache`,P.clientHash),Ee=L,De=N,R=N,Oe=(0,o.join)(L,`client-hash.txt`),z=!1;try{s.default.existsSync(Oe)&&s.default.existsSync((0,o.join)(L,`dist`))&&(z=(await s.default.readFile(Oe,`utf-8`)).trim()===N)}catch{}let B=(0,o.join)(M,`ssg-pages`),V=(0,o.join)(M,`ssg-cache.json`),ke=(0,o.join)(M,`ssg-output.json`),Ae=await _e(ke),Me=Ae!==void 0&&Ae.auxiliaryFiles.length===0;z&&(ge(Ae,be((0,o.join)(L,`dist`)),D)||(z=!1));let H=[],Ne=!1,Pe=(e.dirStyle||u.ssgOptions?.dirStyle)??`flat`;if(z&&Me&&Pe!==`nested`){let e=(0,o.join)(M,`routes-cache.json`);try{if(s.default.existsSync(e)&&s.default.existsSync(V)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`)),n=xe(JSON.parse(s.default.readFileSync(V,`utf-8`)),t.paths);if(t.dirStyle===Pe&&t.base===h){let e=t.paths.every(e=>{let r=j(e),i=n[r];return Le({routePath:e,cacheItem:i,sourceContentHash:Ie(T[r]||T[e]||St(p,t.sourceFiles,r)||St(p,t.sourceFiles,e),R),ssgPagesDir:B,requireAssetHash:!0})});t.paths.length>0&&e&&(H=t.paths,Ne=!0)}}}catch{}}if(Ne){let e=performance.now(),t={};try{s.default.existsSync(V)&&(t=xe(JSON.parse(s.default.readFileSync(V,`utf-8`)),H))}catch{}let n=[...ye(H,t,Pe===`nested`?`nested`:`flat`),`static-loader-data-manifest-${F}.json`],r=be((0,o.join)(L,`dist`)).filter(e=>e!==D),i=await _e(ke),a=i?.auxiliaryFiles.length===0&&he(i,N,A,r,n,[]),c={};if(!a){s.default.existsSync(A)&&await s.default.remove(A);let e=(0,o.join)(L,`dist`);await Qe(u.publicDir,e),await s.default.copy(e,A);let n=[];for(let e of H){let r=l.default.createHash(`md5`).update(e).digest(`hex`),i=(0,o.join)(B,`${r}.html`),a=(0,o.join)(B,`${r}.json`),u=`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;if(n.push({source:i,destination:(0,o.join)(A,u)}),s.default.existsSync(a)){let r=j(e),i=t[r];i?.loaderDataFilePath&&(n.push({source:a,destination:(0,o.join)(A,i.loaderDataFilePath)}),c[xt(e,h)]=i.loaderDataFilePath)}}await k(n),await Se((0,o.join)(A,`static-loader-data-manifest-${F}.json`),gt(c))}await Et(B,t,H);let d=Math.round(performance.now()-_);S?.({name:`Client build`,duration:0,success:!0,details:`Code unchanged, restored from cache`}),S?.({name:`Server build`,duration:0,success:!0,details:`SSR bundle unchanged, skipped`}),S?.({name:`Render pages`,duration:0,success:!0,details:`${H.length} pages (all cached)`}),S?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(d/1e3).toFixed(1)}s, all cached`});let f=Math.round(performance.now()-e),p={renderedPageCount:0,cachedPageCount:H.length,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,routePreparationMs:0,workerTransportMs:0,workerRoundTripMs:0,workerTransportAvgMs:0,finalizeP50Ms:0,finalizeP95Ms:0,assetCollectionMs:0,beforeHookMs:0,htmlAssemblyMs:0,onPageRenderedHookMs:0,criticalCssP50Ms:0,criticalCssP95Ms:0,cacheWriteMs:0,cachedOutputMs:f,renderQueueDrainMs:0,renderPipelineSettleMs:0,outputLinkMs:f};process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:0,success:!0,details:`${H.length} pages / 0 new / ${H.length} cached`,metrics:{renderedCount:0,cachedCount:H.length,renderedSize:0,totalPages:H.length,prunedCount:0,clientBuildMs:0,serverBuildMs:0,ssrImportMs:0,workerPoolSetupMs:0,workerUsed:!1,workerCount:0,fallbackMainThread:!1,ssrP50Ms:0,ssrP95Ms:0,ssrP99Ms:0,crittersP50Ms:0,crittersP95Ms:0,writeP50Ms:0,writeP95Ms:0,routerTimingCount:0,routerMatchAvgMs:0,routerResolveAvgMs:0,routerLoadersAvgMs:0,routerRenderAvgMs:0,routerHelmetAvgMs:0,routerTotalAvgMs:0,pagesPerSecond:0,pipeline:p}})}`),await x?.(m),await Dt(A),await ve((0,o.join)(M,`ssg-output.json`),N,A,n,r);return}let Fe=await(0,c.resolveConfig)(u,`build`,d,d),ze=Object.assign({},Fe.ssgOptions||{},e),{script:Be=`sync`,mock:We=!1,formatting:Ge=`none`,includedRoutes:Ke=wt,onBeforePageRender:qe,onPageRendered:Je,dirStyle:Ye=`flat`,includeAllRoutes:Xe=!1,format:U=`esm`,concurrency:Ze=20,rootContainerId:$e=`root`,beastiesOptions:et={}}=ze,at=et,W=ze.turbo??!1,ct=(0,o.join)(M,`ssr`),dt=(0,o.join)(M,`ssr-cache-index.json`);if(I=(0,o.join)(ct,W?`turbo-ssr`:F),!W&&z)try{let e=(await s.default.readJson(dt))[N];if(typeof e==`string`){let t=rt(ct,e);t&&(I=t)}}catch{}let ft=st((0,c.createLogger)(),it),pt=()=>{};if(We){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));pt=e()}let G={};try{if(s.default.existsSync(V)){let e=await s.default.readJson(V);G=xe(e,Object.keys(e))}}catch{}let K=!1;if(z)try{let e=(0,o.join)(M,`routes-cache.json`);if(s.default.existsSync(e)){let t=JSON.parse(s.default.readFileSync(e,`utf-8`));t.paths.length>0&&t.paths.every(e=>{let n=j(e),r=G[n];return Le({routePath:e,cacheItem:r,sourceContentHash:Ie(T[n]||T[e]||St(p,t.sourceFiles,n)||St(p,t.sourceFiles,e),R),ssgPagesDir:B,requireAssetHash:!0})})&&(H=t.paths,K=!0)}}catch{}let vt=K?``:await de(Fe,fe),yt=(W||z)&&s.default.existsSync(I)&&s.default.readdirSync(I).filter(e=>e.endsWith(`.mjs`)||e.endsWith(`.cjs`)).length>0,Tt=performance.now(),[q,At]=await Promise.all([tt({viteConfig:u,resolvedMode:Fe.mode,root:p,htmlEntry:D,outDir:A,clientCacheDir:L,finalCacheDir:M,docsDirName:O,initialClientHash:N,canBypassClientBuild:z,customLogger:ft,onStep:S,shouldSuppressLog:it},()=>je(p,O,M)),nt({viteConfig:u,resolvedMode:Fe.mode,entry:fe,ssrEntry:vt,ssgOut:I,format:U,canSkipSsrImport:K,serverBuildSkipped:yt,customLogger:ft,onStep:S,shouldSuppressLog:it})]);if(m=q.outDir,Ee=q.resolvedClientCacheDir,De=q.resolvedClientHash,R=q.pageContentFallbackHash,F=De.substring(0,12),v=q.durationMs,y=At.durationMs,!W)try{let e={};try{e=await s.default.readJson(dt)}catch{}e[De]=(0,o.relative)(ct,I),await Ce(dt,e)}catch{}let jt=U===`esm`&&process.platform===`win32`?`file://`:``,Mt=U===`esm`?`.mjs`:`.cjs`;vt.replace(/\0/g,``).replace(`virtual:`,``).replace(/[^a-zA-Z0-9-]/g,`_`);let Nt=`combined`+Mt;try{if(s.default.existsSync(I)){let e=s.default.readdirSync(I).filter(e=>e.endsWith(Mt));e.length>0&&(Nt=e[0])}}catch{}let Pt=jt+(0,o.join)(I,Nt).replace(/\\/g,`/`),Ft=Nt.replace(/\.[^/.]+$/,``),It=JSON.parse(await s.default.readFile((0,o.join)(I,...ht,`manifest.json`),`utf-8`)),Lt=null,Rt=null,J=[],zt,Bt=`/`,Vt,Ht=null,Ut,Wt=Ke;if(!K){let e=typeof require<`u`?require:(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href),n=performance.now(),r=U===`esm`?await import(Pt):e(Pt);b=performance.now()-n,zt=r.matchRouteBranchWithParams;let{createRoot:a,includedRoutes:o}=r;Wt=o||Ke,Lt=await a(!1);let s=Lt;if(J=s.routes,Bt=s.base,Vt=s.triggerOnSSRAppRendered,Ht=s.app,Ut=s.routerType,J&&J.length>0)for(let e of J)e.path&&(e.filePath||e.entry)&&!T[e.path]&&(T[e.path]=e.filePath||e.entry);P=Ue(P,He(p,J,T)),Rt=t.t(s,r)}let Gt=``,Kt=0,Y=null,qt=null,Jt=null,Yt=!1;async function Xt(){if(Jt){await Jt;return}let e=qt;e&&(Jt=e.destroy(),await Jt)}if(!K){let e=performance.now(),{paths:t}=await ue(J);H=Xe?t:await Wt(t,J||[]),H=wt(H,J||[]),H=Array.from(new Set(H)),Kt+=performance.now()-e;try{await Ce((0,o.join)(M,`routes-cache.json`),{paths:H,dirStyle:Ye,base:h,sourceFiles:Ct(p,T)},0)}catch{}Gt=(0,o.join)(I,Ft+Mt)}async function Zt(){if(Y||Yt||H.length<=4)return;Yt=!0;let e=performance.now();try{Gt=(0,o.join)(I,Ft+Mt);let{SsgWorkerPool:t}=await Promise.resolve().then(()=>require(`./ssg-worker-pool-CZPcmzdb.cjs`));Y=new t({ssrEntryPath:Gt,format:U===`esm`?`esm`:`cjs`}),qt=Y,await Y.ready(),Fn=performance.now()-e}catch{Fn=performance.now()-e,Y=null}}let Qt=ze.criticalCss??!1,$t,en;Qt===`zig-critters`?($t=await te(),$t||(0,r.warn)("[zig-critters] WASM unavailable; critical CSS disabled for this build. Set `criticalCss: 'beasties'` to enable JS-based critical CSS.")):Qt===`beasties`&&at!==!1&&(en=await ee(m,{publicPath:h,...at}));let tn=``;if($t){let e=(0,o.join)(A,`assets`);if(s.default.existsSync(e)){let t=s.default.readdirSync(e).filter(e=>e.endsWith(`.css`));for(let n of t)tn+=s.default.readFileSync((0,o.join)(e,n),`utf-8`)+`
|
|
3
|
+
`}}let nn={},rn={},an={},on=null;if(K)for(let e of H){let t=j(e);an[e]=G[t]?.assetHash||N}else{let[e,t]=await Promise.all([s.default.readFile((0,o.join)(A,...ht,`ssr-manifest.json`),`utf-8`),s.default.readFile((0,o.join)(A,...ht,`manifest.json`),`utf-8`)]);nn=JSON.parse(e),rn=JSON.parse(t),on=ae(rn);let n=await bt(A,rn,M);await Promise.all(Object.entries(T).map(async([e,t])=>{an[e]=await oe({outDir:A,indexes:on,ssrManifest:nn,routeSourceFile:t,root:p,clientHash:N,assetHashes:n})}));for(let e of H)an[e]||(an[e]=R)}let X=await s.default.readFile((0,o.join)(A,D),`utf-8`);s.default.rmSync((0,o.join)(A,D)),X=Ot(X,Be);let sn=qe?null:C({rootContainerId:$e,indexHTML:X}),cn=(await import(`p-queue`)).default||await import(`p-queue`),ln=new cn({concurrency:Ze}),un=new cn({concurrency:Math.min(a.default.cpus().length,4)}),dn=new cn({concurrency:Math.max(2,Math.min(a.default.cpus().length,6))}),fn={},pn=0,mn=new Map,hn=new Set;for(let e of H){let n=T[t.a(e).replace(/\/$/,``)]||T[e];n&&hn.add(n)}for(let e of hn)try{if(s.default.existsSync(e)){let t=s.default.statSync(e);mn.set(e,{hash:`${t.mtimeMs}:${t.size}`,mtimeMs:t.mtimeMs})}}catch{}let gn=null;!K&&zt&&(gn=g({routes:[...J],base:Bt,matchRouteBranchWithParams:zt,serverManifest:It,manifest:rn,ssrManifest:nn}));let _n=lt({routes:H,outDir:A,ssgPagesDir:B,dirStyle:Ye,contextBase:Bt,fallbackHash:R,routeToSourceFileMap:T,sourceMeta:mn,routeToAssetHash:an}),vn=new ie,yn=[],bn=[],xn=[],Sn=[],Cn=0,wn=0,Tn=0,En=0,Dn=0,On=0,kn=0,An=0,jn=0,Mn=0,Nn=0,Z={count:0,matchMs:0,resolveMs:0,loadersMs:0,renderMs:0,helmetMs:0,totalMs:0};function Pn(e){e&&(Z.count++,Z.matchMs+=e.matchMs,Z.resolveMs+=e.resolveMs,Z.loadersMs+=e.loadersMs,Z.renderMs+=e.renderMs,Z.helmetMs+=e.helmetMs,Z.totalMs+=e.totalMs)}let Fn=0,In=!1;function Q(e,t){if(e.length===0)return 0;let n=[...e].sort((e,t)=>e-t),r=Math.ceil(t/100*n.length)-1;return n[Math.max(0,Math.min(r,n.length-1))]}let Ln=0,Rn=0,zn=0,Bn=new Set,Vn=new Set,Hn=[],Un=me({writeFile:async(e,t)=>{await s.default.ensureDir((0,o.dirname)(e)),await s.default.writeFile(e,t,`utf-8`)}}),Wn=JSON.stringify(G),$=xe(G,H),Gn=new Map,Kn=new Set;Kn.add(B);for(let e of H){let t=Ye===`nested`?(0,o.join)(e.replace(/^\//g,``),`index.html`):`${(e.endsWith(`/`)?`${e}index`:e).replace(/^\//g,``)}.html`;Kn.add((0,o.join)(A,(0,o.dirname)(t)));let n=e===`/`?`/index`:e.endsWith(`/`)?`${e}index`:e;Kn.add((0,o.join)(A,`static-loader-data`,(0,o.dirname)(n)))}Kn.add((0,o.join)(A,`static-loader-data`)),await Promise.all([...Kn].map(e=>s.default.ensureDir(e)));async function qn(e,t,i,a,c,l,u,d,f,p,m,g,ee,te,_){let ie=performance.now(),{path:v,cachedHtmlFile:y,cachedLoaderFile:ae,normalizedKey:b,sourceContentHash:x,sourceMtimeMs:oe,fetchUrl:S}=e,C;if(!ee&&te===`remix`){if(!gn)throw Error(`The SSR entry must expose matchRouteBranchWithParams for asset collection`);let e=performance.now();C=new Set(await(Gn.get(v)||gn(S))),Cn+=performance.now()-e}else C=new Set;let w;if(d&&Object.keys(d).length>0){let e=_t(v,F);w=e,W&&await s.default.writeFile((0,o.join)(A,e),JSON.stringify(d)),fn[xt(v,h)]=e,pn++}await g?.(v,t,f);let T=performance.now(),E=sn&&_===X?sn({appHTML:t,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null}):await ce({rootContainerId:$e,appHTML:t,indexHTML:_,metaAttributes:i,bodyAttributes:a,htmlAttributes:c,initialState:null});Tn+=performance.now()-T;let D=ee?``:le(C),ue=u?E.replace(/<script[^>]*>(?:(?!<\/script>)[\s\S])*__staticRouterHydrationData(?:(?!<\/script>)[\s\S])*<\/script>/g,``):E;D&&(ue=ue.replace(`<head>`,`<head>${D}`));let de=performance.now(),fe=await Je?.(v,ue,f)||ue;En+=performance.now()-de;let O=``;if(d&&Object.keys(d).length>0){let e=JSON.stringify(d).replace(/</g,`\\u003c`);O=`window.__VITE_REACT_SSG_STATIC_LOADER_DATA__ = { '${xt(v,h)}': ${e} };`}let pe=n.t(u),k=fe,me=`<script>window.__VITE_REACT_SSG_HASH__ = '${F}';${O}${pe}<\/script>`,he=performance.now();if(k=k.replace(`<script>${se}<\/script>`,``),$t){if(tn){let e=ne(k,tn,`zig-critters`);try{let t=await vn.getOrCreate(e,async()=>(await $t.processHtml(k,tn)).match(/<style[^>]*data-zig-critters[^>]*>[\s\S]*?<\/style>/g)?.join(`\\n`)||null);t&&!k.includes(`data-zig-critters`)&&(k=k.replace(`</head>`,`${t}</head>`))}catch(e){(0,r.warn)(`[zig-critters] Failed to inline CSS for "${v}": ${e instanceof Error?e.message:String(e)}`)}}k=k.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}else if(en){let e=ne(k,tn,`beasties`),t=await vn.getOrCreate(e,async()=>{let e=await un.add(()=>en.process(k));return re(k,e)});t&&!k.includes(t)&&(k=k.replace(`</head>`,`${t}</head>`)),k=k.replace(/<link\srel="stylesheet"(?!.*\bcrossorigin\b)/g,`<link rel="stylesheet" crossorigin`)}let ge=me+(l||``);ge&&(k=k.replace(`<head>`,`<head>${ge}`));let _e=Ge===`none`?k:await kt(k,Ge);xn.push(Math.round(performance.now()-he));let ve=performance.now();W?d&&Object.keys(d).length>0&&w&&await Un.enqueue((0,o.join)(A,w),JSON.stringify(d)):(await Un.enqueue(y,_e),d&&Object.keys(d).length>0&&w?(await Un.enqueue(ae,JSON.stringify(d)),$[b]={contentHash:x,mtime:oe?Math.round(oe):0,loaderDataFilePath:w,assetHash:e.routeAssetHash}):$[b]={contentHash:x,mtime:oe?Math.round(oe):0,assetHash:e.routeAssetHash});let ye=performance.now()-ve;Sn.push(Math.round(ye)),bn.push(Math.round(performance.now()-ie)),Ln++,An++,zn+=_e.length}let Jn=performance.now(),Yn=[];await mt({routes:H,canBypassClientBuild:z,getPlan:e=>ut(_n,e),isCached:e=>{if(W||!z)return!1;try{return Le({routePath:e.path,cacheItem:G[e.normalizedKey],sourceContentHash:e.sourceContentHash,expectedAssetHash:e.routeAssetHash,ssgPagesDir:B})}catch{return!1}},onCacheHit:async e=>{let t=G[e.normalizedKey]?.loaderDataFilePath,n=t?(0,o.join)(A,t):void 0,r=!Bn.has(e.finalOutFile),i=!!n&&!Vn.has(n);r&&Bn.add(e.finalOutFile),i&&n&&Vn.add(n);let a=performance.now();try{r&&Hn.push({source:e.cachedHtmlFile,destination:e.finalOutFile}),n&&t&&s.default.existsSync(e.cachedLoaderFile)&&(i&&Hn.push({source:e.cachedLoaderFile,destination:n}),fn[xt(e.path,h)]=t,pn++),Rn++,jn++,Dn+=performance.now()-a}catch(t){throw r&&Bn.delete(e.finalOutFile),i&&n&&Vn.delete(n),Error(`Error on cached page: ${e.path}\n${t.stack}`)}},prepareRoute:e=>{!Ht&&Ut===`remix`&&gn&&Gn.set(e.path,gn(e.fetchUrl))},ensurePool:Zt,getPool:()=>Y,getWorkerCount:()=>Re(Y)?.totalWorkers??0,onWorkerFailure:async(e,t,i,a)=>{if(!Rt)throw Error(`Error on page: ${e}\n${String(i)}`);(0,r.warn)(`[ssg-worker] Retrying ${e} on the main thread after worker failure`),In=!0;try{await Xt()}catch{}Y=null,Yt=!0;let o=await Rt.render(e);return{path:e,appHTML:o.appHTML,metaAttributes:o.metaAttributes,bodyAttributes:o.bodyAttributes,htmlAttributes:o.htmlAttributes,styleTag:o.styleTag,timings:o.timings,routerContext:n.n(o.routerContext)}},onWorkerResult:async(e,t,n,r)=>{On+=Math.max(0,r-(n.timings?.totalMs??0)),kn++,n.timings&&(yn.push(Math.round(n.timings.totalMs)),Pn(n.timings));let i={...Lt,routePath:e},a=performance.now(),o=await qe?.(e,X,i)||X;wn+=performance.now()-a;let s=n.routerContext?.loaderData?n.routerContext.loaderData:null;await dn.add(()=>qn(t,n.appHTML,n.metaAttributes,n.bodyAttributes,n.htmlAttributes,n.styleTag,n.routerContext,s,i,Bt,J,Vt,Ht,Ut??`remix`,o))},scheduleMainThread:(e,t)=>{Yn.push(ln.add(async()=>{try{let r={...Lt,routePath:e},i=performance.now(),a=await qe?.(e,X,r)||X;wn+=performance.now()-i;let o=performance.now(),{appHTML:s,bodyAttributes:c,htmlAttributes:l,metaAttributes:u,styleTag:d,routerContext:f,timings:p}=await Rt.render(e);yn.push(Math.round(performance.now()-o)),Pn(p);let m=f?.loaderData;await qn(t,s,u,c,l,d,n.n(f),m||null,r,Bt,J,Vt,Ht,Ut??`remix`,a)}catch(t){throw Error(`Error on page: ${e}\n${t.stack}`)}}))},drainFinalizers:()=>dn.onIdle(),drainMainThread:async()=>{await Promise.all(Yn),await ln.onIdle()},drainWrites:()=>Un.flush(),cleanupAfterFailure:async()=>{try{s.default.existsSync(A)&&await s.default.remove(A)}catch{}},destroyPool:Xt,onNoRenderer:e=>{(0,r.warn)(`[ssg] No SSR context available for ${e}, skipping`)}}),Nn+=performance.now()-Jn;let Xn=performance.now();for(let e of H){if(W)continue;let t=_n.get(e);if(!t||!s.default.existsSync(t.cachedHtmlFile))continue;Bn.has(t.finalOutFile)||Hn.push({source:t.cachedHtmlFile,destination:t.finalOutFile});let n=$[t.normalizedKey];if(!n?.loaderDataFilePath||!s.default.existsSync(t.cachedLoaderFile))continue;let r=(0,o.join)(A,n.loaderDataFilePath);Vn.has(r)||Hn.push({source:t.cachedLoaderFile,destination:r})}await k(Hn);let Zn=Math.round(performance.now()-Xn);Mn+=Zn;let Qn=Ln+Rn,$n=(zn/1024/1024).toFixed(2),er=0;if(!W)try{let e=JSON.stringify($)!==Wn;e&&await Ce(V,$),er=await Et(B,$,H,e)}catch{}let tr=performance.now()-Tt,nr=Re(qt),rr={renderedCount:Ln,cachedCount:Rn,renderedSize:zn,totalPages:Qn,prunedCount:er,clientBuildMs:Math.round(v),serverBuildMs:Math.round(y),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(Fn),workerUsed:nr!==null&&!In,workerCount:nr?.totalWorkers??0,fallbackMainThread:In,ssrP50Ms:Q(yn,50),ssrP95Ms:Q(yn,95),ssrP99Ms:Q(yn,99),crittersP50Ms:Q(xn,50),crittersP95Ms:Q(xn,95),writeP50Ms:Q(Sn,50),writeP95Ms:Q(Sn,95),routerTimingCount:Z.count,routerMatchAvgMs:Z.count>0?Z.matchMs/Z.count:0,routerResolveAvgMs:Z.count>0?Z.resolveMs/Z.count:0,routerLoadersAvgMs:Z.count>0?Z.loadersMs/Z.count:0,routerRenderAvgMs:Z.count>0?Z.renderMs/Z.count:0,routerHelmetAvgMs:Z.count>0?Z.helmetMs/Z.count:0,routerTotalAvgMs:Z.count>0?Z.totalMs/Z.count:0,pagesPerSecond:Qn>0&&tr>0?Math.round(Qn/(tr/1e3)*10)/10:0,pipeline:{renderedPageCount:An,cachedPageCount:jn,clientBuildMs:Math.round(v),serverBuildMs:Math.round(y),ssrImportMs:Math.round(b),workerPoolSetupMs:Math.round(Fn),routePreparationMs:Math.round(Kt),workerTransportMs:Math.round(On),workerRoundTripMs:Math.round(On),workerTransportAvgMs:kn>0?Math.round(On/kn):0,finalizeP50Ms:Q(bn,50),finalizeP95Ms:Q(bn,95),assetCollectionMs:Math.round(Cn),beforeHookMs:Math.round(wn),htmlAssemblyMs:Math.round(Tn),onPageRenderedHookMs:Math.round(En),criticalCssP50Ms:Q(xn,50),criticalCssP95Ms:Q(xn,95),cacheWriteMs:Math.round(0+Un.writeTimeMs()),cachedOutputMs:Math.round(Dn),renderQueueDrainMs:Math.round(Nn),renderPipelineSettleMs:Math.round(Nn),outputLinkMs:Math.round(Mn)}};S?.({name:`Render pages`,duration:tr,success:!0,details:`${Qn} pages (${Ln} new, ${Rn} cached, ${$n} MB)`,metrics:rr}),process.env.BOLTDOCS_BENCHMARK_PHASES===`true`&&console.log(`[boltdocs] ${JSON.stringify({name:`Render pages`,duration:Math.round(tr),success:!0,details:`${Qn} pages / ${Ln} new / ${Rn} cached / ${$n} MB`,metrics:rr})}`);let ir=performance.now(),ar=gt(fn);await Se((0,o.join)(A,`static-loader-data-manifest-${F}.json`),ar),await ot((0,o.join)(M,`ssr`),5,W?`turbo-ssr`:(0,o.basename)(I)),pt();let or=Fe.plugins.find(e=>e.name===`vite-plugin-pwa`)?.api;or&&!or.disabled&&or.generateSW&&await or.generateSW();let sr=Math.round(performance.now()-_);S?.({name:`Static loader data`,duration:performance.now()-ir,success:!0,details:`${pn} loader data files`,metrics:{loaderDataFileCount:pn}}),await x?.(m),await Dt(A);let cr=be(A),lr=await we(A,sr,M,{outputFiles:cr,manifestPath:(0,o.join)(Ee,`dist`,...ht,`manifest.json`)});Te(A,lr),S?.({name:`Build metrics`,duration:0,success:!0,details:`Build time: ${(sr/1e3).toFixed(1)}s, JS: ${(lr.totalJSBundleSize/1024).toFixed(0)} kB, CSS: ${(lr.totalCSSBundleSize/1024).toFixed(0)} kB`,metrics:{buildTime:sr,totalPages:lr.pages.length,jsSize:lr.totalJSBundleSize,cssSize:lr.totalCSSBundleSize}}),await ve((0,o.join)(M,`ssg-output.json`),De,A,ye(H,$,Ye).concat(`static-loader-data-manifest-${F}.json`),q.clientFiles,cr)}async function Et(e,t,n=[],r=!1){try{if(!s.default.existsSync(e))return 0;let i=(0,o.join)(e,`.prune-state`);if(!r)try{let e=await s.default.stat(i);if(Date.now()-e.mtimeMs<6e4)return 0}catch{}let a=await s.default.readdir(e),c=new Set,u=new Set([...Object.keys(t),...n]);for(let e of u){let t=l.default.createHash(`md5`).update(e).digest(`hex`);c.add(`${t}.html`),c.add(`${t}.json`)}let d=0;for(let t of a)(t.endsWith(`.html`)||t.endsWith(`.json`))&&!c.has(t)&&(await s.default.remove((0,o.join)(e,t)),d++);return await s.default.writeFile(i,String(Date.now()),`utf8`),d}catch{return 0}}async function Dt(e){try{ht.length>0?await s.default.remove((0,o.join)(e,...ht)):await Promise.all([s.default.remove((0,o.join)(e,`manifest.json`)),s.default.remove((0,o.join)(e,`ssr-manifest.json`))])}catch{}}function Ot(e,t){return!t||t===`sync`?e:e.replace(/<script type="module" /g,`<script type="module" ${t} `)}async function kt(e,t){if(t===`prettify`)try{let t=(await import(`prettier/esm/standalone.mjs`)).default,n=(await import(`prettier/esm/parser-html.mjs`)).default;return t.format(e,{semi:!1,parser:`html`,plugins:[n]})}catch(t){return(0,r.error)(`Error formatting html: ${t?.message}`),e}return e}function q(e,t,n){if(e.url)try{let t=e.url,n=t.indexOf(`?`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n):``;if(/%[0-9A-Fa-f]{2}/.test(r)){let t=decodeURI(r);if(t!==r){let n=t+i;e.url=n,e.originalUrl&&=n}}}catch{}n()}function At({template:e,ssrEntry:n,onBeforePageRender:i,entry:a,rootContainerId:o,onPageRendered:s}){return{name:`vite-react-ssg:dev-server`,configureServer(l){let u=async(u,d)=>{try{let r=u.originalUrl??u.url??`/`,f=await l.ssrLoadModule(n),p=f.createRoot,m=await p(!1,r),h=t.t(m,f),{app:g,base:ee}=m,[te=`/`,ne=``]=r.split(`?`),_=new URLSearchParams(ne);if(!g&&_.has(`_data`))return h.handleLoader(u,d);let re=await l.transformIndexHtml(r,e),ie=await i?.(r,re,m)||re,{appHTML:v,bodyAttributes:y,htmlAttributes:ae,metaAttributes:b,styleTag:x}=await h.render(t.i(te,ee));b.push(x);let oe=await Promise.all([n,a].map(async e=>await l.moduleGraph.getModuleByUrl(e))),se=new Set,S=new Set,C=async e=>{if(!e?.ssrTransformResult||S.has(e))return;S.add(e);let{deps:t=[],dynamicDeps:n=[]}=e.ssrTransformResult,r=[...t,...n];for(let e of r)if(e.endsWith(`.css`)||e.endsWith(`.scss`)||e.endsWith(`.sass`)||e.endsWith(`.less`))se.add(e);else if(e.endsWith(`.ts`)||e.endsWith(`.tsx`)){let t=await l.moduleGraph.getModuleByUrl(e);t&&await C(t)}};await Promise.all(oe.map(async e=>C(e)));let w=[...se].map(e=>T(t.n(l.config.base,e)));b.push(...w);let le=await ce({rootContainerId:o,appHTML:v,indexHTML:ie,metaAttributes:b,bodyAttributes:y,htmlAttributes:ae,initialState:null}),E=await s?.(r,le,m)||le;d.statusCode=200,d.setHeader(`Content-Type`,`text/html`),(0,c.send)(u,d,E,`html`,{headers:`pluginContainer`in l?l.config.server.headers:l.config.preview.headers})}catch(e){let t=e instanceof Error?e:Error(String(e));l.ssrFixStacktrace(t),(0,r.error)(`SSR render error`,t),d.statusCode=500,d.end(t.stack??t.message)}};return l.middlewares.use(q),()=>{l.middlewares.use(u)}}}}async function jt(e={},t={}){try{let n=process.env.NODE_ENV||t.mode||`development`,{skipResolveConfig:r,...i}=t,a=process.cwd(),s,l,d,f;if(r){s=e.root||a,l={...e.ssgOptions,...i};let{htmlEntry:t=`index.html`}=l,n=l.entry||await w(s,t);d=n.startsWith(`virtual:`)||n.includes(`\0`)||n.includes(`boltdocs/entry`)||n.includes(`boltdocs-entry`)?n:(0,o.join)(s,n),f=await u.default.readFile((0,o.join)(s,t),`utf-8`)}else{let t=await(0,c.resolveConfig)(e,`serve`,n,n);s=t.root||a,l={...t.ssgOptions,...i};let{htmlEntry:r=`index.html`}=l,p=l.entry||await w(s,r),[m,h]=await Promise.all([de(t,p),u.default.readFile((0,o.join)(s,r),`utf-8`)]);d=m,f=h}let{onBeforePageRender:p,onPageRendered:m,rootContainerId:h=`root`,mock:g=!1}=l;if(process.env.__DEV_MODE_SSR=`true`,g){let{jsdomGlobal:e}=await Promise.resolve().then(()=>require(`./jsdomGlobal-TVNgh-Jn.cjs`));e()}return await(0,c.createServer)({...e,plugins:[...e.plugins??[],At({template:f,ssrEntry:d,onBeforePageRender:p,onPageRendered:m,entry:l.entry||`src/main.ts`,rootContainerId:h})]})}catch(e){throw Error(`[vite-react-ssg] Failed to create dev server: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function Mt(e={},t={},n){globalThis.__ssr_start_time=performance.now();try{let r=await jt(t,e);return await r.listen(),Nt(r,!!n),r.bindCLIShortcuts({print:!0}),r}catch(e){(0,r.error)(`failed to start server: ${e?.message??e}`),process.exit(1)}}function Nt(e,t=!1){if(t){e.printUrls();return}let n=e.config.logger.info,i=` -- SSR`;if(globalThis.__ssr_start_time){let e=Math.round(performance.now()-globalThis.__ssr_start_time);i+=` ready in ${r.colors.bold(`${e}ms`)}`}n(`\n ${r.colors.cyan(` VITE-REACT-SSG v${D} `)}`,{clear:!e.config.logger.hasWarned}),n(`${r.colors.cyan(`\n VITE v${c.version}`)+r.colors.dim(i)}\n`),n(r.colors.green(` dev server running at:`)),e.printUrls()}var Pt=class{constructor(e){this.template=e.template}stitch(e){let t=this.template;return e.content!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:CONTENT-->/g,e.content)),e.toc!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TOC-->/g,e.toc)),e.meta!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:META-->/g,e.meta)),e.breadcrumbs!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:BREADCRUMBS-->/g,e.breadcrumbs)),e.pageNav!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:PAGENAV-->/g,e.pageNav)),e.title!==void 0&&(t=t.replace(/<!--BDOCS_SLOT:TITLE-->/g,e.title)),t}};exports.ShellStitcher=Pt,exports.build=Tt,exports.createServer=jt,exports.dev=Mt;
|