rari 0.13.11 → 0.14.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.
Files changed (33) hide show
  1. package/dist/alias-resolver-D1GHg-4o.mjs +1 -0
  2. package/dist/cli.mjs +1 -1
  3. package/dist/client.d.mts +3 -3
  4. package/dist/headers.d.mts +1 -1
  5. package/dist/index.d.mts +3 -3
  6. package/dist/{preload-modules-DcD-Wjko.mjs → preload-modules-C1zd75Lc.mjs} +1 -1
  7. package/dist/proxy/RariRequest.d.mts +1 -1
  8. package/dist/proxy/RariResponse.d.mts +1 -1
  9. package/dist/{railway-CpaXKzUX.mjs → railway-BQNsu-l4.mjs} +1 -1
  10. package/dist/{render-B5ZWrhxN.mjs → render-DHDWCmpf.mjs} +1 -1
  11. package/dist/runtime/AppRouterProvider.mjs +5 -9
  12. package/dist/runtime/entry-client.mjs +1 -1
  13. package/dist/runtime/rsc-client-runtime.d.mts +1 -1
  14. package/dist/runtime/rsc-client-runtime.mjs +1 -1
  15. package/dist/runtime/vendor/react-flight-client/ReactFlightClient.d.mts +1 -1
  16. package/dist/runtime/vendor/react-flight-client/ReactFlightClientConfig.d.mts +1 -1
  17. package/dist/server-build-JfPg3Cjl.mjs +166 -0
  18. package/dist/{server-config-DXVkrIkP.d.mts → server-config-CGmxgSPb.d.mts} +1 -12
  19. package/dist/sitemap-generator-DXQL4RtJ.mjs +7 -0
  20. package/dist/vite.d.mts +5 -16
  21. package/dist/vite.mjs +3 -3
  22. package/package.json +10 -10
  23. package/dist/server-build-D9GkgoYA.mjs +0 -166
  24. package/dist/sitemap-generator-n0LjA3Y1.mjs +0 -7
  25. /package/dist/{ReactFlightClientConfig-BZt6Cjql.d.mts → ReactFlightClientConfig-DdCyeIZx.d.mts} +0 -0
  26. /package/dist/{get-client-component-BjjGTgmG.mjs → get-client-component-DOUGb2xc.mjs} +0 -0
  27. /package/dist/{metadata-route-CyBO6ooC.d.mts → metadata-route-D0xSj7FK.d.mts} +0 -0
  28. /package/dist/{robots-generator-Ch7hYjpz.mjs → robots-generator-Byiwomr5.mjs} +0 -0
  29. /package/dist/{routes-DAS3afh_.mjs → routes-C8Txll7p.mjs} +0 -0
  30. /package/dist/{types-Cfe0C3JU.d.mts → types-CC9LMWMo.d.mts} +0 -0
  31. /package/dist/{types-DovC7o1Y.d.mts → types-DOgYNbON.d.mts} +0 -0
  32. /package/dist/{types-DDyPWiSH.d.mts → types-R2tg78dF.d.mts} +0 -0
  33. /package/dist/{utils-BK4N0qFr-DkMQ_i_L.mjs → utils-BK4N0qFr-BCy19luN.mjs} +0 -0
@@ -0,0 +1 @@
1
+ import e from"node:path";function t(t,n,r){if(typeof t!=`string`)throw TypeError(`Expected source to be a string, but received ${typeof t}`);if(n==null)throw TypeError(`Expected aliases to be an object, but received ${n}`);if(typeof n!=`object`||Array.isArray(n))throw TypeError(`Expected aliases to be a plain object, but received ${Array.isArray(n)?`array`:typeof n}`);if(Object.getPrototypeOf(n)!==Object.prototype&&Object.getPrototypeOf(n)!==null)throw TypeError(`Expected aliases to be a plain object, but received ${n.constructor?.name||`object with custom prototype`}`);if(typeof r!=`string`)throw TypeError(`Expected projectRoot to be a string, but received ${typeof r}`);let i=Object.entries(n).sort((e,t)=>t[0].length-e[0].length);for(let[n,a]of i)if(t.startsWith(`${n}/`)||t===n){let i=t.slice(n.length),o=e.join(a,i);return e.isAbsolute(o)?o:e.resolve(r,o)}return null}export{t};
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import{getBinaryPath as e,getInstallationInstructions as t}from"./platform.mjs";import{spawn as n}from"node:child_process";import{existsSync as r,readFileSync as i,realpathSync as a}from"node:fs";import{resolve as o}from"node:path";import s from"node:process";import{fileURLToPath as c}from"node:url";import{styleText as l}from"node:util";function u(e){console.warn(`${l(`blue`,`info`)} ${e}`)}function d(e){console.warn(`${l(`green`,`✓`)} ${e}`)}function f(e){console.error(`${l(`red`,`✗`)} ${e}`)}function p(e){console.warn(`${l(`yellow`,`⚠`)} ${e}`)}const m=/^([^=]+)=(.*)$/;function h(e){let t=e.trim();if(!t||t.startsWith(`#`))return null;let n=t.match(m);if(!n)return null;let[,r,i]=n,a=r.trim(),o=i.trim();return(o.startsWith(`"`)&&o.endsWith(`"`)||o.startsWith(`'`)&&o.endsWith(`'`))&&(o=o.slice(1,-1)),{key:a,value:o}}function g(){let e=o(s.cwd(),`.env`);if(!r(e))return;let t=i(e,`utf-8`);for(let e of t.split(`
3
- `)){let t=h(e);t&&!s.env[t.key]&&(s.env[t.key]=t.value)}}g();const[,,_,...v]=s.argv;function y(e){let t=s.cwd();for(;;){let n=e(t);if(n!==null)return n;let r=o(t,`..`);if(r===t)break;t=r}return null}function b(e){return r(o(e,`pnpm-lock.yaml`))?`pnpm`:r(o(e,`yarn.lock`))?`yarn`:r(o(e,`bun.lockb`))?`bun`:r(o(e,`package-lock.json`))?`npm`:null}function x(e){try{let t=o(e,`package.json`);if(!r(t))return null;let n=JSON.parse(i(t,`utf-8`));if(n.packageManager?.startsWith(`pnpm`))return`pnpm`;if(n.packageManager?.startsWith(`yarn`))return`yarn`;if(n.packageManager?.startsWith(`bun`))return`bun`;if(n.packageManager?.startsWith(`npm`))return`npm`}catch{}return null}function S(){return y(e=>b(e)??x(e))??`npm`}function C(){let e=S(),t=s.platform===`win32`;switch(e){case`bun`:return t?`bun.cmd`:`bun`;case`pnpm`:return t?`pnpm.cmd`:`pnpm`;case`yarn`:return t?`yarn.cmd`:`yarn`;default:return t?`npx.cmd`:`npx`}}function w(){return y(e=>{try{let t=o(e,`package.json`);if(r(t)){let e=JSON.parse(i(t,`utf-8`)),n={...e.dependencies,...e.devDependencies};if(n[`vite-plus`])return`vp`;if(n.vite)return`vite`}}catch{}return null})??`vite`}function T(e,t,r={}){let i=s.platform===`win32`;if(e===`npx`){let e=C();if(e.includes(`bun`))return n(i?`bunx.cmd`:`bunx`,t,{...r,shell:i});if(e.includes(`pnpm`))return n(e,[`exec`,...t],{...r,shell:i});if(e.includes(`yarn`)){let[a,...o]=t;return n(e,a===`vp`?[`dlx`,`-p`,`vite-plus`,`vp`,...o]:[`dlx`,...t],{...r,shell:i})}}return i&&e===`npx`?n(`npx.cmd`,t,{...r,shell:!0}):n(e,t,r)}function E(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function D(){return!!(s.env.RAILWAY_ENVIRONMENT||s.env.RAILWAY_PROJECT_ID||s.env.RAILWAY_SERVICE_ID)}function O(){return!!(s.env.RENDER||s.env.RENDER_SERVICE_ID||s.env.RENDER_SERVICE_NAME)}function k(){return D()||O()}function A(){return D()?`Railway`:O()?`Render`:`local`}function j(){return{port:s.env.PORT||s.env.RSC_PORT||`3000`,mode:s.env.NODE_ENV||`production`,host:k()?`0.0.0.0`:`127.0.0.1`}}async function M(){let{existsSync:e,rmSync:t}=await import(`node:fs`),{resolve:n}=await import(`node:path`),r=n(s.cwd(),`dist`);e(r)&&(u(`Cleaning dist folder...`),t(r,{recursive:!0,force:!0})),u(`Type checking...`);let i=T(`npx`,[`tsgo`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((e,t)=>{i.on(`exit`,n=>{n===0?(d(`Type check passed`),e()):(f(`Type check failed with code ${n}`),t(Error(`Type check failed with code ${n}`)))}),i.on(`error`,t)}),u(`Building for production...`);let a=T(`npx`,[w(),`build`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((e,t)=>{a.on(`exit`,n=>{n===0?(d(`Build complete`),e()):(f(`Build failed with code ${n}`),t(Error(`Build failed with code ${n}`)))}),a.on(`error`,t)}),await N()}async function N(){if(r(o(s.cwd(),`dist`,`server`,`image.json`))&&r(o(s.cwd(),`public`)))try{let t=n(e(),[`optimize-images`],{stdio:`inherit`,cwd:s.cwd(),shell:!1});await new Promise(e=>{t.on(`exit`,t=>{t===0||p(`Image pre-optimization exited with code ${t}`),e()}),t.on(`error`,t=>{p(`Image pre-optimization error: ${E(t)}`),e()})})}catch(e){p(`Could not pre-optimize images: ${E(e)}`)}}async function P(){let{existsSync:e}=await import(`node:fs`),{resolve:t}=await import(`node:path`),n=w();if(!e(t(s.cwd(),`dist`))){u(`First run detected - building project...`);let e=T(`npx`,[n,`build`,`--mode`,`development`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((t,n)=>{e.on(`exit`,e=>{e===0?(d(`Initial build complete`),t()):(f(`Build failed with code ${e}`),n(Error(`Build failed with code ${e}`)))}),e.on(`error`,n)})}u(`Starting Vite${n===`vp`?`+`:``} dev server...`);let r=T(`npx`,[n,`dev`],{stdio:`inherit`,cwd:s.cwd()}),i=()=>{u(`Shutting down dev server...`),r.kill(`SIGTERM`)};return s.on(`SIGINT`,i),s.on(`SIGTERM`,i),r.on(`error`,e=>{f(`Failed to start Vite: ${e.message}`),s.exit(1)}),r.on(`exit`,e=>{e!==0&&e!==null&&(f(`Vite exited with code ${e}`),s.exit(e))}),new Promise(()=>{})}async function F(){let r;try{r=e()}catch{f(`Failed to obtain rari binary`),f(t()),s.exit(1)}let{port:i,mode:a,host:o}=j();if(k()){let e=A();u(`${e} environment detected`),u(`Starting rari server for ${e} deployment...`),u(`Mode: ${a}, Host: ${o}, Port: ${i}`),u(`using binary: ${r}`)}let c=n(r,[`--mode`,a,`--port`,i,`--host`,o],{stdio:`inherit`,cwd:s.cwd(),env:{...s.env,RUST_LOG:s.env.RUST_LOG||`error`}}),l=()=>{u(`shutting down...`),c.kill(`SIGTERM`)};return s.on(`SIGINT`,l),s.on(`SIGTERM`,l),c.on(`error`,e=>{f(`Failed to start rari server: ${e.message}`),e.message.includes(`ENOENT`)&&f(`Binary not found. Please ensure rari is properly installed.`),s.exit(1)}),c.on(`exit`,(e,t)=>{t?u(`server stopped by signal ${t}`):e===0?d(`server stopped successfully`):(f(`server exited with code ${e}`),s.exit(e||1))}),new Promise(()=>{})}async function I(){u(`Setting up Railway deployment...`),k()&&(f(`Already running in ${A()} environment. Use "rari start" instead.`),s.exit(1));let{createRailwayDeployment:e}=await import(`./railway-CpaXKzUX.mjs`);await e()}async function L(){u(`Setting up Render deployment...`),k()&&(f(`Already running in ${A()} environment. Use "rari start" instead.`),s.exit(1));let{createRenderDeployment:e}=await import(`./render-B5ZWrhxN.mjs`);await e()}async function R(){switch(_){case void 0:case`help`:case`--help`:case`-h`:console.warn(`${l(`bold`,`rari CLI`)}
3
+ `)){let t=h(e);t&&!s.env[t.key]&&(s.env[t.key]=t.value)}}g();const[,,_,...v]=s.argv;function y(e){let t=s.cwd();for(;;){let n=e(t);if(n!==null)return n;let r=o(t,`..`);if(r===t)break;t=r}return null}function b(e){return r(o(e,`pnpm-lock.yaml`))?`pnpm`:r(o(e,`yarn.lock`))?`yarn`:r(o(e,`bun.lockb`))?`bun`:r(o(e,`package-lock.json`))?`npm`:null}function x(e){try{let t=o(e,`package.json`);if(!r(t))return null;let n=JSON.parse(i(t,`utf-8`));if(n.packageManager?.startsWith(`pnpm`))return`pnpm`;if(n.packageManager?.startsWith(`yarn`))return`yarn`;if(n.packageManager?.startsWith(`bun`))return`bun`;if(n.packageManager?.startsWith(`npm`))return`npm`}catch{}return null}function S(){return y(e=>b(e)??x(e))??`npm`}function C(){let e=S(),t=s.platform===`win32`;switch(e){case`bun`:return t?`bun.cmd`:`bun`;case`pnpm`:return t?`pnpm.cmd`:`pnpm`;case`yarn`:return t?`yarn.cmd`:`yarn`;default:return t?`npx.cmd`:`npx`}}function w(){return y(e=>{try{let t=o(e,`package.json`);if(r(t)){let e=JSON.parse(i(t,`utf-8`)),n={...e.dependencies,...e.devDependencies};if(n[`vite-plus`])return`vp`;if(n.vite)return`vite`}}catch{}return null})??`vite`}function T(e,t,r={}){let i=s.platform===`win32`;if(e===`npx`){let e=C();if(e.includes(`bun`))return n(i?`bunx.cmd`:`bunx`,t,{...r,shell:i});if(e.includes(`pnpm`))return n(e,[`exec`,...t],{...r,shell:i});if(e.includes(`yarn`)){let[a,...o]=t;return n(e,a===`vp`?[`dlx`,`-p`,`vite-plus`,`vp`,...o]:[`dlx`,...t],{...r,shell:i})}}return i&&e===`npx`?n(`npx.cmd`,t,{...r,shell:!0}):n(e,t,r)}function E(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function D(){return!!(s.env.RAILWAY_ENVIRONMENT||s.env.RAILWAY_PROJECT_ID||s.env.RAILWAY_SERVICE_ID)}function O(){return!!(s.env.RENDER||s.env.RENDER_SERVICE_ID||s.env.RENDER_SERVICE_NAME)}function k(){return D()||O()}function A(){return D()?`Railway`:O()?`Render`:`local`}function j(){return{port:s.env.PORT||s.env.RSC_PORT||`3000`,mode:s.env.NODE_ENV||`production`,host:k()?`0.0.0.0`:`127.0.0.1`}}async function M(){let{existsSync:e,rmSync:t}=await import(`node:fs`),{resolve:n}=await import(`node:path`),r=n(s.cwd(),`dist`);e(r)&&(u(`Cleaning dist folder...`),t(r,{recursive:!0,force:!0})),u(`Type checking...`);let i=T(`npx`,[`tsgo`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((e,t)=>{i.on(`exit`,n=>{n===0?(d(`Type check passed`),e()):(f(`Type check failed with code ${n}`),t(Error(`Type check failed with code ${n}`)))}),i.on(`error`,t)}),u(`Building for production...`);let a=T(`npx`,[w(),`build`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((e,t)=>{a.on(`exit`,n=>{n===0?(d(`Build complete`),e()):(f(`Build failed with code ${n}`),t(Error(`Build failed with code ${n}`)))}),a.on(`error`,t)}),await N()}async function N(){if(r(o(s.cwd(),`dist`,`server`,`image.json`))&&r(o(s.cwd(),`public`)))try{let t=n(e(),[`optimize-images`],{stdio:`inherit`,cwd:s.cwd(),shell:!1});await new Promise(e=>{t.on(`exit`,t=>{t===0||p(`Image pre-optimization exited with code ${t}`),e()}),t.on(`error`,t=>{p(`Image pre-optimization error: ${E(t)}`),e()})})}catch(e){p(`Could not pre-optimize images: ${E(e)}`)}}async function P(){let{existsSync:e}=await import(`node:fs`),{resolve:t}=await import(`node:path`),n=w();if(!e(t(s.cwd(),`dist`))){u(`First run detected - building project...`);let e=T(`npx`,[n,`build`,`--mode`,`development`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((t,n)=>{e.on(`exit`,e=>{e===0?(d(`Initial build complete`),t()):(f(`Build failed with code ${e}`),n(Error(`Build failed with code ${e}`)))}),e.on(`error`,n)})}u(`Starting Vite${n===`vp`?`+`:``} dev server...`);let r=T(`npx`,[n,`dev`],{stdio:`inherit`,cwd:s.cwd()}),i=()=>{u(`Shutting down dev server...`),r.kill(`SIGTERM`)};return s.on(`SIGINT`,i),s.on(`SIGTERM`,i),r.on(`error`,e=>{f(`Failed to start Vite: ${e.message}`),s.exit(1)}),r.on(`exit`,e=>{e!==0&&e!==null&&(f(`Vite exited with code ${e}`),s.exit(e))}),new Promise(()=>{})}async function F(){let r;try{r=e()}catch{f(`Failed to obtain rari binary`),f(t()),s.exit(1)}let{port:i,mode:a,host:o}=j();if(k()){let e=A();u(`${e} environment detected`),u(`Starting rari server for ${e} deployment...`),u(`Mode: ${a}, Host: ${o}, Port: ${i}`),u(`using binary: ${r}`)}let c=n(r,[`--mode`,a,`--port`,i,`--host`,o],{stdio:`inherit`,cwd:s.cwd(),env:{...s.env,RUST_LOG:s.env.RUST_LOG||`error`}}),l=()=>{u(`shutting down...`),c.kill(`SIGTERM`)};return s.on(`SIGINT`,l),s.on(`SIGTERM`,l),c.on(`error`,e=>{f(`Failed to start rari server: ${e.message}`),e.message.includes(`ENOENT`)&&f(`Binary not found. Please ensure rari is properly installed.`),s.exit(1)}),c.on(`exit`,(e,t)=>{t?u(`server stopped by signal ${t}`):e===0?d(`server stopped successfully`):(f(`server exited with code ${e}`),s.exit(e||1))}),new Promise(()=>{})}async function I(){u(`Setting up Railway deployment...`),k()&&(f(`Already running in ${A()} environment. Use "rari start" instead.`),s.exit(1));let{createRailwayDeployment:e}=await import(`./railway-BQNsu-l4.mjs`);await e()}async function L(){u(`Setting up Render deployment...`),k()&&(f(`Already running in ${A()} environment. Use "rari start" instead.`),s.exit(1));let{createRenderDeployment:e}=await import(`./render-DHDWCmpf.mjs`);await e()}async function R(){switch(_){case void 0:case`help`:case`--help`:case`-h`:console.warn(`${l(`bold`,`rari CLI`)}
4
4
 
5
5
  ${l(`bold`,`Usage:`)}
6
6
  ${l(`cyan`,`rari dev`)} Start the development server with Vite
package/dist/client.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { C as extractServerPropsWithCache, S as extractServerProps, T as hasServerSideDataFetching, _ as ServerSidePropsResult, a as ServerSpamBlockerConfig, b as clearPropsCacheForComponent, c as ErrorBoundary, d as NotFound, f as RuntimeClient, g as MetadataResult, h as createLoadingBoundary, i as ServerRateLimitConfig, l as HttpRuntimeClient, m as createHttpRuntimeClient, o as DefaultError, p as createErrorBoundary, r as ServerConfig, s as DefaultLoading, t as ServerCSPConfig, u as LoadingSpinner, v as StaticParamsResult, w as extractStaticParams, x as extractMetadata, y as clearPropsCache } from "./server-config-DXVkrIkP.mjs";
2
- import { a as ErrorProps, c as LayoutEntry, f as NotFoundEntry, h as RouteSegmentType, i as ErrorEntry, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-Cfe0C3JU.mjs";
1
+ import { C as hasServerSideDataFetching, S as extractStaticParams, _ as clearPropsCache, a as DefaultLoading, b as extractServerProps, c as LoadingSpinner, d as createErrorBoundary, f as createHttpRuntimeClient, g as StaticParamsResult, h as ServerSidePropsResult, i as DefaultError, l as NotFound, m as MetadataResult, o as ErrorBoundary, p as createLoadingBoundary, r as ServerConfig, s as HttpRuntimeClient, t as ServerCSPConfig, u as RuntimeClient, v as clearPropsCacheForComponent, x as extractServerPropsWithCache, y as extractMetadata } from "./server-config-CGmxgSPb.mjs";
2
+ import { a as ErrorProps, c as LayoutEntry, f as NotFoundEntry, h as RouteSegmentType, i as ErrorEntry, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-CC9LMWMo.mjs";
3
3
  import * as React from "react";
4
4
  import { Component, ErrorInfo, ReactNode } from "react";
5
5
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
@@ -140,4 +140,4 @@ declare class StatePreserver {
140
140
  private restoreFocus;
141
141
  }
142
142
  //#endregion
143
- export { type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, ClientRouter, type ClientRouterProps, DefaultError, DefaultLoading, ErrorBoundary, type ErrorEntry, type ErrorProps, type GenerateMetadata, type GenerateStaticParams, HttpRuntimeClient, type LayoutEntry, LayoutErrorBoundary, type LoadingEntry, LoadingSpinner, type MetadataResult, type NavigationError, NavigationErrorHandler, type NavigationErrorHandlerOptions, NavigationErrorOverlay, type NavigationErrorOverlayProps, type NavigationErrorType, NotFound, type NotFoundEntry, type PreservedState, RouteInfoError, RouteInfoRequest, RouteInfoResponse, type RouteSegment, type RouteSegmentType, type RuntimeClient, type ScrollPosition, type ServerCSPConfig, type ServerConfig, type ServerRateLimitConfig, type ServerSidePropsResult, type ServerSpamBlockerConfig, StatePreserver, type StatePreserverConfig, type StaticParamsResult, clearPropsCache, clearPropsCacheForComponent, createErrorBoundary, createHttpRuntimeClient, createLoadingBoundary, extractMetadata, extractServerProps, extractServerPropsWithCache, extractStaticParams, hasServerSideDataFetching };
143
+ export { type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, ClientRouter, type ClientRouterProps, DefaultError, DefaultLoading, ErrorBoundary, type ErrorEntry, type ErrorProps, type GenerateMetadata, type GenerateStaticParams, HttpRuntimeClient, type LayoutEntry, LayoutErrorBoundary, type LoadingEntry, LoadingSpinner, type MetadataResult, type NavigationError, NavigationErrorHandler, type NavigationErrorHandlerOptions, NavigationErrorOverlay, type NavigationErrorOverlayProps, type NavigationErrorType, NotFound, type NotFoundEntry, type PreservedState, RouteInfoError, RouteInfoRequest, RouteInfoResponse, type RouteSegment, type RouteSegmentType, type RuntimeClient, type ScrollPosition, type ServerCSPConfig, type ServerConfig, type ServerSidePropsResult, StatePreserver, type StatePreserverConfig, type StaticParamsResult, clearPropsCache, clearPropsCacheForComponent, createErrorBoundary, createHttpRuntimeClient, createLoadingBoundary, extractMetadata, extractServerProps, extractServerPropsWithCache, extractStaticParams, hasServerSideDataFetching };
@@ -1,4 +1,4 @@
1
- import { i as ReadonlyCookie, n as CookieStore, t as CookieOptions } from "./types-DDyPWiSH.mjs";
1
+ import { i as ReadonlyCookie, n as CookieStore, t as CookieOptions } from "./types-R2tg78dF.mjs";
2
2
 
3
3
  //#region src/headers.d.ts
4
4
  declare function cookies(): Promise<CookieStore>;
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { d as Metadata, l as LayoutProps, p as PageProps } from "./types-Cfe0C3JU.mjs";
2
- import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-CyBO6ooC.mjs";
3
- import { c as RariURL, n as ProxyConfig, r as ProxyFunction, s as RariFetchEvent } from "./types-DovC7o1Y.mjs";
1
+ import { d as Metadata, l as LayoutProps, p as PageProps } from "./types-CC9LMWMo.mjs";
2
+ import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-D0xSj7FK.mjs";
3
+ import { c as RariURL, n as ProxyConfig, r as ProxyFunction, s as RariFetchEvent } from "./types-DOgYNbON.mjs";
4
4
  import { RariRequest } from "./proxy/RariRequest.mjs";
5
5
  import { RariResponse } from "./proxy/RariResponse.mjs";
6
6
  export { type LayoutProps, type Metadata, type PageProps, type ProxyConfig, type ProxyFunction, type RariFetchEvent, RariRequest, RariResponse, type RariURL, type Robots, type RobotsRule, type Sitemap, type SitemapEntry, type SitemapImage, type SitemapVideo };
@@ -1,2 +1,2 @@
1
- import{n as e}from"./get-client-component-BjjGTgmG.mjs";async function t(t,n){let r=t.split(`
1
+ import{n as e}from"./get-client-component-DOUGb2xc.mjs";async function t(t,n){let r=t.split(`
2
2
  `),i=new Set;for(let e of r){let t=e.trim();if(!t)continue;let r=t.indexOf(`:`);if(r===-1)continue;let a=t.substring(r+1);if(a.startsWith(`I{`))try{let e=a.substring(1),t=JSON.parse(e);if(typeof t==`object`&&!Array.isArray(t)&&t.id){let e=t.id.replace(/\\/g,`/`),r=t.name&&t.name!==`default`?`${e}#${t.name}`:e;(!n||!n.has(r))&&i.add(r)}}catch{}}i.size>0&&await Promise.all(Array.from(i,async t=>{try{if(!await e(t)){console.warn(`[rari] Failed to preload component: ${t}`);return}n?.add(t)}catch(e){console.error(`[rari] Error preloading component ${t}:`,e)}}))}export{t};
@@ -1,4 +1,4 @@
1
- import { c as RariURL, l as RequestCookies } from "../types-DovC7o1Y.mjs";
1
+ import { c as RariURL, l as RequestCookies } from "../types-DOgYNbON.mjs";
2
2
 
3
3
  //#region src/proxy/RariRequest.d.ts
4
4
  declare class RariRequest {
@@ -1,4 +1,4 @@
1
- import { u as ResponseCookies } from "../types-DovC7o1Y.mjs";
1
+ import { u as ResponseCookies } from "../types-DOgYNbON.mjs";
2
2
 
3
3
  //#region src/proxy/RariResponse.d.ts
4
4
  declare class RariResponse extends Response {
@@ -1,4 +1,4 @@
1
- import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-BK4N0qFr-DkMQ_i_L.mjs";import{existsSync as o,readFileSync as s,writeFileSync as c}from"node:fs";import{join as l}from"node:path";import u from"node:process";import{styleText as d}from"node:util";function f(){let r=u.cwd();e(`Creating Railway deployment configuration...`),t(r,{providerName:`Railway`,deployScript:`echo "Push to GitHub and connect to Railway to deploy"`,startScript:`rari start`,dependency:n()}),p(r),a(r,`Railway`,`.railway`),m(r),h()}function p(e){i(e,`railway.toml`,`[build]
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-BK4N0qFr-BCy19luN.mjs";import{existsSync as o,readFileSync as s,writeFileSync as c}from"node:fs";import{join as l}from"node:path";import u from"node:process";import{styleText as d}from"node:util";function f(){let r=u.cwd();e(`Creating Railway deployment configuration...`),t(r,{providerName:`Railway`,deployScript:`echo "Push to GitHub and connect to Railway to deploy"`,startScript:`rari start`,dependency:n()}),p(r),a(r,`Railway`,`.railway`),m(r),h()}function p(e){i(e,`railway.toml`,`[build]
2
2
  builder = "RAILPACK"
3
3
 
4
4
  [deploy]
@@ -1,4 +1,4 @@
1
- import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-BK4N0qFr-DkMQ_i_L.mjs";import{existsSync as o,readFileSync as s,writeFileSync as c}from"node:fs";import{join as l}from"node:path";import u from"node:process";import{styleText as d}from"node:util";function f(){let r=u.cwd();e(`Creating Render deployment configuration...`),t(r,{providerName:`Render`,deployScript:`echo "Push to GitHub and connect to Render to deploy"`,startScript:`rari start`,dependency:n()}),p(r),a(r,`Render`,`.render`),m(r),h()}function p(e){i(e,`render.yaml`,`services:
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-BK4N0qFr-BCy19luN.mjs";import{existsSync as o,readFileSync as s,writeFileSync as c}from"node:fs";import{join as l}from"node:path";import u from"node:process";import{styleText as d}from"node:util";function f(){let r=u.cwd();e(`Creating Render deployment configuration...`),t(r,{providerName:`Render`,deployScript:`echo "Push to GitHub and connect to Render to deploy"`,startScript:`rari start`,dependency:n()}),p(r),a(r,`Render`,`.render`),m(r),h()}function p(e){i(e,`render.yaml`,`services:
2
2
  - type: web
3
3
  name: rari-app
4
4
  runtime: node
@@ -1,9 +1,5 @@
1
- "use client";import{x as e,y as t}from"../regex-constants-CmOAY1_W.mjs";import{t as n}from"../preload-modules-DcD-Wjko.mjs";import*as r from"react";import{Suspense as i,useEffect as a,useRef as o,useState as s}from"react";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";import{createFromFetch as d,createFromReadableStream as f}from"virtual:react-flight-client";const ee=/"timestamp":(\d+)/,p=/^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)$/,m=/^[0-9a-f]+$/i,te=/^\$L?[0-9a-f]+$/i;function ne(e){return new Promise(t=>{setTimeout(t,e)})}function h(e){if(!e||e.length===0)return!1;let t=e.charAt(0),n=e.charCodeAt(0);return e.startsWith(`I[`)||e.startsWith(`I{`)||e.startsWith(`"$S`)?!1:!!(n===84||t===`[`||t===`{`||e.startsWith(`E{`)||t===`"`||p.test(e))}function re(e){return!e||e.length===0?!1:!!(e.includes(`"fallback"`)||e.includes(`$Lfallback`)||e.startsWith(`E{`))}function ie(){return u(`div`,{style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:9999},children:[l(`div`,{style:{width:`40px`,height:`40px`,border:`4px solid rgba(0, 0, 0, 0.1)`,borderTopColor:`#3b82f6`,borderRadius:`50%`,animation:`spin 1s linear infinite`}}),l(`style`,{children:`
2
- @keyframes spin {
3
- to { transform: rotate(360deg); }
4
- }
5
- `})]})}function ae({contentRef:e,rowsDataRef:t,modulesDataRef:n,symbolsDataRef:i,suspendingPromisesRef:a,getSuspendingPromise:o,rscToReact:s}){let c=t.current,l=n.current,u=i.current,d=a.current,f=c.has(e);if(r.useEffect(()=>{f&&d.has(e)&&d.delete(e)},[e,f,d]),f)return s(c.get(e),l,void 0,u,c);throw o(e)}function g({children:p,initialPayload:g,onNavigate:_}){let[v,y]=s(g),b=s(0)[1],x=o({x:0,y:0}),S=o(new Map),C=o(null),oe=o(new Set),w=o(_),T=o(0),E=o(new Map),D=o([]),O=o(null),k=o(0),[A,j]=s(null),M=o(typeof window<`u`&&window.location.hash.length>0),se=o(0),N=o(!1),P=o(!1),F=o(!1),I=o(Promise.resolve()),ce=o(!1),le=o(!!g),L=o(null);a(()=>{w.current=_},[_]),a(()=>{if(v?.element!=null&&v.element&&typeof v.element==`object`&&`status`in v.element&&v.element.status===`rejected`){let e=v.element.reason;e&&console.error(`[rari] AppRouter: Flight payload rejected:`,e)}},[v]);let R=()=>{if(typeof document>`u`)return;let e=document.querySelectorAll(`form`);S.current.clear(),e.forEach((e,t)=>{let n=new FormData(e);S.current.set(`form-${t}`,n)})},ue=()=>{typeof document>`u`||document.querySelectorAll(`form`).forEach((e,t)=>{let n=S.current.get(`form-${t}`);n&&n.forEach((t,n)=>{let r=e.elements.namedItem(n);r&&(r.type===`checkbox`||r.type===`radio`?r.checked=t===`on`:r.value=t)})})},z=(e,t,n,r)=>{let i={timestamp:Date.now(),error:e,type:t,details:n,filePath:r};D.current.push(i),k.current+=1,D.current.length>10&&D.current.shift(),k.current>=2&&j(i),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:hmr-failure`,{detail:i}))},B=()=>{setTimeout(()=>{window.location.reload()},1e3)},V=()=>{k.current>0&&(k.current=0)},de=e=>{if(!O.current)return!1;if(e===O.current)return!0;let t=e.match(ee);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1};function fe(e){let t;try{t=JSON.stringify(e)}catch{try{let n=new WeakSet;t=JSON.stringify(e,(e,t)=>{if(typeof t==`object`&&t){if(n.has(t))return`[Circular]`;n.add(t)}return t})}catch{t=`[Unstringifiable:${typeof e}:${String(e).substring(0,50)}]`}}let n=0;for(let e=0;e<t.length;e++){let r=t.charCodeAt(e);n=(n<<5)-n+r,n&=n}return Math.abs(n).toString(36)}function H(e,n,i,a,o,s){if(e==null)return null;if(typeof e==`string`&&e.startsWith(`$`)&&e.length>1&&m.test(e.substring(1))&&o&&o.has(e)){let t=s??new Set;return t.has(e)?(console.warn(`[rari] AppRouter: Circular $ reference detected:`,e),null):(t.add(e),H(o.get(e),n,i,a,o,t))}if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,s,c,l]=e,u=s;if(typeof s==`string`&&s.startsWith(`$`)&&a){let e=s.substring(1);if(t.test(e)){let e=a.get(s);e&&(e===`$Sreact.suspense`||e===`react.suspense`?u=`Suspense`:console.warn(`[rari] AppRouter: Unknown symbol:`,e))}}if(u===`Suspense`||s===`Suspense`){let e=he(l,n,i,a,o);return r.createElement(r.Suspense,c?{...e,key:c}:e)}if(typeof u==`string`&&u.startsWith(`$`)&&te.test(u)){let e=n.get(u);if(!e)return console.warn(`[rari] AppRouter: Module not found for reference:`,u,`Available modules:`,Array.from(n.keys())),null;let t=globalThis[`~clientComponents`]?.[e.id]?.component;if(!t)return console.warn(`[rari] AppRouter: Component not loaded:`,e.id),null;if(typeof t!=`function`)return null;let s=c||`fallback-${u}-${se.current++}`,d={...l,children:l.children===void 0?void 0:H(l.children,n,i,a,o)};return r.createElement(t,{key:s,...d})}if(!u||typeof u!=`string`&&typeof u!=`function`||typeof u==`string`&&u.startsWith(`$`))return null;let d=he(l,n,i,a,o);return r.createElement(u,c?{...d,key:c}:d)}return e.map((e,t)=>{let s=H(e,n,i,a,o);if(s==null)return null;if(typeof s==`object`&&r.isValidElement(s)&&!s.key){let n=typeof e==`object`&&e?fe(e):`primitive`,i=`rsc-${Array.isArray(e)&&e[0]===`$`&&e[1]?String(e[1]):`unknown`}-${n}-${t}`;return r.createElement(r.Fragment,{key:i},s)}return s}).filter(e=>e!=null)}return e}let U=o(new Set),W=o(new Map),G=o(new Map),K=o(new Map),q=o(new Map);function pe(e){if(!q.current.has(e)){let t=new Promise(()=>{});q.current.set(e,{promise:t,timestamp:Date.now()})}return q.current.get(e).promise}function J(){q.current.clear(),U.current.clear()}function me(){let e=Date.now(),t=[];q.current.forEach((n,r)=>{e-n.timestamp>3e4&&t.push(r)}),t.forEach(e=>{q.current.delete(e),U.current.delete(e)})}function he(e,t,n,i,a){if(!e||typeof e!=`object`)return e;a&&(W.current=a),t&&(G.current=t),i&&(K.current=i);let o={};for(let s in e)if(Object.hasOwn(e,s))if(s===`children`){let c=e.children;if(typeof c==`string`&&c.startsWith(`$`)&&c.length>1&&m.test(c.substring(1)))if(a&&a.has(c)){let e=a.get(c);U.current.delete(c),o[s]=H(e,t,n,i,a)}else U.current.add(c),o[s]=r.createElement(ae,{key:`lazy-${c}`,contentRef:c,rowsDataRef:W,modulesDataRef:G,symbolsDataRef:K,suspendingPromisesRef:q,getSuspendingPromise:pe,rscToReact:H});else o[s]=c===void 0?void 0:H(c,t,n,i,a)}else s===`dangerouslySetInnerHTML`?o[s]=e[s]:o[s]=H(e[s],t,n,i,a);return o}let Y=async e=>{await n(e,oe.current);let t=await f(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}));return{element:t,rawElement:t,wireFormat:e}},ge=e=>({element:d(e)}),_e=async(t,n)=>{let r=t||window.location.pathname,i=T.current,a=`${i}:${r}${window.location.search}`,o=E.current.get(a);if(o)return o;let s=(async()=>{try{let t=(import.meta.env.RARI_SERVER_URL||window.location.origin).replace(e,``)+r+window.location.search,a=await fetch(t,{headers:{Accept:`text/x-component`},cache:`no-store`,signal:n});if(!a.ok){let e=Error(`Failed to fetch RSC data: ${a.status} ${a.statusText}`);throw z(e,`fetch`,`HTTP ${a.status} when fetching ${t}`,window.location.pathname),e}let o=await a.text();if(de(o)&&v)return v;let s;try{s=await Y(o)}catch(e){let t=e instanceof Error?e:Error(String(e));throw z(t,`parse`,`Failed to parse RSC wire format: ${t.message}`,window.location.pathname),t}return T.current===i&&(y(s),O.current=o,V()),s}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&z(e,`network`,`Network error: ${e.message}`,window.location.pathname),e}finally{E.current.delete(a)}})();return E.current.set(a,s),s},X=o(Y),Z=o(ge),Q=o(_e);a(()=>{X.current=Y,Z.current=ge,Q.current=_e}),a(()=>{if(typeof window>`u`)return;let e=setInterval(()=>{me()},3e4),t=async e=>{let t=e.detail;if(t.navigationId!==T.current)return;M.current=!0,t.isStreaming||(C.current=null),J(),x.current={x:window.scrollX,y:window.scrollY},R();let n=null,r=null;try{t.rscResponsePromise?n=Z.current(t.rscResponsePromise):t.rscResponse?n=Z.current(Promise.resolve(t.rscResponse)):t.rscWireFormat?n=await X.current(t.rscWireFormat):t.isStreaming||(n=await Q.current(t.to,t.abortSignal))}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;r=e}if(r){console.error(`[rari] AppRouter: Navigation failed:`,r),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:t.from,to:t.to,error:r,navigationId:t.navigationId}})),k.current>=3&&B();return}if(!n&&t.isStreaming&&T.current===t.navigationId){L.current=t;return}n&&T.current===t.navigationId&&(y(n),t.rscWireFormat&&(O.current=t.rscWireFormat),V(),b(e=>e+1),j(null),w.current&&w.current(t));let i=typeof window<`u`&&window.location.hash.length>0;!t.options?.historyKey&&!i&&requestAnimationFrame(()=>{t.options?.scroll!==!1&&window.scrollTo(0,0)})},n=async()=>{x.current={x:window.scrollX,y:window.scrollY},R();try{await Q.current(),b(e=>e+1),j(null)}catch(e){console.error(`HMR refetch error:`,e instanceof Error?e.message:String(e)),k.current>=3&&B()}finally{requestAnimationFrame(()=>{window.scrollTo(x.current.x,x.current.y),ue()})}},r=async()=>{try{await Q.current(),b(e=>e+1),j(null)}catch(e){console.error(`RSC invalidate error:`,e instanceof Error?e.message:String(e)),k.current>=3&&B()}},i=e=>{let t=e;if(C.current=[],oe.current.clear(),T.current=t.detail.navigationId,typeof window<`u`){let e=window;e[`~rari`]||={},e[`~rari`].navigationId=t.detail.navigationId}N.current=!1,P.current=!1,F.current=!1,I.current=Promise.resolve(),ce.current=!0,le.current=!1,L.current=null},a=async()=>{try{await Q.current(),j(null)}catch(e){console.error(`Manifest update error:`,e instanceof Error?e.message:String(e)),k.current>=3&&B()}},o=async()=>{if(!C.current||C.current.length===0||le.current)return;let e=T.current,t=[...C.current],n=t.some(e=>{let t=e.indexOf(`:`),n=t>0?e.substring(0,t).trim():``,r=t>0?e.substring(t+1):``;return m.test(n)&&h(r)}),r=t.some(e=>{let n=e.indexOf(`:`),r=n>0?e.substring(0,n).trim():``,i=n>0?e.substring(n+1):``;return!m.test(r)||!h(i)?!1:t.some(e=>{let t=e.indexOf(`:`),n=t>0?e.substring(0,t).trim():``,i=t>0?e.substring(t+1):``;return!m.test(n)||!h(i)||re(i)?!1:RegExp(`"?\\$L?${r}"?(?![0-9a-fA-F])`).test(i)})});if(!n&&!r)return;if(!N.current&&n&&!r&&(N.current=!0,t.some(e=>e.includes(`"$Sreact.suspense"`)||e.includes(`react.suspense`)))){try{let n=t.filter(e=>{let n=e.indexOf(`:`),i=n>0?e.substring(0,n).trim():``,a=RegExp(`"\\$L?${i}"(?![0-9a-fA-F])`);return!r||!t.some(e=>a.test(e))}),i=await X.current(n.join(`
6
- `));T.current===e&&(y(i),b(e=>e+1))}catch(e){console.error(`[rari] Failed to parse shell payload:`,e),N.current=!1,I.current=Promise.resolve()}return}let i=t.some(e=>e.includes(`"$Sreact.suspense"`)||e.includes(`react.suspense`));if(!(!r&&i&&!F.current)&&!P.current){N.current=!0;try{let n=await X.current(t.join(`
7
- `));if((i||r)&&(await ne(50),T.current===e&&!P.current)){let n=C.current?[...C.current]:t,r=await X.current(n.join(`
8
- `));T.current===e&&(P.current=!0,y(r),b(e=>e+1),L.current&&w.current&&(w.current(L.current),L.current=null),F.current&&(C.current=null))}if(T.current!==e||P.current)return;let a=C.current?[...C.current]:t;if(n=await X.current(a.join(`
9
- `)),T.current!==e||P.current)return;y(n),b(e=>e+1),L.current&&w.current&&(w.current(L.current),L.current=null),F.current&&(P.current=!0,C.current=null)}catch(e){console.error(`Process rows error:`,e instanceof Error?e.message:String(e))}}},s=e=>{let t=e,n=t.detail.rscRow,r=t.detail.navigationId;if(!n||!n.trim()||!C.current)return;let i=T.current;if(!(r==null||r!==i)){if(n.trim()===`STREAM_COMPLETE`){F.current=!0,I.current=I.current.then(()=>{if(T.current===i)return o()});return}C.current.push(n),I.current=I.current.then(()=>{if(T.current===i)return o()})}};return window.addEventListener(`rari:navigation-start`,i),window.addEventListener(`rari:navigate`,t),window.addEventListener(`rari:app-router-rerender`,n),window.addEventListener(`rari:rsc-invalidate`,r),window.addEventListener(`rari:app-router-manifest-updated`,a),window.addEventListener(`rari:rsc-row`,s),()=>{clearInterval(e),J(),window.removeEventListener(`rari:navigation-start`,i),window.removeEventListener(`rari:navigate`,t),window.removeEventListener(`rari:app-router-rerender`,n),window.removeEventListener(`rari:rsc-invalidate`,r),window.removeEventListener(`rari:app-router-manifest-updated`,a),window.removeEventListener(`rari:rsc-row`,s)}},[]),a(()=>{if(!(typeof window>`u`)&&window.location.hash&&v&&M.current){let e=window.location.hash.slice(1);requestAnimationFrame(()=>{requestAnimationFrame(()=>{let t=document.getElementById(e);t&&(t.scrollIntoView({behavior:`instant`,block:`start`}),M.current=!1)})})}},[v]);let ve=()=>{window.location.reload()},ye=()=>{j(null)},be=e=>{if(!e||typeof e!=`object`)return null;if(e.type===`html`&&e.props?.children){let t=Array.isArray(e.props.children)?e.props.children:[e.props.children];for(let e of t)if(e&&typeof e==`object`&&e.type===`body`)return e.props?.children??null}return e},$=p;if(v?.element!=null)if(v.element&&typeof v.element==`object`&&`status`in v.element){let e=v.element.status;$=e===`fulfilled`?v.element.value:e===`rejected`?p:r.use(v.element)}else $=be(v.element)??v.element;return Array.isArray($)&&$.length===1&&r.isValidElement($[0])?$=$[0]:Array.isArray($)&&$.length>0&&$.every(e=>r.isValidElement(e)||e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&($=r.createElement(r.Fragment,null,...$)),u(c,{children:[A&&u(`div`,{style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,padding:`24px`,background:`rgba(220, 38, 38, 0.95)`,color:`white`,borderRadius:`8px`,fontSize:`14px`,zIndex:1e4,maxWidth:`500px`,boxShadow:`0 4px 6px rgba(0, 0, 0, 0.3)`},children:[l(`div`,{style:{marginBottom:`16px`,fontWeight:`bold`,fontSize:`16px`},children:`⚠️ HMR Update Failed`}),u(`div`,{style:{marginBottom:`12px`,opacity:.9},children:[A.type===`fetch`&&`Failed to fetch updated content from server.`,A.type===`parse`&&`Failed to parse server response.`,A.type===`stale`&&`Server returned stale content.`,A.type===`network`&&`Network error occurred.`]}),l(`div`,{style:{marginBottom:`16px`,fontSize:`12px`,opacity:.8,fontFamily:`monospace`},children:A.details}),u(`div`,{style:{marginBottom:`12px`,fontSize:`12px`,opacity:.7},children:[`Consecutive failures:`,` `,k.current,` `,`/`,` `,3]}),u(`div`,{style:{display:`flex`,gap:`8px`},children:[l(`button`,{onClick:ve,type:`button`,style:{padding:`8px 16px`,background:`white`,color:`#dc2626`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontWeight:`bold`,fontSize:`14px`},children:`Refresh Page`}),l(`button`,{onClick:ye,type:`button`,style:{padding:`8px 16px`,background:`rgba(255, 255, 255, 0.2)`,color:`white`,border:`1px solid rgba(255, 255, 255, 0.3)`,borderRadius:`4px`,cursor:`pointer`,fontSize:`14px`},children:`Dismiss`})]}),l(`div`,{style:{marginTop:`12px`,fontSize:`11px`,opacity:.6},children:`Check the console for detailed error logs.`})]}),l(i,{fallback:l(ie,{}),children:$})]})}export{g as AppRouterProvider};
1
+ "use client";import{x as e,y as t}from"../regex-constants-CmOAY1_W.mjs";import{t as n}from"../preload-modules-C1zd75Lc.mjs";import*as r from"react";import{Suspense as i,useEffect as a,useRef as o,useState as s}from"react";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";import{createFromFetch as d,createFromReadableStream as f}from"virtual:react-flight-client";const ee=/"timestamp":(\d+)/,p=/^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)$/,m=/^[0-9a-f]+$/i,te=/^\$L?[0-9a-f]+$/i;function ne(e){return new Promise(t=>{setTimeout(t,e)})}function h(e){if(!e||e.length===0)return!1;let t=e.charAt(0),n=e.charCodeAt(0);return e.startsWith(`I[`)||e.startsWith(`I{`)||e.startsWith(`"$S`)?!1:!!(n===84||t===`[`||t===`{`||e.startsWith(`E{`)||t===`"`||p.test(e))}function re(e){return!e||e.length===0?!1:!!(e.includes(`"fallback"`)||e.includes(`$Lfallback`)||e.startsWith(`E{`))}function ie({contentRef:e,rowsDataRef:t,modulesDataRef:n,symbolsDataRef:i,suspendingPromisesRef:a,getSuspendingPromise:o,rscToReact:s}){let c=t.current,l=n.current,u=i.current,d=a.current,f=c.has(e);if(r.useEffect(()=>{f&&d.has(e)&&d.delete(e)},[e,f,d]),f)return s(c.get(e),l,void 0,u,c);throw o(e)}function g({children:p,initialPayload:g,onNavigate:_}){let[v,y]=s(g),b=s(0)[1],x=o({x:0,y:0}),S=o(new Map),C=o(null),w=o(new Set),T=o(_),E=o(0),D=o(new Map),O=o([]),k=o(null),A=o(0),[j,M]=s(null),N=o(typeof window<`u`&&window.location.hash.length>0),ae=o(0),P=o(!1),F=o(!1),I=o(!1),L=o(Promise.resolve()),oe=o(!1),se=o(!!g),R=o(null);a(()=>{T.current=_},[_]),a(()=>{if(v?.element!=null&&v.element&&typeof v.element==`object`&&`status`in v.element&&v.element.status===`rejected`){let e=v.element.reason;e&&console.error(`[rari] AppRouter: Flight payload rejected:`,e)}},[v]);let ce=()=>{if(typeof document>`u`)return;let e=document.querySelectorAll(`form`);S.current.clear(),e.forEach((e,t)=>{let n=new FormData(e);S.current.set(`form-${t}`,n)})},le=()=>{typeof document>`u`||document.querySelectorAll(`form`).forEach((e,t)=>{let n=S.current.get(`form-${t}`);n&&n.forEach((t,n)=>{let r=e.elements.namedItem(n);r&&(r.type===`checkbox`||r.type===`radio`?r.checked=t===`on`:r.value=t)})})},z=(e,t,n,r)=>{let i={timestamp:Date.now(),error:e,type:t,details:n,filePath:r};O.current.push(i),A.current+=1,O.current.length>10&&O.current.shift(),A.current>=2&&M(i),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:hmr-failure`,{detail:i}))},B=()=>{setTimeout(()=>{window.location.reload()},1e3)},V=()=>{A.current>0&&(A.current=0)},ue=e=>{if(!k.current)return!1;if(e===k.current)return!0;let t=e.match(ee);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1};function de(e){let t;try{t=JSON.stringify(e)}catch{try{let n=new WeakSet;t=JSON.stringify(e,(e,t)=>{if(typeof t==`object`&&t){if(n.has(t))return`[Circular]`;n.add(t)}return t})}catch{t=`[Unstringifiable:${typeof e}:${String(e).substring(0,50)}]`}}let n=0;for(let e=0;e<t.length;e++){let r=t.charCodeAt(e);n=(n<<5)-n+r,n&=n}return Math.abs(n).toString(36)}function H(e,n,i,a,o,s){if(e==null)return null;if(typeof e==`string`&&e.startsWith(`$`)&&e.length>1&&m.test(e.substring(1))&&o&&o.has(e)){let t=s??new Set;return t.has(e)?(console.warn(`[rari] AppRouter: Circular $ reference detected:`,e),null):(t.add(e),H(o.get(e),n,i,a,o,t))}if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,s,c,l]=e,u=s;if(typeof s==`string`&&s.startsWith(`$`)&&a){let e=s.substring(1);if(t.test(e)){let e=a.get(s);e&&(e===`$Sreact.suspense`||e===`react.suspense`?u=`Suspense`:console.warn(`[rari] AppRouter: Unknown symbol:`,e))}}if(u===`Suspense`||s===`Suspense`){let e=he(l,n,i,a,o);return r.createElement(r.Suspense,c?{...e,key:c}:e)}if(typeof u==`string`&&u.startsWith(`$`)&&te.test(u)){let e=n.get(u);if(!e)return console.warn(`[rari] AppRouter: Module not found for reference:`,u,`Available modules:`,Array.from(n.keys())),null;let t=globalThis[`~clientComponents`]?.[e.id]?.component;if(!t)return console.warn(`[rari] AppRouter: Component not loaded:`,e.id),null;if(typeof t!=`function`)return null;let s=c||`fallback-${u}-${ae.current++}`,d={...l,children:l.children===void 0?void 0:H(l.children,n,i,a,o)};return r.createElement(t,{key:s,...d})}if(!u||typeof u!=`string`&&typeof u!=`function`||typeof u==`string`&&u.startsWith(`$`))return null;let d=he(l,n,i,a,o);return r.createElement(u,c?{...d,key:c}:d)}return e.map((e,t)=>{let s=H(e,n,i,a,o);if(s==null)return null;if(typeof s==`object`&&r.isValidElement(s)&&!s.key){let n=typeof e==`object`&&e?de(e):`primitive`,i=`rsc-${Array.isArray(e)&&e[0]===`$`&&e[1]?String(e[1]):`unknown`}-${n}-${t}`;return r.createElement(r.Fragment,{key:i},s)}return s}).filter(e=>e!=null)}return e}let U=o(new Set),W=o(new Map),G=o(new Map),K=o(new Map),q=o(new Map);function fe(e){if(!q.current.has(e)){let t=new Promise(()=>{});q.current.set(e,{promise:t,timestamp:Date.now()})}return q.current.get(e).promise}function pe(){q.current.clear(),U.current.clear()}function me(){let e=Date.now(),t=[];q.current.forEach((n,r)=>{e-n.timestamp>3e4&&t.push(r)}),t.forEach(e=>{q.current.delete(e),U.current.delete(e)})}function he(e,t,n,i,a){if(!e||typeof e!=`object`)return e;a&&(W.current=a),t&&(G.current=t),i&&(K.current=i);let o={};for(let s in e)if(Object.hasOwn(e,s))if(s===`children`){let c=e.children;if(typeof c==`string`&&c.startsWith(`$`)&&c.length>1&&m.test(c.substring(1)))if(a&&a.has(c)){let e=a.get(c);U.current.delete(c),o[s]=H(e,t,n,i,a)}else U.current.add(c),o[s]=r.createElement(ie,{key:`lazy-${c}`,contentRef:c,rowsDataRef:W,modulesDataRef:G,symbolsDataRef:K,suspendingPromisesRef:q,getSuspendingPromise:fe,rscToReact:H});else o[s]=c===void 0?void 0:H(c,t,n,i,a)}else s===`dangerouslySetInnerHTML`?o[s]=e[s]:o[s]=H(e[s],t,n,i,a);return o}let J=async e=>{await n(e,w.current);let t=await f(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}));return{element:t,rawElement:t,wireFormat:e}},Y=e=>({element:d(e)}),ge=async(t,n)=>{let r=t||window.location.pathname,i=E.current,a=`${i}:${r}${window.location.search}`,o=D.current.get(a);if(o)return o;let s=(async()=>{try{let t=(import.meta.env.RARI_SERVER_URL||window.location.origin).replace(e,``)+r+window.location.search,a=await fetch(t,{headers:{Accept:`text/x-component`},cache:`no-store`,signal:n});if(!a.ok){let e=Error(`Failed to fetch RSC data: ${a.status} ${a.statusText}`);throw z(e,`fetch`,`HTTP ${a.status} when fetching ${t}`,window.location.pathname),e}let o=await a.text();if(ue(o)&&v)return v;let s;try{s=await J(o)}catch(e){let t=e instanceof Error?e:Error(String(e));throw z(t,`parse`,`Failed to parse RSC wire format: ${t.message}`,window.location.pathname),t}return E.current===i&&(y(s),k.current=o,V()),s}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&z(e,`network`,`Network error: ${e.message}`,window.location.pathname),e}finally{D.current.delete(a)}})();return D.current.set(a,s),s},X=o(J),Z=o(Y),Q=o(ge);a(()=>{X.current=J,Z.current=Y,Q.current=ge}),a(()=>{if(typeof window>`u`)return;let e=setInterval(()=>{me()},3e4),t=async e=>{let t=e.detail;if(t.navigationId!==E.current)return;N.current=!0,t.isStreaming||(C.current=null),pe(),x.current={x:window.scrollX,y:window.scrollY},ce();let n=null,r=null;try{t.rscResponsePromise?n=Z.current(t.rscResponsePromise):t.rscResponse?n=Z.current(Promise.resolve(t.rscResponse)):t.rscWireFormat?n=await X.current(t.rscWireFormat):t.isStreaming||(n=await Q.current(t.to,t.abortSignal))}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;r=e}if(r){console.error(`[rari] AppRouter: Navigation failed:`,r),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:t.from,to:t.to,error:r,navigationId:t.navigationId}})),A.current>=3&&B();return}if(!n&&t.isStreaming&&E.current===t.navigationId){R.current=t;return}n&&E.current===t.navigationId&&(y(n),t.rscWireFormat&&(k.current=t.rscWireFormat),V(),b(e=>e+1),M(null),T.current&&T.current(t));let i=typeof window<`u`&&window.location.hash.length>0;!t.options?.historyKey&&!i&&requestAnimationFrame(()=>{t.options?.scroll!==!1&&window.scrollTo(0,0)})},n=async()=>{x.current={x:window.scrollX,y:window.scrollY},ce();try{await Q.current(),b(e=>e+1),M(null)}catch(e){console.error(`HMR refetch error:`,e instanceof Error?e.message:String(e)),A.current>=3&&B()}finally{requestAnimationFrame(()=>{window.scrollTo(x.current.x,x.current.y),le()})}},r=async()=>{try{await Q.current(),b(e=>e+1),M(null)}catch(e){console.error(`RSC invalidate error:`,e instanceof Error?e.message:String(e)),A.current>=3&&B()}},i=e=>{let t=e;if(C.current=[],w.current.clear(),E.current=t.detail.navigationId,typeof window<`u`){let e=window;e[`~rari`]||={},e[`~rari`].navigationId=t.detail.navigationId}P.current=!1,F.current=!1,I.current=!1,L.current=Promise.resolve(),oe.current=!0,se.current=!1,R.current=null},a=async()=>{try{await Q.current(),M(null)}catch(e){console.error(`Manifest update error:`,e instanceof Error?e.message:String(e)),A.current>=3&&B()}},o=async()=>{if(!C.current||C.current.length===0||se.current)return;let e=E.current,t=[...C.current],n=t.some(e=>{let t=e.indexOf(`:`),n=t>0?e.substring(0,t).trim():``,r=t>0?e.substring(t+1):``;return m.test(n)&&h(r)}),r=t.some(e=>{let n=e.indexOf(`:`),r=n>0?e.substring(0,n).trim():``,i=n>0?e.substring(n+1):``;return!m.test(r)||!h(i)?!1:t.some(e=>{let t=e.indexOf(`:`),n=t>0?e.substring(0,t).trim():``,i=t>0?e.substring(t+1):``;return!m.test(n)||!h(i)||re(i)?!1:RegExp(`"?\\$L?${r}"?(?![0-9a-fA-F])`).test(i)})});if(!n&&!r)return;if(!P.current&&n&&!r&&(P.current=!0,t.some(e=>e.includes(`"$Sreact.suspense"`)||e.includes(`react.suspense`)))){try{let n=t.filter(e=>{let n=e.indexOf(`:`),i=n>0?e.substring(0,n).trim():``,a=RegExp(`"\\$L?${i}"(?![0-9a-fA-F])`);return!r||!t.some(e=>a.test(e))}),i=await X.current(n.join(`
2
+ `));E.current===e&&(y(i),b(e=>e+1))}catch(e){console.error(`[rari] Failed to parse shell payload:`,e),P.current=!1,L.current=Promise.resolve()}return}let i=t.some(e=>e.includes(`"$Sreact.suspense"`)||e.includes(`react.suspense`));if(!(!r&&i&&!I.current)&&!F.current){P.current=!0;try{let n=await X.current(t.join(`
3
+ `));if((i||r)&&(await ne(50),E.current===e&&!F.current)){let n=C.current?[...C.current]:t,r=await X.current(n.join(`
4
+ `));E.current===e&&(F.current=!0,y(r),b(e=>e+1),R.current&&T.current&&(T.current(R.current),R.current=null),I.current&&(C.current=null))}if(E.current!==e||F.current)return;let a=C.current?[...C.current]:t;if(n=await X.current(a.join(`
5
+ `)),E.current!==e||F.current)return;y(n),b(e=>e+1),R.current&&T.current&&(T.current(R.current),R.current=null),I.current&&(F.current=!0,C.current=null)}catch(e){console.error(`Process rows error:`,e instanceof Error?e.message:String(e))}}},s=e=>{let t=e,n=t.detail.rscRow,r=t.detail.navigationId;if(!n||!n.trim()||!C.current)return;let i=E.current;if(!(r==null||r!==i)){if(n.trim()===`STREAM_COMPLETE`){I.current=!0,L.current=L.current.then(()=>{if(E.current===i)return o()});return}C.current.push(n),L.current=L.current.then(()=>{if(E.current===i)return o()})}};return window.addEventListener(`rari:navigation-start`,i),window.addEventListener(`rari:navigate`,t),window.addEventListener(`rari:app-router-rerender`,n),window.addEventListener(`rari:rsc-invalidate`,r),window.addEventListener(`rari:app-router-manifest-updated`,a),window.addEventListener(`rari:rsc-row`,s),()=>{clearInterval(e),pe(),window.removeEventListener(`rari:navigation-start`,i),window.removeEventListener(`rari:navigate`,t),window.removeEventListener(`rari:app-router-rerender`,n),window.removeEventListener(`rari:rsc-invalidate`,r),window.removeEventListener(`rari:app-router-manifest-updated`,a),window.removeEventListener(`rari:rsc-row`,s)}},[]),a(()=>{if(!(typeof window>`u`)&&window.location.hash&&v&&N.current){let e=window.location.hash.slice(1);requestAnimationFrame(()=>{requestAnimationFrame(()=>{let t=document.getElementById(e);t&&(t.scrollIntoView({behavior:`instant`,block:`start`}),N.current=!1)})})}},[v]);let _e=()=>{window.location.reload()},ve=()=>{M(null)},ye=e=>{if(!e||typeof e!=`object`)return null;if(e.type===`html`&&e.props?.children){let t=Array.isArray(e.props.children)?e.props.children:[e.props.children];for(let e of t)if(e&&typeof e==`object`&&e.type===`body`)return e.props?.children??null}return e},$=p;if(v?.element!=null)if(v.element&&typeof v.element==`object`&&`status`in v.element){let e=v.element.status;$=e===`fulfilled`?v.element.value:e===`rejected`?p:r.use(v.element)}else $=ye(v.element)??v.element;return Array.isArray($)&&$.length===1&&r.isValidElement($[0])?$=$[0]:Array.isArray($)&&$.length>0&&$.every(e=>r.isValidElement(e)||e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&($=r.createElement(r.Fragment,null,...$)),u(c,{children:[j&&u(`div`,{style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,padding:`24px`,background:`rgba(220, 38, 38, 0.95)`,color:`white`,borderRadius:`8px`,fontSize:`14px`,zIndex:1e4,maxWidth:`500px`,boxShadow:`0 4px 6px rgba(0, 0, 0, 0.3)`},children:[l(`div`,{style:{marginBottom:`16px`,fontWeight:`bold`,fontSize:`16px`},children:`⚠️ HMR Update Failed`}),u(`div`,{style:{marginBottom:`12px`,opacity:.9},children:[j.type===`fetch`&&`Failed to fetch updated content from server.`,j.type===`parse`&&`Failed to parse server response.`,j.type===`stale`&&`Server returned stale content.`,j.type===`network`&&`Network error occurred.`]}),l(`div`,{style:{marginBottom:`16px`,fontSize:`12px`,opacity:.8,fontFamily:`monospace`},children:j.details}),u(`div`,{style:{marginBottom:`12px`,fontSize:`12px`,opacity:.7},children:[`Consecutive failures:`,` `,A.current,` `,`/`,` `,3]}),u(`div`,{style:{display:`flex`,gap:`8px`},children:[l(`button`,{onClick:_e,type:`button`,style:{padding:`8px 16px`,background:`white`,color:`#dc2626`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontWeight:`bold`,fontSize:`14px`},children:`Refresh Page`}),l(`button`,{onClick:ve,type:`button`,style:{padding:`8px 16px`,background:`rgba(255, 255, 255, 0.2)`,color:`white`,border:`1px solid rgba(255, 255, 255, 0.3)`,borderRadius:`4px`,cursor:`pointer`,fontSize:`14px`},children:`Dismiss`})]}),l(`div`,{style:{marginTop:`12px`,fontSize:`11px`,opacity:.6},children:`Check the console for detailed error logs.`})]}),l(i,{fallback:null,children:$})]})}export{g as AppRouterProvider};
@@ -1,4 +1,4 @@
1
- import"../regex-constants-CmOAY1_W.mjs";import{n as e,r as t,t as n}from"../get-client-component-BjjGTgmG.mjs";import{t as r}from"../preload-modules-DcD-Wjko.mjs";import*as i from"react";import"react";import{ClientRouter as a}from"rari/client";import{RouterProvider as o}from"rari/router";import{createRoot as s}from"react-dom/client";import{AppRouterProvider as c}from"virtual:app-router-provider";import{createFromReadableStream as l}from"virtual:react-flight-client";import"virtual:rsc-integration.ts";const u=/^\$L?[0-9a-f]+$/i;function d(e,t){let n=e.get(t);if(n)return n;let r=t.startsWith(`$L`)?`$${t.slice(2)}`:`$L${t.slice(1)}`;return e.get(r)}function f(){return globalThis[`~rari`]}function p(){return globalThis}function m(){return window}f()===void 0&&(globalThis[`~rari`]={}),f().AppRouterProvider=c,f().ClientRouter=a,f().getClientComponent=n;async function h(t){try{await e(t)}catch(e){console.error(`[rari] Failed to preload component ${t}:`,e)}}
1
+ import"../regex-constants-CmOAY1_W.mjs";import{n as e,r as t,t as n}from"../get-client-component-DOUGb2xc.mjs";import{t as r}from"../preload-modules-C1zd75Lc.mjs";import*as i from"react";import"react";import{ClientRouter as a}from"rari/client";import{RouterProvider as o}from"rari/router";import{createRoot as s}from"react-dom/client";import{AppRouterProvider as c}from"virtual:app-router-provider";import{createFromReadableStream as l}from"virtual:react-flight-client";import"virtual:rsc-integration.ts";const u=/^\$L?[0-9a-f]+$/i;function d(e,t){let n=e.get(t);if(n)return n;let r=t.startsWith(`$L`)?`$${t.slice(2)}`:`$L${t.slice(1)}`;return e.get(r)}function f(){return globalThis[`~rari`]}function p(){return globalThis}function m(){return window}f()===void 0&&(globalThis[`~rari`]={}),f().AppRouterProvider=c,f().ClientRouter=a,f().getClientComponent=n;async function h(t){try{await e(t)}catch(e){console.error(`[rari] Failed to preload component ${t}:`,e)}}
2
2
  /*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */
3
3
  f().preloadClientComponent=h,p()[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={}),p()[`~clientComponentPaths`]===void 0&&(globalThis[`~clientComponentPaths`]={});
4
4
  /*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */
@@ -1,4 +1,4 @@
1
- import { r as ModuleData } from "../types-DDyPWiSH.mjs";
1
+ import { r as ModuleData } from "../types-R2tg78dF.mjs";
2
2
 
3
3
  //#region src/runtime/rsc-client-runtime.d.ts
4
4
  declare function registerClientComponent(componentFunction: any, id: string, exportName: string): void;
@@ -1,2 +1,2 @@
1
- import{f as e,g as t,h as n,m as r,n as i,p as a,u as o,v as s}from"../regex-constants-CmOAY1_W.mjs";import{t as c}from"../get-client-component-BjjGTgmG.mjs";import{createFromFetch as l,createFromReadableStream as u}from"./vendor/react-flight-client/index.mjs";import*as d from"react";import{Suspense as f,cloneElement as p,createElement as m,isValidElement as h,use as g,useEffect as _,useState as v}from"react";import*as y from"react-dom/client";function b(){return import.meta.env?.RARI_SERVER_URL?import.meta.env.RARI_SERVER_URL:typeof window<`u`?window.location.origin:`http://localhost:3000`}globalThis[`~rari`]===void 0&&(globalThis[`~rari`]={}),globalThis[`~rari`].isDevelopment=process.env.NODE_ENV!==`production`,globalThis[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={}),globalThis[`~clientComponentNames`]===void 0&&(globalThis[`~clientComponentNames`]={}),globalThis[`~clientComponentPaths`]===void 0&&(globalThis[`~clientComponentPaths`]={}),typeof window<`u`&&(window[`~rari`]||(window[`~rari`]=globalThis[`~rari`]),window[`~rari`].streaming||(window[`~rari`].streaming={bufferedRows:[],bufferedEvents:[]}),window[`~rari`].streaming.bufferedEvents||(window[`~rari`].streaming.bufferedEvents=[]),window[`~rari`].boundaryModules||(window[`~rari`].boundaryModules=new Map),window[`~rari`].pendingBoundaryHydrations||(window[`~rari`].pendingBoundaryHydrations=new Map));function x(e){if(!e.startsWith(`I{`))return null;try{let t=JSON.parse(e.substring(1));if(typeof t==`object`&&t&&!Array.isArray(t)){if(typeof t.id!=`string`)return console.error(`[rari] Invalid import data: id must be a string:`,t),null;let e;if(typeof t.chunks==`string`)e=[t.chunks];else if(Array.isArray(t.chunks))e=t.chunks.filter(e=>typeof e==`string`);else return console.error(`[rari] Invalid import data: chunks must be a string or array:`,t),null;return e.length===0?(console.error(`[rari] Invalid import data: chunks array is empty:`,t),null):{id:t.id,chunks:e,name:t.name||`default`}}console.error(`[rari] Invalid import data format, expected object:`,t)}catch(t){console.error(`[rari] Failed to parse import row:`,e,t)}return null}if(typeof window<`u`){globalThis[`~rari`].processBoundaryUpdate=function(o,s,c){let l=document.querySelector(`[data-boundary-id="${o}"]`);if(l)try{let u=s.indexOf(`:`);if(u===-1){console.warn(`[rari] Invalid RSC row format (no colon):`,s);return}let d=s.substring(0,u),f=s.substring(u+1),p=x(f);if(p){let e=`$L${d}`;window[`~rari`].boundaryModules?.set(e,p);return}let m;try{m=JSON.parse(f)}catch(e){console.error(`[rari] Failed to parse RSC content:`,f,e);return}function h(e){if(!e)return!1;if(typeof e==`string`)return e.startsWith(`$L`);if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,t]=e;if(typeof t==`string`&&t.startsWith(`$L`))return!0;let n=e[3];if(n&&n.children)return h(n.children)}return e.some(e=>h(e))}return!1}if(h(m)){if(window[`~rari`].pendingBoundaryHydrations?.set(o,{content:m,element:l,rowId:c}),globalThis[`~rari`].hydrateClientComponents){let e=globalThis[`~rari`].hydrateClientComponents;e(o,m,l)}return}function g(o){let s=i=>i.replace(e,`&amp;`).replace(n,`&lt;`).replace(r,`&gt;`).replace(t,`&quot;`).replace(a,`&#39;`),c=new Set(`div.span.p.ul.ol.li.a.img.section.article.header.footer.nav.main.aside.strong.em.b.i.button.input.label.form.select.option.textarea.h1.h2.h3.h4.h5.h6.table.thead.tbody.tr.td.th.code.pre.blockquote.hr.br.small.mark.del.ins.sub.sup.abbr.time.figure.figcaption.details.summary.dialog.menu.menuitem.canvas.svg.path.circle.rect.line.polygon.polyline.ellipse.text.g.defs.use.symbol.clippath.mask.pattern.lineargradient.radialgradient.stop.image.video.audio.source.track.picture.dl.dt.dd.fieldset.legend`.split(`.`));if(!o)return``;if(typeof o==`string`||typeof o==`number`)return s(String(o));if(Array.isArray(o)){if(o.length>=4&&o[0]===`$`){let[,e,,t]=o,n=typeof e==`string`&&c.has(e.toLowerCase())?e.toLowerCase():`div`,r=null,a=``,l=``;if(t){for(let[e,n]of Object.entries(t))if(e===`dangerouslySetInnerHTML`&&n&&typeof n==`object`&&`__html`in n)r=n.__html;else if(e!==`children`&&e!==`~boundaryId`){let t=e===`className`?`class`:e;if(e===`style`&&typeof n==`object`&&n){let e=Object.entries(n).map(([e,t])=>`${e.replace(i,`$1-$2`).toLowerCase()}:${String(t)}`).join(`;`);l+=` style="${s(e)}"`}else typeof n==`string`||typeof n==`number`?l+=` ${t}="${s(String(n))}"`:typeof n==`boolean`&&n&&(l+=` ${t}`)}r===null&&t.children&&(a=g(t.children))}return`<${n}${l}>${r===null?a:r}</${n}>`}return o.map(g).join(``)}return``}let _=g(m);if(_){let e=document.contains(l);e&&(l.innerHTML=_,l.classList.add(`rari-boundary-resolved`)),window.dispatchEvent(new CustomEvent(`rari:boundary-resolved`,{detail:{boundaryId:o,rscRow:s,rowId:c,element:l,wasAttached:e}}))}}catch(e){console.error(`[rari] Error processing boundary update:`,e)}};let o=window,s=globalThis;o[`~rari`].streaming?.bufferedEvents&&o[`~rari`].streaming.bufferedEvents.length>0&&(o[`~rari`].streaming.bufferedEvents.forEach(e=>{let{boundaryId:t,rscRow:n,rowId:r}=e;s[`~rari`].processBoundaryUpdate?.(t,n,r)}),o[`~rari`].streaming.bufferedEvents=[]),window.addEventListener(`rari:boundary-update`,e=>{let{boundaryId:t,rscRow:n,rowId:r}=e.detail;s[`~rari`].processBoundaryUpdate&&s[`~rari`].processBoundaryUpdate(t,n,r)})}function S(e,t,n){let r=n===`default`?e.name||t.split(`/`).pop()?.replace(o,``)||`DefaultComponent`:n,i=r,a={id:i,path:t,type:`client`,component:e,registered:!0};globalThis[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={});let s=`${t}#${n}`;globalThis[`~clientComponents`][i]=a,globalThis[`~clientComponents`][t]=a,globalThis[`~clientComponents`][s]=a,globalThis[`~clientComponentPaths`][t]=i,globalThis[`~clientComponentNames`][r]=i,e&&(e[`~isClientComponent`]=!0,e[`~clientComponentId`]=i),typeof window<`u`&&fetch(`/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:i,file_path:t,export_name:n})}).catch(e=>{console.error(`[rari] Failed to register client component with server:`,e)})}function C(e){return c(e)}function w(){let e={};for(let[t,n]of Object.entries(globalThis[`~clientComponents`]))e[t]={id:t,chunks:[n.path],name:t,async:!1,default:n.component};return e}let T=l,E=u,D=null;async function O(){return D||(D=(async()=>{try{return T=l,E=u,typeof E!=`function`&&(E=null),typeof T!=`function`&&(T=null),y}catch(e){return console.error(`Failed to load react-dom/client RSC functions:`,e),T=null,E=null,null}})(),D)}const k=new Map,A=new class{componentCache;moduleCache;inflightRequests;config;constructor(){this.componentCache=new Map,this.moduleCache=new Map,this.inflightRequests=new Map,this.config={maxRetries:5,retryDelay:500,timeout:1e4}}configure(e){this.config={...this.config,...e}}clearCache(){this.componentCache.clear(),this.moduleCache.clear(),k.clear()}async fetchServerComponent(e,t={}){let n=typeof window<`u`&&window[`~rari`]?.hmr?.refreshCounters?.[e]||0,r=`${e}:${JSON.stringify(t)}:hmr:${n}`;if(this.componentCache.has(r))return this.componentCache.get(r);if(this.inflightRequests.has(r))return this.inflightRequests.get(r);let i=this.fetchServerComponentStream(e,t);this.inflightRequests.set(r,i);try{let e=await i;return this.componentCache.set(r,e),e}finally{this.inflightRequests.delete(r)}}async fetchServerComponentStream(e,t={}){await O();let n=(()=>{let e=[`/_rari/stream`];try{if(typeof window<`u`&&(window.location.hostname===`localhost`||window.location.hostname===`127.0.0.1`)){let t=b();t&&e.push(`${t}/_rari/stream`)}}catch{}return e})(),r=null,i=null,a=async()=>{for(let r of n)try{let n=await this.fetchWithTimeout(r,{method:`POST`,headers:{"Content-Type":`application/json`,...this.buildRequestHeaders()},body:JSON.stringify({component_id:e,props:t})});if(n.ok)return n;i=Error(`HTTP ${n.status}: ${await n.text()}`)}catch(e){i=e}return null};if(r=await a(),r||=(await new Promise(e=>setTimeout(e,this.config.retryDelay)),await a()),!r)throw i||Error(`Failed to reach stream endpoint`);if(!r.ok){let e=await r.text();throw Error(`Server responded with ${r.status}: ${e}`)}let o=r.body;if(!o)throw Error(`No ReadableStream from stream response`);let s=o.getReader(),c=new TextDecoder,l=new Map,u=new Map,d=e=>{if(!m)return console.error(`React not available for RSC conversion`),null;if(!e)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,t,n,r]=e;if(t===`react.suspense`||t===`suspense`)return m(f,{fallback:d(r?.fallback)||null},r?.children?d(r.children):null);let i=r?{...r}:{};if(r?.children){let e=d(r.children);Array.isArray(e)?i.children=e.map((e,t)=>h(e)&&e.key==null?p(e,{key:t}):e):i.children=e}if(typeof t==`string`){if(t.startsWith(`$L`)){let e=l.get(t);if(e){let t=C(`${e.id}#${e.name||`default`}`);if(t)return m(t,n?{...i,key:n}:i)}return i&&i.children?i.children:null}if(t.includes(`.tsx#`)||t.includes(`.jsx#`)){let e=C(t);return e?m(e,n?{...i,key:n}:i):(console.error(`Failed to resolve client component:`,t),null)}else return i&&Object.hasOwn(i,`~boundaryId`)&&(i={...i},delete i[`~boundaryId`]),m(t,n?{...i,key:n}:i)}else console.error(`Unknown RSC element type:`,t)}return e.map(e=>d(e))}return typeof e==`object`?(console.error(`Unexpected object in RSC conversion:`,e),null):e},g=null,y=new Map,S=``,w=null,T=async()=>{try{for(;;){let{value:e,done:t}=await s.read();if(t)break;let n=c.decode(e,{stream:!0});S+=n;let r=S.split(`
1
+ import{f as e,g as t,h as n,m as r,n as i,p as a,u as o,v as s}from"../regex-constants-CmOAY1_W.mjs";import{t as c}from"../get-client-component-DOUGb2xc.mjs";import{createFromFetch as l,createFromReadableStream as u}from"./vendor/react-flight-client/index.mjs";import*as d from"react";import{Suspense as f,cloneElement as p,createElement as m,isValidElement as h,use as g,useEffect as _,useState as v}from"react";import*as y from"react-dom/client";function b(){return import.meta.env?.RARI_SERVER_URL?import.meta.env.RARI_SERVER_URL:typeof window<`u`?window.location.origin:`http://localhost:3000`}globalThis[`~rari`]===void 0&&(globalThis[`~rari`]={}),globalThis[`~rari`].isDevelopment=process.env.NODE_ENV!==`production`,globalThis[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={}),globalThis[`~clientComponentNames`]===void 0&&(globalThis[`~clientComponentNames`]={}),globalThis[`~clientComponentPaths`]===void 0&&(globalThis[`~clientComponentPaths`]={}),typeof window<`u`&&(window[`~rari`]||(window[`~rari`]=globalThis[`~rari`]),window[`~rari`].streaming||(window[`~rari`].streaming={bufferedRows:[],bufferedEvents:[]}),window[`~rari`].streaming.bufferedEvents||(window[`~rari`].streaming.bufferedEvents=[]),window[`~rari`].boundaryModules||(window[`~rari`].boundaryModules=new Map),window[`~rari`].pendingBoundaryHydrations||(window[`~rari`].pendingBoundaryHydrations=new Map));function x(e){if(!e.startsWith(`I{`))return null;try{let t=JSON.parse(e.substring(1));if(typeof t==`object`&&t&&!Array.isArray(t)){if(typeof t.id!=`string`)return console.error(`[rari] Invalid import data: id must be a string:`,t),null;let e;if(typeof t.chunks==`string`)e=[t.chunks];else if(Array.isArray(t.chunks))e=t.chunks.filter(e=>typeof e==`string`);else return console.error(`[rari] Invalid import data: chunks must be a string or array:`,t),null;return e.length===0?(console.error(`[rari] Invalid import data: chunks array is empty:`,t),null):{id:t.id,chunks:e,name:t.name||`default`}}console.error(`[rari] Invalid import data format, expected object:`,t)}catch(t){console.error(`[rari] Failed to parse import row:`,e,t)}return null}if(typeof window<`u`){globalThis[`~rari`].processBoundaryUpdate=function(o,s,c){let l=document.querySelector(`[data-boundary-id="${o}"]`);if(l)try{let u=s.indexOf(`:`);if(u===-1){console.warn(`[rari] Invalid RSC row format (no colon):`,s);return}let d=s.substring(0,u),f=s.substring(u+1),p=x(f);if(p){let e=`$L${d}`;window[`~rari`].boundaryModules?.set(e,p);return}let m;try{m=JSON.parse(f)}catch(e){console.error(`[rari] Failed to parse RSC content:`,f,e);return}function h(e){if(!e)return!1;if(typeof e==`string`)return e.startsWith(`$L`);if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,t]=e;if(typeof t==`string`&&t.startsWith(`$L`))return!0;let n=e[3];if(n&&n.children)return h(n.children)}return e.some(e=>h(e))}return!1}if(h(m)){if(window[`~rari`].pendingBoundaryHydrations?.set(o,{content:m,element:l,rowId:c}),globalThis[`~rari`].hydrateClientComponents){let e=globalThis[`~rari`].hydrateClientComponents;e(o,m,l)}return}function g(o){let s=i=>i.replace(e,`&amp;`).replace(n,`&lt;`).replace(r,`&gt;`).replace(t,`&quot;`).replace(a,`&#39;`),c=new Set(`div.span.p.ul.ol.li.a.img.section.article.header.footer.nav.main.aside.strong.em.b.i.button.input.label.form.select.option.textarea.h1.h2.h3.h4.h5.h6.table.thead.tbody.tr.td.th.code.pre.blockquote.hr.br.small.mark.del.ins.sub.sup.abbr.time.figure.figcaption.details.summary.dialog.menu.menuitem.canvas.svg.path.circle.rect.line.polygon.polyline.ellipse.text.g.defs.use.symbol.clippath.mask.pattern.lineargradient.radialgradient.stop.image.video.audio.source.track.picture.dl.dt.dd.fieldset.legend`.split(`.`));if(!o)return``;if(typeof o==`string`||typeof o==`number`)return s(String(o));if(Array.isArray(o)){if(o.length>=4&&o[0]===`$`){let[,e,,t]=o,n=typeof e==`string`&&c.has(e.toLowerCase())?e.toLowerCase():`div`,r=null,a=``,l=``;if(t){for(let[e,n]of Object.entries(t))if(e===`dangerouslySetInnerHTML`&&n&&typeof n==`object`&&`__html`in n)r=n.__html;else if(e!==`children`&&e!==`~boundaryId`){let t=e===`className`?`class`:e;if(e===`style`&&typeof n==`object`&&n){let e=Object.entries(n).map(([e,t])=>`${e.replace(i,`$1-$2`).toLowerCase()}:${String(t)}`).join(`;`);l+=` style="${s(e)}"`}else typeof n==`string`||typeof n==`number`?l+=` ${t}="${s(String(n))}"`:typeof n==`boolean`&&n&&(l+=` ${t}`)}r===null&&t.children&&(a=g(t.children))}return`<${n}${l}>${r===null?a:r}</${n}>`}return o.map(g).join(``)}return``}let _=g(m);if(_){let e=document.contains(l);e&&(l.innerHTML=_,l.classList.add(`rari-boundary-resolved`)),window.dispatchEvent(new CustomEvent(`rari:boundary-resolved`,{detail:{boundaryId:o,rscRow:s,rowId:c,element:l,wasAttached:e}}))}}catch(e){console.error(`[rari] Error processing boundary update:`,e)}};let o=window,s=globalThis;o[`~rari`].streaming?.bufferedEvents&&o[`~rari`].streaming.bufferedEvents.length>0&&(o[`~rari`].streaming.bufferedEvents.forEach(e=>{let{boundaryId:t,rscRow:n,rowId:r}=e;s[`~rari`].processBoundaryUpdate?.(t,n,r)}),o[`~rari`].streaming.bufferedEvents=[]),window.addEventListener(`rari:boundary-update`,e=>{let{boundaryId:t,rscRow:n,rowId:r}=e.detail;s[`~rari`].processBoundaryUpdate&&s[`~rari`].processBoundaryUpdate(t,n,r)})}function S(e,t,n){let r=n===`default`?e.name||t.split(`/`).pop()?.replace(o,``)||`DefaultComponent`:n,i=r,a={id:i,path:t,type:`client`,component:e,registered:!0};globalThis[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={});let s=`${t}#${n}`;globalThis[`~clientComponents`][i]=a,globalThis[`~clientComponents`][t]=a,globalThis[`~clientComponents`][s]=a,globalThis[`~clientComponentPaths`][t]=i,globalThis[`~clientComponentNames`][r]=i,e&&(e[`~isClientComponent`]=!0,e[`~clientComponentId`]=i),typeof window<`u`&&fetch(`/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:i,file_path:t,export_name:n})}).catch(e=>{console.error(`[rari] Failed to register client component with server:`,e)})}function C(e){return c(e)}function w(){let e={};for(let[t,n]of Object.entries(globalThis[`~clientComponents`]))e[t]={id:t,chunks:[n.path],name:t,async:!1,default:n.component};return e}let T=l,E=u,D=null;async function O(){return D||(D=(async()=>{try{return T=l,E=u,typeof E!=`function`&&(E=null),typeof T!=`function`&&(T=null),y}catch(e){return console.error(`Failed to load react-dom/client RSC functions:`,e),T=null,E=null,null}})(),D)}const k=new Map,A=new class{componentCache;moduleCache;inflightRequests;config;constructor(){this.componentCache=new Map,this.moduleCache=new Map,this.inflightRequests=new Map,this.config={maxRetries:5,retryDelay:500,timeout:1e4}}configure(e){this.config={...this.config,...e}}clearCache(){this.componentCache.clear(),this.moduleCache.clear(),k.clear()}async fetchServerComponent(e,t={}){let n=typeof window<`u`&&window[`~rari`]?.hmr?.refreshCounters?.[e]||0,r=`${e}:${JSON.stringify(t)}:hmr:${n}`;if(this.componentCache.has(r))return this.componentCache.get(r);if(this.inflightRequests.has(r))return this.inflightRequests.get(r);let i=this.fetchServerComponentStream(e,t);this.inflightRequests.set(r,i);try{let e=await i;return this.componentCache.set(r,e),e}finally{this.inflightRequests.delete(r)}}async fetchServerComponentStream(e,t={}){await O();let n=(()=>{let e=[`/_rari/stream`];try{if(typeof window<`u`&&(window.location.hostname===`localhost`||window.location.hostname===`127.0.0.1`)){let t=b();t&&e.push(`${t}/_rari/stream`)}}catch{}return e})(),r=null,i=null,a=async()=>{for(let r of n)try{let n=await this.fetchWithTimeout(r,{method:`POST`,headers:{"Content-Type":`application/json`,...this.buildRequestHeaders()},body:JSON.stringify({component_id:e,props:t})});if(n.ok)return n;i=Error(`HTTP ${n.status}: ${await n.text()}`)}catch(e){i=e}return null};if(r=await a(),r||=(await new Promise(e=>setTimeout(e,this.config.retryDelay)),await a()),!r)throw i||Error(`Failed to reach stream endpoint`);if(!r.ok){let e=await r.text();throw Error(`Server responded with ${r.status}: ${e}`)}let o=r.body;if(!o)throw Error(`No ReadableStream from stream response`);let s=o.getReader(),c=new TextDecoder,l=new Map,u=new Map,d=e=>{if(!m)return console.error(`React not available for RSC conversion`),null;if(!e)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,t,n,r]=e;if(t===`react.suspense`||t===`suspense`)return m(f,{fallback:d(r?.fallback)||null},r?.children?d(r.children):null);let i=r?{...r}:{};if(r?.children){let e=d(r.children);Array.isArray(e)?i.children=e.map((e,t)=>h(e)&&e.key==null?p(e,{key:t}):e):i.children=e}if(typeof t==`string`){if(t.startsWith(`$L`)){let e=l.get(t);if(e){let t=C(`${e.id}#${e.name||`default`}`);if(t)return m(t,n?{...i,key:n}:i)}return i&&i.children?i.children:null}if(t.includes(`.tsx#`)||t.includes(`.jsx#`)){let e=C(t);return e?m(e,n?{...i,key:n}:i):(console.error(`Failed to resolve client component:`,t),null)}else return i&&Object.hasOwn(i,`~boundaryId`)&&(i={...i},delete i[`~boundaryId`]),m(t,n?{...i,key:n}:i)}else console.error(`Unknown RSC element type:`,t)}return e.map(e=>d(e))}return typeof e==`object`?(console.error(`Unexpected object in RSC conversion:`,e),null):e},g=null,y=new Map,S=``,w=null,T=async()=>{try{for(;;){let{value:e,done:t}=await s.read();if(t)break;let n=c.decode(e,{stream:!0});S+=n;let r=S.split(`
2
2
  `),i=r.slice(0,-1);S=r.at(-1)||``;for(let e of i)if(e.trim())try{let t=e.indexOf(`:`);if(t===-1)continue;let n=e.substring(0,t),r=e.substring(t+1),i=x(r);if(i)l.set(`$L${n}`,i);else if(r.startsWith(`E{`))try{let e=JSON.parse(r.substring(1));console.error(`RSC stream error:`,e)}catch(e){console.error(`Failed to parse error row:`,r,e)}else if(r.startsWith(`Symbol.for(`))continue;else if(r.startsWith(`[`)){let e=JSON.parse(r);if(Array.isArray(e)&&e.length>=4){let[t,r,i]=e,a=i?.[`~boundaryId`];if(t===`$`&&(r===`react.suspense`||r===`suspense`)&&i&&a&&u.set(`$L${n}`,a),t===`$`&&i&&Object.hasOwn(i,`children`)&&typeof r==`string`&&r.startsWith(`$L`)){let e=u.get(r)||null;if(e){let t=d(i.children);y.set(e,t),w&&w.updateBoundary(e,t);continue}}}if(!g){let t=!0;if(Array.isArray(e)&&e.length>=4&&e[0]===`$`){let n=e[1],r=e[3],i=r?.[`~boundaryId`];typeof n==`string`&&(n===`react.suspense`||n===`suspense`)&&r&&i&&(t=!1)}t&&(g=d(e),w&&typeof w.updateRoot==`function`&&w.updateRoot())}}}catch(t){console.error(`Failed to parse stream line:`,e,t)}}}catch(e){console.error(`Error processing stream:`,e)}},E=()=>{let[,e]=v(0);_(()=>(w={updateBoundary:(t,n)=>{y.set(t,n),e(e=>e+1)},updateRoot:()=>{e(e=>e+1)}},()=>{w=null}),[e]);let t=e=>{if(!e)return null;if(h(e)){let n=e.props,r=n?.[`~boundaryId`];if(n&&r){let e=y.get(r);if(e)return e}if(n&&n.children){let r=t(n.children);if(r!==n.children){let t={...n};return e.key!==null&&e.key!==void 0&&(t.key=e.key),m(e.type,t,r)}}return e}return Array.isArray(e)?e.map(e=>t(e)):e};return t(g)};T();let D=Promise.resolve(m(E));return{"~isRscResponse":!0,"~rscPromise":D,readRoot(){return D}}}buildRequestHeaders(){return{Accept:`text/x-component`,"Cache-Control":`no-cache, no-transform`}}async fetchWithTimeout(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeout);try{let i=await fetch(e,{...t,signal:n.signal});return clearTimeout(r),i}catch(e){throw clearTimeout(r),e}}async processRscResponse(e){if(await O(),T)try{let t=T(Promise.resolve(e));return{"~isRscResponse":!0,"~rscPromise":t,readRoot(){return t}}}catch{throw Error(`React Server DOM client not available`)}else throw Error(`React Server DOM client not available`)}async processRscResponseManually(e){let t=await e.text();return this.parseRscResponse(t)}parseRscResponse(e){let t=e.trim().split(s),n=new Map,r=new Map,i=[];for(let e of t){let t=e.indexOf(`:`);if(t===-1)continue;let a=e.substring(0,t),o=e.substring(t+1);if(o)try{let t=x(o);if(t)n.set(`$L${a}`,t);else if(o.startsWith(`E{`)){let e=o.substring(1),t=JSON.parse(e);i.push(t),console.error(`RSC: Server error`,t)}else if(o.startsWith(`[`)){let e=JSON.parse(o);r.set(a,e)}else if(o.startsWith(`Symbol.for(`))continue;else console.error(`Unknown RSC row format:`,e)}catch(t){console.error(`Failed to parse RSC row:`,e,t)}}if(i.length>0)throw Error(`RSC Server Error: ${i.map(e=>e.message||e).join(`, `)}`);let a=null,o=Array.from(r.keys()).sort((e,t)=>Number.parseInt(e,16)-Number.parseInt(t,16));for(let e of o){let t=r.get(e);if(Array.isArray(t)&&t.length>=2&&t[0]===`$`){let[,e,,n]=t,r=n?.[`~boundaryId`];if(e===`react.suspense`&&n&&r)continue;a=t;break}}return a?this.reconstructElementFromRscData(a,n):(console.error(`No valid root element found in RSC payload`,{elements:r,modules:n}),null)}reconstructElementFromRscData(e,t){if(e==null)return null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e))if(e.length>=4&&e[0]===`$`){let[,n,r,i]=e,a=n;if(typeof n==`string`&&n.includes(`#`))a=C(n)||(({children:e,...t})=>m(`div`,{...t,"data-client-component":n,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},m(`small`,{style:{color:`#c00`}},`Missing Client Component: ${n}`),e));else if(typeof n==`string`&&n.startsWith(`$L`)&&t.has(n)){let e=t.get(n);e&&(a=C(`${e.id}#${e.name}`)||(({children:t,...r})=>m(`div`,{...r,"data-client-component":n,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},m(`small`,{style:{color:`#c00`}},`Missing Client Component: ${e.name} (${e.id})`),t)))}let o=i?this.processPropsRecursively(i,t):{};return m(a,{key:r,...o})}else return e.map(e=>this.reconstructElementFromRscData(e,t));return typeof e==`object`?null:e}processPropsRecursively(e,t){if(!e||typeof e!=`object`)return e;let n={};for(let[r,i]of Object.entries(e))if(r===`children`)if(Array.isArray(i))if(i.length>=2&&i[0]===`$`)n[r]=this.reconstructElementFromRscData(i,t);else{let e=i.map(e=>this.reconstructElementFromRscData(e,t)).filter(e=>e!=null);e.length===0?n[r]=null:e.length===1?n[r]=e[0]:n[r]=e}else n[r]=this.reconstructElementFromRscData(i,t);else r===`dangerouslySetInnerHTML`?n[r]=i:n[r]=this.reconstructElementFromRscData(i,t);return n}};function j({error:e,details:t}){return m(`div`,{className:`rsc-error`,style:{padding:`16px`,backgroundColor:`#fee`,border:`1px solid #fcc`,borderRadius:`4px`,margin:`8px 0`,fontFamily:`monospace`}},m(`h3`,{style:{margin:`0 0 8px 0`,color:`#c00`}},`RSC Error`),m(`p`,{style:{margin:`0 0 8px 0`}},e),t&&m(`details`,{style:{marginTop:`8px`}},m(`summary`,{style:{cursor:`pointer`}},`Error Details`),m(`pre`,{style:{fontSize:`12px`,overflow:`auto`,backgroundColor:`#f5f5f5`,padding:`8px`}},JSON.stringify(t,null,2))))}function M({rootPromise:e}){return g(e)}function N({componentId:e,props:t,fallback:n}){let r=typeof window<`u`&&window[`~rari`]?.hmr?.refreshCounters?.[e]||0,i=`${e}:${JSON.stringify(t)}:hmr:${r}`;if(!k.has(i)){let n=A.fetchServerComponent(e,t).catch(e=>{throw k.delete(i),e});k.set(i,n)}let a=g(k.get(i));if(a?.[`~isRscResponse`]){let e=a.readRoot();return m(f,{fallback:n??null},m(M,{rootPromise:e}))}return a??null}var P=class extends d.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidUpdate(e){e.mountKey!==this.props.mountKey&&this.state.hasError&&this.setState({hasError:!1,error:null})}componentDidCatch(e,t){console.error(`[rari] ServerComponentErrorBoundary: Error in component ${this.props.componentId}:`,e,t)}render(){return this.state.hasError?m(j,{error:this.state.error?.message||`Unknown error`,details:{componentId:this.props.componentId}}):this.props.children}};function F(e){let t=0;if(typeof window<`u`){let n=window;n[`~rari`].hmr||(n[`~rari`].hmr={refreshCounters:{}}),n[`~rari`].hmr.refreshCounters[e]===void 0&&(n[`~rari`].hmr.refreshCounters[e]=0),t=n[`~rari`].hmr.refreshCounters[e]}let n=n=>{let[r,i]=v(t);return _(()=>{let t=t=>{let n=t.detail;if(n&&n.filePath&&L(n.filePath)&&(A.clearCache(),typeof window<`u`)){let t=window;t[`~rari`].hmr||(t[`~rari`].hmr={refreshCounters:{}}),t[`~rari`].hmr.refreshCounters[e]=(t[`~rari`].hmr.refreshCounters[e]||0)+1,i(t[`~rari`].hmr.refreshCounters[e])}};return typeof window<`u`&&window.addEventListener(`rari:rsc-invalidate`,t),()=>{typeof window<`u`&&window.removeEventListener(`rari:rsc-invalidate`,t)}},[]),m(f,{fallback:null},m(P,{componentId:e,mountKey:r},m(N,{key:`${e}-${r}`,componentId:e,props:n,fallback:null})))};return n.displayName=`ServerComponent(${e})`,function(e){return m(n,e)}}function I(e,t){return A.fetchServerComponent(e,t)}function L(e){if(!e)return!1;try{return typeof globalThis<`u`&&globalThis[`~rari`].serverComponents?globalThis[`~rari`].serverComponents.has(e):!1}catch(e){return console.error(`Error checking if file is server component:`,e),!1}}if(import.meta.hot){let e=!1,t=[],n=new Map;function r(r,i){n.set(r,i),import.meta.hot.on(r,async n=>{if(!e){t.push({event:r,data:n});return}try{await i(n)}catch(e){console.error(`[rari] HMR: Error in handler for '${r}':`,e)}})}r(`rari:register-server-component`,e=>{e?.filePath&&typeof globalThis<`u`&&(globalThis[`~rari`].serverComponents=globalThis[`~rari`].serverComponents||new Set,globalThis[`~rari`].serverComponents.add(e.filePath))}),r(`rari:server-components-registry`,e=>{e?.serverComponents&&Array.isArray(e.serverComponents)&&typeof globalThis<`u`&&(globalThis[`~rari`].serverComponents=globalThis[`~rari`].serverComponents||new Set,e.serverComponents.forEach(e=>{globalThis[`~rari`].serverComponents?.add(e)}))}),r(`vite:beforeFullReload`,async e=>{e?.path&&L(e.path)&&await u({filePath:e.path,forceReload:!0})}),r(`rari:server-component-updated`,async e=>{let t=e?.id||e?.componentId,n=e?.t||e?.timestamp;if(t){if(typeof window<`u`){let r=new CustomEvent(`rari:rsc-invalidate`,{detail:{componentId:t,filePath:e.filePath||e.file,type:`server-component`,timestamp:n}});window.dispatchEvent(r)}}else e?.path&&L(e.path)&&await u({filePath:e.path,forceReload:!1})}),r(`rari:app-router-updated`,async e=>{try{if(!e||!e.routePath&&(!e.affectedRoutes||e.affectedRoutes.length===0))return;await i(e)}catch(e){console.error(`[rari] HMR: App router update failed:`,e)}}),r(`rari:server-action-updated`,async e=>{if(e?.filePath&&(A.clearCache(),typeof window<`u`)){let t=new CustomEvent(`rari:rsc-invalidate`,{detail:{filePath:e.filePath,type:`server-action`}});window.dispatchEvent(t)}});async function i(e){let t=e.fileType,n=e.filePath,r=e.routePath,i=e.affectedRoutes,o=e.manifestUpdated,u=e.metadata;e.metadataChanged&&u&&a(u);try{let e=`${b()}/_rari/hmr`,t=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`register`,file_path:n})});if(!t.ok){let e=await t.text(),n=`Component reload failed with status ${t.status}: ${e}`;throw console.error(`[rari] HMR:`,n),Error(n)}let r=await t.json();if(typeof r!=`object`||!r){let e=`Invalid reload response: null or non-object`;throw console.error(`[rari] HMR:`,e,r),Error(e)}if(r.success!==!0&&r.reloaded!==!0){let e=`Component reload unsuccessful: ${r.error||`unknown error`}`;throw console.error(`[rari] HMR:`,e,r),Error(e)}}catch(e){console.error(`[rari] HMR: Failed to reload component:`,e);return}let d=[r];switch(t){case`page`:d=[r];break;case`layout`:case`loading`:case`error`:case`not-found`:d=i;break;default:break}await s({routes:d,fileType:t,filePath:n,componentId:r}),o&&await l(),await c({routePath:r,affectedRoutes:i})}function a(e){if(!(typeof document>`u`)&&(e.title&&(document.title=e.title),e.description)){let t=document.querySelector(`meta[name="description"]`);t||(t=document.createElement(`meta`),t.setAttribute(`name`,`description`),document.head.appendChild(t)),t.setAttribute(`content`,e.description)}}function o(e){if(!e||e.length===0){A.clearCache();return}let t=[];for(let n of A.componentCache.keys())for(let r of e){if(n.includes(`route:${r}:`)||n.startsWith(`${r}:`)){t.push(n);break}if(r!==`/`&&n.includes(`route:${r}/`)){t.push(n);break}}for(let e of t)A.componentCache.delete(e),k.delete(e);let n=[];for(let t of k.keys())for(let r of e){if(t.includes(`route:${r}:`)||t.startsWith(`${r}:`)){n.push(t);break}if(r!==`/`&&t.includes(`route:${r}/`)){n.push(t);break}}for(let e of n)k.delete(e)}async function s(e){let t=e.routes||[],n=e.fileType,r=e.filePath,i=e.componentId;if(i||r)try{let e=`${b()}/_rari/hmr`,t=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate`,componentId:i||r,filePath:r})}),n=await t.text();t.ok||console.error(`[rari] HMR: Server cache invalidation failed:`,t.status,n)}catch(e){console.error(`[rari] HMR: Failed to call server invalidation endpoint:`,e)}if(o(t),typeof window<`u`){let e=new CustomEvent(`rari:rsc-invalidate`,{detail:{routes:t,fileType:n}});window.dispatchEvent(e)}}async function c(e){let t=e.routePath,n=e.affectedRoutes||[t];if(!(typeof window>`u`))try{let e=window.location.pathname,r=new CustomEvent(`rari:app-router-rerender`,{detail:{routePath:t,affectedRoutes:n,currentPath:e,preserveParams:!0}});window.dispatchEvent(r)}catch(e){throw console.error(`[rari] HMR: Failed to trigger re-render:`,e),e}}async function l(){typeof window<`u`&&window[`~rari`]?.routeInfoCache&&window[`~rari`].routeInfoCache.clear()}async function u(e){let t=e?.filePath||e;if(A.clearCache(),typeof window<`u`){let e=new CustomEvent(`rari:rsc-invalidate`,{detail:{filePath:t}});window.dispatchEvent(e)}}t.length>0?(async()=>{try{for(;t.length>0;){let e=[...t];t.length=0;for(let{event:t,data:r}of e){let e=n.get(t);if(e)try{await e(r)}catch(e){console.error(`[rari] HMR: Error replaying buffered event '${t}':`,e)}}}}catch(e){console.error(`[rari] HMR: Error during event replay:`,e)}finally{e=!0}})():e=!0}var R=class{overlay;currentError;escapeKeyHandler;constructor(){this.overlay=null,this.currentError=null,this.escapeKeyHandler=null}show(e){this.currentError=e,this.overlay?this.updateOverlay(e):this.createOverlay(e)}hide(){this.overlay&&(this.overlay.remove(),this.overlay=null,this.currentError=null),this.escapeKeyHandler&&=(document.removeEventListener(`keydown`,this.escapeKeyHandler),null)}isVisible(){return this.overlay!==null}createOverlay(e){this.overlay=document.createElement(`div`),this.overlay.id=`rari-hmr-error-overlay`,this.updateOverlay(e),document.body.appendChild(this.overlay),this.escapeKeyHandler=e=>{e.key===`Escape`&&this.hide()},document.addEventListener(`keydown`,this.escapeKeyHandler)}updateOverlay(e){if(!this.overlay)return;this.overlay.replaceChildren();let t=document.createElement(`div`);t.style.cssText=`position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); z-index: 999999; display: flex; align-items: center; justify-content: center; padding: 2rem; backdrop-filter: blur(4px);`;let n=document.createElement(`div`);n.style.cssText=`background: #1e1e1e; color: #e0e0e0; border-radius: 0.5rem; padding: 2rem; max-width: 50rem; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4); border: 1px solid #ef4444;`;let r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem;`;let i=document.createElement(`div`);i.style.cssText=`display: flex; align-items: center; gap: 0.75rem;`;let a=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);a.style.cssText=`width: 2rem; height: 2rem; color: #ef4444;`,a.setAttribute(`fill`,`none`),a.setAttribute(`stroke`,`currentColor`),a.setAttribute(`viewBox`,`0 0 24 24`);let o=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);o.setAttribute(`stroke-linecap`,`round`),o.setAttribute(`stroke-linejoin`,`round`),o.setAttribute(`stroke-width`,`2`),o.setAttribute(`d`,`M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z`),a.appendChild(o);let s=document.createElement(`h1`);s.style.cssText=`margin: 0; font-size: 1.5rem; font-weight: 700; color: #ef4444;`,s.textContent=`Build Error`,i.appendChild(a),i.appendChild(s);let c=document.createElement(`button`);if(c.style.cssText=`background: transparent; border: none; color: #9ca3af; cursor: pointer; padding: 0.5rem; border-radius: 0.25rem; transition: all 0.2s; font-size: 1.5rem; line-height: 1; width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center;`,c.textContent=`×`,c.setAttribute(`aria-label`,`Close overlay`),c.onclick=()=>this.hide(),c.onmouseover=()=>{c.style.background=`rgba(255,255,255,0.1)`,c.style.color=`#e0e0e0`},c.onmouseout=()=>{c.style.background=`transparent`,c.style.color=`#9ca3af`},c.onfocus=()=>{c.style.background=`rgba(255,255,255,0.1)`,c.style.color=`#e0e0e0`},c.onblur=()=>{c.style.background=`transparent`,c.style.color=`#9ca3af`},r.appendChild(i),r.appendChild(c),n.appendChild(r),e.filePath){let t=document.createElement(`div`);t.style.cssText=`margin-bottom: 1rem; padding: 0.75rem; background: rgba(0, 0, 0, 0.2); border-radius: 0.375rem; font-family: monospace; font-size: 0.875rem;`;let r=document.createElement(`strong`);r.textContent=`File: `,t.appendChild(r),t.appendChild(document.createTextNode(e.filePath)),n.appendChild(t)}let l=document.createElement(`div`);l.style.cssText=`margin-bottom: 1.5rem;`;let u=document.createElement(`h2`);u.style.cssText=`margin: 0 0 0.75rem 0; font-size: 1rem; font-weight: 600; color: #fca5a5;`,u.textContent=`Error Message:`;let d=document.createElement(`pre`);if(d.style.cssText=`margin: 0; padding: 1rem; background: rgba(239, 68, 68, 0.1); border-left: 4px solid #ef4444; border-radius: 0.375rem; overflow-x: auto; font-family: monospace; font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word; color: #fca5a5;`,d.textContent=e.message??`An error occurred`,l.appendChild(u),l.appendChild(d),n.appendChild(l),e.stack){let t=document.createElement(`details`);t.style.cssText=`margin-top: 1rem; cursor: pointer;`;let r=document.createElement(`summary`);r.style.cssText=`font-weight: 600; margin-bottom: 0.5rem; user-select: none;`,r.textContent=`Stack Trace`;let i=document.createElement(`pre`);i.style.cssText=`margin: 0; padding: 0.75rem; background: rgba(0, 0, 0, 0.2); border-radius: 0.375rem; overflow-x: auto; font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word;`,i.textContent=e.stack,t.appendChild(r),t.appendChild(i),n.appendChild(t)}let f=document.createElement(`div`);f.style.cssText=`margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid #374151; display: flex; gap: 0.75rem; align-items: center;`;let p=document.createElement(`button`);p.style.cssText=`padding: 0.625rem 1.25rem; background: #ef4444; color: white; border: none; border-radius: 0.375rem; cursor: pointer; font-weight: 600; font-size: 0.875rem; transition: all 0.2s;`,p.textContent=`Reload Page`,p.onclick=()=>window.location.reload(),p.onmouseover=()=>{p.style.background=`#dc2626`},p.onmouseout=()=>{p.style.background=`#ef4444`},p.onfocus=()=>{p.style.background=`#dc2626`},p.onblur=()=>{p.style.background=`#ef4444`};let m=document.createElement(`button`);m.style.cssText=`padding: 0.625rem 1.25rem; background: #374151; color: #e0e0e0; border: none; border-radius: 0.375rem; cursor: pointer; font-weight: 600; font-size: 0.875rem; transition: all 0.2s;`,m.textContent=`Dismiss`,m.onclick=()=>this.hide(),m.onmouseover=()=>{m.style.background=`#4b5563`},m.onmouseout=()=>{m.style.background=`#374151`},m.onfocus=()=>{m.style.background=`#4b5563`},m.onblur=()=>{m.style.background=`#374151`};let h=document.createElement(`span`);h.style.cssText=`margin-left: auto; font-size: 0.75rem; color: #9ca3af;`;let g=new Date(e.timestamp);h.textContent=Number.isNaN(g.valueOf())?``:g.toLocaleTimeString(),f.appendChild(p),f.appendChild(m),f.appendChild(h),n.appendChild(f),t.appendChild(n),this.overlay.appendChild(t)}};let z=null;function B(){return z||=new R,z}if(import.meta.hot){let e=B();import.meta.hot.on(`rari:hmr-error`,t=>{let n=t.msg||t.message,r=t.file||t.filePath,i=t.t||t.timestamp,a=t.count||t.errorCount,o=t.max||t.maxErrors;console.error(`[rari] HMR: Build error:`,n),r&&console.error(`[rari] HMR: File:`,r),t.stack&&console.error(`[rari] HMR: Stack:`,t.stack),e.show({message:n,stack:t.stack,filePath:r,timestamp:i}),a&&o&&(a>=o?console.error(`[rari] HMR: Maximum error count (${o}) reached. Consider restarting the dev server if issues persist.`):a>=o-2&&console.warn(`[rari] HMR: Error count: ${a}/${o}. Approaching maximum error threshold.`))}),import.meta.hot.on(`rari:hmr-error-cleared`,()=>{e.hide()}),import.meta.hot.on(`vite:error`,t=>{e.show({message:t.err?.message||`Unknown Vite error`,stack:t.err?.stack,filePath:t.err?.file,timestamp:Date.now()})})}export{j as RscErrorComponent,w as createClientModuleMap,F as createServerComponentWrapper,I as fetchServerComponent,C as getClientComponent,S as registerClientComponent,A as rscClient};
@@ -1,4 +1,4 @@
1
- import { i as StringDecoder, r as ServerConsumerModuleMap, t as ClientReference } from "../../../ReactFlightClientConfig-BZt6Cjql.mjs";
1
+ import { i as StringDecoder, r as ServerConsumerModuleMap, t as ClientReference } from "../../../ReactFlightClientConfig-DdCyeIZx.mjs";
2
2
 
3
3
  //#region src/runtime/vendor/react-flight-client/ReactFlightClient.d.ts
4
4
  interface Thenable<T> extends Promise<T> {
@@ -1,2 +1,2 @@
1
- import { a as createStringDecoder, c as readPartialStringChunk, i as StringDecoder, l as requireModule, n as ClientReferenceMetadata, o as preloadModule, r as ServerConsumerModuleMap, s as readFinalStringChunk, t as ClientReference, u as resolveClientReference } from "../../../ReactFlightClientConfig-BZt6Cjql.mjs";
1
+ import { a as createStringDecoder, c as readPartialStringChunk, i as StringDecoder, l as requireModule, n as ClientReferenceMetadata, o as preloadModule, r as ServerConsumerModuleMap, s as readFinalStringChunk, t as ClientReference, u as resolveClientReference } from "../../../ReactFlightClientConfig-DdCyeIZx.mjs";
2
2
  export { ClientReference, ClientReferenceMetadata, ServerConsumerModuleMap, StringDecoder, createStringDecoder, preloadModule, readFinalStringChunk, readPartialStringChunk, requireModule, resolveClientReference };
@@ -0,0 +1,166 @@
1
+ import{t as e}from"./rolldown-runtime-DR3Ue2cl.mjs";import{C as t,a as n,c as r,d as i,i as a,o,r as s,s as c,w as l}from"./regex-constants-CmOAY1_W.mjs";import{t as u}from"./alias-resolver-D1GHg-4o.mjs";import d from"node:fs";import f from"node:path";import p from"node:process";import{pathToFileURL as m}from"node:url";import{build as h}from"rolldown";const g=new Set([`return`,`throw`,`case`,`typeof`,`instanceof`,`new`,`delete`,`void`,`in`,`of`]);function _(e){return e===` `||e===` `||e===`\r`||e===`
2
+ `||e===`\u2028`||e===`\u2029`||e===``}function v(e){return e===`\r`||e===`
3
+ `||e===`\u2028`||e===`\u2029`}function y(e,t,n){for(;t<n&&_(e[t]);)t++;return t}function b(e,t,n){for(;t<n;){let r=y(e,t,n);if(r!==t){t=r;continue}if(e[t]===`/`&&e[t+1]===`/`){t=x(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=S(e,t,n);continue}break}return t}function x(e,t,n){for(;t<n&&!v(e[t]);)t++;return t}function S(e,t,n){for(t+=2;t<n-1&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}function C(e,t,n,r){for(t++;t<n;){if(e[t]===`\\`){t+=2;continue}if(e[t]===r)return t+1;t++}return t}function w(e,t,n){t++;let r=e[t]===`/`;for(r&&t++;t<n&&(O(e[t])||e[t]===`.`||e[t]===`-`);)t++;let i=+!r;for(;t<n&&i>0;){let a=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(a){t=C(e,t,n,a);continue}if(e[t]===`{`){t++;let r=1;for(;t<n&&r>0;){let i=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(i){t=C(e,t,n,i);continue}e[t]===`{`&&r++,e[t]===`}`&&r--,t++}continue}if(e[t]===`/`&&e[t+1]===`>`){i--,t+=2;continue}if(e[t]===`>`){t++,r&&i--;continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||k(r)){for(r===`/`?(i--,t++):r!==`!`&&i++,t++;t<n&&(O(e[t])||e[t]===`.`||e[t]===`-`);)t++;continue}t++;continue}t++}return t}function T(e,t){let n=0,r=e.length;for(;n<r;){if(_(e[n])){n++;continue}if(e[n]===`/`&&e[n+1]===`/`){n=x(e,n,r);continue}if(e[n]===`/`&&e[n+1]===`*`){n=S(e,n,r);continue}let i=e[n]===`'`||e[n]===`"`?e[n]:null;if(i){let a=n+1,o=C(e,n,r,i);if(o>a){let i=e.slice(a,o-1),s=o;for(;s<r;){if(_(e[s])&&!v(e[s])){s++;continue}if(v(e[s])||e[s]===`;`){if(i===t)return!0;n=s+1;break}if(e[s]===`/`&&e[s+1]===`/`){s=x(e,s,r);continue}if(e[s]===`/`&&e[s+1]===`*`){s=S(e,s,r);continue}return!1}if(s>=r)return i===t;if(s<r&&(v(e[s])||e[s]===`;`))continue;return!1}}return!1}return!1}function E(e){return T(e,`use server`)}function D(e){return T(e,`use client`)}function O(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e>=`0`&&e<=`9`||e===`_`||e===`$`)}function k(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e===`_`||e===`$`)}function A(e){return!e||e===`(`||e===`[`||e===`{`||e===`,`||e===`;`||e===`=`||e===`:`||e===`?`||e===`!`||e===`+`||e===`-`||e===`*`||e===`%`||e===`&`||e===`|`||e===`^`||e===`~`||e===`<`||e===`>`}function j(e,t){let n=t-1;for(;n>=0;){if(_(e[n])){n--;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`*`){for(n-=2;n>=1;){if(e[n]===`*`&&e[n-1]===`/`){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`/`){n-=2;continue}let t=n;for(;t>=0&&e[t]!==`
4
+ `&&e[t]!==`\r`;)t--;let r=t+1;for(;r<n&&(e[r]===` `||e[r]===` `);)r++;if(r<n&&e[r]===`/`&&e[r+1]===`/`){n=r-1;continue}break}if(n<0||!O(e[n]))return;let r=n;for(;n>=0&&O(e[n]);)n--;return e.slice(n+1,r+1)}function M(e,t){if(A(P(e,t)))return!0;let n=j(e,t);return n?g.has(n):!1}function N(e,t,n){t++;let r=!1;for(;t<n;){if(e[t]===`\\`){t+=2;continue}if(r){e[t]===`]`&&(r=!1),t++;continue}if(e[t]===`[`){r=!0,t++;continue}if(e[t]===`/`){for(t++;t<n&&O(e[t]);)t++;return t}if(v(e[t]))return t;t++}return t}function P(e,t){let n=t-1;for(;n>=0;){if(_(e[n])){n--;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`*`){for(n-=2;n>=1;){if(e[n]===`*`&&e[n-1]===`/`){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`/`){n-=2;continue}let t=n;for(;t>=0&&e[t]!==`
5
+ `&&e[t]!==`\r`;)t--;let r=t+1;for(;r<n&&(e[r]===` `||e[r]===` `);)r++;if(r<n&&e[r]===`/`&&e[r+1]===`/`){n=r-1;continue}return e[n]}}function F(e){let t=0,n=e.length;for(;t<n;){if(_(e[t])){t++;continue}if(e[t]===`/`&&e[t+1]===`/`){t=x(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=S(e,t,n);continue}let r=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(r){t=C(e,t,n,r);continue}if(e[t]===`/`&&e[t+1]!==`/`&&e[t+1]!==`*`&&M(e,t)){t=N(e,t,n);continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||k(r)){t=w(e,t,n);continue}t++;continue}if(e.slice(t,t+6)===`export`){let r=t+6;if(r<n&&(_(e[r])||e[r]===`{`||e[r]===`/`&&(e[r+1]===`/`||e[r+1]===`*`))){let t=b(e,r,n);if(e.slice(t,t+7)===`default`){let r=t+7;if(r>=n||!O(e[r]))return!0}if(e[t]===`{`){let r=t+1;for(;r<n&&(r=b(e,r,n),e[r]!==`}`);){let t=r;for(;r<n&&O(e[r]);)r++;let i=e.slice(t,r);if(!i)break;r=b(e,r,n);let a=!1;if(e.slice(r,r+2)===`as`){a=!0;let t=r+2;if(t<n&&!O(e[t])){r=b(e,t,n);let i=r;for(;r<n&&O(e[r]);)r++;if(e.slice(i,r)===`default`)return!0}}if(!a&&i===`default`)return!0;if(e[r]===`,`){r++;continue}if(e[r]===`}`)break;r++}}}}t++}return!1}function I(e,t){let n=null;for(let r of t)if(e.endsWith(r)&&(n??=d.existsSync(e),n))return e;for(let n of t){let t=`${e}${n}`;if(d.existsSync(t))return t}return null}function L(e,t){if(d.existsSync(e)){if(!d.statSync(e).isDirectory())return null;for(let n of t){let t=f.join(e,`index${n}`);if(d.existsSync(t))return t}}return null}var R=e({ServerComponentBuilder:()=>Z,createServerBuildPlugin:()=>$,scanDirectory:()=>Q});const z=/import\s*\(\s*["']([^"']+)["']\s*\)|import\s+["']([^"']+)["']/g,B=/from\s+['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)|import\s+['"]([^'"]+)['"]/g,V=/import(?:\s+(?:\w+|\{[^}]*\}|\*\s+as\s+\w+)(?:\s*,\s*(?:\w+|\{[^}]*\}|\*\s+as\s+\w+))*\s+from\s+)?['"]([^'"]+)['"]/g,H=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,U=/import\s+(?:(\w+)|\{([^}]+)\})\s+from\s+['"]([^'"]+)['"];?\s*$/gm,W=/^proxy\.(?:tsx?|jsx?|mts|mjs)$/,G=/\\/g,K=/\.(tsx?|jsx?)$/,q=/\/components\/(\w+)(?:\.tsx?|\.jsx?)?$/,J=/[/\\]components[/\\](\w+)(?:\.tsx?|\.jsx?)?$/,ee=/^export\s*\{([^}]+)\};?\s*$/gm,te=/^export\s+(const|let|var)\s+(\w+)/gm,ne=/^(?:robots|sitemap)\.(?:tsx?|jsx?)$/,Y=/^node:/,X=/\\/g;var Z=class{serverComponents=new Map;serverActions=new Map;options;projectRoot;buildCache=new Map;htmlOnlyImports=new Set;fileImporters=new Map;getComponentCount(){return this.serverComponents.size+this.serverActions.size}getImportGraph(){let e=new Map;for(let[t,n]of this.fileImporters)e.set(t,new Set(n));return e}getHtmlOnlyImports(){return new Set(this.htmlOnlyImports)}constructor(e,t={}){this.projectRoot=e;let n=t.rscDir||`server`;this.options={outDir:t.outDir||f.join(e,`dist`),rscDir:n,manifestPath:t.manifestPath||f.join(n,`manifest.json`),serverConfigPath:t.serverConfigPath||f.join(n,`config.json`),minify:t.minify??p.env.NODE_ENV===`production`,alias:t.alias||{},define:t.define,csp:t.csp,cacheControl:t.cacheControl},this.parseHtmlImports()}parseHtmlImports(){let e=f.join(this.projectRoot,`index.html`);if(d.existsSync(e))try{let t=d.readFileSync(e,`utf-8`);for(let e of t.matchAll(z)){let t=e[1]||e[2];if(t.startsWith(`/src/`)){let e=f.join(this.projectRoot,t.slice(1));this.htmlOnlyImports.add(e)}}}catch(e){console.warn(`[server-build] Error parsing index.html:`,e)}}isHtmlOnlyImport(e){return this.htmlOnlyImports.has(e)}isServerComponent(e,t){if(e.includes(`node_modules`)||this.isHtmlOnlyImport(e))return!1;try{let n=t??(d.existsSync(e)?d.readFileSync(e,`utf-8`):null);return n===null?!1:!D(n)&&!E(n)}catch{return!1}}isClientComponent(e,t){try{let n=t??(d.existsSync(e)?d.readFileSync(e,`utf-8`):null);return n===null?!1:D(n)}catch{return!1}}buildImportGraph(e){this.fileImporters.clear();let t=e=>{if(!d.existsSync(e))return;let n=d.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=f.join(e,r.name);if(r.isDirectory()){if(r.name===`node_modules`)continue;t(n)}else if(r.isFile()&&l.test(r.name))try{let e=d.readFileSync(n,`utf-8`),t;for(B.lastIndex=0,t=B.exec(e);t!==null;){let r=t[1]||t[2]||t[3],i=null;if(r.startsWith(`./`)||r.startsWith(`../`)){let e=f.dirname(n);i=f.resolve(e,r)}else if(r.startsWith(`@/`)){let e=r.slice(2);i=f.join(this.projectRoot,`src`,e)}if(i){let e=[``,`.ts`,`.tsx`,`.js`,`.jsx`],t=null;for(let n of e){let e=i+n;if(d.existsSync(e)&&d.statSync(e).isFile()){t=e;break}}t&&(this.fileImporters.has(t)||this.fileImporters.set(t,new Set),this.fileImporters.get(t).add(n))}t=B.exec(e)}}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error building import graph:`,n,e)}}};t(e)}isOnlyImportedByClientComponents(e){let t=this.fileImporters.get(e);if(!t||t.size===0)return!1;for(let e of t)if(!this.isClientComponent(e)&&!this.isOnlyImportedByClientComponents(e))return!1;return!0}addServerComponent(e,t){let n=t??d.readFileSync(e,`utf-8`);if(this.isServerAction(n)){let t=this.extractDependencies(n),r=this.hasNodeImports(n);this.serverActions.set(e,{filePath:e,originalCode:n,dependencies:t,hasNodeImports:r});return}if(!this.isServerComponent(e,n))return;let r=this.extractDependencies(n),i=this.hasNodeImports(n);this.serverComponents.set(e,{filePath:e,originalCode:n,dependencies:r,hasNodeImports:i})}isServerAction(e){return E(e)}extractDependencies(e){let t=[],n;for(V.lastIndex=0;n=V.exec(e),n!==null;){let e=n[1];!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`node:`)&&!this.isNodeBuiltin(e)&&t.push(e)}return[...new Set(t)]}isNodeBuiltin(e){return[`fs`,`path`,`os`,`crypto`,`util`,`stream`,`events`,`process`,`buffer`,`url`,`querystring`,`zlib`,`http`,`https`,`net`,`tls`,`child_process`,`cluster`,`worker_threads`].includes(e)}hasNodeImports(e){return e.includes(`from 'node:`)||e.includes(`from "node:`)||e.includes(`from 'fs'`)||e.includes(`from "fs"`)||e.includes(`from 'path'`)||e.includes(`from "path"`)||e.includes(`from 'os'`)||e.includes(`from "os"`)||e.includes(`from 'crypto'`)||e.includes(`from "crypto"`)||e.includes(`from 'util'`)||e.includes(`from "util"`)||e.includes(`from 'stream'`)||e.includes(`from "stream"`)||e.includes(`from 'events'`)||e.includes(`from "events"`)}async getTransformedComponentsForDevelopment(){let e=[];for(let[t]of this.serverComponents){let n=f.relative(this.projectRoot,t),r=this.getComponentId(n),i=await this.buildComponentCodeOnly(t);e.push({id:r,code:i})}for(let[t]of this.serverActions){let n=f.relative(this.projectRoot,t),r=this.getComponentId(n),i=await this.buildComponentCodeOnly(t);e.push({id:r,code:i})}return e}transformComponentImportsToGlobal(e){let t=[];for(let n of e.matchAll(H)){let[e,r,i]=n;if(!i.startsWith(`.`)&&!i.startsWith(`@`)&&!i.startsWith(`~`)&&!i.startsWith(`#`))continue;let a=null;if(i.startsWith(`.`)){if(i.includes(`/components/`)){let n=i.match(q);if(n){let i=n[1],a=[f.resolve(this.projectRoot,`src`,`components`,`${i}.tsx`),f.resolve(this.projectRoot,`src`,`components`,`${i}.ts`),f.resolve(this.projectRoot,`src`,`components`,`${i}.jsx`),f.resolve(this.projectRoot,`src`,`components`,`${i}.js`)],o=!1;for(let e of a)if(d.existsSync(e)&&this.isClientComponent(e)){o=!0;break}if(!o)continue;let s=`// Component reference: ${i}
6
+ const ${r} = (props) => {
7
+ let Component = globalThis['~clientComponents']?.['components/${i}']?.component
8
+ || globalThis['components/${i}'];
9
+
10
+ if (Component && typeof Component === 'object' && Component.default) {
11
+ Component = Component.default;
12
+ }
13
+
14
+ if (!Component) {
15
+ throw new Error('Component components/${i} not loaded');
16
+ }
17
+
18
+ if (typeof Component !== 'function') {
19
+ throw new Error('Component components/${i} is not a function, got: ' + typeof Component);
20
+ }
21
+
22
+ return Component(props);
23
+ }`;t.push({original:e,replacement:s})}}continue}let o=this.options.alias||{};for(let[e,t]of Object.entries(o))if(i.startsWith(`${e}/`)||i===e){let n=i.slice(e.length);a=f.join(t,n);break}if(a){let n=a.match(J);if(n){let i=n[1],o=f.isAbsolute(a)?a:f.resolve(this.projectRoot,a),s=[o,`${o}.tsx`,`${o}.ts`,`${o}.jsx`,`${o}.js`],c=!1,l=o;for(let e of s)if(d.existsSync(e)){l=e,this.isClientComponent(e)&&(c=!0);break}if(!c)continue;let u=f.relative(this.projectRoot,l),p=this.getComponentId(u),m=`// Component reference: ${i}
24
+ const ${r} = (props) => {
25
+ let Component = globalThis['~clientComponents']?.['${p}']?.component
26
+ || globalThis['${p}'];
27
+
28
+ if (Component && typeof Component === 'object' && Component.default) {
29
+ Component = Component.default;
30
+ }
31
+
32
+ if (!Component) {
33
+ throw new Error('Component ${p} not loaded');
34
+ }
35
+
36
+ if (typeof Component !== 'function') {
37
+ throw new Error('Component ${p} is not a function, got: ' + typeof Component);
38
+ }
39
+
40
+ return Component(props);
41
+ }`;t.push({original:e,replacement:m})}}}let n=e;for(let{original:e,replacement:r}of t)n=n.replace(e,r);return n}isPageComponent(e){return e.includes(`/app/`)||e.includes(`\\app\\`)}createBuildPlugins(e,t,n,r,a=!1){let o=f.dirname(r),s=W.test(f.basename(r)),c=this,l=new Map,p=new Map;return[{name:`virtual-module`,resolveId(t,n){if(t===e)return t;if(n===e&&(t.startsWith(`./`)||t.startsWith(`../`))){let e=f.resolve(o,t);for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let n=e+t;if(d.existsSync(n)&&d.statSync(n).isFile())return n}for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=f.join(e,`index${t}`);if(d.existsSync(n))return n}return e}return null},load(r){return r===e?{code:t,moduleType:n}:null}},{name:`resolve-client-server-boundaries`,resolveId:(t,n)=>{if(!n||n.includes(`node_modules`)||n.includes(`/packages/rari/dist`)||t.startsWith(`node:`)||c.isNodeBuiltin(t)||t===`react`||t===`react-dom`||t===`react/jsx-runtime`||t===`react/jsx-dev-runtime`)return null;let r=null;if(r=u(t,c.options.alias||{},c.projectRoot),!r&&(t.startsWith(`./`)||t.startsWith(`../`))){let i=n===e?o:f.dirname(n);r=f.resolve(i,t)}if(r)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=r+e;if(d.existsSync(t)&&d.statSync(t).isFile()){if(c.isClientComponent(t)){let e=f.relative(c.projectRoot,t),n=(e.startsWith(`..`)?t:e).replace(X,`/`);return l.set(t,n),{id:`\0client-ref:${t}`}}try{let e=d.readFileSync(t,`utf-8`);if(E(e)){let n=f.relative(c.projectRoot,t),r=n.startsWith(`..`)?t:n,i=F(e);return p.set(t,{actionId:r,hasDefaultExport:i}),{id:`\0server-action:${t}`}}}catch(e){console.error(`[rari] Failed to read file for server action detection: ${t}`,e)}break}}return null},load(e){if(e.startsWith(`\0client-ref:`)){let t=e.slice(12),n=f.relative(c.projectRoot,t),r=(l.get(t)||(n.startsWith(`..`)?t:n)).replace(X,`/`);return{code:`
42
+ function registerClientReference(clientReference, id, exportName) {
43
+ const key = id + '#' + exportName;
44
+ const clientProxy = {};
45
+ Object.defineProperty(clientProxy, '$$typeof', {
46
+ value: Symbol.for('react.client.reference'),
47
+ enumerable: false
48
+ });
49
+ Object.defineProperty(clientProxy, '$$id', {
50
+ value: key,
51
+ enumerable: false
52
+ });
53
+ Object.defineProperty(clientProxy, '$$async', {
54
+ value: false,
55
+ enumerable: false
56
+ });
57
+ return clientProxy;
58
+ }
59
+
60
+ export default registerClientReference(null, ${JSON.stringify(r)}, "default");
61
+ `,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=f.relative(c.projectRoot,t).replace(X,`/`),r=n.startsWith(`src/`)?n.slice(4):n,i=f.join(c.options.outDir,c.options.rscDir,r.replace(K,`.js`)),a=m(f.resolve(c.projectRoot,i)).href;return{code:p.get(t)?.hasDefaultExport??!1?`export * from ${JSON.stringify(a)};\nexport { default } from ${JSON.stringify(a)};`:`export * from ${JSON.stringify(a)};`,moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,t)=>{if(!a)return null;if(e.startsWith(`file://`)){let t=e.replace(i,``);return d.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null;n=u(e,c.options.alias||{},c.projectRoot);let r=t?.startsWith(`\0`)?o:t?f.dirname(t):o;if(!n&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=f.resolve(r,e)),!n||r.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(d.existsSync(t)&&d.statSync(t).isFile()){if(c.isClientComponent(t))return null;let e=f.join(c.projectRoot,`src`);if(!t.startsWith(e))return null;let n=f.relative(e,t),r=f.join(c.options.outDir,c.options.rscDir,n.replace(K,`.js`));if(d.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:d.readFileSync(t,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let t=c.options.alias||{};for(let[n,r]of Object.entries(t))if(e.startsWith(`${n}/`)||e===n){let t=e.slice(n.length),i=f.join(r,t),a=f.isAbsolute(i)?i:f.resolve(c.projectRoot,i);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=a+e;if(d.existsSync(t)&&d.statSync(t).isFile())return t}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let t=f.join(a,`index${e}`);if(d.existsSync(t))return t}return a}return null}},{name:`resolve-rari-proxy`,resolveId:e=>{if(s&&e===`rari`){let e=f.resolve(c.projectRoot,`node_modules/rari/dist/proxy/RariResponse.mjs`);if(d.existsSync(e))return e;let t=f.resolve(c.projectRoot,`node_modules/rari/src/proxy/RariResponse.ts`);if(d.existsSync(t))return t}return null}},{name:`externalize-deps`,resolveId:e=>e.startsWith(`\0`)?null:e.startsWith(`node:`)||c.isNodeBuiltin(e)||[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`rari/image`].includes(e)?{id:e,external:!0}:e===`rari`||e===`rari/client`?null:!e.startsWith(`.`)&&!e.startsWith(`/`)?{id:e,external:!0}:null}]}async buildComponentCodeOnly(e){let t=await d.promises.readFile(e,`utf-8`),n=this.transformClientImports(t,e),r=this.isPageComponent(e),i=r?this.transformComponentImportsToGlobal(n):n,a=f.extname(e),o;o=a===`.tsx`?`tsx`:a===`.ts`?`ts`:a===`.jsx`?`jsx`:`js`;let s=`\0virtual:${e}`,c=await h({input:s,platform:`node`,write:!1,external:[Y,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${o}`]:o},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(p.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(s,i,o,e,r)});if(!c.output||c.output.length===0)throw Error(`No output generated from Rolldown`);let l=c.output.find(e=>e.type===`chunk`&&e.isEntry);if(!l||l.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let u=l.code;return u=`// Built: ${new Date().toISOString()}\n${u}`,u}async buildServerComponents(){let e=f.join(this.options.outDir,this.options.rscDir);await d.promises.mkdir(e,{recursive:!0});let t={react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`},n=this.options.alias||{};for(let[e,r]of Object.entries(n)){let n=f.isAbsolute(r)?r:f.resolve(this.projectRoot,r),i=f.join(this.projectRoot,`src`),a=f.relative(i,n);if(a.startsWith(`..`))continue;let o=f.join(this.options.outDir,this.options.rscDir,a),s=f.resolve(this.projectRoot,o);t[e]||(t[`${e}/`]=`${m(s).href}/`)}let r={components:{},importMap:{imports:t},version:`1.0.0`,buildTime:new Date().toISOString()};for(let[e,t]of this.serverComponents){if(this.isPageComponent(e))continue;let n=f.relative(this.projectRoot,e),i=this.getComponentId(n),a=f.join(this.options.rscDir,`${i}.js`),o=f.join(this.options.outDir,a),s=f.dirname(o);await d.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=m(f.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}for(let[e,t]of this.serverComponents){if(!this.isPageComponent(e))continue;let n=f.relative(this.projectRoot,e),i=this.getComponentId(n),a=f.join(this.options.rscDir,`${i}.js`),o=f.join(this.options.outDir,a),s=f.dirname(o);await d.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=m(f.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}for(let[e,t]of this.serverActions){let n=f.relative(this.projectRoot,e),i=this.getComponentId(n),a=f.join(this.options.rscDir,`${i}.js`),o=f.join(this.options.outDir,a),s=f.dirname(o);await d.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=m(f.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}let i=f.join(this.options.outDir,this.options.manifestPath);await d.promises.writeFile(i,JSON.stringify(r,null,2),`utf-8`);let a={};this.options.csp&&(a.csp=this.options.csp),this.options.cacheControl&&(a.cacheControl=this.options.cacheControl);let o=f.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(a).length===0)try{await d.promises.unlink(o)}catch(e){e.code!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await d.promises.writeFile(o,JSON.stringify(a,null,2),`utf-8`);return r}async buildSingleComponent(e,t,n=!1){let r=await d.promises.readFile(e,`utf-8`),i=this.transformClientImports(r,e),a=this.isPageComponent(e),o=a?this.transformComponentImportsToGlobal(i):i,s=f.extname(e),c;c=s===`.tsx`?`tsx`:s===`.ts`?`ts`:s===`.jsx`?`jsx`:`js`;let l=`\0virtual:${e}`,u=await h({input:l,platform:`node`,write:!1,external:[Y,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${c}`]:c},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(p.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(l,o,c,e,a)});if(!u.output||u.output.length===0)throw Error(`No output generated from Rolldown`);let m=u.output.find(e=>e.type===`chunk`&&e.isEntry);if(!m||m.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let g=m.code;g=`// Built: ${new Date().toISOString()}\n${g}`,await d.promises.writeFile(t,g,`utf-8`);let _=await d.promises.open(t,`r+`);if(await _.sync(),await _.close(),n)return g}createSelfRegisteringModule(e,t){if(e.includes(`Self-registering Production Component`))return e;let i=e,s=null,l=[];if(i=i.replace(o,(e,t)=>(s=t,`function ${t}`)),i=i.replace(a,(e,t)=>(s=t,`async function ${t}`)),i=i.replace(c,(e,t)=>(s=t,`// Default export: ${t}`)),i=i.replace(n,(e,t)=>(s=t,`// Default export: ${t}`)),i=i.replace(ee,(e,n)=>{let r=n.split(`,`).map(e=>e.trim()),a=[];return r.forEach(e=>{if(e.includes(`as default`)){let t=e.replace(`as default`,``).trim();s=t,a.push(`${t} (default)`)}else if(e===`default`){let e=`${t}_default`;i.includes(`var ${e}`)&&(s=e),a.push(`default`)}else l.push(e),a.push(e)}),`// Exports: ${a.join(`, `)}`}),i=i.replace(r,(e,t)=>(l.push(t),e.replace(`export `,``))),i=i.replace(te,(e,t,n)=>(l.push(n),`${t} ${n}`)),!s){let e=`${t}_default`;i.includes(`var ${e}`)&&(s=e)}return`// Self-registering Production Component: ${t}
62
+
63
+ if (!globalThis["${t}"]) {
64
+ ${i}
65
+
66
+ try {
67
+ const moduleKey = "${t}";
68
+ let mainExport = null;
69
+ const exportedFunctions = {};
70
+
71
+ if (!globalThis['~serverFunctions']) globalThis['~serverFunctions'] = {};
72
+ if (!globalThis['~serverFunctions'].all) globalThis['~serverFunctions'].all = {};
73
+
74
+ ${l.map(e=>`if (typeof ${e} !== 'undefined') {
75
+ globalThis.${e} = ${e};
76
+ globalThis['~serverFunctions'].all['${t}:${e}'] = ${e};
77
+ exportedFunctions['${e}'] = ${e};
78
+ }`).join(`
79
+ `)}
80
+
81
+ ${s?`if (typeof ${s} !== 'undefined') {
82
+ mainExport = ${s};
83
+ }`:``}
84
+
85
+ if (mainExport === null && Object.keys(exportedFunctions).length > 0) {
86
+ if (Object.keys(exportedFunctions).length === 1) {
87
+ mainExport = exportedFunctions[Object.keys(exportedFunctions)[0]];
88
+ } else {
89
+ let componentFunction = null;
90
+ let firstFunction = null;
91
+
92
+ for (const [name, value] of Object.entries(exportedFunctions)) {
93
+ if (typeof value === 'function') {
94
+ if (!firstFunction) firstFunction = value;
95
+ if (/^[A-Z]/.test(name)) {
96
+ componentFunction = value;
97
+ break;
98
+ }
99
+ }
100
+ }
101
+
102
+ mainExport = componentFunction || firstFunction;
103
+ }
104
+ }
105
+
106
+ if (mainExport !== null) {
107
+ if (!globalThis[moduleKey]) {
108
+ globalThis[moduleKey] = mainExport;
109
+ }
110
+
111
+ if (!globalThis['~clientComponents']) globalThis['~clientComponents'] = {};
112
+ globalThis['~clientComponents'][moduleKey] = {
113
+ component: mainExport,
114
+ id: moduleKey,
115
+ registered: true
116
+ };
117
+
118
+ if (typeof globalThis.RscModuleManager !== 'undefined' && globalThis.RscModuleManager.register) {
119
+ globalThis.RscModuleManager.register(moduleKey, mainExport, exportedFunctions);
120
+ }
121
+ }
122
+ } catch (error) {
123
+ console.error('[rari] Build: Error in self-registration for ${t}:', error);
124
+ }
125
+ }`}transformClientImports(e,t){let n=e,r,i=[],a=!1,o=[`rari/image`];for(U.lastIndex=0;r=U.exec(e),r!==null;){let[e,n,s,c]=r,l=!1,u=c;if(o.includes(c))l=!0;else{let e=this.resolveImportPath(c,t);this.isClientComponent(e)&&(l=!0,u=f.relative(this.projectRoot,e).replace(X,`/`))}if(l){a=!0;let t=``;n?t=`const ${n} = registerClientReference(
126
+ null,
127
+ ${JSON.stringify(u)},
128
+ "default"
129
+ );`:s&&(t=s.split(`,`).map(e=>e.trim()).map(e=>{let[t,n]=e.includes(` as `)?e.split(` as `).map(e=>e.trim()):[e,e];return`const ${n} = registerClientReference(
130
+ null,
131
+ ${JSON.stringify(u)},
132
+ ${JSON.stringify(t)}
133
+ );`}).join(`
134
+ `)),i.push({original:e,replacement:t})}}a&&(n=`
135
+ function registerClientReference(clientReference, id, exportName) {
136
+ const key = id + '#' + exportName;
137
+
138
+ const clientProxy = {};
139
+
140
+ Object.defineProperty(clientProxy, '$$typeof', {
141
+ value: Symbol.for('react.client.reference'),
142
+ enumerable: false
143
+ });
144
+
145
+ Object.defineProperty(clientProxy, '$$id', {
146
+ value: key,
147
+ enumerable: false
148
+ });
149
+
150
+ Object.defineProperty(clientProxy, '$$async', {
151
+ value: false,
152
+ enumerable: false
153
+ });
154
+
155
+ try {
156
+ if (typeof globalThis.registerClientComponent === 'function') {
157
+ globalThis.registerClientComponent(key, id, clientProxy);
158
+ }
159
+ } catch (error) {
160
+ console.error('[rari] Build: Failed to register client reference:', error);
161
+ }
162
+
163
+ return clientProxy;
164
+ }
165
+
166
+ `+n);for(let{original:e,replacement:t}of i)n=n.replace(e,t);return n}resolveImportPath(e,t){let n=e,r=this.options.alias||{};for(let[t,i]of Object.entries(r))if(e.startsWith(`${t}/`)||e===t){let r=e.slice(t.length);n=f.join(i,r);break}f.isAbsolute(n)||(n=f.resolve(f.dirname(t),n));let i=[`.tsx`,`.jsx`,`.ts`,`.js`];return I(n,i)||L(n,i)||`${n}.tsx`}getComponentId(e){return e.replace(G,`/`).replace(K,``).replace(s,`_`).replace(t,``)}async rebuildComponent(e){let t=this.getComponentId(f.relative(this.projectRoot,e)),n=await d.promises.readFile(e,`utf-8`),r=this.extractDependencies(n),i={filePath:e,originalCode:n,dependencies:r,hasNodeImports:this.hasNodeImports(n)};this.isServerAction(n)?this.serverActions.set(e,i):this.serverComponents.set(e,i);let a=f.join(this.options.rscDir,`${t}.js`),o=f.join(this.options.outDir,a),s=this.buildCache.get(e),c=(await d.promises.stat(e)).mtimeMs;if(s&&s.timestamp>=c&&JSON.stringify(s.dependencies)===JSON.stringify(r))return await d.promises.writeFile(o,s.code,`utf-8`),await this.updateManifestForComponent(t,e,a),{componentId:t,bundlePath:f.join(this.options.outDir,a),success:!0};let l=f.dirname(o);await d.promises.mkdir(l,{recursive:!0});let u=await this.buildSingleComponent(e,o,!0);return this.buildCache.set(e,{code:u,timestamp:Date.now(),dependencies:r}),await this.updateManifestForComponent(t,e,a),{componentId:t,bundlePath:f.join(this.options.outDir,a),success:!0}}manifestCache=null;async updateManifestForComponent(e,t,n){let r=f.join(this.options.outDir,this.options.manifestPath),i;if(this.manifestCache)i=this.manifestCache;else if(d.existsSync(r)){let e=await d.promises.readFile(r,`utf-8`);i=JSON.parse(e),this.manifestCache=i}else i={components:{},importMap:{imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},version:`1.0.0`,buildTime:new Date().toISOString()},this.manifestCache=i;let a=this.serverComponents.get(t)||this.serverActions.get(t),o=f.join(this.options.outDir,n),s=m(f.resolve(this.projectRoot,o)).href;if(a)i.components[e]={id:e,filePath:t,relativePath:f.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:s,dependencies:a.dependencies,hasNodeImports:a.hasNodeImports};else{let r=await d.promises.readFile(t,`utf-8`);i.components[e]={id:e,filePath:t,relativePath:f.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:s,dependencies:this.extractDependencies(r),hasNodeImports:this.hasNodeImports(r)}}i.importMap||={imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},i.buildTime=new Date().toISOString(),await d.promises.writeFile(r,JSON.stringify(i,null,2),`utf-8`),this.manifestCache=i}clearCache(){this.buildCache.clear(),this.manifestCache=null}invalidateBuildCacheFor(e){this.buildCache.delete(e)}async getTransformedComponentCode(e){return await this.buildComponentCodeOnly(e)}};function Q(e,t,n=!0){n&&t.buildImportGraph(e);let r=d.readdirSync(e,{withFileTypes:!0});for(let n of r){let r=f.join(e,n.name);if(n.isDirectory())Q(r,t,!1);else if(n.isFile()&&l.test(n.name)){if(ne.test(n.name)||n.name.endsWith(`.d.ts`))continue;try{let e=d.readFileSync(r,`utf-8`);if(E(e)){t.addServerComponent(r,e);continue}if(t.isOnlyImportedByClientComponents(r))continue;t.isServerComponent(r,e)&&t.addServerComponent(r,e)}catch(e){console.warn(`[server-build] Error checking ${r}:`,e instanceof Error?e.message:e)}}}}function $(e={}){let t=null,n,r=!1,i={};return{name:`rari-server-build`,configResolved(a){n=a.root,r=a.command===`serve`;let o={};if(a.resolve?.alias){let e=a.resolve.alias;Array.isArray(e)?e.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&(o[e.find]=e.replacement)}):typeof e==`object`&&Object.entries(e).forEach(([e,t])=>{typeof t==`string`&&(o[e]=t)})}i=o,t=new Z(n,{...e,alias:o})},buildStart(){if(!t)return;let e=p.env.NODE_ENV===`production`,r=[f.join(n,`dist`,`cache`,`og`),f.join(n,`dist`,`cache`,`images`)];e&&r.push(`/tmp/rari-og-cache`,`/tmp/rari-image-cache`);for(let e of r)try{d.existsSync(e)&&d.rmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[rari] Failed to clear cache ${e}:`,t)}let i=f.join(n,`src`);d.existsSync(i)&&Q(i,t)},async closeBundle(){if(t){await t.buildServerComponents();try{let{generateRobotsFile:e}=await import(`./robots-generator-Byiwomr5.mjs`);await e({appDir:f.join(n,`src`,`app`),outDir:f.join(n,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]})}catch(e){console.warn(`[rari] Failed to generate robots.txt:`,e)}try{let{generateSitemapFiles:e}=await import(`./sitemap-generator-DXQL4RtJ.mjs`);await e({appDir:f.join(n,`src`,`app`),outDir:f.join(n,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`],aliases:i})}catch(e){console.warn(`[rari] Failed to generate sitemap:`,e)}}},async handleHotUpdate({file:e}){if(!t||!r)return;let i=f.relative(n,e).replace(G,`/`);if(!(!i.startsWith(`src/`)||!l.test(i)))try{if(D(await d.promises.readFile(e,`utf-8`)))return;await t.buildServerComponents()}catch(e){console.error(`[rari] Build: Error rebuilding ${i}:`,e)}}}}export{F as a,I as i,R as n,D as o,L as r,E as s,$ as t};
@@ -226,23 +226,12 @@ interface ServerCSPConfig {
226
226
  defaultSrc?: string[];
227
227
  workerSrc?: string[];
228
228
  }
229
- interface ServerRateLimitConfig {
230
- enabled?: boolean;
231
- requestsPerSecond?: number;
232
- burstSize?: number;
233
- revalidateRequestsPerMinute?: number;
234
- }
235
- interface ServerSpamBlockerConfig {
236
- enabled?: boolean;
237
- }
238
229
  interface ServerCacheControlConfig {
239
230
  routes: Record<string, string>;
240
231
  }
241
232
  interface ServerConfig {
242
233
  csp?: ServerCSPConfig;
243
- rateLimit?: ServerRateLimitConfig;
244
- spamBlocker?: ServerSpamBlockerConfig;
245
234
  cacheControl?: ServerCacheControlConfig;
246
235
  }
247
236
  //#endregion
248
- export { extractServerPropsWithCache as C, extractServerProps as S, hasServerSideDataFetching as T, ServerSidePropsResult as _, ServerSpamBlockerConfig as a, clearPropsCacheForComponent as b, ErrorBoundary as c, NotFound as d, RuntimeClient as f, MetadataResult as g, createLoadingBoundary as h, ServerRateLimitConfig as i, HttpRuntimeClient as l, createHttpRuntimeClient as m, ServerCacheControlConfig as n, DefaultError as o, createErrorBoundary as p, ServerConfig as r, DefaultLoading as s, ServerCSPConfig as t, LoadingSpinner as u, StaticParamsResult as v, extractStaticParams as w, extractMetadata as x, clearPropsCache as y };
237
+ export { hasServerSideDataFetching as C, extractStaticParams as S, clearPropsCache as _, DefaultLoading as a, extractServerProps as b, LoadingSpinner as c, createErrorBoundary as d, createHttpRuntimeClient as f, StaticParamsResult as g, ServerSidePropsResult as h, DefaultError as i, NotFound as l, MetadataResult as m, ServerCacheControlConfig as n, ErrorBoundary as o, createLoadingBoundary as p, ServerConfig as r, HttpRuntimeClient as s, ServerCSPConfig as t, RuntimeClient as u, clearPropsCacheForComponent as v, extractServerPropsWithCache as x, extractMetadata as y };
@@ -0,0 +1,7 @@
1
+ import{A as e,D as t,E as n,O as r,k as i}from"./regex-constants-CmOAY1_W.mjs";import{t as a}from"./alias-resolver-D1GHg-4o.mjs";import{Buffer as o}from"node:buffer";import{existsSync as s,promises as c}from"node:fs";import l from"node:path";const u=/[^\w-]/g,d=`\0virtual:sitemap`;function f(a){return a.replace(n,`&amp;`).replace(i,`&lt;`).replace(r,`&gt;`).replace(e,`&quot;`).replace(t,`&apos;`)}function p(e){return(typeof e==`string`?new Date(e):e).toISOString()}function m(e){return[` <image:image>`,` <image:loc>${f(e)}</image:loc>`,` </image:image>`].join(`
2
+ `)}function h(e){let t=[` <image:image>`,` <image:loc>${f(e.loc)}</image:loc>`];return e.title&&t.push(` <image:title>${f(e.title)}</image:title>`),e.caption&&t.push(` <image:caption>${f(e.caption)}</image:caption>`),e.geoLocation&&t.push(` <image:geo_location>${f(e.geoLocation)}</image:geo_location>`),e.license&&t.push(` <image:license>${f(e.license)}</image:license>`),t.push(` </image:image>`),t.join(`
3
+ `)}function g(e){let t=[];for(let n of e)typeof n==`string`?t.push(m(n)):t.push(h(n));return t.join(`
4
+ `)}function _(e){let t=[];if(t.push(` <video:video>`),t.push(` <video:title>${f(e.title)}</video:title>`),t.push(` <video:thumbnail_loc>${f(e.thumbnail_loc)}</video:thumbnail_loc>`),t.push(` <video:description>${f(e.description)}</video:description>`),e.content_loc&&t.push(` <video:content_loc>${f(e.content_loc)}</video:content_loc>`),e.player_loc&&t.push(` <video:player_loc>${f(e.player_loc)}</video:player_loc>`),e.duration!==void 0&&t.push(` <video:duration>${e.duration}</video:duration>`),e.expiration_date&&t.push(` <video:expiration_date>${f(e.expiration_date)}</video:expiration_date>`),e.rating!==void 0&&t.push(` <video:rating>${e.rating}</video:rating>`),e.view_count!==void 0&&t.push(` <video:view_count>${e.view_count}</video:view_count>`),e.publication_date&&t.push(` <video:publication_date>${f(e.publication_date)}</video:publication_date>`),e.family_friendly!==void 0&&t.push(` <video:family_friendly>${e.family_friendly?`yes`:`no`}</video:family_friendly>`),e.requires_subscription!==void 0&&t.push(` <video:requires_subscription>${e.requires_subscription?`yes`:`no`}</video:requires_subscription>`),e.live!==void 0&&t.push(` <video:live>${e.live?`yes`:`no`}</video:live>`),e.restriction&&t.push(` <video:restriction relationship="${f(e.restriction.relationship)}">${f(e.restriction.content)}</video:restriction>`),e.platform&&t.push(` <video:platform relationship="${f(e.platform.relationship)}">${f(e.platform.content)}</video:platform>`),e.uploader){let n=e.uploader.info?` info="${f(e.uploader.info)}"`:``;t.push(` <video:uploader${n}>${f(e.uploader.name)}</video:uploader>`)}if(e.tag)for(let n of e.tag)t.push(` <video:tag>${f(n)}</video:tag>`);return t.push(` </video:video>`),t.join(`
5
+ `)}function v(e){return e.map(e=>_(e)).join(`
6
+ `)}function y(e){let t=e.some(e=>e.images&&e.images.length>0),n=e.some(e=>e.videos&&e.videos.length>0),r=e.some(e=>e.alternates?.languages),i=[`xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"`];return t&&i.push(`xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"`),n&&i.push(`xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"`),r&&i.push(`xmlns:xhtml="http://www.w3.org/1999/xhtml"`),i}function b(e,t){e.push(` <url>`),e.push(` <loc>${f(t.url)}</loc>`),t.lastModified&&e.push(` <lastmod>${p(t.lastModified)}</lastmod>`),t.changeFrequency&&e.push(` <changefreq>${t.changeFrequency}</changefreq>`),t.priority!==void 0&&e.push(` <priority>${t.priority}</priority>`)}function x(e,t){if(t.alternates?.languages)for(let[n,r]of Object.entries(t.alternates.languages))e.push(` <xhtml:link rel="alternate" hreflang="${f(n)}" href="${f(String(r))}" />`)}function S(e,t){t.images&&t.images.length>0&&e.push(g(t.images)),t.videos&&t.videos.length>0&&e.push(v(t.videos))}function C(e){let t=[`<?xml version="1.0" encoding="UTF-8"?>`,`<urlset ${y(e).join(` `)}>`];for(let n of e)b(t,n),x(t,n),S(t,n),t.push(` </url>`);return t.push(`</urlset>`),t.join(`
7
+ `)}async function w(e,t=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.json`]){let n=[],r=l.join(e,`sitemap.xml`);try{return await c.access(r),n.push({type:`static`,path:r}),n}catch{}for(let r of t){let t=l.join(e,`sitemap${r}`);try{return await c.access(t),n.push({type:`dynamic`,path:t}),n}catch{}}return n}function T(e){switch(e){case`ts`:return`ts`;case`tsx`:return`tsx`;case`js`:case`mjs`:case`cjs`:return`js`;case`jsx`:return`jsx`;case`json`:return`json`;default:throw Error(`Unsupported sitemap file extension: ".${e}". Allowed extensions are: .ts, .tsx, .js, .jsx, .mjs, .cjs, .json`)}}function E(e,t,n={},r){return{name:`virtual-sitemap`,resolveId(t,i){if(t===d)return t;if(Object.keys(n).length>0){let e=a(t,n,r);if(e){for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`]){let n=e+t;try{if(s(n))return n}catch{}}return e}}if(t.startsWith(`.`)){let n=l.resolve(l.dirname(i??e.path),t);for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`]){let t=n+e;try{if(s(t))return t}catch{}}return n}return null},async load(n){if(n===d)return{code:t,moduleType:T(l.extname(e.path).slice(1))};if(n&&!n.startsWith(`\0`))try{return{code:await c.readFile(n,`utf-8`),moduleType:T(l.extname(n).slice(1))}}catch{return null}return null}}}function D(e){if(!e.output||e.output.length===0)throw Error(`Failed to build sitemap module`);let t=e.output.find(e=>e.type===`chunk`&&e.isEntry)||e.output.find(e=>e.type===`chunk`);if(!t||t.type!==`chunk`)throw Error(`No chunk output found in sitemap build result`);return t.code}async function O(e,t,n={},r){let{build:i}=await import(`rolldown`),a=D(await i({input:d,external:[`rari`],platform:`node`,write:!1,output:{format:`esm`,codeSplitting:!1},plugins:[E(e,t,n,r)]}));return await import(`data:text/javascript;base64,${o.from(a).toString(`base64`)}`)}async function k(e,t){let n=await e.generateSitemaps(),r=l.join(t,`sitemap`);await c.mkdir(r,{recursive:!0});let i=new Map;for(let{id:t}of n)try{let n=String(t).replace(u,`_`);(!n||n.length===0)&&(n=`_`);let a=i.get(n);if(a!==void 0)throw Error(`Duplicate sanitized sitemap ID "${n}": original IDs "${a}" and "${t}" collide`);i.set(n,String(t));let o=C(typeof e.default==`function`?await e.default({id:t}):e.default),s=l.join(r,`${n}.xml`);await c.writeFile(s,o)}catch(e){throw Error(`Failed to generate sitemap for id "${t}"`,{cause:e})}}async function A(e,t){let n=C(typeof e.default==`function`?await e.default():e.default),r=l.join(t,`sitemap.xml`);await c.writeFile(r,n)}async function j(e){let{appDir:t,extensions:n,outDir:r,aliases:i={}}=e,a=await w(t,n);if(a.length===0)return!1;await c.mkdir(r,{recursive:!0});let o=a[0];if(o.type===`static`){let e=l.join(r,`sitemap.xml`);return await c.copyFile(o.path,e),!0}try{let e=await O(o,await c.readFile(o.path,`utf-8`),i,l.dirname(l.dirname(t)));return typeof e.generateSitemaps==`function`?await k(e,r):await A(e,r),!0}catch(e){return console.error(`[rari] Failed to build/execute sitemap file:`,e),!1}}export{j as generateSitemapFiles};
package/dist/vite.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- import { C as extractServerPropsWithCache, S as extractServerProps, T as hasServerSideDataFetching, _ as ServerSidePropsResult, a as ServerSpamBlockerConfig, b as clearPropsCacheForComponent, f as RuntimeClient, g as MetadataResult, i as ServerRateLimitConfig, l as HttpRuntimeClient, m as createHttpRuntimeClient, n as ServerCacheControlConfig, r as ServerConfig, t as ServerCSPConfig, v as StaticParamsResult, w as extractStaticParams, x as extractMetadata, y as clearPropsCache } from "./server-config-DXVkrIkP.mjs";
2
- import { a as ErrorProps, c as LayoutEntry, d as Metadata, f as NotFoundEntry, h as RouteSegmentType, i as ErrorEntry, l as LayoutProps, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, p as PageProps, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-Cfe0C3JU.mjs";
3
- import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-CyBO6ooC.mjs";
4
- import { a as ProxyModule, c as RariURL, i as ProxyMatcher, l as RequestCookies, n as ProxyConfig, o as ProxyResult, r as ProxyFunction, s as RariFetchEvent, t as CookieOptions, u as ResponseCookies } from "./types-DovC7o1Y.mjs";
1
+ import { C as hasServerSideDataFetching, S as extractStaticParams, _ as clearPropsCache, b as extractServerProps, f as createHttpRuntimeClient, g as StaticParamsResult, h as ServerSidePropsResult, m as MetadataResult, n as ServerCacheControlConfig, r as ServerConfig, s as HttpRuntimeClient, t as ServerCSPConfig, u as RuntimeClient, v as clearPropsCacheForComponent, x as extractServerPropsWithCache, y as extractMetadata } from "./server-config-CGmxgSPb.mjs";
2
+ import { a as ErrorProps, c as LayoutEntry, d as Metadata, f as NotFoundEntry, h as RouteSegmentType, i as ErrorEntry, l as LayoutProps, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, p as PageProps, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-CC9LMWMo.mjs";
3
+ import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-D0xSj7FK.mjs";
4
+ import { a as ProxyModule, c as RariURL, i as ProxyMatcher, l as RequestCookies, n as ProxyConfig, o as ProxyResult, r as ProxyFunction, s as RariFetchEvent, t as CookieOptions, u as ResponseCookies } from "./types-DOgYNbON.mjs";
5
5
  import { RariRequest } from "./proxy/RariRequest.mjs";
6
6
  import { RariResponse } from "./proxy/RariResponse.mjs";
7
7
  import { Plugin, UserConfig } from "vite-plus";
@@ -26,8 +26,6 @@ interface ServerBuildOptions {
26
26
  alias?: Record<string, string>;
27
27
  define?: Record<string, string>;
28
28
  csp?: ServerCSPConfig;
29
- rateLimit?: ServerRateLimitConfig;
30
- spamBlocker?: ServerSpamBlockerConfig;
31
29
  cacheControl?: ServerCacheControlConfig;
32
30
  }
33
31
  //#endregion
@@ -70,15 +68,6 @@ interface RariOptions {
70
68
  defaultSrc?: string[];
71
69
  workerSrc?: string[];
72
70
  };
73
- rateLimit?: {
74
- enabled?: boolean;
75
- requestsPerSecond?: number;
76
- burstSize?: number;
77
- revalidateRequestsPerMinute?: number;
78
- };
79
- spamBlocker?: {
80
- enabled?: boolean;
81
- };
82
71
  cacheControl?: {
83
72
  routes: Record<string, string>;
84
73
  };
@@ -130,4 +119,4 @@ type Request$1 = globalThis.Request;
130
119
  type Response$1 = globalThis.Response;
131
120
  declare function rari(options?: Parameters<typeof rari$1>[0]): any[];
132
121
  //#endregion
133
- export { ApiResponse, type ApiRouteHandlers, type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, type CookieOptions, type ErrorEntry, type ErrorProps, type GenerateMetadata, type GenerateStaticParams, HttpRuntimeClient, type LayoutEntry, type LayoutProps, type LoadingEntry, type Metadata, type MetadataResult, type NotFoundEntry, type PageProps, type ProxyConfig, type ProxyFunction, type ProxyMatcher, type ProxyModule, type ProxyPluginOptions, type ProxyResult, type RariFetchEvent, RariRequest, RariResponse, type RariURL, Request$1 as Request, type RequestCookies, Response$1 as Response, type ResponseCookies, type Robots, type RobotsRule, type RouteContext, type RouteHandler, type RouteSegment, type RouteSegmentType, type RuntimeClient, type ServerCSPConfig, type ServerConfig, type ServerRateLimitConfig, type ServerSidePropsResult, type ServerSpamBlockerConfig, type Sitemap, type SitemapEntry, type SitemapImage, type SitemapVideo, type StaticParamsResult, clearPropsCache, clearPropsCacheForComponent, createHttpRuntimeClient, defineRariConfig, defineRariOptions, extractMetadata, extractServerProps, extractServerPropsWithCache, extractStaticParams, generateAppRouteManifest, hasServerSideDataFetching, rari, rariProxy, rariRouter };
122
+ export { ApiResponse, type ApiRouteHandlers, type AppRouteEntry, type AppRouteManifest, type AppRouteMatch, type CookieOptions, type ErrorEntry, type ErrorProps, type GenerateMetadata, type GenerateStaticParams, HttpRuntimeClient, type LayoutEntry, type LayoutProps, type LoadingEntry, type Metadata, type MetadataResult, type NotFoundEntry, type PageProps, type ProxyConfig, type ProxyFunction, type ProxyMatcher, type ProxyModule, type ProxyPluginOptions, type ProxyResult, type RariFetchEvent, RariRequest, RariResponse, type RariURL, Request$1 as Request, type RequestCookies, Response$1 as Response, type ResponseCookies, type Robots, type RobotsRule, type RouteContext, type RouteHandler, type RouteSegment, type RouteSegmentType, type RuntimeClient, type ServerCSPConfig, type ServerConfig, type ServerSidePropsResult, type Sitemap, type SitemapEntry, type SitemapImage, type SitemapVideo, type StaticParamsResult, clearPropsCache, clearPropsCacheForComponent, createHttpRuntimeClient, defineRariConfig, defineRariOptions, extractMetadata, extractServerProps, extractServerPropsWithCache, extractStaticParams, generateAppRouteManifest, hasServerSideDataFetching, rari, rariProxy, rariRouter };
package/dist/vite.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{RariRequest as e}from"./proxy/RariRequest.mjs";import{RariResponse as t}from"./proxy/RariResponse.mjs";import{_ as n,c as r,d as i,f as a,g as o,h as s,i as c,m as l,p as u,u as d}from"./runtime-client-CbbckLpl.mjs";import{i as f,n as p,o as m,r as h,t as g}from"./constants-B68HGlJT.mjs";import{C as _,S as v,T as y,_ as b,l as ee,r as x,t as S,u as C,w}from"./regex-constants-CmOAY1_W.mjs";import{a as T,i as te,o as E,r as ne,s as D,t as re}from"./server-build-D9GkgoYA.mjs";import{t as O}from"./timer-utils-DnyOf3e6.mjs";import{t as ie}from"./routes-DAS3afh_.mjs";import{Buffer as ae}from"node:buffer";import{spawn as oe}from"node:child_process";import k,{promises as A}from"node:fs";import j from"node:path";import M from"node:process";import{fileURLToPath as N}from"node:url";import P from"node:fs/promises";import{build as se}from"rolldown";function F(e={}){let{root:t=M.cwd(),srcDir:n=`src`,proxyFileName:r=`proxy`,extensions:i=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mts`,`.mjs`],verbose:a=!1}=e,o=null,s=e=>{a&&console.warn(`[rari] Proxy: ${e}`)};async function c(){for(let e of i){let n=`${r}${e}`,i=j.join(t,n);try{return await A.access(i),s(`Found proxy file: ${n}`),{filePath:i,exists:!0,relativePath:n}}catch{}}let e=j.join(t,n);try{await A.access(e);for(let t of i){let i=`${r}${t}`,a=j.join(e,i);try{return await A.access(a),s(`Found proxy file: ${j.join(n,i)}`),{filePath:a,exists:!0,relativePath:j.join(n,i)}}catch{}}}catch{}return null}return{name:`rari:proxy`,async buildStart(){o=await c(),s(o?`Proxy enabled: ${o.relativePath}`:`No proxy file found`)},configureServer(e){o&&(e.watcher.add(o.filePath),e.watcher.on(`change`,t=>{t===o?.filePath&&(s(`Proxy file changed, reloading...`),e.ws.send({type:`custom`,event:`rari:proxy-reload`}))}))},async handleHotUpdate({file:e,server:t}){if(o&&e===o.filePath)return s(`Hot reloading proxy...`),t.ws.send({type:`custom`,event:`rari:proxy-reload`,data:{file:o.relativePath}}),[]}}}const ce=/export\s+const\s+metadata\s*(?::\s*\w+\s*)?=\s*(\{[\s\S]*?\n\})/,le=/title\s*:\s*['"]([^'"]+)['"]/,ue=/description\s*:\s*['"]([^'"]+)['"]/,de=/keywords\s*:\s*\[([\s\S]*?)\]/,fe={appDir:`src/app`,extensions:[`.tsx`,`.jsx`,`.ts`,`.js`],outDir:`dist`};function I(e){switch(j.basename(e).replace(w,``)){case`page`:return`page`;case`layout`:return`layout`;case`loading`:return`loading`;case`error`:return`error`;case`not-found`:return`not-found`;case`route`:return`route`;default:return null}}function pe(e,t){let n=j.relative(t,j.dirname(e));return!n||n===`.`?`/`:`/${n.replace(S,`/`).split(`/`).filter(Boolean).join(`/`)}`}function L(e,t,n){if(t===`page`)return[e];let r=n.filter(t=>t===e||t.startsWith(`${e}/`));return r.length>0?r:[e]}function R(e){try{let t=e.match(ce);if(!t)return null;let n=t[1],r={},i=n.match(le);i&&(r.title=i[1]);let a=n.match(ue);a&&(r.description=a[1]);let o=n.match(de);o&&(r.keywords=o[1].split(`,`).map(e=>e.trim().replace(v,``)).filter(Boolean));for(let e of[`author`,`viewport`,`themeColor`,`robots`,`openGraph`,`twitter`]){let t=RegExp(`${e}\\s*:\\s*['"]([^'"]+)['"]`,`m`),i=n.match(t);i&&(r[e]=i[1])}return Object.keys(r).length>0?r:null}catch(e){return console.error(`[rari] Router: Failed to extract metadata:`,e),null}}function z(e){let t=[];for(let n of[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`]){let r=RegExp(`export\\s+(?:async\\s+)?function\\s+${n}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${n}\\s*=`);(r.test(e)||i.test(e))&&t.push(n)}return t}async function B(e){try{let t=await fetch(`http://localhost:3000/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate-api-route`,filePath:e})});if(!t.ok){console.error(`[rari] Router: Failed to invalidate API route cache: ${t.statusText}`);return}let n=await t.json();n.success||console.error(`[rari] HMR: Failed to invalidate API route cache: ${n.error||`Unknown error`}`)}catch(e){console.error(`[rari] Router: Failed to notify API route invalidation:`,e)}}function V(e={}){let t={...fe,...e},n=null,r=new Map,i=null,a=new Set,o=e=>[...e].toSorted().join(`|`),s=async e=>{let n=new Set,r=async e=>{try{let i=await A.readdir(e,{withFileTypes:!0});for(let a of i){let i=j.join(e,a.name);a.isDirectory()?await r(i):a.isFile()&&t.extensions.some(e=>a.name.endsWith(e))&&I(i)&&n.add(i)}}catch{}};return await r(e),n},c=async(e,r=!1)=>{let c=j.resolve(e,t.appDir);try{await A.access(c)}catch{return null}try{let l=await s(c),u=o(l);if(!r&&i===u&&n)return n;let{generateAppRouteManifest:d}=await import(`./routes-DAS3afh_.mjs`).then(e=>e.n),f=await d(c,{extensions:t.extensions}),p=JSON.stringify(f,null,2),m=j.resolve(e,t.outDir);await A.mkdir(m,{recursive:!0});let h=j.join(m,`server`);return await A.mkdir(h,{recursive:!0}),await A.writeFile(j.join(h,`routes.json`),p,`utf-8`),i=u,a.clear(),l.forEach(e=>a.add(e)),p}catch(e){return console.error(`[rari] Router: Failed to generate app routes:`,e),null}},l=e=>{let n=j.resolve(e.config.root,t.appDir);e.watcher.on(`all`,async(r,i)=>{if(i.startsWith(n)&&t.extensions.some(e=>i.endsWith(e)))try{let n=I(i)!==null,o=r===`add`||r===`unlink`,s=n&&!a.has(i);(o||s)&&(await c(e.config.root,!0),i.includes(t.appDir)&&e.ws.send({type:`full-reload`,path:`*`}))}catch(e){console.error(`[rari] Router: Failed to regenerate app routes:`,e)}})},u;return{name:`rari-router`,configResolved(e){u=e.root;let t=e.logger.warn;e.logger.warn=(e,n)=>{typeof e==`string`&&e.includes(`runtime-client`)&&e.includes(`The above dynamic import cannot be analyzed`)||t(e,n)}},async writeBundle(){n=await c(u||M.cwd(),!0)},configureServer(e){l(e)},async handleHotUpdate(e){let{file:i,server:o}=e,s=j.resolve(o.config.root,t.appDir);if(i.startsWith(s)&&t.extensions.some(e=>i.endsWith(e))){let e=I(i);if(e){let t=r.get(i);t&&clearTimeout(t);let l=setTimeout(async()=>{r.delete(i);let t=!a.has(i),l=n;n=await c(o.config.root,t);let u=l!==n,d=pe(i,s),f=[d];if(n)try{f=JSON.parse(n).routes.map(e=>e.path)}catch(e){console.error(`[rari] Router: Failed to parse manifest for affected routes:`,e)}let p=L(d,e,f),m,h=!1,g;if(e===`page`||e===`layout`)try{let e=R(await A.readFile(i,`utf-8`));e&&(m=e,h=!0)}catch(e){console.error(`[rari] Router: Failed to extract metadata:`,e)}if(e===`route`)try{g=z(await A.readFile(i,`utf-8`)),await B(j.relative(s,i))}catch(e){console.error(`[rari] Router: Failed to detect HTTP methods:`,e)}let _={fileType:e,filePath:j.relative(o.config.root,i),routePath:d,affectedRoutes:p,manifestUpdated:u,timestamp:Date.now(),metadata:m,metadataChanged:h,methods:g};o.ws.send({type:`custom`,event:`rari:app-router-updated`,data:_})},200);return r.set(i,l),[]}return n=await c(o.config.root),[]}},async closeBundle(){for(let e of r.values())clearTimeout(e);r.clear()}}}var me=class{errorCount=0;maxErrors;resetTimeout;resetTimer=null;lastError=null;constructor(e={}){this.maxErrors=e.maxErrors??5,this.resetTimeout=e.resetTimeout??3e4}recordError(e){this.errorCount++,this.lastError=e,this.resetTimer=O(this.resetTimer),this.resetTimer=setTimeout(()=>{this.reset()},this.resetTimeout),this.errorCount>=this.maxErrors&&this.handleMaxErrorsReached()}reset(){this.errorCount=0,this.lastError=null,this.resetTimer=O(this.resetTimer)}getErrorCount(){return this.errorCount}getLastError(){return this.lastError}hasReachedMaxErrors(){return this.errorCount>=this.maxErrors}handleMaxErrorsReached(){console.error(`[rari] HMR: Maximum error count (${this.maxErrors}) reached. Consider restarting the dev server if issues persist.`)}dispose(){this.reset()}};const he=/^(["'])use client\1\s*(?:;\s*)?(?:\/\/.*)?$/;var ge=class{serverComponentBuilder;rustServerUrl;pendingUpdates=new Map;pendingFiles=new Set;batchTimer=null;DEBOUNCE_DELAY=200;errorHandler;logBatch=[];logBatchTimer=null;LOG_BATCH_DELAY=500;constructor(e,t=3e3){this.serverComponentBuilder=e,this.rustServerUrl=`http://localhost:${t}`,this.errorHandler=new me({maxErrors:5,resetTimeout:3e4})}getErrorCount(){return this.errorHandler.getErrorCount()}async handleClientComponentUpdate(e,t){let n=j.relative(M.cwd(),e);try{let r=t.moduleGraph.getModuleById(e);r?(t.moduleGraph.invalidateModule(r),this.errorHandler.reset()):this.queueLog(`warning`,`Client component module not found in graph: ${n}`)}catch(e){let t=e instanceof Error?e.message:String(e);this.queueLog(`error`,`Failed to update client component: ${n} - ${t}`),this.errorHandler.recordError(e instanceof Error?e:Error(t))}}async handleServerComponentUpdate(e,t){this.pendingFiles.add(e);let n=this.pendingUpdates.get(e);n&&(clearTimeout(n),this.pendingUpdates.delete(e)),this.batchTimer&&clearTimeout(this.batchTimer),this.batchTimer=setTimeout(async()=>{let e=[...this.pendingFiles];if(this.pendingFiles.clear(),this.batchTimer=null,e.length===0)return;let n=this.collectDependentPageComponents(e);for(let e of n)this.serverComponentBuilder.invalidateBuildCacheFor(e);let r=[...e,...n],i=await Promise.allSettled(r.map(async e=>{let t=j.relative(M.cwd(),e);try{let n=await this.serverComponentBuilder.rebuildComponent(e);if(!n.success)throw Error(n.error||`Build failed`);return await this.notifyRustServer(n.componentId,n.bundlePath),{success:!0,componentId:n.componentId,filePath:e,relativePath:t}}catch(n){return{success:!1,filePath:e,relativePath:t,error:n instanceof Error?n:Error(String(n))}}})),a=[],o=[];if(i.forEach(e=>{e.status===`fulfilled`&&e.value.success?a.push(e.value):e.status===`fulfilled`&&!e.value.success?o.push(e.value):e.status===`rejected`&&o.push({filePath:``,relativePath:`unknown`,error:Error(String(e.reason))})}),a.length>0){let e=Date.now();a.forEach(({componentId:n})=>{t.hot.send(`rari:server-component-updated`,{id:n,t:e})}),this.errorHandler.reset(),t.ws.send({type:`custom`,event:`rari:hmr-error-cleared`,data:{t:e}})}if(o.length>0){let e=Date.now();o.forEach(({relativePath:n,error:r})=>{let i=r.message,a=(r.stack||``).substring(0,500);this.queueLog(`error`,`Failed to rebuild: ${n} - ${i}`),this.errorHandler.recordError(r),t.ws.send({type:`custom`,event:`rari:hmr-error`,data:{msg:i,stack:a,file:n,t:e,count:this.errorHandler.getErrorCount(),max:5}})}),this.errorHandler.hasReachedMaxErrors()&&this.queueLog(`error`,`Maximum error count reached (${this.errorHandler.getErrorCount()}). Consider restarting the dev server if issues persist.`)}},this.DEBOUNCE_DELAY)}async notifyRustServer(e,t){try{let n=await fetch(`${this.rustServerUrl}/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`reload-component`,component_id:e,bundle_path:t})});await d(n);let r=await n.text(),i;try{i=JSON.parse(r)}catch(e){throw Error(`Failed to parse server response (status ${n.status}): ${e instanceof Error?e.message:String(e)}. Response body: ${r.substring(0,200)}${r.length>200?`...`:``}`)}if(!i||typeof i!=`object`)throw Error(`Invalid server response (status ${n.status}): expected object, got ${typeof i}. Response body: ${r.substring(0,200)}${r.length>200?`...`:``}`);let a=i;if(!a.success)throw Error(a.message||a.error||`Component reload failed`)}catch(e){throw console.error(`[rari] HMR: Failed to notify Rust server:`,e),e}}collectDependentPageComponents(e){let t=this.serverComponentBuilder.getImportGraph(),n=new Set,r=new Set,i=a=>{if(r.has(a))return;r.add(a);let o=t.get(a);if(o)for(let t of o)(t.includes(`/app/`)||t.includes(`\\app\\`))&&!e.includes(t)&&n.add(t),i(t)};for(let t of e)i(t);return[...n]}detectComponentType(e){try{let t=k.readFileSync(e,`utf-8`).split(`
1
+ import{RariRequest as e}from"./proxy/RariRequest.mjs";import{RariResponse as t}from"./proxy/RariResponse.mjs";import{_ as n,c as r,d as i,f as a,g as o,h as s,i as c,m as l,p as u,u as d}from"./runtime-client-CbbckLpl.mjs";import{i as f,n as p,o as m,r as h,t as g}from"./constants-B68HGlJT.mjs";import{C as _,S as v,T as y,_ as b,l as ee,r as x,t as S,u as C,w}from"./regex-constants-CmOAY1_W.mjs";import{a as T,i as te,o as E,r as ne,s as D,t as re}from"./server-build-JfPg3Cjl.mjs";import{t as O}from"./timer-utils-DnyOf3e6.mjs";import{t as ie}from"./routes-C8Txll7p.mjs";import{Buffer as ae}from"node:buffer";import{spawn as oe}from"node:child_process";import k,{promises as A}from"node:fs";import j from"node:path";import M from"node:process";import{fileURLToPath as N}from"node:url";import P from"node:fs/promises";import{build as se}from"rolldown";function F(e={}){let{root:t=M.cwd(),srcDir:n=`src`,proxyFileName:r=`proxy`,extensions:i=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mts`,`.mjs`],verbose:a=!1}=e,o=null,s=e=>{a&&console.warn(`[rari] Proxy: ${e}`)};async function c(){for(let e of i){let n=`${r}${e}`,i=j.join(t,n);try{return await A.access(i),s(`Found proxy file: ${n}`),{filePath:i,exists:!0,relativePath:n}}catch{}}let e=j.join(t,n);try{await A.access(e);for(let t of i){let i=`${r}${t}`,a=j.join(e,i);try{return await A.access(a),s(`Found proxy file: ${j.join(n,i)}`),{filePath:a,exists:!0,relativePath:j.join(n,i)}}catch{}}}catch{}return null}return{name:`rari:proxy`,async buildStart(){o=await c(),s(o?`Proxy enabled: ${o.relativePath}`:`No proxy file found`)},configureServer(e){o&&(e.watcher.add(o.filePath),e.watcher.on(`change`,t=>{t===o?.filePath&&(s(`Proxy file changed, reloading...`),e.ws.send({type:`custom`,event:`rari:proxy-reload`}))}))},async handleHotUpdate({file:e,server:t}){if(o&&e===o.filePath)return s(`Hot reloading proxy...`),t.ws.send({type:`custom`,event:`rari:proxy-reload`,data:{file:o.relativePath}}),[]}}}const ce=/export\s+const\s+metadata\s*(?::\s*\w+\s*)?=\s*(\{[\s\S]*?\n\})/,le=/title\s*:\s*['"]([^'"]+)['"]/,ue=/description\s*:\s*['"]([^'"]+)['"]/,de=/keywords\s*:\s*\[([\s\S]*?)\]/,fe={appDir:`src/app`,extensions:[`.tsx`,`.jsx`,`.ts`,`.js`],outDir:`dist`};function I(e){switch(j.basename(e).replace(w,``)){case`page`:return`page`;case`layout`:return`layout`;case`loading`:return`loading`;case`error`:return`error`;case`not-found`:return`not-found`;case`route`:return`route`;default:return null}}function pe(e,t){let n=j.relative(t,j.dirname(e));return!n||n===`.`?`/`:`/${n.replace(S,`/`).split(`/`).filter(Boolean).join(`/`)}`}function L(e,t,n){if(t===`page`)return[e];let r=n.filter(t=>t===e||t.startsWith(`${e}/`));return r.length>0?r:[e]}function R(e){try{let t=e.match(ce);if(!t)return null;let n=t[1],r={},i=n.match(le);i&&(r.title=i[1]);let a=n.match(ue);a&&(r.description=a[1]);let o=n.match(de);o&&(r.keywords=o[1].split(`,`).map(e=>e.trim().replace(v,``)).filter(Boolean));for(let e of[`author`,`viewport`,`themeColor`,`robots`,`openGraph`,`twitter`]){let t=RegExp(`${e}\\s*:\\s*['"]([^'"]+)['"]`,`m`),i=n.match(t);i&&(r[e]=i[1])}return Object.keys(r).length>0?r:null}catch(e){return console.error(`[rari] Router: Failed to extract metadata:`,e),null}}function z(e){let t=[];for(let n of[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`]){let r=RegExp(`export\\s+(?:async\\s+)?function\\s+${n}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${n}\\s*=`);(r.test(e)||i.test(e))&&t.push(n)}return t}async function B(e){try{let t=await fetch(`http://localhost:3000/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate-api-route`,filePath:e})});if(!t.ok){console.error(`[rari] Router: Failed to invalidate API route cache: ${t.statusText}`);return}let n=await t.json();n.success||console.error(`[rari] HMR: Failed to invalidate API route cache: ${n.error||`Unknown error`}`)}catch(e){console.error(`[rari] Router: Failed to notify API route invalidation:`,e)}}function V(e={}){let t={...fe,...e},n=null,r=new Map,i=null,a=new Set,o=e=>[...e].toSorted().join(`|`),s=async e=>{let n=new Set,r=async e=>{try{let i=await A.readdir(e,{withFileTypes:!0});for(let a of i){let i=j.join(e,a.name);a.isDirectory()?await r(i):a.isFile()&&t.extensions.some(e=>a.name.endsWith(e))&&I(i)&&n.add(i)}}catch{}};return await r(e),n},c=async(e,r=!1)=>{let c=j.resolve(e,t.appDir);try{await A.access(c)}catch{return null}try{let l=await s(c),u=o(l);if(!r&&i===u&&n)return n;let{generateAppRouteManifest:d}=await import(`./routes-C8Txll7p.mjs`).then(e=>e.n),f=await d(c,{extensions:t.extensions}),p=JSON.stringify(f,null,2),m=j.resolve(e,t.outDir);await A.mkdir(m,{recursive:!0});let h=j.join(m,`server`);return await A.mkdir(h,{recursive:!0}),await A.writeFile(j.join(h,`routes.json`),p,`utf-8`),i=u,a.clear(),l.forEach(e=>a.add(e)),p}catch(e){return console.error(`[rari] Router: Failed to generate app routes:`,e),null}},l=e=>{let n=j.resolve(e.config.root,t.appDir);e.watcher.on(`all`,async(r,i)=>{if(i.startsWith(n)&&t.extensions.some(e=>i.endsWith(e)))try{let n=I(i)!==null,o=r===`add`||r===`unlink`,s=n&&!a.has(i);(o||s)&&(await c(e.config.root,!0),i.includes(t.appDir)&&e.ws.send({type:`full-reload`,path:`*`}))}catch(e){console.error(`[rari] Router: Failed to regenerate app routes:`,e)}})},u;return{name:`rari-router`,configResolved(e){u=e.root;let t=e.logger.warn;e.logger.warn=(e,n)=>{typeof e==`string`&&e.includes(`runtime-client`)&&e.includes(`The above dynamic import cannot be analyzed`)||t(e,n)}},async writeBundle(){n=await c(u||M.cwd(),!0)},configureServer(e){l(e)},async handleHotUpdate(e){let{file:i,server:o}=e,s=j.resolve(o.config.root,t.appDir);if(i.startsWith(s)&&t.extensions.some(e=>i.endsWith(e))){let e=I(i);if(e){let t=r.get(i);t&&clearTimeout(t);let l=setTimeout(async()=>{r.delete(i);let t=!a.has(i),l=n;n=await c(o.config.root,t);let u=l!==n,d=pe(i,s),f=[d];if(n)try{f=JSON.parse(n).routes.map(e=>e.path)}catch(e){console.error(`[rari] Router: Failed to parse manifest for affected routes:`,e)}let p=L(d,e,f),m,h=!1,g;if(e===`page`||e===`layout`)try{let e=R(await A.readFile(i,`utf-8`));e&&(m=e,h=!0)}catch(e){console.error(`[rari] Router: Failed to extract metadata:`,e)}if(e===`route`)try{g=z(await A.readFile(i,`utf-8`)),await B(j.relative(s,i))}catch(e){console.error(`[rari] Router: Failed to detect HTTP methods:`,e)}let _={fileType:e,filePath:j.relative(o.config.root,i),routePath:d,affectedRoutes:p,manifestUpdated:u,timestamp:Date.now(),metadata:m,metadataChanged:h,methods:g};o.ws.send({type:`custom`,event:`rari:app-router-updated`,data:_})},200);return r.set(i,l),[]}return n=await c(o.config.root),[]}},async closeBundle(){for(let e of r.values())clearTimeout(e);r.clear()}}}var me=class{errorCount=0;maxErrors;resetTimeout;resetTimer=null;lastError=null;constructor(e={}){this.maxErrors=e.maxErrors??5,this.resetTimeout=e.resetTimeout??3e4}recordError(e){this.errorCount++,this.lastError=e,this.resetTimer=O(this.resetTimer),this.resetTimer=setTimeout(()=>{this.reset()},this.resetTimeout),this.errorCount>=this.maxErrors&&this.handleMaxErrorsReached()}reset(){this.errorCount=0,this.lastError=null,this.resetTimer=O(this.resetTimer)}getErrorCount(){return this.errorCount}getLastError(){return this.lastError}hasReachedMaxErrors(){return this.errorCount>=this.maxErrors}handleMaxErrorsReached(){console.error(`[rari] HMR: Maximum error count (${this.maxErrors}) reached. Consider restarting the dev server if issues persist.`)}dispose(){this.reset()}};const he=/^(["'])use client\1\s*(?:;\s*)?(?:\/\/.*)?$/;var ge=class{serverComponentBuilder;rustServerUrl;pendingUpdates=new Map;pendingFiles=new Set;batchTimer=null;DEBOUNCE_DELAY=200;errorHandler;logBatch=[];logBatchTimer=null;LOG_BATCH_DELAY=500;constructor(e,t=3e3){this.serverComponentBuilder=e,this.rustServerUrl=`http://localhost:${t}`,this.errorHandler=new me({maxErrors:5,resetTimeout:3e4})}getErrorCount(){return this.errorHandler.getErrorCount()}async handleClientComponentUpdate(e,t){let n=j.relative(M.cwd(),e);try{let r=t.moduleGraph.getModuleById(e);r?(t.moduleGraph.invalidateModule(r),this.errorHandler.reset()):this.queueLog(`warning`,`Client component module not found in graph: ${n}`)}catch(e){let t=e instanceof Error?e.message:String(e);this.queueLog(`error`,`Failed to update client component: ${n} - ${t}`),this.errorHandler.recordError(e instanceof Error?e:Error(t))}}async handleServerComponentUpdate(e,t){this.pendingFiles.add(e);let n=this.pendingUpdates.get(e);n&&(clearTimeout(n),this.pendingUpdates.delete(e)),this.batchTimer&&clearTimeout(this.batchTimer),this.batchTimer=setTimeout(async()=>{let e=[...this.pendingFiles];if(this.pendingFiles.clear(),this.batchTimer=null,e.length===0)return;let n=this.collectDependentPageComponents(e);for(let e of n)this.serverComponentBuilder.invalidateBuildCacheFor(e);let r=[...e,...n],i=await Promise.allSettled(r.map(async e=>{let t=j.relative(M.cwd(),e);try{let n=await this.serverComponentBuilder.rebuildComponent(e);if(!n.success)throw Error(n.error||`Build failed`);return await this.notifyRustServer(n.componentId,n.bundlePath),{success:!0,componentId:n.componentId,filePath:e,relativePath:t}}catch(n){return{success:!1,filePath:e,relativePath:t,error:n instanceof Error?n:Error(String(n))}}})),a=[],o=[];if(i.forEach(e=>{e.status===`fulfilled`&&e.value.success?a.push(e.value):e.status===`fulfilled`&&!e.value.success?o.push(e.value):e.status===`rejected`&&o.push({filePath:``,relativePath:`unknown`,error:Error(String(e.reason))})}),a.length>0){let e=Date.now();a.forEach(({componentId:n})=>{t.hot.send(`rari:server-component-updated`,{id:n,t:e})}),this.errorHandler.reset(),t.ws.send({type:`custom`,event:`rari:hmr-error-cleared`,data:{t:e}})}if(o.length>0){let e=Date.now();o.forEach(({relativePath:n,error:r})=>{let i=r.message,a=(r.stack||``).substring(0,500);this.queueLog(`error`,`Failed to rebuild: ${n} - ${i}`),this.errorHandler.recordError(r),t.ws.send({type:`custom`,event:`rari:hmr-error`,data:{msg:i,stack:a,file:n,t:e,count:this.errorHandler.getErrorCount(),max:5}})}),this.errorHandler.hasReachedMaxErrors()&&this.queueLog(`error`,`Maximum error count reached (${this.errorHandler.getErrorCount()}). Consider restarting the dev server if issues persist.`)}},this.DEBOUNCE_DELAY)}async notifyRustServer(e,t){try{let n=await fetch(`${this.rustServerUrl}/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`reload-component`,component_id:e,bundle_path:t})});await d(n);let r=await n.text(),i;try{i=JSON.parse(r)}catch(e){throw Error(`Failed to parse server response (status ${n.status}): ${e instanceof Error?e.message:String(e)}. Response body: ${r.substring(0,200)}${r.length>200?`...`:``}`)}if(!i||typeof i!=`object`)throw Error(`Invalid server response (status ${n.status}): expected object, got ${typeof i}. Response body: ${r.substring(0,200)}${r.length>200?`...`:``}`);let a=i;if(!a.success)throw Error(a.message||a.error||`Component reload failed`)}catch(e){throw console.error(`[rari] HMR: Failed to notify Rust server:`,e),e}}collectDependentPageComponents(e){let t=this.serverComponentBuilder.getImportGraph(),n=new Set,r=new Set,i=a=>{if(r.has(a))return;r.add(a);let o=t.get(a);if(o)for(let t of o)(t.includes(`/app/`)||t.includes(`\\app\\`))&&!e.includes(t)&&n.add(t),i(t)};for(let t of e)i(t);return[...n]}detectComponentType(e){try{let t=k.readFileSync(e,`utf-8`).split(`
2
2
  `),n=!1;function r(e){return he.test(e.trim())}function i(e){let t=e;for(;t.includes(`/*`)&&t.includes(`*/`);){let e=t.indexOf(`/*`),n=t.indexOf(`*/`,e);if(n===-1)break;t=t.substring(0,e)+t.substring(n+2)}if(t.includes(`/*`)){let e=t.indexOf(`/*`);t=t.substring(0,e)}return t}for(let e of t){let t=e.trim();if(n){if(t.includes(`*/`)){n=!1;let e=t.substring(t.indexOf(`*/`)+2).trim();if(!e||e.startsWith(`//`))continue;let a=i(e).trim();if(!a||a.startsWith(`//`))continue;if(r(a))return`client`;break}continue}if(!(!t||t.startsWith(`//`))){if(t.includes(`/*`))if(t.includes(`*/`)){let e=i(t).trim();if(!e||e.startsWith(`//`))continue;if(r(e))return`client`;break}else{let e=t.substring(0,t.indexOf(`/*`)).trim();if(e){if(r(e))return`client`;break}n=!0;continue}if(r(t))return`client`;break}}return`server`}catch{return`unknown`}}queueLog(e,t){this.logBatch.push({type:e,message:t,timestamp:Date.now()}),this.logBatchTimer&&clearTimeout(this.logBatchTimer),this.logBatchTimer=setTimeout(()=>{this.flushLogs()},this.LOG_BATCH_DELAY)}flushLogs(){if(this.logBatch.length===0)return;let e=this.logBatch.reduce((e,t)=>(e[t.type]||(e[t.type]=[]),e[t.type].push(t),e),{});for(let[t,n]of Object.entries(e))if(n.length===1){let e=n[0];this.outputLog(t,e.message)}else{let e=n.map(e=>e.message).join(`
3
3
  • `);this.outputLog(t,`${n.length} updates:\n • ${e}`)}this.logBatch=[],this.logBatchTimer=null}outputLog(e,t){let n=`[rari] HMR:`;switch(e){case`success`:console.warn(`\x1B[32m${n}\x1B[0m ${t}`);break;case`warning`:console.warn(`\x1B[33m${n}\x1B[0m ${t}`);break;case`error`:console.error(`\x1B[31m${n}\x1B[0m ${t}`);break;default:console.warn(`${n} ${t}`);break}}dispose(){this.logBatchTimer&&(clearTimeout(this.logBatchTimer),this.flushLogs()),this.batchTimer&&=(clearTimeout(this.batchTimer),null);for(let e of this.pendingUpdates.values())clearTimeout(e);this.pendingUpdates.clear(),this.pendingFiles.clear(),this.errorHandler.dispose()}};const _e=/import\s+(\w+)\s+from\s+['"]rari\/image['"]/g,ve=/import\s+\{[^}]*\b(?:Image\s+as\s+(\w+)|Image)\b[^}]*\}\s+from\s+['"]rari\/image['"]/g,ye=/src:\s*["']([^"']+)["']/,H=/[.*+?^${}()|[\]\\]/g,U=/^[A-Z_$][\w$]*$/i,be=/width:\s*(\d+)/,xe=/quality:\s*(\d+)/,Se=/preload:\s*(true|!0)/,Ce=/preload:\s*(false|!1)/,we=/src=\{?["']([^"']+)["']\}?|src=\{([^}]+)\}/,Te=/width=\{?(\d+)\}?/,Ee=/quality=\{?(\d+)\}?/,De=/preload(?:=\{?true\}?)?/,Oe=/preload=\{?false\}?/;async function ke(e,t){try{await Be(await P.readFile(e,`utf8`),e,t)}catch(t){t.code!==`ENOENT`&&console.warn(`[rari] Image scanner: Failed to process ${e}:`,t)}}const Ae=new class{permits;queue=[];constructor(e){this.permits=e}async acquire(){if(this.permits>0){this.permits--;return}return new Promise(e=>{this.queue.push(e)})}release(){this.permits++;let e=this.queue.shift();e&&(this.permits--,e())}async run(e){await this.acquire();try{return await e()}finally{this.release()}}}(50);async function W(e,t){try{await P.access(e)}catch{return}let n=await P.readdir(e,{withFileTypes:!0}),r=[];for(let i of n){let n=j.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`||i.name===`dist`)continue;r.push(W(n,t))}else i.isFile()&&w.test(i.name)&&r.push(Ae.run(()=>ke(n,t)))}await Promise.all(r)}async function je(e,t=[]){let n=new Map;try{await P.access(e),await W(e,n)}catch(t){throw t.code===`ENOENT`?Error(`Required source directory does not exist: ${e}`):t}for(let e of t)try{await P.access(e),await W(e,n)}catch(t){t.code!==`ENOENT`&&console.warn(`[rari] Image scanner: Failed to scan directory ${e}:`,t)}return{images:[...n.values()]}}function Me(e){return e.endsWith(`.tsx`)?`tsx`:e.endsWith(`.jsx`)?`jsx`:e.endsWith(`.ts`)?`ts`:`js`}async function Ne(e,t,n){let r=`\0virtual:${t}`,i=await se({input:r,external:[`rari/image`],platform:`browser`,write:!1,output:{format:`esm`},moduleTypes:{[`.${n}`]:n},transform:{jsx:`react`},plugins:[{name:`virtual-module`,resolveId(e){return e===r?e:null},load(t){return t===r?{code:e,moduleType:n}:null}}]});if(!i.output||i.output.length===0)throw Error(`Transform produced no output`);return i.output[0].code}function G(e){let t=new Set;for(let n of e.matchAll(_e))t.add(n[1]);for(let n of e.matchAll(ve))n[1]?t.add(n[1]):t.add(`Image`);return t}function Pe(e){return G(e)}function Fe(e){let t=e.match(ye);if(!t)return null;let n=t[1];if(!n.startsWith(`/`)&&!n.startsWith(`http`))return null;let r=e.match(be),i=r?Number.parseInt(r[1],10):void 0,a=e.match(xe),o=a?Number.parseInt(a[1],10):void 0,s=e.match(Se),c=e.match(Ce);return{src:n,width:i,quality:o,preload:!!s&&!c}}function Ie(e,t){let n=`${e.src}:${e.width??`auto`}:${e.quality??75}`;(!t.has(n)||e.preload)&&t.set(n,e)}function Le(e,t){let n=0,r=!1,i=``,a=!1,o=0;for(let s=t;s<e.length;s++){let c=e[s];if(a){a=!1;continue}if(c===`\\`){a=!0;continue}if(!r&&(c===`"`||c===`'`||c==="`")){r=!0,i=c,c==="`"&&(o=1);continue}if(r&&c===i){i==="`"?(o--,o===0&&(r=!1,i=``)):(r=!1,i=``);continue}if(r&&i==="`"&&c===`$`&&s+1<e.length&&e[s+1]===`{`){n++,s++;continue}if(r&&i==="`"&&n>0&&c==="`"){o++;continue}if(r&&i==="`"&&c===`}`&&n>0){n--;continue}if(!r){if(c===`{`)n++;else if(c===`}`&&(n--,n===0))return e.substring(t+1,s)}}return null}function Re(e,t,n){for(let r of t){if(!U.test(r)){console.warn(`[rari] Image scanner: Skipping unsafe identifier: ${r}`);continue}let t=r.replace(H,`\\$&`),i=RegExp(`React\\.createElement\\(\\s*${t}\\s*,\\s*\\{`,`g`);for(let t of e.matchAll(i)){let r=Le(e,t.index+t[0].length-1);if(r){let e=Fe(r);e&&Ie(e,n)}}}}function ze(e){return G(e)}async function Be(e,t,n){let r=ze(e);if(r.size!==0)try{let r=await Ne(e,t,Me(t)),i=Pe(r);if(i.size===0)return;Re(r,i,n)}catch{Ve(e,r,n)}}function Ve(e,t,n){for(let r of t){if(!U.test(r)){console.warn(`[rari] Image scanner: Skipping unsafe alias: ${r}`);continue}let t=r.replace(H,`\\$&`),i=RegExp(`<${t}\\s([^/>]+)\\/>`,`g`),a=RegExp(`<${t}\\s([^>]+)>`,`g`);for(let t of e.matchAll(i))K(t[1],n);for(let t of e.matchAll(a))K(t[1],n)}}function K(e,t){let n=e.match(we);if(!n)return;let r=n[1]||n[2];if(!r||r.includes(`{`)||!r.startsWith(`/`)&&!r.startsWith(`http`))return;let i=e.match(Te),a=i?Number.parseInt(i[1],10):void 0,o=e.match(Ee),s=o?Number.parseInt(o[1],10):void 0,c=De.test(e)&&!Oe.test(e),l=`${r}:${a??`auto`}:${s??75}`;(!t.has(l)||c)&&t.set(l,{src:r,width:a,quality:s,preload:c})}const He=/import\s+type\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Ue=/import\s+type\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,We=/import\s+type\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Ge=/import\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Ke=/import\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,qe=/import\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Je=/import\s+["']\.\.?\/([^"']+)["'];?/g,Ye=/import\s*(?:\(\s*)?["']([^"']+)["']\)?/g,Xe=/export\s*\{([^}]+)\}/g,Ze=/\s+as\s+/,Qe=/export\s+default\s+(?:function|class)\s+\w+/,$e=/export\s+default\s+(?:async\s+)?function\s+(\w+)/,q=/export\s+default\s+([^;]+)/,et=/export\s+(?:async\s+)?(?:const|let|var|function|class)\s+(\w+)/g,tt=/^['"]use client['"];?\s*$/gm,nt=/import\s+["']([^"']+)["']/g,J=/^\s*import\s+(?:(\w+)(?:\s*,\s*\{\s*(?:(\w+(?:\s*,\s*\w+)*)\s*)?\})?|\{\s*(\w+(?:\s*,\s*\w+)*)\s*\})\s+from\s+['"]([./@][^'"]+)['"].*$/,rt=/import\s+\{[^}]*\}\s+from\s+['"]react['"]/,it=/import\s+[^,\s]+\s*,\s*\{[^}]*\}\s+from\s+['"]react['"]/,at=/import React(,\s*\{([^}]*)\})?\s+from\s+['"]react['"];?/,ot=/import\s+["']([^"']+)["']/g,st=/from(\s*)(['"])(?:\.\/vendor\/react-flight-client\/index|rari\/runtime\/vendor\/react-flight-client\/index)\.mjs\2/g,ct=/\bJSX\b/,Y=/^components\//,lt=/\{([^}]*)\}/,ut=/^['"]use client['"];?\s*\n/,dt={remotePatterns:[],localPatterns:[],deviceSizes:g,imageSizes:h,formats:p,qualityAllowlist:m,minimumCacheTTL:60,maxCacheSize:f};async function X(e){let t=import.meta.url,n=N(t),r=j.dirname(n),i=[j.join(r,`runtime`,e),j.join(r,`../runtime`,e)];for(let e of i)try{let t=await k.promises.readFile(e,`utf-8`);return e.endsWith(`.ts`)&&(t=t.replace(He,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Ue,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(We,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Ge,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(Ke,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(qe,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(Je,(e,t)=>`import "rari/${t}";`)),t}catch(t){t.code!==`ENOENT`&&t.code!==`EISDIR`&&console.warn(`[rari] Unexpected error reading ${e}:`,t)}throw Error(`Could not find ${e}. Tried: ${i.join(`, `)}`)}async function ft(){return X(`rsc-client-runtime.mjs`)}async function pt(e,t){return(await X(`entry-client.mjs`)).replace(`/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */`,e).replace(`/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */`,t)}async function mt(){return X(`react-server-dom-shim.mjs`)}async function Z(e,t){let n=await je(j.join(e,`src`)),r={...dt,...t.images,preoptimizeManifest:n.images},i=j.join(e,`dist`),a=j.join(i,`server`);k.existsSync(a)||k.mkdirSync(a,{recursive:!0});let o=j.join(a,`image.json`);k.writeFileSync(o,JSON.stringify(r,null,2))}function Q(e,t=[]){let n=new Set;function r(e){if(!k.existsSync(e))return;let t=k.readdirSync(e,{withFileTypes:!0});for(let i of t){let t=j.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`)continue;r(t)}else if(i.isFile()&&w.test(i.name))try{E(k.readFileSync(t,`utf8`))&&n.add(t)}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error during file scan:`,t,e)}}}r(e);for(let e of t)k.existsSync(e)&&r(e);return n}function ht(e){return e}function $(e={}){let t=new Map,n=new Set,r=new Map,i=null,a=null,o={};function s(e){if(r.has(e))return r.get(e);let t={hasUseServer:!1,hasUseClient:!1},n=e.replace(S,`/`);if(!w.test(n)||!n.includes(`/src/`))return r.set(e,t),t;try{let n=k.readFileSync(e,`utf-8`);t.hasUseServer=D(n),t.hasUseClient=E(n),r.set(e,t)}catch{r.set(e,t)}return t}function c(t){if(t.includes(`node_modules`)||t.includes(`/rari/dist/`)||t.includes(`\\rari\\dist\\`))return!1;let n=e.projectRoot||M.cwd(),r=j.join(n,`index.html`);if(k.existsSync(r))try{let e=k.readFileSync(r,`utf-8`);for(let r of e.matchAll(Ye)){let e=r[1];if(e.startsWith(`/src/`)&&j.join(n,e.slice(1))===t)return!1}}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error reading index.html:`,e)}let i;try{i=k.realpathSync(t)}catch{return!1}try{if(!k.existsSync(i))return!1;let e=k.readFileSync(i,`utf-8`),t=E(e);return D(e)?!1:!t}catch{return!1}}function l(e){try{let t=[],n=e.matchAll(Xe);for(let e of n){let n=e[1].split(`,`);for(let e of n){let n=e.trim().split(Ze).at(-1)?.trim();n&&t.push(n)}}(Qe.test(e)||T(e))&&t.push(`default`);let r=e.matchAll(et);for(let e of r)e[1]&&t.push(e[1]);return[...new Set(t)]}catch{return[]}}function u(e,t){if(!D(e))return e;let n=l(e);if(n.length===0)return e;let r=e;r+=`
4
4
 
@@ -41,7 +41,7 @@ const ${t} = registerClientReference(
41
41
  );`;s=s.replace(e,n),l=!0,h=!0}}else if(!y&&c(v)){l=!0,h=!0,g=!0;let e=a;u&&u!==`_`&&_.push(`const ${u} = createServerComponentWrapper('${f}', '${d}');`),s=s.replace(e,``)}}if(l){let e=s.includes(`import React`)||s.match(rt)||s.match(it),n=s.includes(`createServerComponentWrapper`),i=``;if(h&&!e&&(i+=`import React from 'react';
42
42
  `),g&&!n&&(i+=`import { createServerComponentWrapper } from 'virtual:rsc-integration.ts';
43
43
  `),_.length>0&&(i+=`${_.join(`
44
- `)}\n`),i&&(s=i+s),!s.includes(`Suspense`)){let e=s.match(at);e&&(e[1]&&!e[2].includes(`Suspense`)?s=s.replace(e[0],e[0].replace(lt,`{ Suspense, $1 }`)):e[1]||(s=s.replace(e[0],`import React, { Suspense } from 'react';`)))}let a=M.env.NODE_ENV!==`production`,o=s.includes(`</`)||s.includes(`/>`)||ct.test(s);return!E(s)&&o&&a&&(s=`'use client';\n\n${s}`,t.set(r,`client`)),s}return null},async configureServer(n){let r=e.projectRoot||M.cwd(),s=j.join(r,`src`);await Z(r,e);let l=null,u=async()=>{try{let{ServerComponentBuilder:t,scanDirectory:i}=await import(`./server-build-D9GkgoYA.mjs`).then(e=>e.n),s=new t(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,rateLimit:e.rateLimit,spamBlocker:e.spamBlocker,cacheControl:e.cacheControl});if(l=s,!a&&l){let e=M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3);a=new ge(l,e)}let u=j.join(r,`src`),d=[];if(k.existsSync(u)){let e=t=>{let n=k.readdirSync(t,{withFileTypes:!0});for(let r of n){let n=j.join(t,r.name);if(r.isDirectory())e(n);else if(r.isFile()&&w.test(r.name))try{c(n)&&d.push(n)}catch(e){console.error(`[rari] Error checking ${n}:`,e)}}};e(u),i(u,s)}d.length>0&&n.ws.send({type:`custom`,event:`rari:server-components-registry`,data:{serverComponents:d}});let f=await s.getTransformedComponentsForDevelopment(),p=`http://localhost:${M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3)}`;for(let e of f)try{if(e.id.startsWith(`app/`)||D(e.code))continue;let t=await fetch(`${p}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Runtime: Failed to register component ${e.id}:`,t instanceof Error?t.message:String(t))}}catch(e){console.error(`[rari] Runtime: Component discovery failed:`,e instanceof Error?e.message:String(e))}},d=async()=>{try{let e=`http://localhost:${M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3)}`,t=Q(s,Object.values(o));for(let n of t){let t=j.relative(M.cwd(),n),r=j.basename(n).replace(C,``);try{await fetch(`${e}/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:r,file_path:t,export_name:`default`})})}catch(e){console.error(`[rari] Runtime: Failed to pre-register client component ${r}:`,e)}}}catch(e){console.error(`[rari] Runtime: Failed to pre-register client components:`,e)}},f=async()=>{if(i)return;let{getBinaryPath:e,getInstallationInstructions:t}=await import(`./platform.mjs`),r;try{r=e()}catch(e){console.error(`rari binary not found`),console.error(` ${e.message}`),console.error(t());return}let a=M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3),o=M.env.NODE_ENV===`production`?`production`:`development`,s=n.config.server.port||5173,c=[`--mode`,o,`--port`,a.toString(),`--host`,`127.0.0.1`];i=oe(r,c,{stdio:[`ignore`,`pipe`,`pipe`],cwd:M.cwd(),env:{...M.env,RUST_LOG:M.env.RUST_LOG||`error`,RARI_VITE_PORT:s.toString()}}),i.stdout?.on(`data`,e=>{let t=e.toString().trim();t&&console.error(`${t}`)}),i.stderr?.on(`data`,e=>{let t=e.toString().trim();t&&!t.includes(`warning`)&&console.error(`${t}`)}),i.on(`error`,e=>{h=!1,console.error(`Failed to start rari server:`,e.message),e.message.includes(`ENOENT`)&&console.error(` Binary not found. Please ensure rari is properly installed.`)}),i.on(`exit`,(e,t)=>{i=null,h=!1,t?console.error(`rari server stopped by signal ${t}`):e===0?console.error(`rari server stopped successfully`):e&&console.error(`rari server exited with code ${e}`)});let l=!1;for(let e=0;e<20&&(l=await g(),!l);e++)await new Promise(e=>setTimeout(e,500));l?(await d(),await u()):console.error(`Server failed to become ready for component registration`)},p=async t=>{try{if(!c(t))return;let{ServerComponentBuilder:n}=await import(`./server-build-D9GkgoYA.mjs`).then(e=>e.n),i=new n(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,rateLimit:e.rateLimit,spamBlocker:e.spamBlocker,cacheControl:e.cacheControl});i.addServerComponent(t);let a=await i.getTransformedComponentsForDevelopment();if(a.length===0)return;let s=`http://localhost:${M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3)}`;for(let e of a)try{let t=await fetch(`${s}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Failed to register component`,`${e.id}:`,t instanceof Error?t.message:String(t))}}catch(e){console.error(`[rari] Targeted HMR failed for`,`${t}:`,e instanceof Error?e.message:String(e)),setTimeout(u,1e3)}};f().catch(e=>{console.error(`[rari] Failed to start Rust server:`,e)}),n.middlewares.use(async(e,t,n)=>{let r=e.headers.accept;if(r&&r.includes(`text/x-component`)&&e.url&&!e.url.startsWith(`/api`)&&!e.url.startsWith(`/rsc`)&&!e.url.includes(`.`)){if(!h&&!await g()){let e=Date.now();for(;Date.now()-e<1e4&&!await g();)await new Promise(e=>setTimeout(e,100));if(!h){console.error(`[rari] Rust server not ready, cannot proxy RSC request`),t.headersSent||(t.statusCode=503,t.end(`Server not ready`));return}}let n=M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3),r=`http://localhost:${n}${e.url}`;try{let i={};for(let[t,n]of Object.entries(e.headers))typeof n==`string`?i[t]=n:Array.isArray(n)&&(i[t]=n.join(`,`));i.host=`localhost:${n}`,i[`accept-encoding`]=`identity`;let a=await fetch(r,{method:e.method,headers:i});if(t.statusCode=a.status,a.headers.forEach((e,n)=>{n.toLowerCase()!==`content-encoding`&&t.setHeader(n,e)}),a.body){let e=a.body.getReader();try{for(;;){let{done:n,value:r}=await e.read();if(n)break;t.write(ae.from(r))}t.end()}catch(e){console.error(`[rari] Stream error:`,e),t.headersSent||(t.statusCode=500),t.end()}}else t.end();return}catch(e){console.error(`[rari] Failed to proxy RSC request:`,e),t.headersSent||(t.statusCode=500,t.end(`Internal Server Error`));return}}n()}),n.watcher.on(`change`,async e=>{w.test(e)&&t.delete(e),w.test(e)&&e.includes(s)&&(c(e)?(n.ws.send({type:`custom`,event:`rari:register-server-component`,data:{filePath:e}}),await p(e)):setTimeout(u,1e3))}),n.middlewares.use(`/api/vite/hmr-transform`,async(e,t)=>{if(e.method!==`POST`){t.statusCode=405,t.end(`Method Not Allowed`);return}let n=``;e.on(`data`,e=>{n+=e.toString()}),e.on(`end`,async()=>{try{let{filePath:e}=JSON.parse(n);if(!e){t.statusCode=400,t.end(JSON.stringify({error:`filePath is required`}));return}await p(e),t.statusCode=200,t.setHeader(`Content-Type`,`application/json`),t.end(JSON.stringify({success:!0,filePath:e,message:`Component transformation completed`}))}catch(e){t.statusCode=500,t.setHeader(`Content-Type`,`application/json`),t.end(JSON.stringify({success:!1,error:e instanceof Error?e.message:String(e)}))}})}),n.httpServer?.on(`close`,()=>{a&&=(a.dispose(),null),i&&=(i.kill(`SIGTERM`),null),h=!1})},resolveId(e,t){if(e===`virtual:rsc-integration`||e===`virtual:rsc-integration.ts`)return`virtual:rsc-integration.ts`;if(e===`virtual:rari-entry-client`||e===`virtual:rari-entry-client.ts`)return`virtual:rari-entry-client.ts`;if(e===`virtual:react-flight-client`||e===`virtual:react-flight-client.ts`)return`virtual:react-flight-client.ts`;if(e===`virtual:app-router-provider`||e===`virtual:app-router-provider.tsx`)return`virtual:app-router-provider.tsx`;if(e===`virtual:error-boundary-wrapper`||e===`virtual:error-boundary-wrapper.tsx`)return`virtual:error-boundary-wrapper.tsx`;if(e===`./DefaultLoadingIndicator`||e===`./DefaultLoadingIndicator.tsx`)return`virtual:default-loading-indicator.tsx`;if(e===`./LoadingErrorBoundary`||e===`./LoadingErrorBoundary.tsx`)return`virtual:loading-error-boundary.tsx`;if(e===`react-server-dom-rari/server`)return e;if(t&&t.startsWith(`virtual:`)&&e.startsWith(`../`)){let n=import.meta.url,r=N(n),i=j.dirname(r),a=null,o=[j.join(i,`runtime`),j.join(i,`../runtime`)];for(let e of o)if(k.existsSync(e)){a=e;break}if(a){let t=j.join(a,e);if(k.existsSync(t))return t;let n=j.join(a,`../dist`,j.basename(e));if(k.existsSync(n))return n}else console.warn(`[rari] Runtime directory not found, attempting fallback resolution for virtual import.\n Importer: ${t}\n ID: ${e}\n Current Dir: ${i}\n Hint: Runtime lookup failed, trying currentDir as fallback`);let s=j.join(i,e);if(k.existsSync(s))return s;let c=j.join(i,`../dist`,j.basename(e));if(k.existsSync(c))return c}if(M.env.NODE_ENV===`production`)try{let t=j.resolve(e);if(k.existsSync(t)&&c(t))return{id:e,external:!0}}catch(t){t?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving server component:`,e,t)}return null},async load(t){if(w.test(t)){let e=this.environment;if(e&&e.name===`client`)try{let e=k.readFileSync(t,`utf-8`);if(D(e))return d(e,t)}catch{}}if(t===`virtual:rari-entry-client.ts`){let e=Q(j.join(M.cwd(),`src`),Object.values(o)),t=new Set([...n,...e]),r=[{path:`rari/image`,exports:[`Image`]},{path:`virtual:error-boundary-wrapper.tsx`,exports:[`ErrorBoundaryWrapper`]}],i=[...t].filter(e=>{try{return E(k.readFileSync(e,`utf-8`))}catch{return!1}}).map(e=>{let t=j.relative(M.cwd(),e).replace(S,`/`),n=t.replace(w,``),r=t.startsWith(`..`)?e.replace(S,`/`):t,i=!1,a=``;try{let t=k.readFileSync(e,`utf-8`),n=T(t),r=t.match(ee);!n&&r&&(i=!0,a=r[1])}catch(t){t?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error reading component for export detection:`,e,t)}let o=i?a:j.basename(e,j.extname(e)),s=r.replace(S,`/`),c=s.startsWith(`/`)||y.test(s)?s:`/${s}`;return` "${r}": {
44
+ `)}\n`),i&&(s=i+s),!s.includes(`Suspense`)){let e=s.match(at);e&&(e[1]&&!e[2].includes(`Suspense`)?s=s.replace(e[0],e[0].replace(lt,`{ Suspense, $1 }`)):e[1]||(s=s.replace(e[0],`import React, { Suspense } from 'react';`)))}let a=M.env.NODE_ENV!==`production`,o=s.includes(`</`)||s.includes(`/>`)||ct.test(s);return!E(s)&&o&&a&&(s=`'use client';\n\n${s}`,t.set(r,`client`)),s}return null},async configureServer(n){let r=e.projectRoot||M.cwd(),s=j.join(r,`src`);await Z(r,e);let l=null,u=async()=>{try{let{ServerComponentBuilder:t,scanDirectory:i}=await import(`./server-build-JfPg3Cjl.mjs`).then(e=>e.n),s=new t(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,cacheControl:e.cacheControl});if(l=s,!a&&l){let e=M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3);a=new ge(l,e)}let u=j.join(r,`src`),d=[];if(k.existsSync(u)){let e=t=>{let n=k.readdirSync(t,{withFileTypes:!0});for(let r of n){let n=j.join(t,r.name);if(r.isDirectory())e(n);else if(r.isFile()&&w.test(r.name))try{c(n)&&d.push(n)}catch(e){console.error(`[rari] Error checking ${n}:`,e)}}};e(u),i(u,s)}d.length>0&&n.ws.send({type:`custom`,event:`rari:server-components-registry`,data:{serverComponents:d}});let f=await s.getTransformedComponentsForDevelopment(),p=`http://localhost:${M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3)}`;for(let e of f)try{if(e.id.startsWith(`app/`)||D(e.code))continue;let t=await fetch(`${p}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Runtime: Failed to register component ${e.id}:`,t instanceof Error?t.message:String(t))}}catch(e){console.error(`[rari] Runtime: Component discovery failed:`,e instanceof Error?e.message:String(e))}},d=async()=>{try{let e=`http://localhost:${M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3)}`,t=Q(s,Object.values(o));for(let n of t){let t=j.relative(M.cwd(),n),r=j.basename(n).replace(C,``);try{await fetch(`${e}/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:r,file_path:t,export_name:`default`})})}catch(e){console.error(`[rari] Runtime: Failed to pre-register client component ${r}:`,e)}}}catch(e){console.error(`[rari] Runtime: Failed to pre-register client components:`,e)}},f=async()=>{if(i)return;let{getBinaryPath:e,getInstallationInstructions:t}=await import(`./platform.mjs`),r;try{r=e()}catch(e){console.error(`rari binary not found`),console.error(` ${e.message}`),console.error(t());return}let a=M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3),o=M.env.NODE_ENV===`production`?`production`:`development`,s=n.config.server.port||5173,c=[`--mode`,o,`--port`,a.toString(),`--host`,`127.0.0.1`];i=oe(r,c,{stdio:[`ignore`,`pipe`,`pipe`],cwd:M.cwd(),env:{...M.env,RUST_LOG:M.env.RUST_LOG||`error`,RARI_VITE_PORT:s.toString()}}),i.stdout?.on(`data`,e=>{let t=e.toString().trim();t&&console.error(`${t}`)}),i.stderr?.on(`data`,e=>{let t=e.toString().trim();t&&!t.includes(`warning`)&&console.error(`${t}`)}),i.on(`error`,e=>{h=!1,console.error(`Failed to start rari server:`,e.message),e.message.includes(`ENOENT`)&&console.error(` Binary not found. Please ensure rari is properly installed.`)}),i.on(`exit`,(e,t)=>{i=null,h=!1,t?console.error(`rari server stopped by signal ${t}`):e===0?console.error(`rari server stopped successfully`):e&&console.error(`rari server exited with code ${e}`)});let l=!1;for(let e=0;e<20&&(l=await g(),!l);e++)await new Promise(e=>setTimeout(e,500));l?(await d(),await u()):console.error(`Server failed to become ready for component registration`)},p=async t=>{try{if(!c(t))return;let{ServerComponentBuilder:n}=await import(`./server-build-JfPg3Cjl.mjs`).then(e=>e.n),i=new n(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,cacheControl:e.cacheControl});i.addServerComponent(t);let a=await i.getTransformedComponentsForDevelopment();if(a.length===0)return;let s=`http://localhost:${M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3)}`;for(let e of a)try{let t=await fetch(`${s}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Failed to register component`,`${e.id}:`,t instanceof Error?t.message:String(t))}}catch(e){console.error(`[rari] Targeted HMR failed for`,`${t}:`,e instanceof Error?e.message:String(e)),setTimeout(u,1e3)}};f().catch(e=>{console.error(`[rari] Failed to start Rust server:`,e)}),n.middlewares.use(async(e,t,n)=>{let r=e.headers.accept;if(r&&r.includes(`text/x-component`)&&e.url&&!e.url.startsWith(`/api`)&&!e.url.startsWith(`/rsc`)&&!e.url.includes(`.`)){if(!h&&!await g()){let e=Date.now();for(;Date.now()-e<1e4&&!await g();)await new Promise(e=>setTimeout(e,100));if(!h){console.error(`[rari] Rust server not ready, cannot proxy RSC request`),t.headersSent||(t.statusCode=503,t.end(`Server not ready`));return}}let n=M.env.SERVER_PORT?Number(M.env.SERVER_PORT):Number(M.env.PORT||M.env.RSC_PORT||3e3),r=`http://localhost:${n}${e.url}`;try{let i={};for(let[t,n]of Object.entries(e.headers))typeof n==`string`?i[t]=n:Array.isArray(n)&&(i[t]=n.join(`,`));i.host=`localhost:${n}`,i[`accept-encoding`]=`identity`;let a=await fetch(r,{method:e.method,headers:i});if(t.statusCode=a.status,a.headers.forEach((e,n)=>{n.toLowerCase()!==`content-encoding`&&t.setHeader(n,e)}),a.body){let e=a.body.getReader();try{for(;;){let{done:n,value:r}=await e.read();if(n)break;t.write(ae.from(r))}t.end()}catch(e){console.error(`[rari] Stream error:`,e),t.headersSent||(t.statusCode=500),t.end()}}else t.end();return}catch(e){console.error(`[rari] Failed to proxy RSC request:`,e),t.headersSent||(t.statusCode=500,t.end(`Internal Server Error`));return}}n()}),n.watcher.on(`change`,async e=>{w.test(e)&&t.delete(e),w.test(e)&&e.includes(s)&&(c(e)?(n.ws.send({type:`custom`,event:`rari:register-server-component`,data:{filePath:e}}),await p(e)):setTimeout(u,1e3))}),n.middlewares.use(`/api/vite/hmr-transform`,async(e,t)=>{if(e.method!==`POST`){t.statusCode=405,t.end(`Method Not Allowed`);return}let n=``;e.on(`data`,e=>{n+=e.toString()}),e.on(`end`,async()=>{try{let{filePath:e}=JSON.parse(n);if(!e){t.statusCode=400,t.end(JSON.stringify({error:`filePath is required`}));return}await p(e),t.statusCode=200,t.setHeader(`Content-Type`,`application/json`),t.end(JSON.stringify({success:!0,filePath:e,message:`Component transformation completed`}))}catch(e){t.statusCode=500,t.setHeader(`Content-Type`,`application/json`),t.end(JSON.stringify({success:!1,error:e instanceof Error?e.message:String(e)}))}})}),n.httpServer?.on(`close`,()=>{a&&=(a.dispose(),null),i&&=(i.kill(`SIGTERM`),null),h=!1})},resolveId(e,t){if(e===`virtual:rsc-integration`||e===`virtual:rsc-integration.ts`)return`virtual:rsc-integration.ts`;if(e===`virtual:rari-entry-client`||e===`virtual:rari-entry-client.ts`)return`virtual:rari-entry-client.ts`;if(e===`virtual:react-flight-client`||e===`virtual:react-flight-client.ts`)return`virtual:react-flight-client.ts`;if(e===`virtual:app-router-provider`||e===`virtual:app-router-provider.tsx`)return`virtual:app-router-provider.tsx`;if(e===`virtual:error-boundary-wrapper`||e===`virtual:error-boundary-wrapper.tsx`)return`virtual:error-boundary-wrapper.tsx`;if(e===`./DefaultLoadingIndicator`||e===`./DefaultLoadingIndicator.tsx`)return`virtual:default-loading-indicator.tsx`;if(e===`./LoadingErrorBoundary`||e===`./LoadingErrorBoundary.tsx`)return`virtual:loading-error-boundary.tsx`;if(e===`react-server-dom-rari/server`)return e;if(t&&t.startsWith(`virtual:`)&&e.startsWith(`../`)){let n=import.meta.url,r=N(n),i=j.dirname(r),a=null,o=[j.join(i,`runtime`),j.join(i,`../runtime`)];for(let e of o)if(k.existsSync(e)){a=e;break}if(a){let t=j.join(a,e);if(k.existsSync(t))return t;let n=j.join(a,`../dist`,j.basename(e));if(k.existsSync(n))return n}else console.warn(`[rari] Runtime directory not found, attempting fallback resolution for virtual import.\n Importer: ${t}\n ID: ${e}\n Current Dir: ${i}\n Hint: Runtime lookup failed, trying currentDir as fallback`);let s=j.join(i,e);if(k.existsSync(s))return s;let c=j.join(i,`../dist`,j.basename(e));if(k.existsSync(c))return c}if(M.env.NODE_ENV===`production`)try{let t=j.resolve(e);if(k.existsSync(t)&&c(t))return{id:e,external:!0}}catch(t){t?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving server component:`,e,t)}return null},async load(t){if(w.test(t)){let e=this.environment;if(e&&e.name===`client`)try{let e=k.readFileSync(t,`utf-8`);if(D(e))return d(e,t)}catch{}}if(t===`virtual:rari-entry-client.ts`){let e=Q(j.join(M.cwd(),`src`),Object.values(o)),t=new Set([...n,...e]),r=[{path:`rari/image`,exports:[`Image`]},{path:`virtual:error-boundary-wrapper.tsx`,exports:[`ErrorBoundaryWrapper`]}],i=[...t].filter(e=>{try{return E(k.readFileSync(e,`utf-8`))}catch{return!1}}).map(e=>{let t=j.relative(M.cwd(),e).replace(S,`/`),n=t.replace(w,``),r=t.startsWith(`..`)?e.replace(S,`/`):t,i=!1,a=``;try{let t=k.readFileSync(e,`utf-8`),n=T(t),r=t.match(ee);!n&&r&&(i=!0,a=r[1])}catch(t){t?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error reading component for export detection:`,e,t)}let o=i?a:j.basename(e,j.extname(e)),s=r.replace(S,`/`),c=s.startsWith(`/`)||y.test(s)?s:`/${s}`;return` "${r}": {
45
45
  id: "${n}",
46
46
  path: "${r}",
47
47
  exportName: "${o}",
@@ -152,4 +152,4 @@ export class ErrorBoundaryWrapper extends React.Component {
152
152
  }
153
153
  return this.props.children;
154
154
  }
155
- }`}if(t===`virtual:rsc-integration.ts`)return(await ft()).replace(st,(e,t,n)=>`from${t}${n}virtual:react-flight-client.ts${n}`);if(t===`virtual:react-flight-client.ts`)return{code:`export * from 'rari/runtime/vendor/react-flight-client'`};if(t.endsWith(`.mjs`)&&k.existsSync(t))try{let n=e.projectRoot||M.cwd(),r=k.realpathSync(t),i=j.relative(n,r),a=!i.startsWith(`..`)&&!j.isAbsolute(i),o=r.includes(`${j.sep}node_modules${j.sep}`),s=r.includes(`${j.sep}packages${j.sep}rari${j.sep}`)||r.includes(`${j.sep}node_modules${j.sep}rari${j.sep}`);return a||o||s?k.readFileSync(t,`utf-8`):(console.warn(`[rari] Refusing to load .mjs file outside project root and node_modules: ${t}`),null)}catch(e){return console.warn(`[rari] Error validating .mjs file path: ${t}`,e),null}},async handleHotUpdate({file:e,server:t}){if(!w.test(e))return;if(e.includes(`/dist/`)||e.includes(`\\dist\\`))return[];let n=a?.detectComponentType(e)||`unknown`,r=e.includes(`/app/`)||e.includes(`\\app\\`),i=e.endsWith(`page.tsx`)||e.endsWith(`page.jsx`),o=e.endsWith(`layout.tsx`)||e.endsWith(`layout.jsx`),s=e.endsWith(`loading.tsx`)||e.endsWith(`loading.jsx`),c=e.endsWith(`error.tsx`)||e.endsWith(`error.jsx`),l=e.endsWith(`not-found.tsx`)||e.endsWith(`not-found.jsx`);if(!(r&&(i||o||s||c||l))&&n!==`client`&&n===`server`)return a&&await a.handleServerComponentUpdate(e,t),[]},transformIndexHtml:{order:`pre`,handler(e){let t=[];for(let n of e.matchAll(ot)){let e=n[1];e.startsWith(`/src/`)&&t.push(e)}let n=[];n.push({tag:`script`,attrs:{type:`module`},children:`import 'virtual:rari-entry-client';`,injectTo:`head-prepend`}),t.length>0&&n.push(...t.map(e=>({tag:`script`,attrs:{type:`module`,src:e},injectTo:`head-prepend`})));let r=e;r=r.replace(/^\s*import\s+["']\/src\/[^"']+["'];?\s*$/gm,``),r=r.replace(/^\s*import\s+["']virtual:rari-entry-client["'];?\s*$/gm,``);let i;do i=r,r=r.replace(/<script\s+type=["']module["'][^>]*>\s*<\/script>/gi,``);while(r!==i);return{html:r,tags:n}}},async writeBundle(){await Z(e.projectRoot||M.cwd(),e)}},re({...e.serverBuild,csp:e.csp,rateLimit:e.rateLimit,spamBlocker:e.spamBlocker,cacheControl:e.cacheControl})];return e.proxy!==!1&&v.push(F(e.proxy||{})),e.router!==!1&&v.push(V(e.router||{})),v}function gt(e){return{plugins:[$(),...e.plugins||[]],...e}}var _t=class extends Response{static json(e,t){let n=new Headers(t?.headers);return n.has(`content-type`)||n.set(`content-type`,`application/json`),new Response(JSON.stringify(e),{...t,headers:n})}static redirect(e,t=307){return new Response(null,{status:t,headers:{location:e}})}static noContent(e){return new Response(null,{...e,status:204})}};function vt(e){return $(e)}export{_t as ApiResponse,c as HttpRuntimeClient,e as RariRequest,t as RariResponse,i as clearPropsCache,a as clearPropsCacheForComponent,r as createHttpRuntimeClient,gt as defineRariConfig,ht as defineRariOptions,u as extractMetadata,l as extractServerProps,s as extractServerPropsWithCache,o as extractStaticParams,ie as generateAppRouteManifest,n as hasServerSideDataFetching,vt as rari,F as rariProxy,V as rariRouter};
155
+ }`}if(t===`virtual:rsc-integration.ts`)return(await ft()).replace(st,(e,t,n)=>`from${t}${n}virtual:react-flight-client.ts${n}`);if(t===`virtual:react-flight-client.ts`)return{code:`export * from 'rari/runtime/vendor/react-flight-client'`};if(t.endsWith(`.mjs`)&&k.existsSync(t))try{let n=e.projectRoot||M.cwd(),r=k.realpathSync(t),i=j.relative(n,r),a=!i.startsWith(`..`)&&!j.isAbsolute(i),o=r.includes(`${j.sep}node_modules${j.sep}`),s=r.includes(`${j.sep}packages${j.sep}rari${j.sep}`)||r.includes(`${j.sep}node_modules${j.sep}rari${j.sep}`);return a||o||s?k.readFileSync(t,`utf-8`):(console.warn(`[rari] Refusing to load .mjs file outside project root and node_modules: ${t}`),null)}catch(e){return console.warn(`[rari] Error validating .mjs file path: ${t}`,e),null}},async handleHotUpdate({file:e,server:t}){if(!w.test(e))return;if(e.includes(`/dist/`)||e.includes(`\\dist\\`))return[];let n=a?.detectComponentType(e)||`unknown`,r=e.includes(`/app/`)||e.includes(`\\app\\`),i=e.endsWith(`page.tsx`)||e.endsWith(`page.jsx`),o=e.endsWith(`layout.tsx`)||e.endsWith(`layout.jsx`),s=e.endsWith(`loading.tsx`)||e.endsWith(`loading.jsx`),c=e.endsWith(`error.tsx`)||e.endsWith(`error.jsx`),l=e.endsWith(`not-found.tsx`)||e.endsWith(`not-found.jsx`);if(!(r&&(i||o||s||c||l))&&n!==`client`&&n===`server`)return a&&await a.handleServerComponentUpdate(e,t),[]},transformIndexHtml:{order:`pre`,handler(e){let t=[];for(let n of e.matchAll(ot)){let e=n[1];e.startsWith(`/src/`)&&t.push(e)}let n=[];n.push({tag:`script`,attrs:{type:`module`},children:`import 'virtual:rari-entry-client';`,injectTo:`head-prepend`}),t.length>0&&n.push(...t.map(e=>({tag:`script`,attrs:{type:`module`,src:e},injectTo:`head-prepend`})));let r=e;r=r.replace(/^\s*import\s+["']\/src\/[^"']+["'];?\s*$/gm,``),r=r.replace(/^\s*import\s+["']virtual:rari-entry-client["'];?\s*$/gm,``);let i;do i=r,r=r.replace(/<script\s+type=["']module["'][^>]*>\s*<\/script>/gi,``);while(r!==i);return{html:r,tags:n}}},async writeBundle(){await Z(e.projectRoot||M.cwd(),e)}},re({...e.serverBuild,csp:e.csp,cacheControl:e.cacheControl})];return e.proxy!==!1&&v.push(F(e.proxy||{})),e.router!==!1&&v.push(V(e.router||{})),v}function gt(e){return{plugins:[$(),...e.plugins||[]],...e}}var _t=class extends Response{static json(e,t){let n=new Headers(t?.headers);return n.has(`content-type`)||n.set(`content-type`,`application/json`),new Response(JSON.stringify(e),{...t,headers:n})}static redirect(e,t=307){return new Response(null,{status:t,headers:{location:e}})}static noContent(e){return new Response(null,{...e,status:204})}};function vt(e){return $(e)}export{_t as ApiResponse,c as HttpRuntimeClient,e as RariRequest,t as RariResponse,i as clearPropsCache,a as clearPropsCacheForComponent,r as createHttpRuntimeClient,gt as defineRariConfig,ht as defineRariOptions,u as extractMetadata,l as extractServerProps,s as extractServerPropsWithCache,o as extractStaticParams,ie as generateAppRouteManifest,n as hasServerSideDataFetching,vt as rari,F as rariProxy,V as rariRouter};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rari",
3
3
  "type": "module",
4
- "version": "0.13.11",
4
+ "version": "0.14.0",
5
5
  "description": "Runtime Accelerated Rendering Infrastructure (rari)",
6
6
  "author": "Ryan Skinner",
7
7
  "license": "MIT",
@@ -110,21 +110,21 @@
110
110
  "rolldown": "^1.0.2"
111
111
  },
112
112
  "optionalDependencies": {
113
- "rari-darwin-arm64": "0.13.11",
114
- "rari-darwin-x64": "0.13.11",
115
- "rari-linux-arm64": "0.13.11",
116
- "rari-linux-x64": "0.13.11",
117
- "rari-win32-arm64": "0.13.11",
118
- "rari-win32-x64": "0.13.11"
113
+ "rari-darwin-arm64": "0.14.0",
114
+ "rari-darwin-x64": "0.14.0",
115
+ "rari-linux-arm64": "0.14.0",
116
+ "rari-linux-x64": "0.14.0",
117
+ "rari-win32-arm64": "0.14.0",
118
+ "rari-win32-x64": "0.14.0"
119
119
  },
120
120
  "devDependencies": {
121
121
  "@types/node": "^25.9.1",
122
122
  "@types/react": "^19.2.15",
123
123
  "@types/react-dom": "^19.2.3",
124
- "@typescript/native-preview": "^7.0.0-dev.20260522.1",
124
+ "@typescript/native-preview": "^7.0.0-dev.20260525.1",
125
125
  "vite-plus": "^0.1.22",
126
- "@rari/logger": "0.1.0",
127
- "@rari/deploy": "0.1.0"
126
+ "@rari/deploy": "0.1.0",
127
+ "@rari/logger": "0.1.0"
128
128
  },
129
129
  "scripts": {
130
130
  "build": "pnpm clean && pnpm typecheck && vp pack",
@@ -1,166 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DR3Ue2cl.mjs";import{C as t,a as n,c as r,d as i,i as a,o,r as s,s as c,w as l}from"./regex-constants-CmOAY1_W.mjs";import u from"node:fs";import d from"node:path";import f from"node:process";import{pathToFileURL as p}from"node:url";import{build as m}from"rolldown";const h=new Set([`return`,`throw`,`case`,`typeof`,`instanceof`,`new`,`delete`,`void`,`in`,`of`]);function g(e){return e===` `||e===` `||e===`\r`||e===`
2
- `||e===`\u2028`||e===`\u2029`||e===``}function _(e){return e===`\r`||e===`
3
- `||e===`\u2028`||e===`\u2029`}function ee(e,t,n){for(;t<n&&g(e[t]);)t++;return t}function v(e,t,n){for(;t<n;){let r=ee(e,t,n);if(r!==t){t=r;continue}if(e[t]===`/`&&e[t+1]===`/`){t=y(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=b(e,t,n);continue}break}return t}function y(e,t,n){for(;t<n&&!_(e[t]);)t++;return t}function b(e,t,n){for(t+=2;t<n-1&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}function x(e,t,n,r){for(t++;t<n;){if(e[t]===`\\`){t+=2;continue}if(e[t]===r)return t+1;t++}return t}function S(e,t,n){t++;let r=e[t]===`/`;for(r&&t++;t<n&&(E(e[t])||e[t]===`.`||e[t]===`-`);)t++;let i=+!r;for(;t<n&&i>0;){let a=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(a){t=x(e,t,n,a);continue}if(e[t]===`{`){t++;let r=1;for(;t<n&&r>0;){let i=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(i){t=x(e,t,n,i);continue}e[t]===`{`&&r++,e[t]===`}`&&r--,t++}continue}if(e[t]===`/`&&e[t+1]===`>`){i--,t+=2;continue}if(e[t]===`>`){t++,r&&i--;continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||D(r)){for(r===`/`?(i--,t++):r!==`!`&&i++,t++;t<n&&(E(e[t])||e[t]===`.`||e[t]===`-`);)t++;continue}t++;continue}t++}return t}function C(e,t){let n=0,r=e.length;for(;n<r;){if(g(e[n])){n++;continue}if(e[n]===`/`&&e[n+1]===`/`){n=y(e,n,r);continue}if(e[n]===`/`&&e[n+1]===`*`){n=b(e,n,r);continue}let i=e[n]===`'`||e[n]===`"`?e[n]:null;if(i){let a=n+1,o=x(e,n,r,i);if(o>a){let i=e.slice(a,o-1),s=o;for(;s<r;){if(g(e[s])&&!_(e[s])){s++;continue}if(_(e[s])||e[s]===`;`){if(i===t)return!0;n=s+1;break}if(e[s]===`/`&&e[s+1]===`/`){s=y(e,s,r);continue}if(e[s]===`/`&&e[s+1]===`*`){s=b(e,s,r);continue}return!1}if(s>=r)return i===t;if(s<r&&(_(e[s])||e[s]===`;`))continue;return!1}}return!1}return!1}function w(e){return C(e,`use server`)}function T(e){return C(e,`use client`)}function E(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e>=`0`&&e<=`9`||e===`_`||e===`$`)}function D(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e===`_`||e===`$`)}function te(e){return!e||e===`(`||e===`[`||e===`{`||e===`,`||e===`;`||e===`=`||e===`:`||e===`?`||e===`!`||e===`+`||e===`-`||e===`*`||e===`%`||e===`&`||e===`|`||e===`^`||e===`~`||e===`<`||e===`>`}function O(e,t){let n=t-1;for(;n>=0;){if(g(e[n])){n--;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`*`){for(n-=2;n>=1;){if(e[n]===`*`&&e[n-1]===`/`){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`/`){n-=2;continue}let t=n;for(;t>=0&&e[t]!==`
4
- `&&e[t]!==`\r`;)t--;let r=t+1;for(;r<n&&(e[r]===` `||e[r]===` `);)r++;if(r<n&&e[r]===`/`&&e[r+1]===`/`){n=r-1;continue}break}if(n<0||!E(e[n]))return;let r=n;for(;n>=0&&E(e[n]);)n--;return e.slice(n+1,r+1)}function k(e,t){if(te(j(e,t)))return!0;let n=O(e,t);return n?h.has(n):!1}function A(e,t,n){t++;let r=!1;for(;t<n;){if(e[t]===`\\`){t+=2;continue}if(r){e[t]===`]`&&(r=!1),t++;continue}if(e[t]===`[`){r=!0,t++;continue}if(e[t]===`/`){for(t++;t<n&&E(e[t]);)t++;return t}if(_(e[t]))return t;t++}return t}function j(e,t){let n=t-1;for(;n>=0;){if(g(e[n])){n--;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`*`){for(n-=2;n>=1;){if(e[n]===`*`&&e[n-1]===`/`){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&e[n]===`/`&&e[n-1]===`/`){n-=2;continue}let t=n;for(;t>=0&&e[t]!==`
5
- `&&e[t]!==`\r`;)t--;let r=t+1;for(;r<n&&(e[r]===` `||e[r]===` `);)r++;if(r<n&&e[r]===`/`&&e[r+1]===`/`){n=r-1;continue}return e[n]}}function M(e){let t=0,n=e.length;for(;t<n;){if(g(e[t])){t++;continue}if(e[t]===`/`&&e[t+1]===`/`){t=y(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=b(e,t,n);continue}let r=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(r){t=x(e,t,n,r);continue}if(e[t]===`/`&&e[t+1]!==`/`&&e[t+1]!==`*`&&k(e,t)){t=A(e,t,n);continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||D(r)){t=S(e,t,n);continue}t++;continue}if(e.slice(t,t+6)===`export`){let r=t+6;if(r<n&&(g(e[r])||e[r]===`{`||e[r]===`/`&&(e[r+1]===`/`||e[r+1]===`*`))){let t=v(e,r,n);if(e.slice(t,t+7)===`default`){let r=t+7;if(r>=n||!E(e[r]))return!0}if(e[t]===`{`){let r=t+1;for(;r<n&&(r=v(e,r,n),e[r]!==`}`);){let t=r;for(;r<n&&E(e[r]);)r++;let i=e.slice(t,r);if(!i)break;r=v(e,r,n);let a=!1;if(e.slice(r,r+2)===`as`){a=!0;let t=r+2;if(t<n&&!E(e[t])){r=v(e,t,n);let i=r;for(;r<n&&E(e[r]);)r++;if(e.slice(i,r)===`default`)return!0}}if(!a&&i===`default`)return!0;if(e[r]===`,`){r++;continue}if(e[r]===`}`)break;r++}}}}t++}return!1}function N(e,t){let n=null;for(let r of t)if(e.endsWith(r)&&(n??=u.existsSync(e),n))return e;for(let n of t){let t=`${e}${n}`;if(u.existsSync(t))return t}return null}function P(e,t){if(u.existsSync(e)){if(!u.statSync(e).isDirectory())return null;for(let n of t){let t=d.join(e,`index${n}`);if(u.existsSync(t))return t}}return null}function F(e,t,n){if(typeof e!=`string`)throw TypeError(`Expected source to be a string, but received ${typeof e}`);if(t==null)throw TypeError(`Expected aliases to be an object, but received ${t}`);if(typeof t!=`object`||Array.isArray(t))throw TypeError(`Expected aliases to be a plain object, but received ${Array.isArray(t)?`array`:typeof t}`);if(Object.getPrototypeOf(t)!==Object.prototype&&Object.getPrototypeOf(t)!==null)throw TypeError(`Expected aliases to be a plain object, but received ${t.constructor?.name||`object with custom prototype`}`);if(typeof n!=`string`)throw TypeError(`Expected projectRoot to be a string, but received ${typeof n}`);let r=Object.entries(t).sort((e,t)=>t[0].length-e[0].length);for(let[t,i]of r)if(e.startsWith(`${t}/`)||e===t){let r=e.slice(t.length),a=d.join(i,r);return d.isAbsolute(a)?a:d.resolve(n,a)}return null}var I=e({ServerComponentBuilder:()=>Z,createServerBuildPlugin:()=>$,scanDirectory:()=>Q});const L=/import\s*\(\s*["']([^"']+)["']\s*\)|import\s+["']([^"']+)["']/g,R=/from\s+['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)|import\s+['"]([^'"]+)['"]/g,z=/import(?:\s+(?:\w+|\{[^}]*\}|\*\s+as\s+\w+)(?:\s*,\s*(?:\w+|\{[^}]*\}|\*\s+as\s+\w+))*\s+from\s+)?['"]([^'"]+)['"]/g,B=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,V=/import\s+(?:(\w+)|\{([^}]+)\})\s+from\s+['"]([^'"]+)['"];?\s*$/gm,H=/^proxy\.(?:tsx?|jsx?|mts|mjs)$/,U=/\\/g,W=/\.(tsx?|jsx?)$/,G=/\/components\/(\w+)(?:\.tsx?|\.jsx?)?$/,K=/[/\\]components[/\\](\w+)(?:\.tsx?|\.jsx?)?$/,q=/^export\s*\{([^}]+)\};?\s*$/gm,J=/^export\s+(const|let|var)\s+(\w+)/gm,ne=/^(?:robots|sitemap)\.(?:tsx?|jsx?)$/,Y=/^node:/,X=/\\/g;var Z=class{serverComponents=new Map;serverActions=new Map;options;projectRoot;buildCache=new Map;htmlOnlyImports=new Set;fileImporters=new Map;getComponentCount(){return this.serverComponents.size+this.serverActions.size}getImportGraph(){let e=new Map;for(let[t,n]of this.fileImporters)e.set(t,new Set(n));return e}getHtmlOnlyImports(){return new Set(this.htmlOnlyImports)}constructor(e,t={}){this.projectRoot=e;let n=t.rscDir||`server`;this.options={outDir:t.outDir||d.join(e,`dist`),rscDir:n,manifestPath:t.manifestPath||d.join(n,`manifest.json`),serverConfigPath:t.serverConfigPath||d.join(n,`config.json`),minify:t.minify??f.env.NODE_ENV===`production`,alias:t.alias||{},define:t.define,csp:t.csp,rateLimit:t.rateLimit,spamBlocker:t.spamBlocker,cacheControl:t.cacheControl},this.parseHtmlImports()}parseHtmlImports(){let e=d.join(this.projectRoot,`index.html`);if(u.existsSync(e))try{let t=u.readFileSync(e,`utf-8`);for(let e of t.matchAll(L)){let t=e[1]||e[2];if(t.startsWith(`/src/`)){let e=d.join(this.projectRoot,t.slice(1));this.htmlOnlyImports.add(e)}}}catch(e){console.warn(`[server-build] Error parsing index.html:`,e)}}isHtmlOnlyImport(e){return this.htmlOnlyImports.has(e)}isServerComponent(e,t){if(e.includes(`node_modules`)||this.isHtmlOnlyImport(e))return!1;try{let n=t??(u.existsSync(e)?u.readFileSync(e,`utf-8`):null);return n===null?!1:!T(n)&&!w(n)}catch{return!1}}isClientComponent(e,t){try{let n=t??(u.existsSync(e)?u.readFileSync(e,`utf-8`):null);return n===null?!1:T(n)}catch{return!1}}buildImportGraph(e){this.fileImporters.clear();let t=e=>{if(!u.existsSync(e))return;let n=u.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=d.join(e,r.name);if(r.isDirectory()){if(r.name===`node_modules`)continue;t(n)}else if(r.isFile()&&l.test(r.name))try{let e=u.readFileSync(n,`utf-8`),t;for(R.lastIndex=0,t=R.exec(e);t!==null;){let r=t[1]||t[2]||t[3],i=null;if(r.startsWith(`./`)||r.startsWith(`../`)){let e=d.dirname(n);i=d.resolve(e,r)}else if(r.startsWith(`@/`)){let e=r.slice(2);i=d.join(this.projectRoot,`src`,e)}if(i){let e=[``,`.ts`,`.tsx`,`.js`,`.jsx`],t=null;for(let n of e){let e=i+n;if(u.existsSync(e)&&u.statSync(e).isFile()){t=e;break}}t&&(this.fileImporters.has(t)||this.fileImporters.set(t,new Set),this.fileImporters.get(t).add(n))}t=R.exec(e)}}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error building import graph:`,n,e)}}};t(e)}isOnlyImportedByClientComponents(e){let t=this.fileImporters.get(e);if(!t||t.size===0)return!1;for(let e of t)if(!this.isClientComponent(e)&&!this.isOnlyImportedByClientComponents(e))return!1;return!0}addServerComponent(e,t){let n=t??u.readFileSync(e,`utf-8`);if(this.isServerAction(n)){let t=this.extractDependencies(n),r=this.hasNodeImports(n);this.serverActions.set(e,{filePath:e,originalCode:n,dependencies:t,hasNodeImports:r});return}if(!this.isServerComponent(e,n))return;let r=this.extractDependencies(n),i=this.hasNodeImports(n);this.serverComponents.set(e,{filePath:e,originalCode:n,dependencies:r,hasNodeImports:i})}isServerAction(e){return w(e)}extractDependencies(e){let t=[],n;for(z.lastIndex=0;n=z.exec(e),n!==null;){let e=n[1];!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`node:`)&&!this.isNodeBuiltin(e)&&t.push(e)}return[...new Set(t)]}isNodeBuiltin(e){return[`fs`,`path`,`os`,`crypto`,`util`,`stream`,`events`,`process`,`buffer`,`url`,`querystring`,`zlib`,`http`,`https`,`net`,`tls`,`child_process`,`cluster`,`worker_threads`].includes(e)}hasNodeImports(e){return e.includes(`from 'node:`)||e.includes(`from "node:`)||e.includes(`from 'fs'`)||e.includes(`from "fs"`)||e.includes(`from 'path'`)||e.includes(`from "path"`)||e.includes(`from 'os'`)||e.includes(`from "os"`)||e.includes(`from 'crypto'`)||e.includes(`from "crypto"`)||e.includes(`from 'util'`)||e.includes(`from "util"`)||e.includes(`from 'stream'`)||e.includes(`from "stream"`)||e.includes(`from 'events'`)||e.includes(`from "events"`)}async getTransformedComponentsForDevelopment(){let e=[];for(let[t]of this.serverComponents){let n=d.relative(this.projectRoot,t),r=this.getComponentId(n),i=await this.buildComponentCodeOnly(t);e.push({id:r,code:i})}for(let[t]of this.serverActions){let n=d.relative(this.projectRoot,t),r=this.getComponentId(n),i=await this.buildComponentCodeOnly(t);e.push({id:r,code:i})}return e}transformComponentImportsToGlobal(e){let t=[];for(let n of e.matchAll(B)){let[e,r,i]=n;if(!i.startsWith(`.`)&&!i.startsWith(`@`)&&!i.startsWith(`~`)&&!i.startsWith(`#`))continue;let a=null;if(i.startsWith(`.`)){if(i.includes(`/components/`)){let n=i.match(G);if(n){let i=n[1],a=[d.resolve(this.projectRoot,`src`,`components`,`${i}.tsx`),d.resolve(this.projectRoot,`src`,`components`,`${i}.ts`),d.resolve(this.projectRoot,`src`,`components`,`${i}.jsx`),d.resolve(this.projectRoot,`src`,`components`,`${i}.js`)],o=!1;for(let e of a)if(u.existsSync(e)&&this.isClientComponent(e)){o=!0;break}if(!o)continue;let s=`// Component reference: ${i}
6
- const ${r} = (props) => {
7
- let Component = globalThis['~clientComponents']?.['components/${i}']?.component
8
- || globalThis['components/${i}'];
9
-
10
- if (Component && typeof Component === 'object' && Component.default) {
11
- Component = Component.default;
12
- }
13
-
14
- if (!Component) {
15
- throw new Error('Component components/${i} not loaded');
16
- }
17
-
18
- if (typeof Component !== 'function') {
19
- throw new Error('Component components/${i} is not a function, got: ' + typeof Component);
20
- }
21
-
22
- return Component(props);
23
- }`;t.push({original:e,replacement:s})}}continue}let o=this.options.alias||{};for(let[e,t]of Object.entries(o))if(i.startsWith(`${e}/`)||i===e){let n=i.slice(e.length);a=d.join(t,n);break}if(a){let n=a.match(K);if(n){let i=n[1],o=d.isAbsolute(a)?a:d.resolve(this.projectRoot,a),s=[o,`${o}.tsx`,`${o}.ts`,`${o}.jsx`,`${o}.js`],c=!1,l=o;for(let e of s)if(u.existsSync(e)){l=e,this.isClientComponent(e)&&(c=!0);break}if(!c)continue;let f=d.relative(this.projectRoot,l),p=this.getComponentId(f),m=`// Component reference: ${i}
24
- const ${r} = (props) => {
25
- let Component = globalThis['~clientComponents']?.['${p}']?.component
26
- || globalThis['${p}'];
27
-
28
- if (Component && typeof Component === 'object' && Component.default) {
29
- Component = Component.default;
30
- }
31
-
32
- if (!Component) {
33
- throw new Error('Component ${p} not loaded');
34
- }
35
-
36
- if (typeof Component !== 'function') {
37
- throw new Error('Component ${p} is not a function, got: ' + typeof Component);
38
- }
39
-
40
- return Component(props);
41
- }`;t.push({original:e,replacement:m})}}}let n=e;for(let{original:e,replacement:r}of t)n=n.replace(e,r);return n}isPageComponent(e){return e.includes(`/app/`)||e.includes(`\\app\\`)}createBuildPlugins(e,t,n,r,a=!1){let o=d.dirname(r),s=H.test(d.basename(r)),c=this,l=new Map,f=new Map;return[{name:`virtual-module`,resolveId(t,n){if(t===e)return t;if(n===e&&(t.startsWith(`./`)||t.startsWith(`../`))){let e=d.resolve(o,t);for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let n=e+t;if(u.existsSync(n)&&u.statSync(n).isFile())return n}for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=d.join(e,`index${t}`);if(u.existsSync(n))return n}return e}return null},load(r){return r===e?{code:t,moduleType:n}:null}},{name:`resolve-client-server-boundaries`,resolveId:(t,n)=>{if(!n||n.includes(`node_modules`)||n.includes(`/packages/rari/dist`)||t.startsWith(`node:`)||c.isNodeBuiltin(t)||t===`react`||t===`react-dom`||t===`react/jsx-runtime`||t===`react/jsx-dev-runtime`)return null;let r=null;if(r=F(t,c.options.alias||{},c.projectRoot),!r&&(t.startsWith(`./`)||t.startsWith(`../`))){let i=n===e?o:d.dirname(n);r=d.resolve(i,t)}if(r)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=r+e;if(u.existsSync(t)&&u.statSync(t).isFile()){if(c.isClientComponent(t)){let e=d.relative(c.projectRoot,t),n=(e.startsWith(`..`)?t:e).replace(X,`/`);return l.set(t,n),{id:`\0client-ref:${t}`}}try{let e=u.readFileSync(t,`utf-8`);if(w(e)){let n=d.relative(c.projectRoot,t),r=n.startsWith(`..`)?t:n,i=M(e);return f.set(t,{actionId:r,hasDefaultExport:i}),{id:`\0server-action:${t}`}}}catch(e){console.error(`[rari] Failed to read file for server action detection: ${t}`,e)}break}}return null},load(e){if(e.startsWith(`\0client-ref:`)){let t=e.slice(12),n=d.relative(c.projectRoot,t),r=(l.get(t)||(n.startsWith(`..`)?t:n)).replace(X,`/`);return{code:`
42
- function registerClientReference(clientReference, id, exportName) {
43
- const key = id + '#' + exportName;
44
- const clientProxy = {};
45
- Object.defineProperty(clientProxy, '$$typeof', {
46
- value: Symbol.for('react.client.reference'),
47
- enumerable: false
48
- });
49
- Object.defineProperty(clientProxy, '$$id', {
50
- value: key,
51
- enumerable: false
52
- });
53
- Object.defineProperty(clientProxy, '$$async', {
54
- value: false,
55
- enumerable: false
56
- });
57
- return clientProxy;
58
- }
59
-
60
- export default registerClientReference(null, ${JSON.stringify(r)}, "default");
61
- `,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=d.relative(c.projectRoot,t).replace(X,`/`),r=n.startsWith(`src/`)?n.slice(4):n,i=d.join(c.options.outDir,c.options.rscDir,r.replace(W,`.js`)),a=p(d.resolve(c.projectRoot,i)).href;return{code:f.get(t)?.hasDefaultExport??!1?`export * from ${JSON.stringify(a)};\nexport { default } from ${JSON.stringify(a)};`:`export * from ${JSON.stringify(a)};`,moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,t)=>{if(!a)return null;if(e.startsWith(`file://`)){let t=e.replace(i,``);return u.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null;n=F(e,c.options.alias||{},c.projectRoot);let r=t?.startsWith(`\0`)?o:t?d.dirname(t):o;if(!n&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=d.resolve(r,e)),!n||r.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(u.existsSync(t)&&u.statSync(t).isFile()){if(c.isClientComponent(t))return null;let e=d.join(c.projectRoot,`src`);if(!t.startsWith(e))return null;let n=d.relative(e,t),r=d.join(c.options.outDir,c.options.rscDir,n.replace(W,`.js`));if(u.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:u.readFileSync(t,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let t=c.options.alias||{};for(let[n,r]of Object.entries(t))if(e.startsWith(`${n}/`)||e===n){let t=e.slice(n.length),i=d.join(r,t),a=d.isAbsolute(i)?i:d.resolve(c.projectRoot,i);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=a+e;if(u.existsSync(t)&&u.statSync(t).isFile())return t}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let t=d.join(a,`index${e}`);if(u.existsSync(t))return t}return a}return null}},{name:`resolve-rari-proxy`,resolveId:e=>{if(s&&e===`rari`){let e=d.resolve(c.projectRoot,`node_modules/rari/dist/proxy/RariResponse.mjs`);if(u.existsSync(e))return e;let t=d.resolve(c.projectRoot,`node_modules/rari/src/proxy/RariResponse.ts`);if(u.existsSync(t))return t}return null}},{name:`externalize-deps`,resolveId:e=>e.startsWith(`\0`)?null:e.startsWith(`node:`)||c.isNodeBuiltin(e)||[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`rari/image`].includes(e)?{id:e,external:!0}:e===`rari`||e===`rari/client`?null:!e.startsWith(`.`)&&!e.startsWith(`/`)?{id:e,external:!0}:null}]}async buildComponentCodeOnly(e){let t=await u.promises.readFile(e,`utf-8`),n=this.transformClientImports(t,e),r=this.isPageComponent(e),i=r?this.transformComponentImportsToGlobal(n):n,a=d.extname(e),o;o=a===`.tsx`?`tsx`:a===`.ts`?`ts`:a===`.jsx`?`jsx`:`js`;let s=`\0virtual:${e}`,c=await m({input:s,platform:`node`,write:!1,external:[Y,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${o}`]:o},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(f.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(s,i,o,e,r)});if(!c.output||c.output.length===0)throw Error(`No output generated from Rolldown`);let l=c.output.find(e=>e.type===`chunk`&&e.isEntry);if(!l||l.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let p=l.code;return p=`// Built: ${new Date().toISOString()}\n${p}`,p}async buildServerComponents(){let e=d.join(this.options.outDir,this.options.rscDir);await u.promises.mkdir(e,{recursive:!0});let t={react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`},n=this.options.alias||{};for(let[e,r]of Object.entries(n)){let n=d.isAbsolute(r)?r:d.resolve(this.projectRoot,r),i=d.join(this.projectRoot,`src`),a=d.relative(i,n);if(a.startsWith(`..`))continue;let o=d.join(this.options.outDir,this.options.rscDir,a),s=d.resolve(this.projectRoot,o);t[e]||(t[`${e}/`]=`${p(s).href}/`)}let r={components:{},importMap:{imports:t},version:`1.0.0`,buildTime:new Date().toISOString()};for(let[e,t]of this.serverComponents){if(this.isPageComponent(e))continue;let n=d.relative(this.projectRoot,e),i=this.getComponentId(n),a=d.join(this.options.rscDir,`${i}.js`),o=d.join(this.options.outDir,a),s=d.dirname(o);await u.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=p(d.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}for(let[e,t]of this.serverComponents){if(!this.isPageComponent(e))continue;let n=d.relative(this.projectRoot,e),i=this.getComponentId(n),a=d.join(this.options.rscDir,`${i}.js`),o=d.join(this.options.outDir,a),s=d.dirname(o);await u.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=p(d.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}for(let[e,t]of this.serverActions){let n=d.relative(this.projectRoot,e),i=this.getComponentId(n),a=d.join(this.options.rscDir,`${i}.js`),o=d.join(this.options.outDir,a),s=d.dirname(o);await u.promises.mkdir(s,{recursive:!0}),await this.buildSingleComponent(e,o);let c=p(d.resolve(this.projectRoot,o)).href;r.components[i]={id:i,filePath:e,relativePath:n,bundlePath:a,moduleSpecifier:c,dependencies:t.dependencies,hasNodeImports:t.hasNodeImports}}let i=d.join(this.options.outDir,this.options.manifestPath);await u.promises.writeFile(i,JSON.stringify(r,null,2),`utf-8`);let a={};this.options.csp&&(a.csp=this.options.csp),this.options.rateLimit&&(a.rateLimit=this.options.rateLimit),this.options.spamBlocker&&(a.spamBlocker=this.options.spamBlocker),this.options.cacheControl&&(a.cacheControl=this.options.cacheControl);let o=d.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(a).length===0)try{await u.promises.unlink(o)}catch(e){e.code!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await u.promises.writeFile(o,JSON.stringify(a,null,2),`utf-8`);return r}async buildSingleComponent(e,t,n=!1){let r=await u.promises.readFile(e,`utf-8`),i=this.transformClientImports(r,e),a=this.isPageComponent(e),o=a?this.transformComponentImportsToGlobal(i):i,s=d.extname(e),c;c=s===`.tsx`?`tsx`:s===`.ts`?`ts`:s===`.jsx`?`jsx`:`js`;let l=`\0virtual:${e}`,p=await m({input:l,platform:`node`,write:!1,external:[Y,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${c}`]:c},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(f.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(l,o,c,e,a)});if(!p.output||p.output.length===0)throw Error(`No output generated from Rolldown`);let h=p.output.find(e=>e.type===`chunk`&&e.isEntry);if(!h||h.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let g=h.code;g=`// Built: ${new Date().toISOString()}\n${g}`,await u.promises.writeFile(t,g,`utf-8`);let _=await u.promises.open(t,`r+`);if(await _.sync(),await _.close(),n)return g}createSelfRegisteringModule(e,t){if(e.includes(`Self-registering Production Component`))return e;let i=e,s=null,l=[];if(i=i.replace(o,(e,t)=>(s=t,`function ${t}`)),i=i.replace(a,(e,t)=>(s=t,`async function ${t}`)),i=i.replace(c,(e,t)=>(s=t,`// Default export: ${t}`)),i=i.replace(n,(e,t)=>(s=t,`// Default export: ${t}`)),i=i.replace(q,(e,n)=>{let r=n.split(`,`).map(e=>e.trim()),a=[];return r.forEach(e=>{if(e.includes(`as default`)){let t=e.replace(`as default`,``).trim();s=t,a.push(`${t} (default)`)}else if(e===`default`){let e=`${t}_default`;i.includes(`var ${e}`)&&(s=e),a.push(`default`)}else l.push(e),a.push(e)}),`// Exports: ${a.join(`, `)}`}),i=i.replace(r,(e,t)=>(l.push(t),e.replace(`export `,``))),i=i.replace(J,(e,t,n)=>(l.push(n),`${t} ${n}`)),!s){let e=`${t}_default`;i.includes(`var ${e}`)&&(s=e)}return`// Self-registering Production Component: ${t}
62
-
63
- if (!globalThis["${t}"]) {
64
- ${i}
65
-
66
- try {
67
- const moduleKey = "${t}";
68
- let mainExport = null;
69
- const exportedFunctions = {};
70
-
71
- if (!globalThis['~serverFunctions']) globalThis['~serverFunctions'] = {};
72
- if (!globalThis['~serverFunctions'].all) globalThis['~serverFunctions'].all = {};
73
-
74
- ${l.map(e=>`if (typeof ${e} !== 'undefined') {
75
- globalThis.${e} = ${e};
76
- globalThis['~serverFunctions'].all['${t}:${e}'] = ${e};
77
- exportedFunctions['${e}'] = ${e};
78
- }`).join(`
79
- `)}
80
-
81
- ${s?`if (typeof ${s} !== 'undefined') {
82
- mainExport = ${s};
83
- }`:``}
84
-
85
- if (mainExport === null && Object.keys(exportedFunctions).length > 0) {
86
- if (Object.keys(exportedFunctions).length === 1) {
87
- mainExport = exportedFunctions[Object.keys(exportedFunctions)[0]];
88
- } else {
89
- let componentFunction = null;
90
- let firstFunction = null;
91
-
92
- for (const [name, value] of Object.entries(exportedFunctions)) {
93
- if (typeof value === 'function') {
94
- if (!firstFunction) firstFunction = value;
95
- if (/^[A-Z]/.test(name)) {
96
- componentFunction = value;
97
- break;
98
- }
99
- }
100
- }
101
-
102
- mainExport = componentFunction || firstFunction;
103
- }
104
- }
105
-
106
- if (mainExport !== null) {
107
- if (!globalThis[moduleKey]) {
108
- globalThis[moduleKey] = mainExport;
109
- }
110
-
111
- if (!globalThis['~clientComponents']) globalThis['~clientComponents'] = {};
112
- globalThis['~clientComponents'][moduleKey] = {
113
- component: mainExport,
114
- id: moduleKey,
115
- registered: true
116
- };
117
-
118
- if (typeof globalThis.RscModuleManager !== 'undefined' && globalThis.RscModuleManager.register) {
119
- globalThis.RscModuleManager.register(moduleKey, mainExport, exportedFunctions);
120
- }
121
- }
122
- } catch (error) {
123
- console.error('[rari] Build: Error in self-registration for ${t}:', error);
124
- }
125
- }`}transformClientImports(e,t){let n=e,r,i=[],a=!1,o=[`rari/image`];for(V.lastIndex=0;r=V.exec(e),r!==null;){let[e,n,s,c]=r,l=!1,u=c;if(o.includes(c))l=!0;else{let e=this.resolveImportPath(c,t);this.isClientComponent(e)&&(l=!0,u=d.relative(this.projectRoot,e).replace(X,`/`))}if(l){a=!0;let t=``;n?t=`const ${n} = registerClientReference(
126
- null,
127
- ${JSON.stringify(u)},
128
- "default"
129
- );`:s&&(t=s.split(`,`).map(e=>e.trim()).map(e=>{let[t,n]=e.includes(` as `)?e.split(` as `).map(e=>e.trim()):[e,e];return`const ${n} = registerClientReference(
130
- null,
131
- ${JSON.stringify(u)},
132
- ${JSON.stringify(t)}
133
- );`}).join(`
134
- `)),i.push({original:e,replacement:t})}}a&&(n=`
135
- function registerClientReference(clientReference, id, exportName) {
136
- const key = id + '#' + exportName;
137
-
138
- const clientProxy = {};
139
-
140
- Object.defineProperty(clientProxy, '$$typeof', {
141
- value: Symbol.for('react.client.reference'),
142
- enumerable: false
143
- });
144
-
145
- Object.defineProperty(clientProxy, '$$id', {
146
- value: key,
147
- enumerable: false
148
- });
149
-
150
- Object.defineProperty(clientProxy, '$$async', {
151
- value: false,
152
- enumerable: false
153
- });
154
-
155
- try {
156
- if (typeof globalThis.registerClientComponent === 'function') {
157
- globalThis.registerClientComponent(key, id, clientProxy);
158
- }
159
- } catch (error) {
160
- console.error('[rari] Build: Failed to register client reference:', error);
161
- }
162
-
163
- return clientProxy;
164
- }
165
-
166
- `+n);for(let{original:e,replacement:t}of i)n=n.replace(e,t);return n}resolveImportPath(e,t){let n=e,r=this.options.alias||{};for(let[t,i]of Object.entries(r))if(e.startsWith(`${t}/`)||e===t){let r=e.slice(t.length);n=d.join(i,r);break}d.isAbsolute(n)||(n=d.resolve(d.dirname(t),n));let i=[`.tsx`,`.jsx`,`.ts`,`.js`];return N(n,i)||P(n,i)||`${n}.tsx`}getComponentId(e){return e.replace(U,`/`).replace(W,``).replace(s,`_`).replace(t,``)}async rebuildComponent(e){let t=this.getComponentId(d.relative(this.projectRoot,e)),n=await u.promises.readFile(e,`utf-8`),r=this.extractDependencies(n),i={filePath:e,originalCode:n,dependencies:r,hasNodeImports:this.hasNodeImports(n)};this.isServerAction(n)?this.serverActions.set(e,i):this.serverComponents.set(e,i);let a=d.join(this.options.rscDir,`${t}.js`),o=d.join(this.options.outDir,a),s=this.buildCache.get(e),c=(await u.promises.stat(e)).mtimeMs;if(s&&s.timestamp>=c&&JSON.stringify(s.dependencies)===JSON.stringify(r))return await u.promises.writeFile(o,s.code,`utf-8`),await this.updateManifestForComponent(t,e,a),{componentId:t,bundlePath:d.join(this.options.outDir,a),success:!0};let l=d.dirname(o);await u.promises.mkdir(l,{recursive:!0});let f=await this.buildSingleComponent(e,o,!0);return this.buildCache.set(e,{code:f,timestamp:Date.now(),dependencies:r}),await this.updateManifestForComponent(t,e,a),{componentId:t,bundlePath:d.join(this.options.outDir,a),success:!0}}manifestCache=null;async updateManifestForComponent(e,t,n){let r=d.join(this.options.outDir,this.options.manifestPath),i;if(this.manifestCache)i=this.manifestCache;else if(u.existsSync(r)){let e=await u.promises.readFile(r,`utf-8`);i=JSON.parse(e),this.manifestCache=i}else i={components:{},importMap:{imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},version:`1.0.0`,buildTime:new Date().toISOString()},this.manifestCache=i;let a=this.serverComponents.get(t)||this.serverActions.get(t),o=d.join(this.options.outDir,n),s=p(d.resolve(this.projectRoot,o)).href;if(a)i.components[e]={id:e,filePath:t,relativePath:d.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:s,dependencies:a.dependencies,hasNodeImports:a.hasNodeImports};else{let r=await u.promises.readFile(t,`utf-8`);i.components[e]={id:e,filePath:t,relativePath:d.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:s,dependencies:this.extractDependencies(r),hasNodeImports:this.hasNodeImports(r)}}i.importMap||={imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},i.buildTime=new Date().toISOString(),await u.promises.writeFile(r,JSON.stringify(i,null,2),`utf-8`),this.manifestCache=i}clearCache(){this.buildCache.clear(),this.manifestCache=null}invalidateBuildCacheFor(e){this.buildCache.delete(e)}async getTransformedComponentCode(e){return await this.buildComponentCodeOnly(e)}};function Q(e,t,n=!0){n&&t.buildImportGraph(e);let r=u.readdirSync(e,{withFileTypes:!0});for(let n of r){let r=d.join(e,n.name);if(n.isDirectory())Q(r,t,!1);else if(n.isFile()&&l.test(n.name)){if(ne.test(n.name)||n.name.endsWith(`.d.ts`))continue;try{let e=u.readFileSync(r,`utf-8`);if(w(e)){t.addServerComponent(r,e);continue}if(t.isOnlyImportedByClientComponents(r))continue;t.isServerComponent(r,e)&&t.addServerComponent(r,e)}catch(e){console.warn(`[server-build] Error checking ${r}:`,e instanceof Error?e.message:e)}}}}function $(e={}){let t=null,n,r=!1;return{name:`rari-server-build`,configResolved(i){n=i.root,r=i.command===`serve`;let a={};if(i.resolve?.alias){let e=i.resolve.alias;Array.isArray(e)?e.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&(a[e.find]=e.replacement)}):typeof e==`object`&&Object.entries(e).forEach(([e,t])=>{typeof t==`string`&&(a[e]=t)})}t=new Z(n,{...e,alias:a})},buildStart(){if(!t)return;let e=f.env.NODE_ENV===`production`,r=[d.join(n,`dist`,`cache`,`og`),d.join(n,`dist`,`cache`,`images`)];e&&r.push(`/tmp/rari-og-cache`,`/tmp/rari-image-cache`);for(let e of r)try{u.existsSync(e)&&u.rmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[rari] Failed to clear cache ${e}:`,t)}let i=d.join(n,`src`);u.existsSync(i)&&Q(i,t)},async closeBundle(){if(t){await t.buildServerComponents();try{let{generateRobotsFile:e}=await import(`./robots-generator-Ch7hYjpz.mjs`);await e({appDir:d.join(n,`src`,`app`),outDir:d.join(n,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]})}catch(e){console.warn(`[rari] Failed to generate robots.txt:`,e)}try{let{generateSitemapFiles:e}=await import(`./sitemap-generator-n0LjA3Y1.mjs`);await e({appDir:d.join(n,`src`,`app`),outDir:d.join(n,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]})}catch(e){console.warn(`[rari] Failed to generate sitemap:`,e)}}},async handleHotUpdate({file:e}){if(!t||!r)return;let i=d.relative(n,e).replace(U,`/`);if(!(!i.startsWith(`src/`)||!l.test(i)))try{if(T(await u.promises.readFile(e,`utf-8`)))return;await t.buildServerComponents()}catch(e){console.error(`[rari] Build: Error rebuilding ${i}:`,e)}}}}export{M as a,N as i,I as n,T as o,P as r,w as s,$ as t};
@@ -1,7 +0,0 @@
1
- import{A as e,D as t,E as n,O as r,k as i}from"./regex-constants-CmOAY1_W.mjs";import{Buffer as a}from"node:buffer";import{promises as o}from"node:fs";import s from"node:path";const c=/[^\w-]/g,l=`\0virtual:sitemap`;function u(a){return a.replace(n,`&amp;`).replace(i,`&lt;`).replace(r,`&gt;`).replace(e,`&quot;`).replace(t,`&apos;`)}function d(e){return(typeof e==`string`?new Date(e):e).toISOString()}function f(e){return[` <image:image>`,` <image:loc>${u(e)}</image:loc>`,` </image:image>`].join(`
2
- `)}function p(e){let t=[` <image:image>`,` <image:loc>${u(e.loc)}</image:loc>`];return e.title&&t.push(` <image:title>${u(e.title)}</image:title>`),e.caption&&t.push(` <image:caption>${u(e.caption)}</image:caption>`),e.geoLocation&&t.push(` <image:geo_location>${u(e.geoLocation)}</image:geo_location>`),e.license&&t.push(` <image:license>${u(e.license)}</image:license>`),t.push(` </image:image>`),t.join(`
3
- `)}function m(e){let t=[];for(let n of e)typeof n==`string`?t.push(f(n)):t.push(p(n));return t.join(`
4
- `)}function h(e){let t=[];if(t.push(` <video:video>`),t.push(` <video:title>${u(e.title)}</video:title>`),t.push(` <video:thumbnail_loc>${u(e.thumbnail_loc)}</video:thumbnail_loc>`),t.push(` <video:description>${u(e.description)}</video:description>`),e.content_loc&&t.push(` <video:content_loc>${u(e.content_loc)}</video:content_loc>`),e.player_loc&&t.push(` <video:player_loc>${u(e.player_loc)}</video:player_loc>`),e.duration!==void 0&&t.push(` <video:duration>${e.duration}</video:duration>`),e.expiration_date&&t.push(` <video:expiration_date>${u(e.expiration_date)}</video:expiration_date>`),e.rating!==void 0&&t.push(` <video:rating>${e.rating}</video:rating>`),e.view_count!==void 0&&t.push(` <video:view_count>${e.view_count}</video:view_count>`),e.publication_date&&t.push(` <video:publication_date>${u(e.publication_date)}</video:publication_date>`),e.family_friendly!==void 0&&t.push(` <video:family_friendly>${e.family_friendly?`yes`:`no`}</video:family_friendly>`),e.requires_subscription!==void 0&&t.push(` <video:requires_subscription>${e.requires_subscription?`yes`:`no`}</video:requires_subscription>`),e.live!==void 0&&t.push(` <video:live>${e.live?`yes`:`no`}</video:live>`),e.restriction&&t.push(` <video:restriction relationship="${u(e.restriction.relationship)}">${u(e.restriction.content)}</video:restriction>`),e.platform&&t.push(` <video:platform relationship="${u(e.platform.relationship)}">${u(e.platform.content)}</video:platform>`),e.uploader){let n=e.uploader.info?` info="${u(e.uploader.info)}"`:``;t.push(` <video:uploader${n}>${u(e.uploader.name)}</video:uploader>`)}if(e.tag)for(let n of e.tag)t.push(` <video:tag>${u(n)}</video:tag>`);return t.push(` </video:video>`),t.join(`
5
- `)}function g(e){return e.map(e=>h(e)).join(`
6
- `)}function _(e){let t=e.some(e=>e.images&&e.images.length>0),n=e.some(e=>e.videos&&e.videos.length>0),r=e.some(e=>e.alternates?.languages),i=[`xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"`];return t&&i.push(`xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"`),n&&i.push(`xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"`),r&&i.push(`xmlns:xhtml="http://www.w3.org/1999/xhtml"`),i}function v(e,t){e.push(` <url>`),e.push(` <loc>${u(t.url)}</loc>`),t.lastModified&&e.push(` <lastmod>${d(t.lastModified)}</lastmod>`),t.changeFrequency&&e.push(` <changefreq>${t.changeFrequency}</changefreq>`),t.priority!==void 0&&e.push(` <priority>${t.priority}</priority>`)}function y(e,t){if(t.alternates?.languages)for(let[n,r]of Object.entries(t.alternates.languages))e.push(` <xhtml:link rel="alternate" hreflang="${u(n)}" href="${u(String(r))}" />`)}function b(e,t){t.images&&t.images.length>0&&e.push(m(t.images)),t.videos&&t.videos.length>0&&e.push(g(t.videos))}function x(e){let t=[`<?xml version="1.0" encoding="UTF-8"?>`,`<urlset ${_(e).join(` `)}>`];for(let n of e)v(t,n),y(t,n),b(t,n),t.push(` </url>`);return t.push(`</urlset>`),t.join(`
7
- `)}async function S(e,t=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.json`]){let n=[],r=s.join(e,`sitemap.xml`);try{return await o.access(r),n.push({type:`static`,path:r}),n}catch{}for(let r of t){let t=s.join(e,`sitemap${r}`);try{return await o.access(t),n.push({type:`dynamic`,path:t}),n}catch{}}return n}function C(e){switch(e){case`ts`:return`ts`;case`tsx`:return`tsx`;case`js`:case`mjs`:case`cjs`:return`js`;case`jsx`:return`jsx`;case`json`:return`json`;default:throw Error(`Unsupported sitemap file extension: ".${e}". Allowed extensions are: .ts, .tsx, .js, .jsx, .mjs, .cjs, .json`)}}function w(e,t){return{name:`virtual-sitemap`,resolveId(t,n){return t===l?t:t.startsWith(`.`)?s.resolve(s.dirname(n??e.path),t):null},load(n){return n===l?{code:t,moduleType:C(s.extname(e.path).slice(1))}:null}}}function T(e){if(!e.output||e.output.length===0)throw Error(`Failed to build sitemap module`);let t=e.output.find(e=>e.type===`chunk`&&e.isEntry)||e.output.find(e=>e.type===`chunk`);if(!t||t.type!==`chunk`)throw Error(`No chunk output found in sitemap build result`);return t.code}async function E(e,t){let{build:n}=await import(`rolldown`),r=T(await n({input:l,external:[`rari`],platform:`node`,write:!1,output:{format:`esm`,codeSplitting:!1},plugins:[w(e,t)]}));return await import(`data:text/javascript;base64,${a.from(r).toString(`base64`)}`)}async function D(e,t){let n=await e.generateSitemaps(),r=s.join(t,`sitemap`);await o.mkdir(r,{recursive:!0});let i=new Map;for(let{id:t}of n)try{let n=String(t).replace(c,`_`);(!n||n.length===0)&&(n=`_`);let a=i.get(n);if(a!==void 0)throw Error(`Duplicate sanitized sitemap ID "${n}": original IDs "${a}" and "${t}" collide`);i.set(n,String(t));let l=x(typeof e.default==`function`?await e.default({id:t}):e.default),u=s.join(r,`${n}.xml`);await o.writeFile(u,l)}catch(e){throw Error(`Failed to generate sitemap for id "${t}"`,{cause:e})}}async function O(e,t){let n=x(typeof e.default==`function`?await e.default():e.default),r=s.join(t,`sitemap.xml`);await o.writeFile(r,n)}async function k(e){let{appDir:t,extensions:n,outDir:r}=e,i=await S(t,n);if(i.length===0)return!1;await o.mkdir(r,{recursive:!0});let a=i[0];if(a.type===`static`){let e=s.join(r,`sitemap.xml`);return await o.copyFile(a.path,e),!0}try{let e=await E(a,await o.readFile(a.path,`utf-8`));return typeof e.generateSitemaps==`function`?await D(e,r):await O(e,r),!0}catch(e){return console.error(`[rari] Failed to build/execute sitemap file:`,e),!1}}export{k as generateSitemapFiles};