rari 0.14.6 → 0.14.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.d.mts CHANGED
@@ -1,5 +1,5 @@
1
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-CwWYmtA0.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-pC5OZq29.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-BWLVeCkK.mjs";
3
3
  import * as React from "react";
4
4
  import { Component, ErrorInfo, ReactNode } from "react";
5
5
 
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { d as Metadata, l as LayoutProps, p as PageProps } from "./types-pC5OZq29.mjs";
1
+ import { d as Metadata, l as LayoutProps, p as PageProps } from "./types-BWLVeCkK.mjs";
2
2
  import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-85WvBQcW.mjs";
3
3
  import { c as RariURL, n as ProxyConfig, r as ProxyFunction, s as RariFetchEvent } from "./types-3dq9RGI5.mjs";
4
4
  import { RariRequest } from "./proxy/RariRequest.mjs";
package/dist/mdx.mjs CHANGED
@@ -1 +1 @@
1
- import{i as e}from"./regex-constants-s9cBkrFv.mjs";import{registerClientComponent as t,registerClientReference as n}from"./runtime/react-server-dom-shim.mjs";function r(r,i,a=`default`){let o=`${i}#${a}`;if(t(r,i,a),typeof globalThis<`u`){let t=globalThis;t[`~clientComponents`]||={};let n=i.replace(e,``).split(`/`).pop()||a,s={id:a==="default"?n:a,path:i,type:`client`,component:r,registered:!0};t[`~clientComponents`][o]=s,t[`~clientComponents`][n]=s,t[`~clientComponents`][i]=s}function s(){throw Error(`Attempted to call ${a}() from the server but ${a} is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`)}return n(s,i,a)}function i(e){let t={};for(let[n,{component:i,id:a,exportName:o=`default`}]of Object.entries(e))t[n]=r(i,a,o);return t}export{r as createMDXClientReference,i as createMDXClientReferences};
1
+ import{s as e}from"./regex-constants-DQ2vkSU5.mjs";import{registerClientComponent as t,registerClientReference as n}from"./runtime/react-server-dom-shim.mjs";function r(r,i,a=`default`){let o=`${i}#${a}`;if(t(r,i,a),typeof globalThis<`u`){let t=globalThis;t[`~clientComponents`]||={};let n=i.replace(e,``).split(`/`).pop()||a,s={id:a==="default"?n:a,path:i,type:`client`,component:r,registered:!0};t[`~clientComponents`][o]=s,t[`~clientComponents`][n]=s,t[`~clientComponents`][i]=s}function s(){throw Error(`Attempted to call ${a}() from the server but ${a} is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`)}return n(s,i,a)}function i(e){let t={};for(let[n,{component:i,id:a,exportName:o=`default`}]of Object.entries(e))t[n]=r(i,a,o);return t}export{r as createMDXClientReference,i as createMDXClientReferences};
package/dist/platform.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{existsSync as e}from"node:fs";import{dirname as t,join as n,parse as r}from"node:path";import i from"node:process";import{fileURLToPath as a}from"node:url";const o={"linux-x64":`rari-linux-x64`,"linux-arm64":`rari-linux-arm64`,"darwin-x64":`rari-darwin-x64`,"darwin-arm64":`rari-darwin-arm64`,"win32-arm64":`rari-win32-arm64`,"win32-x64":`rari-win32-x64`};function s(){let e=i.platform,t=i.arch,n;switch(e){case`darwin`:n=`darwin`;break;case`linux`:n=`linux`;break;case`win32`:n=`win32`;break;default:throw Error(`Unsupported platform: ${e}. rari supports Linux, macOS, and Windows.`)}let r;switch(t){case`x64`:r=`x64`;break;case`arm64`:r=`arm64`;break;default:throw Error(`Unsupported architecture: ${t}. rari supports x64 and ARM64.`)}let a=o[`${n}-${r}`];if(!a)throw Error(`Unsupported platform combination: ${n}-${r}. Supported platforms: ${Object.keys(o).join(`, `)}`);return{platform:n,arch:r,packageName:a,binaryName:n===`win32`?`rari.exe`:`rari`}}function c(){let{packageName:o,binaryName:c}=s();try{let a=i.cwd(),s=null,l=r(a).root;for(;a!==l&&a!==``;){if(e(n(a,`packages`))){s=a;break}let r=t(a);if(r===a)break;a=r}if(s){let t=n(n(s,`packages`,o),`bin`,c);if(e(t))return t}}catch{}try{let t=import.meta.resolve(`${o}/package.json`),r=n(a(new URL(`.`,t)),`bin`,c);if(e(r))return r;throw Error(`Binary not found at ${r}`)}catch{throw Error(`Failed to locate rari binary for ${o}. Please ensure the platform package is installed: npm install ${o}`)}}function l(){let{packageName:e}=s();return`
1
+ import{existsSync as e}from"node:fs";import{dirname as t,join as n}from"node:path";import r from"node:process";import{fileURLToPath as i}from"node:url";const a={"linux-x64":`rari-linux-x64`,"linux-arm64":`rari-linux-arm64`,"darwin-x64":`rari-darwin-x64`,"darwin-arm64":`rari-darwin-arm64`,"win32-arm64":`rari-win32-arm64`,"win32-x64":`rari-win32-x64`};function o(){let e=r.platform,t=r.arch,n;switch(e){case`darwin`:n=`darwin`;break;case`linux`:n=`linux`;break;case`win32`:n=`win32`;break;default:throw Error(`Unsupported platform: ${e}. rari supports Linux, macOS, and Windows.`)}let i;switch(t){case`x64`:i=`x64`;break;case`arm64`:i=`arm64`;break;default:throw Error(`Unsupported architecture: ${t}. rari supports x64 and ARM64.`)}let o=a[`${n}-${i}`];if(!o)throw Error(`Unsupported platform combination: ${n}-${i}. Supported platforms: ${Object.keys(a).join(`, `)}`);return{platform:n,arch:i,packageName:o,binaryName:n===`win32`?`rari.exe`:`rari`}}function s(){let{packageName:r,binaryName:a}=o(),s=t(i(import.meta.url));for(;;){if(e(n(s,`pnpm-workspace.yaml`))){let t=n(s,`packages`,r,`bin`,a);if(e(t))return t;break}let i=t(s);if(i===s)break;s=i}try{let t=import.meta.resolve(`${r}/package.json`),o=n(i(new URL(`.`,t)),`bin`,a);if(e(o))return o;throw Error(`Binary not found at ${o}`)}catch{throw Error(`Failed to locate rari binary for ${r}. Please ensure the platform package is installed: npm install ${r}`)}}function c(){let{packageName:e}=o();return`
2
2
  To install rari for your platform, run:
3
3
 
4
4
  npm install ${e}
@@ -14,4 +14,4 @@ Or if you're using yarn:
14
14
  If you continue to have issues, you can also install from source:
15
15
 
16
16
  cargo install --git https://github.com/rari-build/rari
17
- `}export{c as getBinaryPath,l as getInstallationInstructions};
17
+ `}export{s as getBinaryPath,c as getInstallationInstructions};
@@ -0,0 +1 @@
1
+ const e=/\.(?:tsx?|jsx?)$/,t=/^[A-Z]:\\/i,n=/\\/g,r=/[/\\]/,i=/\/$/,a=/^file:\/\//,o=/^https?:\/\//,s={AMPERSAND:/&/g,LT:/</g,GT:/>/g,QUOTE:/"/g,APOS:/'/g},c=s.AMPERSAND,l=s.LT,u=s.GT,d=s.QUOTE,f=s.APOS,p=c,m=l,h=u,g=d,_=f,v=c,y=l,b=u,x=d,S=f,C=/^\d+$/,w=/([a-z])([A-Z])/g,T=/export\s+(?:function|const|class)\s+(\w+)/,E=/export\s+(?:default\s+)?(?:async\s+)?(?:function|class)[\s{(]/,D=/export\s+default\s+(?:(?:async\s+)?\(|(?:async\s+)?[a-zA-Z_$][\w$]*\s*=>)/,O=/export\s+(?:const|let|var)\s+[a-zA-Z_$][\w$]*(?:\s*:[^;]*[^;=\s])?\s*=\s*(?:async\s+)?(?:function[\s*(]|\([^)]*\)\s*=>|[a-zA-Z_$][\w$]*\s*=>)/,k=/\.[^.]*$/,A=/\r?\n/,j=/['"]/g;export{S as C,x as E,v as S,y as T,r as _,E as a,e as b,a as c,h as d,m as f,C as g,A as h,D as i,p as l,o as m,w as n,T as o,g as p,O as r,k as s,n as t,_ as u,i as v,b as w,t as x,j as y};
@@ -1,4 +1,4 @@
1
- "use client";import{h as e,p as t}from"../regex-constants-s9cBkrFv.mjs";import{t as n}from"../preload-modules-xvnJ_8eh.mjs";import{t as r}from"../suspense-CsIYuC_l.mjs";import*as i from"react";import{Suspense as a,useEffect as o,useRef as s,useState as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";import{createFromFetch as f,createFromReadableStream as ee}from"virtual:react-flight-client";const te=/"timestamp":(\d+)/,p=/^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)$/,m=/^[0-9a-f]+$/i,ne=/^\$L?[0-9a-f]+$/i;function re(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 ie(e){return!e||e.length===0?!1:!!(e.includes(`"fallback"`)||e.includes(`$Lfallback`)||e.startsWith(`E{`))}function ae({contentRef:e,rowsDataRef:t,modulesDataRef:n,symbolsDataRef:r,suspendingPromisesRef:a,getSuspendingPromise:o,rscToReact:s}){let c=t.current,l=n.current,u=r.current,d=a.current,f=c.has(e);if(i.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]=c(g),b=c(0)[1],x=s({x:0,y:0}),S=s(new Map),C=s(null),w=s(new Set),T=s(_),E=s(0),D=s(new Map),O=s([]),k=s(null),A=s(0),[j,M]=c(null),N=s(typeof window<`u`&&window.location.hash.length>0),oe=s(0),P=s(!1),F=s(!1),I=s(!1),L=s(Promise.resolve()),se=s(!1),R=s(!!g),z=s(null);o(()=>{T.current=_},[_]),o(()=>{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 B=()=>{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)})},ce=()=>{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)})})},V=(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}))},H=()=>{setTimeout(()=>{window.location.reload()},1e3)},U=()=>{A.current>0&&(A.current=0)},le=e=>{if(!k.current)return!1;if(e===k.current)return!0;let t=e.match(te);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1};function ue(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 W(e,n,a,o,s,c){if(e==null)return null;if(typeof e==`string`&&e.startsWith(`$`)&&e.length>1&&m.test(e.substring(1))&&s&&s.has(e)){let t=c??new Set;return t.has(e)?(console.warn(`[rari] AppRouter: Circular $ reference detected:`,e),null):(t.add(e),W(s.get(e),n,a,o,s,t))}if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,c,l,u]=e,d=c;if(typeof c==`string`&&c.startsWith(`$`)&&o){let e=c.substring(1);if(t.test(e)){let e=o.get(c);e&&(r(e)?d=`Suspense`:console.warn(`[rari] AppRouter: Unknown symbol:`,e))}}if(typeof d==`string`&&r(d)||typeof c==`string`&&r(c)){let e=he(u,n,a,o,s);return i.createElement(i.Suspense,l?{...e,key:l}:e)}if(typeof d==`string`&&d.startsWith(`$`)&&ne.test(d)){let e=n.get(d);if(!e)return console.warn(`[rari] AppRouter: Module not found for reference:`,d,`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 r=l||`fallback-${d}-${oe.current++}`,c={...u,children:u.children===void 0?void 0:W(u.children,n,a,o,s)};return i.createElement(t,{key:r,...c})}if(!d||typeof d!=`string`&&typeof d!=`function`||typeof d==`string`&&d.startsWith(`$`))return null;let f=he(u,n,a,o,s);return i.createElement(d,l?{...f,key:l}:f)}return e.map((e,t)=>{let r=W(e,n,a,o,s);if(r==null)return null;if(typeof r==`object`&&i.isValidElement(r)&&!r.key){let n=typeof e==`object`&&e?ue(e):`primitive`,a=`rsc-${Array.isArray(e)&&e[0]===`$`&&e[1]?String(e[1]):`unknown`}-${n}-${t}`;return i.createElement(i.Fragment,{key:a},r)}return r}).filter(e=>e!=null)}return e}let G=s(new Set),K=s(new Map),q=s(new Map),de=s(new Map),J=s(new Map);function fe(e){if(!J.current.has(e)){let t=new Promise(()=>{});J.current.set(e,{promise:t,timestamp:Date.now()})}return J.current.get(e).promise}function pe(){J.current.clear(),G.current.clear()}function me(){let e=Date.now(),t=[];J.current.forEach((n,r)=>{e-n.timestamp>3e4&&t.push(r)}),t.forEach(e=>{J.current.delete(e),G.current.delete(e)})}function he(e,t,n,r,a){if(!e||typeof e!=`object`)return e;a&&(K.current=a),t&&(q.current=t),r&&(de.current=r);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);G.current.delete(c),o[s]=W(e,t,n,r,a)}else G.current.add(c),o[s]=i.createElement(ae,{key:`lazy-${c}`,contentRef:c,rowsDataRef:K,modulesDataRef:q,symbolsDataRef:de,suspendingPromisesRef:J,getSuspendingPromise:fe,rscToReact:W});else o[s]=c===void 0?void 0:W(c,t,n,r,a)}else s===`dangerouslySetInnerHTML`?o[s]=e[s]:o[s]=W(e[s],t,n,r,a);return o}let Y=async e=>{await n(e,w.current);let t=await ee(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}));return{element:t,rawElement:t,wireFormat:e}},ge=e=>({element:f(e)}),_e=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 V(e,`fetch`,`HTTP ${a.status} when fetching ${t}`,window.location.pathname),e}let o=await a.text();if(le(o)&&v)return v;let s;try{s=await Y(o)}catch(e){let t=e instanceof Error?e:Error(String(e));throw V(t,`parse`,`Failed to parse RSC wire format: ${t.message}`,window.location.pathname),t}return E.current===i&&(y(s),k.current=o,U()),s}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&V(e,`network`,`Network error: ${e.message}`,window.location.pathname),e}finally{D.current.delete(a)}})();return D.current.set(a,s),s},X=s(Y),Z=s(ge),Q=s(_e);o(()=>{X.current=Y,Z.current=ge,Q.current=_e}),o(()=>{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},B();let n=null,r=null,a=!1;try{if(t.rscResponsePromise){let e=await t.rscResponsePromise;if(E.current!==t.navigationId)return;a=e.headers.get(`x-render-mode`)===`streaming`;let{element:r}=Z.current(Promise.resolve(e));if(a)n={element:r};else{let e=await r;if(E.current!==t.navigationId)return;n={element:e}}}else if(t.rscResponse){a=t.rscResponse.headers.get(`x-render-mode`)===`streaming`;let{element:e}=Z.current(Promise.resolve(t.rscResponse));if(a)n={element:e};else{let r=await e;if(E.current!==t.navigationId)return;n={element:r}}}else 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&&H();return}if(!n&&t.isStreaming&&E.current===t.navigationId){z.current=t;return}n&&E.current===t.navigationId&&(a?(y(n),b(e=>e+1),M(null)):i.startTransition(()=>{y(n),b(e=>e+1),M(null)}),t.rscWireFormat&&(k.current=t.rscWireFormat),U(),T.current&&T.current(t));let o=typeof window<`u`&&window.location.hash.length>0;!t.options?.historyKey&&!o&&requestAnimationFrame(()=>{t.options?.scroll!==!1&&window.scrollTo(0,0)})},n=async()=>{x.current={x:window.scrollX,y:window.scrollY},B();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&&H()}finally{requestAnimationFrame(()=>{window.scrollTo(x.current.x,x.current.y),ce()})}},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&&H()}},a=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(),se.current=!0,R.current=!1,z.current=null},o=async()=>{try{await Q.current(),M(null)}catch(e){console.error(`Manifest update error:`,e instanceof Error?e.message:String(e)),A.current>=3&&H()}},s=async()=>{if(!C.current||C.current.length===0||R.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)||ie(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(`
1
+ "use client";import{g as e,v as t}from"../regex-constants-DQ2vkSU5.mjs";import{t as n}from"../preload-modules-xvnJ_8eh.mjs";import{t as r}from"../suspense-CsIYuC_l.mjs";import*as i from"react";import{Suspense as a,useEffect as o,useRef as s,useState as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";import{createFromFetch as f,createFromReadableStream as ee}from"virtual:react-flight-client";const te=/"timestamp":(\d+)/,p=/^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)$/,m=/^[0-9a-f]+$/i,ne=/^\$L?[0-9a-f]+$/i;function re(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 ie(e){return!e||e.length===0?!1:!!(e.includes(`"fallback"`)||e.includes(`$Lfallback`)||e.startsWith(`E{`))}function ae({contentRef:e,rowsDataRef:t,modulesDataRef:n,symbolsDataRef:r,suspendingPromisesRef:a,getSuspendingPromise:o,rscToReact:s}){let c=t.current,l=n.current,u=r.current,d=a.current,f=c.has(e);if(i.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]=c(g),b=c(0)[1],x=s({x:0,y:0}),S=s(new Map),C=s(null),w=s(new Set),T=s(_),E=s(0),D=s(new Map),O=s([]),k=s(null),A=s(0),[j,M]=c(null),N=s(typeof window<`u`&&window.location.hash.length>0),oe=s(0),P=s(!1),F=s(!1),I=s(!1),L=s(Promise.resolve()),se=s(!1),R=s(!!g),z=s(null);o(()=>{T.current=_},[_]),o(()=>{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 B=()=>{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)})},ce=()=>{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)})})},V=(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}))},H=()=>{setTimeout(()=>{window.location.reload()},1e3)},U=()=>{A.current>0&&(A.current=0)},le=e=>{if(!k.current)return!1;if(e===k.current)return!0;let t=e.match(te);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1};function ue(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 W(t,n,a,o,s,c){if(t==null)return null;if(typeof t==`string`&&t.startsWith(`$`)&&t.length>1&&m.test(t.substring(1))&&s&&s.has(t)){let e=c??new Set;return e.has(t)?(console.warn(`[rari] AppRouter: Circular $ reference detected:`,t),null):(e.add(t),W(s.get(t),n,a,o,s,e))}if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)return t;if(Array.isArray(t)){if(t.length>=4&&t[0]===`$`){let[,c,l,u]=t,d=c;if(typeof c==`string`&&c.startsWith(`$`)&&o){let t=c.substring(1);if(e.test(t)){let e=o.get(c);e&&(r(e)?d=`Suspense`:console.warn(`[rari] AppRouter: Unknown symbol:`,e))}}if(typeof d==`string`&&r(d)||typeof c==`string`&&r(c)){let e=he(u,n,a,o,s);return i.createElement(i.Suspense,l?{...e,key:l}:e)}if(typeof d==`string`&&d.startsWith(`$`)&&ne.test(d)){let e=n.get(d);if(!e)return console.warn(`[rari] AppRouter: Module not found for reference:`,d,`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 r=l||`fallback-${d}-${oe.current++}`,c={...u,children:u.children===void 0?void 0:W(u.children,n,a,o,s)};return i.createElement(t,{key:r,...c})}if(!d||typeof d!=`string`&&typeof d!=`function`||typeof d==`string`&&d.startsWith(`$`))return null;let f=he(u,n,a,o,s);return i.createElement(d,l?{...f,key:l}:f)}return t.map((e,t)=>{let r=W(e,n,a,o,s);if(r==null)return null;if(typeof r==`object`&&i.isValidElement(r)&&!r.key){let n=typeof e==`object`&&e?ue(e):`primitive`,a=`rsc-${Array.isArray(e)&&e[0]===`$`&&e[1]?String(e[1]):`unknown`}-${n}-${t}`;return i.createElement(i.Fragment,{key:a},r)}return r}).filter(e=>e!=null)}return t}let G=s(new Set),K=s(new Map),q=s(new Map),de=s(new Map),J=s(new Map);function fe(e){if(!J.current.has(e)){let t=new Promise(()=>{});J.current.set(e,{promise:t,timestamp:Date.now()})}return J.current.get(e).promise}function pe(){J.current.clear(),G.current.clear()}function me(){let e=Date.now(),t=[];J.current.forEach((n,r)=>{e-n.timestamp>3e4&&t.push(r)}),t.forEach(e=>{J.current.delete(e),G.current.delete(e)})}function he(e,t,n,r,a){if(!e||typeof e!=`object`)return e;a&&(K.current=a),t&&(q.current=t),r&&(de.current=r);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);G.current.delete(c),o[s]=W(e,t,n,r,a)}else G.current.add(c),o[s]=i.createElement(ae,{key:`lazy-${c}`,contentRef:c,rowsDataRef:K,modulesDataRef:q,symbolsDataRef:de,suspendingPromisesRef:J,getSuspendingPromise:fe,rscToReact:W});else o[s]=c===void 0?void 0:W(c,t,n,r,a)}else s===`dangerouslySetInnerHTML`?o[s]=e[s]:o[s]=W(e[s],t,n,r,a);return o}let Y=async e=>{await n(e,w.current);let t=await ee(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}));return{element:t,rawElement:t,wireFormat:e}},ge=e=>({element:f(e)}),_e=async(e,n)=>{let r=e||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 e=(import.meta.env.RARI_SERVER_URL||window.location.origin).replace(t,``)+r+window.location.search,a=await fetch(e,{headers:{Accept:`text/x-component`},cache:`no-store`,signal:n});if(!a.ok){let t=Error(`Failed to fetch RSC data: ${a.status} ${a.statusText}`);throw V(t,`fetch`,`HTTP ${a.status} when fetching ${e}`,window.location.pathname),t}let o=await a.text();if(le(o)&&v)return v;let s;try{s=await Y(o)}catch(e){let t=e instanceof Error?e:Error(String(e));throw V(t,`parse`,`Failed to parse RSC wire format: ${t.message}`,window.location.pathname),t}return E.current===i&&(y(s),k.current=o,U()),s}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&V(e,`network`,`Network error: ${e.message}`,window.location.pathname),e}finally{D.current.delete(a)}})();return D.current.set(a,s),s},X=s(Y),Z=s(ge),Q=s(_e);o(()=>{X.current=Y,Z.current=ge,Q.current=_e}),o(()=>{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},B();let n=null,r=null,a=!1;try{if(t.rscResponsePromise){let e=await t.rscResponsePromise;if(E.current!==t.navigationId)return;a=e.headers.get(`x-render-mode`)===`streaming`;let{element:r}=Z.current(Promise.resolve(e));if(a)n={element:r};else{let e=await r;if(E.current!==t.navigationId)return;n={element:e}}}else if(t.rscResponse){a=t.rscResponse.headers.get(`x-render-mode`)===`streaming`;let{element:e}=Z.current(Promise.resolve(t.rscResponse));if(a)n={element:e};else{let r=await e;if(E.current!==t.navigationId)return;n={element:r}}}else 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&&H();return}if(!n&&t.isStreaming&&E.current===t.navigationId){z.current=t;return}n&&E.current===t.navigationId&&(a?(y(n),b(e=>e+1),M(null)):i.startTransition(()=>{y(n),b(e=>e+1),M(null)}),t.rscWireFormat&&(k.current=t.rscWireFormat),U(),T.current&&T.current(t));let o=typeof window<`u`&&window.location.hash.length>0;!t.options?.historyKey&&!o&&requestAnimationFrame(()=>{t.options?.scroll!==!1&&window.scrollTo(0,0)})},n=async()=>{x.current={x:window.scrollX,y:window.scrollY},B();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&&H()}finally{requestAnimationFrame(()=>{window.scrollTo(x.current.x,x.current.y),ce()})}},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&&H()}},a=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(),se.current=!0,R.current=!1,z.current=null},o=async()=>{try{await Q.current(),M(null)}catch(e){console.error(`Manifest update error:`,e instanceof Error?e.message:String(e)),A.current>=3&&H()}},s=async()=>{if(!C.current||C.current.length===0||R.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)||ie(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
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
3
  `));if((i||r)&&(await re(50),E.current===e&&!F.current)){let n=C.current?[...C.current]:t,r=await X.current(n.join(`
4
4
  `));E.current===e&&(F.current=!0,y(r),b(e=>e+1),z.current&&T.current&&(T.current(z.current),z.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(`
@@ -1,4 +1,4 @@
1
- import"../regex-constants-s9cBkrFv.mjs";import{n as e,r as t,t as n}from"../get-client-component-B4Y2T40R.mjs";import{t as r}from"../preload-modules-xvnJ_8eh.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-DQ2vkSU5.mjs";import{n as e,r as t,t as n}from"../get-client-component-B4Y2T40R.mjs";import{t as r}from"../preload-modules-xvnJ_8eh.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,2 +1,2 @@
1
- import{c as e,f as t,i as n,l as r,n as i,o as a,s as o,u as s}from"../regex-constants-s9cBkrFv.mjs";import{t as c}from"../get-client-component-B4Y2T40R.mjs";import{t as l}from"../suspense-CsIYuC_l.mjs";import{createFromFetch as u,createFromReadableStream as d}from"./vendor/react-flight-client/index.mjs";import*as f from"react";import{Suspense as p,cloneElement as m,createElement as h,isValidElement as g,use as _,useEffect as v,useState as y}from"react";import*as b from"react-dom/client";function x(){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 S(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(t,n,c){let l=document.querySelector(`[data-boundary-id="${t}"]`);if(l)try{let u=n.indexOf(`:`);if(u===-1){console.warn(`[rari] Invalid RSC row format (no colon):`,n);return}let d=n.substring(0,u),f=n.substring(u+1),p=S(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(t,{content:m,element:l,rowId:c}),globalThis[`~rari`].hydrateClientComponents){let e=globalThis[`~rari`].hydrateClientComponents;e(t,m,l)}return}function g(t){let n=t=>t.replace(a,`&amp;`).replace(r,`&lt;`).replace(e,`&gt;`).replace(s,`&quot;`).replace(o,`&#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(!t)return``;if(typeof t==`string`||typeof t==`number`)return n(String(t));if(Array.isArray(t)){if(t.length>=4&&t[0]===`$`){let[,e,,r]=t,a=typeof e==`string`&&c.has(e.toLowerCase())?e.toLowerCase():`div`,o=null,s=``,l=``;if(r){for(let[e,t]of Object.entries(r))if(e===`dangerouslySetInnerHTML`&&t&&typeof t==`object`&&`__html`in t)o=t.__html;else if(e!==`children`&&e!==`~boundaryId`){let r=e===`className`?`class`:e;if(e===`style`&&typeof t==`object`&&t){let e=Object.entries(t).map(([e,t])=>`${e.replace(i,`$1-$2`).toLowerCase()}:${String(t)}`).join(`;`);l+=` style="${n(e)}"`}else typeof t==`string`||typeof t==`number`?l+=` ${r}="${n(String(t))}"`:typeof t==`boolean`&&t&&(l+=` ${r}`)}o===null&&r.children&&(s=g(r.children))}return`<${a}${l}>${o===null?s:o}</${a}>`}return t.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:t,rscRow:n,rowId:c,element:l,wasAttached:e}}))}}catch(e){console.error(`[rari] Error processing boundary update:`,e)}};let t=window,n=globalThis;t[`~rari`].streaming?.bufferedEvents&&t[`~rari`].streaming.bufferedEvents.length>0&&(t[`~rari`].streaming.bufferedEvents.forEach(e=>{let{boundaryId:t,rscRow:r,rowId:i}=e;n[`~rari`].processBoundaryUpdate?.(t,r,i)}),t[`~rari`].streaming.bufferedEvents=[]),window.addEventListener(`rari:boundary-update`,e=>{let{boundaryId:t,rscRow:r,rowId:i}=e.detail;n[`~rari`].processBoundaryUpdate&&n[`~rari`].processBoundaryUpdate(t,r,i)})}function C(e,t,r){let i=r==="default"?e.name||t.split(`/`).pop()?.replace(n,``)||`DefaultComponent`:r,a=i,o={id:a,path:t,type:`client`,component:e,registered:!0};globalThis[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={});let s=`${t}#${r}`;globalThis[`~clientComponents`][a]=o,globalThis[`~clientComponents`][t]=o,globalThis[`~clientComponents`][s]=o,globalThis[`~clientComponentPaths`][t]=a,globalThis[`~clientComponentNames`][i]=a,e&&(e[`~isClientComponent`]=!0,e[`~clientComponentId`]=a),typeof window<`u`&&fetch(`/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:a,file_path:t,export_name:r})}).catch(e=>{console.error(`[rari] Failed to register client component with server:`,e)})}function w(e){return c(e)}function T(){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 E=u,D=d,O=null;async function k(){return O||(O=(async()=>{try{return E=u,D=d,typeof D!=`function`&&(D=null),typeof E!=`function`&&(E=null),b}catch(e){return console.error(`Failed to load react-dom/client RSC functions:`,e),E=null,D=null,null}})(),O)}const A=new Map,j=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(),A.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 k();let n=(()=>{let e=[`/_rari/stream`];try{if(typeof window<`u`&&(window.location.hostname===`localhost`||window.location.hostname===`127.0.0.1`)){let t=x();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,u=new Map,d=new Map,f=e=>{if(!h)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(l(t))return h(p,{fallback:r?.fallback?f(r.fallback):null},r?.children?f(r.children):null);let i=r?{...r}:{};if(r?.children){let e=f(r.children);Array.isArray(e)?i.children=e.map((e,t)=>g(e)&&e.key==null?m(e,{key:t}):e):i.children=e}if(typeof t==`string`){if(t.startsWith(`$L`)){let e=u.get(t);if(e){let t=w(`${e.id}#${e.name||`default`}`);if(t)return h(t,n?{...i,key:n}:i)}return i&&i.children?i.children:null}if(t.includes(`.tsx#`)||t.includes(`.jsx#`)){let e=w(t);return e?h(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`]),h(t,n?{...i,key:n}:i)}else console.error(`Unknown RSC element type:`,t)}return e.map(e=>f(e))}return typeof e==`object`?(console.error(`Unexpected object in RSC conversion:`,e),null):e},_=null,b=new Map,C=``,T=null,E=async()=>{try{for(;;){let{value:e,done:t}=await s.read();if(t)break;let n=c.decode(e,{stream:!0});C+=n;let r=C.split(`
2
- `),i=r.slice(0,-1);C=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=S(r);if(i)u.set(`$L${n}`,i);else if(r.startsWith(`E{`))try{let e=JSON.parse(r.substring(1)),t=e?.error??e?.message??JSON.stringify(e);console.error(`RSC stream error:`,t)}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===`$`&&l(r)&&i&&a&&d.set(`$L${n}`,a),t===`$`&&i&&Object.hasOwn(i,`children`)&&typeof r==`string`&&r.startsWith(`$L`)){let e=d.get(r)||null;if(e){let t=f(i.children);b.set(e,t),T&&T.updateBoundary(e,t);continue}}}if(!_){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`&&l(n)&&r&&i&&(t=!1)}t&&(_=f(e),T&&typeof T.updateRoot==`function`&&T.updateRoot())}}}catch(t){console.error(`Failed to parse stream line:`,e,t)}}}catch(e){console.error(`Error processing stream:`,e)}},D=()=>{let[,e]=y(0);v(()=>(T={updateBoundary:(t,n)=>{b.set(t,n),e(e=>e+1)},updateRoot:()=>{e(e=>e+1)}},()=>{T=null}),[e]);let t=e=>{if(!e)return null;if(g(e)){let n=e.props,r=n?.[`~boundaryId`];if(n&&r){let e=b.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),h(e.type,t,r)}}return e}return Array.isArray(e)?e.map(e=>t(e)):e};return t(_)};E();let O=Promise.resolve(h(D));return{"~isRscResponse":!0,"~rscPromise":O,readRoot(){return O}}}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 k(),E)try{let t=E(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 n=e.trim().split(t),r=new Map,i=new Map,a=new Map,o=[];for(let e of n){let t=e.indexOf(`:`);if(t===-1)continue;let n=e.substring(0,t),s=e.substring(t+1);if(s)try{let t=S(s);if(t)r.set(`$L${n}`,t);else if(s.startsWith(`E{`)){let e=s.substring(1),t=JSON.parse(e),n=t?.error??t?.message??JSON.stringify(t);o.push(n),console.error(`RSC: Server error`,n)}else if(s.startsWith(`[`)){let e=JSON.parse(s);i.set(n,e)}else if(s.startsWith(`Symbol.for(`))continue;else if(s.startsWith(`"$S`)){let e=JSON.parse(s);typeof e==`string`&&a.set(`$${n}`,e)}else console.error(`Unknown RSC row format:`,e)}catch(t){console.error(`Failed to parse RSC row:`,e,t)}}if(o.length>0)throw Error(`RSC Server Error: ${o.map(e=>e?.error??e?.message??e).join(`, `)}`);let s=null,c=Array.from(i.keys()).sort((e,t)=>Number.parseInt(e,16)-Number.parseInt(t,16));for(let e of c){let t=i.get(e);if(Array.isArray(t)&&t.length>=2&&t[0]===`$`){let[,e,,n]=t,r=n?.[`~boundaryId`],i=typeof e==`string`&&e.startsWith(`$`)?a.get(e):void 0;if((l(e)||l(i))&&n&&r)continue;s=t;break}}return s?this.reconstructElementFromRscData(s,r,a):(console.error(`No valid root element found in RSC payload`,{elements:i,modules:r}),null)}reconstructElementFromRscData(e,t,n){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[,r,i,a]=e,o=r;if(typeof r==`string`&&r.includes(`#`))o=w(r)||(({children:e,...t})=>h(`div`,{...t,"data-client-component":r,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},h(`small`,{style:{color:`#c00`}},`Missing Client Component: ${r}`),e));else if(typeof r==`string`&&r.startsWith(`$L`)&&t.has(r)){let e=t.get(r);e&&(o=w(`${e.id}#${e.name}`)||(({children:t,...n})=>h(`div`,{...n,"data-client-component":r,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},h(`small`,{style:{color:`#c00`}},`Missing Client Component: ${e.name} (${e.id})`),t)))}let s=a?this.processPropsRecursively(a,t,n):{},c=typeof r==`string`&&r.startsWith(`$`)&&!r.startsWith(`$L`)?n?.get(r):void 0;return(l(r)||l(c))&&(o=p),h(o,{key:i,...s})}else return e.map(e=>this.reconstructElementFromRscData(e,t,n));return typeof e==`object`?null:e}processPropsRecursively(e,t,n){if(!e||typeof e!=`object`)return e;let r={};for(let[i,a]of Object.entries(e))if(i===`children`)if(Array.isArray(a))if(a.length>=2&&a[0]===`$`)r[i]=this.reconstructElementFromRscData(a,t,n);else{let e=a.map(e=>this.reconstructElementFromRscData(e,t,n)).filter(e=>e!=null);e.length===0?r[i]=null:e.length===1?r[i]=e[0]:r[i]=e}else r[i]=this.reconstructElementFromRscData(a,t,n);else i===`dangerouslySetInnerHTML`?r[i]=a:r[i]=this.reconstructElementFromRscData(a,t,n);return r}};function M({error:e,details:t}){return h(`div`,{className:`rsc-error`,style:{padding:`16px`,backgroundColor:`#fee`,border:`1px solid #fcc`,borderRadius:`4px`,margin:`8px 0`,fontFamily:`monospace`}},h(`h3`,{style:{margin:`0 0 8px 0`,color:`#c00`}},`RSC Error`),h(`p`,{style:{margin:`0 0 8px 0`}},e),t&&h(`details`,{style:{marginTop:`8px`}},h(`summary`,{style:{cursor:`pointer`}},`Error Details`),h(`pre`,{style:{fontSize:`12px`,overflow:`auto`,backgroundColor:`#f5f5f5`,padding:`8px`}},JSON.stringify(t,null,2))))}function N({rootPromise:e}){return _(e)}function P({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(!A.has(i)){let n=j.fetchServerComponent(e,t).catch(e=>{throw A.delete(i),e});A.set(i,n)}let a=_(A.get(i));if(a?.[`~isRscResponse`]){let e=a.readRoot();return h(p,{fallback:n??null},h(N,{rootPromise:e}))}return a??null}var F=class extends f.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?h(M,{error:this.state.error?.message||`Unknown error`,details:{componentId:this.props.componentId}}):this.props.children}};function I(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]=y(t);return v(()=>{let t=t=>{let n=t.detail;if(n&&n.filePath&&R(n.filePath)&&(j.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)}},[]),h(p,{fallback:null},h(F,{componentId:e,mountKey:r},h(P,{key:`${e}-${r}`,componentId:e,props:n,fallback:null})))};return n.displayName=`ServerComponent(${e})`,function(e){return h(n,e)}}function L(e,t){return j.fetchServerComponent(e,t)}function R(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&&R(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&&R(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&&(j.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=`${x()}/_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){j.clearCache();return}let t=[];for(let n of j.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)j.componentCache.delete(e),A.delete(e);let n=[];for(let t of A.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)A.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=`${x()}/_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(j.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 z=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 B=null;function V(){return B||=new z,B}if(import.meta.hot){let e=V();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{M as RscErrorComponent,T as createClientModuleMap,I as createServerComponentWrapper,L as fetchServerComponent,w as getClientComponent,C as registerClientComponent,j as rscClient};
1
+ import{d as e,f as t,h as n,l as r,n as i,p as a,s as o,u as s}from"../regex-constants-DQ2vkSU5.mjs";import{t as c}from"../get-client-component-B4Y2T40R.mjs";import{t as l}from"../suspense-CsIYuC_l.mjs";import{createFromFetch as u,createFromReadableStream as d}from"./vendor/react-flight-client/index.mjs";import*as f from"react";import{Suspense as p,cloneElement as m,createElement as h,isValidElement as g,use as _,useEffect as v,useState as y}from"react";import*as b from"react-dom/client";function x(){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 S(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(n,o,c){let l=document.querySelector(`[data-boundary-id="${n}"]`);if(l)try{let u=o.indexOf(`:`);if(u===-1){console.warn(`[rari] Invalid RSC row format (no colon):`,o);return}let d=o.substring(0,u),f=o.substring(u+1),p=S(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(n,{content:m,element:l,rowId:c}),globalThis[`~rari`].hydrateClientComponents){let e=globalThis[`~rari`].hydrateClientComponents;e(n,m,l)}return}function g(n){let o=n=>n.replace(r,`&amp;`).replace(t,`&lt;`).replace(e,`&gt;`).replace(a,`&quot;`).replace(s,`&#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(!n)return``;if(typeof n==`string`||typeof n==`number`)return o(String(n));if(Array.isArray(n)){if(n.length>=4&&n[0]===`$`){let[,e,,t]=n,r=typeof e==`string`&&c.has(e.toLowerCase())?e.toLowerCase():`div`,a=null,s=``,l=``;if(t){for(let[e,n]of Object.entries(t))if(e===`dangerouslySetInnerHTML`&&n&&typeof n==`object`&&`__html`in n)a=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="${o(e)}"`}else typeof n==`string`||typeof n==`number`?l+=` ${t}="${o(String(n))}"`:typeof n==`boolean`&&n&&(l+=` ${t}`)}a===null&&t.children&&(s=g(t.children))}return`<${r}${l}>${a===null?s:a}</${r}>`}return n.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:n,rscRow:o,rowId:c,element:l,wasAttached:e}}))}}catch(e){console.error(`[rari] Error processing boundary update:`,e)}};let n=window,o=globalThis;n[`~rari`].streaming?.bufferedEvents&&n[`~rari`].streaming.bufferedEvents.length>0&&(n[`~rari`].streaming.bufferedEvents.forEach(e=>{let{boundaryId:t,rscRow:n,rowId:r}=e;o[`~rari`].processBoundaryUpdate?.(t,n,r)}),n[`~rari`].streaming.bufferedEvents=[]),window.addEventListener(`rari:boundary-update`,e=>{let{boundaryId:t,rscRow:n,rowId:r}=e.detail;o[`~rari`].processBoundaryUpdate&&o[`~rari`].processBoundaryUpdate(t,n,r)})}function C(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 w(e){return c(e)}function T(){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 E=u,D=d,O=null;async function k(){return O||(O=(async()=>{try{return E=u,D=d,typeof D!=`function`&&(D=null),typeof E!=`function`&&(E=null),b}catch(e){return console.error(`Failed to load react-dom/client RSC functions:`,e),E=null,D=null,null}})(),O)}const A=new Map,j=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(),A.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 k();let n=(()=>{let e=[`/_rari/stream`];try{if(typeof window<`u`&&(window.location.hostname===`localhost`||window.location.hostname===`127.0.0.1`)){let t=x();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,u=new Map,d=new Map,f=e=>{if(!h)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(l(t))return h(p,{fallback:r?.fallback?f(r.fallback):null},r?.children?f(r.children):null);let i=r?{...r}:{};if(r?.children){let e=f(r.children);Array.isArray(e)?i.children=e.map((e,t)=>g(e)&&e.key==null?m(e,{key:t}):e):i.children=e}if(typeof t==`string`){if(t.startsWith(`$L`)){let e=u.get(t);if(e){let t=w(`${e.id}#${e.name||`default`}`);if(t)return h(t,n?{...i,key:n}:i)}return i&&i.children?i.children:null}if(t.includes(`.tsx#`)||t.includes(`.jsx#`)){let e=w(t);return e?h(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`]),h(t,n?{...i,key:n}:i)}else console.error(`Unknown RSC element type:`,t)}return e.map(e=>f(e))}return typeof e==`object`?(console.error(`Unexpected object in RSC conversion:`,e),null):e},_=null,b=new Map,C=``,T=null,E=async()=>{try{for(;;){let{value:e,done:t}=await s.read();if(t)break;let n=c.decode(e,{stream:!0});C+=n;let r=C.split(`
2
+ `),i=r.slice(0,-1);C=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=S(r);if(i)u.set(`$L${n}`,i);else if(r.startsWith(`E{`))try{let e=JSON.parse(r.substring(1)),t=e?.error??e?.message??JSON.stringify(e);console.error(`RSC stream error:`,t)}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===`$`&&l(r)&&i&&a&&d.set(`$L${n}`,a),t===`$`&&i&&Object.hasOwn(i,`children`)&&typeof r==`string`&&r.startsWith(`$L`)){let e=d.get(r)||null;if(e){let t=f(i.children);b.set(e,t),T&&T.updateBoundary(e,t);continue}}}if(!_){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`&&l(n)&&r&&i&&(t=!1)}t&&(_=f(e),T&&typeof T.updateRoot==`function`&&T.updateRoot())}}}catch(t){console.error(`Failed to parse stream line:`,e,t)}}}catch(e){console.error(`Error processing stream:`,e)}},D=()=>{let[,e]=y(0);v(()=>(T={updateBoundary:(t,n)=>{b.set(t,n),e(e=>e+1)},updateRoot:()=>{e(e=>e+1)}},()=>{T=null}),[e]);let t=e=>{if(!e)return null;if(g(e)){let n=e.props,r=n?.[`~boundaryId`];if(n&&r){let e=b.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),h(e.type,t,r)}}return e}return Array.isArray(e)?e.map(e=>t(e)):e};return t(_)};E();let O=Promise.resolve(h(D));return{"~isRscResponse":!0,"~rscPromise":O,readRoot(){return O}}}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 k(),E)try{let t=E(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(n),r=new Map,i=new Map,a=new Map,o=[];for(let e of t){let t=e.indexOf(`:`);if(t===-1)continue;let n=e.substring(0,t),s=e.substring(t+1);if(s)try{let t=S(s);if(t)r.set(`$L${n}`,t);else if(s.startsWith(`E{`)){let e=s.substring(1),t=JSON.parse(e),n=t?.error??t?.message??JSON.stringify(t);o.push(n),console.error(`RSC: Server error`,n)}else if(s.startsWith(`[`)){let e=JSON.parse(s);i.set(n,e)}else if(s.startsWith(`Symbol.for(`))continue;else if(s.startsWith(`"$S`)){let e=JSON.parse(s);typeof e==`string`&&a.set(`$${n}`,e)}else console.error(`Unknown RSC row format:`,e)}catch(t){console.error(`Failed to parse RSC row:`,e,t)}}if(o.length>0)throw Error(`RSC Server Error: ${o.map(e=>e?.error??e?.message??e).join(`, `)}`);let s=null,c=Array.from(i.keys()).sort((e,t)=>Number.parseInt(e,16)-Number.parseInt(t,16));for(let e of c){let t=i.get(e);if(Array.isArray(t)&&t.length>=2&&t[0]===`$`){let[,e,,n]=t,r=n?.[`~boundaryId`],i=typeof e==`string`&&e.startsWith(`$`)?a.get(e):void 0;if((l(e)||l(i))&&n&&r)continue;s=t;break}}return s?this.reconstructElementFromRscData(s,r,a):(console.error(`No valid root element found in RSC payload`,{elements:i,modules:r}),null)}reconstructElementFromRscData(e,t,n){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[,r,i,a]=e,o=r;if(typeof r==`string`&&r.includes(`#`))o=w(r)||(({children:e,...t})=>h(`div`,{...t,"data-client-component":r,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},h(`small`,{style:{color:`#c00`}},`Missing Client Component: ${r}`),e));else if(typeof r==`string`&&r.startsWith(`$L`)&&t.has(r)){let e=t.get(r);e&&(o=w(`${e.id}#${e.name}`)||(({children:t,...n})=>h(`div`,{...n,"data-client-component":r,style:{border:`2px dashed #f00`,padding:`8px`,margin:`4px`,backgroundColor:`#fff0f0`}},h(`small`,{style:{color:`#c00`}},`Missing Client Component: ${e.name} (${e.id})`),t)))}let s=a?this.processPropsRecursively(a,t,n):{},c=typeof r==`string`&&r.startsWith(`$`)&&!r.startsWith(`$L`)?n?.get(r):void 0;return(l(r)||l(c))&&(o=p),h(o,{key:i,...s})}else return e.map(e=>this.reconstructElementFromRscData(e,t,n));return typeof e==`object`?null:e}processPropsRecursively(e,t,n){if(!e||typeof e!=`object`)return e;let r={};for(let[i,a]of Object.entries(e))if(i===`children`)if(Array.isArray(a))if(a.length>=2&&a[0]===`$`)r[i]=this.reconstructElementFromRscData(a,t,n);else{let e=a.map(e=>this.reconstructElementFromRscData(e,t,n)).filter(e=>e!=null);e.length===0?r[i]=null:e.length===1?r[i]=e[0]:r[i]=e}else r[i]=this.reconstructElementFromRscData(a,t,n);else i===`dangerouslySetInnerHTML`?r[i]=a:r[i]=this.reconstructElementFromRscData(a,t,n);return r}};function M({error:e,details:t}){return h(`div`,{className:`rsc-error`,style:{padding:`16px`,backgroundColor:`#fee`,border:`1px solid #fcc`,borderRadius:`4px`,margin:`8px 0`,fontFamily:`monospace`}},h(`h3`,{style:{margin:`0 0 8px 0`,color:`#c00`}},`RSC Error`),h(`p`,{style:{margin:`0 0 8px 0`}},e),t&&h(`details`,{style:{marginTop:`8px`}},h(`summary`,{style:{cursor:`pointer`}},`Error Details`),h(`pre`,{style:{fontSize:`12px`,overflow:`auto`,backgroundColor:`#f5f5f5`,padding:`8px`}},JSON.stringify(t,null,2))))}function N({rootPromise:e}){return _(e)}function P({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(!A.has(i)){let n=j.fetchServerComponent(e,t).catch(e=>{throw A.delete(i),e});A.set(i,n)}let a=_(A.get(i));if(a?.[`~isRscResponse`]){let e=a.readRoot();return h(p,{fallback:n??null},h(N,{rootPromise:e}))}return a??null}var F=class extends f.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?h(M,{error:this.state.error?.message||`Unknown error`,details:{componentId:this.props.componentId}}):this.props.children}};function I(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]=y(t);return v(()=>{let t=t=>{let n=t.detail;if(n&&n.filePath&&R(n.filePath)&&(j.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)}},[]),h(p,{fallback:null},h(F,{componentId:e,mountKey:r},h(P,{key:`${e}-${r}`,componentId:e,props:n,fallback:null})))};return n.displayName=`ServerComponent(${e})`,function(e){return h(n,e)}}function L(e,t){return j.fetchServerComponent(e,t)}function R(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&&R(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&&R(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&&(j.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=`${x()}/_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){j.clearCache();return}let t=[];for(let n of j.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)j.componentCache.delete(e),A.delete(e);let n=[];for(let t of A.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)A.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=`${x()}/_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(j.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 z=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 B=null;function V(){return B||=new z,B}if(import.meta.hot){let e=V();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{M as RscErrorComponent,T as createClientModuleMap,I as createServerComponentWrapper,L as fetchServerComponent,w as getClientComponent,C as registerClientComponent,j as rscClient};
@@ -1,4 +1,4 @@
1
- import{C as e,S as t,b as n,x as r,y as i}from"./regex-constants-s9cBkrFv.mjs";import{t as a}from"./alias-resolver-BintHkb_.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(i,`&amp;`).replace(t,`&lt;`).replace(r,`&gt;`).replace(e,`&quot;`).replace(n,`&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(`
1
+ import{C as e,E as t,S as n,T as r,w as i}from"./regex-constants-DQ2vkSU5.mjs";import{t as a}from"./alias-resolver-BintHkb_.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(r,`&lt;`).replace(i,`&gt;`).replace(t,`&quot;`).replace(e,`&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
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
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
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(`
@@ -24,24 +24,28 @@ interface LayoutEntry {
24
24
  css?: string[];
25
25
  componentId?: string;
26
26
  parentPath?: string;
27
+ additionalPaths?: string[];
27
28
  }
28
29
  interface LoadingEntry {
29
30
  path: string;
30
31
  filePath: string;
31
32
  css?: string[];
32
33
  componentId?: string;
34
+ additionalPaths?: string[];
33
35
  }
34
36
  interface ErrorEntry {
35
37
  path: string;
36
38
  filePath: string;
37
39
  css?: string[];
38
40
  componentId?: string;
41
+ additionalPaths?: string[];
39
42
  }
40
43
  interface NotFoundEntry {
41
44
  path: string;
42
45
  filePath: string;
43
46
  css?: string[];
44
47
  componentId?: string;
48
+ additionalPaths?: string[];
45
49
  }
46
50
  interface OgImageEntry {
47
51
  path: string;
@@ -49,6 +53,7 @@ interface OgImageEntry {
49
53
  width?: number;
50
54
  height?: number;
51
55
  contentType?: string;
56
+ additionalPaths?: string[];
52
57
  }
53
58
  interface ApiRouteEntry {
54
59
  path: string;
package/dist/vite.d.mts CHANGED
@@ -1,5 +1,5 @@
1
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-CwWYmtA0.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-pC5OZq29.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-BWLVeCkK.mjs";
3
3
  import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-85WvBQcW.mjs";
4
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-3dq9RGI5.mjs";
5
5
  import { RariRequest } from "./proxy/RariRequest.mjs";
package/dist/vite.mjs CHANGED
@@ -1,11 +1,11 @@
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-DHeO6y_7.mjs";import{i as f,n as p,o as m,r as h,t as g}from"./constants-De7aSsCq.mjs";import{_,a as v,d as y,g as b,i as x,m as ee,r as te,t as S,v as ne}from"./regex-constants-s9cBkrFv.mjs";import{t as re}from"./timer-utils-Duul5JHq.mjs";import{t as ie}from"./alias-resolver-BintHkb_.mjs";import{Buffer as ae}from"node:buffer";import{spawn as oe}from"node:child_process";import C,{promises as w}from"node:fs";import T from"node:path";import E from"node:process";import{fileURLToPath as D,pathToFileURL as O}from"node:url";import se from"node:crypto";import k from"node:fs/promises";import{build as A}from"rolldown";function ce(e={}){let{root:t=E.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=T.join(t,n);try{return await w.access(i),s(`Found proxy file: ${n}`),{filePath:i,exists:!0,relativePath:n}}catch{}}let e=T.join(t,n);try{await w.access(e);for(let t of i){let i=`${r}${t}`,a=T.join(e,i);try{return await w.access(a),s(`Found proxy file: ${T.join(n,i)}`),{filePath:a,exists:!0,relativePath:T.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 j={PAGE:`page`,LAYOUT:`layout`,LOADING:`loading`,ERROR:`error`,NOT_FOUND:`not-found`,TEMPLATE:`template`,DEFAULT:`default`,ROUTE:`route`,OG_IMAGE:`opengraph-image`,TWITTER_IMAGE:`twitter-image`,ICON:`icon`,APPLE_ICON:`apple-icon`},M={DYNAMIC:/^\[([^\]]+)\]$/,CATCH_ALL:/^\[\.\.\.([^\]]+)\]$/,OPTIONAL_CATCH_ALL:/^\[\[\.\.\.([^\]]+)\]\]$/},le=/export\s+const\s+size\s*=\s*\{\s*width\s*:\s*(\d+)\s*,\s*height\s*:\s*(\d+)\s*[,}]/,ue=/export\s+const\s+contentType\s*=\s*['"]([^'"]+)['"]/,de=[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`];var fe=class{appDir;extensions;verbose;constructor(e){this.appDir=T.resolve(e.appDir),this.extensions=e.extensions||[`.tsx`,`.jsx`,`.ts`,`.js`],this.verbose=e.verbose||!1}async generateManifest(){this.verbose&&console.warn(`[rari] Router: Scanning app directory: ${this.appDir}`);let e=[],t=[],n=[],r=[],i=[],a=[],o=[];return await this.scanDirectory(``,e,t,n,r,i,a,o),this.verbose&&(console.warn(`[rari] Router: Found ${e.length} routes`),console.warn(`[rari] Router: Found ${t.length} layouts`),console.warn(`[rari] Router: Found ${n.length} loading components`),console.warn(`[rari] Router: Found ${r.length} error boundaries`),console.warn(`[rari] Router: Found ${a.length} API routes`),console.warn(`[rari] Router: Found ${o.length} OG images`)),{routes:this.sortRoutes(e),layouts:this.sortLayouts(t),loading:n,errors:r,notFound:i,apiRoutes:this.sortApiRoutes(a),ogImages:o,generated:new Date().toISOString()}}async scanDirectory(e,t,n,r,i,a,o,s){let c=T.join(this.appDir,e),l;try{l=await w.readdir(c)}catch{return}let u=[],d=[];for(let e of l){let t=T.join(c,e),n=await w.stat(t);n.isDirectory()?this.shouldScanDirectory(e)&&d.push(e):n.isFile()&&u.push(e)}await this.processSpecialFiles(e,u,t,n,r,i,a,o,s);for(let c of d){let l=e?T.join(e,c):c;await this.scanDirectory(l,t,n,r,i,a,o,s)}}async processSpecialFiles(e,t,n,r,i,a,o,s,c){let l=this.pathToRoute(e),u=this.findFile(t,j.PAGE);if(u){let t=this.parseRouteSegments(e),r=this.extractParams(t);n.push({path:l,filePath:T.join(e,u).replace(S,`/`),segments:t,params:r,isDynamic:r.length>0})}let d=this.findFile(t,j.LAYOUT);if(d){let t=this.getParentPath(e);r.push({path:l,filePath:T.join(e,d).replace(S,`/`),parentPath:t?this.pathToRoute(t):void 0})}let f=this.findFile(t,j.LOADING);if(f){let t=this.generateComponentId(l,`loading`);i.push({path:l,filePath:T.join(e,f).replace(S,`/`),componentId:t})}let p=this.findFile(t,j.ERROR);p&&a.push({path:l,filePath:T.join(e,p).replace(S,`/`)});let m=this.findFile(t,j.NOT_FOUND);m&&o.push({path:l,filePath:T.join(e,m).replace(S,`/`)});let h=this.findFile(t,j.OG_IMAGE);if(h){let t=T.join(e,h).replace(S,`/`),n=T.join(this.appDir,t),r,i,a;try{let e=await w.readFile(n,`utf-8`),t=e.match(le);t&&(r=Number.parseInt(t[1],10),i=Number.parseInt(t[2],10));let o=e.match(ue);o&&(a=o[1])}catch{}c.push({path:l,filePath:t,width:r,height:i,contentType:a})}let g=this.findFile(t,j.ROUTE);if(g){let t=await this.processApiRouteFile(e,g);s.push(t)}}findFile(e,t){for(let n of this.extensions){let r=`${t}${n}`;if(e.includes(r))return r}}pathToRoute(e){return e?`/${e.replace(S,`/`).split(`/`).filter(Boolean).map(e=>M.OPTIONAL_CATCH_ALL.test(e)?`[[...${e.match(M.OPTIONAL_CATCH_ALL)[1]}]]`:M.CATCH_ALL.test(e)?`[...${e.match(M.CATCH_ALL)[1]}]`:M.DYNAMIC.test(e)?`[${e.match(M.DYNAMIC)[1]}]`:e).join(`/`)}`:`/`}parseRouteSegments(e){return e?e.split(ee).filter(Boolean).map(e=>M.OPTIONAL_CATCH_ALL.test(e)?{type:`optional-catch-all`,value:e,param:e.match(M.OPTIONAL_CATCH_ALL)[1]}:M.CATCH_ALL.test(e)?{type:`catch-all`,value:e,param:e.match(M.CATCH_ALL)[1]}:M.DYNAMIC.test(e)?{type:`dynamic`,value:e,param:e.match(M.DYNAMIC)[1]}:{type:`static`,value:e}):[]}extractParams(e){return e.filter(e=>e.param!==void 0).map(e=>e.param)}getParentPath(e){if(!e)return null;let t=e.split(ee).filter(Boolean);return t.length===0?null:t.slice(0,-1).join(`/`)}generateComponentId(e,t){return`${t}:${e}`}shouldScanDirectory(e){return![`node_modules`,`.git`,`dist`,`build`,`__tests__`,`test`,`tests`,`coverage`].includes(e)&&!e.startsWith(`.`)}sortRoutes(e){return e.sort((e,t)=>{let n=e=>{if(!e.isDynamic)return 0;let t=e.segments.some(e=>e.type===`catch-all`);return e.segments.some(e=>e.type===`optional-catch-all`)?3:t?2:1},r=n(e),i=n(t);if(r!==i)return r-i;let a=e.path.split(`/`).length,o=t.path.split(`/`).length;return a===o?e.path.localeCompare(t.path):o-a})}sortApiRoutes(e){return e.sort((e,t)=>{if(!e.isDynamic&&t.isDynamic)return-1;if(e.isDynamic&&!t.isDynamic)return 1;let n=e.path.split(`/`).length,r=t.path.split(`/`).length;return n===r?e.path.localeCompare(t.path):n-r})}sortLayouts(e){return e.sort((e,t)=>e.path===`/`&&t.path!==`/`?-1:t.path===`/`&&e.path!==`/`?1:e.path.split(`/`).length-t.path.split(`/`).length)}async detectHttpMethods(e){let t=T.join(this.appDir,e),n=await w.readFile(t,`utf-8`),r=[];for(let e of de){let t=RegExp(`export\\s+(?:async\\s+)?function\\s+${e}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${e}\\s*=`);(t.test(n)||i.test(n))&&r.push(e)}return r}async processApiRouteFile(e,t){let n=T.join(e,t).replace(S,`/`),r=this.pathToRoute(e),i=this.parseRouteSegments(e),a=this.extractParams(i),o=await this.detectHttpMethods(n);return{path:r,filePath:n,segments:i,params:a,isDynamic:a.length>0,methods:o}}};async function pe(e,t={}){return new fe({appDir:e,...t}).generateManifest()}const me=/export\s+const\s+metadata\s*(?::\s*\w+\s*)?=\s*(\{[\s\S]*?\n\})/,he=/title\s*:\s*['"]([^'"]+)['"]/,ge=/description\s*:\s*['"]([^'"]+)['"]/,_e=/keywords\s*:\s*\[([\s\S]*?)\]/,ve={appDir:`src/app`,extensions:[`.tsx`,`.jsx`,`.ts`,`.js`],outDir:`dist`};function N(e){switch(T.basename(e).replace(_,``)){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 ye(e,t){let n=T.relative(t,T.dirname(e));return!n||n===`.`?`/`:`/${n.replace(S,`/`).split(`/`).filter(Boolean).join(`/`)}`}function be(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 xe(e){try{let t=e.match(me);if(!t)return null;let n=t[1],r={},i=n.match(he);i&&(r.title=i[1]);let a=n.match(ge);a&&(r.description=a[1]);let o=n.match(_e);o&&(r.keywords=o[1].split(`,`).map(e=>e.trim().replace(b,``)).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 Se(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 Ce(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 P(e={}){let t={...ve,...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 w.readdir(e,{withFileTypes:!0});for(let a of i){let i=T.join(e,a.name);a.isDirectory()?await r(i):a.isFile()&&t.extensions.some(e=>a.name.endsWith(e))&&N(i)&&n.add(i)}}catch{}};return await r(e),n},c=async(e,r=!1)=>{let c=T.resolve(e,t.appDir);try{await w.access(c)}catch{return null}try{let l=await s(c),u=o(l);if(!r&&i===u&&n)return n;let d=await pe(c,{extensions:t.extensions}),f=JSON.stringify(d,null,2),p=T.resolve(e,t.outDir);await w.mkdir(p,{recursive:!0});let m=T.join(p,`server`);return await w.mkdir(m,{recursive:!0}),await w.writeFile(T.join(m,`routes.json`),f,`utf-8`),i=u,a.clear(),l.forEach(e=>a.add(e)),f}catch(e){return console.error(`[rari] Router: Failed to generate app routes:`,e),null}},l=e=>{let n=T.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=N(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||E.cwd(),!0)},configureServer(e){l(e)},async handleHotUpdate(e){let{file:i,server:o}=e,s=T.resolve(o.config.root,t.appDir);if(i.startsWith(s)&&t.extensions.some(e=>i.endsWith(e))){let e=N(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=ye(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=be(d,e,f),m,h=!1,g;if(e===`page`||e===`layout`)try{let e=xe(await w.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=Se(await w.readFile(i,`utf-8`)),await Ce(T.relative(s,i))}catch(e){console.error(`[rari] Router: Failed to detect HTTP methods:`,e)}let _={fileType:e,filePath:T.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();let e=u||E.cwd(),n=T.resolve(e,t.outDir,`server`),i=T.join(n,`routes.json`);try{let e=await w.readFile(i,`utf-8`),t=JSON.parse(e),r=!1;for(let e of t.routes){if(!e.isDynamic)continue;let t=e.componentId;if(!t)continue;let i=t.startsWith(`app/`)?t.slice(4):t,a=T.resolve(n,`app`,`${i}.js`);try{let t=await import(a);if(typeof t.generateStaticParams==`function`){let n=await t.generateStaticParams();Array.isArray(n)&&n.length>0&&(e.staticParams=n,r=!0)}}catch{}}r&&await w.writeFile(i,JSON.stringify(t,null,2),`utf-8`)}catch{}}}}const we=/\\/g,Te=/[^\w/-]/g,Ee=/^src\//,De=/\.(tsx?|jsx?)$/,Oe=/^\.\.(?:[/\\]|$)/;function F(e,t=8){return se.createHash(`sha256`).update(e).digest(`hex`).slice(0,t)}function ke(e,t=E.cwd()){let n=T.isAbsolute(e)?e:T.resolve(t,e),r=T.relative(t,n);return(Oe.test(r)||T.isAbsolute(r)?e:r).replace(we,`/`)}function Ae(e){return e.replace(De,``).replace(Te,`_`).replace(Ee,``)}function I(e,t=E.cwd()){let n=ke(e,t);return`${Ae(n)}_${F(n)}`}const je=new Set([`return`,`throw`,`case`,`typeof`,`instanceof`,`new`,`delete`,`void`,`in`,`of`]);function L(e){return e===` `||e===` `||e===`\r`||e===`
2
- `||e===`\u2028`||e===`\u2029`||e===``}function R(e){return e===`\r`||e===`
3
- `||e===`\u2028`||e===`\u2029`}function Me(e,t,n){for(;t<n&&L(e[t]);)t++;return t}function z(e,t,n){for(;t<n;){let r=Me(e,t,n);if(r!==t){t=r;continue}if(e[t]===`/`&&e[t+1]===`/`){t=B(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=V(e,t,n);continue}break}return t}function B(e,t,n){for(;t<n&&!R(e[t]);)t++;return t}function V(e,t,n){for(t+=2;t<n-1&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}function H(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 Ne(e,t,n){t++;let r=e[t]===`/`;for(r&&t++;t<n&&(G(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=H(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=H(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===`>`||Fe(r)){for(r===`/`?(i--,t++):r!==`!`&&i++,t++;t<n&&(G(e[t])||e[t]===`.`||e[t]===`-`);)t++;continue}t++;continue}t++}return t}function Pe(e,t){let n=0,r=e.length;for(;n<r;){if(L(e[n])){n++;continue}if(e[n]===`/`&&e[n+1]===`/`){n=B(e,n,r);continue}if(e[n]===`/`&&e[n+1]===`*`){n=V(e,n,r);continue}let i=e[n]===`'`||e[n]===`"`?e[n]:null;if(i){let a=n+1,o=H(e,n,r,i);if(o>a){let i=e.slice(a,o-1),s=o;for(;s<r;){if(L(e[s])&&!R(e[s])){s++;continue}if(R(e[s])||e[s]===`;`){if(i===t)return!0;n=s+1;break}if(e[s]===`/`&&e[s+1]===`/`){s=B(e,s,r);continue}if(e[s]===`/`&&e[s+1]===`*`){s=V(e,s,r);continue}return!1}if(s>=r)return i===t;if(s<r&&(R(e[s])||e[s]===`;`))continue;return!1}}return!1}return!1}function U(e){return Pe(e,`use server`)}function W(e){return Pe(e,`use client`)}function G(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e>=`0`&&e<=`9`||e===`_`||e===`$`)}function Fe(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e===`_`||e===`$`)}function Ie(e){return!e||e===`(`||e===`[`||e===`{`||e===`,`||e===`;`||e===`=`||e===`:`||e===`?`||e===`!`||e===`+`||e===`-`||e===`*`||e===`%`||e===`&`||e===`|`||e===`^`||e===`~`||e===`<`||e===`>`}function Le(e,t){let n=t-1;for(;n>=0;){if(L(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||!G(e[n]))return;let r=n;for(;n>=0&&G(e[n]);)n--;return e.slice(n+1,r+1)}function Re(e,t){if(Ie(Be(e,t)))return!0;let n=Le(e,t);return n?je.has(n):!1}function ze(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&&G(e[t]);)t++;return t}if(R(e[t]))return t;t++}return t}function Be(e,t){let n=t-1;for(;n>=0;){if(L(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 K(e){let t=0,n=e.length;for(;t<n;){if(L(e[t])){t++;continue}if(e[t]===`/`&&e[t+1]===`/`){t=B(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=V(e,t,n);continue}let r=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(r){t=H(e,t,n,r);continue}if(e[t]===`/`&&e[t+1]!==`/`&&e[t+1]!==`*`&&Re(e,t)){t=ze(e,t,n);continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||Fe(r)){t=Ne(e,t,n);continue}t++;continue}if(e.slice(t,t+6)===`export`){let r=t+6;if(r<n&&(L(e[r])||e[r]===`{`||e[r]===`/`&&(e[r+1]===`/`||e[r+1]===`*`))){let t=z(e,r,n);if(e.slice(t,t+7)==="default"){let r=t+7;if(r>=n||!G(e[r]))return!0}if(e[t]===`{`){let r=t+1;for(;r<n&&(r=z(e,r,n),e[r]!==`}`);){let t=r;for(;r<n&&G(e[r]);)r++;let i=e.slice(t,r);if(!i)break;r=z(e,r,n);let a=!1;if(e.slice(r,r+2)===`as`){a=!0;let t=r+2;if(t<n&&!G(e[t])){r=z(e,t,n);let i=r;for(;r<n&&G(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 q(e,t){let n=null;for(let r of t)if(e.endsWith(r)&&(n??=C.existsSync(e),n))return e;for(let n of t){let t=`${e}${n}`;if(C.existsSync(t))return t}return null}function Ve(e,t){if(C.existsSync(e)){if(!C.statSync(e).isDirectory())return null;for(let n of t){let t=T.join(e,`index${n}`);if(C.existsSync(t))return t}}return null}var He=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=re(this.resetTimer),this.resetTimer=setTimeout(()=>{this.reset()},this.resetTimeout),this.errorCount>=this.maxErrors&&this.handleMaxErrorsReached()}reset(){this.errorCount=0,this.lastError=null,this.resetTimer=re(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 Ue=/^(["'])use client\1\s*(?:;\s*)?(?:\/\/.*)?$/;var We=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 He({maxErrors:5,resetTimeout:3e4})}getErrorCount(){return this.errorHandler.getErrorCount()}async handleClientComponentUpdate(e,t){let n=T.relative(E.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=T.relative(E.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=C.readFileSync(e,`utf-8`).split(`
6
- `),n=!1;function r(e){return Ue.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(`
7
- • `);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 Ge=/import\s+(\w+)\s+from\s+['"]rari\/image['"]/g,Ke=/import\s+\{[^}]*\b(?:Image\s+as\s+(\w+)|Image)\b[^}]*\}\s+from\s+['"]rari\/image['"]/g,qe=/src:\s*["']([^"']+)["']/,Je=/[.*+?^${}()|[\]\\]/g,Ye=/^[A-Z_$][\w$]*$/i,Xe=/width:\s*(\d+)/,Ze=/quality:\s*(\d+)/,Qe=/preload:\s*(true|!0)/,$e=/preload:\s*(false|!1)/,et=/src=\{?["']([^"']+)["']\}?|src=\{([^}]+)\}/,tt=/width=\{?(\d+)\}?/,nt=/quality=\{?(\d+)\}?/,rt=/preload(?:=\{?true\}?)?/,it=/preload=\{?false\}?/;async function at(e,t){try{await _t(await k.readFile(e,`utf8`),e,t)}catch(t){t.code!==`ENOENT`&&console.warn(`[rari] Image scanner: Failed to process ${e}:`,t)}}const ot=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 J(e,t){try{await k.access(e)}catch{return}let n=await k.readdir(e,{withFileTypes:!0}),r=[];for(let i of n){let n=T.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`||i.name===`dist`)continue;r.push(J(n,t))}else i.isFile()&&_.test(i.name)&&r.push(ot.run(()=>at(n,t)))}await Promise.all(r)}async function st(e,t=[]){let n=new Map;try{await k.access(e),await J(e,n)}catch(t){throw t.code===`ENOENT`?Error(`Required source directory does not exist: ${e}`):t}for(let e of t)try{await k.access(e),await J(e,n)}catch(t){t.code!==`ENOENT`&&console.warn(`[rari] Image scanner: Failed to scan directory ${e}:`,t)}return{images:[...n.values()]}}function ct(e){return e.endsWith(`.tsx`)?`tsx`:e.endsWith(`.jsx`)?`jsx`:e.endsWith(`.ts`)?`ts`:`js`}async function lt(e,t,n){let r=`\0virtual:${t}`,i=await A({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 ut(e){let t=new Set;for(let n of e.matchAll(Ge))t.add(n[1]);for(let n of e.matchAll(Ke))n[1]?t.add(n[1]):t.add(`Image`);return t}function dt(e){return ut(e)}function ft(e){let t=e.match(qe);if(!t)return null;let n=t[1];if(!n.startsWith(`/`)&&!n.startsWith(`http`))return null;let r=e.match(Xe),i=r?Number.parseInt(r[1],10):void 0,a=e.match(Ze),o=a?Number.parseInt(a[1],10):void 0,s=e.match(Qe),c=e.match($e);return{src:n,width:i,quality:o,preload:!!s&&!c}}function pt(e,t){let n=`${e.src}:${e.width??`auto`}:${e.quality??75}`;(!t.has(n)||e.preload)&&t.set(n,e)}function mt(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 ht(e,t,n){for(let r of t){if(!Ye.test(r)){console.warn(`[rari] Image scanner: Skipping unsafe identifier: ${r}`);continue}let t=r.replace(Je,`\\$&`),i=RegExp(`React\\.createElement\\(\\s*${t}\\s*,\\s*\\{`,`g`);for(let t of e.matchAll(i)){let r=mt(e,t.index+t[0].length-1);if(r){let e=ft(r);e&&pt(e,n)}}}}function gt(e){return ut(e)}async function _t(e,t,n){let r=gt(e);if(r.size!==0)try{let r=await lt(e,t,ct(t)),i=dt(r);if(i.size===0)return;ht(r,i,n)}catch{vt(e,r,n)}}function vt(e,t,n){for(let r of t){if(!Ye.test(r)){console.warn(`[rari] Image scanner: Skipping unsafe alias: ${r}`);continue}let t=r.replace(Je,`\\$&`),i=RegExp(`<${t}\\s([^/>]+)\\/>`,`g`),a=RegExp(`<${t}\\s([^>]+)>`,`g`);for(let t of e.matchAll(i))yt(t[1],n);for(let t of e.matchAll(a))yt(t[1],n)}}function yt(e,t){let n=e.match(et);if(!n)return;let r=n[1]||n[2];if(!r||r.includes(`{`)||!r.startsWith(`/`)&&!r.startsWith(`http`))return;let i=e.match(tt),a=i?Number.parseInt(i[1],10):void 0,o=e.match(nt),s=o?Number.parseInt(o[1],10):void 0,c=rt.test(e)&&!it.test(e),l=`${r}:${a??`auto`}:${s??75}`;(!t.has(l)||c)&&t.set(l,{src:r,width:a,quality:s,preload:c})}const bt=/import\s*\(\s*["']([^"']+)["']\s*\)|import\s+["']([^"']+)["']/g,Y=/from\s+['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)|import\s+['"]([^'"]+)['"]/g,xt=/import(?:\s+(?:\w+|\{[^}]*\}|\*\s+as\s+\w+)(?:\s*,\s*(?:\w+|\{[^}]*\}|\*\s+as\s+\w+))*\s+from\s+)?['"]([^'"]+)['"]/g,St=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,Ct=/import\s+(?:(\w+)|\{([^}]+)\})\s+from\s+['"]([^'"]+)['"];?\s*$/gm,wt=/^proxy\.(?:tsx?|jsx?|mts|mjs)$/,Tt=/\\/g,Et=/\/components\/(\w+)(?:\.tsx?|\.jsx?)?$/,Dt=/[/\\]components[/\\](\w+)(?:\.tsx?|\.jsx?)?$/,Ot=/^(?:robots|sitemap)\.(?:tsx?|jsx?)$/,kt=/^node:/,X=/\\/g,At=`[hash]_[local]`;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)}hashString(e,t=8){return F(e,t)}async writeComponentCssAsset(e,t){if(t.length===0)return[];let n=T.join(this.options.outDir,`assets`,`server`);await C.promises.mkdir(n,{recursive:!0});let r=`${t.join(`
8
- `)}\n`,i=`${this.hashString(e+r,12)}.css`,a=T.join(n,i);return await C.promises.writeFile(a,r,`utf-8`),[`/assets/server/${i}`]}getComponentIdFromRouteManifestPath(e){return this.getComponentId(T.join(this.projectRoot,`src`,`app`,e))}getLegacyComponentReferenceId(e){return this.getReadableComponentId(this.getProjectRelativePath(e))}async writeRouteCssEntries(e){let t=T.join(this.options.outDir,this.options.rscDir,`routes.json`);if(!C.existsSync(t))return;let n=await C.promises.readFile(t,`utf-8`),r=JSON.parse(n),i=t=>{if(t)for(let n of t){if(!n.filePath)continue;let t=this.getComponentIdFromRouteManifestPath(n.filePath);n.componentId=t;let r=e.components[t]?.css??[];r.length?n.css=r:delete n.css}};if(i(r.routes),i(r.layouts),i(r.loading),i(r.errors),i(r.notFound),r.apiRoutes)for(let e of r.apiRoutes)e.filePath&&(e.componentId=this.getComponentIdFromRouteManifestPath(e.filePath));await C.promises.writeFile(t,JSON.stringify(r,null,2),`utf-8`)}constructor(e,t={}){this.projectRoot=e;let n=t.rscDir||`server`;this.options={outDir:t.outDir||T.join(e,`dist`),rscDir:n,manifestPath:t.manifestPath||T.join(n,`manifest.json`),serverConfigPath:t.serverConfigPath||T.join(n,`config.json`),minify:t.minify??E.env.NODE_ENV===`production`,alias:t.alias||{},define:t.define,csp:t.csp,cacheControl:t.cacheControl},this.parseHtmlImports()}parseHtmlImports(){let e=T.join(this.projectRoot,`index.html`);if(C.existsSync(e))try{let t=C.readFileSync(e,`utf-8`);for(let e of t.matchAll(bt)){let t=e[1]||e[2];if(t.startsWith(`/src/`)){let e=T.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??(C.existsSync(e)?C.readFileSync(e,`utf-8`):null);return n===null?!1:!W(n)&&!U(n)}catch{return!1}}isClientComponent(e,t){try{let n=t??(C.existsSync(e)?C.readFileSync(e,`utf-8`):null);return n===null?!1:W(n)}catch{return!1}}buildImportGraph(e){this.fileImporters.clear();let t=e=>{if(!C.existsSync(e))return;let n=C.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=T.join(e,r.name);if(r.isDirectory()){if(r.name===`node_modules`)continue;t(n)}else if(r.isFile()&&_.test(r.name))try{let e=C.readFileSync(n,`utf-8`),t;for(Y.lastIndex=0,t=Y.exec(e);t!==null;){let r=t[1]||t[2]||t[3],i=null;if(r.startsWith(`./`)||r.startsWith(`../`)){let e=T.dirname(n);i=T.resolve(e,r)}else if(r.startsWith(`@/`)){let e=r.slice(2);i=T.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(C.existsSync(e)&&C.statSync(e).isFile()){t=e;break}}t&&(this.fileImporters.has(t)||this.fileImporters.set(t,new Set),this.fileImporters.get(t).add(n))}t=Y.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??C.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 U(e)}extractDependencies(e){let t=[],n;for(xt.lastIndex=0;n=xt.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=T.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=T.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(St)){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(Et);if(n){let i=n[1],a=[T.resolve(this.projectRoot,`src`,`components`,`${i}.tsx`),T.resolve(this.projectRoot,`src`,`components`,`${i}.ts`),T.resolve(this.projectRoot,`src`,`components`,`${i}.jsx`),T.resolve(this.projectRoot,`src`,`components`,`${i}.js`)],o=!1;for(let e of a)if(C.existsSync(e)&&this.isClientComponent(e)){o=!0;break}if(!o)continue;let s=`// Component reference: ${i}
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-DHeO6y_7.mjs";import{i as f,n as p,o as m,r as h,t as g}from"./constants-De7aSsCq.mjs";import{_,a as v,b as y,c as b,i as ee,m as te,o as ne,r as re,s as ie,t as x,x as ae,y as oe}from"./regex-constants-DQ2vkSU5.mjs";import{t as se}from"./timer-utils-Duul5JHq.mjs";import{t as ce}from"./alias-resolver-BintHkb_.mjs";import{Buffer as le}from"node:buffer";import{spawn as ue}from"node:child_process";import S,{promises as C}from"node:fs";import w from"node:path";import T from"node:process";import{fileURLToPath as E,pathToFileURL as D}from"node:url";import de from"node:crypto";import O from"node:fs/promises";import{build as k}from"rolldown";function fe(e={}){let{root:t=T.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=w.join(t,n);try{return await C.access(i),s(`Found proxy file: ${n}`),{filePath:i,exists:!0,relativePath:n}}catch{}}let e=w.join(t,n);try{await C.access(e);for(let t of i){let i=`${r}${t}`,a=w.join(e,i);try{return await C.access(a),s(`Found proxy file: ${w.join(n,i)}`),{filePath:a,exists:!0,relativePath:w.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 A={PAGE:`page`,LAYOUT:`layout`,LOADING:`loading`,ERROR:`error`,NOT_FOUND:`not-found`,TEMPLATE:`template`,DEFAULT:`default`,ROUTE:`route`,OG_IMAGE:`opengraph-image`,TWITTER_IMAGE:`twitter-image`,ICON:`icon`,APPLE_ICON:`apple-icon`},j={DYNAMIC:/^\[([^\]]+)\]$/,CATCH_ALL:/^\[\.\.\.([^\]]+)\]$/,OPTIONAL_CATCH_ALL:/^\[\[\.\.\.([^\]]+)\]\]$/},pe=[{pattern:j.OPTIONAL_CATCH_ALL,type:`optional-catch-all`,format:e=>`[[...${e}]]`},{pattern:j.CATCH_ALL,type:`catch-all`,format:e=>`[...${e}]`},{pattern:j.DYNAMIC,type:`dynamic`,format:e=>`[${e}]`}],me=/^\([^/]+\)$/;function M(e){return me.test(e)}function he(e){return e?e.replace(x,`/`).split(`/`).filter(Boolean).some(M):!1}function ge(e){for(let t of pe){let n=e.match(t.pattern);if(n)return{type:t.type,param:n[1],format:t.format}}}function _e(e){let t=ge(e);return t?t.format(t.param):e}function ve(e){let t=ge(e);return t?{type:t.type,value:e,param:t.param}:{type:`static`,value:e}}const ye=/export\s+const\s+size\s*=\s*\{\s*width\s*:\s*(\d+)\s*,\s*height\s*:\s*(\d+)\s*[,}]/,be=/export\s+const\s+contentType\s*=\s*['"]([^'"]+)['"]/,xe=[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`];var Se=class{appDir;extensions;verbose;constructor(e){this.appDir=w.resolve(e.appDir),this.extensions=e.extensions||[`.tsx`,`.jsx`,`.ts`,`.js`],this.verbose=e.verbose||!1}async generateManifest(){this.verbose&&console.warn(`[rari] Router: Scanning app directory: ${this.appDir}`);let e=[],t=[],n=[],r=[],i=[],a=[],o=[];await this.scanDirectory(``,e,t,n,r,i,a,o);for(let a of[t,n,r,i,o])this.finalizeGroupEntries(e,a);return this.assertNoDuplicateRoutes(e),this.assertNoDuplicateRoutes(a),this.verbose&&(console.warn(`[rari] Router: Found ${e.length} routes`),console.warn(`[rari] Router: Found ${t.length} layouts`),console.warn(`[rari] Router: Found ${n.length} loading components`),console.warn(`[rari] Router: Found ${r.length} error boundaries`),console.warn(`[rari] Router: Found ${a.length} API routes`),console.warn(`[rari] Router: Found ${o.length} OG images`)),{routes:this.sortRoutes(e),layouts:this.sortLayouts(t),loading:n,errors:r,notFound:i,apiRoutes:this.sortApiRoutes(a),ogImages:o,generated:new Date().toISOString()}}finalizeGroupEntries(e,t){for(let n=t.length-1;n>=0;n--){let r=t[n],i=w.dirname(r.filePath).replace(x,`/`);if(!he(i))continue;let a=e.filter(e=>{let t=w.dirname(e.filePath).replace(x,`/`);return t===i||t.startsWith(`${i}/`)}).map(e=>e.path);if(a.length===0){t.splice(n,1);continue}let o=Array.from(new Set(a)).sort();r.path=o[0],o.length>1&&(r.additionalPaths=o.slice(1))}}assertNoDuplicateRoutes(e){let t=new Map;for(let n of e){let e=t.get(n.path);if(e)throw Error(`[rari] Route conflict: path '${n.path}' is defined by both '${e}' and '${n.filePath}'.`);t.set(n.path,n.filePath)}}async scanDirectory(e,t,n,r,i,a,o,s){let c=w.join(this.appDir,e),l;try{l=await C.readdir(c)}catch{return}let u=[],d=[];for(let e of l){let t=w.join(c,e),n=await C.stat(t);n.isDirectory()?this.shouldScanDirectory(e)&&d.push(e):n.isFile()&&u.push(e)}await this.processSpecialFiles(e,u,t,n,r,i,a,o,s);for(let c of d){let l=e?w.join(e,c):c;await this.scanDirectory(l,t,n,r,i,a,o,s)}}async processSpecialFiles(e,t,n,r,i,a,o,s,c){let l=this.pathToRoute(e),u=this.findFile(t,A.PAGE);if(u){let t=this.parseRouteSegments(e),r=this.extractParams(t);n.push({path:l,filePath:w.join(e,u).replace(x,`/`),segments:t,params:r,isDynamic:r.length>0})}let d=this.findFile(t,A.LAYOUT);if(d){let t=this.getParentPath(e);r.push({path:l,filePath:w.join(e,d).replace(x,`/`),parentPath:t?this.pathToRoute(t):void 0})}let f=this.findFile(t,A.LOADING);if(f){let t=this.generateComponentId(l,`loading`);i.push({path:l,filePath:w.join(e,f).replace(x,`/`),componentId:t})}let p=this.findFile(t,A.ERROR);p&&a.push({path:l,filePath:w.join(e,p).replace(x,`/`)});let m=this.findFile(t,A.NOT_FOUND);m&&o.push({path:l,filePath:w.join(e,m).replace(x,`/`)});let h=this.findFile(t,A.OG_IMAGE);if(h){let t=w.join(e,h).replace(x,`/`),n=w.join(this.appDir,t),r,i,a;try{let e=await C.readFile(n,`utf-8`),t=e.match(ye);t&&(r=Number.parseInt(t[1],10),i=Number.parseInt(t[2],10));let o=e.match(be);o&&(a=o[1])}catch{}c.push({path:l,filePath:t,width:r,height:i,contentType:a})}let g=this.findFile(t,A.ROUTE);if(g){let t=await this.processApiRouteFile(e,g);s.push(t)}}findFile(e,t){for(let n of this.extensions){let r=`${t}${n}`;if(e.includes(r))return r}}pathToRoute(e){return e?`/${e.replace(x,`/`).split(`/`).filter(Boolean).filter(e=>!M(e)).map(_e).join(`/`)}`:`/`}parseRouteSegments(e){return e?e.split(_).filter(Boolean).filter(e=>!M(e)).map(ve):[]}extractParams(e){return e.filter(e=>e.param!==void 0).map(e=>e.param)}getParentPath(e){if(!e)return null;let t=e.split(_).filter(Boolean);return t.length===0?null:t.slice(0,-1).join(`/`)}generateComponentId(e,t){return`${t}:${e}`}shouldScanDirectory(e){return![`node_modules`,`.git`,`dist`,`build`,`__tests__`,`test`,`tests`,`coverage`].includes(e)&&!e.startsWith(`_`)&&!e.startsWith(`.`)}sortRoutes(e){return e.sort((e,t)=>{let n=e=>{if(!e.isDynamic)return 0;let t=e.segments.some(e=>e.type===`catch-all`);return e.segments.some(e=>e.type===`optional-catch-all`)?3:t?2:1},r=n(e),i=n(t);if(r!==i)return r-i;let a=e.path.split(`/`).length,o=t.path.split(`/`).length;return a===o?e.path.localeCompare(t.path):o-a})}sortApiRoutes(e){return e.sort((e,t)=>{if(!e.isDynamic&&t.isDynamic)return-1;if(e.isDynamic&&!t.isDynamic)return 1;let n=e.path.split(`/`).length,r=t.path.split(`/`).length;return n===r?e.path.localeCompare(t.path):n-r})}sortLayouts(e){return e.sort((e,t)=>e.path===`/`&&t.path!==`/`?-1:t.path===`/`&&e.path!==`/`?1:e.path.split(`/`).length-t.path.split(`/`).length)}async detectHttpMethods(e){let t=w.join(this.appDir,e),n=await C.readFile(t,`utf-8`),r=[];for(let e of xe){let t=RegExp(`export\\s+(?:async\\s+)?function\\s+${e}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${e}\\s*=`);(t.test(n)||i.test(n))&&r.push(e)}return r}async processApiRouteFile(e,t){let n=w.join(e,t).replace(x,`/`),r=this.pathToRoute(e),i=this.parseRouteSegments(e),a=this.extractParams(i),o=await this.detectHttpMethods(n);return{path:r,filePath:n,segments:i,params:a,isDynamic:a.length>0,methods:o}}};async function Ce(e,t={}){return new Se({appDir:e,...t}).generateManifest()}const we=/export\s+const\s+metadata\s*(?::\s*\w+\s*)?=\s*(\{[\s\S]*?\n\})/,Te=/title\s*:\s*['"]([^'"]+)['"]/,Ee=/description\s*:\s*['"]([^'"]+)['"]/,De=/keywords\s*:\s*\[([\s\S]*?)\]/,Oe={appDir:`src/app`,extensions:[`.tsx`,`.jsx`,`.ts`,`.js`],outDir:`dist`};function N(e){switch(w.basename(e).replace(y,``)){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 ke(e,t){let n=w.relative(t,w.dirname(e));return!n||n===`.`?`/`:`/${n.replace(x,`/`).split(`/`).filter(Boolean).join(`/`)}`}function Ae(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 je(e){try{let t=e.match(we);if(!t)return null;let n=t[1],r={},i=n.match(Te);i&&(r.title=i[1]);let a=n.match(Ee);a&&(r.description=a[1]);let o=n.match(De);o&&(r.keywords=o[1].split(`,`).map(e=>e.trim().replace(oe,``)).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 Me(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 Ne(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 Pe(e={}){let t={...Oe,...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 C.readdir(e,{withFileTypes:!0});for(let a of i){let i=w.join(e,a.name);a.isDirectory()?await r(i):a.isFile()&&t.extensions.some(e=>a.name.endsWith(e))&&N(i)&&n.add(i)}}catch{}};return await r(e),n},c=async(e,r=!1)=>{let c=w.resolve(e,t.appDir);try{await C.access(c)}catch{return null}try{let l=await s(c),u=o(l);if(!r&&i===u&&n)return n;let d=await Ce(c,{extensions:t.extensions}),f=JSON.stringify(d,null,2),p=w.resolve(e,t.outDir);await C.mkdir(p,{recursive:!0});let m=w.join(p,`server`);return await C.mkdir(m,{recursive:!0}),await C.writeFile(w.join(m,`routes.json`),f,`utf-8`),i=u,a.clear(),l.forEach(e=>a.add(e)),f}catch(e){return console.error(`[rari] Router: Failed to generate app routes:`,e),null}},l=e=>{let n=w.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=N(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||T.cwd(),!0)},configureServer(e){l(e)},async handleHotUpdate(e){let{file:i,server:o}=e,s=w.resolve(o.config.root,t.appDir);if(i.startsWith(s)&&t.extensions.some(e=>i.endsWith(e))){let e=N(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=ke(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=Ae(d,e,f),m,h=!1,g;if(e===`page`||e===`layout`)try{let e=je(await C.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=Me(await C.readFile(i,`utf-8`)),await Ne(w.relative(s,i))}catch(e){console.error(`[rari] Router: Failed to detect HTTP methods:`,e)}let _={fileType:e,filePath:w.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();let e=u||T.cwd(),n=w.resolve(e,t.outDir,`server`),i=w.join(n,`routes.json`);try{let e=await C.readFile(i,`utf-8`),t=JSON.parse(e),r=!1;for(let e of t.routes){if(!e.isDynamic)continue;let t=e.componentId;if(!t)continue;let i=t.startsWith(`app/`)?t.slice(4):t,a=w.resolve(n,`app`,`${i}.js`);try{let t=await import(a);if(typeof t.generateStaticParams==`function`){let n=await t.generateStaticParams();Array.isArray(n)&&n.length>0&&(e.staticParams=n,r=!0)}}catch{}}r&&await C.writeFile(i,JSON.stringify(t,null,2),`utf-8`)}catch{}}}}const Fe=/\\/g,Ie=/[^\w/-]/g,Le=/^src\//,Re=/\.(tsx?|jsx?)$/,ze=/^\.\.(?:[/\\]|$)/;function Be(e,t=8){return de.createHash(`sha256`).update(e).digest(`hex`).slice(0,t)}function Ve(e,t=T.cwd()){let n=w.isAbsolute(e)?e:w.resolve(t,e),r=w.relative(t,n);return(ze.test(r)||w.isAbsolute(r)?e:r).replace(Fe,`/`)}function He(e){return e.replace(Re,``).replace(Ie,`_`).replace(Le,``)}function P(e,t=T.cwd()){let n=Ve(e,t);return`${He(n)}_${Be(n)}`}const Ue=new Set([`return`,`throw`,`case`,`typeof`,`instanceof`,`new`,`delete`,`void`,`in`,`of`]);function F(e){return e===` `||e===` `||e===`\r`||e===`
2
+ `||e===`\u2028`||e===`\u2029`||e===``}function I(e){return e===`\r`||e===`
3
+ `||e===`\u2028`||e===`\u2029`}function We(e,t,n){for(;t<n&&F(e[t]);)t++;return t}function L(e,t,n){for(;t<n;){let r=We(e,t,n);if(r!==t){t=r;continue}if(e[t]===`/`&&e[t+1]===`/`){t=R(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=z(e,t,n);continue}break}return t}function R(e,t,n){for(;t<n&&!I(e[t]);)t++;return t}function z(e,t,n){for(t+=2;t<n-1&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}function B(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 Ge(e,t,n){t++;let r=e[t]===`/`;for(r&&t++;t<n&&(U(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=B(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=B(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===`>`||qe(r)){for(r===`/`?(i--,t++):r!==`!`&&i++,t++;t<n&&(U(e[t])||e[t]===`.`||e[t]===`-`);)t++;continue}t++;continue}t++}return t}function Ke(e,t){let n=0,r=e.length;for(;n<r;){if(F(e[n])){n++;continue}if(e[n]===`/`&&e[n+1]===`/`){n=R(e,n,r);continue}if(e[n]===`/`&&e[n+1]===`*`){n=z(e,n,r);continue}let i=e[n]===`'`||e[n]===`"`?e[n]:null;if(i){let a=n+1,o=B(e,n,r,i);if(o>a){let i=e.slice(a,o-1),s=o;for(;s<r;){if(F(e[s])&&!I(e[s])){s++;continue}if(I(e[s])||e[s]===`;`){if(i===t)return!0;n=s+1;break}if(e[s]===`/`&&e[s+1]===`/`){s=R(e,s,r);continue}if(e[s]===`/`&&e[s+1]===`*`){s=z(e,s,r);continue}return!1}if(s>=r)return i===t;if(s<r&&(I(e[s])||e[s]===`;`))continue;return!1}}return!1}return!1}function V(e){return Ke(e,`use server`)}function H(e){return Ke(e,`use client`)}function U(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e>=`0`&&e<=`9`||e===`_`||e===`$`)}function qe(e){return!!e&&(e>=`a`&&e<=`z`||e>=`A`&&e<=`Z`||e===`_`||e===`$`)}function Je(e){return!e||e===`(`||e===`[`||e===`{`||e===`,`||e===`;`||e===`=`||e===`:`||e===`?`||e===`!`||e===`+`||e===`-`||e===`*`||e===`%`||e===`&`||e===`|`||e===`^`||e===`~`||e===`<`||e===`>`}function Ye(e,t){let n=t-1;for(;n>=0;){if(F(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||!U(e[n]))return;let r=n;for(;n>=0&&U(e[n]);)n--;return e.slice(n+1,r+1)}function Xe(e,t){if(Je(Qe(e,t)))return!0;let n=Ye(e,t);return n?Ue.has(n):!1}function Ze(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&&U(e[t]);)t++;return t}if(I(e[t]))return t;t++}return t}function Qe(e,t){let n=t-1;for(;n>=0;){if(F(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 W(e){let t=0,n=e.length;for(;t<n;){if(F(e[t])){t++;continue}if(e[t]===`/`&&e[t+1]===`/`){t=R(e,t,n);continue}if(e[t]===`/`&&e[t+1]===`*`){t=z(e,t,n);continue}let r=e[t]===`'`||e[t]===`"`||e[t]==="`"?e[t]:null;if(r){t=B(e,t,n,r);continue}if(e[t]===`/`&&e[t+1]!==`/`&&e[t+1]!==`*`&&Xe(e,t)){t=Ze(e,t,n);continue}if(e[t]===`<`){let r=e[t+1];if(r===`/`||r===`.`||r===`>`||qe(r)){t=Ge(e,t,n);continue}t++;continue}if(e.slice(t,t+6)===`export`){let r=t+6;if(r<n&&(F(e[r])||e[r]===`{`||e[r]===`/`&&(e[r+1]===`/`||e[r+1]===`*`))){let t=L(e,r,n);if(e.slice(t,t+7)==="default"){let r=t+7;if(r>=n||!U(e[r]))return!0}if(e[t]===`{`){let r=t+1;for(;r<n&&(r=L(e,r,n),e[r]!==`}`);){let t=r;for(;r<n&&U(e[r]);)r++;let i=e.slice(t,r);if(!i)break;r=L(e,r,n);let a=!1;if(e.slice(r,r+2)===`as`){a=!0;let t=r+2;if(t<n&&!U(e[t])){r=L(e,t,n);let i=r;for(;r<n&&U(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 $e(e,t){let n=null;for(let r of t)if(e.endsWith(r)&&(n??=S.existsSync(e),n))return e;for(let n of t){let t=`${e}${n}`;if(S.existsSync(t))return t}return null}function et(e,t){if(S.existsSync(e)){if(!S.statSync(e).isDirectory())return null;for(let n of t){let t=w.join(e,`index${n}`);if(S.existsSync(t))return t}}return null}var tt=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=se(this.resetTimer),this.resetTimer=setTimeout(()=>{this.reset()},this.resetTimeout),this.errorCount>=this.maxErrors&&this.handleMaxErrorsReached()}reset(){this.errorCount=0,this.lastError=null,this.resetTimer=se(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 nt=/^(["'])use client\1\s*(?:;\s*)?(?:\/\/.*)?$/;var rt=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 tt({maxErrors:5,resetTimeout:3e4})}getErrorCount(){return this.errorHandler.getErrorCount()}async handleClientComponentUpdate(e,t){let n=w.relative(T.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=w.relative(T.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=S.readFileSync(e,`utf-8`).split(`
6
+ `),n=!1;function r(e){return nt.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(`
7
+ • `);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 it=/import\s+(\w+)\s+from\s+['"]rari\/image['"]/g,at=/import\s+\{[^}]*\b(?:Image\s+as\s+(\w+)|Image)\b[^}]*\}\s+from\s+['"]rari\/image['"]/g,ot=/src:\s*["']([^"']+)["']/,st=/[.*+?^${}()|[\]\\]/g,ct=/^[A-Z_$][\w$]*$/i,lt=/width:\s*(\d+)/,ut=/quality:\s*(\d+)/,dt=/preload:\s*(true|!0)/,ft=/preload:\s*(false|!1)/,pt=/src=\{?["']([^"']+)["']\}?|src=\{([^}]+)\}/,mt=/width=\{?(\d+)\}?/,ht=/quality=\{?(\d+)\}?/,gt=/preload(?:=\{?true\}?)?/,_t=/preload=\{?false\}?/;async function vt(e,t){try{await kt(await O.readFile(e,`utf8`),e,t)}catch(t){t.code!==`ENOENT`&&console.warn(`[rari] Image scanner: Failed to process ${e}:`,t)}}const yt=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 G(e,t){try{await O.access(e)}catch{return}let n=await O.readdir(e,{withFileTypes:!0}),r=[];for(let i of n){let n=w.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`||i.name===`dist`)continue;r.push(G(n,t))}else i.isFile()&&y.test(i.name)&&r.push(yt.run(()=>vt(n,t)))}await Promise.all(r)}async function bt(e,t=[]){let n=new Map;try{await O.access(e),await G(e,n)}catch(t){throw t.code===`ENOENT`?Error(`Required source directory does not exist: ${e}`):t}for(let e of t)try{await O.access(e),await G(e,n)}catch(t){t.code!==`ENOENT`&&console.warn(`[rari] Image scanner: Failed to scan directory ${e}:`,t)}return{images:[...n.values()]}}function xt(e){return e.endsWith(`.tsx`)?`tsx`:e.endsWith(`.jsx`)?`jsx`:e.endsWith(`.ts`)?`ts`:`js`}async function St(e,t,n){let r=`\0virtual:${t}`,i=await k({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 K(e){let t=new Set;for(let n of e.matchAll(it))t.add(n[1]);for(let n of e.matchAll(at))n[1]?t.add(n[1]):t.add(`Image`);return t}function Ct(e){return K(e)}function wt(e){let t=e.match(ot);if(!t)return null;let n=t[1];if(!n.startsWith(`/`)&&!n.startsWith(`http`))return null;let r=e.match(lt),i=r?Number.parseInt(r[1],10):void 0,a=e.match(ut),o=a?Number.parseInt(a[1],10):void 0,s=e.match(dt),c=e.match(ft);return{src:n,width:i,quality:o,preload:!!s&&!c}}function Tt(e,t){let n=`${e.src}:${e.width??`auto`}:${e.quality??75}`;(!t.has(n)||e.preload)&&t.set(n,e)}function Et(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 Dt(e,t,n){for(let r of t){if(!ct.test(r)){console.warn(`[rari] Image scanner: Skipping unsafe identifier: ${r}`);continue}let t=r.replace(st,`\\$&`),i=RegExp(`React\\.createElement\\(\\s*${t}\\s*,\\s*\\{`,`g`);for(let t of e.matchAll(i)){let r=Et(e,t.index+t[0].length-1);if(r){let e=wt(r);e&&Tt(e,n)}}}}function Ot(e){return K(e)}async function kt(e,t,n){let r=Ot(e);if(r.size!==0)try{let r=await St(e,t,xt(t)),i=Ct(r);if(i.size===0)return;Dt(r,i,n)}catch{At(e,r,n)}}function At(e,t,n){for(let r of t){if(!ct.test(r)){console.warn(`[rari] Image scanner: Skipping unsafe alias: ${r}`);continue}let t=r.replace(st,`\\$&`),i=RegExp(`<${t}\\s([^/>]+)\\/>`,`g`),a=RegExp(`<${t}\\s([^>]+)>`,`g`);for(let t of e.matchAll(i))jt(t[1],n);for(let t of e.matchAll(a))jt(t[1],n)}}function jt(e,t){let n=e.match(pt);if(!n)return;let r=n[1]||n[2];if(!r||r.includes(`{`)||!r.startsWith(`/`)&&!r.startsWith(`http`))return;let i=e.match(mt),a=i?Number.parseInt(i[1],10):void 0,o=e.match(ht),s=o?Number.parseInt(o[1],10):void 0,c=gt.test(e)&&!_t.test(e),l=`${r}:${a??`auto`}:${s??75}`;(!t.has(l)||c)&&t.set(l,{src:r,width:a,quality:s,preload:c})}const Mt=/import\s*\(\s*["']([^"']+)["']\s*\)|import\s+["']([^"']+)["']/g,q=/from\s+['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)|import\s+['"]([^'"]+)['"]/g,Nt=/import(?:\s+(?:\w+|\{[^}]*\}|\*\s+as\s+\w+)(?:\s*,\s*(?:\w+|\{[^}]*\}|\*\s+as\s+\w+))*\s+from\s+)?['"]([^'"]+)['"]/g,Pt=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,Ft=/import\s+(?:(\w+)|\{([^}]+)\})\s+from\s+['"]([^'"]+)['"];?\s*$/gm,It=/^proxy\.(?:tsx?|jsx?|mts|mjs)$/,Lt=/\\/g,Rt=/\/components\/(\w+)(?:\.tsx?|\.jsx?)?$/,zt=/[/\\]components[/\\](\w+)(?:\.tsx?|\.jsx?)?$/,Bt=/^(?:robots|sitemap)\.(?:tsx?|jsx?)$/,Vt=/^node:/,J=/\\/g,Ht=`[hash]_[local]`,Ut=w.dirname(E(import.meta.url)),Wt=w.dirname(Ut);function Gt(e){return e.startsWith(Wt)}var Y=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)}hashString(e,t=8){return Be(e,t)}async writeComponentCssAsset(e,t){if(t.length===0)return[];let n=w.join(this.options.outDir,`assets`,`server`);await S.promises.mkdir(n,{recursive:!0});let r=`${t.join(`
8
+ `)}\n`,i=`${this.hashString(e+r,12)}.css`,a=w.join(n,i);return await S.promises.writeFile(a,r,`utf-8`),[`/assets/server/${i}`]}getComponentIdFromRouteManifestPath(e){return this.getComponentId(w.join(this.projectRoot,`src`,`app`,e))}getLegacyComponentReferenceId(e){return this.getReadableComponentId(this.getProjectRelativePath(e))}async writeRouteCssEntries(e){let t=w.join(this.options.outDir,this.options.rscDir,`routes.json`);if(!S.existsSync(t))return;let n=await S.promises.readFile(t,`utf-8`),r=JSON.parse(n),i=t=>{if(t)for(let n of t){if(!n.filePath)continue;let t=this.getComponentIdFromRouteManifestPath(n.filePath);n.componentId=t;let r=e.components[t]?.css??[];r.length?n.css=r:delete n.css}};if(i(r.routes),i(r.layouts),i(r.loading),i(r.errors),i(r.notFound),r.apiRoutes)for(let e of r.apiRoutes)e.filePath&&(e.componentId=this.getComponentIdFromRouteManifestPath(e.filePath));await S.promises.writeFile(t,JSON.stringify(r,null,2),`utf-8`)}constructor(e,t={}){this.projectRoot=e;let n=t.rscDir||`server`;this.options={outDir:t.outDir||w.join(e,`dist`),rscDir:n,manifestPath:t.manifestPath||w.join(n,`manifest.json`),serverConfigPath:t.serverConfigPath||w.join(n,`config.json`),minify:t.minify??T.env.NODE_ENV===`production`,alias:t.alias||{},define:t.define,csp:t.csp,cacheControl:t.cacheControl},this.parseHtmlImports()}parseHtmlImports(){let e=w.join(this.projectRoot,`index.html`);if(S.existsSync(e))try{let t=S.readFileSync(e,`utf-8`);for(let e of t.matchAll(Mt)){let t=e[1]||e[2];if(t.startsWith(`/src/`)){let e=w.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??(S.existsSync(e)?S.readFileSync(e,`utf-8`):null);return n===null?!1:!H(n)&&!V(n)}catch{return!1}}isClientComponent(e,t){try{let n=t??(S.existsSync(e)?S.readFileSync(e,`utf-8`):null);return n===null?!1:H(n)}catch{return!1}}buildImportGraph(e){this.fileImporters.clear();let t=e=>{if(!S.existsSync(e))return;let n=S.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=w.join(e,r.name);if(r.isDirectory()){if(r.name===`node_modules`)continue;t(n)}else if(r.isFile()&&y.test(r.name))try{let e=S.readFileSync(n,`utf-8`),t;for(q.lastIndex=0,t=q.exec(e);t!==null;){let r=t[1]||t[2]||t[3],i=null;if(r.startsWith(`./`)||r.startsWith(`../`)){let e=w.dirname(n);i=w.resolve(e,r)}else if(r.startsWith(`@/`)){let e=r.slice(2);i=w.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(S.existsSync(e)&&S.statSync(e).isFile()){t=e;break}}t&&(this.fileImporters.has(t)||this.fileImporters.set(t,new Set),this.fileImporters.get(t).add(n))}t=q.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??S.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 V(e)}extractDependencies(e){let t=[],n;for(Nt.lastIndex=0;n=Nt.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=w.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=w.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(Pt)){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(Rt);if(n){let i=n[1],a=[w.resolve(this.projectRoot,`src`,`components`,`${i}.tsx`),w.resolve(this.projectRoot,`src`,`components`,`${i}.ts`),w.resolve(this.projectRoot,`src`,`components`,`${i}.jsx`),w.resolve(this.projectRoot,`src`,`components`,`${i}.js`)],o=!1;for(let e of a)if(S.existsSync(e)&&this.isClientComponent(e)){o=!0;break}if(!o)continue;let s=`// Component reference: ${i}
9
9
  const ${r} = (props) => {
10
10
  let Component = globalThis['~clientComponents']?.['components/${i}']?.component
11
11
  || globalThis['components/${i}'];
@@ -23,7 +23,7 @@ const ${r} = (props) => {
23
23
  }
24
24
 
25
25
  return Component(props);
26
- }`;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=T.join(t,n);break}if(a){let n=a.match(Dt);if(n){let i=n[1],o=T.isAbsolute(a)?a:T.resolve(this.projectRoot,a),s=[o,`${o}.tsx`,`${o}.ts`,`${o}.jsx`,`${o}.js`],c=!1,l=o;for(let e of s)if(C.existsSync(e)){l=e,this.isClientComponent(e)&&(c=!0);break}if(!c)continue;let u=this.getLegacyComponentReferenceId(l),d=`// Component reference: ${i}
26
+ }`;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=w.join(t,n);break}if(a){let n=a.match(zt);if(n){let i=n[1],o=w.isAbsolute(a)?a:w.resolve(this.projectRoot,a),s=[o,`${o}.tsx`,`${o}.ts`,`${o}.jsx`,`${o}.js`],c=!1,l=o;for(let e of s)if(S.existsSync(e)){l=e,this.isClientComponent(e)&&(c=!0);break}if(!c)continue;let u=this.getLegacyComponentReferenceId(l),d=`// Component reference: ${i}
27
27
  const ${r} = (props) => {
28
28
  let Component = globalThis['~clientComponents']?.['${u}']?.component
29
29
  || globalThis['${u}'];
@@ -41,7 +41,7 @@ const ${r} = (props) => {
41
41
  }
42
42
 
43
43
  return Component(props);
44
- }`;t.push({original:e,replacement:d})}}}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,i=!1,a){let o=T.dirname(r),s=wt.test(T.basename(r)),c=this,l=new Map,u=new Map;return[{name:`virtual-module`,resolveId(t,n){if(t===e)return t;if(n===e&&(t.startsWith(`./`)||t.startsWith(`../`))){if(t.endsWith(`.module.css`))return null;let e=T.resolve(o,t);for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let n=e+t;if(C.existsSync(n)&&C.statSync(n).isFile())return n}for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=T.join(e,`index${t}`);if(C.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=ie(t,c.options.alias||{},c.projectRoot),!r&&(t.startsWith(`./`)||t.startsWith(`../`))){let i=n===e?o:T.dirname(n);r=T.resolve(i,t)}if(r)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=r+e;if(C.existsSync(t)&&C.statSync(t).isFile()){if(c.isClientComponent(t)){let e=T.relative(c.projectRoot,t),n=(e.startsWith(`..`)?t:e).replace(X,`/`);return l.set(t,n),{id:`\0client-ref:${t}`}}try{let e=C.readFileSync(t,`utf-8`);if(U(e)){let n=c.getComponentId(t),r=K(e);return u.set(t,{actionId:n,hasDefaultExport:r}),{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=T.relative(c.projectRoot,t),r=(l.get(t)||(n.startsWith(`..`)?t:n)).replace(X,`/`);return{code:`
44
+ }`;t.push({original:e,replacement:d})}}}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,i=!1,a){let o=w.dirname(r),s=It.test(w.basename(r)),c=this,l=new Map,u=new Map;return[{name:`virtual-module`,resolveId(t,n){if(t===e)return t;if(n===e&&(t.startsWith(`./`)||t.startsWith(`../`))){if(t.endsWith(`.module.css`))return null;let e=w.resolve(o,t);for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let n=e+t;if(S.existsSync(n)&&S.statSync(n).isFile())return n}for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=w.join(e,`index${t}`);if(S.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`)||Gt(n)||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=ce(t,c.options.alias||{},c.projectRoot),!r&&(t.startsWith(`./`)||t.startsWith(`../`))){let i=n===e?o:w.dirname(n);r=w.resolve(i,t)}if(r)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=r+e;if(S.existsSync(t)&&S.statSync(t).isFile()){if(c.isClientComponent(t)){let e=w.relative(c.projectRoot,t),n=(e.startsWith(`..`)?t:e).replace(J,`/`);return l.set(t,n),{id:`\0client-ref:${t}`}}try{let e=S.readFileSync(t,`utf-8`);if(V(e)){let n=c.getComponentId(t),r=W(e);return u.set(t,{actionId:n,hasDefaultExport:r}),{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=w.relative(c.projectRoot,t),r=(l.get(t)||(n.startsWith(`..`)?t:n)).replace(J,`/`);return{code:`
45
45
  function registerClientReference(clientReference, id, exportName) {
46
46
  const key = id + '#' + exportName;
47
47
  const clientProxy = {};
@@ -61,7 +61,7 @@ function registerClientReference(clientReference, id, exportName) {
61
61
  }
62
62
 
63
63
  export default registerClientReference(null, ${JSON.stringify(r)}, "default");
64
- `,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=u.get(t)?.actionId??c.getComponentId(t),r=T.join(c.options.outDir,c.options.rscDir,`${n}.js`),i=O(T.resolve(c.projectRoot,r)).href;return{code:u.get(t)?.hasDefaultExport??!1?`export * from ${JSON.stringify(i)};\nexport { default } from ${JSON.stringify(i)};`:`export * from ${JSON.stringify(i)};`,moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,t)=>{if(!i)return null;if(e.startsWith(`file://`)){let t=e.replace(v,``);return C.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null;n=ie(e,c.options.alias||{},c.projectRoot);let r=t?.startsWith(`\0`)?o:t?T.dirname(t):o;if(!n&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=T.resolve(r,e)),!n||r.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(C.existsSync(t)&&C.statSync(t).isFile()){if(c.isClientComponent(t))return null;let e=T.join(c.projectRoot,`src`);if(!t.startsWith(e))return null;let n=c.getComponentId(t),r=T.join(c.options.outDir,c.options.rscDir,`${n}.js`);if(C.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:C.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=T.join(r,t),a=T.isAbsolute(i)?i:T.resolve(c.projectRoot,i);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=a+e;if(C.existsSync(t)&&C.statSync(t).isFile())return t}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let t=T.join(a,`index${e}`);if(C.existsSync(t))return t}return a}return null}},{name:`resolve-rari-proxy`,resolveId:e=>{if(s&&e===`rari`){let e=T.resolve(c.projectRoot,`node_modules/rari/dist/proxy/RariResponse.mjs`);if(C.existsSync(e))return e;let t=T.resolve(c.projectRoot,`node_modules/rari/src/proxy/RariResponse.ts`);if(C.existsSync(t))return t}return null}},{name:`css-modules`,resolveId:(e,t)=>{if(e.endsWith(`.module.css`)){let n=!t?.startsWith(`\0`)&&t?T.dirname(t):o,r=T.resolve(n,e);if(C.existsSync(r))return{id:`\0css-module:${r}`}}return null},load:async e=>{if(!e.startsWith(`\0css-module:`))return null;let t=e.slice(12);try{let{transform:e}=await import(`lightningcss`),n=C.readFileSync(t),r=e({filename:T.relative(this.projectRoot,t),code:n,cssModules:{pattern:At}});a&&a.push(new TextDecoder().decode(r.code));let i={};if(r.exports)for(let[e,t]of Object.entries(r.exports))i[e]=t.name;return{code:`export default ${JSON.stringify(i)}`,moduleType:`js`}}catch(t){throw Error(`[rari] Failed to process CSS module ${e}: ${t instanceof Error?t.message:String(t)}`)}}},{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 C.promises.readFile(e,`utf-8`),n=this.transformClientImports(t,e),r=this.isPageComponent(e),i=r?this.transformComponentImportsToGlobal(n):n,a=T.extname(e),o;o=a===`.tsx`?`tsx`:a===`.ts`?`ts`:a===`.jsx`?`jsx`:`js`;let s=`\0virtual:${e}`,c=await A({input:s,platform:`node`,write:!1,external:[kt,`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(E.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=T.join(this.options.outDir,this.options.rscDir);await C.promises.mkdir(e,{recursive:!0});let t={components:{},buildTime:new Date().toISOString()};for(let[e,n]of this.serverComponents){if(this.isPageComponent(e))continue;let r=T.relative(this.projectRoot,e),i=this.getComponentId(e),a=T.join(this.options.rscDir,`${i}.js`),o=T.join(this.options.outDir,a),s=T.dirname(o);await C.promises.mkdir(s,{recursive:!0});let c=await this.buildSingleComponent(e,o),l=await this.writeComponentCssAsset(i,c.css),u=O(T.resolve(this.projectRoot,o)).href;t.components[i]={id:i,filePath:e,relativePath:r,bundlePath:a,moduleSpecifier:u,dependencies:n.dependencies,hasNodeImports:n.hasNodeImports,css:l}}for(let[e,n]of this.serverComponents){if(!this.isPageComponent(e))continue;let r=T.relative(this.projectRoot,e),i=this.getComponentId(e),a=T.join(this.options.rscDir,`${i}.js`),o=T.join(this.options.outDir,a),s=T.dirname(o);await C.promises.mkdir(s,{recursive:!0});let c=await this.buildSingleComponent(e,o),l=await this.writeComponentCssAsset(i,c.css),u=O(T.resolve(this.projectRoot,o)).href;t.components[i]={id:i,filePath:e,relativePath:r,bundlePath:a,moduleSpecifier:u,dependencies:n.dependencies,hasNodeImports:n.hasNodeImports,css:l}}for(let[e,n]of this.serverActions){let r=T.relative(this.projectRoot,e),i=this.getComponentId(e),a=T.join(this.options.rscDir,`${i}.js`),o=T.join(this.options.outDir,a),s=T.dirname(o);await C.promises.mkdir(s,{recursive:!0});let c=await this.buildSingleComponent(e,o),l=await this.writeComponentCssAsset(i,c.css),u=O(T.resolve(this.projectRoot,o)).href;t.components[i]={id:i,filePath:e,relativePath:r,bundlePath:a,moduleSpecifier:u,dependencies:n.dependencies,hasNodeImports:n.hasNodeImports,css:l}}let n=T.join(this.options.outDir,this.options.manifestPath);await C.promises.writeFile(n,JSON.stringify(t,null,2),`utf-8`),await this.writeRouteCssEntries(t);let r={};this.options.csp&&(r.csp=this.options.csp),this.options.cacheControl&&(r.cacheControl=this.options.cacheControl);let i=T.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(r).length===0)try{await C.promises.unlink(i)}catch(e){e.code!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await C.promises.writeFile(i,JSON.stringify(r,null,2),`utf-8`);return t}async buildSingleComponent(e,t){let n=await C.promises.readFile(e,`utf-8`),r=this.transformClientImports(n,e),i=this.isPageComponent(e),a=i?this.transformComponentImportsToGlobal(r):r,o=T.extname(e),s;s=o===`.tsx`?`tsx`:o===`.ts`?`ts`:o===`.jsx`?`jsx`:`js`;let c=`\0virtual:${e}`,l=[],u=await A({input:c,platform:`node`,write:!1,external:[kt,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${s}`]:s},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(E.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(c,a,s,e,i,l)});if(!u.output||u.output.length===0)throw Error(`No output generated from Rolldown`);let d=u.output.find(e=>e.type===`chunk`&&e.isEntry);if(!d||d.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let f=d.code;f=`// Built: ${new Date().toISOString()}\n${f}`,await C.promises.writeFile(t,f,`utf-8`);let p=await C.promises.open(t,`r+`);return await p.sync(),await p.close(),{code:f,css:l}}transformClientImports(e,t){let n=e,r,i=[],a=!1,o=[`rari/image`];for(Ct.lastIndex=0;r=Ct.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=T.relative(this.projectRoot,e).replace(X,`/`))}if(l){a=!0;let t=``;n?t=`const ${n} = registerClientReference(
64
+ `,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=u.get(t)?.actionId??c.getComponentId(t),r=w.join(c.options.outDir,c.options.rscDir,`${n}.js`),i=D(w.resolve(c.projectRoot,r)).href;return{code:u.get(t)?.hasDefaultExport??!1?`export * from ${JSON.stringify(i)};\nexport { default } from ${JSON.stringify(i)};`:`export * from ${JSON.stringify(i)};`,moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,t)=>{if(!i)return null;if(e.startsWith(`file://`)){let t=e.replace(b,``);return S.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null;n=ce(e,c.options.alias||{},c.projectRoot);let r=t?.startsWith(`\0`)?o:t?w.dirname(t):o;if(!n&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=w.resolve(r,e)),!n||r.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(S.existsSync(t)&&S.statSync(t).isFile()){if(c.isClientComponent(t))return null;let e=w.join(c.projectRoot,`src`);if(!t.startsWith(e))return null;let n=c.getComponentId(t),r=w.join(c.options.outDir,c.options.rscDir,`${n}.js`);if(S.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:S.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=w.join(r,t),a=w.isAbsolute(i)?i:w.resolve(c.projectRoot,i);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=a+e;if(S.existsSync(t)&&S.statSync(t).isFile())return t}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let t=w.join(a,`index${e}`);if(S.existsSync(t))return t}return a}return null}},{name:`resolve-rari-proxy`,resolveId:e=>{if(s&&e===`rari`){let e=w.join(Ut,`proxy/RariResponse.mjs`);if(S.existsSync(e))return e;let t=w.join(Wt,`src/proxy/RariResponse.ts`);if(S.existsSync(t))return t}return null}},{name:`css-modules`,resolveId:(e,t)=>{if(e.endsWith(`.module.css`)){let n=!t?.startsWith(`\0`)&&t?w.dirname(t):o,r=w.resolve(n,e);if(S.existsSync(r))return{id:`\0css-module:${r}`}}return null},load:async e=>{if(!e.startsWith(`\0css-module:`))return null;let t=e.slice(12);try{let{transform:e}=await import(`lightningcss`),n=S.readFileSync(t),r=e({filename:w.relative(this.projectRoot,t),code:n,cssModules:{pattern:Ht}});a&&a.push(new TextDecoder().decode(r.code));let i={};if(r.exports)for(let[e,t]of Object.entries(r.exports))i[e]=t.name;return{code:`export default ${JSON.stringify(i)}`,moduleType:`js`}}catch(t){throw Error(`[rari] Failed to process CSS module ${e}: ${t instanceof Error?t.message:String(t)}`)}}},{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 S.promises.readFile(e,`utf-8`),n=this.transformClientImports(t,e),r=this.isPageComponent(e),i=r?this.transformComponentImportsToGlobal(n):n,a=w.extname(e),o;o=a===`.tsx`?`tsx`:a===`.ts`?`ts`:a===`.jsx`?`jsx`:`js`;let s=`\0virtual:${e}`,c=await k({input:s,platform:`node`,write:!1,external:[Vt,`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(T.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=w.join(this.options.outDir,this.options.rscDir);await S.promises.mkdir(e,{recursive:!0});let t={components:{},buildTime:new Date().toISOString()};for(let[e,n]of this.serverComponents){if(this.isPageComponent(e))continue;let r=w.relative(this.projectRoot,e),i=this.getComponentId(e),a=w.join(this.options.rscDir,`${i}.js`),o=w.join(this.options.outDir,a),s=w.dirname(o);await S.promises.mkdir(s,{recursive:!0});let c=await this.buildSingleComponent(e,o),l=await this.writeComponentCssAsset(i,c.css),u=D(w.resolve(this.projectRoot,o)).href;t.components[i]={id:i,filePath:e,relativePath:r,bundlePath:a,moduleSpecifier:u,dependencies:n.dependencies,hasNodeImports:n.hasNodeImports,css:l}}for(let[e,n]of this.serverComponents){if(!this.isPageComponent(e))continue;let r=w.relative(this.projectRoot,e),i=this.getComponentId(e),a=w.join(this.options.rscDir,`${i}.js`),o=w.join(this.options.outDir,a),s=w.dirname(o);await S.promises.mkdir(s,{recursive:!0});let c=await this.buildSingleComponent(e,o),l=await this.writeComponentCssAsset(i,c.css),u=D(w.resolve(this.projectRoot,o)).href;t.components[i]={id:i,filePath:e,relativePath:r,bundlePath:a,moduleSpecifier:u,dependencies:n.dependencies,hasNodeImports:n.hasNodeImports,css:l}}for(let[e,n]of this.serverActions){let r=w.relative(this.projectRoot,e),i=this.getComponentId(e),a=w.join(this.options.rscDir,`${i}.js`),o=w.join(this.options.outDir,a),s=w.dirname(o);await S.promises.mkdir(s,{recursive:!0});let c=await this.buildSingleComponent(e,o),l=await this.writeComponentCssAsset(i,c.css),u=D(w.resolve(this.projectRoot,o)).href;t.components[i]={id:i,filePath:e,relativePath:r,bundlePath:a,moduleSpecifier:u,dependencies:n.dependencies,hasNodeImports:n.hasNodeImports,css:l}}let n=w.join(this.options.outDir,this.options.manifestPath);await S.promises.writeFile(n,JSON.stringify(t,null,2),`utf-8`),await this.writeRouteCssEntries(t);let r={};this.options.csp&&(r.csp=this.options.csp),this.options.cacheControl&&(r.cacheControl=this.options.cacheControl);let i=w.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(r).length===0)try{await S.promises.unlink(i)}catch(e){e.code!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await S.promises.writeFile(i,JSON.stringify(r,null,2),`utf-8`);return t}async buildSingleComponent(e,t){let n=await S.promises.readFile(e,`utf-8`),r=this.transformClientImports(n,e),i=this.isPageComponent(e),a=i?this.transformComponentImportsToGlobal(r):r,o=w.extname(e),s;s=o===`.tsx`?`tsx`:o===`.ts`?`ts`:o===`.jsx`?`jsx`:`js`;let c=`\0virtual:${e}`,l=[],u=await k({input:c,platform:`node`,write:!1,external:[Vt,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${s}`]:s},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(T.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(c,a,s,e,i,l)});if(!u.output||u.output.length===0)throw Error(`No output generated from Rolldown`);let d=u.output.find(e=>e.type===`chunk`&&e.isEntry);if(!d||d.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let f=d.code;f=`// Built: ${new Date().toISOString()}\n${f}`,await S.promises.writeFile(t,f,`utf-8`);let p=await S.promises.open(t,`r+`);return await p.sync(),await p.close(),{code:f,css:l}}transformClientImports(e,t){let n=e,r,i=[],a=!1,o=[`rari/image`];for(Ft.lastIndex=0;r=Ft.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=w.relative(this.projectRoot,e).replace(J,`/`))}if(l){a=!0;let t=``;n?t=`const ${n} = registerClientReference(
65
65
  null,
66
66
  ${JSON.stringify(u)},
67
67
  "default"
@@ -102,12 +102,12 @@ function registerClientReference(clientReference, id, exportName) {
102
102
  return clientProxy;
103
103
  }
104
104
 
105
- `+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=T.join(i,r);break}T.isAbsolute(n)||(n=T.resolve(T.dirname(t),n));let i=[`.tsx`,`.jsx`,`.ts`,`.js`];return q(n,i)||Ve(n,i)||`${n}.tsx`}getProjectRelativePath(e){return ke(e,this.projectRoot)}getReadableComponentId(e){return Ae(e)}getComponentId(e){return I(e,this.projectRoot)}async rebuildComponent(e){let t=this.getComponentId(e),n=await C.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=T.join(this.options.rscDir,`${t}.js`),o=T.join(this.options.outDir,a),s=this.buildCache.get(e),c=(await C.promises.stat(e)).mtimeMs;if(s&&s.timestamp>=c&&JSON.stringify(s.dependencies)===JSON.stringify(r))return await C.promises.writeFile(o,s.code,`utf-8`),await this.updateManifestForComponent(t,e,a,s.css),{componentId:t,bundlePath:T.join(this.options.outDir,a),success:!0};let l=T.dirname(o);await C.promises.mkdir(l,{recursive:!0});let u=await this.buildSingleComponent(e,o),d=await this.writeComponentCssAsset(t,u.css);return this.buildCache.set(e,{code:u.code,css:d,timestamp:Date.now(),dependencies:r}),await this.updateManifestForComponent(t,e,a,d),{componentId:t,bundlePath:T.join(this.options.outDir,a),success:!0}}manifestCache=null;async updateManifestForComponent(e,t,n,r=[]){let i=T.join(this.options.outDir,this.options.manifestPath),a;if(this.manifestCache)a=this.manifestCache;else if(C.existsSync(i)){let e=await C.promises.readFile(i,`utf-8`);a=JSON.parse(e),this.manifestCache=a}else a={components:{},buildTime:new Date().toISOString()},this.manifestCache=a;let o=this.serverComponents.get(t)||this.serverActions.get(t),s=T.join(this.options.outDir,n),c=O(T.resolve(this.projectRoot,s)).href;if(o)a.components[e]={id:e,filePath:t,relativePath:T.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:c,dependencies:o.dependencies,hasNodeImports:o.hasNodeImports,css:r};else{let i=await C.promises.readFile(t,`utf-8`);a.components[e]={id:e,filePath:t,relativePath:T.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:c,dependencies:this.extractDependencies(i),hasNodeImports:this.hasNodeImports(i),css:r}}a.buildTime=new Date().toISOString(),await C.promises.writeFile(i,JSON.stringify(a,null,2),`utf-8`),await this.writeRouteCssEntries(a),this.manifestCache=a}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=C.readdirSync(e,{withFileTypes:!0});for(let n of r){let r=T.join(e,n.name);if(n.isDirectory())Q(r,t,!1);else if(n.isFile()&&_.test(n.name)){if(Ot.test(n.name)||n.name.endsWith(`.d.ts`))continue;try{let e=C.readFileSync(r,`utf-8`);if(U(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 jt(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=E.env.NODE_ENV===`production`,r=[T.join(n,`dist`,`cache`,`og`),T.join(n,`dist`,`cache`,`images`)];e&&r.push(`/tmp/rari-og-cache`,`/tmp/rari-image-cache`);for(let e of r)try{C.existsSync(e)&&C.rmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[rari] Failed to clear cache ${e}:`,t)}let i=T.join(n,`src`);C.existsSync(i)&&Q(i,t)},async closeBundle(){if(t){await t.buildServerComponents();try{let{generateRobotsFile:e}=await import(`./robots-generator-l2O5neuR.mjs`);await e({appDir:T.join(n,`src`,`app`),outDir:T.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-BbD6Q3sO.mjs`);await e({appDir:T.join(n,`src`,`app`),outDir:T.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=T.relative(n,e).replace(Tt,`/`);if(!(!i.startsWith(`src/`)||!_.test(i)))try{if(W(await C.promises.readFile(e,`utf-8`)))return;await t.buildServerComponents()}catch(e){console.error(`[rari] Build: Error rebuilding ${i}:`,e)}}}}const Mt=/import\s+type\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Nt=/import\s+type\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Pt=/import\s+type\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Ft=/import\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,It=/import\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Lt=/import\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Rt=/import\s+["']\.\.?\/([^"']+)["'];?/g,zt=/import\s*(?:\(\s*)?["']([^"']+)["']\)?/g,Bt=/export\s*\{([^}]+)\}/g,Vt=/\s+as\s+/,Ht=/export\s+default\s+(?:function|class)\s+\w+/,Ut=/export\s+default\s+(?:async\s+)?function\s+(\w+)/,Wt=/export\s+default\s+([^;]+)/,Gt=/export\s+(?:async\s+)?(?:const|let|var|function|class)\s+(\w+)/g,Kt=/^['"]use client['"];?\s*$/gm,qt=/import\s+["']([^"']+)["']/g,Jt=/^\s*import\s+(?:(\w+)(?:\s*,\s*\{\s*(?:(\w+(?:\s*,\s*\w+)*)\s*)?\})?|\{\s*(\w+(?:\s*,\s*\w+)*)\s*\})\s+from\s+['"]([./@][^'"]+)['"].*$/,Yt=/import\s+\{[^}]*\}\s+from\s+['"]react['"]/,Xt=/import\s+[^,\s]+\s*,\s*\{[^}]*\}\s+from\s+['"]react['"]/,Zt=/import React(,\s*\{([^}]*)\})?\s+from\s+['"]react['"];?/,Qt=/import\s+["']([^"']+)["']/g,$t=/from(\s*)(['"])(?:\.\/vendor\/react-flight-client\/index|rari\/runtime\/vendor\/react-flight-client\/index)\.mjs\2/g,en=/\bJSX\b/,tn=/\{([^}]*)\}/,nn=/^['"]use client['"];?\s*\n/,rn={remotePatterns:[],localPatterns:[],deviceSizes:g,imageSizes:h,formats:p,qualityAllowlist:m,minimumCacheTTL:60,maxCacheSize:f};async function $(e){let t=import.meta.url,n=D(t),r=T.dirname(n),i=[T.join(r,`runtime`,e),T.join(r,`../runtime`,e)];for(let e of i)try{let t=await C.promises.readFile(e,`utf-8`);return e.endsWith(`.ts`)&&(t=t.replace(Mt,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Nt,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Pt,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Ft,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(It,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(Lt,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(Rt,(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 an(){return $(`rsc-client-runtime.mjs`)}async function on(e,t){return(await $(`entry-client.mjs`)).replace(`/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */`,e).replace(`/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */`,t)}async function sn(){return $(`react-server-dom-shim.mjs`)}async function cn(e,t){let n=await st(T.join(e,`src`)),r={...rn,...t.images,preoptimizeManifest:n.images},i=T.join(e,`dist`),a=T.join(i,`server`);C.existsSync(a)||C.mkdirSync(a,{recursive:!0});let o=T.join(a,`image.json`);C.writeFileSync(o,JSON.stringify(r,null,2))}function ln(e,t=[]){let n=new Set;function r(e){if(!C.existsSync(e))return;let t=C.readdirSync(e,{withFileTypes:!0});for(let i of t){let t=T.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`)continue;r(t)}else if(i.isFile()&&_.test(i.name))try{W(C.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)C.existsSync(e)&&r(e);return n}function un(e){return e}function dn(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(!_.test(n)||!n.includes(`/src/`))return r.set(e,t),t;try{let n=C.readFileSync(e,`utf-8`);t.hasUseServer=U(n),t.hasUseClient=W(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||E.cwd(),r=T.join(n,`index.html`);if(C.existsSync(r))try{let e=C.readFileSync(r,`utf-8`);for(let r of e.matchAll(zt)){let e=r[1];if(e.startsWith(`/src/`)&&T.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=C.realpathSync(t)}catch{return!1}try{if(!C.existsSync(i))return!1;let e=C.readFileSync(i,`utf-8`),t=W(e);return U(e)?!1:!t}catch{return!1}}function l(e){try{let t=[],n=e.matchAll(Bt);for(let e of n){let n=e[1].split(`,`);for(let e of n){let n=e.trim().split(Vt).at(-1)?.trim();n&&t.push(n)}}(Ht.test(e)||K(e))&&t.push(`default`);let r=e.matchAll(Gt);for(let e of r)e[1]&&t.push(e[1]);return[...new Set(t)]}catch{return[]}}function u(e,t){if(!U(e))return e;let n=l(e);if(n.length===0)return e;let r=e;r+=`
105
+ `+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=w.join(i,r);break}w.isAbsolute(n)||(n=w.resolve(w.dirname(t),n));let i=[`.tsx`,`.jsx`,`.ts`,`.js`];return $e(n,i)||et(n,i)||`${n}.tsx`}getProjectRelativePath(e){return Ve(e,this.projectRoot)}getReadableComponentId(e){return He(e)}getComponentId(e){return P(e,this.projectRoot)}async rebuildComponent(e){let t=this.getComponentId(e),n=await S.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=w.join(this.options.rscDir,`${t}.js`),o=w.join(this.options.outDir,a),s=this.buildCache.get(e),c=(await S.promises.stat(e)).mtimeMs;if(s&&s.timestamp>=c&&JSON.stringify(s.dependencies)===JSON.stringify(r))return await S.promises.writeFile(o,s.code,`utf-8`),await this.updateManifestForComponent(t,e,a,s.css),{componentId:t,bundlePath:w.join(this.options.outDir,a),success:!0};let l=w.dirname(o);await S.promises.mkdir(l,{recursive:!0});let u=await this.buildSingleComponent(e,o),d=await this.writeComponentCssAsset(t,u.css);return this.buildCache.set(e,{code:u.code,css:d,timestamp:Date.now(),dependencies:r}),await this.updateManifestForComponent(t,e,a,d),{componentId:t,bundlePath:w.join(this.options.outDir,a),success:!0}}manifestCache=null;async updateManifestForComponent(e,t,n,r=[]){let i=w.join(this.options.outDir,this.options.manifestPath),a;if(this.manifestCache)a=this.manifestCache;else if(S.existsSync(i)){let e=await S.promises.readFile(i,`utf-8`);a=JSON.parse(e),this.manifestCache=a}else a={components:{},buildTime:new Date().toISOString()},this.manifestCache=a;let o=this.serverComponents.get(t)||this.serverActions.get(t),s=w.join(this.options.outDir,n),c=D(w.resolve(this.projectRoot,s)).href;if(o)a.components[e]={id:e,filePath:t,relativePath:w.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:c,dependencies:o.dependencies,hasNodeImports:o.hasNodeImports,css:r};else{let i=await S.promises.readFile(t,`utf-8`);a.components[e]={id:e,filePath:t,relativePath:w.relative(this.projectRoot,t),bundlePath:n,moduleSpecifier:c,dependencies:this.extractDependencies(i),hasNodeImports:this.hasNodeImports(i),css:r}}a.buildTime=new Date().toISOString(),await S.promises.writeFile(i,JSON.stringify(a,null,2),`utf-8`),await this.writeRouteCssEntries(a),this.manifestCache=a}clearCache(){this.buildCache.clear(),this.manifestCache=null}invalidateBuildCacheFor(e){this.buildCache.delete(e)}async getTransformedComponentCode(e){return await this.buildComponentCodeOnly(e)}};function Kt(e){return W(e)||v.test(e)||ee.test(e)||re.test(e)}function X(e,t,n=!0){n&&t.buildImportGraph(e);let r=S.readdirSync(e,{withFileTypes:!0});for(let n of r){let r=w.join(e,n.name);if(n.isDirectory())X(r,t,!1);else if(n.isFile()&&y.test(n.name)){if(Bt.test(n.name)||n.name.endsWith(`.d.ts`))continue;try{let e=S.readFileSync(r,`utf-8`);if(V(e)){t.addServerComponent(r,e);continue}if(t.isOnlyImportedByClientComponents(r))continue;if(t.isServerComponent(r,e)){if(!Kt(e))continue;t.addServerComponent(r,e)}}catch(e){console.warn(`[server-build] Error checking ${r}:`,e instanceof Error?e.message:e)}}}}function qt(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 Y(n,{...e,alias:o})},buildStart(){if(!t)return;let e=T.env.NODE_ENV===`production`,r=[w.join(n,`dist`,`cache`,`og`),w.join(n,`dist`,`cache`,`images`)];e&&r.push(`/tmp/rari-og-cache`,`/tmp/rari-image-cache`);for(let e of r)try{S.existsSync(e)&&S.rmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[rari] Failed to clear cache ${e}:`,t)}let i=w.join(n,`src`);S.existsSync(i)&&X(i,t)},async closeBundle(){if(t){await t.buildServerComponents();try{let{generateRobotsFile:e}=await import(`./robots-generator-l2O5neuR.mjs`);await e({appDir:w.join(n,`src`,`app`),outDir:w.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-BGu4N9qc.mjs`);await e({appDir:w.join(n,`src`,`app`),outDir:w.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=w.relative(n,e).replace(Lt,`/`);if(!(!i.startsWith(`src/`)||!y.test(i)))try{if(H(await S.promises.readFile(e,`utf-8`)))return;await t.buildServerComponents()}catch(e){console.error(`[rari] Build: Error rebuilding ${i}:`,e)}}}}const Jt=/import\s+type\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Yt=/import\s+type\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Xt=/import\s+type\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Zt=/import\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Qt=/import\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,$t=/import\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,en=/import\s+["']\.\.?\/([^"']+)["'];?/g,tn=/import\s*(?:\(\s*)?["']([^"']+)["']\)?/g,nn=/export\s*\{([^}]+)\}/g,rn=/\s+as\s+/,an=/export\s+default\s+(?:function|class)\s+\w+/,on=/export\s+default\s+(?:async\s+)?function\s+(\w+)/,sn=/export\s+default\s+([^;]+)/,cn=/export\s+(?:async\s+)?(?:const|let|var|function|class)\s+(\w+)/g,ln=/^['"]use client['"];?\s*$/gm,un=/import\s+["']([^"']+)["']/g,dn=/^\s*import\s+(?:(\w+)(?:\s*,\s*\{\s*(?:(\w+(?:\s*,\s*\w+)*)\s*)?\})?|\{\s*(\w+(?:\s*,\s*\w+)*)\s*\})\s+from\s+['"]([./@][^'"]+)['"].*$/,fn=/import\s+\{[^}]*\}\s+from\s+['"]react['"]/,pn=/import\s+[^,\s]+\s*,\s*\{[^}]*\}\s+from\s+['"]react['"]/,mn=/import React(,\s*\{([^}]*)\})?\s+from\s+['"]react['"];?/,hn=/import\s+["']([^"']+)["']/g,gn=/from(\s*)(['"])(?:\.\/vendor\/react-flight-client\/index|rari\/runtime\/vendor\/react-flight-client\/index)\.mjs\2/g,_n=/\bJSX\b/,vn=/\{([^}]*)\}/,yn=/^['"]use client['"];?\s*\n/,bn={remotePatterns:[],localPatterns:[],deviceSizes:g,imageSizes:h,formats:p,qualityAllowlist:m,minimumCacheTTL:60,maxCacheSize:f};async function Z(e){let t=import.meta.url,n=E(t),r=w.dirname(n),i=[w.join(r,`runtime`,e),w.join(r,`../runtime`,e)];for(let e of i)try{let t=await S.promises.readFile(e,`utf-8`);return e.endsWith(`.ts`)&&(t=t.replace(Jt,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Yt,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Xt,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(Zt,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(Qt,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace($t,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(en,(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(`, `)}`)}const Q=w.dirname(E(import.meta.url)),xn=w.dirname(Q);function $(e){let t=[w.join(Q,`runtime`,e),w.join(Q,`../runtime`,e)];for(let e of t)if(S.existsSync(e))return e;return null}function Sn(e){return e.startsWith(xn)}async function Cn(){return Z(`rsc-client-runtime.mjs`)}async function wn(e,t){return(await Z(`entry-client.mjs`)).replace(`/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */`,e).replace(`/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */`,t)}async function Tn(){return Z(`react-server-dom-shim.mjs`)}async function En(e,t){let n=await bt(w.join(e,`src`)),r={...bn,...t.images,preoptimizeManifest:n.images},i=w.join(e,`dist`),a=w.join(i,`server`);S.existsSync(a)||S.mkdirSync(a,{recursive:!0});let o=w.join(a,`image.json`);S.writeFileSync(o,JSON.stringify(r,null,2))}function Dn(e,t=[]){let n=new Set;function r(e){if(!S.existsSync(e))return;let t=S.readdirSync(e,{withFileTypes:!0});for(let i of t){let t=w.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`)continue;r(t)}else if(i.isFile()&&y.test(i.name))try{H(S.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)S.existsSync(e)&&r(e);return n}function On(e){return e}function kn(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(x,`/`);if(!y.test(n)||!n.includes(`/src/`))return r.set(e,t),t;try{let n=S.readFileSync(e,`utf-8`);t.hasUseServer=V(n),t.hasUseClient=H(n),r.set(e,t)}catch{r.set(e,t)}return t}function c(t){if(t.includes(`node_modules`)||Sn(t))return!1;let n=e.projectRoot||T.cwd(),r=w.join(n,`index.html`);if(S.existsSync(r))try{let e=S.readFileSync(r,`utf-8`);for(let r of e.matchAll(tn)){let e=r[1];if(e.startsWith(`/src/`)&&w.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=S.realpathSync(t)}catch{return!1}try{if(!S.existsSync(i))return!1;let e=S.readFileSync(i,`utf-8`),t=H(e);return V(e)?!1:!t}catch{return!1}}function l(e){try{let t=[],n=e.matchAll(nn);for(let e of n){let n=e[1].split(`,`);for(let e of n){let n=e.trim().split(rn).at(-1)?.trim();n&&t.push(n)}}(an.test(e)||W(e))&&t.push(`default`);let r=e.matchAll(cn);for(let e of r)e[1]&&t.push(e[1]);return[...new Set(t)]}catch{return[]}}function u(e,t){if(!V(e))return e;let n=l(e);if(n.length===0)return e;let r=e;r+=`
106
106
 
107
107
  import {registerServerReference} from "react-server-dom-rari/server";
108
- `;for(let i of n)if(i==="default"){let n=e.match(Ut);if(n){let e=n[1];r+=`
108
+ `;for(let i of n)if(i==="default"){let n=e.match(on);if(n){let e=n[1];r+=`
109
109
  // Register server reference for default export
110
- `,r+=`registerServerReference(${e}, ${JSON.stringify(t)}, ${JSON.stringify(i)});\n`}else{let n=e.match(Wt);if(n){let e=n[1].trim(),a=`__default_export__`;r=r.replace(Wt,`const ${a} = ${e};\nexport default ${a}`),r+=`
110
+ `,r+=`registerServerReference(${e}, ${JSON.stringify(t)}, ${JSON.stringify(i)});\n`}else{let n=e.match(sn);if(n){let e=n[1].trim(),a=`__default_export__`;r=r.replace(sn,`const ${a} = ${e};\nexport default ${a}`),r+=`
111
111
  // Register server reference for default export
112
112
  `,r+=`if (typeof ${a} === "function") {\n`,r+=` registerServerReference(${a}, ${JSON.stringify(t)}, ${JSON.stringify(i)});\n`,r+=`}
113
113
  `}}}else r+=`\n// Register server reference for ${i}\n`,r+=`if (typeof ${i} === "function") {\n`,r+=` registerServerReference(${i}, ${JSON.stringify(t)}, ${JSON.stringify(i)});\n`,r+=`}
@@ -116,11 +116,11 @@ import {registerServerReference} from "react-server-dom-rari/server";
116
116
  if (import.meta.hot) {
117
117
  import.meta.hot.accept(() => {
118
118
  });
119
- }`,r}function d(t,n){let r=e.projectRoot||E.cwd(),i=U(t),a=c(n);if(i){let e=l(t);if(e.length===0)return``;let i=I(n,r),a=`import { createServerReference } from "rari/runtime/actions";
120
- `;for(let t of e)t==="default"?a+=`export default createServerReference("default", ${JSON.stringify(i)}, "default");\n`:a+=`export const ${t} = createServerReference("${t}", ${JSON.stringify(i)}, "${t}");\n`;return a}if(a){let e=l(t);if(e.length===0)return``;let i=I(n,r),a=`import { createServerComponentWrapper } from "virtual:rsc-integration.ts";
121
- `;for(let t of e)t==="default"?a+=`export default createServerComponentWrapper("${i}", ${JSON.stringify(n)});\n`:a+=`export const ${t} = createServerComponentWrapper("${i}_${t}", ${JSON.stringify(n)});\n`;return a}if(!W(t))return t;let o=l(t);if(o.length===0)return``;let s=`import {registerClientReference} from "react-server-dom-rari/server";
122
- `;for(let e of o){if(e==="default"){let e=`Attempted to call the default export of ${n} from the server but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;s+=`export default `,s+=`registerClientReference(function() {`,s+=`throw new Error(${JSON.stringify(e)});`}else{let t=`Attempted to call ${e}() from the server but ${e} is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;s+=`export const ${e} = `,s+=`registerClientReference(function() {`,s+=`throw new Error(${JSON.stringify(t)});`}s+=`},`,s+=`${JSON.stringify(n)},`,s+=`${JSON.stringify(e)});\n`}return s}function f(e,t){return!W(e)||l(e).length===0?e:e.replace(Kt,``)}function p(e,t){let n=e;for(let[t,r]of Object.entries(o))if(e.startsWith(`${t}/`)){n=e.replace(t,r);break}else if(e===t){n=r;break}let r=T.resolve(T.dirname(t),n),i=[`.tsx`,`.jsx`,`.ts`,`.js`];return q(r,i)||Ve(r,i)||`${r}.tsx`}function m(e){return(e.split(`/`).pop()||e).replace(x,``)}let h=!1;async function g(){let e=`http://localhost:${E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3)}`;try{let t=(await fetch(`${e}/_rari/health`,{signal:AbortSignal.timeout(1e3)})).ok;return h=t,t}catch{return h=!1,!1}}let v=[{name:`rari`,config(t,{command:n}){if(t.define=t.define||{},n===`serve`||E.env.RARI_SERVER_URL||E.env.RARI_HOST){let e=E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3),n;if(E.env.RARI_SERVER_URL)n=E.env.RARI_SERVER_URL;else if(E.env.RARI_HOST){let t=E.env.RARI_HOST.startsWith(`http`)?E.env.RARI_HOST:`http://${E.env.RARI_HOST}`;n=t.replace(y,``).includes(`:`)?t:`${t}:${e}`}else n=`http://localhost:${e}`;t.define[`import.meta.env.RARI_SERVER_URL`]=JSON.stringify(n)}let r=typeof t.css?.modules==`object`?t.css.modules:{};if(t.css={...t.css,transformer:t.css?.transformer??`lightningcss`,modules:{...r,pattern:At}},n===`build`){let n=e.projectRoot||E.cwd(),r=T.join(n,`index.html`);if(C.existsSync(r))try{let e=C.readFileSync(r,`utf-8`),n=[];for(let t of e.matchAll(qt)){let e=t[1];if(e.startsWith(`/src/`)&&_.test(e)){let t=e.slice(1),r=T.basename(t,T.extname(t));n.push({path:t,name:r})}}if(n.length>0){t.build=t.build||{},t.build.rolldownOptions=t.build.rolldownOptions||{};let e=t.build.rolldownOptions.input||{main:`./index.html`},r;r=typeof e==`string`?{main:e}:Array.isArray(e)?{main:e[0]||`./index.html`}:{...e},n.forEach(({path:e,name:t})=>{r[t]=`./${e}`}),t.build.rolldownOptions.input=r}}catch(e){console.warn(`[rari] Error parsing index.html for build inputs:`,e)}}t.resolve=t.resolve||{};let i=Array.isArray(t.resolve.dedupe)?t.resolve.dedupe:[],a=[`react`,`react-dom`];t.resolve.dedupe=[...new Set([...i||[],...a])];let o=[];Array.isArray(t.resolve.alias)?o=t.resolve.alias:t.resolve.alias&&typeof t.resolve.alias==`object`&&(o=Object.entries(t.resolve.alias).map(([e,t])=>({find:e,replacement:t})));let c=new Set(o.map(e=>String(e.find)));try{let e=D(import.meta.resolve(`react`)),n=D(import.meta.resolve(`react-dom/client`)),r=D(import.meta.resolve(`react/jsx-runtime`)),i=[];c.has(`react/jsx-runtime`)||i.push({find:`react/jsx-runtime`,replacement:r});try{let e=D(import.meta.resolve(`react/jsx-dev-runtime`));c.has(`react/jsx-dev-runtime`)||i.push({find:`react/jsx-dev-runtime`,replacement:e})}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving react/jsx-dev-runtime:`,e)}c.has(`react`)||i.push({find:`react`,replacement:e}),c.has(`react-dom/client`)||i.push({find:`react-dom/client`,replacement:n}),i.length>0&&(t.resolve.alias=[...o,...i])}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error configuring React aliases:`,e)}t.environments=t.environments||{},t.environments.rsc={resolve:{conditions:[`react-server`,`node`,`import`]},...t.environments.rsc},t.environments.ssr={resolve:{conditions:[`node`,`import`]},...t.environments.ssr},t.environments.client={resolve:{conditions:[`browser`,`import`]},...t.environments.client},t.optimizeDeps=t.optimizeDeps||{},t.optimizeDeps.include=t.optimizeDeps.include||[];for(let e of[`react`,`react-dom`,`react-dom/client`,`react-dom/server`,`react/jsx-runtime`,`react/jsx-dev-runtime`])t.optimizeDeps.include.includes(e)||t.optimizeDeps.include.push(e);if(t.optimizeDeps.exclude=t.optimizeDeps.exclude||[],t.optimizeDeps.exclude.includes(`rari`)||t.optimizeDeps.exclude.push(`rari`),n===`build`)for(let e of[`rsc`,`ssr`,`client`]){let n=t.environments[e];n&&n.build&&(n.build.rolldownOptions=n.build.rolldownOptions||{})}t.server=t.server||{},t.server.proxy=t.server.proxy||{};let l=E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3);if(t.server.proxy[`/api`]={target:`http://localhost:${l}`,changeOrigin:!0,secure:!1,ws:!0},t.server.proxy[`/_rari`]={target:`http://localhost:${l}`,changeOrigin:!0,secure:!1,ws:!0},n===`build`){t.build=t.build||{},t.build.rolldownOptions=t.build.rolldownOptions||{},t.build.rolldownOptions.input||(t.build.rolldownOptions.input={main:`./index.html`}),t.build.rolldownOptions.output=t.build.rolldownOptions.output||{};let e=Array.isArray(t.build.rolldownOptions.output)?t.build.rolldownOptions.output:[t.build.rolldownOptions.output];for(let t of e){if(t.codeSplitting!==!1&&typeof t.codeSplitting!=`object`&&(t.codeSplitting={}),typeof t.codeSplitting==`object`){t.codeSplitting.groups=t.codeSplitting.groups||[];let e=t.codeSplitting.groups;t.codeSplitting.groups.push({name(t){if(t.includes(`node_modules`)){for(let n of e)if(n.test){let e=!1;if(typeof n.test==`function`?e=!!n.test(t):n.test instanceof RegExp?e=n.test.test(t):typeof n.test==`string`&&(e=t.includes(n.test)),e)return null}return t.includes(`node_modules/react-dom`)?`react-dom`:t.includes(`node_modules/react`)?`react`:`vendor`}return null}})}t.chunkFileNames||=e=>e.moduleIds?.some(e=>s(e).hasUseServer)?`client/actions/[name]-[hash].js`:e.moduleIds?.some(e=>s(e).hasUseClient)?`client/components/[name]-[hash].js`:`assets/[name]-[hash].js`}}return t.environments&&t.environments.client&&(t.environments.client.build||(t.environments.client.build={}),t.environments.client.build.rolldownOptions||(t.environments.client.build.rolldownOptions={}),t.environments.client.build.rolldownOptions.input||(t.environments.client.build.rolldownOptions.input={})),t},configResolved(e){let t=new Set([`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]);if(e.resolve?.alias){let n=e.resolve.alias;Array.isArray(n)?n.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&!t.has(e.find)&&(o[e.find]=e.replacement)}):typeof n==`object`&&Object.entries(n).forEach(([e,n])=>{typeof n==`string`&&!t.has(e)&&(o[e]=n)})}},transform(e,r){if(!_.test(r))return null;let i=this.environment;if(W(e)){t.set(r,`client`),n.add(r);let i=e.split(`
123
- `);for(let e of i){let i=e.match(Jt);if(!i)continue;let a=i[4];if(!a)continue;let o=p(a,r);C.existsSync(o)&&(t.set(o,`client`),n.add(o))}return f(e,r)}if(t.get(r)===`client`||n.has(r))return f(e,r);if(c(r)){if(t.set(r,`server`),i&&(i.name===`rsc`||i.name===`ssr`))return u(e,r);{let t=d(e,r);return t=`// HMR acceptance for server component
119
+ }`,r}function d(t,n){let r=e.projectRoot||T.cwd(),i=V(t),a=c(n);if(i){let e=l(t);if(e.length===0)return``;let i=P(n,r),a=`import { createServerReference } from "rari/runtime/actions";
120
+ `;for(let t of e)t==="default"?a+=`export default createServerReference("default", ${JSON.stringify(i)}, "default");\n`:a+=`export const ${t} = createServerReference("${t}", ${JSON.stringify(i)}, "${t}");\n`;return a}if(a){let e=l(t);if(e.length===0)return``;let i=P(n,r),a=`import { createServerComponentWrapper } from "virtual:rsc-integration.ts";
121
+ `;for(let t of e)t==="default"?a+=`export default createServerComponentWrapper("${i}", ${JSON.stringify(n)});\n`:a+=`export const ${t} = createServerComponentWrapper("${i}_${t}", ${JSON.stringify(n)});\n`;return a}if(!H(t))return t;let o=l(t);if(o.length===0)return``;let s=`import {registerClientReference} from "react-server-dom-rari/server";
122
+ `;for(let e of o){if(e==="default"){let e=`Attempted to call the default export of ${n} from the server but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;s+=`export default `,s+=`registerClientReference(function() {`,s+=`throw new Error(${JSON.stringify(e)});`}else{let t=`Attempted to call ${e}() from the server but ${e} is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;s+=`export const ${e} = `,s+=`registerClientReference(function() {`,s+=`throw new Error(${JSON.stringify(t)});`}s+=`},`,s+=`${JSON.stringify(n)},`,s+=`${JSON.stringify(e)});\n`}return s}function f(e,t){return!H(e)||l(e).length===0?e:e.replace(ln,``)}function p(e,t){let n=e;for(let[t,r]of Object.entries(o))if(e.startsWith(`${t}/`)){n=e.replace(t,r);break}else if(e===t){n=r;break}let r=w.resolve(w.dirname(t),n),i=[`.tsx`,`.jsx`,`.ts`,`.js`];return $e(r,i)||et(r,i)||`${r}.tsx`}function m(e){return(e.split(`/`).pop()||e).replace(ie,``)}let h=!1;async function g(){let e=`http://localhost:${T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3)}`;try{let t=(await fetch(`${e}/_rari/health`,{signal:AbortSignal.timeout(1e3)})).ok;return h=t,t}catch{return h=!1,!1}}let _=[{name:`rari`,config(t,{command:n}){if(t.define=t.define||{},n===`serve`||T.env.RARI_SERVER_URL||T.env.RARI_HOST){let e=T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3),n;if(T.env.RARI_SERVER_URL)n=T.env.RARI_SERVER_URL;else if(T.env.RARI_HOST){let t=T.env.RARI_HOST.startsWith(`http`)?T.env.RARI_HOST:`http://${T.env.RARI_HOST}`;n=t.replace(te,``).includes(`:`)?t:`${t}:${e}`}else n=`http://localhost:${e}`;t.define[`import.meta.env.RARI_SERVER_URL`]=JSON.stringify(n)}let r=typeof t.css?.modules==`object`?t.css.modules:{};if(t.css={...t.css,transformer:t.css?.transformer??`lightningcss`,modules:{...r,pattern:Ht}},n===`build`){let n=e.projectRoot||T.cwd(),r=w.join(n,`index.html`);if(S.existsSync(r))try{let e=S.readFileSync(r,`utf-8`),n=[];for(let t of e.matchAll(un)){let e=t[1];if(e.startsWith(`/src/`)&&y.test(e)){let t=e.slice(1),r=w.basename(t,w.extname(t));n.push({path:t,name:r})}}if(n.length>0){t.build=t.build||{},t.build.rolldownOptions=t.build.rolldownOptions||{};let e=t.build.rolldownOptions.input||{main:`./index.html`},r;r=typeof e==`string`?{main:e}:Array.isArray(e)?{main:e[0]||`./index.html`}:{...e},n.forEach(({path:e,name:t})=>{r[t]=`./${e}`}),t.build.rolldownOptions.input=r}}catch(e){console.warn(`[rari] Error parsing index.html for build inputs:`,e)}}t.resolve=t.resolve||{};let i=Array.isArray(t.resolve.dedupe)?t.resolve.dedupe:[],a=[`react`,`react-dom`];t.resolve.dedupe=[...new Set([...i||[],...a])];let o=[];Array.isArray(t.resolve.alias)?o=t.resolve.alias:t.resolve.alias&&typeof t.resolve.alias==`object`&&(o=Object.entries(t.resolve.alias).map(([e,t])=>({find:e,replacement:t})));let c=new Set(o.map(e=>String(e.find)));try{let e=E(import.meta.resolve(`react`)),n=E(import.meta.resolve(`react-dom/client`)),r=E(import.meta.resolve(`react/jsx-runtime`)),i=[];c.has(`react/jsx-runtime`)||i.push({find:`react/jsx-runtime`,replacement:r});try{let e=E(import.meta.resolve(`react/jsx-dev-runtime`));c.has(`react/jsx-dev-runtime`)||i.push({find:`react/jsx-dev-runtime`,replacement:e})}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving react/jsx-dev-runtime:`,e)}c.has(`react`)||i.push({find:`react`,replacement:e}),c.has(`react-dom/client`)||i.push({find:`react-dom/client`,replacement:n}),i.length>0&&(t.resolve.alias=[...o,...i])}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error configuring React aliases:`,e)}t.environments=t.environments||{},t.environments.rsc={resolve:{conditions:[`react-server`,`node`,`import`]},...t.environments.rsc},t.environments.ssr={resolve:{conditions:[`node`,`import`]},...t.environments.ssr},t.environments.client={resolve:{conditions:[`browser`,`import`]},...t.environments.client},t.optimizeDeps=t.optimizeDeps||{},t.optimizeDeps.include=t.optimizeDeps.include||[];for(let e of[`react`,`react-dom`,`react-dom/client`,`react-dom/server`,`react/jsx-runtime`,`react/jsx-dev-runtime`])t.optimizeDeps.include.includes(e)||t.optimizeDeps.include.push(e);if(t.optimizeDeps.exclude=t.optimizeDeps.exclude||[],t.optimizeDeps.exclude.includes(`rari`)||t.optimizeDeps.exclude.push(`rari`),n===`build`)for(let e of[`rsc`,`ssr`,`client`]){let n=t.environments[e];n&&n.build&&(n.build.rolldownOptions=n.build.rolldownOptions||{})}t.server=t.server||{},t.server.proxy=t.server.proxy||{};let l=T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3);if(t.server.proxy[`/api`]={target:`http://localhost:${l}`,changeOrigin:!0,secure:!1,ws:!0},t.server.proxy[`/_rari`]={target:`http://localhost:${l}`,changeOrigin:!0,secure:!1,ws:!0},n===`build`){t.build=t.build||{},t.build.rolldownOptions=t.build.rolldownOptions||{},t.build.rolldownOptions.input||(t.build.rolldownOptions.input={main:`./index.html`}),t.build.rolldownOptions.output=t.build.rolldownOptions.output||{};let e=Array.isArray(t.build.rolldownOptions.output)?t.build.rolldownOptions.output:[t.build.rolldownOptions.output];for(let t of e){if(t.codeSplitting!==!1&&typeof t.codeSplitting!=`object`&&(t.codeSplitting={}),typeof t.codeSplitting==`object`){t.codeSplitting.groups=t.codeSplitting.groups||[];let e=t.codeSplitting.groups;t.codeSplitting.groups.push({name(t){if(t.includes(`node_modules`)){for(let n of e)if(n.test){let e=!1;if(typeof n.test==`function`?e=!!n.test(t):n.test instanceof RegExp?e=n.test.test(t):typeof n.test==`string`&&(e=t.includes(n.test)),e)return null}return t.includes(`node_modules/react-dom`)?`react-dom`:t.includes(`node_modules/react`)?`react`:`vendor`}return null}})}t.chunkFileNames||=e=>e.moduleIds?.some(e=>s(e).hasUseServer)?`client/actions/[name]-[hash].js`:e.moduleIds?.some(e=>s(e).hasUseClient)?`client/components/[name]-[hash].js`:`assets/[name]-[hash].js`}}return t.environments&&t.environments.client&&(t.environments.client.build||(t.environments.client.build={}),t.environments.client.build.rolldownOptions||(t.environments.client.build.rolldownOptions={}),t.environments.client.build.rolldownOptions.input||(t.environments.client.build.rolldownOptions.input={})),t},configResolved(e){let t=new Set([`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]);if(e.resolve?.alias){let n=e.resolve.alias;Array.isArray(n)?n.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&!t.has(e.find)&&(o[e.find]=e.replacement)}):typeof n==`object`&&Object.entries(n).forEach(([e,n])=>{typeof n==`string`&&!t.has(e)&&(o[e]=n)})}},transform(e,r){if(!y.test(r))return null;let i=this.environment;if(H(e)){t.set(r,`client`),n.add(r);let i=e.split(`
123
+ `);for(let e of i){let i=e.match(dn);if(!i)continue;let a=i[4];if(!a)continue;let o=p(a,r);S.existsSync(o)&&(t.set(o,`client`),n.add(o))}return f(e,r)}if(t.get(r)===`client`||n.has(r))return f(e,r);if(c(r)){if(t.set(r,`server`),i&&(i.name===`rsc`||i.name===`ssr`))return u(e,r);{let t=d(e,r);return t=`// HMR acceptance for server component
124
124
  if (import.meta.hot) {
125
125
  import.meta.hot.accept();
126
126
  }
@@ -131,19 +131,19 @@ if (typeof globalThis !== 'undefined') {
131
131
  globalThis['~rari'].serverComponents.add(${JSON.stringify(r)});
132
132
  }
133
133
 
134
- ${t}`,t}}if(U(e))return t.set(r,`server`),i&&(i.name===`rsc`||i.name===`ssr`)?u(e,r):d(e,r);let a=t.get(r);if(a===`server`)return i&&(i.name===`rsc`||i.name===`ssr`)?u(e,r):d(e,r);if(a===`client`)return f(e,r);t.set(r,`unknown`);let o=e.split(`
135
- `),s=e,l=!1,h=!1,g=!1,v=[];for(let a of o){let o=a.match(Jt);if(!o)continue;let u=o[1],d=o[4],f=m(d),_=p(d,r),y=W(e)||t.get(r)===`client`||r.includes(`entry-client`),b=t.get(_)===`client`||C.existsSync(_)&&W(C.readFileSync(_,`utf-8`));if(b&&(t.set(_,`client`),n.add(_)),b&&i&&(i.name===`rsc`||i.name===`ssr`)){if(!y){let e=a,t=u||`default`,n=`
134
+ ${t}`,t}}if(V(e))return t.set(r,`server`),i&&(i.name===`rsc`||i.name===`ssr`)?u(e,r):d(e,r);let a=t.get(r);if(a===`server`)return i&&(i.name===`rsc`||i.name===`ssr`)?u(e,r):d(e,r);if(a===`client`)return f(e,r);t.set(r,`unknown`);let o=e.split(`
135
+ `),s=e,l=!1,h=!1,g=!1,_=[];for(let a of o){let o=a.match(dn);if(!o)continue;let u=o[1],d=o[4],f=m(d),v=p(d,r),y=H(e)||t.get(r)===`client`||r.includes(`entry-client`),b=t.get(v)===`client`||S.existsSync(v)&&H(S.readFileSync(v,`utf-8`));if(b&&(t.set(v,`client`),n.add(v)),b&&i&&(i.name===`rsc`||i.name===`ssr`)){if(!y){let e=a,t=u||`default`,n=`
136
136
  import { registerClientReference } from "react-server-dom-rari/server";
137
137
  const ${t} = registerClientReference(
138
138
  function() {
139
139
  throw new Error("Attempted to call ${t} from the server but it's on the client. It can only be rendered as a Component or passed to props of a Client Component.");
140
140
  },
141
- ${JSON.stringify(_)},
141
+ ${JSON.stringify(v)},
142
142
  ${JSON.stringify(u||`default`)}
143
- );`;s=s.replace(e,n),l=!0,h=!0}}else if(!y&&c(_)){l=!0,h=!0,g=!0;let e=a;u&&u!==`_`&&v.push(`const ${u} = createServerComponentWrapper('${f}', '${d}');`),s=s.replace(e,``)}}if(l){let e=s.includes(`import React`)||s.match(Yt)||s.match(Xt),n=s.includes(`createServerComponentWrapper`),i=``;if(h&&!e&&(i+=`import React from 'react';
143
+ );`;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(fn)||s.match(pn),n=s.includes(`createServerComponentWrapper`),i=``;if(h&&!e&&(i+=`import React from 'react';
144
144
  `),g&&!n&&(i+=`import { createServerComponentWrapper } from 'virtual:rsc-integration.ts';
145
- `),v.length>0&&(i+=`${v.join(`
146
- `)}\n`),i&&(s=i+s),!s.includes(`Suspense`)){let e=s.match(Zt);e&&(e[1]&&!e[2].includes(`Suspense`)?s=s.replace(e[0],e[0].replace(tn,`{ Suspense, $1 }`)):e[1]||(s=s.replace(e[0],`import React, { Suspense } from 'react';`)))}let a=E.env.NODE_ENV!==`production`,o=s.includes(`</`)||s.includes(`/>`)||en.test(s);return!W(s)&&o&&a&&(s=`'use client';\n\n${s}`,t.set(r,`client`)),s}return null},async configureServer(n){let r=e.projectRoot||E.cwd(),s=T.join(r,`src`);await cn(r,e);let l=null,u=async()=>{try{let t=new Z(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,cacheControl:e.cacheControl});if(l=t,!a&&l){let e=E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3);a=new We(l,e)}let i=T.join(r,`src`),s=[];if(C.existsSync(i)){let e=t=>{let n=C.readdirSync(t,{withFileTypes:!0});for(let r of n){let n=T.join(t,r.name);if(r.isDirectory())e(n);else if(r.isFile()&&_.test(r.name))try{c(n)&&s.push(n)}catch(e){console.error(`[rari] Error checking ${n}:`,e)}}};e(i),Q(i,t)}s.length>0&&n.ws.send({type:`custom`,event:`rari:server-components-registry`,data:{serverComponents:s}});let u=await t.getTransformedComponentsForDevelopment(),d=`http://localhost:${E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3)}`;for(let e of u)try{if(e.id.startsWith(`app/`)||U(e.code))continue;let t=await fetch(`${d}/_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:${E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3)}`,t=ln(s,Object.values(o));for(let n of t){let t=T.relative(E.cwd(),n),r=T.basename(n).replace(x,``);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=E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3),o=E.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:E.cwd(),env:{...E.env,RUST_LOG:E.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 n=new Z(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,cacheControl:e.cacheControl});n.addServerComponent(t);let i=await n.getTransformedComponentsForDevelopment();if(i.length===0)return;let a=`http://localhost:${E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.env.RSC_PORT||3e3)}`;for(let e of i)try{let t=await fetch(`${a}/_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=E.env.SERVER_PORT?Number(E.env.SERVER_PORT):Number(E.env.PORT||E.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=>{_.test(e)&&t.delete(e),_.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=D(n),i=T.dirname(r),a=null,o=[T.join(i,`runtime`),T.join(i,`../runtime`)];for(let e of o)if(C.existsSync(e)){a=e;break}if(a){let t=T.join(a,e);if(C.existsSync(t))return t;let n=T.join(a,`../dist`,T.basename(e));if(C.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=T.join(i,e);if(C.existsSync(s))return s;let c=T.join(i,`../dist`,T.basename(e));if(C.existsSync(c))return c}if(E.env.NODE_ENV===`production`)try{let t=T.resolve(e);if(C.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(_.test(t)){let e=this.environment;if(e&&e.name===`client`)try{let e=C.readFileSync(t,`utf-8`);if(U(e))return d(e,t)}catch{}}if(t===`virtual:rari-entry-client.ts`){let e=ln(T.join(E.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 W(C.readFileSync(e,`utf-8`))}catch{return!1}}).map(e=>{let t=T.relative(E.cwd(),e).replace(S,`/`),n=t.replace(_,``),r=t.startsWith(`..`)?e.replace(S,`/`):t,i=!1,a=``;try{let t=C.readFileSync(e,`utf-8`),n=K(t),r=t.match(te);!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:T.basename(e,T.extname(e)),s=r.replace(S,`/`),c=s.startsWith(`/`)||ne.test(s)?s:`/${s}`;return` "${r}": {
145
+ `),_.length>0&&(i+=`${_.join(`
146
+ `)}\n`),i&&(s=i+s),!s.includes(`Suspense`)){let e=s.match(mn);e&&(e[1]&&!e[2].includes(`Suspense`)?s=s.replace(e[0],e[0].replace(vn,`{ Suspense, $1 }`)):e[1]||(s=s.replace(e[0],`import React, { Suspense } from 'react';`)))}let a=T.env.NODE_ENV!==`production`,o=s.includes(`</`)||s.includes(`/>`)||_n.test(s);return!H(s)&&o&&a&&(s=`'use client';\n\n${s}`,t.set(r,`client`)),s}return null},async configureServer(n){let r=e.projectRoot||T.cwd(),s=w.join(r,`src`);await En(r,e);let l=null,u=async()=>{try{let t=new Y(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,cacheControl:e.cacheControl});if(l=t,!a&&l){let e=T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3);a=new rt(l,e)}let i=w.join(r,`src`),s=[];if(S.existsSync(i)){let e=t=>{let n=S.readdirSync(t,{withFileTypes:!0});for(let r of n){let n=w.join(t,r.name);if(r.isDirectory())e(n);else if(r.isFile()&&y.test(r.name))try{c(n)&&s.push(n)}catch(e){console.error(`[rari] Error checking ${n}:`,e)}}};e(i),X(i,t)}s.length>0&&n.ws.send({type:`custom`,event:`rari:server-components-registry`,data:{serverComponents:s}});let u=await t.getTransformedComponentsForDevelopment(),d=`http://localhost:${T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3)}`;for(let e of u)try{if(e.id.startsWith(`app/`)||V(e.code))continue;let t=await fetch(`${d}/_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:${T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3)}`,t=Dn(s,Object.values(o));for(let n of t){let t=w.relative(T.cwd(),n),r=w.basename(n).replace(ie,``);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=T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3),o=T.env.NODE_ENV===`production`?`production`:`development`,s=n.config.server.port||5173,c=[`--mode`,o,`--port`,a.toString(),`--host`,`127.0.0.1`];i=ue(r,c,{stdio:[`ignore`,`pipe`,`pipe`],cwd:T.cwd(),env:{...T.env,RUST_LOG:T.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 n=new Y(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:o,csp:e.csp,cacheControl:e.cacheControl});n.addServerComponent(t);let i=await n.getTransformedComponentsForDevelopment();if(i.length===0)return;let a=`http://localhost:${T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.env.RSC_PORT||3e3)}`;for(let e of i)try{let t=await fetch(`${a}/_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=T.env.SERVER_PORT?Number(T.env.SERVER_PORT):Number(T.env.PORT||T.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(le.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=>{y.test(e)&&t.delete(e),y.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=E(n),i=w.dirname(r),a=null,o=[w.join(i,`runtime`),w.join(i,`../runtime`)];for(let e of o)if(S.existsSync(e)){a=e;break}if(a){let t=w.join(a,e);if(S.existsSync(t))return t;let n=w.join(a,`../dist`,w.basename(e));if(S.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=w.join(i,e);if(S.existsSync(s))return s;let c=w.join(i,`../dist`,w.basename(e));if(S.existsSync(c))return c}if(T.env.NODE_ENV===`production`)try{let t=w.resolve(e);if(S.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(y.test(t)){let e=this.environment;if(e&&e.name===`client`)try{let e=S.readFileSync(t,`utf-8`);if(V(e))return d(e,t)}catch{}}if(t===`virtual:rari-entry-client.ts`){let e=Dn(w.join(T.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 H(S.readFileSync(e,`utf-8`))}catch{return!1}}).map(e=>{let t=w.relative(T.cwd(),e).replace(x,`/`),n=t.replace(y,``),r=t.startsWith(`..`)?e.replace(x,`/`):t,i=!1,a=``;try{let t=S.readFileSync(e,`utf-8`),n=W(t),r=t.match(ne);!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:w.basename(e,w.extname(e)),s=r.replace(x,`/`),c=s.startsWith(`/`)||ae.test(s)?s:`/${s}`;return` "${r}": {
147
147
  id: "${n}",
148
148
  path: "${r}",
149
149
  exportName: "${o}",
@@ -167,7 +167,7 @@ globalThis['~clientComponents']["${e.path}"] = globalThis['~clientComponents']["
167
167
  globalThis['~clientComponents']["${e.path}"].component = ExternalModule${t};
168
168
  globalThis['~clientComponentPaths'] = globalThis['~clientComponentPaths'] || {};
169
169
  globalThis['~clientComponentPaths']["${e.path}"] = "${n}";`)).join(`
170
- `);return await on(a,[`
170
+ `);return await wn(a,[`
171
171
  const lazyComponentRegistry = {
172
172
  ${i}
173
173
  };
@@ -180,9 +180,10 @@ for (const [path, config] of Object.entries(lazyComponentRegistry)) {
180
180
  globalThis['~clientComponentPaths'][path] = config.id;
181
181
  }
182
182
  `,s].filter(Boolean).join(`
183
- `))}if(t===`react-server-dom-rari/server`)return await sn();if(t===`virtual:app-router-provider.tsx`){let e=[T.join(E.cwd(),`packages/rari/dist/runtime/AppRouterProvider.mjs`),T.join(E.cwd(),`node_modules/rari/dist/runtime/AppRouterProvider.mjs`)];for(let t of e)if(C.existsSync(t))return C.readFileSync(t,`utf-8`);return`export function AppRouterProvider({ children }) { return children; }`}if(t===`virtual:default-loading-indicator.tsx`){let e=[T.join(E.cwd(),`packages/rari/dist/runtime/DefaultLoadingIndicator.mjs`),T.join(E.cwd(),`node_modules/rari/dist/runtime/DefaultLoadingIndicator.mjs`)];for(let t of e)if(C.existsSync(t))return C.readFileSync(t,`utf-8`);return`export function DefaultLoadingIndicator() { return null; }`}if(t===`virtual:loading-error-boundary.tsx`){let e=[T.join(E.cwd(),`packages/rari/dist/runtime/LoadingErrorBoundary.mjs`),T.join(E.cwd(),`node_modules/rari/dist/runtime/LoadingErrorBoundary.mjs`)];for(let t of e)if(C.existsSync(t))return C.readFileSync(t,`utf-8`);return`export class LoadingErrorBoundary extends React.Component { render() { return this.props.children; } }`}if(t===`virtual:error-boundary-wrapper.tsx`){let e=[T.join(E.cwd(),`packages/rari/dist/runtime/ErrorBoundaryWrapper.mjs`),T.join(E.cwd(),`node_modules/rari/dist/runtime/ErrorBoundaryWrapper.mjs`),T.join(E.cwd(),`packages/rari/src/runtime/ErrorBoundaryWrapper.tsx`)];for(let t of e)if(C.existsSync(t)){let e=C.readFileSync(t,`utf-8`);if(!e.includes(`import React`)&&!e.includes(`from "react"`)&&!e.includes(`from 'react'`)){let t=e.match(nn);if(t){let n=t[0];return`
184
- ${n}import * as React from 'react';\n${e.slice(n.length)}`}return`
185
- import * as React from 'react';\n${e}`}return e}return`'use client';
183
+ `))}if(t===`react-server-dom-rari/server`)return await Tn();if(t===`virtual:app-router-provider.tsx`){let e=$(`AppRouterProvider.mjs`);return e?S.readFileSync(e,`utf-8`):`export function AppRouterProvider({ children }) { return children; }`}if(t===`virtual:default-loading-indicator.tsx`){let e=$(`DefaultLoadingIndicator.mjs`);return e?S.readFileSync(e,`utf-8`):`export function DefaultLoadingIndicator() { return null; }`}if(t===`virtual:loading-error-boundary.tsx`){let e=$(`LoadingErrorBoundary.mjs`);return e?S.readFileSync(e,`utf-8`):`import * as React from 'react';
184
+ export class LoadingErrorBoundary extends React.Component { render() { return this.props.children; } }`}if(t===`virtual:error-boundary-wrapper.tsx`){let e=$(`ErrorBoundaryWrapper.mjs`);if(e){let t=S.readFileSync(e,`utf-8`);if(!t.includes(`import React`)&&!t.includes(`from "react"`)&&!t.includes(`from 'react'`)){let e=t.match(yn);if(e){let n=e[0];return`
185
+ ${n}import * as React from 'react';\n${t.slice(n.length)}`}return`
186
+ import * as React from 'react';\n${t}`}return t}return`'use client';
186
187
  import * as React from 'react';
187
188
  export class ErrorBoundaryWrapper extends React.Component {
188
189
  constructor(props) {
@@ -254,4 +255,4 @@ export class ErrorBoundaryWrapper extends React.Component {
254
255
  }
255
256
  return this.props.children;
256
257
  }
257
- }`}if(t===`virtual:rsc-integration.ts`)return(await an()).replace($t,(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`)&&C.existsSync(t))try{let n=e.projectRoot||E.cwd(),r=C.realpathSync(t),i=T.relative(n,r),a=!i.startsWith(`..`)&&!T.isAbsolute(i),o=r.includes(`${T.sep}node_modules${T.sep}`),s=r.includes(`${T.sep}packages${T.sep}rari${T.sep}`)||r.includes(`${T.sep}node_modules${T.sep}rari${T.sep}`);return a||o||s?C.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(!_.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(Qt)){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 cn(e.projectRoot||E.cwd(),e)}},jt({...e.serverBuild,csp:e.csp,cacheControl:e.cacheControl})];return e.proxy!==!1&&v.push(ce(e.proxy||{})),e.router!==!1&&v.push(P(e.router||{})),v}function fn(e){return{plugins:[dn(),...e.plugins||[]],...e}}var pn=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 mn(e){return dn(e)}export{pn as ApiResponse,c as HttpRuntimeClient,e as RariRequest,t as RariResponse,i as clearPropsCache,a as clearPropsCacheForComponent,r as createHttpRuntimeClient,fn as defineRariConfig,un as defineRariOptions,u as extractMetadata,l as extractServerProps,s as extractServerPropsWithCache,o as extractStaticParams,pe as generateAppRouteManifest,n as hasServerSideDataFetching,mn as rari,ce as rariProxy,P as rariRouter};
258
+ }`}if(t===`virtual:rsc-integration.ts`)return(await Cn()).replace(gn,(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`)&&S.existsSync(t))try{let n=e.projectRoot||T.cwd(),r=S.realpathSync(t),i=w.relative(n,r),a=!i.startsWith(`..`)&&!w.isAbsolute(i),o=r.includes(`${w.sep}node_modules${w.sep}`),s=r.includes(`${w.sep}packages${w.sep}rari${w.sep}`)||r.includes(`${w.sep}node_modules${w.sep}rari${w.sep}`);return a||o||s?S.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(!y.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(hn)){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 En(e.projectRoot||T.cwd(),e)}},qt({...e.serverBuild,csp:e.csp,cacheControl:e.cacheControl})];return e.proxy!==!1&&_.push(fe(e.proxy||{})),e.router!==!1&&_.push(Pe(e.router||{})),_}function An(e){return{plugins:[kn(),...e.plugins||[]],...e}}var jn=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 Mn(e){return kn(e)}export{jn as ApiResponse,c as HttpRuntimeClient,e as RariRequest,t as RariResponse,i as clearPropsCache,a as clearPropsCacheForComponent,r as createHttpRuntimeClient,An as defineRariConfig,On as defineRariOptions,u as extractMetadata,l as extractServerProps,s as extractServerPropsWithCache,o as extractStaticParams,Ce as generateAppRouteManifest,n as hasServerSideDataFetching,Mn as rari,fe as rariProxy,Pe as rariRouter};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rari",
3
3
  "type": "module",
4
- "version": "0.14.6",
4
+ "version": "0.14.7",
5
5
  "description": "Runtime Accelerated Rendering Infrastructure (rari)",
6
6
  "author": "Ryan Skinner",
7
7
  "license": "MIT",
@@ -108,28 +108,28 @@
108
108
  },
109
109
  "dependencies": {
110
110
  "lightningcss": "^1.32.0",
111
- "rolldown": "^1.0.3"
111
+ "rolldown": "^1.1.0"
112
112
  },
113
113
  "optionalDependencies": {
114
- "rari-darwin-arm64": "0.14.5",
115
- "rari-darwin-x64": "0.14.5",
116
- "rari-linux-arm64": "0.14.5",
117
- "rari-linux-x64": "0.14.5",
118
- "rari-win32-arm64": "0.14.5",
119
- "rari-win32-x64": "0.14.5"
114
+ "rari-darwin-arm64": "0.14.7",
115
+ "rari-darwin-x64": "0.14.7",
116
+ "rari-linux-arm64": "0.14.7",
117
+ "rari-linux-x64": "0.14.7",
118
+ "rari-win32-arm64": "0.14.7",
119
+ "rari-win32-x64": "0.14.7"
120
120
  },
121
121
  "devDependencies": {
122
- "@types/node": "^25.9.1",
123
- "@types/react": "^19.2.16",
122
+ "@types/node": "^25.9.2",
123
+ "@types/react": "^19.2.17",
124
124
  "@types/react-dom": "^19.2.3",
125
- "@typescript/native-preview": "^7.0.0-dev.20260602.1",
125
+ "@typescript/native-preview": "^7.0.0-dev.20260606.1",
126
126
  "vite-plus": "^0.1.24",
127
127
  "@rari/deploy": "0.1.0",
128
128
  "@rari/logger": "0.1.0"
129
129
  },
130
130
  "scripts": {
131
131
  "build": "pnpm clean && pnpm typecheck && vp pack",
132
- "clean": "rm -rf dist",
132
+ "clean": "node --eval \"import('node:fs').then(fs => fs.rmSync('dist', { recursive: true, force: true }))\"",
133
133
  "lint": "vp lint",
134
134
  "lint:fix": "vp lint --fix",
135
135
  "typecheck": "tsgo"
@@ -1 +0,0 @@
1
- const e=/\.(?:tsx?|jsx?)$/,t=/^[A-Z]:\\/i,n=/\\/g,r=/[/\\]/,i=/\/$/,a=/^file:\/\//,o=/^https?:\/\//,s={AMPERSAND:/&/g,LT:/</g,GT:/>/g,QUOTE:/"/g,APOS:/'/g},c=s.AMPERSAND,l=s.LT,u=s.GT,d=s.QUOTE,f=s.APOS,p=c,m=l,h=u,g=d,_=f,v=c,y=l,b=u,x=d,S=f,C=/^\d+$/,w=/([a-z])([A-Z])/g,T=/export\s+(?:function|const|class)\s+(\w+)/,E=/\.[^.]*$/,D=/\r?\n/,O=/['"]/g;export{x as C,y as S,e as _,a,S as b,h as c,o as d,D as f,O as g,i as h,E as i,m as l,r as m,w as n,p as o,C as p,T as r,_ as s,n as t,g as u,t as v,b as x,v as y};