rari 0.10.24 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/cli.mjs +3 -3
  2. package/dist/client.d.mts +3 -3
  3. package/dist/client.mjs +3 -3
  4. package/dist/headers.d.mts +6 -0
  5. package/dist/headers.mjs +1 -0
  6. package/dist/image/index.d.mts +2 -2
  7. package/dist/image/index.mjs +1 -1
  8. package/dist/index.d.mts +2 -2
  9. package/dist/mdx.mjs +1 -1
  10. package/dist/preload-components-Bp8OQWGz.mjs +1 -0
  11. package/dist/proxy/RariRequest.d.mts +1 -1
  12. package/dist/proxy/RariResponse.d.mts +1 -1
  13. package/dist/regex-constants-CmOAY1_W.mjs +1 -0
  14. package/dist/{robots-generator-Bw9KFHn4.mjs → robots-generator-Ch7hYjpz.mjs} +2 -2
  15. package/dist/router.d.mts +2 -2
  16. package/dist/routes-DAS3afh_.mjs +1 -0
  17. package/dist/runtime/AppRouterProvider.d.mts +2 -2
  18. package/dist/runtime/AppRouterProvider.mjs +7 -4
  19. package/dist/runtime/ErrorBoundaryWrapper.mjs +1 -1
  20. package/dist/runtime/actions.d.mts +0 -12
  21. package/dist/runtime/actions.mjs +1 -1
  22. package/dist/runtime/entry-client.mjs +2 -2
  23. package/dist/runtime/react-server-dom-rari-client.d.mts +1 -3
  24. package/dist/runtime/react-server-dom-rari-client.mjs +3 -2
  25. package/dist/runtime/rsc-client-runtime.d.mts +2 -7
  26. package/dist/runtime/rsc-client-runtime.mjs +1 -1
  27. package/dist/server-build-CQUf5NnM.mjs +175 -0
  28. package/dist/{sitemap-generator-CzZZcCF6.mjs → sitemap-generator-n0LjA3Y1.mjs} +2 -2
  29. package/dist/types-DDyPWiSH.d.mts +34 -0
  30. package/dist/vite.d.mts +40 -39
  31. package/dist/vite.mjs +20 -21
  32. package/package.json +13 -9
  33. package/dist/preload-components-DD3aKUwy.mjs +0 -1
  34. package/dist/regex-constants-DOQkuGm5.mjs +0 -1
  35. package/dist/routes-CHfPKKpf.mjs +0 -1
  36. package/dist/server-build-CZ1eXn5D.mjs +0 -175
  37. /package/dist/{constants-WBHkQ1Nm.mjs → constants-B68HGlJT.mjs} +0 -0
  38. /package/dist/{metadata-route-BDdxZuGv.d.mts → metadata-route-CyBO6ooC.d.mts} +0 -0
  39. /package/dist/{timer-utils-BO5HIsHv.mjs → timer-utils-DnyOf3e6.mjs} +0 -0
  40. /package/dist/{types-BhqnAV4k.d.mts → types-DovC7o1Y.d.mts} +0 -0
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{getBinaryPath as e,getInstallationInstructions as t}from"./platform.mjs";import{existsSync as n,readFileSync as r,realpathSync as i}from"node:fs";import{resolve as a}from"node:path";import o from"node:process";import{spawn as s}from"node:child_process";import{fileURLToPath as c}from"node:url";import{styleText as l}from"node:util";function u(e){console.warn(`${l(`blue`,`info`)} ${e}`)}function d(e){console.warn(`${l(`green`,`✓`)} ${e}`)}function f(e){console.error(`${l(`red`,`✗`)} ${e}`)}function p(e){console.warn(`${l(`yellow`,`⚠`)} ${e}`)}const m=/^([^=]+)=(.*)$/;function h(e){let t=e.trim();if(!t||t.startsWith(`#`))return null;let n=t.match(m);if(!n)return null;let[,r,i]=n,a=r.trim(),o=i.trim();return(o.startsWith(`"`)&&o.endsWith(`"`)||o.startsWith(`'`)&&o.endsWith(`'`))&&(o=o.slice(1,-1)),{key:a,value:o}}function g(){let e=a(o.cwd(),`.env`);if(!n(e))return;let t=r(e,`utf-8`);for(let e of t.split(`
3
- `)){let t=h(e);t&&!o.env[t.key]&&(o.env[t.key]=t.value)}}g();const[,,_,...v]=o.argv;function y(e){return n(a(e,`pnpm-lock.yaml`))?`pnpm`:n(a(e,`yarn.lock`))?`yarn`:n(a(e,`bun.lockb`))?`bun`:n(a(e,`package-lock.json`))?`npm`:null}function b(e){try{let t=a(e,`package.json`);if(!n(t))return null;let i=JSON.parse(r(t,`utf-8`));if(i.packageManager?.startsWith(`pnpm`))return`pnpm`;if(i.packageManager?.startsWith(`yarn`))return`yarn`;if(i.packageManager?.startsWith(`bun`))return`bun`;if(i.packageManager?.startsWith(`npm`))return`npm`}catch{}return null}function x(){let e=o.cwd(),t=a(`/`),n=0;for(;e!==t&&n<20;){n++;let t=y(e);if(t)return t;let r=b(e);if(r)return r;let i=a(e,`..`);if(i===e)break;e=i}return`npm`}function S(){let e=x(),t=o.platform===`win32`;switch(e){case`bun`:return t?`bun.cmd`:`bun`;case`pnpm`:return t?`pnpm.cmd`:`pnpm`;case`yarn`:return t?`yarn.cmd`:`yarn`;default:return t?`npx.cmd`:`npx`}}function C(e,t,n={}){let r=o.platform===`win32`;if(e===`npx`){let e=S();if(e.includes(`bun`))return s(r?`bunx.cmd`:`bunx`,t,{...n,shell:r});if(e.includes(`pnpm`))return s(e,[`exec`,...t],{...n,shell:r});if(e.includes(`yarn`))return s(e,[`dlx`,...t],{...n,shell:r})}return r&&e===`npx`?s(`npx.cmd`,t,{...n,shell:!0}):s(e,t,n)}function w(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function T(){return!!(o.env.RAILWAY_ENVIRONMENT||o.env.RAILWAY_PROJECT_ID||o.env.RAILWAY_SERVICE_ID)}function E(){return!!(o.env.RENDER||o.env.RENDER_SERVICE_ID||o.env.RENDER_SERVICE_NAME)}function D(){return T()||E()}function O(){return T()?`Railway`:E()?`Render`:`local`}function k(){return{port:o.env.PORT||o.env.RSC_PORT||`3000`,mode:o.env.NODE_ENV||`production`,host:D()?`0.0.0.0`:`127.0.0.1`}}async function A(){let{existsSync:e,rmSync:t}=await import(`node:fs`),{resolve:n}=await import(`node:path`),r=n(o.cwd(),`dist`);e(r)&&(u(`Cleaning dist folder...`),t(r,{recursive:!0,force:!0})),u(`Type checking...`);let i=C(`npx`,[`tsgo`],{stdio:`inherit`,cwd:o.cwd()});await new Promise((e,t)=>{i.on(`exit`,n=>{n===0?(d(`Type check passed`),e()):(f(`Type check failed with code ${n}`),t(Error(`Type check failed with code ${n}`)))}),i.on(`error`,t)}),u(`Building for production...`);let a=C(`npx`,[`vp`,`build`],{stdio:`inherit`,cwd:o.cwd()});await new Promise((e,t)=>{a.on(`exit`,n=>{n===0?(d(`Build complete`),e()):(f(`Build failed with code ${n}`),t(Error(`Build failed with code ${n}`)))}),a.on(`error`,t)}),await j()}async function j(){if(n(a(o.cwd(),`dist`,`server`,`image.json`))&&n(a(o.cwd(),`public`)))try{let t=s(e(),[`optimize-images`],{stdio:`inherit`,cwd:o.cwd(),shell:!1});await new Promise(e=>{t.on(`exit`,t=>{t===0||p(`Image pre-optimization exited with code ${t}`),e()}),t.on(`error`,t=>{p(`Image pre-optimization error: ${w(t)}`),e()})})}catch(e){p(`Could not pre-optimize images: ${w(e)}`)}}async function M(){let{existsSync:e}=await import(`node:fs`),{resolve:t}=await import(`node:path`);if(!e(t(o.cwd(),`dist`))){u(`First run detected - building project...`);let e=C(`npx`,[`vp`,`build`,`--mode`,`development`],{stdio:`inherit`,cwd:o.cwd()});await new Promise((t,n)=>{e.on(`exit`,e=>{e===0?(d(`Initial build complete`),t()):(f(`Build failed with code ${e}`),n(Error(`Build failed with code ${e}`)))}),e.on(`error`,n)})}u(`Starting Vite+ dev server...`);let n=C(`npx`,[`vp`,`dev`],{stdio:`inherit`,cwd:o.cwd()}),r=()=>{u(`Shutting down dev server...`),n.kill(`SIGTERM`)};return o.on(`SIGINT`,r),o.on(`SIGTERM`,r),n.on(`error`,e=>{f(`Failed to start Vite: ${e.message}`),o.exit(1)}),n.on(`exit`,e=>{e!==0&&e!==null&&(f(`Vite exited with code ${e}`),o.exit(e))}),new Promise(()=>{})}async function N(){let n;try{n=e()}catch{f(`Failed to obtain rari binary`),f(t()),o.exit(1)}let{port:r,mode:i,host:a}=k();if(D()){let e=O();u(`${e} environment detected`),u(`Starting rari server for ${e} deployment...`),u(`Mode: ${i}, Host: ${a}, Port: ${r}`),u(`using binary: ${n}`)}let c=s(n,[`--mode`,i,`--port`,r,`--host`,a],{stdio:`inherit`,cwd:o.cwd(),env:{...o.env,RUST_LOG:o.env.RUST_LOG||`error`}}),l=()=>{u(`shutting down...`),c.kill(`SIGTERM`)};return o.on(`SIGINT`,l),o.on(`SIGTERM`,l),c.on(`error`,e=>{f(`Failed to start rari server: ${e.message}`),e.message.includes(`ENOENT`)&&f(`Binary not found. Please ensure rari is properly installed.`),o.exit(1)}),c.on(`exit`,(e,t)=>{t?u(`server stopped by signal ${t}`):e===0?d(`server stopped successfully`):(f(`server exited with code ${e}`),o.exit(e||1))}),new Promise(()=>{})}async function P(){u(`Setting up Railway deployment...`),D()&&(f(`Already running in ${O()} environment. Use "rari start" instead.`),o.exit(1));let{createRailwayDeployment:e}=await import(`./railway-2u_Vq-71.mjs`);await e()}async function F(){u(`Setting up Render deployment...`),D()&&(f(`Already running in ${O()} environment. Use "rari start" instead.`),o.exit(1));let{createRenderDeployment:e}=await import(`./render-jhijat1L.mjs`);await e()}async function I(){switch(_){case void 0:case`help`:case`--help`:case`-h`:console.warn(`${l(`bold`,`rari CLI`)}
2
+ import{getBinaryPath as e,getInstallationInstructions as t}from"./platform.mjs";import{spawn as n}from"node:child_process";import{existsSync as r,readFileSync as i,realpathSync as a}from"node:fs";import{resolve as o}from"node:path";import s from"node:process";import{fileURLToPath as c}from"node:url";import{styleText as l}from"node:util";function u(e){console.warn(`${l(`blue`,`info`)} ${e}`)}function d(e){console.warn(`${l(`green`,`✓`)} ${e}`)}function f(e){console.error(`${l(`red`,`✗`)} ${e}`)}function p(e){console.warn(`${l(`yellow`,`⚠`)} ${e}`)}const m=/^([^=]+)=(.*)$/;function h(e){let t=e.trim();if(!t||t.startsWith(`#`))return null;let n=t.match(m);if(!n)return null;let[,r,i]=n,a=r.trim(),o=i.trim();return(o.startsWith(`"`)&&o.endsWith(`"`)||o.startsWith(`'`)&&o.endsWith(`'`))&&(o=o.slice(1,-1)),{key:a,value:o}}function g(){let e=o(s.cwd(),`.env`);if(!r(e))return;let t=i(e,`utf-8`);for(let e of t.split(`
3
+ `)){let t=h(e);t&&!s.env[t.key]&&(s.env[t.key]=t.value)}}g();const[,,_,...v]=s.argv;function y(e){let t=s.cwd();for(;;){let n=e(t);if(n!==null)return n;let r=o(t,`..`);if(r===t)break;t=r}return null}function b(e){return r(o(e,`pnpm-lock.yaml`))?`pnpm`:r(o(e,`yarn.lock`))?`yarn`:r(o(e,`bun.lockb`))?`bun`:r(o(e,`package-lock.json`))?`npm`:null}function x(e){try{let t=o(e,`package.json`);if(!r(t))return null;let n=JSON.parse(i(t,`utf-8`));if(n.packageManager?.startsWith(`pnpm`))return`pnpm`;if(n.packageManager?.startsWith(`yarn`))return`yarn`;if(n.packageManager?.startsWith(`bun`))return`bun`;if(n.packageManager?.startsWith(`npm`))return`npm`}catch{}return null}function S(){return y(e=>b(e)??x(e))??`npm`}function C(){let e=S(),t=s.platform===`win32`;switch(e){case`bun`:return t?`bun.cmd`:`bun`;case`pnpm`:return t?`pnpm.cmd`:`pnpm`;case`yarn`:return t?`yarn.cmd`:`yarn`;default:return t?`npx.cmd`:`npx`}}function w(){return y(e=>{try{let t=o(e,`package.json`);if(r(t)){let e=JSON.parse(i(t,`utf-8`)),n={...e.dependencies,...e.devDependencies};if(n[`vite-plus`])return`vp`;if(n.vite)return`vite`}}catch{}return null})??`vite`}function T(e,t,r={}){let i=s.platform===`win32`;if(e===`npx`){let e=C();if(e.includes(`bun`))return n(i?`bunx.cmd`:`bunx`,t,{...r,shell:i});if(e.includes(`pnpm`))return n(e,[`exec`,...t],{...r,shell:i});if(e.includes(`yarn`)){let[a,...o]=t;return n(e,a===`vp`?[`dlx`,`-p`,`vite-plus`,`vp`,...o]:[`dlx`,...t],{...r,shell:i})}}return i&&e===`npx`?n(`npx.cmd`,t,{...r,shell:!0}):n(e,t,r)}function E(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function D(){return!!(s.env.RAILWAY_ENVIRONMENT||s.env.RAILWAY_PROJECT_ID||s.env.RAILWAY_SERVICE_ID)}function O(){return!!(s.env.RENDER||s.env.RENDER_SERVICE_ID||s.env.RENDER_SERVICE_NAME)}function k(){return D()||O()}function A(){return D()?`Railway`:O()?`Render`:`local`}function j(){return{port:s.env.PORT||s.env.RSC_PORT||`3000`,mode:s.env.NODE_ENV||`production`,host:k()?`0.0.0.0`:`127.0.0.1`}}async function M(){let{existsSync:e,rmSync:t}=await import(`node:fs`),{resolve:n}=await import(`node:path`),r=n(s.cwd(),`dist`);e(r)&&(u(`Cleaning dist folder...`),t(r,{recursive:!0,force:!0})),u(`Type checking...`);let i=T(`npx`,[`tsgo`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((e,t)=>{i.on(`exit`,n=>{n===0?(d(`Type check passed`),e()):(f(`Type check failed with code ${n}`),t(Error(`Type check failed with code ${n}`)))}),i.on(`error`,t)}),u(`Building for production...`);let a=T(`npx`,[w(),`build`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((e,t)=>{a.on(`exit`,n=>{n===0?(d(`Build complete`),e()):(f(`Build failed with code ${n}`),t(Error(`Build failed with code ${n}`)))}),a.on(`error`,t)}),await N()}async function N(){if(r(o(s.cwd(),`dist`,`server`,`image.json`))&&r(o(s.cwd(),`public`)))try{let t=n(e(),[`optimize-images`],{stdio:`inherit`,cwd:s.cwd(),shell:!1});await new Promise(e=>{t.on(`exit`,t=>{t===0||p(`Image pre-optimization exited with code ${t}`),e()}),t.on(`error`,t=>{p(`Image pre-optimization error: ${E(t)}`),e()})})}catch(e){p(`Could not pre-optimize images: ${E(e)}`)}}async function P(){let{existsSync:e}=await import(`node:fs`),{resolve:t}=await import(`node:path`),n=w();if(!e(t(s.cwd(),`dist`))){u(`First run detected - building project...`);let e=T(`npx`,[n,`build`,`--mode`,`development`],{stdio:`inherit`,cwd:s.cwd()});await new Promise((t,n)=>{e.on(`exit`,e=>{e===0?(d(`Initial build complete`),t()):(f(`Build failed with code ${e}`),n(Error(`Build failed with code ${e}`)))}),e.on(`error`,n)})}u(`Starting Vite${n===`vp`?`+`:``} dev server...`);let r=T(`npx`,[n,`dev`],{stdio:`inherit`,cwd:s.cwd()}),i=()=>{u(`Shutting down dev server...`),r.kill(`SIGTERM`)};return s.on(`SIGINT`,i),s.on(`SIGTERM`,i),r.on(`error`,e=>{f(`Failed to start Vite: ${e.message}`),s.exit(1)}),r.on(`exit`,e=>{e!==0&&e!==null&&(f(`Vite exited with code ${e}`),s.exit(e))}),new Promise(()=>{})}async function F(){let r;try{r=e()}catch{f(`Failed to obtain rari binary`),f(t()),s.exit(1)}let{port:i,mode:a,host:o}=j();if(k()){let e=A();u(`${e} environment detected`),u(`Starting rari server for ${e} deployment...`),u(`Mode: ${a}, Host: ${o}, Port: ${i}`),u(`using binary: ${r}`)}let c=n(r,[`--mode`,a,`--port`,i,`--host`,o],{stdio:`inherit`,cwd:s.cwd(),env:{...s.env,RUST_LOG:s.env.RUST_LOG||`error`}}),l=()=>{u(`shutting down...`),c.kill(`SIGTERM`)};return s.on(`SIGINT`,l),s.on(`SIGTERM`,l),c.on(`error`,e=>{f(`Failed to start rari server: ${e.message}`),e.message.includes(`ENOENT`)&&f(`Binary not found. Please ensure rari is properly installed.`),s.exit(1)}),c.on(`exit`,(e,t)=>{t?u(`server stopped by signal ${t}`):e===0?d(`server stopped successfully`):(f(`server exited with code ${e}`),s.exit(e||1))}),new Promise(()=>{})}async function I(){u(`Setting up Railway deployment...`),k()&&(f(`Already running in ${A()} environment. Use "rari start" instead.`),s.exit(1));let{createRailwayDeployment:e}=await import(`./railway-2u_Vq-71.mjs`);await e()}async function L(){u(`Setting up Render deployment...`),k()&&(f(`Already running in ${A()} environment. Use "rari start" instead.`),s.exit(1));let{createRenderDeployment:e}=await import(`./render-jhijat1L.mjs`);await e()}async function R(){switch(_){case void 0:case`help`:case`--help`:case`-h`:console.warn(`${l(`bold`,`rari CLI`)}
4
4
 
5
5
  ${l(`bold`,`Usage:`)}
6
6
  ${l(`cyan`,`rari dev`)} Start the development server with Vite
@@ -63,4 +63,4 @@ ${l(`bold`,`Notes:`)}
63
63
  - Platform deployment is automatically detected and configured
64
64
  - Use Ctrl+C to stop the server gracefully
65
65
 
66
- `);break;case`dev`:await M();break;case`build`:await A();break;case`start`:await N();break;case`deploy`:v[0]===`railway`?await P():v[0]===`render`?await F():(f(`Unknown deployment target. Available: railway, render`),o.exit(1));break;default:console.error(`${l(`bold`,`Unknown command:`)} ${_}`),console.warn(`Run "${l(`cyan`,`rari help`)}" for available commands`),o.exit(1)}}const L=o.argv[1]?i(a(o.argv[1])):``,R=i(c(import.meta.url));L&&R===L&&I().catch(e=>{f(`CLI Error: ${w(e)}`),console.error(e),o.exit(1)});export{x as detectPackageManager,k as getDeploymentConfig,T as isRailwayEnvironment,E as isRenderEnvironment};
66
+ `);break;case`dev`:await P();break;case`build`:await M();break;case`start`:await F();break;case`deploy`:v[0]===`railway`?await I():v[0]===`render`?await L():(f(`Unknown deployment target. Available: railway, render`),s.exit(1));break;default:console.error(`${l(`bold`,`Unknown command:`)} ${_}`),console.warn(`Run "${l(`cyan`,`rari help`)}" for available commands`),s.exit(1)}}const z=s.argv[1]?a(o(s.argv[1])):``,B=a(c(import.meta.url));z&&B===z&&R().catch(e=>{f(`CLI Error: ${E(e)}`),console.error(e),s.exit(1)});export{S as detectPackageManager,j as getDeploymentConfig,D as isRailwayEnvironment,O as isRenderEnvironment};
package/dist/client.d.mts CHANGED
@@ -2,7 +2,7 @@ import { C as extractServerPropsWithCache, S as extractServerProps, T as hasServ
2
2
  import { a as ErrorProps, c as LayoutEntry, f as NotFoundEntry, h as RouteSegmentType, i as ErrorEntry, m as RouteSegment, n as AppRouteManifest, o as GenerateMetadata, r as AppRouteMatch, s as GenerateStaticParams, t as AppRouteEntry, u as LoadingEntry } from "./types-Cfe0C3JU.mjs";
3
3
  import * as React from "react";
4
4
  import { Component, ErrorInfo, ReactNode } from "react";
5
- import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
6
6
 
7
7
  //#region src/router/ClientRouter.d.ts
8
8
  interface ClientRouterProps {
@@ -14,7 +14,7 @@ declare function ClientRouter({
14
14
  children,
15
15
  initialRoute,
16
16
  staleWindowMs
17
- }: ClientRouterProps): react_jsx_runtime0.JSX.Element;
17
+ }: ClientRouterProps): _$react_jsx_runtime0.JSX.Element;
18
18
  //#endregion
19
19
  //#region src/router/LayoutErrorBoundary.d.ts
20
20
  interface LayoutErrorBoundaryProps {
@@ -80,7 +80,7 @@ declare function NavigationErrorOverlay({
80
80
  onDismiss,
81
81
  retryCount,
82
82
  maxRetries
83
- }: NavigationErrorOverlayProps): react_jsx_runtime0.JSX.Element;
83
+ }: NavigationErrorOverlayProps): _$react_jsx_runtime0.JSX.Element;
84
84
  //#endregion
85
85
  //#region src/router/route-info-types.d.ts
86
86
  interface RouteInfoRequest {
package/dist/client.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import{i as e,t}from"./navigate-hfIqe3MK.mjs";import{_ as n,a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _}from"./runtime-client-yoJmu7vX.mjs";import{Component as v,useEffect as y,useLayoutEffect as ee,useRef as b,useState as x}from"react";import{Fragment as S,jsx as C,jsxs as w}from"react/jsx-runtime";function T(e,t,n={}){let r=null,i=0,a=0,o=null,s=null,{leading:c=!1,trailing:l=!0,maxWait:u}=n;function d(t){let n=o,r=s;return o=null,s=null,a=t,e.apply(r,n)}function f(e){let n=e-i,r=e-a;return i===0||n>=t||n<0||u!==void 0&&r>=u}function p(){let e=Date.now();if(f(e))return h(e);let n=e-i,o=e-a,s=t-n,c=u===void 0?1/0:u-o;r=setTimeout(p,Math.min(s,c))}function m(e){return a=e,r=setTimeout(p,t),c?d(e):void 0}function h(e){if(r=null,l&&o)return d(e);o=null,s=null}function g(){r!==null&&clearTimeout(r),a=0,o=null,i=0,s=null,r=null}function _(){return r===null?void 0:h(Date.now())}function v(){return r!==null}function y(...e){let n=Date.now(),a=f(n);if(o=e,s=this,i=n,a){if(r===null)return m(i);if(u!==void 0)return r=setTimeout(p,t),d(i)}r===null&&(r=setTimeout(p,t))}return y.cancel=g,y.flush=_,y.pending=v,y}const E=/fetch|networkerror|load failed/i;function D(e,t){return{type:`abort`,message:`Navigation was cancelled`,originalError:e,url:t,timestamp:Date.now(),retryable:!1}}function O(e,t){return{type:`timeout`,message:`Navigation request timed out`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function k(e,t,n){if(t===404)return{type:`not-found`,message:`Page not found`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!1};if(t>=500)return{type:`server-error`,message:`Server error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!0};let r=t===408||t===429;return{type:`fetch-error`,message:`HTTP error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:r}}function A(e,t){return{type:`network-error`,message:`Network error - check your connection`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function j(e,t){return{type:`parse-error`,message:`Failed to parse server response`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function M(e,t){return{type:`fetch-error`,message:e instanceof Error?e.message:`Unknown error occurred`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function N(e,t){if(e instanceof Error&&e.name===`AbortError`)return D(e,t);if(e instanceof Error&&(e.name===`TimeoutError`||e.message.includes(`timeout`)))return O(e,t);if(e instanceof Error&&`status`in e){let n=e.status;return typeof n==`number`?k(e,n,t):M(e,t)}return e instanceof TypeError&&E.test(e.message)?A(e,t):e instanceof SyntaxError||e instanceof Error&&e.message.includes(`parse`)?j(e,t):M(e,t)}var P=class{options;retryCount;constructor(e={}){this.options={timeout:e.timeout??1e4,maxRetries:e.maxRetries??3,onError:e.onError??(()=>{}),onRetry:e.onRetry??(()=>{})},this.retryCount=new Map}handleError(e,t){let n=N(e,t);return this.options.onError(n),console.error(`[rari] Navigation:`,n.type,n.message,{url:n.url,statusCode:n.statusCode,retryable:n.retryable}),n}canRetry(e,t){return e.retryable?(this.retryCount.get(t)??0)<this.options.maxRetries:!1}incrementRetry(e){let t=(this.retryCount.get(e)??0)+1;return this.retryCount.set(e,t),this.options.onRetry(t,{type:`fetch-error`,message:`Retry attempt ${t}`,url:e,timestamp:Date.now(),retryable:!0}),t}resetRetry(e){this.retryCount.delete(e)}getRetryCount(e){return this.retryCount.get(e)??0}clearRetries(){this.retryCount.clear()}};const F=/(^\/+)|(\/+$)/g;function I(e){let t=e.replace(F,``);return t?t.split(`/`):[]}function L(e){try{return decodeURIComponent(e)}catch{return null}}function R(e,t){let n=L(e),r=L(t);return n===null||r===null?!1:n===r}function z(e,t,n){if(!t)return!1;let r=L(e);return r===null?!1:(n[t]=r,!0)}function B(e,t,n,r){if(!n)return{success:!1,newIndex:t};let i=[];for(let n of e.slice(t)){let e=L(n);if(e===null)return{success:!1,newIndex:t};i.push(e)}return r[n]=i,{success:!0,newIndex:e.length}}function V(e,t,n,r){e>=t&&n&&(r[n]=[])}function H(e,t,n,r){if(n>=t.length)return e.type===`optional-catch-all`&&e.param?(V(n,t.length,e.param,r),{success:!0,newIndex:n}):{success:!1,newIndex:n};switch(e.type){case`static`:return R(t[n],e.value)?{success:!0,newIndex:n+1}:{success:!1,newIndex:n};case`dynamic`:return z(t[n],e.param,r)?{success:!0,newIndex:n+1}:{success:!1,newIndex:n};case`catch-all`:case`optional-catch-all`:return B(t,n,e.param,r);default:return{success:!1,newIndex:n}}}function U(e,t,n){let r=I(n),i={},a=0;for(let e of t){let t=H(e,r,a,i);if(!t.success)return null;a=t.newIndex}return a===r.length?i:null}function W(e){if(!e||e===`/`)return`/`;let t=e;for(;t.endsWith(`/`)&&t.length>1;)t=t.slice(0,-1);return t.startsWith(`/`)||(t=`/${t}`),t}function G(e,t){try{return new URL(e,t||window.location.origin).origin!==(t||window.location.origin)}catch{return!1}}function te(e){try{let t=new URL(e,window.location.origin);return t.pathname+t.hash}catch{return e}}function K({error:e,onRetry:t,onReload:n,onDismiss:r,retryCount:i=0,maxRetries:a=3}){let o=e.retryable&&i<a;return C(`div`,{style:{position:`fixed`,top:0,left:0,right:0,bottom:0,background:`rgba(0, 0, 0, 0.5)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:1e4,padding:`20px`},onClick:e=>{e.target===e.currentTarget&&r&&r()},children:w(`div`,{style:{background:`white`,borderRadius:`8px`,padding:`24px`,maxWidth:`500px`,width:`100%`,boxShadow:`0 4px 12px rgba(0, 0, 0, 0.15)`},onClick:e=>e.stopPropagation(),children:[w(`div`,{style:{display:`flex`,alignItems:`center`,gap:`12px`,marginBottom:`16px`},children:[C(`span`,{style:{fontSize:`32px`},children:(()=>{switch(e.type){case`timeout`:return`⏱️`;case`network-error`:return`📡`;case`not-found`:return`🔍`;case`server-error`:return`⚠️`;case`parse-error`:return`📄`;case`abort`:return`🚫`;default:return`❌`}})()}),C(`h2`,{style:{margin:0,fontSize:`20px`,fontWeight:`600`,color:`#1f2937`},children:`Navigation Error`})]}),C(`p`,{style:{margin:`0 0 16px 0`,fontSize:`15px`,lineHeight:`1.5`,color:`#4b5563`},children:(()=>{switch(e.type){case`timeout`:return`The page took too long to load. Please try again.`;case`network-error`:return`Unable to connect to the server. Please check your internet connection.`;case`not-found`:return`The page you're looking for doesn't exist.`;case`server-error`:return`The server encountered an error. Please try again in a moment.`;case`parse-error`:return`Unable to load the page content. Please try reloading.`;case`abort`:return`Navigation was cancelled.`;default:return e.message||`An unexpected error occurred.`}})()}),e.url&&w(`details`,{style:{marginBottom:`16px`,fontSize:`13px`,color:`#6b7280`},children:[C(`summary`,{style:{cursor:`pointer`,userSelect:`none`,marginBottom:`8px`},children:`Technical details`}),w(`div`,{style:{padding:`12px`,background:`#f9fafb`,borderRadius:`4px`,fontFamily:`monospace`,fontSize:`12px`,wordBreak:`break-all`},children:[w(`div`,{style:{marginBottom:`4px`},children:[C(`strong`,{children:`URL:`}),` `,e.url]}),e.statusCode&&w(`div`,{style:{marginBottom:`4px`},children:[C(`strong`,{children:`Status:`}),` `,e.statusCode]}),w(`div`,{style:{marginBottom:`4px`},children:[C(`strong`,{children:`Type:`}),` `,e.type]}),e.originalError&&w(`div`,{children:[C(`strong`,{children:`Error:`}),` `,e.originalError.message]})]})]}),o&&i>0&&w(`div`,{style:{marginBottom:`16px`,padding:`8px 12px`,background:`#fef3c7`,border:`1px solid #fbbf24`,borderRadius:`4px`,fontSize:`13px`,color:`#92400e`},children:[`Retry attempt`,` `,i,` `,`of`,` `,a]}),w(`div`,{style:{display:`flex`,gap:`8px`,flexWrap:`wrap`},children:[o&&t&&C(`button`,{onClick:t,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`#3b82f6`,color:`white`,border:`none`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`background 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#2563eb`},onMouseLeave:e=>{e.currentTarget.style.background=`#3b82f6`},children:`Try Again`}),n&&C(`button`,{onClick:n,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`#6b7280`,color:`white`,border:`none`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`background 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#4b5563`},onMouseLeave:e=>{e.currentTarget.style.background=`#6b7280`},children:`Reload Page`}),r&&C(`button`,{onClick:r,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`transparent`,color:`#6b7280`,border:`1px solid #d1d5db`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`all 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#f9fafb`,e.currentTarget.style.borderColor=`#9ca3af`},onMouseLeave:e=>{e.currentTarget.style.background=`transparent`,e.currentTarget.style.borderColor=`#d1d5db`},children:`Dismiss`})]}),C(`p`,{style:{marginTop:`16px`,marginBottom:0,fontSize:`12px`,color:`#9ca3af`,textAlign:`center`},children:`Your current page is still available below this message`})]})})}const q=new class{cache=new Map;pendingRequests=new Map;async get(e){let t=this.cache.get(e);if(t)return t;let n=this.pendingRequests.get(e);if(n)return n;let r=this.fetchRouteInfo(e);this.pendingRequests.set(e,r);try{let t=await r;return this.cache.set(e,t),t}finally{this.pendingRequests.delete(e)}}async fetchRouteInfo(e){let t={path:e},n=await fetch(`/_rari/route-info`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=null;try{e=await n.json()}catch{}throw e?.error?Error(e.error):Error(`Failed to fetch route info: ${n.status} ${n.statusText}`)}let r=n.clone();try{return await n.json()}catch(t){try{let e=await r.text();return JSON.parse(e)}catch(n){throw console.error(`[RouteInfo] Failed to parse response:`,{error:t,parseError:n,path:e}),Error(`Failed to parse route info response`)}}}clear(){this.cache.clear(),this.pendingRequests.clear()}invalidate(e){this.cache.delete(e)}};if(typeof window<`u`){let e=window[`~rari`]||{};window[`~rari`]||(window[`~rari`]=e),e.routeInfoCache=q}var J=class{stateHistory;routeAccessOrder;maxHistorySize;scrollableSelector;constructor(e={}){this.stateHistory=new Map,this.routeAccessOrder=[],this.maxHistorySize=e.maxHistorySize||50,this.scrollableSelector=e.scrollableSelector||`[data-scrollable], .scrollable, [style*="overflow"]`}captureState(e){let t={scrollPositions:this.captureScrollPositions(),formData:this.captureFormData(),focusedElement:this.captureFocusedElement()};return this.storeState(e,t),t}captureScrollPositions(){let e=new Map;try{e.set(`window`,{x:window.scrollX,y:window.scrollY,element:`window`}),document.querySelectorAll(this.scrollableSelector).forEach((t,n)=>{if(t instanceof HTMLElement){let r=t.id||`scrollable-${n}`;(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)&&e.set(r,{x:t.scrollLeft,y:t.scrollTop,element:r})}})}catch{}return e}captureFormData(){let e=new Map;try{document.querySelectorAll(`form`).forEach((t,n)=>{let r=t.id||t.name||`form-${n}`,i=new FormData(t);i.entries().next().done||e.set(r,i)})}catch{}return e}captureFocusedElement(){try{let e=document.activeElement;if(e&&e!==document.body){if(e.id)return`#${e.id}`;if((e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.name)return`[name="${e.name}"]`}}catch{}return null}storeState(e,t){let n=this.routeAccessOrder.indexOf(e);for(n!==-1&&this.routeAccessOrder.splice(n,1),this.routeAccessOrder.push(e),this.stateHistory.set(e,t);this.routeAccessOrder.length>this.maxHistorySize;){let e=this.routeAccessOrder.shift();e&&this.stateHistory.delete(e)}}getHistorySize(){return this.stateHistory.size}hasState(e){return this.stateHistory.has(e)}getState(e){return this.stateHistory.get(e)}clearAll(){this.stateHistory.clear(),this.routeAccessOrder=[]}clearState(e){this.stateHistory.delete(e);let t=this.routeAccessOrder.indexOf(e);t!==-1&&this.routeAccessOrder.splice(t,1)}restoreState(e){let t=this.stateHistory.get(e);if(!t)return!1;let n=!0;return this.restoreScrollPositions(t.scrollPositions)||(n=!1),this.restoreFormData(t.formData)||(n=!1),t.focusedElement&&this.restoreFocus(t.focusedElement),n}restoreScrollPositions(e){let t=!0;try{e.forEach((e,n)=>{try{if(n===`window`)window.scrollTo(e.x,e.y);else{let r=document.getElementById(n)||document.querySelector(`[data-scrollable-id="${n}"]`);r instanceof HTMLElement?(r.scrollLeft=e.x,r.scrollTop=e.y):t=!1}}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore scroll positions:`,e),t=!1}return t}restoreFormData(e){let t=!0;try{e.forEach((e,n)=>{try{let r=document.getElementById(n)||document.querySelector(`form[name="${n}"]`)||document.querySelectorAll(`form`)[Number.parseInt(n.replace(`form-`,``),10)];r instanceof HTMLFormElement?e.forEach((e,n)=>{try{let t=r.elements.namedItem(n);t instanceof RadioNodeList?t.forEach(t=>{t instanceof HTMLInputElement&&(t.type===`radio`||t.type===`checkbox`?t.checked=t.value===e:t.value=e)}):(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)&&(t instanceof HTMLInputElement&&(t.type===`checkbox`||t.type===`radio`)?t.checked=t.value===e:t.value=e)}catch{t=!1}}):t=!1}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore form data:`,e),t=!1}return t}restoreFocus(e){try{let t=document.querySelector(e);t instanceof HTMLElement&&requestAnimationFrame(()=>{try{t.focus()}catch{}})}catch{}}};function Y(e,t){let n=document.querySelector(e);if(n)t.content&&n.setAttribute(`content`,t.content);else{n=document.createElement(`meta`);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);document.head.appendChild(n)}}function X(e){let t=document.querySelector(e);t&&t.remove()}function Z(e){e.title&&(document.title=e.title),e.description?Y(`meta[name="description"]`,{name:`description`,content:e.description}):X(`meta[name="description"]`),e.keywords&&e.keywords.length>0?Y(`meta[name="keywords"]`,{name:`keywords`,content:e.keywords.join(`, `)}):X(`meta[name="keywords"]`),e.viewport&&Y(`meta[name="viewport"]`,{name:`viewport`,content:e.viewport})}function Q(e){let t=document.querySelector(`link[rel="canonical"]`);if(e===void 0){t&&t.remove();return}if(t)t.setAttribute(`href`,e);else{let t=document.createElement(`link`);t.setAttribute(`rel`,`canonical`),t.setAttribute(`href`,e),document.head.appendChild(t)}}function $(e){if(e===void 0){X(`meta[name="robots"]`);return}let t=[];e.index!==void 0&&t.push(e.index?`index`:`noindex`),e.follow!==void 0&&t.push(e.follow?`follow`:`nofollow`),e.nocache&&t.push(`nocache`),t.length>0?Y(`meta[name="robots"]`,{name:`robots`,content:t.join(`, `)}):X(`meta[name="robots"]`)}function ne(e){if(e===void 0){X(`meta[property="og:title"]`),X(`meta[property="og:description"]`),X(`meta[property="og:url"]`),X(`meta[property="og:site_name"]`),X(`meta[property="og:type"]`),document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());return}if(e.title?Y(`meta[property="og:title"]`,{property:`og:title`,content:e.title}):X(`meta[property="og:title"]`),e.description?Y(`meta[property="og:description"]`,{property:`og:description`,content:e.description}):X(`meta[property="og:description"]`),e.url?Y(`meta[property="og:url"]`,{property:`og:url`,content:e.url}):X(`meta[property="og:url"]`),e.siteName?Y(`meta[property="og:site_name"]`,{property:`og:site_name`,content:e.siteName}):X(`meta[property="og:site_name"]`),e.type?Y(`meta[property="og:type"]`,{property:`og:type`,content:e.type}):X(`meta[property="og:type"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`property`,`og:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove())}function re(e){if(e===void 0){X(`meta[name="twitter:card"]`),X(`meta[name="twitter:site"]`),X(`meta[name="twitter:creator"]`),X(`meta[name="twitter:title"]`),X(`meta[name="twitter:description"]`),document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());return}if(e.card?Y(`meta[name="twitter:card"]`,{name:`twitter:card`,content:e.card}):X(`meta[name="twitter:card"]`),e.site?Y(`meta[name="twitter:site"]`,{name:`twitter:site`,content:e.site}):X(`meta[name="twitter:site"]`),e.creator?Y(`meta[name="twitter:creator"]`,{name:`twitter:creator`,content:e.creator}):X(`meta[name="twitter:creator"]`),e.title?Y(`meta[name="twitter:title"]`,{name:`twitter:title`,content:e.title}):X(`meta[name="twitter:title"]`),e.description?Y(`meta[name="twitter:description"]`,{name:`twitter:description`,content:e.description}):X(`meta[name="twitter:description"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`name`,`twitter:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove())}function ie(e){Z(e),Q(e.canonical),$(e.robots),ne(e.openGraph),re(e.twitter)}function ae({children:n,initialRoute:r,staleWindowMs:i=3e4}){let[a,o]=x(()=>({currentRoute:W(r),navigationId:0,error:null})),s=b(null),c=b(!0),l=b(W(r)),u=b(new P({timeout:1e4,maxRetries:3,onError:e=>{console.error(`[rari] Router: Navigation error:`,e)},onRetry:()=>{}})),d=b(new Map),f=b([]),p=b(new J({maxHistorySize:50})),m=b(null),h=b(i),g=()=>`${Date.now()}-${Math.random().toString(36).substring(2,9)}`,_=()=>{s.current&&=(s.current.abort(),null)},v=()=>{for(let[,e]of d.current.entries())e.abortController.abort();d.current.clear()},E=(e,t)=>{d.current.delete(e),c.current&&a.navigationId===t&&o(e=>({...e}))},D=async e=>q.get(e),O=b(null),k=(e,t)=>{if(!t)return;let n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,`${e}#${t}`))},A=e=>{try{let t=e.headers.get(`x-rari-metadata`);t&&ie(JSON.parse(decodeURIComponent(t)))}catch(e){console.warn(`[rari] Router: Failed to parse x-rari-metadata header:`,e)}},j=async(e,t,n,r,i,a,o,s,c)=>{if(!e.body)return;let l=e.body.getReader(),u=new TextDecoder,d=``;try{for(;;){let{done:e,value:r}=await l.read();if(e)break;if(t.signal.aborted){await l.cancel(),E(n,i);return}d+=u.decode(r,{stream:!0});let a=d.split(`
2
- `);d=a.pop()||``;for(let e of a)e.trim()&&window.dispatchEvent(new CustomEvent(`rari:rsc-row`,{detail:{rscRow:e}}))}d+=u.decode(),d.trim()&&window.dispatchEvent(new CustomEvent(`rari:rsc-row`,{detail:{rscRow:d}})),window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:a,to:r,navigationId:i,options:o,routeInfo:{...s,extractedParams:c},abortSignal:t.signal,isStreaming:!0}}))}catch(e){throw console.error(`[rari] Router: Streaming error:`,e),e}},M=async(e,t,n,r,i,a,o,s)=>{let c=await e.text();window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:t,to:n,navigationId:r,options:i,routeInfo:{...a,extractedParams:o},abortSignal:s.signal,rscWireFormat:c}}))},N=(e,t,n)=>{n.historyKey?requestAnimationFrame(()=>{p.current.restoreState(e)}):t&&requestAnimationFrame(()=>{let e=(n=0)=>{let r=document.getElementById(t);r?r.scrollIntoView({behavior:`smooth`,block:`start`}):n<10&&setTimeout(e,50,n+1)};e()})},F=(e,t,n,r)=>{c.current&&(l.current=e,o(t=>({...t,currentRoute:e,navigationId:r,error:null})),u.current.resetRetry(e),N(e,t,n))},I=(e,t,n,r)=>{if(e instanceof Error&&e.name===`AbortError`){E(t,n);return}let i=u.current.handleError(e,t);c.current&&o(e=>({...e,error:i})),d.current.delete(t),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:r,to:t,error:i,navigationId:n}})),O.current?.()},L=async(e,t={})=>{if(!e||typeof e!=`string`){console.error(`[rari] Router: Invalid navigation target:`,e);return}let[n,r]=e.includes(`#`)?e.split(`#`):[e,``],i=W(n);if(i===l.current&&!t.replace){k(i,r);return}let o=d.current.get(i);if(o)return o.promise;let c=await D(i);v(),_();let u=new AbortController;s.current=u;let f=a.navigationId+1,m=(async()=>{let e=l.current;try{t.historyKey||p.current.captureState(e);let n=t.historyKey||g(),a=window.location.origin+i,o=await fetch(a,{headers:{Accept:`text/x-component`},signal:u.signal});if(!o.ok&&o.status!==404)throw Error(`Failed to fetch: ${o.status}`);let s=new URL(o.url).pathname;if(u.signal.aborted){E(i,f);return}let l=r?`${s}#${r}`:s,m={route:s,navigationId:f,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:n};t.replace?window.history.replaceState(m,``,l):window.history.pushState(m,``,l),A(o);let h=o.headers.get(`x-render-mode`)===`streaming`,_=c?.segments&&U(``,c.segments,s)||{};if(h&&o.body?await j(o,u,i,s,f,e,t,c,_):await M(o,e,s,f,t,c,_,u),u.signal.aborted){E(i,f);return}F(s,r,t,f),d.current.delete(i),O.current?.()}catch(t){I(t,i,f,e)}})();return d.current.set(i,{targetPath:i,navigationId:f,promise:m,abortController:u}),m},R=async()=>{if(f.current.length===0)return;let e=f.current.at(-1);e&&(f.current=[],await L(e.path,e.options))},z=b(L);ee(()=>(O.current=R,z.current=L,()=>{O.current=null,z.current=null}));let B=b(null);B.current||=T((e,t)=>{z.current?.(e,t)},50,{leading:!1,trailing:!0,maxWait:200});let V=e=>{if(e.button!==0||e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)return;let t=e.target;for(;t&&t.tagName!==`A`;)t=t.parentElement;if(!t||t.tagName!==`A`)return;let n=t;if(n.target&&n.target!==`_self`||n.hasAttribute(`download`))return;let r=n.getAttribute(`href`);if(!r||G(r))return;if(r.startsWith(`#`)){e.preventDefault();let t=r.slice(1),n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,r));return}e.preventDefault();let i=te(r);B.current&&B.current(i,{replace:!1})},H=e=>{let t=window.location.pathname,n=e.state;z.current&&z.current(t,{replace:!0,scroll:!1,historyKey:n?.key})},Y=()=>{if(a.error&&a.error.url){let e=a.error.url;u.current.incrementRetry(e),L(e,{replace:!1})}},X=()=>{window.location.reload()},Z=()=>{o(e=>({...e,error:null}))};y(()=>{let e=window.history.state;if(!e||!e.key){let e={route:W(r),navigationId:0,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:g()};window.history.replaceState(e,``,window.location.pathname+window.location.search+window.location.hash)}},[r]);let Q=e=>{if(e.persisted){let e=window.location.pathname;p.current.captureState(e)}},$=e=>{if(e.persisted){let e=window.location.pathname,t=window.history.state;requestAnimationFrame(()=>{p.current.restoreState(e),t?.scrollPosition&&window.scrollTo(t.scrollPosition.x,t.scrollPosition.y)})}};return y(()=>(document.addEventListener(`click`,V),window.addEventListener(`popstate`,H),window.addEventListener(`pagehide`,Q),window.addEventListener(`pageshow`,$),()=>{document.removeEventListener(`click`,V),window.removeEventListener(`popstate`,H),window.removeEventListener(`pagehide`,Q),window.removeEventListener(`pageshow`,$)}),[]),y(()=>{h.current=i;let e=()=>{document.hidden?m.current=Date.now():m.current!==null&&Date.now()-m.current>h.current&&q.clear()};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[i]),y(()=>(c.current=!0,e((e,t)=>z.current?.(e,t)??Promise.resolve()),()=>{c.current=!1,t(),_(),v(),B.current?.cancel&&B.current.cancel()}),[]),w(S,{children:[n,a.error&&C(K,{error:a.error,onRetry:Y,onReload:X,onDismiss:Z,retryCount:u.current.getRetryCount(a.error.url||``),maxRetries:3})]})}var oe=class extends v{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[rari] Layout: Error in layout "${this.props.layoutPath}":`,e,t),this.props.onError&&this.props.onError(e,t),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:layout-error`,{detail:{layoutPath:this.props.layoutPath,error:e,errorInfo:t,timestamp:Date.now()}}))}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):w(`div`,{style:{padding:`16px`,margin:`16px 0`,background:`#fee`,border:`1px solid #fcc`,borderRadius:`4px`},children:[C(`h3`,{style:{margin:`0 0 8px 0`,color:`#c00`},children:`Layout Error`}),w(`p`,{style:{margin:`0 0 8px 0`,fontSize:`14px`},children:[`An error occurred in layout:`,` `,C(`code`,{children:this.props.layoutPath})]}),w(`details`,{style:{fontSize:`12px`,marginBottom:`8px`},children:[C(`summary`,{style:{cursor:`pointer`},children:`Error details`}),w(`pre`,{style:{marginTop:`8px`,padding:`8px`,background:`#fff`,border:`1px solid #ddd`,borderRadius:`2px`,overflow:`auto`},children:[this.state.error.message,`
3
- `,this.state.error.stack]})]}),C(`button`,{onClick:this.reset,type:`button`,style:{padding:`6px 12px`,background:`#c00`,color:`white`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontSize:`14px`},children:`Try Again`})]}):this.props.children}};export{ae as ClientRouter,_ as DefaultError,f as DefaultLoading,h as ErrorBoundary,l as HttpRuntimeClient,oe as LayoutErrorBoundary,r as LoadingSpinner,P as NavigationErrorHandler,K as NavigationErrorOverlay,p as NotFound,J as StatePreserver,a as clearPropsCache,o as clearPropsCacheForComponent,g as createErrorBoundary,i as createHttpRuntimeClient,u as createLoadingBoundary,m as extractMetadata,d as extractServerProps,c as extractServerPropsWithCache,s as extractStaticParams,n as hasServerSideDataFetching};
1
+ import{i as e,t}from"./navigate-hfIqe3MK.mjs";import{_ as n,a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _}from"./runtime-client-yoJmu7vX.mjs";import{Component as v,useEffect as y,useLayoutEffect as b,useRef as x,useState as ee}from"react";import{Fragment as S,jsx as C,jsxs as w}from"react/jsx-runtime";function te(e,t,n={}){let r=null,i=0,a=0,o=null,s=null,{leading:c=!1,trailing:l=!0,maxWait:u}=n;function d(t){let n=o,r=s;return o=null,s=null,a=t,e.apply(r,n)}function f(e){let n=e-i,r=e-a;return i===0||n>=t||n<0||u!==void 0&&r>=u}function p(){let e=Date.now();if(f(e))return h(e);let n=e-i,o=e-a,s=t-n,c=u===void 0?1/0:u-o;r=setTimeout(p,Math.min(s,c))}function m(e){return a=e,r=setTimeout(p,t),c?d(e):void 0}function h(e){if(r=null,l&&o)return d(e);o=null,s=null}function g(){r!==null&&clearTimeout(r),a=0,o=null,i=0,s=null,r=null}function _(){return r===null?void 0:h(Date.now())}function v(){return r!==null}function y(...e){let n=Date.now(),a=f(n);if(o=e,s=this,i=n,a){if(r===null)return m(i);if(u!==void 0)return r=setTimeout(p,t),d(i)}r===null&&(r=setTimeout(p,t))}return y.cancel=g,y.flush=_,y.pending=v,y}const T=/fetch|networkerror|load failed/i;function E(e,t){return{type:`abort`,message:`Navigation was cancelled`,originalError:e,url:t,timestamp:Date.now(),retryable:!1}}function D(e,t){return{type:`timeout`,message:`Navigation request timed out`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function O(e,t,n){if(t===404)return{type:`not-found`,message:`Page not found`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!1};if(t>=500)return{type:`server-error`,message:`Server error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:!0};let r=t===408||t===429;return{type:`fetch-error`,message:`HTTP error: ${t}`,originalError:e,statusCode:t,url:n,timestamp:Date.now(),retryable:r}}function k(e,t){return{type:`network-error`,message:`Network error - check your connection`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function A(e,t){return{type:`parse-error`,message:`Failed to parse server response`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function j(e,t){return{type:`fetch-error`,message:e instanceof Error?e.message:`Unknown error occurred`,originalError:e instanceof Error?e:void 0,url:t,timestamp:Date.now(),retryable:!1}}function M(e,t){if(e instanceof Error&&e.name===`AbortError`)return E(e,t);if(e instanceof Error&&(e.name===`TimeoutError`||e.message.includes(`timeout`)))return D(e,t);if(e instanceof Error&&`status`in e){let n=e.status;return typeof n==`number`?O(e,n,t):j(e,t)}return e instanceof TypeError&&T.test(e.message)?k(e,t):e instanceof SyntaxError||e instanceof Error&&e.message.includes(`parse`)?A(e,t):j(e,t)}var N=class{options;retryCount;constructor(e={}){this.options={timeout:e.timeout??1e4,maxRetries:e.maxRetries??3,onError:e.onError??(()=>{}),onRetry:e.onRetry??(()=>{})},this.retryCount=new Map}handleError(e,t){let n=M(e,t);return this.options.onError(n),console.error(`[rari] Navigation:`,n.type,n.message,{url:n.url,statusCode:n.statusCode,retryable:n.retryable}),n}canRetry(e,t){return e.retryable?(this.retryCount.get(t)??0)<this.options.maxRetries:!1}incrementRetry(e){let t=(this.retryCount.get(e)??0)+1;return this.retryCount.set(e,t),this.options.onRetry(t,{type:`fetch-error`,message:`Retry attempt ${t}`,url:e,timestamp:Date.now(),retryable:!0}),t}resetRetry(e){this.retryCount.delete(e)}getRetryCount(e){return this.retryCount.get(e)??0}clearRetries(){this.retryCount.clear()}};const P=/(^\/+)|(\/+$)/g;function F(e){let t=e.replace(P,``);return t?t.split(`/`):[]}function I(e){try{return decodeURIComponent(e)}catch{return null}}function L(e,t){let n=I(e),r=I(t);return n===null||r===null?!1:n===r}function R(e,t,n){if(!t)return!1;let r=I(e);return r===null?!1:(n[t]=r,!0)}function z(e,t,n,r){if(!n)return{success:!1,newIndex:t};let i=[];for(let n of e.slice(t)){let e=I(n);if(e===null)return{success:!1,newIndex:t};i.push(e)}return r[n]=i,{success:!0,newIndex:e.length}}function B(e,t,n,r){e>=t&&n&&(r[n]=[])}function V(e,t,n,r){if(n>=t.length)return e.type===`optional-catch-all`&&e.param?(B(n,t.length,e.param,r),{success:!0,newIndex:n}):{success:!1,newIndex:n};switch(e.type){case`static`:return L(t[n],e.value)?{success:!0,newIndex:n+1}:{success:!1,newIndex:n};case`dynamic`:return R(t[n],e.param,r)?{success:!0,newIndex:n+1}:{success:!1,newIndex:n};case`catch-all`:case`optional-catch-all`:return z(t,n,e.param,r);default:return{success:!1,newIndex:n}}}function ne(e,t,n){let r=F(n),i={},a=0;for(let e of t){let t=V(e,r,a,i);if(!t.success)return null;a=t.newIndex}return a===r.length?i:null}function H(e){if(!e||e===`/`)return`/`;let t=e;for(;t.endsWith(`/`)&&t.length>1;)t=t.slice(0,-1);return t.startsWith(`/`)||(t=`/${t}`),t}function U(e,t){try{return new URL(e,t||window.location.origin).origin!==(t||window.location.origin)}catch{return!1}}function W(e){try{let t=new URL(e,window.location.origin);return t.pathname+t.hash}catch{return e}}function G({error:e,onRetry:t,onReload:n,onDismiss:r,retryCount:i=0,maxRetries:a=3}){let o=e.retryable&&i<a;return C(`div`,{style:{position:`fixed`,top:0,left:0,right:0,bottom:0,background:`rgba(0, 0, 0, 0.5)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:1e4,padding:`20px`},onClick:e=>{e.target===e.currentTarget&&r&&r()},children:w(`div`,{style:{background:`white`,borderRadius:`8px`,padding:`24px`,maxWidth:`500px`,width:`100%`,boxShadow:`0 4px 12px rgba(0, 0, 0, 0.15)`},onClick:e=>e.stopPropagation(),children:[w(`div`,{style:{display:`flex`,alignItems:`center`,gap:`12px`,marginBottom:`16px`},children:[C(`span`,{style:{fontSize:`32px`},children:(()=>{switch(e.type){case`timeout`:return`⏱️`;case`network-error`:return`📡`;case`not-found`:return`🔍`;case`server-error`:return`⚠️`;case`parse-error`:return`📄`;case`abort`:return`🚫`;default:return`❌`}})()}),C(`h2`,{style:{margin:0,fontSize:`20px`,fontWeight:`600`,color:`#1f2937`},children:`Navigation Error`})]}),C(`p`,{style:{margin:`0 0 16px 0`,fontSize:`15px`,lineHeight:`1.5`,color:`#4b5563`},children:(()=>{switch(e.type){case`timeout`:return`The page took too long to load. Please try again.`;case`network-error`:return`Unable to connect to the server. Please check your internet connection.`;case`not-found`:return`The page you're looking for doesn't exist.`;case`server-error`:return`The server encountered an error. Please try again in a moment.`;case`parse-error`:return`Unable to load the page content. Please try reloading.`;case`abort`:return`Navigation was cancelled.`;default:return e.message||`An unexpected error occurred.`}})()}),e.url&&w(`details`,{style:{marginBottom:`16px`,fontSize:`13px`,color:`#6b7280`},children:[C(`summary`,{style:{cursor:`pointer`,userSelect:`none`,marginBottom:`8px`},children:`Technical details`}),w(`div`,{style:{padding:`12px`,background:`#f9fafb`,borderRadius:`4px`,fontFamily:`monospace`,fontSize:`12px`,wordBreak:`break-all`},children:[w(`div`,{style:{marginBottom:`4px`},children:[C(`strong`,{children:`URL:`}),` `,e.url]}),e.statusCode&&w(`div`,{style:{marginBottom:`4px`},children:[C(`strong`,{children:`Status:`}),` `,e.statusCode]}),w(`div`,{style:{marginBottom:`4px`},children:[C(`strong`,{children:`Type:`}),` `,e.type]}),e.originalError&&w(`div`,{children:[C(`strong`,{children:`Error:`}),` `,e.originalError.message]})]})]}),o&&i>0&&w(`div`,{style:{marginBottom:`16px`,padding:`8px 12px`,background:`#fef3c7`,border:`1px solid #fbbf24`,borderRadius:`4px`,fontSize:`13px`,color:`#92400e`},children:[`Retry attempt`,` `,i,` `,`of`,` `,a]}),w(`div`,{style:{display:`flex`,gap:`8px`,flexWrap:`wrap`},children:[o&&t&&C(`button`,{onClick:t,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`#3b82f6`,color:`white`,border:`none`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`background 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#2563eb`},onMouseLeave:e=>{e.currentTarget.style.background=`#3b82f6`},children:`Try Again`}),n&&C(`button`,{onClick:n,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`#6b7280`,color:`white`,border:`none`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`background 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#4b5563`},onMouseLeave:e=>{e.currentTarget.style.background=`#6b7280`},children:`Reload Page`}),r&&C(`button`,{onClick:r,type:`button`,style:{flex:1,minWidth:`120px`,padding:`10px 16px`,background:`transparent`,color:`#6b7280`,border:`1px solid #d1d5db`,borderRadius:`6px`,fontSize:`14px`,fontWeight:`500`,cursor:`pointer`,transition:`all 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=`#f9fafb`,e.currentTarget.style.borderColor=`#9ca3af`},onMouseLeave:e=>{e.currentTarget.style.background=`transparent`,e.currentTarget.style.borderColor=`#d1d5db`},children:`Dismiss`})]}),C(`p`,{style:{marginTop:`16px`,marginBottom:0,fontSize:`12px`,color:`#9ca3af`,textAlign:`center`},children:`Your current page is still available below this message`})]})})}const K=new class{cache=new Map;pendingRequests=new Map;async get(e){let t=this.cache.get(e);if(t)return t;let n=this.pendingRequests.get(e);if(n)return n;let r=this.fetchRouteInfo(e);this.pendingRequests.set(e,r);try{let t=await r;return this.cache.set(e,t),t}finally{this.pendingRequests.delete(e)}}async fetchRouteInfo(e){let t={path:e},n=await fetch(`/_rari/route-info`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=null;try{e=await n.json()}catch{}throw e?.error?Error(e.error):Error(`Failed to fetch route info: ${n.status} ${n.statusText}`)}let r=n.clone();try{return await n.json()}catch(t){try{let e=await r.text();return JSON.parse(e)}catch(n){throw console.error(`[RouteInfo] Failed to parse response:`,{error:t,parseError:n,path:e}),Error(`Failed to parse route info response`)}}}clear(){this.cache.clear(),this.pendingRequests.clear()}invalidate(e){this.cache.delete(e)}};if(typeof window<`u`){let e=window[`~rari`]||{};window[`~rari`]||(window[`~rari`]=e),e.routeInfoCache=K}var q=class{stateHistory;routeAccessOrder;maxHistorySize;scrollableSelector;constructor(e={}){this.stateHistory=new Map,this.routeAccessOrder=[],this.maxHistorySize=e.maxHistorySize||50,this.scrollableSelector=e.scrollableSelector||`[data-scrollable], .scrollable, [style*="overflow"]`}captureState(e){let t={scrollPositions:this.captureScrollPositions(),formData:this.captureFormData(),focusedElement:this.captureFocusedElement()};return this.storeState(e,t),t}captureScrollPositions(){let e=new Map;try{e.set(`window`,{x:window.scrollX,y:window.scrollY,element:`window`}),document.querySelectorAll(this.scrollableSelector).forEach((t,n)=>{if(t instanceof HTMLElement){let r=t.id||`scrollable-${n}`;(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)&&e.set(r,{x:t.scrollLeft,y:t.scrollTop,element:r})}})}catch{}return e}captureFormData(){let e=new Map;try{document.querySelectorAll(`form`).forEach((t,n)=>{let r=t.id||t.name||`form-${n}`,i=new FormData(t);i.entries().next().done||e.set(r,i)})}catch{}return e}captureFocusedElement(){try{let e=document.activeElement;if(e&&e!==document.body){if(e.id)return`#${e.id}`;if((e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.name)return`[name="${e.name}"]`}}catch{}return null}storeState(e,t){let n=this.routeAccessOrder.indexOf(e);for(n!==-1&&this.routeAccessOrder.splice(n,1),this.routeAccessOrder.push(e),this.stateHistory.set(e,t);this.routeAccessOrder.length>this.maxHistorySize;){let e=this.routeAccessOrder.shift();e&&this.stateHistory.delete(e)}}getHistorySize(){return this.stateHistory.size}hasState(e){return this.stateHistory.has(e)}getState(e){return this.stateHistory.get(e)}clearAll(){this.stateHistory.clear(),this.routeAccessOrder=[]}clearState(e){this.stateHistory.delete(e);let t=this.routeAccessOrder.indexOf(e);t!==-1&&this.routeAccessOrder.splice(t,1)}restoreState(e){let t=this.stateHistory.get(e);if(!t)return!1;let n=!0;return this.restoreScrollPositions(t.scrollPositions)||(n=!1),this.restoreFormData(t.formData)||(n=!1),t.focusedElement&&this.restoreFocus(t.focusedElement),n}restoreScrollPositions(e){let t=!0;try{e.forEach((e,n)=>{try{if(n===`window`)window.scrollTo(e.x,e.y);else{let r=document.getElementById(n)||document.querySelector(`[data-scrollable-id="${n}"]`);r instanceof HTMLElement?(r.scrollLeft=e.x,r.scrollTop=e.y):t=!1}}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore scroll positions:`,e),t=!1}return t}restoreFormData(e){let t=!0;try{e.forEach((e,n)=>{try{let r=document.getElementById(n)||document.querySelector(`form[name="${n}"]`)||document.querySelectorAll(`form`)[Number.parseInt(n.replace(`form-`,``),10)];r instanceof HTMLFormElement?e.forEach((e,n)=>{try{let t=r.elements.namedItem(n);t instanceof RadioNodeList?t.forEach(t=>{t instanceof HTMLInputElement&&(t.type===`radio`||t.type===`checkbox`?t.checked=t.value===e:t.value=e)}):(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)&&(t instanceof HTMLInputElement&&(t.type===`checkbox`||t.type===`radio`)?t.checked=t.value===e:t.value=e)}catch{t=!1}}):t=!1}catch{t=!1}})}catch(e){console.error(`[rari] Router: Failed to restore form data:`,e),t=!1}return t}restoreFocus(e){try{let t=document.querySelector(e);t instanceof HTMLElement&&requestAnimationFrame(()=>{try{t.focus()}catch{}})}catch{}}};function J(e,t){let n=document.querySelector(e);if(n)t.content&&n.setAttribute(`content`,t.content);else{n=document.createElement(`meta`);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);document.head.appendChild(n)}}function Y(e){let t=document.querySelector(e);t&&t.remove()}function X(e){e.title&&(document.title=e.title),e.description?J(`meta[name="description"]`,{name:`description`,content:e.description}):Y(`meta[name="description"]`),e.keywords&&e.keywords.length>0?J(`meta[name="keywords"]`,{name:`keywords`,content:e.keywords.join(`, `)}):Y(`meta[name="keywords"]`),e.viewport&&J(`meta[name="viewport"]`,{name:`viewport`,content:e.viewport})}function Z(e){let t=document.querySelector(`link[rel="canonical"]`);if(e===void 0){t&&t.remove();return}if(t)t.setAttribute(`href`,e);else{let t=document.createElement(`link`);t.setAttribute(`rel`,`canonical`),t.setAttribute(`href`,e),document.head.appendChild(t)}}function Q(e){if(e===void 0){Y(`meta[name="robots"]`);return}let t=[];e.index!==void 0&&t.push(e.index?`index`:`noindex`),e.follow!==void 0&&t.push(e.follow?`follow`:`nofollow`),e.nocache&&t.push(`nocache`),t.length>0?J(`meta[name="robots"]`,{name:`robots`,content:t.join(`, `)}):Y(`meta[name="robots"]`)}function $(e){if(e===void 0){Y(`meta[property="og:title"]`),Y(`meta[property="og:description"]`),Y(`meta[property="og:url"]`),Y(`meta[property="og:site_name"]`),Y(`meta[property="og:type"]`),document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());return}if(e.title?J(`meta[property="og:title"]`,{property:`og:title`,content:e.title}):Y(`meta[property="og:title"]`),e.description?J(`meta[property="og:description"]`,{property:`og:description`,content:e.description}):Y(`meta[property="og:description"]`),e.url?J(`meta[property="og:url"]`,{property:`og:url`,content:e.url}):Y(`meta[property="og:url"]`),e.siteName?J(`meta[property="og:site_name"]`,{property:`og:site_name`,content:e.siteName}):Y(`meta[property="og:site_name"]`),e.type?J(`meta[property="og:type"]`,{property:`og:type`,content:e.type}):Y(`meta[property="og:type"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`property`,`og:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>e.remove())}function re(e){if(e===void 0){Y(`meta[name="twitter:card"]`),Y(`meta[name="twitter:site"]`),Y(`meta[name="twitter:creator"]`),Y(`meta[name="twitter:title"]`),Y(`meta[name="twitter:description"]`),document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());return}if(e.card?J(`meta[name="twitter:card"]`,{name:`twitter:card`,content:e.card}):Y(`meta[name="twitter:card"]`),e.site?J(`meta[name="twitter:site"]`,{name:`twitter:site`,content:e.site}):Y(`meta[name="twitter:site"]`),e.creator?J(`meta[name="twitter:creator"]`,{name:`twitter:creator`,content:e.creator}):Y(`meta[name="twitter:creator"]`),e.title?J(`meta[name="twitter:title"]`,{name:`twitter:title`,content:e.title}):Y(`meta[name="twitter:title"]`),e.description?J(`meta[name="twitter:description"]`,{name:`twitter:description`,content:e.description}):Y(`meta[name="twitter:description"]`),e.images&&e.images.length>0){document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove());for(let t of e.images){let e=document.createElement(`meta`);e.setAttribute(`name`,`twitter:image`),e.setAttribute(`content`,t),document.head.appendChild(e)}}else document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>e.remove())}function ie(e){X(e),Z(e.canonical),Q(e.robots),$(e.openGraph),re(e.twitter)}function ae({children:n,initialRoute:r,staleWindowMs:i=3e4}){let[a,o]=ee(()=>({currentRoute:H(r),navigationId:0,error:null})),s=x(null),c=x(!0),l=x(H(r)),u=x(0),d=x(new N({timeout:1e4,maxRetries:3,onError:e=>{console.error(`[rari] Router: Navigation error:`,e)},onRetry:()=>{}})),f=x(new Map),p=x([]),m=x(new q({maxHistorySize:50})),h=x(null),g=x(i),_=()=>`${Date.now()}-${Math.random().toString(36).substring(2,9)}`,v=()=>{s.current&&=(s.current.abort(),null)},T=()=>{for(let[,e]of f.current.entries())e.abortController.abort();f.current.clear()},E=(e,t)=>{f.current.delete(e),c.current&&a.navigationId===t&&o(e=>({...e}))},D=async e=>K.get(e),O=x(null),k=(e,t)=>{if(!t)return;let n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,`${e}#${t}`))},A=e=>{try{let t=e.headers.get(`x-rari-metadata`);t&&ie(JSON.parse(decodeURIComponent(t)))}catch(e){console.warn(`[rari] Router: Failed to parse x-rari-metadata header:`,e)}},j=async(e,t,n,r,i,a,o,s,c)=>{if(!e.body)return;let l=e.body.getReader(),u=new TextDecoder,d=``;try{for(;;){let{done:e,value:r}=await l.read();if(e)break;if(t.signal.aborted){await l.cancel(),E(n,i);return}d+=u.decode(r,{stream:!0});let a=d.split(`
2
+ `);d=a.pop()||``;for(let e of a)e.trim()&&window.dispatchEvent(new CustomEvent(`rari:rsc-row`,{detail:{rscRow:e,navigationId:i}}))}d+=u.decode(),d.trim()&&window.dispatchEvent(new CustomEvent(`rari:rsc-row`,{detail:{rscRow:d,navigationId:i}})),window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:a,to:r,navigationId:i,options:o,routeInfo:{...s,extractedParams:c},abortSignal:t.signal,isStreaming:!0}}))}catch(e){throw console.error(`[rari] Router: Streaming error:`,e),e}},M=async(e,t,n,r,i,a,o,s)=>{let c=await e.text();window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:t,to:n,navigationId:r,options:i,routeInfo:{...a,extractedParams:o},abortSignal:s.signal,rscWireFormat:c}}))},P=(e,t,n)=>{n.historyKey?requestAnimationFrame(()=>{m.current.restoreState(e)}):t&&requestAnimationFrame(()=>{let e=(n=0)=>{let r=document.getElementById(t);r?r.scrollIntoView({behavior:`smooth`,block:`start`}):n<10&&setTimeout(e,50,n+1)};e()})},F=(e,t,n,r)=>{c.current&&(l.current=e,o(t=>({...t,currentRoute:e,navigationId:r,error:null})),d.current.resetRetry(e),P(e,t,n))},I=(e,t,n,r)=>{if(e instanceof Error&&e.name===`AbortError`){E(t,n);return}let i=d.current.handleError(e,t);c.current&&o(e=>({...e,error:i})),f.current.delete(t),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:r,to:t,error:i,navigationId:n}})),O.current?.()},L=async(e,t={})=>{if(!e||typeof e!=`string`){console.error(`[rari] Router: Invalid navigation target:`,e);return}let[n,r]=e.includes(`#`)?e.split(`#`):[e,``],i=H(n);if(i===l.current&&!t.replace){k(i,r);return}let a=f.current.get(i);if(a)return a.promise;let o=await D(i);T(),v();let c=new AbortController;s.current=c,u.current+=1;let d=u.current;window.dispatchEvent(new CustomEvent(`rari:navigation-start`,{detail:{navigationId:d,targetPath:i}}));let p=(async()=>{let e=l.current;try{t.historyKey||m.current.captureState(e);let n=t.historyKey||_(),a=window.location.origin+i,s=await fetch(a,{headers:{Accept:`text/x-component`},signal:c.signal});if(!s.ok&&s.status!==404)throw Error(`Failed to fetch: ${s.status}`);let l=new URL(s.url).pathname;if(c.signal.aborted){E(i,d);return}let u=r?`${l}#${r}`:l,p={route:l,navigationId:d,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:n};t.replace?window.history.replaceState(p,``,u):window.history.pushState(p,``,u),A(s);let h=s.headers.get(`x-render-mode`)===`streaming`,g=o?.segments&&ne(``,o.segments,l)||{};if(h&&s.body?await j(s,c,i,l,d,e,t,o,g):await M(s,e,l,d,t,o,g,c),c.signal.aborted){E(i,d);return}F(l,r,t,d),f.current.delete(i),O.current?.()}catch(t){I(t,i,d,e)}})();return f.current.set(i,{targetPath:i,navigationId:d,promise:p,abortController:c}),p},R=async()=>{if(p.current.length===0)return;let e=p.current.at(-1);e&&(p.current=[],await L(e.path,e.options))},z=x(L);b(()=>(O.current=R,z.current=L,()=>{O.current=null,z.current=null}));let B=x(null);B.current||=te((e,t)=>{z.current?.(e,t)},50,{leading:!1,trailing:!0,maxWait:200});let V=e=>{if(e.button!==0||e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)return;let t=e.target;for(;t&&t.tagName!==`A`;)t=t.parentElement;if(!t||t.tagName!==`A`)return;let n=t;if(n.target&&n.target!==`_self`||n.hasAttribute(`download`))return;let r=n.getAttribute(`href`);if(!r||U(r))return;if(r.startsWith(`#`)){e.preventDefault();let t=r.slice(1),n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`,block:`start`}),window.history.pushState(window.history.state,``,r));return}e.preventDefault();let i=W(r);B.current&&B.current(i,{replace:!1})},J=e=>{let t=window.location.pathname,n=e.state;z.current&&z.current(t,{replace:!0,scroll:!1,historyKey:n?.key})},Y=()=>{if(a.error&&a.error.url){let e=a.error.url;d.current.incrementRetry(e),L(e,{replace:!1})}},X=()=>{window.location.reload()},Z=()=>{o(e=>({...e,error:null}))};y(()=>{let e=window.history.state;if(!e||!e.key){let e={route:H(r),navigationId:0,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:_()};window.history.replaceState(e,``,window.location.pathname+window.location.search+window.location.hash)}},[r]);let Q=e=>{if(e.persisted){let e=window.location.pathname;m.current.captureState(e)}},$=e=>{if(e.persisted){let e=window.location.pathname,t=window.history.state;requestAnimationFrame(()=>{m.current.restoreState(e),t?.scrollPosition&&window.scrollTo(t.scrollPosition.x,t.scrollPosition.y)})}};return y(()=>(document.addEventListener(`click`,V),window.addEventListener(`popstate`,J),window.addEventListener(`pagehide`,Q),window.addEventListener(`pageshow`,$),()=>{document.removeEventListener(`click`,V),window.removeEventListener(`popstate`,J),window.removeEventListener(`pagehide`,Q),window.removeEventListener(`pageshow`,$)}),[]),y(()=>{g.current=i;let e=()=>{document.hidden?h.current=Date.now():h.current!==null&&Date.now()-h.current>g.current&&K.clear()};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[i]),y(()=>(c.current=!0,e((e,t)=>z.current?.(e,t)??Promise.resolve()),()=>{c.current=!1,t(),v(),T(),B.current?.cancel&&B.current.cancel()}),[]),w(S,{children:[n,a.error&&C(G,{error:a.error,onRetry:Y,onReload:X,onDismiss:Z,retryCount:d.current.getRetryCount(a.error.url||``),maxRetries:3})]})}var oe=class extends v{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[rari] Layout: Error in layout "${this.props.layoutPath}":`,e,t),this.props.onError&&this.props.onError(e,t),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:layout-error`,{detail:{layoutPath:this.props.layoutPath,error:e,errorInfo:t,timestamp:Date.now()}}))}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):w(`div`,{style:{padding:`16px`,margin:`16px 0`,background:`#fee`,border:`1px solid #fcc`,borderRadius:`4px`},children:[C(`h3`,{style:{margin:`0 0 8px 0`,color:`#c00`},children:`Layout Error`}),w(`p`,{style:{margin:`0 0 8px 0`,fontSize:`14px`},children:[`An error occurred in layout:`,` `,C(`code`,{children:this.props.layoutPath})]}),w(`details`,{style:{fontSize:`12px`,marginBottom:`8px`},children:[C(`summary`,{style:{cursor:`pointer`},children:`Error details`}),w(`pre`,{style:{marginTop:`8px`,padding:`8px`,background:`#fff`,border:`1px solid #ddd`,borderRadius:`2px`,overflow:`auto`},children:[this.state.error.message,`
3
+ `,this.state.error.stack]})]}),C(`button`,{onClick:this.reset,type:`button`,style:{padding:`6px 12px`,background:`#c00`,color:`white`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontSize:`14px`},children:`Try Again`})]}):this.props.children}};export{ae as ClientRouter,_ as DefaultError,f as DefaultLoading,h as ErrorBoundary,l as HttpRuntimeClient,oe as LayoutErrorBoundary,r as LoadingSpinner,N as NavigationErrorHandler,G as NavigationErrorOverlay,p as NotFound,q as StatePreserver,a as clearPropsCache,o as clearPropsCacheForComponent,g as createErrorBoundary,i as createHttpRuntimeClient,u as createLoadingBoundary,m as extractMetadata,d as extractServerProps,c as extractServerPropsWithCache,s as extractStaticParams,n as hasServerSideDataFetching};
@@ -0,0 +1,6 @@
1
+ import { i as ReadonlyCookie, n as CookieStore, t as CookieOptions } from "./types-DDyPWiSH.mjs";
2
+
3
+ //#region src/headers.d.ts
4
+ declare function cookies(): Promise<CookieStore>;
5
+ //#endregion
6
+ export { type CookieOptions, type CookieStore, type ReadonlyCookie, cookies };
@@ -0,0 +1 @@
1
+ async function e(){let e=globalThis[`~rari`]?.cookies?.();if(!e)throw Error(`[rari] cookies() is only available in server actions and server components.`);return e}export{e as cookies};
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
1
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/image/constants.d.ts
4
4
  type ImageFormat = 'avif' | 'webp';
@@ -61,6 +61,6 @@ declare function Image({
61
61
  loader,
62
62
  overrideSrc,
63
63
  decoding
64
- }: ImageProps): react_jsx_runtime0.JSX.Element;
64
+ }: ImageProps): _$react_jsx_runtime0.JSX.Element;
65
65
  //#endregion
66
66
  export { DEFAULT_DEVICE_SIZES, DEFAULT_FORMATS, DEFAULT_IMAGE_SIZES, DEFAULT_MAX_CACHE_SIZE, DEFAULT_MINIMUM_CACHE_TTL, DEFAULT_QUALITY_LEVELS, Image, type ImageFormat, type ImageProps, type StaticImageData };
@@ -1 +1 @@
1
- import{a as e,i as t,n,o as r,r as i,t as a}from"../constants-WBHkQ1Nm.mjs";import{useCallback as o,useEffect as s,useRef as c,useState as l}from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";function f(e,t,n,r){let i=new URLSearchParams;return i.set(`url`,e),i.set(`w`,t.toString()),i.set(`q`,n.toString()),r&&i.set(`f`,r),`/_rari/image?${i}`}function p({src:e,alt:t,width:r,height:i,quality:p=75,preload:m=!1,loading:h=`lazy`,placeholder:g=`empty`,blurDataURL:_,fill:v=!1,sizes:y,style:b,className:x,onLoad:S,onError:C,unoptimized:w=!1,loader:T,overrideSrc:E,decoding:D}){let O=typeof e==`string`?e:e.src,k=r||(typeof e==`string`?void 0:e.width),A=i||(typeof e==`string`?void 0:e.height),j=_||(typeof e==`string`?void 0:e.blurDataURL),M=E||O,N=m,P=D||(m?`sync`:`async`),[F,I]=l(!1),[L,R]=l(!1),z=c(null),B=c(S),V=c(null);s(()=>{B.current=S},[S]);let H=o(e=>{let t=e.currentTarget;t.src&&t.complete&&(g===`blur`&&I(!0),B.current&&B.current(e))},[g]),U=o(e=>{R(!0),g===`blur`&&I(!0),C&&C(e)},[g,C]);s(()=>{if(N){let e=document.createElement(`link`);return e.rel=`preload`,e.as=`image`,T?e.href=T({src:M,width:k||1920,quality:p}):w?e.href=M:e.href=f(M,k||1920,p),y&&e.setAttribute(`imagesizes`,y),document.head.appendChild(e),()=>{e.parentNode===document.head&&document.head.removeChild(e)}}},[N,M,k,p,y,T,w]),s(()=>{if(N||w||h===`eager`)return;let e=z.current;if(!e)return;let t=new IntersectionObserver(n=>{n.forEach(n=>{n.isIntersecting&&t.unobserve(e)})},{rootMargin:`50px`});return t.observe(e),()=>{t.disconnect()}},[N,w,h]);let W={...b,...v&&{position:`absolute`,inset:0,width:`100%`,height:`100%`,objectFit:`cover`},...g===`blur`&&j&&!F&&{backgroundImage:`url(${j})`,backgroundSize:`cover`,backgroundPosition:`center`,filter:`blur(20px)`,transition:`filter 0.3s ease-out`},...g===`blur`&&F&&{filter:`none`,transition:`filter 0.3s ease-out`}};if(w)return u(`img`,{ref:z,src:T?T({src:M,width:k||1920,quality:p}):M,alt:L?t:``,width:v?void 0:k,height:v?void 0:A,loading:N?`eager`:h,fetchPriority:N?`high`:`auto`,decoding:P,onLoad:H,onError:U,style:W,className:x});let G=k||1920,K=k?[k]:a,q=e=>T?K.map(e=>`${T({src:M,width:e,quality:p})} ${e}w`).join(`, `):K.map(t=>`${f(M,t,p,e)} ${t}w`).join(`, `),J=T?T({src:M,width:G,quality:p}):f(M,G,p),Y=K.length>1||K[0]!==G,X=u(`img`,{ref:z,src:J,srcSet:Y?q():void 0,sizes:Y?y:void 0,alt:L?t:``,width:v?void 0:k,height:v?void 0:A,loading:N?`eager`:h,fetchPriority:N?`high`:`auto`,decoding:P,onLoad:H,onError:U,style:W,className:x});return Y?d(`picture`,{ref:V,children:[n.includes(`avif`)&&u(`source`,{type:`image/avif`,srcSet:q(`avif`),sizes:y}),n.includes(`webp`)&&u(`source`,{type:`image/webp`,srcSet:q(`webp`),sizes:y}),X]}):X}export{a as DEFAULT_DEVICE_SIZES,n as DEFAULT_FORMATS,i as DEFAULT_IMAGE_SIZES,t as DEFAULT_MAX_CACHE_SIZE,e as DEFAULT_MINIMUM_CACHE_TTL,r as DEFAULT_QUALITY_LEVELS,p as Image};
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"../constants-B68HGlJT.mjs";import{useCallback as o,useEffect as s,useRef as c,useState as l}from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";function f(e,t,n,r){let i=new URLSearchParams;return i.set(`url`,e),i.set(`w`,t.toString()),i.set(`q`,n.toString()),r&&i.set(`f`,r),`/_rari/image?${i}`}function p({src:e,alt:t,width:r,height:i,quality:p=75,preload:m=!1,loading:h=`lazy`,placeholder:g=`empty`,blurDataURL:_,fill:v=!1,sizes:y,style:b,className:x,onLoad:S,onError:C,unoptimized:w=!1,loader:T,overrideSrc:E,decoding:D}){let O=typeof e==`string`?e:e.src,k=r||(typeof e==`string`?void 0:e.width),A=i||(typeof e==`string`?void 0:e.height),j=_||(typeof e==`string`?void 0:e.blurDataURL),M=E||O,N=m,P=D||(m?`sync`:`async`),[F,I]=l(!1),[L,R]=l(!1),z=c(null),B=c(S),V=c(null);s(()=>{B.current=S},[S]);let H=o(e=>{let t=e.currentTarget;t.src&&t.complete&&(g===`blur`&&I(!0),B.current&&B.current(e))},[g]),U=o(e=>{R(!0),g===`blur`&&I(!0),C&&C(e)},[g,C]);s(()=>{if(N){let e=document.createElement(`link`);return e.rel=`preload`,e.as=`image`,T?e.href=T({src:M,width:k||1920,quality:p}):w?e.href=M:e.href=f(M,k||1920,p),y&&e.setAttribute(`imagesizes`,y),document.head.appendChild(e),()=>{e.parentNode===document.head&&document.head.removeChild(e)}}},[N,M,k,p,y,T,w]),s(()=>{if(N||w||h===`eager`)return;let e=z.current;if(!e)return;let t=new IntersectionObserver(n=>{n.forEach(n=>{n.isIntersecting&&t.unobserve(e)})},{rootMargin:`50px`});return t.observe(e),()=>{t.disconnect()}},[N,w,h]);let W={...b,...v&&{position:`absolute`,inset:0,width:`100%`,height:`100%`,objectFit:`cover`},...g===`blur`&&j&&!F&&{backgroundImage:`url(${j})`,backgroundSize:`cover`,backgroundPosition:`center`,filter:`blur(20px)`,transition:`filter 0.3s ease-out`},...g===`blur`&&F&&{filter:`none`,transition:`filter 0.3s ease-out`}};if(w)return u(`img`,{ref:z,src:T?T({src:M,width:k||1920,quality:p}):M,alt:L?t:``,width:v?void 0:k,height:v?void 0:A,loading:N?`eager`:h,fetchPriority:N?`high`:`auto`,decoding:P,onLoad:H,onError:U,style:W,className:x});let G=k||1920,K=k?[k]:a,q=e=>T?K.map(e=>`${T({src:M,width:e,quality:p})} ${e}w`).join(`, `):K.map(t=>`${f(M,t,p,e)} ${t}w`).join(`, `),J=T?T({src:M,width:G,quality:p}):f(M,G,p),Y=K.length>1||K[0]!==G,X=u(`img`,{ref:z,src:J,srcSet:Y?q():void 0,sizes:Y?y:void 0,alt:L?t:``,width:v?void 0:k,height:v?void 0:A,loading:N?`eager`:h,fetchPriority:N?`high`:`auto`,decoding:P,onLoad:H,onError:U,style:W,className:x});return Y?d(`picture`,{ref:V,children:[n.includes(`avif`)&&u(`source`,{type:`image/avif`,srcSet:q(`avif`),sizes:y}),n.includes(`webp`)&&u(`source`,{type:`image/webp`,srcSet:q(`webp`),sizes:y}),X]}):X}export{a as DEFAULT_DEVICE_SIZES,n as DEFAULT_FORMATS,i as DEFAULT_IMAGE_SIZES,t as DEFAULT_MAX_CACHE_SIZE,e as DEFAULT_MINIMUM_CACHE_TTL,r as DEFAULT_QUALITY_LEVELS,p as Image};
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { d as Metadata, l as LayoutProps, p as PageProps } from "./types-Cfe0C3JU.mjs";
2
- import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-BDdxZuGv.mjs";
3
- import { c as RariURL, n as ProxyConfig, r as ProxyFunction, s as RariFetchEvent } from "./types-BhqnAV4k.mjs";
2
+ import { a as SitemapImage, i as SitemapEntry, n as RobotsRule, o as SitemapVideo, r as Sitemap, t as Robots } from "./metadata-route-CyBO6ooC.mjs";
3
+ import { c as RariURL, n as ProxyConfig, r as ProxyFunction, s as RariFetchEvent } from "./types-DovC7o1Y.mjs";
4
4
  import { RariRequest } from "./proxy/RariRequest.mjs";
5
5
  import { RariResponse } from "./proxy/RariResponse.mjs";
6
6
  export { type LayoutProps, type Metadata, type PageProps, type ProxyConfig, type ProxyFunction, type RariFetchEvent, RariRequest, RariResponse, type RariURL, type Robots, type RobotsRule, type Sitemap, type SitemapEntry, type SitemapImage, type SitemapVideo };
package/dist/mdx.mjs CHANGED
@@ -1 +1 @@
1
- import{d as e}from"./regex-constants-DOQkuGm5.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{u as e}from"./regex-constants-CmOAY1_W.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};
@@ -0,0 +1 @@
1
+ import{C as e,t}from"./regex-constants-CmOAY1_W.mjs";async function n(n){let r=globalThis[`~clientComponents`]||{},i=[];for(let[,a]of n){let n=[a.id,`${a.id}#${a.name||`default`}`,a.id.replace(e,``),a.id.replace(t,`/`)];for(let e of n){let t=r[e];if(t?.loader&&!t.component&&!t.loading){t.loading=!0,t.loadPromise=t.loader().then(e=>{t.component=e.default||e,t.registered=!0,t.loading=!1}).catch(n=>{t.loading=!1,t.loadPromise=void 0,console.error(`[rari] Failed to preload component ${e}:`,n)}),i.push(t.loadPromise);break}}}i.length>0&&await Promise.all(i)}export{n as t};
@@ -1,4 +1,4 @@
1
- import { c as RariURL, l as RequestCookies } from "../types-BhqnAV4k.mjs";
1
+ import { c as RariURL, l as RequestCookies } from "../types-DovC7o1Y.mjs";
2
2
 
3
3
  //#region src/proxy/RariRequest.d.ts
4
4
  declare class RariRequest {
@@ -1,4 +1,4 @@
1
- import { u as ResponseCookies } from "../types-BhqnAV4k.mjs";
1
+ import { u as ResponseCookies } from "../types-DovC7o1Y.mjs";
2
2
 
3
3
  //#region src/proxy/RariResponse.d.ts
4
4
  declare class RariResponse extends Response {
@@ -0,0 +1 @@
1
+ const e=/\.(?:tsx?|jsx?)$/,t=/^[A-Z]:\\/i,n=/\\/g,r=/[/\\]/,i=/\/$/,a=/^src\//,o=/^file:\/\//,s=/^https?:\/\//,c={AMPERSAND:/&/g,LT:/</g,GT:/>/g,QUOTE:/"/g,APOS:/'/g},l=c.AMPERSAND,u=c.LT,d=c.GT,f=c.QUOTE,p=c.APOS,m=l,h=u,g=d,_=f,v=p,y=l,b=u,x=d,S=f,C=p,w=/[^\w/-]/g,T=/^\d+$/,E=/([a-z])([A-Z])/g,D=/^export\s+default\s+function\s+(\w+)/gm,O=/^export\s+default\s+async\s+function\s+(\w+)/gm,k=/^export\s+default\s+(\w+);?\s*$/gm,A=/^export\s*\{\s*(\w+)\s+as\s+default\s*\};?\s*$/gm,j=/^export\s+(?:async\s+)?function\s+(\w+)/gm,M=/export\s+(?:function|const|class)\s+(\w+)/,N=/\.[^.]*$/,P=/\r?\n/,F=/['"]/g;export{S as A,a as C,C as D,y as E,x as O,F as S,t as T,s as _,A as a,r as b,j as c,o as d,m as f,_ as g,h,O as i,b as k,M as l,g as m,E as n,D as o,v as p,w as r,k as s,n as t,N as u,P as v,e as w,i as x,T as y};
@@ -1,2 +1,2 @@
1
- import{promises as e}from"node:fs";import t from"node:path";import{Buffer as n}from"node:buffer";function r(e){return Array.isArray(e)?e:e?[e]:[`*`]}function i(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).filter(e=>e!==``)}function a(e){let t=[],n=r(e.userAgent);for(let r of n){t.push(`User-Agent: ${r}`);let n=i(e.allow);for(let e of n)t.push(`Allow: ${e}`);let a=i(e.disallow);for(let e of a)t.push(`Disallow: ${e}`);e.crawlDelay!==void 0&&t.push(`Crawl-delay: ${e.crawlDelay}`),t.push(``)}return t}function o(e){return e?[`Host: ${e}`,``]:[]}function s(e){return i(e).map(e=>`Sitemap: ${e}`)}function c(e){let t=[],n=Array.isArray(e.rules)?e.rules:[e.rules];for(let e of n)t.push(...a(e));return t.push(...o(e.host)),t.push(...s(e.sitemap)),t.join(`
2
- `)}async function l(n,r=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`]){let i=t.join(n,`robots.txt`);try{return await e.access(i),{type:`static`,path:i}}catch(e){if(e?.code!==`ENOENT`)throw e}for(let i of r){let r=t.join(n,`robots${i}`);try{return await e.access(r),{type:`dynamic`,path:r}}catch(e){if(e?.code!==`ENOENT`)throw e}}return null}async function u(r){let{appDir:i,outDir:a,extensions:o}=r,s=await l(i,o);if(!s)return!1;let u=t.join(a,`robots.txt`);if(await e.mkdir(t.dirname(u),{recursive:!0}),s.type===`static`)return await e.copyFile(s.path,u),!0;try{let{build:r}=await import(`rolldown`),i=await e.readFile(s.path,`utf-8`),a=`\0virtual:robots`,o=await r({input:a,external:[`rari`],platform:`node`,write:!1,output:{format:`esm`,codeSplitting:!1},plugins:[{name:`virtual-robots`,resolveId(e){return e===a?e:e.startsWith(`.`)?t.resolve(t.dirname(s.path),e):null},load(e){if(e===a){let e=t.extname(s.path).slice(1),n;switch(e){case`ts`:n=`ts`;break;case`tsx`:n=`tsx`;break;case`js`:case`mjs`:case`cjs`:n=`js`;break;case`jsx`:n=`jsx`;break;default:throw Error(`Unsupported robots file extension: .${e}. Supported extensions are: .ts, .tsx, .js, .jsx, .mjs, .cjs`)}return{code:i,moduleType:n}}return null}}]});if(!o.output||o.output.length===0)throw Error(`Failed to build robots module`);let l=o.output.find(e=>e.type===`chunk`&&e.isEntry)||o.output.find(e=>e.type===`chunk`);if(!l||l.type!==`chunk`)throw Error(`No chunk output found in robots build result`);let d=l.code,f=await import(`data:text/javascript;base64,${n.from(d).toString(`base64`)}`);if(!f||f.default==null)throw Error(`Robots file must export a default export (either an object or a function)`);let p;if(typeof f.default==`function`){let e=f.default();p=e instanceof Promise?await e:e}else p=f.default;let m=c(p);return await e.writeFile(u,m),!0}catch(e){return console.error(`[rari] Failed to build/execute robots file:`,e),!1}}export{u as generateRobotsFile};
1
+ import{Buffer as e}from"node:buffer";import{promises as t}from"node:fs";import n from"node:path";function r(e){return Array.isArray(e)?e:e?[e]:[`*`]}function i(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).filter(e=>e!==``)}function a(e){let t=[],n=r(e.userAgent);for(let r of n){t.push(`User-Agent: ${r}`);let n=i(e.allow);for(let e of n)t.push(`Allow: ${e}`);let a=i(e.disallow);for(let e of a)t.push(`Disallow: ${e}`);e.crawlDelay!==void 0&&t.push(`Crawl-delay: ${e.crawlDelay}`),t.push(``)}return t}function o(e){return e?[`Host: ${e}`,``]:[]}function s(e){return i(e).map(e=>`Sitemap: ${e}`)}function c(e){let t=[],n=Array.isArray(e.rules)?e.rules:[e.rules];for(let e of n)t.push(...a(e));return t.push(...o(e.host)),t.push(...s(e.sitemap)),t.join(`
2
+ `)}async function l(e,r=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`]){let i=n.join(e,`robots.txt`);try{return await t.access(i),{type:`static`,path:i}}catch(e){if(e?.code!==`ENOENT`)throw e}for(let i of r){let r=n.join(e,`robots${i}`);try{return await t.access(r),{type:`dynamic`,path:r}}catch(e){if(e?.code!==`ENOENT`)throw e}}return null}async function u(r){let{appDir:i,outDir:a,extensions:o}=r,s=await l(i,o);if(!s)return!1;let u=n.join(a,`robots.txt`);if(await t.mkdir(n.dirname(u),{recursive:!0}),s.type===`static`)return await t.copyFile(s.path,u),!0;try{let{build:r}=await import(`rolldown`),i=await t.readFile(s.path,`utf-8`),a=`\0virtual:robots`,o=await r({input:a,external:[`rari`],platform:`node`,write:!1,output:{format:`esm`,codeSplitting:!1},plugins:[{name:`virtual-robots`,resolveId(e){return e===a?e:e.startsWith(`.`)?n.resolve(n.dirname(s.path),e):null},load(e){if(e===a){let e=n.extname(s.path).slice(1),t;switch(e){case`ts`:t=`ts`;break;case`tsx`:t=`tsx`;break;case`js`:case`mjs`:case`cjs`:t=`js`;break;case`jsx`:t=`jsx`;break;default:throw Error(`Unsupported robots file extension: .${e}. Supported extensions are: .ts, .tsx, .js, .jsx, .mjs, .cjs`)}return{code:i,moduleType:t}}return null}}]});if(!o.output||o.output.length===0)throw Error(`Failed to build robots module`);let l=o.output.find(e=>e.type===`chunk`&&e.isEntry)||o.output.find(e=>e.type===`chunk`);if(!l||l.type!==`chunk`)throw Error(`No chunk output found in robots build result`);let d=l.code,f=await import(`data:text/javascript;base64,${e.from(d).toString(`base64`)}`);if(!f||f.default==null)throw Error(`Robots file must export a default export (either an object or a function)`);let p;if(typeof f.default==`function`){let e=f.default();p=e instanceof Promise?await e:e}else p=f.default;let m=c(p);return await t.writeFile(u,m),!0}catch(e){return console.error(`[rari] Failed to build/execute robots file:`,e),!1}}export{u as generateRobotsFile};
package/dist/router.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
1
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/router/navigation-types.d.ts
4
4
  interface NavigationOptions {
@@ -30,7 +30,7 @@ interface RouterProviderProps {
30
30
  declare function RouterProvider({
31
31
  children,
32
32
  initialPathname
33
- }: RouterProviderProps): react_jsx_runtime0.JSX.Element;
33
+ }: RouterProviderProps): _$react_jsx_runtime0.JSX.Element;
34
34
  declare function useRouter(): RouterContextValue;
35
35
  declare function usePathname(): string;
36
36
  declare function useParams(): Record<string, string | string[]>;
@@ -0,0 +1 @@
1
+ import{t as e}from"./rolldown-runtime-DR3Ue2cl.mjs";import{b as t,t as n}from"./regex-constants-CmOAY1_W.mjs";import{promises as r}from"node:fs";import i from"node:path";var a=e({generateAppRouteManifest:()=>f});const o={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`},s={DYNAMIC:/^\[([^\]]+)\]$/,CATCH_ALL:/^\[\.\.\.([^\]]+)\]$/,OPTIONAL_CATCH_ALL:/^\[\[\.\.\.([^\]]+)\]\]$/},c=/export\s+const\s+size\s*=\s*\{\s*width\s*:\s*(\d+)\s*,\s*height\s*:\s*(\d+)\s*[,}]/,l=/export\s+const\s+contentType\s*=\s*['"]([^'"]+)['"]/,u=[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`];var d=class{appDir;extensions;verbose;constructor(e){this.appDir=i.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,a,o,s,c,l){let u=i.join(this.appDir,e),d;try{d=await r.readdir(u)}catch{return}let f=[],p=[];for(let e of d){let t=i.join(u,e),n=await r.stat(t);n.isDirectory()?this.shouldScanDirectory(e)&&p.push(e):n.isFile()&&f.push(e)}await this.processSpecialFiles(e,f,t,n,a,o,s,c,l);for(let r of p){let u=e?i.join(e,r):r;await this.scanDirectory(u,t,n,a,o,s,c,l)}}async processSpecialFiles(e,t,a,s,u,d,f,p,m){let h=this.pathToRoute(e),g=this.findFile(t,o.PAGE);if(g){let t=this.parseRouteSegments(e),r=this.extractParams(t);a.push({path:h,filePath:i.join(e,g).replace(n,`/`),segments:t,params:r,isDynamic:r.length>0})}let _=this.findFile(t,o.LAYOUT);if(_){let t=this.getParentPath(e);s.push({path:h,filePath:i.join(e,_).replace(n,`/`),parentPath:t?this.pathToRoute(t):void 0})}let v=this.findFile(t,o.LOADING);if(v){let t=this.generateComponentId(h,`loading`);u.push({path:h,filePath:i.join(e,v).replace(n,`/`),componentId:t})}let y=this.findFile(t,o.ERROR);y&&d.push({path:h,filePath:i.join(e,y).replace(n,`/`)});let b=this.findFile(t,o.NOT_FOUND);b&&f.push({path:h,filePath:i.join(e,b).replace(n,`/`)});let x=this.findFile(t,o.OG_IMAGE);if(x){let t=i.join(e,x).replace(n,`/`),a=i.join(this.appDir,t),o,s,u;try{let e=await r.readFile(a,`utf-8`),t=e.match(c);t&&(o=Number.parseInt(t[1],10),s=Number.parseInt(t[2],10));let n=e.match(l);n&&(u=n[1])}catch{}m.push({path:h,filePath:t,width:o,height:s,contentType:u})}let S=this.findFile(t,o.ROUTE);if(S){let t=await this.processApiRouteFile(e,S);p.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(n,`/`).split(`/`).filter(Boolean).map(e=>s.OPTIONAL_CATCH_ALL.test(e)?`[[...${e.match(s.OPTIONAL_CATCH_ALL)[1]}]]`:s.CATCH_ALL.test(e)?`[...${e.match(s.CATCH_ALL)[1]}]`:s.DYNAMIC.test(e)?`[${e.match(s.DYNAMIC)[1]}]`:e).join(`/`)}`:`/`}parseRouteSegments(e){return e?e.split(t).filter(Boolean).map(e=>s.OPTIONAL_CATCH_ALL.test(e)?{type:`optional-catch-all`,value:e,param:e.match(s.OPTIONAL_CATCH_ALL)[1]}:s.CATCH_ALL.test(e)?{type:`catch-all`,value:e,param:e.match(s.CATCH_ALL)[1]}:s.DYNAMIC.test(e)?{type:`dynamic`,value:e,param:e.match(s.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 n=e.split(t).filter(Boolean);return n.length===0?null:n.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=i.join(this.appDir,e),n=await r.readFile(t,`utf-8`),a=[];for(let e of u){let t=RegExp(`export\\s+(?:async\\s+)?function\\s+${e}\\s*\\(`),r=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${e}\\s*=`);(t.test(n)||r.test(n))&&a.push(e)}return a}async processApiRouteFile(e,t){let r=i.join(e,t).replace(n,`/`),a=this.pathToRoute(e),o=this.parseRouteSegments(e),s=this.extractParams(o),c=await this.detectHttpMethods(r);return{path:a,filePath:r,segments:o,params:s,isDynamic:s.length>0,methods:c}}};async function f(e,t={}){return new d({appDir:e,...t}).generateManifest()}export{a as n,f as t};
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/runtime/AppRouterProvider.d.ts
5
5
  interface AppRouterProviderProps {
@@ -21,6 +21,6 @@ declare function AppRouterProvider({
21
21
  children,
22
22
  initialPayload,
23
23
  onNavigate
24
- }: AppRouterProviderProps): react_jsx_runtime0.JSX.Element;
24
+ }: AppRouterProviderProps): _$react_jsx_runtime0.JSX.Element;
25
25
  //#endregion
26
26
  export { AppRouterProvider };
@@ -1,7 +1,10 @@
1
- "use client";import{S as e,b as t}from"../regex-constants-DOQkuGm5.mjs";import{t as n}from"../preload-components-DD3aKUwy.mjs";import*as r from"react";import{Suspense as i,useEffect as a,useRef as o,useState as s,useTransition as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";const f=/"timestamp":(\d+)/,p=/^[;\s]*$/;function m(){return d(`div`,{style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:9999},children:[u(`div`,{style:{width:`40px`,height:`40px`,border:`4px solid rgba(0, 0, 0, 0.1)`,borderTopColor:`#3b82f6`,borderRadius:`50%`,animation:`spin 1s linear infinite`}}),u(`style`,{children:`
1
+ "use client";import{x as e,y as t}from"../regex-constants-CmOAY1_W.mjs";import{t as n}from"../preload-components-Bp8OQWGz.mjs";import*as r from"react";import{Suspense as i,useEffect as a,useRef as o,useState as s,useTransition as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";const f=/"timestamp":(\d+)/,p=/^[;\s]*$/,ee=/^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)$/;function m(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(`"$S`)?!1:!!(n===84||t===`[`||t===`{`||e.startsWith(`E{`)||t===`"`||ee.test(e))}function te(){return d(`div`,{style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:9999},children:[u(`div`,{style:{width:`40px`,height:`40px`,border:`4px solid rgba(0, 0, 0, 0.1)`,borderTopColor:`#3b82f6`,borderRadius:`50%`,animation:`spin 1s linear infinite`}}),u(`style`,{children:`
2
2
  @keyframes spin {
3
3
  to { transform: rotate(360deg); }
4
4
  }
5
- `})]})}function ee({contentRef:e,rowsDataRef:t,modulesDataRef:n,symbolsDataRef:i,suspendingPromisesRef:a,getSuspendingPromise:o,rscToReact:s}){let c=t.current,l=n.current,u=i.current,d=a.current,f=c.has(e);if(r.useEffect(()=>{f&&d.has(e)&&d.delete(e)},[e,f,d]),f)return s(c.get(e),l,void 0,u,c);throw o(e)}function h({children:h,initialPayload:te,onNavigate:g}){let[_,v]=s(te),[,y]=s(0),b=o({x:0,y:0}),x=o(new Map),S=o(null),[,C]=c(),w=o(g),T=o(0),E=o(new Map),D=o([]),O=o(null),k=o(0),[A,j]=s(null),M=o(typeof window<`u`&&window.location.hash.length>0),N=o(0);a(()=>{w.current=g},[g]);let P=()=>{if(typeof document>`u`)return;let e=document.querySelectorAll(`form`);x.current.clear(),e.forEach((e,t)=>{let n=new FormData(e);x.current.set(`form-${t}`,n)})},F=()=>{typeof document>`u`||document.querySelectorAll(`form`).forEach((e,t)=>{let n=x.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)})})},I=(e,t,n,r)=>{let i={timestamp:Date.now(),error:e,type:t,details:n,filePath:r};D.current.push(i),k.current+=1,D.current.length>10&&D.current.shift(),console.error(`[rari] HMR: Failure detected`,{type:t,details:n,filePath:r,consecutiveFailures:k.current,error:e.message,stack:e.stack,timestamp:new Date(i.timestamp).toISOString()}),k.current>=2&&j(i),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:hmr-failure`,{detail:i}))},L=()=>{setTimeout(()=>{window.location.reload()},1e3)},R=()=>{k.current>0&&(k.current=0)},z=e=>{if(!O.current)return!1;if(e===O.current)return!0;let t=e.match(f);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1};function B(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 V(e,n,i,a,o){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[,s,c,l]=e,u=s;if(typeof s==`string`&&s.startsWith(`$`)&&a){let e=s.substring(1);if(t.test(e)){let e=a.get(s);e&&(e===`$Sreact.suspense`||e===`react.suspense`?u=`Suspense`:console.warn(`[rari] AppRouter: Unknown symbol:`,e))}}if(u===`Suspense`||s===`Suspense`){let e=J(l,n,i,a,o);return r.createElement(r.Suspense,c?{...e,key:c}:e)}if(typeof u==`string`&&u.startsWith(`$L`)){let e=n.get(u);if(!e)return null;let t=globalThis[`~clientComponents`]?.[e.id]?.component;if(!t||typeof t!=`function`)return null;let s=c||`fallback-${u}-${N.current++}`,d={...l,children:l.children?V(l.children,n,i,a,o):void 0};return r.createElement(t,{key:s,...d})}if(!u||typeof u!=`string`&&typeof u!=`function`)return console.error(`[rari] AppRouter: Invalid component type:`,{type:u,typeOf:typeof u,serverKey:c,props:l,rscData:e}),null;let d=J(l,n,i,a,o);return r.createElement(u,c?{...d,key:c}:d)}return e.map((e,t)=>{let s=V(e,n,i,a,o);if(!s)return null;if(typeof s==`object`&&r.isValidElement(s)&&!s.key){let n=typeof e==`object`&&e?B(e):`primitive`,i=`rsc-${Array.isArray(e)&&e[0]===`$`&&e[1]?String(e[1]):`unknown`}-${n}-${t}`;return r.createElement(r.Fragment,{key:i},s)}return s}).filter(Boolean)}return e}let H=o(new Set),U=o(new Map),W=o(new Map),G=o(new Map),K=o(new Map);function ne(e){if(!K.current.has(e)){let t=new Promise(()=>{});K.current.set(e,{promise:t,timestamp:Date.now()})}return K.current.get(e).promise}function q(){K.current.clear(),H.current.clear()}function re(){let e=Date.now(),t=[];K.current.forEach((n,r)=>{e-n.timestamp>3e4&&t.push(r)}),t.forEach(e=>{K.current.delete(e),H.current.delete(e)})}function J(e,t,n,i,a){if(!e||typeof e!=`object`)return e;a&&(U.current=a),t&&(W.current=t),i&&(G.current=i);let o={};for(let s in e)if(Object.hasOwn(e,s))if(s===`children`){let c=e.children;if(typeof c==`string`&&c.startsWith(`$L`))if(a&&a.has(c)){let e=a.get(c);H.current.delete(c),o[s]=V(e,t,n,i,a)}else H.current.add(c),o[s]=r.createElement(ee,{key:`lazy-${c}`,contentRef:c,rowsDataRef:U,modulesDataRef:W,symbolsDataRef:G,suspendingPromisesRef:K,getSuspendingPromise:ne,rscToReact:V});else o[s]=c?V(c,t,n,i,a):void 0}else s===`dangerouslySetInnerHTML`?o[s]=e[s]:o[s]=V(e[s],t,n,i,a);return o}let ie=(e,t)=>{try{let n=t===`array`?`[`:`{`,r=t===`array`?`]`:`}`,i=0,a=-1,o=!1,s=!1;for(let t=0;t<e.length;t++){let c=e[t];if(s){s=!1;continue}if(c===`\\`){s=!0;continue}if(c===`"`&&!s){o=!o;continue}if(!o){if(c===n)i++;else if(c===r&&(i--,i===0)){a=t+1;break}}}if(a===-1)return null;let c=e.substring(0,a),l=e.substring(a).trim();return l.length>0&&!p.test(l)&&console.warn(`[rari] Sanitized corrupted JSON (possible userscript injection):`,{extracted:c.substring(0,100),discarded:l.substring(0,50)}),c}catch(e){return console.error(`[rari] Failed to sanitize JSON:`,e),null}},Y=async(e,i=!1)=>{try{let a=e.trim().split(`
6
- `),o=new Map,s=new Map,c=new Map,l=null,u=[],d=null,f=null;for(let e=0;e<a.length;e++){let n=a[e].trim();if(!n)continue;let r=n.indexOf(`:`);if(r===-1)continue;let p=n.substring(0,r);if(!t.test(p)){console.warn(`[rari] AppRouter: Invalid row ID (non-numeric), skipping line:`,n.substring(0,50));continue}let m=n.substring(r+1);try{if(m.startsWith(`"$S`)){let e=m.slice(1,-1);s.set(`$${p}`,e);continue}if(m.startsWith(`I[`)){let t=ie(m.substring(1),`array`);if(!t){console.warn(`[rari] AppRouter: Could not sanitize import line, skipping:`,n.substring(0,80));continue}let r=JSON.parse(t);if(Array.isArray(r)&&r.length>=3){let[t,n,a]=r;o.set(`$L${p}`,{id:t,chunks:Array.isArray(n)?n:[n],name:a||`default`}),i&&t.includes(`layout`)&&(d!==null&&f!==null&&u.push({layoutPath:d,startLine:f,endLine:e-1,props:{}}),d=t,f=e)}}else if(m.startsWith(`[`)){let e=JSON.parse(m);if(c.set(`$L${p}`,e),i&&Array.isArray(e)&&e.length>=4&&typeof e[1]==`string`&&e[1].startsWith(`$L`)){let t=e[1],n=o.get(t);if(n&&n.id.includes(`layout`)){let t=e[3]||{};if(d&&f!==null){let e=u.find(e=>e.layoutPath===d&&e.startLine===f);e&&(e.props=t)}}}!l&&Array.isArray(e)&&(e[0]===`$`?l=e:Array.isArray(e[0])&&e[0][0]===`$`&&(l=e.length===1?e[0]:e))}}catch(e){console.error(`[rari] AppRouter: Failed to parse RSC line:`,n,e)}}if(await n(o),i&&d!==null&&f!==null&&u.push({layoutPath:d,startLine:f,endLine:a.length-1,props:{}}),l&&Array.isArray(l)){if(N.current=0,l[0]===`$`)l=V(l,o,void 0,s,c);else if(Array.isArray(l[0])){let e=l.map(e=>Array.isArray(e)&&e[0]===`$`?V(e,o,void 0,s,c):e).filter(e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`||r.isValidElement(e));l=e.length===1?e[0]:e}}return{element:l,modules:o,symbols:s,wireFormat:e,layoutBoundaries:i?u:void 0}}catch(e){throw console.error(`[rari] AppRouter: Failed to parse RSC wire format:`,e),e}},X=async(t,n)=>{let r=t||window.location.pathname,i=E.current.get(r);if(i)return i;let a=(async()=>{try{let t=(import.meta.env.RARI_SERVER_URL||window.location.origin).replace(e,``)+r+window.location.search,i=await fetch(t,{headers:{Accept:`text/x-component`},cache:`no-store`,signal:n});if(!i.ok){let e=Error(`Failed to fetch RSC data: ${i.status} ${i.statusText}`);throw I(e,`fetch`,`HTTP ${i.status} when fetching ${t}`,window.location.pathname),e}let a=await i.text();if(z(a)&&_)return _;let o;try{o=await Y(a,!1)}catch(e){let t=e instanceof Error?e:Error(String(e));throw I(t,`parse`,`Failed to parse RSC wire format: ${t.message}`,window.location.pathname),t}return v(o),O.current=a,R(),o}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&I(e,`network`,`Network error: ${e.message}`,window.location.pathname),console.error(`[rari] AppRouter: Error fetching RSC payload:`,e),e}finally{E.current.delete(r)}})();return E.current.set(r,a),a},Z=o(Y),Q=o(X),ae=o(J),oe=o(V);a(()=>{Z.current=Y,Q.current=X,ae.current=J,oe.current=V}),a(()=>{if(typeof window>`u`)return;let e=setInterval(()=>{re()},3e4),t=async e=>{let t=e.detail;T.current=t.navigationId,S.current=null,M.current=!0,q(),b.current={x:window.scrollX,y:window.scrollY},P(),C(async()=>{try{t.rscWireFormat?(v(await Z.current(t.rscWireFormat,!1)),O.current=t.rscWireFormat,R()):t.isStreaming?S.current=[]:await Q.current(t.to,t.abortSignal),T.current===t.navigationId&&(y(e=>e+1),j(null),w.current&&w.current(t))}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.error(`[rari] AppRouter: Navigation failed:`,e),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:t.from,to:t.to,error:e,navigationId:t.navigationId}})),k.current>=3&&L()}finally{let e=typeof window<`u`&&window.location.hash.length>0;!t.options?.historyKey&&!e&&requestAnimationFrame(()=>{t.options?.scroll!==!1&&window.scrollTo(0,0)})}})},n=async()=>{b.current={x:window.scrollX,y:window.scrollY},P();try{await Q.current(),y(e=>e+1),j(null)}catch(e){console.error(`[rari] AppRouter: HMR update failed:`,e),k.current>=3&&L()}finally{requestAnimationFrame(()=>{window.scrollTo(b.current.x,b.current.y),F()})}},r=async()=>{try{await Q.current(),y(e=>e+1),j(null)}catch(e){console.error(`[rari] AppRouter: RSC invalidation failed:`,e),k.current>=3&&L()}},i=async()=>{try{await Q.current(),j(null)}catch(e){console.error(`[rari] AppRouter: Manifest update failed:`,e),k.current>=3&&L()}},a=async e=>{let t=e.detail.rscRow;if(!(!t||!t.trim())){S.current||=[],S.current.push(t);try{let e=S.current.join(`
7
- `),t=await Z.current(e,!1);S.current.length<=2&&e.includes(`~boundaryId`)?(v(t),y(e=>e+1)):C(()=>{v(t),y(e=>e+1)})}catch(e){console.error(`[rari] AppRouter: Failed to parse streaming RSC row:`,e)}}};return window.addEventListener(`rari:navigate`,t),window.addEventListener(`rari:app-router-rerender`,n),window.addEventListener(`rari:rsc-invalidate`,r),window.addEventListener(`rari:app-router-manifest-updated`,i),window.addEventListener(`rari:rsc-row`,a),()=>{clearInterval(e),q(),window.removeEventListener(`rari:navigate`,t),window.removeEventListener(`rari:app-router-rerender`,n),window.removeEventListener(`rari:rsc-invalidate`,r),window.removeEventListener(`rari:app-router-manifest-updated`,i),window.removeEventListener(`rari:rsc-row`,a)}},[]),a(()=>{if(!(typeof window>`u`)&&window.location.hash&&_&&M.current){let e=window.location.hash.slice(1);requestAnimationFrame(()=>{requestAnimationFrame(()=>{let t=document.getElementById(e);t&&(t.scrollIntoView({behavior:`instant`,block:`start`}),M.current=!1)})})}},[_]);let se=()=>{window.location.reload()},ce=()=>{j(null)},le=e=>{if(!e||typeof e!=`object`)return null;if(e.type===`html`&&e.props?.children){let t=Array.isArray(e.props.children)?e.props.children:[e.props.children];for(let e of t)if(e&&typeof e==`object`&&e.type===`body`)return e.props?.children||null}return e},$=h;return _?.element&&($=le(_.element)||_.element),Array.isArray($)&&$.length===1&&r.isValidElement($[0])?$=$[0]:Array.isArray($)&&$.length>0&&$.every(e=>r.isValidElement(e)||e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&($=r.createElement(r.Fragment,null,...$)),$&&typeof $==`object`&&!r.isValidElement($)&&(console.error(`[rari] AppRouter: Invalid content to render:`,$),$=h),d(l,{children:[A&&d(`div`,{style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,padding:`24px`,background:`rgba(220, 38, 38, 0.95)`,color:`white`,borderRadius:`8px`,fontSize:`14px`,zIndex:1e4,maxWidth:`500px`,boxShadow:`0 4px 6px rgba(0, 0, 0, 0.3)`},children:[u(`div`,{style:{marginBottom:`16px`,fontWeight:`bold`,fontSize:`16px`},children:`⚠️ HMR Update Failed`}),d(`div`,{style:{marginBottom:`12px`,opacity:.9},children:[A.type===`fetch`&&`Failed to fetch updated content from server.`,A.type===`parse`&&`Failed to parse server response.`,A.type===`stale`&&`Server returned stale content.`,A.type===`network`&&`Network error occurred.`]}),u(`div`,{style:{marginBottom:`16px`,fontSize:`12px`,opacity:.8,fontFamily:`monospace`},children:A.details}),d(`div`,{style:{marginBottom:`12px`,fontSize:`12px`,opacity:.7},children:[`Consecutive failures:`,` `,k.current,` `,`/`,` `,3]}),d(`div`,{style:{display:`flex`,gap:`8px`},children:[u(`button`,{onClick:se,type:`button`,style:{padding:`8px 16px`,background:`white`,color:`#dc2626`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontWeight:`bold`,fontSize:`14px`},children:`Refresh Page`}),u(`button`,{onClick:ce,type:`button`,style:{padding:`8px 16px`,background:`rgba(255, 255, 255, 0.2)`,color:`white`,border:`1px solid rgba(255, 255, 255, 0.3)`,borderRadius:`4px`,cursor:`pointer`,fontSize:`14px`},children:`Dismiss`})]}),u(`div`,{style:{marginTop:`12px`,fontSize:`11px`,opacity:.6},children:`Check the console for detailed error logs.`})]}),u(i,{fallback:u(m,{}),children:$})]})}export{h as AppRouterProvider};
5
+ `})]})}function ne({contentRef:e,rowsDataRef:t,modulesDataRef:n,symbolsDataRef:i,suspendingPromisesRef:a,getSuspendingPromise:o,rscToReact:s}){let c=t.current,l=n.current,u=i.current,d=a.current,f=c.has(e);if(r.useEffect(()=>{f&&d.has(e)&&d.delete(e)},[e,f,d]),f)return s(c.get(e),l,void 0,u,c);throw o(e)}function g({children:g,initialPayload:_,onNavigate:v}){let[y,b]=s(_),[,x]=s(0),S=o({x:0,y:0}),C=o(new Map),w=o(null),[,re]=c(),T=o(v),E=o(0),D=o(new Map),O=o([]),k=o(null),A=o(0),[j,M]=s(null),N=o(typeof window<`u`&&window.location.hash.length>0),ie=o(0),P=o(!1),F=o(!1),I=o(!1),L=o(Promise.resolve()),ae=o(!1),oe=o(!!_),R=o(null);a(()=>{T.current=v},[v]);let z=()=>{if(typeof document>`u`)return;let e=document.querySelectorAll(`form`);C.current.clear(),e.forEach((e,t)=>{let n=new FormData(e);C.current.set(`form-${t}`,n)})},se=()=>{typeof document>`u`||document.querySelectorAll(`form`).forEach((e,t)=>{let n=C.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)})})},B=(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(),console.error(`[rari] HMR: Failure detected`,{type:t,details:n,filePath:r,consecutiveFailures:A.current,error:e.message,stack:e.stack,timestamp:new Date(i.timestamp).toISOString()}),A.current>=2&&M(i),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:hmr-failure`,{detail:i}))},V=()=>{setTimeout(()=>{window.location.reload()},1e3)},H=()=>{A.current>0&&(A.current=0)},ce=e=>{if(!k.current)return!1;if(e===k.current)return!0;let t=e.match(f);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1};function le(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 U(e,n,i,a,o,s){if(e==null)return null;if(typeof e==`string`&&e.startsWith(`$L`)&&o&&o.has(e)){let t=s??new Set;return t.has(e)?(console.warn(`[rari] AppRouter: Circular $L reference detected:`,e),null):(t.add(e),U(o.get(e),n,i,a,o,t))}if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)){if(e.length>=4&&e[0]===`$`){let[,s,c,l]=e,u=s;if(typeof s==`string`&&s.startsWith(`$`)&&a){let e=s.substring(1);if(t.test(e)){let e=a.get(s);e&&(e===`$Sreact.suspense`||e===`react.suspense`?u=`Suspense`:console.warn(`[rari] AppRouter: Unknown symbol:`,e))}}if(u===`Suspense`||s===`Suspense`){let e=Y(l,n,i,a,o);return r.createElement(r.Suspense,c?{...e,key:c}:e)}if(typeof u==`string`&&u.startsWith(`$L`)){let e=n.get(u);if(!e)return null;let t=globalThis[`~clientComponents`]?.[e.id]?.component;if(!t||typeof t!=`function`)return null;let s=c||`fallback-${u}-${ie.current++}`,d={...l,children:l.children===void 0?void 0:U(l.children,n,i,a,o)};return r.createElement(t,{key:s,...d})}if(!u||typeof u!=`string`&&typeof u!=`function`)return console.error(`[rari] AppRouter: Invalid component type:`,{type:u,typeOf:typeof u,serverKey:c,props:l,rscData:e}),null;let d=Y(l,n,i,a,o);return r.createElement(u,c?{...d,key:c}:d)}return e.map((e,t)=>{let s=U(e,n,i,a,o);if(s==null)return null;if(typeof s==`object`&&r.isValidElement(s)&&!s.key){let n=typeof e==`object`&&e?le(e):`primitive`,i=`rsc-${Array.isArray(e)&&e[0]===`$`&&e[1]?String(e[1]):`unknown`}-${n}-${t}`;return r.createElement(r.Fragment,{key:i},s)}return s}).filter(e=>e!=null)}return e}let W=o(new Set),G=o(new Map),K=o(new Map),q=o(new Map),J=o(new Map);function ue(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 de(){J.current.clear(),W.current.clear()}function fe(){let e=Date.now(),t=[];J.current.forEach((n,r)=>{e-n.timestamp>3e4&&t.push(r)}),t.forEach(e=>{J.current.delete(e),W.current.delete(e)})}function Y(e,t,n,i,a){if(!e||typeof e!=`object`)return e;a&&(G.current=a),t&&(K.current=t),i&&(q.current=i);let o={};for(let s in e)if(Object.hasOwn(e,s))if(s===`children`){let c=e.children;if(typeof c==`string`&&c.startsWith(`$L`))if(a&&a.has(c)){let e=a.get(c);W.current.delete(c),o[s]=U(e,t,n,i,a)}else W.current.add(c),o[s]=r.createElement(ne,{key:`lazy-${c}`,contentRef:c,rowsDataRef:G,modulesDataRef:K,symbolsDataRef:q,suspendingPromisesRef:J,getSuspendingPromise:ue,rscToReact:U});else o[s]=c===void 0?void 0:U(c,t,n,i,a)}else s===`dangerouslySetInnerHTML`?o[s]=e[s]:o[s]=U(e[s],t,n,i,a);return o}let pe=(e,t)=>{try{let n=t===`array`?`[`:`{`,r=t===`array`?`]`:`}`,i=0,a=-1,o=!1,s=!1;for(let t=0;t<e.length;t++){let c=e[t];if(s){s=!1;continue}if(c===`\\`){s=!0;continue}if(c===`"`&&!s){o=!o;continue}if(!o){if(c===n)i++;else if(c===r&&(i--,i===0)){a=t+1;break}}}if(a===-1)return null;let c=e.substring(0,a),l=e.substring(a).trim();return l.length>0&&!p.test(l)&&console.warn(`[rari] Sanitized corrupted JSON (possible userscript injection):`,{extracted:c.substring(0,100),discarded:l.substring(0,50)}),c}catch(e){return console.error(`[rari] Failed to sanitize JSON:`,e),null}},me=e=>{let t=new Set;if(!e?.modules||!e?.rawElement||!e?.rows)return t;let n=new Set,r=i=>{if(i){if(typeof i==`string`&&i.startsWith(`$L`)){let a=e.modules.get(i);a?.id&&(t.add(a.id),a.name&&a.name!==`default`&&t.add(`${a.id}#${a.name}`)),e.rows?.has(i)&&!n.has(i)&&(n.add(i),r(e.rows.get(i)));return}if(Array.isArray(i)){for(let e of i)r(e);return}if(typeof i==`object`&&i)for(let e of Object.values(i))r(e)}};return r(e.rawElement),t},X=async(e,r=!1,i=!0)=>{try{let a=e.split(`
6
+ `),o=new Map,s=new Map,c=new Map,l=null,u=[],d=null,f=null;for(let e=0;e<a.length;e++){let n=a[e];if(!n.trim())continue;let i=n.indexOf(`:`);if(i===-1)continue;let p=n.substring(0,i).trim();if(!t.test(p)){console.warn(`[rari] AppRouter: Invalid row ID (non-numeric), skipping line:`,n.substring(0,50));continue}let m=n.substring(i+1);try{if(m.startsWith(`"$S`)){let e=m.slice(1,-1);s.set(`$${p}`,e);continue}if(m.startsWith(`I[`)){let t=pe(m.substring(1),`array`);if(!t){console.warn(`[rari] AppRouter: Could not sanitize import line, skipping:`,n.substring(0,80));continue}let i=JSON.parse(t);if(Array.isArray(i)&&i.length>=3){let[t,n,a]=i;o.set(`$L${p}`,{id:t,chunks:Array.isArray(n)?n:[n],name:a||`default`}),r&&t.includes(`layout`)&&(d!==null&&f!==null&&u.push({layoutPath:d,startLine:f,endLine:e-1,props:{}}),d=t,f=e)}}else if(m.startsWith(`[`)){let e=JSON.parse(m);if(c.set(`$L${p}`,e),r&&Array.isArray(e)&&e.length>=4&&typeof e[1]==`string`&&e[1].startsWith(`$L`)){let t=e[1],n=o.get(t);if(n&&n.id.includes(`layout`)){let t=e[3]||{};if(d&&f!==null){let e=u.find(e=>e.layoutPath===d&&e.startLine===f);e&&(e.props=t)}}}l===null&&Array.isArray(e)&&(e[0]===`$`?l=e:Array.isArray(e[0])&&e[0][0]===`$`&&(l=e.length===1?e[0]:e))}else if(m.startsWith(`{`)||m.startsWith(`E{`)){let e=m.startsWith(`E{`)?m.substring(1):m,t=JSON.parse(e);c.set(`$L${p}`,t),l===null&&(l=t)}else if(m.charCodeAt(0)===84){let e=m.slice(1);c.set(`$L${p}`,e),l===null&&(l=e)}else if(m.startsWith(`"`)&&!m.startsWith(`"$S`)){let e=JSON.parse(m);c.set(`$L${p}`,e),l===null&&(l=e)}else if(ee.test(m)){let e=JSON.parse(m);c.set(`$L${p}`,e),l===null&&(l=e)}}catch(e){console.error(`[rari] AppRouter: Failed to parse RSC line:`,n,e)}}i&&await n(o),r&&d!==null&&f!==null&&u.push({layoutPath:d,startLine:f,endLine:a.length-1,props:{}});let p=l;return l!=null&&(ie.current=0,l=U(l,o,void 0,s,c)),{element:l,rawElement:p,rows:c,modules:o,symbols:s,wireFormat:e,layoutBoundaries:r?u:void 0}}catch(e){throw console.error(`[rari] AppRouter: Failed to parse RSC wire format:`,e),e}},he=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 B(e,`fetch`,`HTTP ${a.status} when fetching ${t}`,window.location.pathname),e}let o=await a.text();if(ce(o)&&y)return y;let s;try{s=await X(o,!1)}catch(e){let t=e instanceof Error?e:Error(String(e));throw B(t,`parse`,`Failed to parse RSC wire format: ${t.message}`,window.location.pathname),t}return E.current===i&&(b(s),k.current=o,H()),s}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&B(e,`network`,`Network error: ${e.message}`,window.location.pathname),console.error(`[rari] AppRouter: Error fetching RSC payload:`,e),e}finally{D.current.delete(a)}})();return D.current.set(a,s),s},Z=o(X),Q=o(he),ge=o(Y),_e=o(U);a(()=>{Z.current=X,Q.current=he,ge.current=Y,_e.current=U}),a(()=>{if(typeof window>`u`)return;let e=setInterval(()=>{fe()},3e4),n=async e=>{let t=e.detail;t.navigationId===E.current&&(N.current=!0,t.isStreaming||(w.current=null),de(),S.current={x:window.scrollX,y:window.scrollY},z(),re(async()=>{try{if(t.rscWireFormat){let e=await Z.current(t.rscWireFormat,!1,!0);E.current===t.navigationId&&(b(e),k.current=t.rscWireFormat,H())}else if(t.isStreaming){E.current===t.navigationId&&(M(null),R.current=t),ae.current=!1;return}else await Q.current(t.to,t.abortSignal);E.current===t.navigationId&&(x(e=>e+1),M(null),T.current&&T.current(t))}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.error(`[rari] AppRouter: Navigation failed:`,e),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:t.from,to:t.to,error:e,navigationId:t.navigationId}})),A.current>=3&&V()}finally{let e=typeof window<`u`&&window.location.hash.length>0;!t.options?.historyKey&&!e&&requestAnimationFrame(()=>{t.options?.scroll!==!1&&window.scrollTo(0,0)})}}))},r=async()=>{S.current={x:window.scrollX,y:window.scrollY},z();try{await Q.current(),x(e=>e+1),M(null)}catch(e){console.error(`[rari] AppRouter: HMR update failed:`,e),A.current>=3&&V()}finally{requestAnimationFrame(()=>{window.scrollTo(S.current.x,S.current.y),se()})}},i=async()=>{try{await Q.current(),x(e=>e+1),M(null)}catch(e){console.error(`[rari] AppRouter: RSC invalidation failed:`,e),A.current>=3&&V()}},a=e=>{let t=e;w.current=[],E.current=t.detail.navigationId,P.current=!1,F.current=!1,I.current=!1,L.current=Promise.resolve(),ae.current=!0,oe.current=!1,R.current=null},o=async()=>{try{await Q.current(),M(null)}catch(e){console.error(`[rari] AppRouter: Manifest update failed:`,e),A.current>=3&&V()}},s=async()=>{if(!w.current||w.current.length===0||oe.current)return;let e=E.current,n=[...w.current],r=n.some(e=>{let n=e.indexOf(`:`),r=n>0?e.substring(0,n).trim():``,i=n>0?e.substring(n+1):``;return t.test(r)&&h(i)}),i=n.some(e=>{let r=e.indexOf(`:`),i=r>0?e.substring(0,r).trim():``,a=r>0?e.substring(r+1):``;return!t.test(i)||!h(a)?!1:n.some(e=>{let t=e.indexOf(`:`),n=t>0?e.substring(t+1):``;return RegExp(`"?\\$L${i}"?(?![0-9a-fA-F])`).test(n)})});if(!r&&!i)return;if(!P.current&&r&&!i&&(P.current=!0,n.some(e=>e.includes(`"$Sreact.suspense"`)||e.includes(`react.suspense`)))){let t=n.filter(e=>{let t=e.indexOf(`:`),r=t>0?e.substring(0,t).trim():``,a=RegExp(`"\\$L${r}"(?![0-9a-fA-F])`);return!i||!n.some(e=>a.test(e))});try{let n=await Z.current(t.join(`
7
+ `),!1,!1);E.current===e&&(b(n),x(e=>e+1))}catch(e){console.error(`[rari] AppRouter: Failed to parse shell:`,e)}return}let a=n.some(e=>e.includes(`"$Sreact.suspense"`)||e.includes(`react.suspense`));if(!(!i&&a&&!I.current)&&!F.current){P.current=!0;try{let t=await Z.current(n.join(`
8
+ `),!1,!0);if(a||i){let r=me(t);(async()=>{let t=0,i=!1;for(;t<20;){let e=globalThis[`~clientComponents`]||{},n=Object.entries(e).filter(([e,t])=>r.has(e)&&t.loading&&t.loadPromise).map(([e,t])=>t.loadPromise);if(n.length===0){i=!0;break}try{await Promise.race([Promise.all(n),m(50)])}catch{}await m(10),t++}if(i||console.warn(`[rari] AppRouter: Module load timeout, rendering anyway`),E.current===e&&!F.current){F.current=!0;try{let t=w.current?[...w.current]:n,r=await Z.current(t.join(`
9
+ `),!1,!1);E.current===e&&(b(r),x(e=>e+1),R.current&&T.current&&(T.current(R.current),R.current=null),I.current&&(w.current=null))}catch(e){console.error(`[rari] AppRouter: Failed to re-parse after client load:`,e)}}})().catch(e=>{console.error(`[rari] AppRouter: Client component loading failed:`,e)})}if(E.current!==e||F.current)return;let r=w.current?[...w.current]:n;if(t=await Z.current(r.join(`
10
+ `),!1,!1),E.current!==e||F.current)return;b(t),x(e=>e+1),R.current&&T.current&&(T.current(R.current),R.current=null),I.current&&(F.current=!0,w.current=null)}catch(e){console.error(`[rari] AppRouter: Failed to parse streaming RSC row:`,e)}}},c=e=>{let t=e,n=t.detail.rscRow,r=t.detail.navigationId;if(!n||!n.trim()||!w.current)return;let i=E.current;if(!(r==null||r!==i)){if(n.trim()===`STREAM_COMPLETE`){I.current=!0,L.current=L.current.then(()=>{if(E.current===i)return s()});return}w.current.push(n),L.current=L.current.then(()=>{if(E.current===i)return s()})}};return window.addEventListener(`rari:navigation-start`,a),window.addEventListener(`rari:navigate`,n),window.addEventListener(`rari:app-router-rerender`,r),window.addEventListener(`rari:rsc-invalidate`,i),window.addEventListener(`rari:app-router-manifest-updated`,o),window.addEventListener(`rari:rsc-row`,c),()=>{clearInterval(e),de(),window.removeEventListener(`rari:navigation-start`,a),window.removeEventListener(`rari:navigate`,n),window.removeEventListener(`rari:app-router-rerender`,r),window.removeEventListener(`rari:rsc-invalidate`,i),window.removeEventListener(`rari:app-router-manifest-updated`,o),window.removeEventListener(`rari:rsc-row`,c)}},[]),a(()=>{if(!(typeof window>`u`)&&window.location.hash&&y&&N.current){let e=window.location.hash.slice(1);requestAnimationFrame(()=>{requestAnimationFrame(()=>{let t=document.getElementById(e);t&&(t.scrollIntoView({behavior:`instant`,block:`start`}),N.current=!1)})})}},[y]);let ve=()=>{window.location.reload()},ye=()=>{M(null)},be=e=>{if(!e||typeof e!=`object`)return null;if(e.type===`html`&&e.props?.children){let t=Array.isArray(e.props.children)?e.props.children:[e.props.children];for(let e of t)if(e&&typeof e==`object`&&e.type===`body`)return e.props?.children??null}return e},$=g;return y?.element!=null&&($=be(y.element)??y.element),Array.isArray($)&&$.length===1&&r.isValidElement($[0])?$=$[0]:Array.isArray($)&&$.length>0&&$.every(e=>r.isValidElement(e)||e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&($=r.createElement(r.Fragment,null,...$)),$&&typeof $==`object`&&!r.isValidElement($)&&(console.error(`[rari] AppRouter: Invalid content to render:`,$),$=g),d(l,{children:[j&&d(`div`,{style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,padding:`24px`,background:`rgba(220, 38, 38, 0.95)`,color:`white`,borderRadius:`8px`,fontSize:`14px`,zIndex:1e4,maxWidth:`500px`,boxShadow:`0 4px 6px rgba(0, 0, 0, 0.3)`},children:[u(`div`,{style:{marginBottom:`16px`,fontWeight:`bold`,fontSize:`16px`},children:`⚠️ HMR Update Failed`}),d(`div`,{style:{marginBottom:`12px`,opacity:.9},children:[j.type===`fetch`&&`Failed to fetch updated content from server.`,j.type===`parse`&&`Failed to parse server response.`,j.type===`stale`&&`Server returned stale content.`,j.type===`network`&&`Network error occurred.`]}),u(`div`,{style:{marginBottom:`16px`,fontSize:`12px`,opacity:.8,fontFamily:`monospace`},children:j.details}),d(`div`,{style:{marginBottom:`12px`,fontSize:`12px`,opacity:.7},children:[`Consecutive failures:`,` `,A.current,` `,`/`,` `,3]}),d(`div`,{style:{display:`flex`,gap:`8px`},children:[u(`button`,{onClick:ve,type:`button`,style:{padding:`8px 16px`,background:`white`,color:`#dc2626`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontWeight:`bold`,fontSize:`14px`},children:`Refresh Page`}),u(`button`,{onClick:ye,type:`button`,style:{padding:`8px 16px`,background:`rgba(255, 255, 255, 0.2)`,color:`white`,border:`1px solid rgba(255, 255, 255, 0.3)`,borderRadius:`4px`,cursor:`pointer`,fontSize:`14px`},children:`Dismiss`})]}),u(`div`,{style:{marginTop:`12px`,fontSize:`11px`,opacity:.6},children:`Check the console for detailed error logs.`})]}),u(i,{fallback:u(te,{}),children:$})]})}export{g as AppRouterProvider};
@@ -1 +1 @@
1
- "use client";import{t as e}from"../timer-utils-BO5HIsHv.mjs";import{Component as t}from"react";import{jsx as n,jsxs as r}from"react/jsx-runtime";var i=class extends t{_isMounted=!1;_pendingTimer=null;constructor(e){super(e),this.state={hasError:!1,error:null,ErrorComponent:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1,this._pendingTimer=e(this._pendingTimer)}componentDidCatch(e,t){console.error(`[rari] Error boundary caught error:`,e,t);let n=this.props.errorComponentId;if(n&&typeof window<`u`){let e=window[`~clientComponents`]?.[n];e&&(e.component&&typeof e.component==`function`?this.setState({ErrorComponent:e.component}):e.loader&&!e.loading&&(e.loading=!0,e.loader().then(t=>{let n=t.default||t;e.component=n,e.registered=!0,e.loading=!1,this.setState({ErrorComponent:n})}).catch(t=>{e.loading=!1,console.error(`[rari] Failed to load error component ${n}:`,t)})))}}reset=()=>{this._pendingTimer=e(this._pendingTimer),this._pendingTimer=setTimeout(()=>{this._isMounted&&this.setState({hasError:!1,error:null,ErrorComponent:null}),this._pendingTimer=null},50)};render(){if(this.state.hasError&&this.state.error){let{ErrorComponent:e}=this.state;return e?n(e,{error:this.state.error,reset:this.reset}):r(`div`,{style:{padding:`20px`,background:`#fee`,border:`2px solid #f00`},children:[n(`h2`,{children:`Error`}),n(`p`,{children:`Something went wrong.`})]})}return this.props.children}};export{i as ErrorBoundaryWrapper};
1
+ "use client";import{t as e}from"../timer-utils-DnyOf3e6.mjs";import{Component as t}from"react";import{jsx as n,jsxs as r}from"react/jsx-runtime";var i=class extends t{_isMounted=!1;_pendingTimer=null;constructor(e){super(e),this.state={hasError:!1,error:null,ErrorComponent:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1,this._pendingTimer=e(this._pendingTimer)}componentDidCatch(e,t){console.error(`[rari] Error boundary caught error:`,e,t);let n=this.props.errorComponentId;if(n&&typeof window<`u`){let e=window[`~clientComponents`]?.[n];e&&(e.component&&typeof e.component==`function`?this.setState({ErrorComponent:e.component}):e.loader&&!e.loading&&(e.loading=!0,e.loader().then(t=>{let n=t.default||t;e.component=n,e.registered=!0,e.loading=!1,this.setState({ErrorComponent:n})}).catch(t=>{e.loading=!1,console.error(`[rari] Failed to load error component ${n}:`,t)})))}}reset=()=>{this._pendingTimer=e(this._pendingTimer),this._pendingTimer=setTimeout(()=>{this._isMounted&&this.setState({hasError:!1,error:null,ErrorComponent:null}),this._pendingTimer=null},50)};render(){if(this.state.hasError&&this.state.error){let{ErrorComponent:e}=this.state;return e?n(e,{error:this.state.error,reset:this.reset}):r(`div`,{style:{padding:`20px`,background:`#fee`,border:`2px solid #f00`},children:[n(`h2`,{children:`Error`}),n(`p`,{children:`Something went wrong.`})]})}return this.props.children}};export{i as ErrorBoundaryWrapper};
@@ -1,15 +1,3 @@
1
- //#region src/runtime/csrf.d.ts
2
- declare global {
3
- interface Window {
4
- getCsrfToken: typeof getCsrfToken;
5
- fetchWithCsrf: typeof fetchWithCsrf;
6
- refreshCsrfToken: typeof refreshCsrfToken;
7
- }
8
- }
9
- declare function getCsrfToken(): string | null;
10
- declare function refreshCsrfToken(): Promise<boolean>;
11
- declare function fetchWithCsrf(url: string, options?: RequestInit): Promise<Response>;
12
- //#endregion
13
1
  //#region src/runtime/actions.d.ts
14
2
  interface ServerActionResponse {
15
3
  success: boolean;
@@ -1 +1 @@
1
- function e(){if(typeof window>`u`)return null;let e=document.querySelector(`meta[name="csrf-token"]`);return e?e.getAttribute(`content`):null}async function t(){if(typeof window>`u`)return!1;try{let e=await fetch(`/_rari/csrf-token`);if(!e.ok)return console.error(`[rari] CSRF: Failed to refresh CSRF token:`,e.status),!1;let t=await e.json();if(t.token){let e=document.querySelector(`meta[name="csrf-token"]`);return e||(e=document.createElement(`meta`),e.setAttribute(`name`,`csrf-token`),document.head.appendChild(e)),e.setAttribute(`content`,t.token),!0}return!1}catch(e){return console.error(`[rari] CSRF: Error refreshing CSRF token:`,e),!1}}async function n(n,r={}){let i=e();i||=(await t(),e());let a=new Headers(r.headers);i&&a.set(`X-CSRF-Token`,i);let o=new Request(n,{...r,headers:a}),s=null;try{s=o.clone()}catch{s=null}let c=await fetch(o);if(c.status===403&&n.includes(`/_rari/`)&&await t()){let t=e();if(t&&s){let e=new Headers(s.headers);return e.set(`X-CSRF-Token`,t),fetch(new Request(s,{headers:e}))}}return c}typeof window<`u`&&(window.getCsrfToken=e,window.fetchWithCsrf=n,window.refreshCsrfToken=t,document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>{t()}):t());function r(e,t,n){return async(...e)=>{try{let r=e.map(e=>{if(e instanceof FormData){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}),i=await(typeof window<`u`&&window.fetchWithCsrf?window.fetchWithCsrf:fetch)(`/_rari/action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t,export_name:n,args:r})});if(!i.ok){let e=await i.text().catch(()=>i.statusText);throw console.error(`[rari] ServerAction: HTTP ${i.status} error:`,e),Error(`Server action "${n}" failed with status ${i.status}: ${e}`)}let a=await i.json();if(a.redirect){if(typeof window<`u`){let e=new URL(a.redirect,window.location.href).href;e!==window.location.href&&(window.location.href=e)}return{redirect:a.redirect}}if(!a.success){let e=a.error||`Server action failed without error message`;throw console.error(`[rari] ServerAction: Action "${n}" failed:`,e),Error(e)}return a.result}catch(e){throw console.error(`[rari] ServerAction: Error executing "${n}":`,{moduleId:t,exportName:n,error:e instanceof Error?e.message:String(e),stack:e instanceof Error?e.stack:void 0}),e}}}function i(e,t,n={}){let r=async r=>{r.preventDefault();let i=new FormData(e);try{let r=await t(i);if(r&&r.redirect){n.onRedirect&&n.onRedirect(r.redirect),typeof window<`u`&&(window.location.href=r.redirect);return}n.onSuccess&&n.onSuccess(r),e.reset()}catch(e){let t=e instanceof Error?e.message:`Unknown error`;n.onError?n.onError(t):console.error(`Server action error:`,t)}};return e.addEventListener(`submit`,r),()=>{e.removeEventListener(`submit`,r)}}function a(e,t,n){return{action:`/_rari/form-action`,enhance:(r,a={})=>{let o=document.createElement(`input`);o.type=`hidden`,o.name=`__action_id`,o.value=e,r.appendChild(o);let s=document.createElement(`input`);if(s.type=`hidden`,s.name=`__export_name`,s.value=t,r.appendChild(s),typeof window<`u`&&window.getCsrfToken){let e=window.getCsrfToken();if(e){let t=r.querySelector(`input[name="__csrf_token"]`);t||(t=document.createElement(`input`),t.type=`hidden`,t.name=`__csrf_token`,r.appendChild(t)),t.value=e}}return r.action=`/_rari/form-action`,r.method=`POST`,i(r,n,a)}}}function o(){document.querySelectorAll(`form[data-server-action]`).forEach(e=>{if(!(e instanceof HTMLFormElement))return;let t=e.dataset.serverAction;if(t)try{let{moduleId:n,exportName:a}=JSON.parse(t),o=r(`action`,n,a);i(e,async e=>await o(e))}catch(e){console.error(`Failed to bind server action to form:`,e)}})}typeof window<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,o):o());export{o as bindServerActions,a as createFormAction,r as createServerReference,i as enhanceFormWithAction};
1
+ function e(e,t,n){return async(...e)=>{try{let r=e.map(e=>{if(e instanceof FormData){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}),i=await fetch(`/_rari/action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t,export_name:n,args:r})});if(!i.ok){let e=await i.text().catch(()=>i.statusText);throw console.error(`[rari] ServerAction: HTTP ${i.status} error:`,e),Error(`Server action "${n}" failed with status ${i.status}: ${e}`)}let a=await i.json();if(a.redirect){if(typeof window<`u`){let e=new URL(a.redirect,window.location.href).href;e!==window.location.href&&(window.location.href=e)}return{redirect:a.redirect}}if(!a.success){let e=a.error||`Server action failed without error message`;throw console.error(`[rari] ServerAction: Action "${n}" failed:`,e),Error(e)}return a.result}catch(e){throw console.error(`[rari] ServerAction: Error executing "${n}":`,{moduleId:t,exportName:n,error:e instanceof Error?e.message:String(e),stack:e instanceof Error?e.stack:void 0}),e}}}function t(e,t,n={}){let r=async r=>{r.preventDefault();let i=new FormData(e);try{let r=await t(i);if(r&&r.redirect){n.onRedirect&&n.onRedirect(r.redirect),typeof window<`u`&&(window.location.href=r.redirect);return}n.onSuccess&&n.onSuccess(r),e.reset()}catch(e){let t=e instanceof Error?e.message:`Unknown error`;n.onError?n.onError(t):console.error(`Server action error:`,t)}};return e.addEventListener(`submit`,r),()=>{e.removeEventListener(`submit`,r)}}function n(e,n,r){return{action:`/_rari/form-action`,enhance:(i,a={})=>{let o=document.createElement(`input`);o.type=`hidden`,o.name=`__action_id`,o.value=e,i.appendChild(o);let s=document.createElement(`input`);return s.type=`hidden`,s.name=`__export_name`,s.value=n,i.appendChild(s),i.action=`/_rari/form-action`,i.method=`POST`,t(i,r,a)}}}function r(){document.querySelectorAll(`form[data-server-action]`).forEach(n=>{if(!(n instanceof HTMLFormElement))return;let r=n.dataset.serverAction;if(r)try{let{moduleId:i,exportName:a}=JSON.parse(r),o=e(`action`,i,a);t(n,async e=>await o(e))}catch(e){console.error(`Failed to bind server action to form:`,e)}})}typeof window<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,r):r());export{r as bindServerActions,n as createFormAction,e as createServerReference,t as enhanceFormWithAction};
@@ -1,8 +1,8 @@
1
- import"../regex-constants-DOQkuGm5.mjs";import{n as e,t}from"../get-client-component-YrjzU6RI.mjs";import*as n from"react";import"react";import{ClientRouter as r}from"rari/client";import{RouterProvider as i}from"rari/router";import{createRoot as a}from"react-dom/client";import{AppRouterProvider as o}from"virtual:app-router-provider";import{createFromReadableStream as s}from"virtual:react-server-dom-rari-client.ts";import"virtual:rsc-integration.ts";function c(){return globalThis[`~rari`]}function l(){return globalThis}function u(){return window}function d(){return{moduleMap:new Proxy({},{get(e,t){return new Proxy({},{get(e,n){return{id:`${String(t)}#${String(n)}`,chunks:[],name:String(n)}}})}}),moduleLoading:new Proxy({},{get(e,t){return new Proxy({},{get(e,n){return async()=>{try{let e=String(t),r=String(n),i=`${e}#${r}`;if(l()[`~clientComponents`]?.[i]?.component)return l()[`~clientComponents`][i].component;if(l()[`~clientComponents`]?.[e]?.component){let t=l()[`~clientComponents`][e].component;return r===`default`?t:t?.[r]}let a=l()[`~clientComponents`]?.[i]||l()[`~clientComponents`]?.[e];if(a?.loader){a.loadPromise||=(a.loading=!0,a.loader().then(e=>(a.component=e.default||e,a.registered=!0,a.loading=!1,e)).catch(t=>{throw a.loading=!1,a.loadPromise=void 0,console.error(`[rari] Failed to lazy load ${e}#${r}:`,t),t}));let t=await a.loadPromise,n=t.default||t;return r===`default`?n:n?.[r]??n}return console.warn(`[rari] Module ${e}#${r} not found in client components registry`),null}catch(e){return console.error(`[rari] Failed to load ${String(t)}#${String(n)}:`,e),null}}}})}})}}c()===void 0&&(globalThis[`~rari`]={}),c().AppRouterProvider=o,c().ClientRouter=r,c().getClientComponent=t;async function f(t){try{await e(t)}catch(e){console.error(`[rari] Failed to preload component ${t}:`,e)}}
1
+ import"../regex-constants-CmOAY1_W.mjs";import{n as e,t}from"../get-client-component-YrjzU6RI.mjs";import*as n from"react";import"react";import{ClientRouter as r}from"rari/client";import{RouterProvider as i}from"rari/router";import{createRoot as a}from"react-dom/client";import{AppRouterProvider as o}from"virtual:app-router-provider";import{createFromReadableStream as s}from"virtual:react-server-dom-rari-client.ts";import"virtual:rsc-integration.ts";function c(){return globalThis[`~rari`]}function l(){return globalThis}function u(){return window}function d(){return{moduleMap:new Proxy({},{get(e,t){return new Proxy({},{get(e,n){return{id:`${String(t)}#${String(n)}`,chunks:[],name:String(n)}}})}}),moduleLoading:new Proxy({},{get(e,t){return new Proxy({},{get(e,n){return async()=>{try{let e=String(t),r=String(n),i=`${e}#${r}`;if(l()[`~clientComponents`]?.[i]?.component)return l()[`~clientComponents`][i].component;if(l()[`~clientComponents`]?.[e]?.component){let t=l()[`~clientComponents`][e].component;return r===`default`?t:t?.[r]}let a=l()[`~clientComponents`]?.[i]||l()[`~clientComponents`]?.[e];if(a?.loader){a.loadPromise||=(a.loading=!0,a.loader().then(e=>(a.component=e.default||e,a.registered=!0,a.loading=!1,e)).catch(t=>{throw a.loading=!1,a.loadPromise=void 0,console.error(`[rari] Failed to lazy load ${e}#${r}:`,t),t}));let t=await a.loadPromise,n=t.default||t;return r===`default`?n:n?.[r]??n}return console.warn(`[rari] Module ${e}#${r} not found in client components registry`),null}catch(e){return console.error(`[rari] Failed to load ${String(t)}#${String(n)}:`,e),null}}}})}})}}c()===void 0&&(globalThis[`~rari`]={}),c().AppRouterProvider=o,c().ClientRouter=r,c().getClientComponent=t;async function f(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
  c().preloadClientComponent=f,l()[`~clientComponents`]===void 0&&(globalThis[`~clientComponents`]={}),l()[`~clientComponentPaths`]===void 0&&(globalThis[`~clientComponentPaths`]={});
4
4
  /*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */
5
- function p(){c().hydrateClientComponents||(c().hydrateClientComponents=function(e,t,r){let i=u()[`~rari`].boundaryModules||new Map;function o(e){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,r,a]=e,s=a?{...a}:{};if(a?.children&&(s.children=o(a.children)),s[`~boundaryId`]&&delete s[`~boundaryId`],typeof t==`string`){if(t.startsWith(`$L`)){let e=i.get(t);if(e){let t=`${e.id}#${e.name||`default`}`,i=null,a=l()[`~clientComponents`][t]||l()[`~clientComponents`][e.id];return a&&(a.component?i=a.component:a.loader&&!a.loading&&(a.loading=!0,a.loadPromise=a.loader().then(e=>(a.component=e.default||e,a.registered=!0,a.loading=!1,a.component)).catch(t=>{throw a.loading=!1,a.loadPromise=void 0,console.error(`[rari] Failed to load component ${e.id}:`,t),t})),a.loadPromise&&!a.component)?n.createElement(n.Suspense,{fallback:null},n.createElement(_,{key:r,componentInfo:a,childProps:s})):i?n.createElement(i,r?{...s,key:r}:s):s.children||null}return s.children||null}return n.createElement(t,r?{...s,key:r}:s)}return null}return e.map((e,t)=>{let r=null;if(Array.isArray(e)&&e.length>=4&&e[0]===`$`){let t=e[2];(typeof t==`string`||typeof t==`number`)&&(r=String(t))}r||=`rsc-${t}-${typeof e==`string`?e:JSON.stringify(e).slice(0,20)}`;let i=o(e);return n.isValidElement(i)&&!i.key?n.createElement(n.Fragment,{key:r},i):i})}return e}try{let e=o(t);e&&(a(r).render(e),r.classList.add(`rari-boundary-hydrated`))}catch(e){console.error(`[rari] Failed to hydrate client components:`,e),console.error(`[rari] Error stack:`,e.stack)}})}function m(){let e=u()[`~rari`].pendingBoundaryHydrations;if(!(!e||e.size===0)){for(let[t,n]of e.entries())c().hydrateClientComponents&&c().hydrateClientComponents(t,n.content,n.element);e.clear()}}p();async function h(t){let n=[];for(let r of t){let t=e(r).catch(e=>{console.error(`[rari] Failed to preload component ${r}:`,e)});n.push(t)}n.length>0&&await Promise.all(n)}async function g(){let e=document.getElementById(`root`);if(!e){console.error(`[rari] Root element not found`);return}let c=document.getElementById(`__RARI_RSC_PAYLOAD__`),l=e.children.length>0,f=u()[`~rari`]?.streaming?.bufferedRows&&u()[`~rari`].streaming.bufferedRows.length>0;if(p(),l&&!c&&!f){let e=document.querySelectorAll(`[data-client-component]`);if(e.length>0){let r=new Set;e.forEach(e=>{let t=e.getAttribute(`data-client-component`);t&&r.add(t)}),await h(r),e.forEach(e=>{let r=e.getAttribute(`data-client-component`),i=e.getAttribute(`data-props`);if(r)try{let o=t(r);if(!o)return;let s=i?JSON.parse(i):{};requestAnimationFrame(()=>{try{document.contains(e)&&(e.replaceChildren(),a(e).render(n.createElement(o,s)))}catch(e){console.error(`[rari] Failed to hydrate client component ${r}:`,e)}})}catch(e){console.error(`[rari] Failed to hydrate client component ${r}:`,e)}})}return}if(l&&f&&!c&&document.querySelectorAll(`[data-boundary-id]`).length>0){u()[`~rari`].pendingBoundaryHydrations&&u()[`~rari`].pendingBoundaryHydrations.size>0&&m();return}try{let t;if(!c&&!f&&!l)try{let e=window.location.pathname+window.location.search,n=(import.meta.env.DEV?import.meta.env.RARI_SERVER_URL||`http://localhost:${import.meta.env.VITE_RSC_PORT||`3000`}`:window.location.origin)+e,r=await fetch(n,{headers:{Accept:`text/x-component`},cache:`no-store`});if(!r.ok&&r.status!==404)throw Error(`Failed to fetch RSC data: ${r.status}`);let i=r.body;t=await s(i,d())}catch(e){if(e instanceof Promise)throw e;if(console.error(`[rari] Failed to fetch initial RSC data:`,e),e instanceof Error)console.error(`[rari] Error name:`,e.name),console.error(`[rari] Error message:`,e.message),e.stack&&console.error(`[rari] Error stack:`,e.stack);else if(typeof e==`string`)console.error(`[rari] Error details:`,e);else if(e&&typeof e==`object`)try{let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=e[n];console.error(`[rari] Error details:`,JSON.stringify(t,null,2))}catch{console.error(`[rari] Error details:`,String(e))}else console.error(`[rari] Error details:`,String(e));t=null}else if(c&&c.textContent)try{let e=c.textContent,n=u()[`~rari`]?.streaming?.bufferedRows&&u()[`~rari`].streaming.bufferedRows.length>0;t=u()[`~rari`]?.streaming?.complete===void 0||n?await s(new ReadableStream({start(t){if(t.enqueue(new TextEncoder().encode(e)),u()[`~rari`]?.streaming?.bufferedRows){for(let e of u()[`~rari`].streaming.bufferedRows)t.enqueue(new TextEncoder().encode(`\n${e}`));u()[`~rari`].streaming.bufferedRows=[]}let n=e=>{let n=e;n.detail?.rscRow&&t.enqueue(new TextEncoder().encode(`\n${n.detail.rscRow}`))},r=()=>{t.close(),window.removeEventListener(`rari:rsc-row`,n),window.removeEventListener(`rari:stream-complete`,r)};window.addEventListener(`rari:rsc-row`,n),window.addEventListener(`rari:stream-complete`,r),u()[`~rari`]?.streaming?.complete&&r()}}),d()):await s(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}),d())}catch(e){console.error(`[rari] Failed to parse embedded RSC payload:`,e),t=null}else if(f)try{t=await s(new ReadableStream({start(e){if(u()[`~rari`]?.streaming?.bufferedRows){for(let t of u()[`~rari`].streaming.bufferedRows)e.enqueue(new TextEncoder().encode(`${t}\n`));u()[`~rari`].streaming.bufferedRows=[]}let t=t=>{let n=t;n.detail?.rscRow&&e.enqueue(new TextEncoder().encode(`${n.detail.rscRow}\n`))},n=()=>{e.close(),window.removeEventListener(`rari:rsc-row`,t),window.removeEventListener(`rari:stream-complete`,n)};window.addEventListener(`rari:rsc-row`,t),window.addEventListener(`rari:stream-complete`,n),u()[`~rari`]?.streaming?.complete&&n()}}),d())}catch(e){console.error(`[rari] Failed to process streaming RSC payload:`,e),t=null}if(!t)throw Error(`No RSC data available for hydration`);let p;p=t;let m;m=n.createElement(o,{initialPayload:{element:t}},p),m=n.createElement(r,{initialRoute:window.location.pathname,children:m}),m=n.createElement(i,{initialPathname:window.location.pathname,children:m}),a(e).render(m)}catch(t){console.error(`[rari] Error rendering app:`,t),e.innerHTML=`
5
+ function p(){c().hydrateClientComponents||(c().hydrateClientComponents=function(e,t,r){let i=u()[`~rari`].boundaryModules||new Map;function o(e){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,r,a]=e,s=a?{...a}:{};if(a?.children&&(s.children=o(a.children)),s[`~boundaryId`]&&delete s[`~boundaryId`],typeof t==`string`){if(t.startsWith(`$L`)){let e=i.get(t);if(e){let t=`${e.id}#${e.name||`default`}`,i=null,a=l()[`~clientComponents`][t]||l()[`~clientComponents`][e.id];return a&&(a.component?i=a.component:a.loader&&!a.loading&&(a.loading=!0,a.loadPromise=a.loader().then(e=>(a.component=e.default||e,a.registered=!0,a.loading=!1,a.component)).catch(t=>{throw a.loading=!1,a.loadPromise=void 0,console.error(`[rari] Failed to load component ${e.id}:`,t),t})),a.loadPromise&&!a.component)?n.createElement(n.Suspense,{fallback:null},n.createElement(_,{key:r,componentInfo:a,childProps:s})):i?n.createElement(i,r?{...s,key:r}:s):s.children||null}return s.children||null}return n.createElement(t,r?{...s,key:r}:s)}return null}return e.map((e,t)=>{let r=null;if(Array.isArray(e)&&e.length>=4&&e[0]===`$`){let t=e[2];(typeof t==`string`||typeof t==`number`)&&(r=String(t))}r||=`rsc-${t}-${typeof e==`string`?e:JSON.stringify(e).slice(0,20)}`;let i=o(e);return n.isValidElement(i)&&!i.key?n.createElement(n.Fragment,{key:r},i):i})}return e}try{let e=o(t);e&&(a(r).render(e),r.classList.add(`rari-boundary-hydrated`))}catch(e){console.error(`[rari] Failed to hydrate client components:`,e),console.error(`[rari] Error stack:`,e.stack)}})}function m(){let e=u()[`~rari`].pendingBoundaryHydrations;if(!(!e||e.size===0)){for(let[t,n]of e.entries())c().hydrateClientComponents&&c().hydrateClientComponents(t,n.content,n.element);e.clear()}}p();async function h(t){let n=[];for(let r of t){let t=e(r).catch(e=>{console.error(`[rari] Failed to preload component ${r}:`,e)});n.push(t)}n.length>0&&await Promise.all(n)}async function g(){let e=document.getElementById(`root`);if(!e){console.error(`[rari] Root element not found`);return}let c=document.getElementById(`__RARI_RSC_PAYLOAD__`),l=e.children.length>0,f=u()[`~rari`]?.streaming?.bufferedRows&&u()[`~rari`].streaming.bufferedRows.length>0;if(p(),l&&!c&&!f){let e=document.querySelectorAll(`[data-client-component]`);if(e.length>0){let r=new Set;e.forEach(e=>{let t=e.getAttribute(`data-client-component`);t&&r.add(t)}),await h(r),e.forEach(e=>{let r=e.getAttribute(`data-client-component`),i=e.getAttribute(`data-props`);if(r)try{let o=t(r);if(!o)return;let s=i?JSON.parse(i):{};requestAnimationFrame(()=>{try{document.contains(e)&&(e.replaceChildren(),a(e).render(n.createElement(o,s)))}catch(e){console.error(`[rari] Failed to hydrate client component ${r}:`,e)}})}catch(e){console.error(`[rari] Failed to hydrate client component ${r}:`,e)}})}return}if(l&&f&&!c&&document.querySelectorAll(`[data-boundary-id]`).length>0){u()[`~rari`].pendingBoundaryHydrations&&u()[`~rari`].pendingBoundaryHydrations.size>0&&m();return}try{let t;if(!c&&!f&&!l)try{let e=window.location.pathname+window.location.search,n=(import.meta.env.DEV?import.meta.env.RARI_SERVER_URL||`http://localhost:${import.meta.env.VITE_RSC_PORT||`3000`}`:window.location.origin)+e,r=await fetch(n,{headers:{Accept:`text/x-component`},cache:`no-store`});if(!r.ok&&r.status!==404)throw Error(`Failed to fetch RSC data: ${r.status}`);let i=r.body;t=await s(i,d())}catch(e){if(e instanceof Promise)throw e;if(console.error(`[rari] Failed to fetch initial RSC data:`,e),e instanceof Error)console.error(`[rari] Error name:`,e.name),console.error(`[rari] Error message:`,e.message),e.stack&&console.error(`[rari] Error stack:`,e.stack);else if(typeof e==`string`)console.error(`[rari] Error details:`,e);else if(e&&typeof e==`object`)try{let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=e[n];console.error(`[rari] Error details:`,JSON.stringify(t,null,2))}catch{console.error(`[rari] Error details:`,String(e))}else console.error(`[rari] Error details:`,String(e));t=null}else if(c&&c.textContent)try{let e=c.textContent,n=u()[`~rari`]?.streaming?.bufferedRows&&u()[`~rari`].streaming.bufferedRows.length>0;t=u()[`~rari`]?.streaming?.complete===void 0||n?await s(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e));let n=e=>{let n=e;n.detail?.rscRow&&t.enqueue(new TextEncoder().encode(`\n${n.detail.rscRow}`))},r=()=>{t.close(),window.removeEventListener(`rari:html-stream-row`,n),window.removeEventListener(`rari:stream-complete`,r)};if(window.addEventListener(`rari:html-stream-row`,n),window.addEventListener(`rari:stream-complete`,r),u()[`~rari`]?.streaming?.bufferedRows){let e=[...u()[`~rari`].streaming.bufferedRows];for(let n of e)t.enqueue(new TextEncoder().encode(`\n${n}`));u()[`~rari`].streaming.bufferedRows=[]}u()[`~rari`]?.streaming?.complete&&r()}}),d()):await s(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}),d())}catch(e){console.error(`[rari] Failed to parse embedded RSC payload:`,e),t=null}else if(f)try{t=await s(new ReadableStream({start(e){let t=t=>{let n=t;n.detail?.rscRow&&e.enqueue(new TextEncoder().encode(`${n.detail.rscRow}\n`))},n=()=>{e.close(),window.removeEventListener(`rari:html-stream-row`,t),window.removeEventListener(`rari:stream-complete`,n)};if(window.addEventListener(`rari:html-stream-row`,t),window.addEventListener(`rari:stream-complete`,n),u()[`~rari`]?.streaming?.bufferedRows){let t=[...u()[`~rari`].streaming.bufferedRows];u()[`~rari`].streaming.bufferedRows=[];for(let n of t)e.enqueue(new TextEncoder().encode(`${n}\n`))}u()[`~rari`]?.streaming?.complete&&n()}}),d())}catch(e){console.error(`[rari] Failed to process streaming RSC payload:`,e),t=null}if(!t)throw Error(`No RSC data available for hydration`);let p;p=t;let m;m=n.createElement(o,{initialPayload:{element:t}},p),m=n.createElement(r,{initialRoute:window.location.pathname,children:m}),m=n.createElement(i,{initialPathname:window.location.pathname,children:m}),a(e).render(m)}catch(t){console.error(`[rari] Error rendering app:`,t),e.innerHTML=`
6
6
  <div style="padding: 20px; background: #fee; border: 2px solid #f00; margin: 20px;">
7
7
  <h2>Error Loading App</h2>
8
8
  <p></p>
@@ -4,7 +4,5 @@ interface CreateFromStreamOptions {
4
4
  }
5
5
  declare function createFromReadableStream(stream: ReadableStream<Uint8Array>, options?: CreateFromStreamOptions): Promise<any>;
6
6
  declare function createFromFetch(fetchPromise: Promise<Response>, options?: CreateFromStreamOptions): Promise<any>;
7
- declare function encodeReply(value: any): string;
8
- declare function decodeReply(text: string): any;
9
7
  //#endregion
10
- export { createFromFetch, createFromReadableStream, decodeReply, encodeReply };
8
+ export { createFromFetch, createFromReadableStream };