rari 0.15.7 → 0.15.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +1 -1
- package/dist/constants-DZuNx7IB.mjs +1 -0
- package/dist/image.mjs +1 -1
- package/dist/platform.mjs +1 -1
- package/dist/{railway-HYTbx27C.mjs → railway-dlVtU472.mjs} +1 -1
- package/dist/{render-CG5rxWXV.mjs → render-Dipra0HL.mjs} +1 -1
- package/dist/runtime/AppRouterProvider.mjs +1 -1
- package/dist/runtime/entry-client.mjs +2 -2
- package/dist/{utils-C-LVG9QI-D-IHIad5.mjs → utils-BLSRP4f6-8hVIII5T.mjs} +2 -2
- package/dist/vite.mjs +67 -77
- package/package.json +12 -13
- package/dist/constants-De7aSsCq.mjs +0 -1
package/dist/cli.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as e,g as t,v as n}from"./type-guards-CTkEL8zw.mjs";import{getBinaryPath as r,getInstallationInstructions as i}from"./platform.mjs";import{spawn as a}from"node:child_process";import{existsSync as o,readFileSync as s,readdirSync as c,realpathSync as l,rmSync as u}from"node:fs";import{resolve as d}from"node:path";import f from"node:process";import{fileURLToPath as p}from"node:url";import{parseArgs as m,styleText as h}from"node:util";function g(e){console.warn(`${h(`blue`,`info`)} ${e}`)}function _(e){console.warn(`${h(`green`,`✓`)} ${e}`)}function v(e){console.error(`${h(`red`,`✗`)} ${e}`)}function y(e){console.warn(`${h(`yellow`,`⚠`)} ${e}`)}let b=null;function x(e){let t=o(e)?new Set(S(e)):new Set;return t.has(`pnpm-lock.yaml`)?`pnpm`:t.has(`yarn.lock`)?`yarn`:t.has(`bun.lockb`)||t.has(`bun.lock`)?`bun`:t.has(`package-lock.json`)?`npm`:C(e)}function S(e){try{return c(e)}catch{return[]}}function C(n){try{let r=d(n,`package.json`);if(!o(r))return null;let i=t(s(r,`utf-8`));return i?e(i):null}catch{}return null}function w(e){try{let r=d(e,`package.json`);if(!o(r))return null;let i=t(s(r,`utf-8`));return i?n(i):null}catch{}return null}function T(e){let t=e,n=null,r=null;for(;t!==d(t,`..`)&&(n??=x(t),r??=w(t),!(n&&r));)t=d(t,`..`);return{cwd:e,packageManager:n??`npm`,viteBin:r??`vite`}}function E(){let e=f.cwd();return b?.cwd===e||(b=T(e)),b}function D(){return E().packageManager}function O(){let e=E().packageManager,t=f.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`;case`npm`:return t?`npx.cmd`:`npx`;default:return t?`npx.cmd`:`npx`}}function k(e,t=f.cwd()){let n=f.platform===`win32`,r=t;for(;r!==d(r,`..`);){let t=d(r,`node_modules`,`.bin`),i=n?[d(t,`${e}.cmd`),d(t,`${e}.exe`),d(t,e)]:[d(t,e)];for(let e of i)if(o(e))return e;r=d(r,`..`)}return null}function A(e,t,n={}){let r=f.platform===`win32`;if(e===`npx`){let e=O();if(e.includes(`bun`))return a(r?`bunx.cmd`:`bunx`,t,{...n,shell:r});if(e.includes(`pnpm`))return a(e,[`exec`,...t],{...n,shell:r});if(e.includes(`yarn`)){let[i,...o]=t
|
|
1
|
+
import{_ as e,g as t,v as n}from"./type-guards-CTkEL8zw.mjs";import{getBinaryPath as r,getInstallationInstructions as i}from"./platform.mjs";import{spawn as a}from"node:child_process";import{existsSync as o,readFileSync as s,readdirSync as c,realpathSync as l,rmSync as u}from"node:fs";import{resolve as d}from"node:path";import f from"node:process";import{fileURLToPath as p}from"node:url";import{parseArgs as m,styleText as h}from"node:util";function g(e){console.warn(`${h(`blue`,`info`)} ${e}`)}function _(e){console.warn(`${h(`green`,`✓`)} ${e}`)}function v(e){console.error(`${h(`red`,`✗`)} ${e}`)}function y(e){console.warn(`${h(`yellow`,`⚠`)} ${e}`)}let b=null;function x(e){let t=o(e)?new Set(S(e)):new Set;return t.has(`pnpm-lock.yaml`)?`pnpm`:t.has(`yarn.lock`)?`yarn`:t.has(`bun.lockb`)||t.has(`bun.lock`)?`bun`:t.has(`package-lock.json`)?`npm`:C(e)}function S(e){try{return c(e)}catch{return[]}}function C(n){try{let r=d(n,`package.json`);if(!o(r))return null;let i=t(s(r,`utf-8`));return i?e(i):null}catch{}return null}function w(e){try{let r=d(e,`package.json`);if(!o(r))return null;let i=t(s(r,`utf-8`));return i?n(i):null}catch{}return null}function T(e){let t=e,n=null,r=null;for(;t!==d(t,`..`)&&(n??=x(t),r??=w(t),!(n&&r));)t=d(t,`..`);return{cwd:e,packageManager:n??`npm`,viteBin:r??`vite`}}function E(){let e=f.cwd();return b?.cwd===e||(b=T(e)),b}function D(){return E().packageManager}function O(){let e=E().packageManager,t=f.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`;case`npm`:return t?`npx.cmd`:`npx`;default:return t?`npx.cmd`:`npx`}}function k(e,t=f.cwd()){let n=f.platform===`win32`,r=t;for(;r!==d(r,`..`);){let t=d(r,`node_modules`,`.bin`),i=n?[d(t,`${e}.cmd`),d(t,`${e}.exe`),d(t,e)]:[d(t,e)];for(let e of i)if(o(e))return e;r=d(r,`..`)}return null}function A(e,t,n={}){let r=f.platform===`win32`;if(e===`npx`){let e=O();if(e.includes(`bun`))return a(r?`bunx.cmd`:`bunx`,t,{...n,shell:r});if(e.includes(`pnpm`))return a(e,[`exec`,...t],{...n,shell:r});if(e.includes(`yarn`)){let[i,...o]=t,s=i===`vp`?[`dlx`,`-p`,`vite-plus`,`vp`,...o]:[`dlx`,...t];return a(e,s,{...n,shell:r})}}return r&&e===`npx`?a(`npx.cmd`,t,{...n,shell:!0}):a(e,t,n)}function j(e,t,n={}){let r=k(e);if(r!=null&&r!==``){let e=f.platform===`win32`&&r.endsWith(`.cmd`);return a(r,t,e?{...n,shell:!0}:n)}return A(`npx`,[e,...t],n)}async function M(e,t={}){return new Promise((n,r)=>{e.on(`exit`,e=>{n(e)}),e.on(`error`,e=>{t.tolerateErrors?(y(N(e)),n(1)):r(e)})})}function N(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function P(){let e=d(f.cwd(),`.env`);o(e)&&f.loadEnvFile(e)}function F(e){let{values:t,positionals:n}=m({args:e,options:{help:{type:`boolean`,short:`h`,default:!1}},allowPositionals:!0,strict:!1});if(t.help===!0)return{command:`help`,args:[]};let[r=`help`,...i]=n;return{command:r,args:i}}function I(){return f.env.RAILWAY_ENVIRONMENT!=null&&f.env.RAILWAY_ENVIRONMENT!==``||f.env.RAILWAY_PROJECT_ID!=null&&f.env.RAILWAY_PROJECT_ID!==``||f.env.RAILWAY_SERVICE_ID!=null&&f.env.RAILWAY_SERVICE_ID!==``}function L(){return f.env.RENDER!=null&&f.env.RENDER!==``||f.env.RENDER_SERVICE_ID!=null&&f.env.RENDER_SERVICE_ID!==``||f.env.RENDER_SERVICE_NAME!=null&&f.env.RENDER_SERVICE_NAME!==``}function R(){return I()||L()}function z(){return I()?`Railway`:L()?`Render`:`local`}function B(){return{port:f.env.PORT!=null&&f.env.PORT!==``?f.env.PORT:f.env.RSC_PORT!=null&&f.env.RSC_PORT!==``?f.env.RSC_PORT:`3000`,mode:f.env.NODE_ENV!=null&&f.env.NODE_ENV!==``?f.env.NODE_ENV:`production`,host:R()?`0.0.0.0`:`127.0.0.1`}}async function V(){q();let e=E().viteBin;g(`Type checking...`);let t=await M(j(`tsc`,[],{stdio:`inherit`,cwd:f.cwd()}));if(t===0)_(`Type check passed`);else throw v(`Type check failed with code ${t}`),Error(`Type check failed with code ${t}`);g(`Building for production...`);let n=await M(j(e,[`build`],{stdio:`inherit`,cwd:f.cwd()}));if(n===0)_(`Build complete`);else throw v(`Build failed with code ${n}`),Error(`Build failed with code ${n}`);await H()}async function H(){let e=d(f.cwd(),`dist`,`server`,`image.json`);if(!o(e))return;let t=d(f.cwd(),`public`);if(o(t))try{let e=r(),t=await M(a(e,[`optimize-images`],{stdio:`inherit`,cwd:f.cwd(),shell:!1}),{tolerateErrors:!0});t!==0&&y(`Image pre-optimization exited with code ${t}`)}catch(e){y(`Could not pre-optimize images: ${N(e)}`)}}async function U(){let e=E().viteBin,t=d(f.cwd(),`dist`);if(!o(t)){g(`First run detected - building project...`);let t=await M(j(e,[`build`,`--mode`,`development`],{stdio:`inherit`,cwd:f.cwd()}));if(t===0)_(`Initial build complete`);else throw v(`Build failed with code ${t}`),Error(`Build failed with code ${t}`)}g(`Starting Vite${e===`vp`?`+`:``} dev server...`);let n=j(e,[`dev`],{stdio:`inherit`,cwd:f.cwd()}),r=()=>{g(`Shutting down dev server...`),n.kill(`SIGTERM`)};return f.on(`SIGINT`,r),f.on(`SIGTERM`,r),n.on(`error`,e=>{v(`Failed to start Vite: ${e.message}`),f.exit(1)}),n.on(`exit`,e=>{e!==0&&e!==null&&(v(`Vite exited with code ${e}`),f.exit(e))}),new Promise(()=>{})}async function W(){let e;try{e=r()}catch{v(`Failed to obtain rari binary`),v(i()),f.exit(1)}let{port:t,mode:n,host:o}=B();if(R()){let r=z();g(`${r} environment detected`),g(`Starting rari server for ${r} deployment...`),g(`Mode: ${n}, Host: ${o}, Port: ${t}`),g(`using binary: ${e}`)}let s=[`--mode`,n,`--port`,t,`--host`,o],c=f.platform!==`win32`&&f.stdin.isTTY,l=a(e,s,{stdio:`inherit`,cwd:f.cwd(),detached:c,env:{...f.env,RUST_LOG:f.env.RUST_LOG!=null&&f.env.RUST_LOG!==``?f.env.RUST_LOG:`error`}}),u=!1,d,p=()=>{u||(u=!0,g(`shutting down...`),l.kill(`SIGTERM`),d=setTimeout(()=>{l.kill(`SIGKILL`),f.exit(1)},5e3),d.unref())};return f.on(`SIGINT`,p),f.on(`SIGTERM`,p),f.on(`exit`,()=>{try{l.kill(`SIGKILL`)}catch{}}),l.on(`error`,e=>{v(`Failed to start rari server: ${e.message}`),e.message.includes(`ENOENT`)&&v(`Binary not found. Please ensure rari is properly installed.`),f.exit(1)}),l.on(`exit`,(e,t)=>{d&&clearTimeout(d),t!=null&&t!==``?(u&&(g(`server stopped by signal ${t}`),f.exit(0)),v(`server stopped unexpectedly by signal ${t}`),f.exit(1)):e===0?(_(`server stopped successfully`),f.exit(0)):(v(`server exited with code ${e}`),f.exit(e!=null&&e!==0?e:1))}),new Promise(()=>{})}async function G(){g(`Setting up Railway deployment...`),R()&&(v(`Already running in ${z()} environment. Use "rari start" instead.`),f.exit(1));let{createRailwayDeployment:e}=await import(`./railway-dlVtU472.mjs`);e()}async function K(){g(`Setting up Render deployment...`),R()&&(v(`Already running in ${z()} environment. Use "rari start" instead.`),f.exit(1));let{createRenderDeployment:e}=await import(`./render-Dipra0HL.mjs`);e()}function q(){let e=d(f.cwd(),`dist`);o(e)?(g(`Cleaning dist folder...`),u(e,{recursive:!0,force:!0}),_(`Cleaned dist folder`)):g(`No dist folder to clean`)}function J(){console.warn(`${h(`bold`,`rari CLI`)}
|
|
2
2
|
|
|
3
3
|
${h(`bold`,`Usage:`)}
|
|
4
4
|
${h(`cyan`,`rari dev`)} Start the development server with Vite
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=[640,750,828,1080,1200,1920,2048,3840],t=[16,32,48,64,96,128,256,384],n=[`avif`],r=[25,50,75,100],i=60,a=104857600;export{i as a,a as i,n,r as o,t as r,e as t};
|
package/dist/image.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,t as a}from"./constants-
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"./constants-DZuNx7IB.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!=null&&r!==0?r:typeof e==`string`?void 0:e.width,A=i!=null&&i!==0?i:typeof e==`string`?void 0:e.height,j=_!=null&&_!==``?_:typeof e==`string`?void 0:e.blurDataURL,M=E!=null&&E!==``?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)return;let e=document.createElement(`link`);return e.rel=`preload`,e.as=`image`,e.href=T?T({src:M,width:k!=null&&k!==0?k:1920,quality:p}):w?M:f(M,k!=null&&k!==0?k:1920,p),y!=null&&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!=null&&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){let e=T?T({src:M,width:k!=null&&k!==0?k:1920,quality:p}):M;return u(`img`,{ref:z,src:e,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!=null&&k!==0?k:1920,K=k!=null&&k!==0?[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}const m=typeof window>`u`,h=p;m&&(h.$$typeof=Symbol.for(`react.client.reference`),h.$$id=`rari/image#Image`);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,h as Image};
|
package/dist/platform.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{existsSync as e}from"node:fs";import{dirname as t,join as n}from"node:path";import r from"node:process";import{fileURLToPath as i}from"node:url";const a={"linux-x64":`rari-linux-x64`,"linux-arm64":`rari-linux-arm64`,"darwin-x64":`rari-darwin-x64`,"darwin-arm64":`rari-darwin-arm64`,"win32-arm64":`rari-win32-arm64`,"win32-x64":`rari-win32-x64`};function o(e){return Object.hasOwn(a,e)}function s(){let e=r.platform,t=r.arch,n;switch(e){case`darwin`:n=`darwin`;break;case`linux`:n=`linux`;break;case`win32`:n=`win32`;break;case`aix`:case`android`:case`cygwin`:case`freebsd`:case`haiku`:case`openbsd`:case`sunos`:case`netbsd`:throw Error(`Unsupported platform: ${e}. rari supports Linux, macOS, and Windows.`);default:throw Error(`Unsupported platform: ${String(e)}. rari supports Linux, macOS, and Windows.`)}let i;switch(t){case`x64`:i=`x64`;break;case`arm64`:i=`arm64`;break;case`arm`:case`ia32`:case`loong64`:case`mips`:case`mipsel`:case`ppc64`:case`riscv64`:case`s390x`:throw Error(`Unsupported architecture: ${t}. rari supports x64 and ARM64.`);default:throw Error(`Unsupported architecture: ${String(t)}. rari supports x64 and ARM64.`)}let s=`${n}-${i}`;if(!o(s))throw Error(`Unsupported platform combination: ${n}-${i}. Supported platforms: ${Object.keys(a).join(`, `)}`);let c=a[s];return{platform:n,arch:i,packageName:c,binaryName:n===`win32`?`rari.exe`:`rari`}}let c=null;function l(){let{packageName:r,binaryName:a}=s(),o=t(i(import.meta.url));for(;o!==t(o);){if(e(n(o,`pnpm-workspace.yaml`))){let t=n(o,`packages`,r,`bin`,a);if(e(t))return t;break}o=t(o)}try{let t=import.meta.resolve(`${r}/package.json`),o=
|
|
1
|
+
import{existsSync as e}from"node:fs";import{dirname as t,join as n}from"node:path";import r from"node:process";import{fileURLToPath as i}from"node:url";const a={"linux-x64":`rari-linux-x64`,"linux-arm64":`rari-linux-arm64`,"darwin-x64":`rari-darwin-x64`,"darwin-arm64":`rari-darwin-arm64`,"win32-arm64":`rari-win32-arm64`,"win32-x64":`rari-win32-x64`};function o(e){return Object.hasOwn(a,e)}function s(){let e=r.platform,t=r.arch,n;switch(e){case`darwin`:n=`darwin`;break;case`linux`:n=`linux`;break;case`win32`:n=`win32`;break;case`aix`:case`android`:case`cygwin`:case`freebsd`:case`haiku`:case`openbsd`:case`sunos`:case`netbsd`:throw Error(`Unsupported platform: ${e}. rari supports Linux, macOS, and Windows.`);default:throw Error(`Unsupported platform: ${String(e)}. rari supports Linux, macOS, and Windows.`)}let i;switch(t){case`x64`:i=`x64`;break;case`arm64`:i=`arm64`;break;case`arm`:case`ia32`:case`loong64`:case`mips`:case`mipsel`:case`ppc64`:case`riscv64`:case`s390x`:throw Error(`Unsupported architecture: ${t}. rari supports x64 and ARM64.`);default:throw Error(`Unsupported architecture: ${String(t)}. rari supports x64 and ARM64.`)}let s=`${n}-${i}`;if(!o(s))throw Error(`Unsupported platform combination: ${n}-${i}. Supported platforms: ${Object.keys(a).join(`, `)}`);let c=a[s];return{platform:n,arch:i,packageName:c,binaryName:n===`win32`?`rari.exe`:`rari`}}let c=null;function l(){let{packageName:r,binaryName:a}=s(),o=t(i(import.meta.url));for(;o!==t(o);){if(e(n(o,`pnpm-workspace.yaml`))){let t=n(o,`packages`,r,`bin`,a);if(e(t))return t;break}o=t(o)}try{let t=import.meta.resolve(`${r}/package.json`),o=i(new URL(`.`,t)),s=n(o,`bin`,a);if(e(s))return s;throw Error(`Binary not found at ${s}`)}catch{throw Error(`Failed to locate rari binary for ${r}. Please ensure the platform package is installed: npm install ${r}`)}}function u(){return c!=null&&c!==``||(c=l()),c}function d(){let{packageName:e}=s();return`
|
|
2
2
|
To install rari for your platform, run:
|
|
3
3
|
|
|
4
4
|
npm install ${e}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-BLSRP4f6-8hVIII5T.mjs";import{existsSync as o,readFileSync as s,writeFileSync as c}from"node:fs";import{join as l}from"node:path";import u from"node:process";import{styleText as d}from"node:util";function f(){let r=u.cwd();e(`Creating Railway deployment configuration...`),i(r,{providerName:`Railway`,deployScript:`echo "Push to GitHub and connect to Railway to deploy"`,startScript:`rari start`,dependency:n()}),p(r),t(r,`Railway`,`.railway`),m(r),h()}function p(e){a(e,`railway.toml`,`[build]
|
|
2
2
|
builder = "RAILPACK"
|
|
3
3
|
|
|
4
4
|
[deploy]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"./utils-BLSRP4f6-8hVIII5T.mjs";import{existsSync as o,readFileSync as s,writeFileSync as c}from"node:fs";import{join as l}from"node:path";import u from"node:process";import{styleText as d}from"node:util";function f(){let r=u.cwd();e(`Creating Render deployment configuration...`),i(r,{providerName:`Render`,deployScript:`echo "Push to GitHub and connect to Render to deploy"`,startScript:`rari start`,dependency:n()}),p(r),t(r,`Render`,`.render`),m(r),h()}function p(e){a(e,`render.yaml`,`services:
|
|
2
2
|
- type: web
|
|
3
3
|
name: rari-app
|
|
4
4
|
runtime: node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{n as e,p as t}from"../type-guards-CTkEL8zw.mjs";import{f as n}from"../regex-constants-Wm7xRA3u.mjs";import{a as r}from"../rari-global-5vGzhToD.mjs";import"./action-revalidation-kind.mjs";import{mergeFlightRefresh as i}from"./merge-flight-refresh.mjs";import{currentRouteLocation as a,flightRouteCache as o}from"./flight-route-cache.mjs";import{t as s}from"../preload-modules-QmSvKk0Q.mjs";import*as c from"react";import{useEffect as l,useRef as u,useState as d}from"react";import{Fragment as f,jsx as p,jsxs as m}from"react/jsx-runtime";import{createFromReadableStream as h}from"virtual:react-flight-client";const g=/"timestamp":(\d+)/;function _(e){return t(e)&&typeof e.then==`function`}function v(e){return e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||c.isValidElement(e)||Array.isArray(e)}function y(e){return t(e)&&typeof e.from==`string`&&typeof e.to==`string`&&typeof e.navigationId==`number`&&t(e.options)}function b(e){return t(e)&&`element`in e}function x(e){return t(e)&&typeof e.navigationId==`number`&&typeof e.targetPath==`string`}function S({children:S,initialPayload:C,onNavigate:w}){let[T,E]=d(C),D=u(C),O=d(0)[1],k=u({x:0,y:0}),A=u(new Map),j=u(new Set),M=u(w),N=u(0),P=u(new Map),F=u([]),I=u(null),L=u(0),[R,z]=d(null);l(()=>{M.current=w},[w]);let B=e=>{if(e==null||_(e))return;let{pathname:t,search:n}=a();o.set(t,n,e)};l(()=>{D.current=T,T?.element!=null&&B(T.element)},[T]),l(()=>{if(T?.element!=null){let e=T.element;if(t(e)&&`status`in e&&e.status===`rejected`){let t=e.reason;t!=null&&t!==``&&console.error(`[rari] AppRouter: Flight payload rejected:`,t)}}},[T]);let V=()=>{if(typeof document>`u`)return;let e=document.querySelectorAll(`form`);A.current.clear(),e.forEach((e,t)=>{let n=new FormData(e);A.current.set(`form-${t}`,n)})},H=()=>{typeof document>`u`||document.querySelectorAll(`form`).forEach((e,t)=>{let n=A.current.get(`form-${t}`);n&&n.forEach((t,n)=>{let r=e.elements.namedItem(n);r instanceof HTMLInputElement&&(r.type===`checkbox`||r.type===`radio`?r.checked=t===`on`:typeof t==`string`&&(r.value=t))})})},U=(e,t,n,r)=>{let i={timestamp:Date.now(),error:e,type:t,details:n,filePath:r};F.current.push(i),L.current+=1,F.current.length>10&&F.current.shift(),L.current>=2&&z(i),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:hmr-failure`,{detail:i}))},W=()=>{setTimeout(()=>{window.location.reload()},1e3)},G=()=>{L.current>0&&(L.current=0)},K=e=>{if(I.current==null||I.current===``)return!1;if(e===I.current)return!0;let t=g.exec(e);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1},q=async e=>{await s(e,j.current);let t=await h(new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}));return{element:t,rawElement:t,flightProtocol:e}},J=async(e,t=!1)=>{let n=await e;if(!n.body)throw Error(`Response has no body stream`);if(t){let e=h(n.body);return{element:e,rawElement:e,flightProtocol:``}}let r=await n.clone().text();await s(r,j.current);let i=new Uint8Array(await n.arrayBuffer()),a=await h(new ReadableStream({start(e){e.enqueue(i),e.close()}}));return{element:a,rawElement:a,flightProtocol:r}},Y=async(e,t)=>{let r=e!=null&&e!==``?e:window.location.pathname,i=N.current,a=`${i}:${r}${window.location.search}`,o=P.current.get(a);if(o)return o;let c=(async()=>{try{let e=(import.meta.env.RARI_SERVER_URL!=null&&import.meta.env.RARI_SERVER_URL!==``?import.meta.env.RARI_SERVER_URL:window.location.origin).replace(n,``)+r+window.location.search,a=await fetch(e,{headers:{Accept:`text/x-component`,"rari-navigation-id":String(N.current)},cache:`no-store`,signal:t});if(!a.ok){let t=Error(`Failed to fetch RSC data: ${a.status} ${a.statusText}`);throw U(t,`fetch`,`HTTP ${a.status} when fetching ${e}`,window.location.pathname),t}let o,c=``;try{if(c=await a.clone().text(),K(c)&&T)return T;await s(c,j.current);let e=new Uint8Array(await a.arrayBuffer()),t=await h(new ReadableStream({start(t){t.enqueue(e),t.close()}}));o={element:t,rawElement:t,flightProtocol:c}}catch(e){let t=e instanceof Error?e:Error(String(e));throw U(t,`parse`,`Failed to parse RSC Flight protocol: ${t.message}`,window.location.pathname),t}return N.current===i&&(E(o),I.current=c,G()),o}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&U(e,`network`,`Network error: ${e.message}`,window.location.pathname),e}finally{P.current.delete(a)}})();return P.current.set(a,c),c},X=u(q),Z=u(J),Q=u(Y);l(()=>{X.current=q,Z.current=J,Q.current=Y}),l(()=>{if(typeof window>`u`)return;let t=async t=>{let n=e(t,y);if(!n||n.navigationId!==N.current)return;k.current={x:window.scrollX,y:window.scrollY},V();let r,i=null,a=!1;try{if(n.rscResponsePromise){let e=await n.rscResponsePromise;if(N.current!==n.navigationId||(a=e.headers.get(`x-render-mode`)===`streaming`,r=await Z.current(Promise.resolve(e),a),N.current!==n.navigationId))return}else if(n.rscResponse){if(a=n.rscResponse.headers.get(`x-render-mode`)===`streaming`,r=await Z.current(Promise.resolve(n.rscResponse),a),N.current!==n.navigationId)return}else n.rscFlightProtocol!=null&&n.rscFlightProtocol!==``?r=await X.current(n.rscFlightProtocol):n.isStreaming||(r=await Q.current(n.to,n.abortSignal))}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;i=e instanceof Error?e:Error(String(e))}if(i){console.error(`[rari] AppRouter: Navigation failed:`,i),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:n.from,to:n.to,error:i,navigationId:n.navigationId}})),L.current>=3&&W();return}if(!r&&n.isStreaming&&N.current===n.navigationId)return;r&&N.current===n.navigationId&&(a||n.options.historyKey!=null&&n.options.historyKey!==``?(E(r),O(e=>e+1),z(null)):c.startTransition(()=>{E(r),O(e=>e+1),z(null)}),n.rscFlightProtocol!=null&&n.rscFlightProtocol!==``&&(I.current=n.rscFlightProtocol),G(),M.current&&M.current(n));let o=typeof window<`u`&&window.location.hash.length>0;(n.options.historyKey==null||n.options.historyKey===``)&&!o&&requestAnimationFrame(()=>{n.options.scroll!==!1&&window.scrollTo(0,0)})},n=async()=>{k.current={x:window.scrollX,y:window.scrollY},V();try{await Q.current(),O(e=>e+1),z(null)}catch(e){console.error(`HMR refetch error:`,e instanceof Error?e.message:String(e)),L.current>=3&&W()}finally{requestAnimationFrame(()=>{window.scrollTo(k.current.x,k.current.y),H()})}},s=t=>{let n=e(t,b);if(!(n?.element==null||!v(n.element)&&!_(n.element))){k.current={x:window.scrollX,y:window.scrollY},V();try{let{pathname:e,search:t}=a();n.revalidationKind===1?o.clear():n.revalidatedPath!=null&&n.revalidatedPath!==``?o.invalidate(n.revalidatedPath,t):o.invalidate(e,t);let r=D.current?.element,s=o.getElement(e,t)??(r!=null&&_(r)?null:r??null),l=n.element,u=_(l)?l:i(s,l);c.startTransition(()=>{E({element:u,rawElement:u}),z(null)}),B(u),G()}catch(e){let t=e instanceof Error?e:Error(String(e));U(t,`parse`,`Action flight refresh failed: ${t.message}`,window.location.pathname),L.current>=3&&W()}finally{requestAnimationFrame(()=>{window.scrollTo(k.current.x,k.current.y),H()})}}},l=async()=>{try{await Q.current(),O(e=>e+1),z(null)}catch(e){console.error(`RSC invalidate error:`,e instanceof Error?e.message:String(e)),L.current>=3&&W()}},u=t=>{let n=e(t,x);if(n&&(j.current.clear(),N.current=n.navigationId,typeof window<`u`)){let e=r();e&&(e.navigationId=n.navigationId)}},d=async()=>{try{await Q.current(),z(null)}catch(e){console.error(`Manifest update error:`,e instanceof Error?e.message:String(e)),L.current>=3&&W()}},f=e=>{t(e)},p=()=>{n()},m=()=>{l()},h=()=>{d()};return window.addEventListener(`rari:navigation-start`,u),window.addEventListener(`rari:navigate`,f),window.addEventListener(`rari:app-router-rerender`,p),window.addEventListener(`rari:action-flight-refresh`,s),window.addEventListener(`rari:rsc-invalidate`,m),window.addEventListener(`rari:app-router-manifest-updated`,h),()=>{window.removeEventListener(`rari:navigation-start`,u),window.removeEventListener(`rari:navigate`,f),window.removeEventListener(`rari:app-router-rerender`,p),window.removeEventListener(`rari:action-flight-refresh`,s),window.removeEventListener(`rari:rsc-invalidate`,m),window.removeEventListener(`rari:app-router-manifest-updated`,h)}},[]),l(()=>{if(!(typeof window>`u`)&&window.location.hash&&T){let e=window.location.hash.slice(1);requestAnimationFrame(()=>{requestAnimationFrame(()=>{let t=document.getElementById(e);t&&t.scrollIntoView({behavior:`instant`,block:`start`})})})}},[T]);let ee=()=>{window.location.reload()},te=()=>{z(null)},$=S;if(T?.element!=null&&($=T.element),Array.isArray($)){let e=$;e.length===1&&c.isValidElement(e[0])?$=e[0]:e.length>0&&e.every(e=>c.isValidElement(e)||e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&($=c.createElement(c.Fragment,null,...e))}return m(f,{children:[R&&m(`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:[p(`div`,{style:{marginBottom:`16px`,fontWeight:`bold`,fontSize:`16px`},children:`⚠️ HMR Update Failed`}),m(`div`,{style:{marginBottom:`12px`,opacity:.9},children:[R.type===`fetch`&&`Failed to fetch updated content from server.`,R.type===`parse`&&`Failed to parse server response.`,R.type===`stale`&&`Server returned stale content.`,R.type===`network`&&`Network error occurred.`]}),p(`div`,{style:{marginBottom:`16px`,fontSize:`12px`,opacity:.8,fontFamily:`monospace`},children:R.details}),m(`div`,{style:{marginBottom:`12px`,fontSize:`12px`,opacity:.7},children:[`Consecutive failures: `,L.current,` / `,3]}),m(`div`,{style:{display:`flex`,gap:`8px`},children:[p(`button`,{onClick:ee,type:`button`,style:{padding:`8px 16px`,background:`white`,color:`#dc2626`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontWeight:`bold`,fontSize:`14px`},children:`Refresh Page`}),p(`button`,{onClick:te,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`})]}),p(`div`,{style:{marginTop:`12px`,fontSize:`11px`,opacity:.6},children:`Check the console for detailed error logs.`})]}),$]})}export{S as AppRouterProvider};
|
|
1
|
+
"use client";import{n as e,p as t}from"../type-guards-CTkEL8zw.mjs";import{f as n}from"../regex-constants-Wm7xRA3u.mjs";import{a as r}from"../rari-global-5vGzhToD.mjs";import"./action-revalidation-kind.mjs";import{mergeFlightRefresh as i}from"./merge-flight-refresh.mjs";import{currentRouteLocation as a,flightRouteCache as o}from"./flight-route-cache.mjs";import{t as s}from"../preload-modules-QmSvKk0Q.mjs";import*as c from"react";import{useEffect as l,useRef as u,useState as d}from"react";import{Fragment as f,jsx as p,jsxs as m}from"react/jsx-runtime";import{createFromReadableStream as h}from"virtual:react-flight-client";const g=/"timestamp":(\d+)/;function _(e){return t(e)&&typeof e.then==`function`}function v(e){return e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||c.isValidElement(e)||Array.isArray(e)}function y(e){return t(e)&&typeof e.from==`string`&&typeof e.to==`string`&&typeof e.navigationId==`number`&&t(e.options)}function b(e){return t(e)&&`element`in e}function ee(e){return t(e)&&typeof e.navigationId==`number`&&typeof e.targetPath==`string`}function x({children:x,initialPayload:S,onNavigate:C}){let[w,T]=d(S),E=u(S),[te,D]=d(0),O=u({x:0,y:0}),k=u(new Map),A=u(new Set),j=u(C),M=u(0),N=u(new Map),P=u([]),F=u(null),I=u(0),[L,R]=d(null);l(()=>{j.current=C},[C]);let z=e=>{if(e==null||_(e))return;let{pathname:t,search:n}=a();o.set(t,n,e)};l(()=>{E.current=w,w?.element!=null&&z(w.element)},[w]),l(()=>{if(w?.element!=null){let e=w.element;if(t(e)&&`status`in e&&e.status===`rejected`){let t=e.reason;t!=null&&t!==``&&console.error(`[rari] AppRouter: Flight payload rejected:`,t)}}},[w]);let B=()=>{if(typeof document>`u`)return;let e=document.querySelectorAll(`form`);k.current.clear(),e.forEach((e,t)=>{let n=new FormData(e);k.current.set(`form-${t}`,n)})},V=()=>{typeof document>`u`||document.querySelectorAll(`form`).forEach((e,t)=>{let n=k.current.get(`form-${t}`);n&&n.forEach((t,n)=>{let r=e.elements.namedItem(n);r instanceof HTMLInputElement&&(r.type===`checkbox`||r.type===`radio`?r.checked=t===`on`:typeof t==`string`&&(r.value=t))})})},H=(e,t,n,r)=>{I.current+=1;let i={timestamp:Date.now(),error:e,type:t,details:n,filePath:r,consecutiveFailures:I.current};P.current.push(i),P.current.length>10&&P.current.shift(),I.current>=2&&R(i),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`rari:hmr-failure`,{detail:i}))},U=()=>{setTimeout(()=>{window.location.reload()},1e3)},W=()=>{I.current>0&&(I.current=0)},G=e=>{if(F.current==null||F.current===``)return!1;if(e===F.current)return!0;let t=g.exec(e);if(t){let e=Number.parseInt(t[1],10);if(Date.now()-e>5e3)return!0}return!1},K=async e=>{await s(e,A.current);let t=new ReadableStream({start(t){t.enqueue(new TextEncoder().encode(e)),t.close()}}),n=await h(t);return{element:n,rawElement:n,flightProtocol:e}},q=async(e,t=!1)=>{let n=await e;if(!n.body)throw Error(`Response has no body stream`);if(t){let e=h(n.body);return{element:e,rawElement:e,flightProtocol:``}}let r=await n.clone().text();await s(r,A.current);let i=new Uint8Array(await n.arrayBuffer()),a=new ReadableStream({start(e){e.enqueue(i),e.close()}}),o=await h(a);return{element:o,rawElement:o,flightProtocol:r}},J=async(e,t)=>{let r=e!=null&&e!==``?e:window.location.pathname,i=M.current,a=`${i}:${r}${window.location.search}`,o=N.current.get(a);if(o)return o;let c=(async()=>{try{let e=(import.meta.env.RARI_SERVER_URL!=null&&import.meta.env.RARI_SERVER_URL!==``?import.meta.env.RARI_SERVER_URL:window.location.origin).replace(n,``)+r+window.location.search,a=await fetch(e,{headers:{Accept:`text/x-component`,"rari-navigation-id":String(M.current)},cache:`no-store`,signal:t});if(!a.ok){let t=Error(`Failed to fetch RSC data: ${a.status} ${a.statusText}`);throw H(t,`fetch`,`HTTP ${a.status} when fetching ${e}`,window.location.pathname),t}let o,c=``;try{if(c=await a.clone().text(),G(c)&&w)return w;await s(c,A.current);let e=new Uint8Array(await a.arrayBuffer()),t=new ReadableStream({start(t){t.enqueue(e),t.close()}}),n=await h(t);o={element:n,rawElement:n,flightProtocol:c}}catch(e){let t=e instanceof Error?e:Error(String(e));throw H(t,`parse`,`Failed to parse RSC Flight protocol: ${t.message}`,window.location.pathname),t}return M.current===i&&(T(o),F.current=c,W()),o}catch(e){throw e instanceof Error&&!e.message.includes(`Failed to fetch RSC data`)&&!e.message.includes(`Failed to parse`)&&H(e,`network`,`Network error: ${e.message}`,window.location.pathname),e}finally{N.current.delete(a)}})();return N.current.set(a,c),c},Y=u(K),X=u(q),Z=u(J);l(()=>{Y.current=K,X.current=q,Z.current=J}),l(()=>{if(typeof window>`u`)return;let t=async t=>{let n=e(t,y);if(!n||n.navigationId!==M.current)return;O.current={x:window.scrollX,y:window.scrollY},B();let r,i=null,a=!1;try{if(n.rscResponsePromise){let e=await n.rscResponsePromise;if(M.current!==n.navigationId||(a=e.headers.get(`x-render-mode`)===`streaming`,r=await X.current(Promise.resolve(e),a),M.current!==n.navigationId))return}else if(n.rscResponse){if(a=n.rscResponse.headers.get(`x-render-mode`)===`streaming`,r=await X.current(Promise.resolve(n.rscResponse),a),M.current!==n.navigationId)return}else n.rscFlightProtocol!=null&&n.rscFlightProtocol!==``?r=await Y.current(n.rscFlightProtocol):n.isStreaming||(r=await Z.current(n.to,n.abortSignal))}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;i=e instanceof Error?e:Error(String(e))}if(i){console.error(`[rari] AppRouter: Navigation failed:`,i),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:n.from,to:n.to,error:i,navigationId:n.navigationId}})),I.current>=3&&U();return}if(!r&&n.isStreaming&&M.current===n.navigationId)return;r&&M.current===n.navigationId&&(a||n.options.historyKey!=null&&n.options.historyKey!==``?(T(r),D(e=>e+1),R(null)):c.startTransition(()=>{T(r),D(e=>e+1),R(null)}),n.rscFlightProtocol!=null&&n.rscFlightProtocol!==``&&(F.current=n.rscFlightProtocol),W(),j.current&&j.current(n));let o=typeof window<`u`&&window.location.hash.length>0;(n.options.historyKey==null||n.options.historyKey===``)&&!o&&requestAnimationFrame(()=>{n.options.scroll!==!1&&window.scrollTo(0,0)})},n=async()=>{O.current={x:window.scrollX,y:window.scrollY},B();try{await Z.current(),D(e=>e+1),R(null)}catch(e){console.error(`HMR refetch error:`,e instanceof Error?e.message:String(e)),I.current>=3&&U()}finally{requestAnimationFrame(()=>{window.scrollTo(O.current.x,O.current.y),V()})}},s=t=>{let n=e(t,b);if(!(n?.element==null||!v(n.element)&&!_(n.element))){O.current={x:window.scrollX,y:window.scrollY},B();try{let{pathname:e,search:t}=a();n.revalidationKind===1?o.clear():n.revalidatedPath!=null&&n.revalidatedPath!==``?o.invalidate(n.revalidatedPath,t):o.invalidate(e,t);let r=E.current?.element,s=o.getElement(e,t)??(r!=null&&_(r)?null:r??null),l=n.element,u=_(l)?l:i(s,l);c.startTransition(()=>{T({element:u,rawElement:u}),R(null)}),z(u),W()}catch(e){let t=e instanceof Error?e:Error(String(e));H(t,`parse`,`Action flight refresh failed: ${t.message}`,window.location.pathname),I.current>=3&&U()}finally{requestAnimationFrame(()=>{window.scrollTo(O.current.x,O.current.y),V()})}}},l=async()=>{try{await Z.current(),D(e=>e+1),R(null)}catch(e){console.error(`RSC invalidate error:`,e instanceof Error?e.message:String(e)),I.current>=3&&U()}},u=t=>{let n=e(t,ee);if(n&&(A.current.clear(),M.current=n.navigationId,typeof window<`u`)){let e=r();e&&(e.navigationId=n.navigationId)}},d=async()=>{try{await Z.current(),R(null)}catch(e){console.error(`Manifest update error:`,e instanceof Error?e.message:String(e)),I.current>=3&&U()}},f=e=>{t(e)},p=()=>{n()},m=()=>{l()},h=()=>{d()};return window.addEventListener(`rari:navigation-start`,u),window.addEventListener(`rari:navigate`,f),window.addEventListener(`rari:app-router-rerender`,p),window.addEventListener(`rari:action-flight-refresh`,s),window.addEventListener(`rari:rsc-invalidate`,m),window.addEventListener(`rari:app-router-manifest-updated`,h),()=>{window.removeEventListener(`rari:navigation-start`,u),window.removeEventListener(`rari:navigate`,f),window.removeEventListener(`rari:app-router-rerender`,p),window.removeEventListener(`rari:action-flight-refresh`,s),window.removeEventListener(`rari:rsc-invalidate`,m),window.removeEventListener(`rari:app-router-manifest-updated`,h)}},[]),l(()=>{if(!(typeof window>`u`)&&window.location.hash&&w){let e=window.location.hash.slice(1);requestAnimationFrame(()=>{requestAnimationFrame(()=>{let t=document.getElementById(e);t&&t.scrollIntoView({behavior:`instant`,block:`start`})})})}},[w]);let Q=()=>{window.location.reload()},ne=()=>{R(null)},$=x;if(w?.element!=null&&($=w.element),Array.isArray($)){let e=$;e.length===1&&c.isValidElement(e[0])?$=e[0]:e.length>0&&e.every(e=>c.isValidElement(e)||e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&($=p(f,{children:e}))}return m(f,{children:[L&&m(`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:[p(`div`,{style:{marginBottom:`16px`,fontWeight:`bold`,fontSize:`16px`},children:`⚠️ HMR Update Failed`}),m(`div`,{style:{marginBottom:`12px`,opacity:.9},children:[L.type===`fetch`&&`Failed to fetch updated content from server.`,L.type===`parse`&&`Failed to parse server response.`,L.type===`stale`&&`Server returned stale content.`,L.type===`network`&&`Network error occurred.`]}),p(`div`,{style:{marginBottom:`16px`,fontSize:`12px`,opacity:.8,fontFamily:`monospace`},children:L.details}),m(`div`,{style:{marginBottom:`12px`,fontSize:`12px`,opacity:.7},children:[`Consecutive failures: `,L.consecutiveFailures,` / `,3]}),m(`div`,{style:{display:`flex`,gap:`8px`},children:[p(`button`,{onClick:Q,type:`button`,style:{padding:`8px 16px`,background:`white`,color:`#dc2626`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontWeight:`bold`,fontSize:`14px`},children:`Refresh Page`}),p(`button`,{onClick:ne,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`})]}),p(`div`,{style:{marginTop:`12px`,fontSize:`11px`,opacity:.6},children:`Check the console for detailed error logs.`})]}),$]})}export{x as AppRouterProvider};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{c as e,o as t,t as n}from"../router-D6mkoDqJ.mjs";import{d as r,g as i,n as a,p as o}from"../type-guards-CTkEL8zw.mjs";import{a as s,i as c,n as l,r as u}from"../rari-global-5vGzhToD.mjs";import{t as d}from"../get-client-component-CLpyIcLJ.mjs";import{t as f}from"../preload-modules-QmSvKk0Q.mjs";import*as p from"react";import{useEffect as m,useLayoutEffect as h,useRef as g,useState as _}from"react";import{createFromReadableStream as v}from"virtual:react-flight-client";import{createRoot as y,hydrateRoot as b}from"react-dom/client";import{AppRouterProvider as x}from"virtual:app-router-provider";import"virtual:rsc-integration.ts";function S(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;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)){h(e);return}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){a=e,r=setTimeout(p,t),c&&d(e)}function h(e){if(r=null,l&&o){d(e);return}o=null,s=null}function g(){r!==null&&clearTimeout(r),a=0,o=null,i=0,s=null,r=null}function _(){r!==null&&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){m(i);return}if(u!==void 0){r=setTimeout(p,t),d(i);return}}r??=setTimeout(p,t)}return y.cancel=g,y.flush=_,y.pending=v,y}const C=/fetch|networkerror|load failed/i;function w(e,t){return{type:`abort`,message:`Navigation was cancelled`,originalError:e,url:t,timestamp:Date.now(),retryable:!1}}function T(e,t){return{type:`timeout`,message:`Navigation request timed out`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function E(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 D(e,t){return{type:`network-error`,message:`Network error - check your connection`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function O(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 k(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 A(e,t){if(e instanceof Error&&e.name===`AbortError`)return w(e,t);if(e instanceof Error&&(e.name===`TimeoutError`||e.message.includes(`timeout`)))return T(e,t);if(e instanceof Error&&`status`in e){let n=e.status;return typeof n==`number`?E(e,n,t):k(e,t)}return e instanceof TypeError&&C.test(e.message)?D(e,t):e instanceof SyntaxError||e instanceof Error&&e.message.includes(`parse`)?O(e,t):k(e,t)}var ee=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=A(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()}};function j(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 M(e,t){try{return new URL(e,t!=null&&t!==``?t:window.location.origin).origin!==(t!=null&&t!==``?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}}const N=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)}}parseRouteInfoResponse(e){let t=i(e);if(!t||!this.isRouteInfoResponse(t))throw Error(`Failed to parse route info response`);return t}isRouteInfoResponse(e){return o(e)&&typeof e.exists==`boolean`&&Array.isArray(e.layouts)&&(e.loading===null||typeof e.loading==`string`)&&typeof e.isDynamic==`boolean`}async fetchRouteInfo(e){let t=await fetch(`/_rari/route-info`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})});if(!t.ok){let e;try{let n=i(await t.text());n&&typeof n.error==`string`&&n.error!==``&&(e=n.error)}catch{}throw Error(e!=null&&e!==``?e:`Failed to fetch route info: ${t.status} ${t.statusText}`)}let n=t.clone();try{let e=await t.text();return this.parseRouteInfoResponse(e)}catch(t){try{let e=await n.text();return this.parseRouteInfoResponse(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=s();e.routeInfoCache=N}var ne=class{stateHistory;routeAccessOrder;maxHistorySize;scrollableSelector;constructor(e={}){this.stateHistory=new Map,this.routeAccessOrder=[],this.maxHistorySize=e.maxHistorySize!=null&&e.maxHistorySize!==0?e.maxHistorySize:50,this.scrollableSelector=e.scrollableSelector!=null&&e.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!=null&&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!=null&&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),i=r instanceof HTMLFormElement?r:document.querySelector(`form[name="${n}"]`)??document.querySelectorAll(`form`)[Number.parseInt(n.replace(`form-`,``),10)];i instanceof HTMLFormElement?e.forEach((e,n)=>{try{let t=i.elements.namedItem(n);t instanceof RadioNodeList?t.forEach(t=>{t instanceof HTMLInputElement&&(t.type===`radio`||t.type===`checkbox`?t.checked=t.value===e:typeof e==`string`&&(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:typeof e==`string`&&(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 P(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 F(e){let t=document.querySelector(e);t&&t.remove()}function I(e){e.title!=null&&e.title!==``&&(document.title=e.title),e.description!=null&&e.description!==``?P(`meta[name="description"]`,{name:`description`,content:e.description}):F(`meta[name="description"]`),e.keywords&&e.keywords.length>0?P(`meta[name="keywords"]`,{name:`keywords`,content:e.keywords.join(`, `)}):F(`meta[name="keywords"]`),e.viewport!=null&&e.viewport!==``&&P(`meta[name="viewport"]`,{name:`viewport`,content:e.viewport})}function L(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 R(e){if(e===void 0){F(`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?P(`meta[name="robots"]`,{name:`robots`,content:t.join(`, `)}):F(`meta[name="robots"]`)}function z(e){if(e===void 0){F(`meta[property="og:title"]`),F(`meta[property="og:description"]`),F(`meta[property="og:url"]`),F(`meta[property="og:site_name"]`),F(`meta[property="og:type"]`),document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>{e.remove()});return}if(e.title!=null&&e.title!==``?P(`meta[property="og:title"]`,{property:`og:title`,content:e.title}):F(`meta[property="og:title"]`),e.description!=null&&e.description!==``?P(`meta[property="og:description"]`,{property:`og:description`,content:e.description}):F(`meta[property="og:description"]`),e.url!=null&&e.url!==``?P(`meta[property="og:url"]`,{property:`og:url`,content:e.url}):F(`meta[property="og:url"]`),e.siteName!=null&&e.siteName!==``?P(`meta[property="og:site_name"]`,{property:`og:site_name`,content:e.siteName}):F(`meta[property="og:site_name"]`),e.type!=null&&e.type!==``?P(`meta[property="og:type"]`,{property:`og:type`,content:e.type}):F(`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 B(e){if(e===void 0){F(`meta[name="twitter:card"]`),F(`meta[name="twitter:site"]`),F(`meta[name="twitter:creator"]`),F(`meta[name="twitter:title"]`),F(`meta[name="twitter:description"]`),document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>{e.remove()});return}if(e.card!=null&&e.card!==``?P(`meta[name="twitter:card"]`,{name:`twitter:card`,content:e.card}):F(`meta[name="twitter:card"]`),e.site!=null&&e.site!==``?P(`meta[name="twitter:site"]`,{name:`twitter:site`,content:e.site}):F(`meta[name="twitter:site"]`),e.creator!=null&&e.creator!==``?P(`meta[name="twitter:creator"]`,{name:`twitter:creator`,content:e.creator}):F(`meta[name="twitter:creator"]`),e.title!=null&&e.title!==``?P(`meta[name="twitter:title"]`,{name:`twitter:title`,content:e.title}):F(`meta[name="twitter:title"]`),e.description!=null&&e.description!==``?P(`meta[name="twitter:description"]`,{name:`twitter:description`,content:e.description}):F(`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 V(e){I(e),L(e.canonical),R(e.robots),z(e.openGraph),B(e.twitter)}function re(e){return o(e)}function H({children:n,initialRoute:a,staleWindowMs:o=3e4}){let[s,c]=_(()=>({currentRoute:j(a),navigationId:0,error:null})),l=g(null),u=g(!0),d=g(j(a)),f=g(0),p=g(new ee({timeout:1e4,maxRetries:3,onError:e=>{console.error(`[rari] Router: Navigation error:`,e)},onRetry:()=>{}})),v=g(new Map),y=g([]),b=g(new ne({maxHistorySize:50})),x=g(null),C=g(o),w=()=>`${Date.now()}-${Math.random().toString(36).substring(2,9)}`,T=()=>{l.current&&=(l.current.abort(),null)},E=()=>{for(let[,e]of v.current.entries())e.abortController.abort();v.current.clear()},D=(e,t)=>{v.current.delete(e),u.current&&s.navigationId===t&&c(e=>({...e}))},O=g(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`);if(t!=null&&t!==``){let e=i(decodeURIComponent(t));e&&re(e)&&V(e)}}catch(e){console.warn(`[rari] Router: Failed to parse x-rari-metadata header:`,e)}},P=(e,t,n,r,i,a)=>{f.current===r&&window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:t,to:n,navigationId:r,options:i,abortSignal:a.signal,rscResponsePromise:e}}))},F=(e,t,n)=>{n.historyKey!=null&&n.historyKey!==``?requestAnimationFrame(()=>{b.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()})},I=(e,t,n,r)=>{u.current&&f.current===r&&(d.current=e,c(t=>({...t,currentRoute:e,navigationId:r,error:null})),p.current.resetRetry(e),F(e,t,n))},L=(e,t,n,r)=>{if(e instanceof Error&&e.name===`AbortError`){D(t,n);return}let i=p.current.handleError(e,t);u.current&&(c(e=>({...e,error:i})),window.history.replaceState(window.history.state,``,r)),v.current.delete(t),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:r,to:t,error:i,navigationId:n}})),O.current?.()},R=async(e,t={})=>{if(!e||typeof e!=`string`)return;let[n,r]=e.includes(`#`)?e.split(`#`):[e,``],i=j(n);if(i===d.current&&!t.replace){k(i,r);return}let a=v.current.get(i);if(a)return a.promise;E(),T();let o=new AbortController;l.current=o,f.current+=1;let s=f.current;window.dispatchEvent(new CustomEvent(`rari:navigation-start`,{detail:{navigationId:s,targetPath:i}}));let c=(async()=>{let e=d.current;try{(t.historyKey==null||t.historyKey===``)&&b.current.captureState(e);let n=t.historyKey!=null&&t.historyKey!==``?t.historyKey:w(),a=window.location.origin+i,c=r?`${i}#${r}`:i,l={route:i,navigationId:s,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:n};t.replace?window.history.replaceState(l,``,c):window.history.pushState(l,``,c);let u=await fetch(a,{headers:{Accept:`text/x-component`,"rari-navigation-id":String(s)},signal:o.signal}).then(e=>{if(!e.ok&&e.status!==404)throw Error(`Failed to fetch: ${e.status}`);return e});if(o.signal.aborted){D(i,s);return}let d=new URL(u.url).pathname;if(d!==i){let e=r?`${d}#${r}`:d;window.history.replaceState({...l,route:d},``,e)}P(Promise.resolve(u),e,d,s,t,o),A(u),I(d,r,t,s),v.current.delete(i),O.current?.()}catch(t){L(t,i,s,e)}})();return v.current.set(i,{targetPath:i,navigationId:s,promise:c,abortController:o}),c},z=async()=>{if(y.current.length===0)return;let e=y.current.at(-1);e&&(y.current=[],await R(e.path,e.options))},B=g(R);h(()=>(O.current=z,B.current=R,()=>{O.current=null,B.current=null}));let H=g(null);H.current??=S((e,t)=>{B.current?.(e,t)},50,{leading:!0,trailing:!0,maxWait:200});let U=e=>{if(e.button!==0||e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)return;let t=e.target instanceof Element?e.target:null;for(;t&&!(t instanceof HTMLAnchorElement);)t=t.parentElement;if(!(t instanceof HTMLAnchorElement))return;let n=t;if(n.target&&n.target!==`_self`||n.hasAttribute(`download`))return;let r=n.getAttribute(`href`);if(r==null||r===``||M(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);H.current&&H.current(i,{replace:!1})},W=e=>{let t=window.location.pathname,n=r(e.state)?e.state:null;B.current&&B.current(t,{replace:!0,scroll:!1,historyKey:n?.key})};m(()=>{let e=r(window.history.state)?window.history.state:null;if(e?.key==null||e.key===``){let e={route:j(a),navigationId:0,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:w()};window.history.replaceState(e,``,window.location.pathname+window.location.search+window.location.hash)}},[a]);let G=e=>{if(e.persisted){let e=window.location.pathname;b.current.captureState(e)}},K=e=>{if(e.persisted){let e=window.location.pathname,t=r(window.history.state)?window.history.state:null;requestAnimationFrame(()=>{b.current.restoreState(e),t?.scrollPosition&&window.scrollTo(t.scrollPosition.x,t.scrollPosition.y)})}};return m(()=>(document.addEventListener(`click`,U),window.addEventListener(`popstate`,W),window.addEventListener(`pagehide`,G),window.addEventListener(`pageshow`,K),()=>{document.removeEventListener(`click`,U),window.removeEventListener(`popstate`,W),window.removeEventListener(`pagehide`,G),window.removeEventListener(`pageshow`,K)}),[]),m(()=>{C.current=o;let e=()=>{document.hidden?x.current=Date.now():x.current!==null&&Date.now()-x.current>C.current&&N.clear()};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[o]),m(()=>(u.current=!0,e(async(e,t)=>B.current?.(e,t)??Promise.resolve()),()=>{u.current=!1,t(),T(),E(),H.current?.cancel&&H.current.cancel()}),[]),n}function U(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(;t.nextNode();){let e=t.currentNode;if(e.nodeType===8&&`data`in e){let t=e.data;if(t===`$`||t===`$?`||t===`/$`)return!0}}return!!(e.querySelector(`[data-reactroot]`)||e.querySelectorAll(`template[data-rri]`).length>0)}function W(e){if(U(e))return!0;let t=e.firstElementChild;return t===null||t.tagName===`SCRIPT`?!1:!t.classList.contains(`rari-error`)}function G(e){return U(e)}function K(e){e.querySelectorAll(`.rari-error:not([data-rari-hydration-failure])`).forEach(e=>{e.remove()})}function ie(e,t){if(e.querySelector(`.rari-error[data-rari-hydration-failure]`))return;let n=document.createElement(`div`);n.className=`rari-error`,n.setAttribute(`data-rari-hydration-failure`,`true`),n.setAttribute(`role`,`alert`),n.style.cssText=`color:red;border:1px solid red;padding:10px;border-radius:4px;background-color:#fff5f5;margin:10px 0;`;let r=document.createElement(`strong`);r.textContent=`Failed to load page: `,n.append(r,document.createTextNode(t)),e.prepend(n)}function ae(){Reflect.set(globalThis,`__rari_client_ready`,!0),window.dispatchEvent(new CustomEvent(`rari:client-ready`))}function q(e,t){G(e)?(K(e),b(e,t,{onRecoverableError(e){import.meta.env.DEV&&console.warn(`[rari] Hydration mismatch:`,e)}})):y(e).render(t),ae()}const J=c();J.AppRouterProvider=x,J.ClientRouter=H,J.getClientComponent=d;async function Y(e){try{await d(e)}catch(t){console.error(`[rari] Failed to preload component ${e}:`,t)}}
|
|
1
|
+
import{c as e,o as t,t as n}from"../router-D6mkoDqJ.mjs";import{d as r,g as i,n as a,p as o}from"../type-guards-CTkEL8zw.mjs";import{a as s,i as c,n as l,r as u}from"../rari-global-5vGzhToD.mjs";import{t as d}from"../get-client-component-CLpyIcLJ.mjs";import{t as f}from"../preload-modules-QmSvKk0Q.mjs";import*as p from"react";import{useEffect as m,useLayoutEffect as h,useRef as g,useState as _}from"react";import{createFromReadableStream as v}from"virtual:react-flight-client";import{createRoot as y,hydrateRoot as b}from"react-dom/client";import{AppRouterProvider as x}from"virtual:app-router-provider";import"virtual:rsc-integration.ts";function S(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;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)){h(e);return}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){a=e,r=setTimeout(p,t),c&&d(e)}function h(e){if(r=null,l&&o){d(e);return}o=null,s=null}function g(){r!==null&&clearTimeout(r),a=0,o=null,i=0,s=null,r=null}function _(){r!==null&&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){m(i);return}if(u!==void 0){r=setTimeout(p,t),d(i);return}}r??=setTimeout(p,t)}return y.cancel=g,y.flush=_,y.pending=v,y}const C=/fetch|networkerror|load failed/i;function w(e,t){return{type:`abort`,message:`Navigation was cancelled`,originalError:e,url:t,timestamp:Date.now(),retryable:!1}}function T(e,t){return{type:`timeout`,message:`Navigation request timed out`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function E(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 D(e,t){return{type:`network-error`,message:`Network error - check your connection`,originalError:e,url:t,timestamp:Date.now(),retryable:!0}}function O(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 k(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 A(e,t){if(e instanceof Error&&e.name===`AbortError`)return w(e,t);if(e instanceof Error&&(e.name===`TimeoutError`||e.message.includes(`timeout`)))return T(e,t);if(e instanceof Error&&`status`in e){let n=e.status;return typeof n==`number`?E(e,n,t):k(e,t)}return e instanceof TypeError&&C.test(e.message)?D(e,t):e instanceof SyntaxError||e instanceof Error&&e.message.includes(`parse`)?O(e,t):k(e,t)}var j=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=A(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()}};function M(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 ee(e,t){try{return new URL(e,t!=null&&t!==``?t:window.location.origin).origin!==(t!=null&&t!==``?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}}const N=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)}}parseRouteInfoResponse(e){let t=i(e);if(!t||!this.isRouteInfoResponse(t))throw Error(`Failed to parse route info response`);return t}isRouteInfoResponse(e){return o(e)&&typeof e.exists==`boolean`&&Array.isArray(e.layouts)&&(e.loading===null||typeof e.loading==`string`)&&typeof e.isDynamic==`boolean`}async fetchRouteInfo(e){let t=await fetch(`/_rari/route-info`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})});if(!t.ok){let e;try{let n=await t.text(),r=i(n);r&&typeof r.error==`string`&&r.error!==``&&(e=r.error)}catch{}throw Error(e!=null&&e!==``?e:`Failed to fetch route info: ${t.status} ${t.statusText}`)}let n=t.clone();try{let e=await t.text();return this.parseRouteInfoResponse(e)}catch(t){try{let e=await n.text();return this.parseRouteInfoResponse(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=s();e.routeInfoCache=N}var ne=class{stateHistory;routeAccessOrder;maxHistorySize;scrollableSelector;constructor(e={}){this.stateHistory=new Map,this.routeAccessOrder=[],this.maxHistorySize=e.maxHistorySize!=null&&e.maxHistorySize!==0?e.maxHistorySize:50,this.scrollableSelector=e.scrollableSelector!=null&&e.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!=null&&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!=null&&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),i=r instanceof HTMLFormElement?r:document.querySelector(`form[name="${n}"]`)??document.querySelectorAll(`form`)[Number.parseInt(n.replace(`form-`,``),10)];i instanceof HTMLFormElement?e.forEach((e,n)=>{try{let t=i.elements.namedItem(n);t instanceof RadioNodeList?t.forEach(t=>{t instanceof HTMLInputElement&&(t.type===`radio`||t.type===`checkbox`?t.checked=t.value===e:typeof e==`string`&&(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:typeof e==`string`&&(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 P(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 F(e){let t=document.querySelector(e);t&&t.remove()}function I(e){e.title!=null&&e.title!==``&&(document.title=e.title),e.description!=null&&e.description!==``?P(`meta[name="description"]`,{name:`description`,content:e.description}):F(`meta[name="description"]`),e.keywords&&e.keywords.length>0?P(`meta[name="keywords"]`,{name:`keywords`,content:e.keywords.join(`, `)}):F(`meta[name="keywords"]`),e.viewport!=null&&e.viewport!==``&&P(`meta[name="viewport"]`,{name:`viewport`,content:e.viewport})}function L(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 R(e){if(e===void 0){F(`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?P(`meta[name="robots"]`,{name:`robots`,content:t.join(`, `)}):F(`meta[name="robots"]`)}function z(e){if(e===void 0){F(`meta[property="og:title"]`),F(`meta[property="og:description"]`),F(`meta[property="og:url"]`),F(`meta[property="og:site_name"]`),F(`meta[property="og:type"]`),document.querySelectorAll(`meta[property="og:image"]`).forEach(e=>{e.remove()});return}if(e.title!=null&&e.title!==``?P(`meta[property="og:title"]`,{property:`og:title`,content:e.title}):F(`meta[property="og:title"]`),e.description!=null&&e.description!==``?P(`meta[property="og:description"]`,{property:`og:description`,content:e.description}):F(`meta[property="og:description"]`),e.url!=null&&e.url!==``?P(`meta[property="og:url"]`,{property:`og:url`,content:e.url}):F(`meta[property="og:url"]`),e.siteName!=null&&e.siteName!==``?P(`meta[property="og:site_name"]`,{property:`og:site_name`,content:e.siteName}):F(`meta[property="og:site_name"]`),e.type!=null&&e.type!==``?P(`meta[property="og:type"]`,{property:`og:type`,content:e.type}):F(`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 B(e){if(e===void 0){F(`meta[name="twitter:card"]`),F(`meta[name="twitter:site"]`),F(`meta[name="twitter:creator"]`),F(`meta[name="twitter:title"]`),F(`meta[name="twitter:description"]`),document.querySelectorAll(`meta[name="twitter:image"]`).forEach(e=>{e.remove()});return}if(e.card!=null&&e.card!==``?P(`meta[name="twitter:card"]`,{name:`twitter:card`,content:e.card}):F(`meta[name="twitter:card"]`),e.site!=null&&e.site!==``?P(`meta[name="twitter:site"]`,{name:`twitter:site`,content:e.site}):F(`meta[name="twitter:site"]`),e.creator!=null&&e.creator!==``?P(`meta[name="twitter:creator"]`,{name:`twitter:creator`,content:e.creator}):F(`meta[name="twitter:creator"]`),e.title!=null&&e.title!==``?P(`meta[name="twitter:title"]`,{name:`twitter:title`,content:e.title}):F(`meta[name="twitter:title"]`),e.description!=null&&e.description!==``?P(`meta[name="twitter:description"]`,{name:`twitter:description`,content:e.description}):F(`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 re(e){I(e),L(e.canonical),R(e.robots),z(e.openGraph),B(e.twitter)}function ie(e){return o(e)}function V({children:n,initialRoute:a,staleWindowMs:o=3e4}){let[s,c]=_(()=>({currentRoute:M(a),navigationId:0,error:null})),l=g(null),u=g(!0),d=g(M(a)),f=g(0),p=g(new j({timeout:1e4,maxRetries:3,onError:e=>{console.error(`[rari] Router: Navigation error:`,e)},onRetry:()=>{}})),v=g(new Map),y=g([]),b=g(new ne({maxHistorySize:50})),x=g(null),C=g(o),w=()=>`${Date.now()}-${Math.random().toString(36).substring(2,9)}`,T=()=>{l.current&&=(l.current.abort(),null)},E=()=>{for(let[,e]of v.current.entries())e.abortController.abort();v.current.clear()},D=(e,t)=>{v.current.delete(e),u.current&&s.navigationId===t&&c(e=>({...e}))},O=g(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`);if(t!=null&&t!==``){let e=i(decodeURIComponent(t));e&&ie(e)&&re(e)}}catch(e){console.warn(`[rari] Router: Failed to parse x-rari-metadata header:`,e)}},P=(e,t,n,r,i,a)=>{f.current===r&&window.dispatchEvent(new CustomEvent(`rari:navigate`,{detail:{from:t,to:n,navigationId:r,options:i,abortSignal:a.signal,rscResponsePromise:e}}))},F=(e,t,n)=>{n.historyKey!=null&&n.historyKey!==``?requestAnimationFrame(()=>{b.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()})},I=(e,t,n,r)=>{u.current&&f.current===r&&(d.current=e,c(t=>({...t,currentRoute:e,navigationId:r,error:null})),p.current.resetRetry(e),F(e,t,n))},L=(e,t,n,r)=>{if(e instanceof Error&&e.name===`AbortError`){D(t,n);return}let i=p.current.handleError(e,t);u.current&&(c(e=>({...e,error:i})),window.history.replaceState(window.history.state,``,r)),v.current.delete(t),window.dispatchEvent(new CustomEvent(`rari:navigate-error`,{detail:{from:r,to:t,error:i,navigationId:n}})),O.current?.()},R=async(e,t={})=>{if(!e||typeof e!=`string`)return;let[n,r]=e.includes(`#`)?e.split(`#`):[e,``],i=M(n);if(i===d.current&&!t.replace){k(i,r);return}let a=v.current.get(i);if(a)return a.promise;E(),T();let o=new AbortController;l.current=o,f.current+=1;let s=f.current;window.dispatchEvent(new CustomEvent(`rari:navigation-start`,{detail:{navigationId:s,targetPath:i}}));let c=(async()=>{let e=d.current;try{(t.historyKey==null||t.historyKey===``)&&b.current.captureState(e);let n=t.historyKey!=null&&t.historyKey!==``?t.historyKey:w(),a=window.location.origin+i,c=r?`${i}#${r}`:i,l={route:i,navigationId:s,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:n};t.replace?window.history.replaceState(l,``,c):window.history.pushState(l,``,c);let u=await fetch(a,{headers:{Accept:`text/x-component`,"rari-navigation-id":String(s)},signal:o.signal}).then(e=>{if(!e.ok&&e.status!==404)throw Error(`Failed to fetch: ${e.status}`);return e});if(o.signal.aborted){D(i,s);return}let d=new URL(u.url).pathname;if(d!==i){let e=r?`${d}#${r}`:d;window.history.replaceState({...l,route:d},``,e)}P(Promise.resolve(u),e,d,s,t,o),A(u),I(d,r,t,s),v.current.delete(i),O.current?.()}catch(t){L(t,i,s,e)}})();return v.current.set(i,{targetPath:i,navigationId:s,promise:c,abortController:o}),c},z=async()=>{if(y.current.length===0)return;let e=y.current.at(-1);e&&(y.current=[],await R(e.path,e.options))},B=g(R);h(()=>(O.current=z,B.current=R,()=>{O.current=null,B.current=null}));let V=g(null);V.current??=S((e,t)=>{B.current?.(e,t)},50,{leading:!0,trailing:!0,maxWait:200});let H=e=>{if(e.button!==0||e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)return;let t=e.target instanceof Element?e.target:null;for(;t&&!(t instanceof HTMLAnchorElement);)t=t.parentElement;if(!(t instanceof HTMLAnchorElement))return;let n=t;if(n.target&&n.target!==`_self`||n.hasAttribute(`download`))return;let r=n.getAttribute(`href`);if(r==null||r===``||ee(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);V.current&&V.current(i,{replace:!1})},U=e=>{let t=window.location.pathname,n=r(e.state)?e.state:null;B.current&&B.current(t,{replace:!0,scroll:!1,historyKey:n?.key})};m(()=>{let e=r(window.history.state)?window.history.state:null;if(e?.key==null||e.key===``){let e={route:M(a),navigationId:0,scrollPosition:{x:window.scrollX,y:window.scrollY},timestamp:Date.now(),key:w()};window.history.replaceState(e,``,window.location.pathname+window.location.search+window.location.hash)}},[a]);let W=e=>{if(e.persisted){let e=window.location.pathname;b.current.captureState(e)}},G=e=>{if(e.persisted){let e=window.location.pathname,t=r(window.history.state)?window.history.state:null;requestAnimationFrame(()=>{b.current.restoreState(e),t?.scrollPosition&&window.scrollTo(t.scrollPosition.x,t.scrollPosition.y)})}};return m(()=>(document.addEventListener(`click`,H),window.addEventListener(`popstate`,U),window.addEventListener(`pagehide`,W),window.addEventListener(`pageshow`,G),()=>{document.removeEventListener(`click`,H),window.removeEventListener(`popstate`,U),window.removeEventListener(`pagehide`,W),window.removeEventListener(`pageshow`,G)}),[]),m(()=>{C.current=o;let e=()=>{document.hidden?x.current=Date.now():x.current!==null&&Date.now()-x.current>C.current&&N.clear()};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[o]),m(()=>(u.current=!0,e(async(e,t)=>B.current?.(e,t)??Promise.resolve()),()=>{u.current=!1,t(),T(),E(),V.current?.cancel&&V.current.cancel()}),[]),n}function H(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(;t.nextNode();){let e=t.currentNode;if(e.nodeType===8&&`data`in e){let t=e.data;if(t===`$`||t===`$?`||t===`/$`)return!0}}return!!(e.querySelector(`[data-reactroot]`)||e.querySelectorAll(`template[data-rri]`).length>0)}function U(e){if(H(e))return!0;let t=e.firstElementChild;return t===null||t.tagName===`SCRIPT`?!1:!t.classList.contains(`rari-error`)}function W(e){return H(e)}function G(e){e.querySelectorAll(`.rari-error:not([data-rari-hydration-failure])`).forEach(e=>{e.remove()})}function K(e,t,n){return p.createElement(e,t,n)}function ae(e,t){if(e.querySelector(`.rari-error[data-rari-hydration-failure]`))return;let n=document.createElement(`div`);n.className=`rari-error`,n.setAttribute(`data-rari-hydration-failure`,`true`),n.setAttribute(`role`,`alert`),n.style.cssText=`color:red;border:1px solid red;padding:10px;border-radius:4px;background-color:#fff5f5;margin:10px 0;`;let r=document.createElement(`strong`);r.textContent=`Failed to load page: `,n.append(r,document.createTextNode(t)),e.prepend(n)}function oe(){Reflect.set(globalThis,`__rari_client_ready`,!0),window.dispatchEvent(new CustomEvent(`rari:client-ready`))}function q(e,t){W(e)?(G(e),b(e,t,{onRecoverableError(e){import.meta.env.DEV&&console.warn(`[rari] Hydration mismatch:`,e)}})):y(e).render(t),oe()}const J=c();J.AppRouterProvider=x,J.ClientRouter=V,J.getClientComponent=d;async function Y(e){try{await d(e)}catch(t){console.error(`[rari] Failed to preload component ${e}:`,t)}}
|
|
2
2
|
/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */
|
|
3
3
|
J.preloadClientComponent=Y,u(),l();
|
|
4
4
|
/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */
|
|
5
|
-
function X(){let e=Reflect.get(globalThis,`__rari_f`);if(Array.isArray(e))return e}function Z(e){return o(e)&&typeof e.rscRow==`string`}function
|
|
5
|
+
function X(){let e=Reflect.get(globalThis,`__rari_f`);if(Array.isArray(e))return e}function Z(e){return o(e)&&typeof e.rscRow==`string`}function se(e){return Array.isArray(e)&&typeof e[1]==`string`}function ce(){return!!X()?.some(e=>e!==0)}function le(){let e=X();if(e?.length==null||e.length===0)return null;let t=``,n=[];for(let r of e)r!==0&&(typeof r==`string`?t+=r:se(r)&&n.push(r[1]));if(n.length>0){let e=n.map(e=>Uint8Array.from(atob(e),e=>e.charCodeAt(0))),t=e.reduce((e,t)=>e+t.length,0),r=new Uint8Array(t),i=0;for(let t of e)r.set(t,i),i+=t.length;return r}return t?new TextEncoder().encode(t):null}async function Q(e,t){let n=new TextDecoder().decode(e);await f(n);let r=s(),i=r.streaming,o=!!(i?.bufferedRows&&i.bufferedRows.length>0);if(t.streaming&&(i?.complete===void 0||o)){let t=new ReadableStream({start(t){let n=!1;t.enqueue(e);let i=e=>{if(n)return;let r=a(e,Z);r&&t.enqueue(new TextEncoder().encode(`\n${r.rscRow}`))},o=()=>{n||(n=!0,t.close(),window.removeEventListener(`rari:html-stream-row`,i),window.removeEventListener(`rari:stream-complete`,o))};if(window.addEventListener(`rari:html-stream-row`,i),window.addEventListener(`rari:stream-complete`,o),r.streaming?.bufferedRows){let e=[...r.streaming.bufferedRows];for(let n of e)t.enqueue(new TextEncoder().encode(`\n${n}`));r.streaming.bufferedRows=[]}r.streaming?.complete&&o()}});return v(t)}let c=new ReadableStream({start(t){t.enqueue(e),t.close()}});return v(c)}async function $(){let e=document.getElementById(`root`);if(!e){console.error(`[rari] Root element not found`);return}let t=ce(),r=le(),i=U(e)||H(e),o=s().streaming,c=!!(o?.bufferedRows&&o.bufferedRows.length>0);try{let o,l=!t&&!c&&!i;if(i&&t&&r){let t=`Could not load interactive page data.`;try{o=await Q(r,{streaming:!1})}catch(e){t=e instanceof Error?e.message:`Failed to parse embedded RSC payload.`;try{let e=window.location.pathname+window.location.search,n=import.meta.env.DEV?import.meta.env.RARI_SERVER_URL!=null&&import.meta.env.RARI_SERVER_URL!==``?import.meta.env.RARI_SERVER_URL:`http://localhost:${import.meta.env.VITE_RSC_PORT!=null&&import.meta.env.VITE_RSC_PORT!==``?import.meta.env.VITE_RSC_PORT:`3000`}`:window.location.origin,r=await fetch(n+e,{headers:{Accept:`text/x-component`},cache:`no-store`});if(r.ok){let e=new Uint8Array(await r.arrayBuffer()),t=new ReadableStream({start(t){t.enqueue(e),t.close()}});o=await v(t)}else t=`Failed to fetch RSC payload fallback: HTTP ${r.status}.`}catch(e){t=e instanceof Error?e.message:`Failed to fetch RSC payload fallback.`,console.error(`[rari] Failed to fetch RSC payload fallback:`,e)}}if(o!=null){let t=p.createElement(x,{initialPayload:{element:o}});t=K(V,{initialRoute:window.location.pathname},t),t=K(n,{initialPathname:window.location.pathname},t),q(e,t)}else ae(e,`${t} Try refreshing the page.`),console.error(`[rari] Hydration skipped: failed to load RSC payload`);return}if(l)try{let e=window.location.pathname+window.location.search,t=(import.meta.env.DEV?import.meta.env.RARI_SERVER_URL!=null&&import.meta.env.RARI_SERVER_URL!==``?import.meta.env.RARI_SERVER_URL:`http://localhost:${import.meta.env.VITE_RSC_PORT!=null&&import.meta.env.VITE_RSC_PORT!==``?import.meta.env.VITE_RSC_PORT:`3000`}`:window.location.origin)+e,n=await fetch(t,{headers:{Accept:`text/x-component`},cache:`no-store`});if(!n.ok&&n.status!==404)throw Error(`Failed to fetch RSC data: ${n.status}`);if(!n.body)throw Error(`RSC response has no body`);o=await v(n.body)}catch(e){if(e instanceof Promise)throw e;console.error(`[rari] Failed to fetch initial RSC data:`,e),o=null}else if(t&&r)try{o=await Q(r,{streaming:!0})}catch(e){console.error(`[rari] Failed to parse embedded RSC payload:`,e),console.error(`[rari] Error stack:`,e instanceof Error?e.stack:`no stack`),o=null}else if(c)try{let e=new ReadableStream({start(e){let t=t=>{let n=a(t,Z);n&&e.enqueue(new TextEncoder().encode(`${n.rscRow}\n`))},n=()=>{e.close(),window.removeEventListener(`rari:html-stream-row`,t),window.removeEventListener(`rari:stream-complete`,n)};window.addEventListener(`rari:html-stream-row`,t),window.addEventListener(`rari:stream-complete`,n);let r=s();if(r.streaming?.bufferedRows){let t=[...r.streaming.bufferedRows];r.streaming.bufferedRows=[];for(let n of t)e.enqueue(new TextEncoder().encode(`${n}\n`))}r.streaming?.complete&&n()}});o=await v(e)}catch(e){console.error(`[rari] Failed to process streaming RSC payload:`,e),o=null}if(o==null)throw Error(`No RSC data available for hydration`);let u=p.createElement(x,{initialPayload:{element:o}});u=K(V,{initialRoute:window.location.pathname},u),u=K(n,{initialPathname:window.location.pathname},u),q(e,u)}catch(e){console.error(`[rari] Error rendering app:`,e)}}function ue(){let e=import.meta.hot;if(!e)return{};let t=e.data;return o(t)?{hasRendered:t.hasRendered===!0}:{}}function de(){let e=import.meta.hot;if(!e)return;let t=e.data;o(t)&&(t.hasRendered=!0)}(!import.meta.hot||ue().hasRendered!==!0)&&($().catch(e=>{console.error(`[rari] Fatal error:`,e)}),de());export{Y as preloadClientComponent,$ as renderApp};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import{existsSync as e,readFileSync as t,writeFileSync as n}from"node:fs";import{join as r}from"node:path";import i from"node:process";import{styleText as a}from"node:util";function o(e){console.warn(`${a(`blue`,`info`)} ${e}`)}function s(e){console.warn(`${a(`green`,`✓`)} ${e}`)}function c(e){console.error(`${a(`red`,`✗`)} ${e}`)}function l(e){console.warn(`${a(`yellow`,`⚠`)} ${e}`)}const u=/\s+(?:&&\s+)?/,d=/^>=?\s*(\d+)/,f=/^>=?\s*(\d+)\.(\d+)\.(\d+)/,p=/^=?\s*(\d+)\.(\d+)\.(\d+)/,m=/^\^\s*(\d+)\.(\d+)\.(\d+)/,h=/^~\s*(\d+)\.(\d+)\.(\d+)/,g=/^(?:>=?|<=?|[=~^])?\s*(\d+)\.(\d+)/,_=/^(\d+)\.(?:x|\*)/i,v=/^(?:>=?|[=~^])\s*(\d+)(?:\s|$)/,y=/^(\d+)$/;function b(e){return typeof e==`object`&&!!e}function x(e){let t=JSON.parse(e);if(!b(t))throw Error(`Invalid package.json`);return t}function S(e,t=`>=22.18.0`){if(e.engines=e.engines??{},e.engines.node){if(!C(e.engines.node,t))return l(`Current engines.node value "${e.engines.node}" may not meet the required minimum of ${t}`),l(`Updating to ${t} for deployment compatibility`),e.engines.node=t,!0}else return e.engines.node=t,!0;return!1}function C(e,t){let n=w(e),r=w(t);return!n||!r?!1:T(n,r)>=0}function w(e){let t=e.trim(),n=e=>e!==null;if(t.includes(`||`)){let e=t.split(`||`).map(e=>e.trim()).map(e=>w(e)).filter(n);return e.length===0?null:e.reduce((e,t)=>T(t,e)<0?t:e)}let r=t.split(u).filter(e=>e!==``&&e!==`&&`);if(r.length>1){let e=r.filter(e=>d.test(e)).map(e=>w(e)).filter(n);return e.length===0?null:e.reduce((e,t)=>T(t,e)>0?t:e)}let i=null;return i=f.exec(t),i||(i=p.exec(t),i)||(i=m.exec(t),i)||(i=h.exec(t),i)?{major:Number.parseInt(i[1],10),minor:Number.parseInt(i[2],10),patch:Number.parseInt(i[3],10)}:(i=g.exec(t),i?{major:Number.parseInt(i[1],10),minor:Number.parseInt(i[2],10),patch:0}:(i=_.exec(t),i||(i=v.exec(t),i)||(i=y.exec(t),i)?{major:Number.parseInt(i[1],10),minor:0,patch:0}:null))}function T(e,t){return e.major===t.major?e.minor===t.minor?e.patch-t.patch:e.minor-t.minor:e.major-t.major}function E(n=i.cwd()){let a=r(n,`node_modules/rari/package.json`);if(!e(a))return c(`rari is not installed. Please run "npm install rari" first.`),i.exit(1),``;try{let e=x(t(a,`utf-8`));return e.version!=null&&e.version!==``?`^${e.version}`:(c(`Could not determine rari version from package.json`),i.exit(1),``)}catch(e){return c(`Failed to read rari package.json: ${e instanceof Error?e.message:`Unknown error`}`),i.exit(1),``}}function D(a,u){let d=r(a,`package.json`);e(d)||(c(`No package.json found. Please run this command from your project root.`),i.exit(1));try{let e=x(t(d,`utf-8`));e.scripts=e.scripts??{};let r=u.startScript??`rari start`;e.scripts.start&&e.scripts.start!==r&&!e.scripts[`start:original`]&&(l(`Existing start script found: "${e.scripts.start}"`),l(`Backing up to start:original and replacing with "${r}"`),e.scripts[`start:original`]=e.scripts.start),e.scripts.start=r,e.scripts[`start:local`]=`rari start`,e.scripts[`deploy:${u.providerName.toLowerCase()}`]=u.deployScript,S(e),(e.dependencies?.rari==null||e.dependencies.rari===``)&&(o(`Adding rari dependency...`),e.dependencies=e.dependencies??{},e.dependencies.rari=u.dependency??E(a)),n(d,`${JSON.stringify(e,null,2)}\n`),s(`Updated package.json for ${u.providerName} deployment`)}catch(e){c(`Failed to update package.json: ${e instanceof Error?e.message:`Unknown error`}`),i.exit(1)}}function O(i,a,o){let c=r(i,`.gitignore`),l=[``,`# ${a}`,`${o}/`,``].join(`
|
|
2
2
|
`);if(e(c)){let e=t(c,`utf-8`),r=e.split(`
|
|
3
|
-
`).map(e=>e.trim());r.includes(`${o}/`)||r.includes(o)||(n(c,e+l),s(`Updated .gitignore with ${a} entries`))}else
|
|
3
|
+
`).map(e=>e.trim());r.includes(`${o}/`)||r.includes(o)||(n(c,e+l),s(`Updated .gitignore with ${a} entries`))}else{let e=`# Dependencies
|
|
4
4
|
node_modules
|
|
5
5
|
.pnpm-store
|
|
6
6
|
|
|
@@ -34,4 +34,4 @@ Thumbs.db
|
|
|
34
34
|
# Temporary files
|
|
35
35
|
.tmp
|
|
36
36
|
tmp
|
|
37
|
-
|
|
37
|
+
`;n(c,e),s(`Created .gitignore with ${a} entries`)}}function k(a,o,u){let d=r(a,o);try{if(e(d)){let i=t(d,`utf-8`),s=`${o}.backup`,c=r(a,s);e(c)&&(s=`${o}.backup.${Date.now()}`,c=r(a,s)),l(`${o} already exists, backing up to ${s}`),n(c,i,{flag:`wx`})}n(d,u),s(`Created ${o} configuration`)}catch(e){c(`Failed to create or backup ${o}: ${e instanceof Error?e.message:`Unknown error`}`),i.exit(1)}}export{o as a,O as i,E as n,s as o,D as r,k as t};
|
package/dist/vite.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./api-routes-ChRr3O5-.mjs";import{g as t,h as n,m as r,o as i,p as a,r as o,t as s,y as c}from"./type-guards-CTkEL8zw.mjs";import{i as l,n as u,o as d,r as f,t as p}from"./constants-
|
|
1
|
+
import{t as e}from"./api-routes-ChRr3O5-.mjs";import{g as t,h as n,m as r,o as i,p as a,r as o,t as s,y as c}from"./type-guards-CTkEL8zw.mjs";import{i as l,n as u,o as d,r as f,t as p}from"./constants-DZuNx7IB.mjs";import{a as m,c as h,d as g,g as _,h as v,i as y,m as b,n as ee,o as te,p as ne,r as re,s as ie,t as x,u as ae}from"./regex-constants-Wm7xRA3u.mjs";import{a as oe,i as se,n as ce,o as S,r as le,t as C}from"./alias-resolver-Cigam7Y7.mjs";import{t as ue}from"./timer-Duul5JHq.mjs";import{t as w}from"./names-N6JRDeT1.mjs";import{builtinModules as T,createRequire as de}from"node:module";import{Buffer as fe}from"node:buffer";import{spawn as pe,spawnSync as E}from"node:child_process";import D,{promises as O}from"node:fs";import k from"node:path";import A from"node:process";import{fileURLToPath as j,pathToFileURL as M}from"node:url";import me from"node:crypto";import{build as N}from"rolldown";function he(e){return e.map(e=>e)}function ge(e){return e}function _e(e={}){let{root:t=A.cwd(),srcDir:n=`src`,proxyFileName:r=`proxy`,extensions:i=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mts`,`.mjs`],verbose:a=!1}=e,o=null,s=e=>{a&&console.warn(`[rari] Proxy: ${e}`)};async function c(){for(let e of i){let n=`${r}${e}`,i=k.join(t,n);try{return await O.access(i),s(`Found proxy file: ${n}`),{filePath:i,exists:!0,relativePath:n}}catch{}}let e=k.join(t,n);try{await O.access(e);for(let t of i){let i=`${r}${t}`,a=k.join(e,i);try{return await O.access(a),s(`Found proxy file: ${k.join(n,i)}`),{filePath:a,exists:!0,relativePath:k.join(n,i)}}catch{}}}catch{}return null}return ge({name:`rari:proxy`,async buildStart(){o=await c(),s(o?`Proxy enabled: ${o.relativePath}`:`No proxy file found`)},configureServer(e){o&&(e.watcher.add(o.filePath),e.watcher.on(`change`,t=>{t===o?.filePath&&(s(`Proxy file changed, reloading...`),e.ws.send({type:`custom`,event:`rari:proxy-reload`}))}))},handleHotUpdate({file:e,server:t}){if(e===o?.filePath)return s(`Hot reloading proxy...`),t.ws.send({type:`custom`,event:`rari:proxy-reload`,data:{file:o.relativePath}}),[]}})}function P(e){if(e==null||e===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function F(){let{SERVER_PORT:e,PORT:t,RSC_PORT:n}=A.env;return P(e)??P(t)??P(n)??3e3}function ve(){return`http://localhost:${F()}`}const ye=6e4;async function be(e){let t=M(e).href,n=`
|
|
2
2
|
import { registerHooks } from "node:module";
|
|
3
3
|
registerHooks({
|
|
4
4
|
resolve(specifier, context, nextResolve) {
|
|
@@ -16,8 +16,15 @@ const result =
|
|
|
16
16
|
process.send(result, () => {
|
|
17
17
|
process.disconnect();
|
|
18
18
|
});
|
|
19
|
-
`;return new Promise((t,r)=>{let i=
|
|
20
|
-
`);if(n!==0){r(Error(i||`generateStaticParams worker exited with code ${n}`));return}if(!c){r(Error(i||`generateStaticParams worker exited without an IPC result for ${e}`));return}t(l)})})}const L={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`},_e={DYNAMIC:/^\[([^\]]+)\]$/,CATCH_ALL:/^\[\.\.\.([^\]]+)\]$/,OPTIONAL_CATCH_ALL:/^\[\[\.\.\.([^\]]+)\]\]$/},ve=[{pattern:_e.OPTIONAL_CATCH_ALL,type:`optional-catch-all`,format:e=>`[[...${e}]]`},{pattern:_e.CATCH_ALL,type:`catch-all`,format:e=>`[...${e}]`},{pattern:_e.DYNAMIC,type:`dynamic`,format:e=>`[${e}]`}],ye=/^\([^/]+\)$/;function be(e){return ye.test(e)}function xe(e){return e?e.replace(b,`/`).split(`/`).filter(Boolean).some(be):!1}function Se(e){for(let t of ve){let n=e.match(t.pattern);if(n)return{type:t.type,param:n[1],format:t.format}}}function Ce(e){let t=Se(e);return t?t.format(t.param):e}function we(e){let t=Se(e);return t?{type:t.type,value:e,param:t.param}:{type:`static`,value:e}}const Te=/export\s+const\s+size\s*=\s*\{\s*width\s*:\s*(\d+)\s*,\s*height\s*:\s*(\d+)\s*[,}]/,Ee=/export\s+const\s+contentType\s*=\s*['"]([^'"]+)['"]/,De=[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`];var Oe=class{appDir;extensions;verbose;constructor(e){this.appDir=j.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=[],s=[];await this.scanDirectory(``,e,t,n,r,i,a,o,s);for(let o of[t,n,r,i,a,s])this.finalizeGroupEntries(e,o);return this.assertNoDuplicateRoutes(e),this.assertNoDuplicateRoutes(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} templates`),console.warn(`[rari] Router: Found ${o.length} API routes`),console.warn(`[rari] Router: Found ${s.length} OG images`)),{routes:this.sortRoutes(e),layouts:this.sortLayouts(t),loading:n,errors:r,notFound:i,templates:this.sortTemplates(a),apiRoutes:this.sortApiRoutes(o),ogImages:s,generated:new Date().toISOString()}}finalizeGroupEntries(e,t){for(let n=t.length-1;n>=0;n--){let r=t[n],i=j.dirname(r.filePath).replace(b,`/`);if(!xe(i))continue;let a=e.filter(e=>{let t=j.dirname(e.filePath).replace(b,`/`);return t===i||t.startsWith(`${i}/`)}).map(e=>e.path);if(a.length===0){t.splice(n,1);continue}let o=Array.from(new Set(a)).sort();r.path=o[0],o.length>1&&(r.additionalPaths=o.slice(1))}}assertNoDuplicateRoutes(e){let t=new Map;for(let n of e){let e=t.get(n.path);if(e!=null&&e!==``)throw Error(`[rari] Route conflict: path '${n.path}' is defined by both '${e}' and '${n.filePath}'.`);t.set(n.path,n.filePath)}}async scanDirectory(e,t,n,r,i,a,o,s,c){let l=j.join(this.appDir,e),u;try{u=await A.readdir(l)}catch{return}let d=[],f=[];for(let e of u){let t=j.join(l,e),n=await A.stat(t);n.isDirectory()?this.shouldScanDirectory(e)&&f.push(e):n.isFile()&&d.push(e)}await this.processSpecialFiles(e,d,t,n,r,i,a,o,s,c);for(let l of f){let u=e?j.join(e,l):l;await this.scanDirectory(u,t,n,r,i,a,o,s,c)}}async processSpecialFiles(e,t,n,r,i,a,o,s,c,l){let u=this.pathToRoute(e),d=this.findFile(t,L.PAGE);if(d!=null&&d!==``){let t=this.parseRouteSegments(e),r=this.extractParams(t);n.push({path:u,filePath:j.join(e,d).replace(b,`/`),segments:t,params:r,isDynamic:r.length>0})}let f=this.findFile(t,L.LAYOUT);if(f!=null&&f!==``){let t=this.getParentPath(e);r.push({path:u,filePath:j.join(e,f).replace(b,`/`),parentPath:t===null?void 0:this.pathToRoute(t)})}let p=this.findFile(t,L.LOADING);p!=null&&p!==``&&i.push({path:u,filePath:j.join(e,p).replace(b,`/`)});let m=this.findFile(t,L.ERROR);m!=null&&m!==``&&a.push({path:u,filePath:j.join(e,m).replace(b,`/`)});let h=this.findFile(t,L.NOT_FOUND);h!=null&&h!==``&&o.push({path:u,filePath:j.join(e,h).replace(b,`/`)});let g=this.findFile(t,L.TEMPLATE);if(g!=null&&g!==``){let t=this.getParentPath(e);s.push({path:u,filePath:j.join(e,g).replace(b,`/`),parentPath:t===null?void 0:this.pathToRoute(t)})}let _=this.findFile(t,L.OG_IMAGE);if(_!=null&&_!==``){let t=j.join(e,_).replace(b,`/`),n=j.join(this.appDir,t),r,i,a;try{let e=await A.readFile(n,`utf-8`),t=Te.exec(e);t&&(r=Number.parseInt(t[1],10),i=Number.parseInt(t[2],10));let o=Ee.exec(e);o&&(a=o[1])}catch{}l.push({path:u,filePath:t,width:r,height:i,contentType:a})}let v=this.findFile(t,L.ROUTE);if(v!=null&&v!==``){let t=await this.processApiRouteFile(e,v);c.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(b,`/`).split(`/`).filter(Boolean).filter(e=>!be(e)).map(Ce).join(`/`)}`:`/`}parseRouteSegments(e){return e?e.split(g).filter(Boolean).filter(e=>!be(e)).map(we):[]}extractParams(e){return e.filter(e=>e.param!==void 0).map(e=>e.param)}getParentPath(e){if(!e)return null;let t=e.split(g).filter(Boolean);return t.length===0?null:t.slice(0,-1).join(`/`)}shouldScanDirectory(e){return![`node_modules`,`.git`,`dist`,`build`,`__tests__`,`test`,`tests`,`coverage`].includes(e)&&!e.startsWith(`_`)&&!e.startsWith(`.`)}sortRoutes(e){return e.sort((e,t)=>{let n=e=>{if(!e.isDynamic)return 0;let t=e.segments.some(e=>e.type===`catch-all`);return e.segments.some(e=>e.type===`optional-catch-all`)?3:t?2:1},r=n(e),i=n(t);if(r!==i)return r-i;let a=e.path.split(`/`).length,o=t.path.split(`/`).length;return a===o?e.path.localeCompare(t.path):o-a})}sortApiRoutes(e){return e.sort((e,t)=>{if(!e.isDynamic&&t.isDynamic)return-1;if(e.isDynamic&&!t.isDynamic)return 1;let n=e.path.split(`/`).length,r=t.path.split(`/`).length;return n===r?e.path.localeCompare(t.path):n-r})}sortLayouts(e){return e.sort((e,t)=>e.path===`/`&&t.path!==`/`?-1:t.path===`/`&&e.path!==`/`?1:e.path.split(`/`).length-t.path.split(`/`).length)}sortTemplates(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=j.join(this.appDir,e),n=await A.readFile(t,`utf-8`),r=[];for(let e of De){let t=RegExp(`export\\s+(?:async\\s+)?function\\s+${e}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${e}\\s*=`);(t.test(n)||i.test(n))&&r.push(e)}return r}async processApiRouteFile(e,t){let n=j.join(e,t).replace(b,`/`),r=this.pathToRoute(e),i=this.parseRouteSegments(e),a=this.extractParams(i),o=await this.detectHttpMethods(n);return{path:r,filePath:n,segments:i,params:a,isDynamic:a.length>0,methods:o}}};async function ke(e,t={}){return new Oe({appDir:e,...t}).generateManifest()}const Ae=/export\s+const\s+metadata\s*(?::\s*\w+\s*)?=\s*(\{[\s\S]*?\n\})/,je=/title\s*:\s*['"]([^'"]+)['"]/,Me=/description\s*:\s*['"]([^'"]+)['"]/,Ne=/keywords\s*:\s*\[([\s\S]*?)\]/,Pe={appDir:`src/app`,extensions:[`.tsx`,`.jsx`,`.ts`,`.js`],outDir:`dist`};function Fe(e){switch(j.basename(e).replace(v,``)){case`page`:return`page`;case`layout`:return`layout`;case`template`:return`template`;case`loading`:return`loading`;case`error`:return`error`;case`not-found`:return`not-found`;case`route`:return`route`;default:return null}}function Ie(e){return/^\([^/]+\)$/.test(e)}function Le(e){if(!e||e===`/`)return`/`;let t=e.replace(b,`/`).split(`/`).filter(e=>!!e&&!Ie(e));return t.length>0?`/${t.join(`/`)}`:`/`}function Re(e,t){let n=j.relative(t,j.dirname(e));return!n||n===`.`?`/`:Le(`/${n.replace(b,`/`).split(`/`).filter(Boolean).join(`/`)}`)}function ze(e,t,n){if(t===`page`)return[e];let r=`${e}${e===`/`?``:`/`}`,i=n.filter(t=>t===e||t.startsWith(r));return i.length>0?i:[e]}function Be(e){try{let t=Ae.exec(e);if(!t)return null;let n=t[1],r={},i=je.exec(n);i&&(r.title=i[1]);let a=Me.exec(n);a&&(r.description=a[1]);let o=Ne.exec(n);o&&(r.keywords=o[1].split(`,`).map(e=>e.trim().replace(re,``)).filter(Boolean));for(let e of[`author`,`viewport`,`themeColor`,`robots`,`openGraph`,`twitter`]){let t=RegExp(`${e}\\s*:\\s*['"]([^'"]+)['"]`,`m`),i=n.match(t);i&&(r[e]=i[1])}return Object.keys(r).length>0?r:null}catch(e){return console.error(`[rari] Router: Failed to extract metadata:`,e),null}}function Ve(e){let t=[];for(let n of[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`]){let r=RegExp(`export\\s+(?:async\\s+)?function\\s+${n}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${n}\\s*=`);(r.test(e)||i.test(e))&&t.push(n)}return t}function He(e){return a(e)&&Array.isArray(e.routes)}async function Ue(e){try{let n=await fetch(`http://localhost:3000/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate-api-route`,filePath:e})});if(!n.ok){console.error(`[rari] Router: Failed to invalidate API route cache: ${n.statusText}`);return}let r=t(await n.text());if(r?.success!==!0){let e=typeof r?.error==`string`&&r.error!==``?r.error:`Unknown error`;console.error(`[rari] HMR: Failed to invalidate API route cache: ${e}`)}}catch(e){console.error(`[rari] Router: Failed to notify API route invalidation:`,e)}}function We(e={}){let n={...Pe,...e},i=null,a=new Map,o=null,s=new Set,l=e=>[...e].toSorted().join(`|`),u=async e=>{let t=new Set,r=async e=>{try{let i=await A.readdir(e,{withFileTypes:!0});for(let a of i){let i=j.join(e,a.name);a.isDirectory()?await r(i):a.isFile()&&n.extensions.some(e=>a.name.endsWith(e))&&Fe(i)&&t.add(i)}}catch{}};return await r(e),t},d=async(e,t=!1)=>{let r=j.resolve(e,n.appDir);try{await A.access(r)}catch{return null}try{let a=await u(r),c=l(a);if(!t&&o===c&&i!=null&&i!==``)return i;let d=await ke(r,{extensions:n.extensions}),f=JSON.stringify(d),p=j.resolve(e,n.outDir);await A.mkdir(p,{recursive:!0});let m=j.join(p,`server`);return await A.mkdir(m,{recursive:!0}),await A.writeFile(j.join(m,`routes.json`),f,`utf-8`),o=c,s.clear(),a.forEach(e=>{s.add(e)}),f}catch(e){return console.error(`[rari] Router: Failed to generate app routes:`,e),null}},f=e=>{let t=j.resolve(e.config.root,n.appDir);e.watcher.on(`all`,(r,i)=>{(async()=>{if(i.startsWith(t)&&n.extensions.some(e=>i.endsWith(e)))try{let t=Fe(i)!==null,a=r===`add`||r===`unlink`,o=t&&!s.has(i);(a||o)&&(await d(e.config.root,!0),i.includes(n.appDir)&&e.ws.send({type:`full-reload`,path:`*`}))}catch(e){console.error(`[rari] Router: Failed to regenerate app routes:`,e)}})()})},p;return pe({name:`rari-router`,configResolved(e){p=e.root;let t=e.logger.warn.bind(e.logger);e.logger.warn=(e,n)=>{typeof e==`string`&&e.includes(`The above dynamic import cannot be analyzed`)&&e.includes(`packages/rari/dist/`)||t(e,n)}},async writeBundle(){let e=p||M.cwd();i=await d(e,!0)},configureServer(e){f(e)},async handleHotUpdate(e){let{file:r,server:o}=e,c=j.resolve(o.config.root,n.appDir);if(r.startsWith(c)&&n.extensions.some(e=>r.endsWith(e))){let e=Fe(r);if(e){let n=a.get(r);n&&clearTimeout(n);let l=setTimeout(()=>{(async()=>{a.delete(r);let n=!s.has(r),l=i;i=await d(o.config.root,n);let u=l!==i,f=Re(r,c),p=[f];if(i!=null&&i!==``)try{let e=t(i);e&&He(e)&&(p=e.routes.map(e=>e.path))}catch(e){console.error(`[rari] Router: Failed to parse manifest for affected routes:`,e)}let m=ze(f,e,p),h,g=!1,_;if(e===`page`||e===`layout`)try{let e=Be(await A.readFile(r,`utf-8`));e&&(h=e,g=!0)}catch(e){console.error(`[rari] Router: Failed to extract metadata:`,e)}if(e===`route`)try{_=Ve(await A.readFile(r,`utf-8`)),await Ue(j.relative(c,r))}catch(e){console.error(`[rari] Router: Failed to detect HTTP methods:`,e)}let v={fileType:e,filePath:j.relative(o.config.root,r),routePath:f,affectedRoutes:m,manifestUpdated:u,timestamp:Date.now(),metadata:h,metadataChanged:g,methods:_};o.ws.send({type:`custom`,event:`rari:app-router-updated`,data:v})})()},200);return a.set(r,l),[]}return i=await d(o.config.root),[]}},async closeBundle(){for(let e of a.values())clearTimeout(e);a.clear();let e=p||M.cwd(),i=j.resolve(e,n.outDir,`server`),o=j.join(i,`routes.json`);try{let e=t(await A.readFile(o,`utf-8`));if(!e||!He(e))return;let n=e,a=n.routes.flatMap(e=>{if(!e.isDynamic)return[];let t=e.componentId;return t==null||t===``?[]:[{route:e,componentId:t}]}),s=Math.min(8,Math.max(1,a.length)),l=a.map(()=>!1),u=0,d=0;await new Promise(e=>{let t=()=>{for(;d<s&&u<a.length;){let n=u++,{route:o,componentId:s}=a[n],f=j.join(i,`${s}.js`);d++,(async()=>{try{let e=await ge(f);if(e==null)return;r(e)?(o.staticParams=e,l[n]=!0):c(s)}catch(e){console.warn(`[rari] Failed to evaluate generateStaticParams for ${s}:`,e)}finally{d--,u>=a.length&&d===0?e():t()}})()}a.length===0&&e()};t()}),l.some(Boolean)&&await A.writeFile(o,JSON.stringify(n),`utf-8`)}catch(e){console.warn(`[rari] Failed to enrich routes manifest with static params:`,e)}}})}function Ge(e,t){let n=t.indexOf(`var boundCache = new WeakMap();`),r=t.indexOf(`function createBoundServerReference`,n);if(n===-1||r===-1)throw Error(`Failed to locate edge client form-action helpers for browser patch`);let i=t.slice(n,r).replace(`return {
|
|
19
|
+
`;return new Promise((t,r)=>{let i=pe(A.execPath,[`--conditions=react-server`,`--input-type=module`,`--eval`,n],{stdio:[`ignore`,`pipe`,`pipe`,`ipc`],env:A.env}),a=``,o=``,s=!1,c=!1,l,u,d,f=()=>{u!==void 0&&clearTimeout(u),d!==void 0&&clearTimeout(d),u=void 0,d=void 0};u=setTimeout(()=>{s||(s=!0,u!==void 0&&clearTimeout(u),u=void 0,i.kill(`SIGTERM`),d=setTimeout(()=>{i.kill(`SIGKILL`)},1e3),r(Error(`generateStaticParams timed out after ${ye}ms for ${e}`)))},ye),i.stdout?.setEncoding(`utf8`),i.stderr?.setEncoding(`utf8`),i.stdout?.on(`data`,e=>{a+=e}),i.stderr?.on(`data`,e=>{o+=e}),i.on(`message`,e=>{c=!0,l=e}),i.on(`error`,e=>{s||(s=!0,f(),r(e))}),i.on(`close`,n=>{if(f(),s)return;s=!0;let i=[o.trim(),a.trim()].filter(Boolean).join(`
|
|
20
|
+
`);if(n!==0){r(Error(i||`generateStaticParams worker exited with code ${n}`));return}if(!c){r(Error(i||`generateStaticParams worker exited without an IPC result for ${e}`));return}t(l)})})}const I={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`},xe={DYNAMIC:/^\[([^\]]+)\]$/,CATCH_ALL:/^\[\.\.\.([^\]]+)\]$/,OPTIONAL_CATCH_ALL:/^\[\[\.\.\.([^\]]+)\]\]$/},Se=[{pattern:xe.OPTIONAL_CATCH_ALL,type:`optional-catch-all`,format:e=>`[[...${e}]]`},{pattern:xe.CATCH_ALL,type:`catch-all`,format:e=>`[...${e}]`},{pattern:xe.DYNAMIC,type:`dynamic`,format:e=>`[${e}]`}],Ce=/^\([^/]+\)$/;function we(e){return Ce.test(e)}function Te(e){return e?e.replace(x,`/`).split(`/`).filter(Boolean).some(we):!1}function Ee(e){for(let t of Se){let n=e.match(t.pattern);if(n)return{type:t.type,param:n[1],format:t.format}}}function De(e){let t=Ee(e);return t?t.format(t.param):e}function Oe(e){let t=Ee(e);return t?{type:t.type,value:e,param:t.param}:{type:`static`,value:e}}const ke=/export\s+const\s+size\s*=\s*\{\s*width\s*:\s*(\d+)\s*,\s*height\s*:\s*(\d+)\s*[,}]/,Ae=/export\s+const\s+contentType\s*=\s*['"]([^'"]+)['"]/,je=[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`];var Me=class{appDir;extensions;verbose;constructor(e){this.appDir=k.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=[],s=[];await this.scanDirectory(``,e,t,n,r,i,a,o,s);for(let o of[t,n,r,i,a,s])this.finalizeGroupEntries(e,o);return this.assertNoDuplicateRoutes(e),this.assertNoDuplicateRoutes(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} templates`),console.warn(`[rari] Router: Found ${o.length} API routes`),console.warn(`[rari] Router: Found ${s.length} OG images`)),{routes:this.sortRoutes(e),layouts:this.sortLayouts(t),loading:n,errors:r,notFound:i,templates:this.sortTemplates(a),apiRoutes:this.sortApiRoutes(o),ogImages:s,generated:new Date().toISOString()}}finalizeGroupEntries(e,t){for(let n=t.length-1;n>=0;n--){let r=t[n],i=k.dirname(r.filePath).replace(x,`/`);if(!Te(i))continue;let a=e.filter(e=>{let t=k.dirname(e.filePath).replace(x,`/`);return t===i||t.startsWith(`${i}/`)}).map(e=>e.path);if(a.length===0){t.splice(n,1);continue}let o=Array.from(new Set(a)).sort();r.path=o[0],o.length>1&&(r.additionalPaths=o.slice(1))}}assertNoDuplicateRoutes(e){let t=new Map;for(let n of e){let e=t.get(n.path);if(e!=null&&e!==``)throw Error(`[rari] Route conflict: path '${n.path}' is defined by both '${e}' and '${n.filePath}'.`);t.set(n.path,n.filePath)}}async scanDirectory(e,t,n,r,i,a,o,s,c){let l=k.join(this.appDir,e),u;try{u=await O.readdir(l)}catch{return}let d=[],f=[];for(let e of u){let t=k.join(l,e),n=await O.stat(t);n.isDirectory()?this.shouldScanDirectory(e)&&f.push(e):n.isFile()&&d.push(e)}await this.processSpecialFiles(e,d,t,n,r,i,a,o,s,c);for(let l of f){let u=e?k.join(e,l):l;await this.scanDirectory(u,t,n,r,i,a,o,s,c)}}async processSpecialFiles(e,t,n,r,i,a,o,s,c,l){let u=this.pathToRoute(e),d=this.findFile(t,I.PAGE);if(d!=null&&d!==``){let t=this.parseRouteSegments(e),r=this.extractParams(t);n.push({path:u,filePath:k.join(e,d).replace(x,`/`),segments:t,params:r,isDynamic:r.length>0})}let f=this.findFile(t,I.LAYOUT);if(f!=null&&f!==``){let t=this.getParentPath(e);r.push({path:u,filePath:k.join(e,f).replace(x,`/`),parentPath:t===null?void 0:this.pathToRoute(t)})}let p=this.findFile(t,I.LOADING);p!=null&&p!==``&&i.push({path:u,filePath:k.join(e,p).replace(x,`/`)});let m=this.findFile(t,I.ERROR);m!=null&&m!==``&&a.push({path:u,filePath:k.join(e,m).replace(x,`/`)});let h=this.findFile(t,I.NOT_FOUND);h!=null&&h!==``&&o.push({path:u,filePath:k.join(e,h).replace(x,`/`)});let g=this.findFile(t,I.TEMPLATE);if(g!=null&&g!==``){let t=this.getParentPath(e);s.push({path:u,filePath:k.join(e,g).replace(x,`/`),parentPath:t===null?void 0:this.pathToRoute(t)})}let _=this.findFile(t,I.OG_IMAGE);if(_!=null&&_!==``){let t=k.join(e,_).replace(x,`/`),n=k.join(this.appDir,t),r,i,a;try{let e=await O.readFile(n,`utf-8`),t=ke.exec(e);t&&(r=Number.parseInt(t[1],10),i=Number.parseInt(t[2],10));let o=Ae.exec(e);o&&(a=o[1])}catch{}l.push({path:u,filePath:t,width:r,height:i,contentType:a})}let v=this.findFile(t,I.ROUTE);if(v!=null&&v!==``){let t=await this.processApiRouteFile(e,v);c.push(t)}}findFile(e,t){for(let n of this.extensions){let r=`${t}${n}`;if(e.includes(r))return r}}pathToRoute(e){return e?`/${e.replace(x,`/`).split(`/`).filter(Boolean).filter(e=>!we(e)).map(De).join(`/`)}`:`/`}parseRouteSegments(e){return e?e.split(g).filter(Boolean).filter(e=>!we(e)).map(Oe):[]}extractParams(e){return e.filter(e=>e.param!==void 0).map(e=>e.param)}getParentPath(e){if(!e)return null;let t=e.split(g).filter(Boolean);return t.length===0?null:t.slice(0,-1).join(`/`)}shouldScanDirectory(e){return![`node_modules`,`.git`,`dist`,`build`,`__tests__`,`test`,`tests`,`coverage`].includes(e)&&!e.startsWith(`_`)&&!e.startsWith(`.`)}sortRoutes(e){return e.sort((e,t)=>{let n=e=>{if(!e.isDynamic)return 0;let t=e.segments.some(e=>e.type===`catch-all`);return e.segments.some(e=>e.type===`optional-catch-all`)?3:t?2:1},r=n(e),i=n(t);if(r!==i)return r-i;let a=e.path.split(`/`).length,o=t.path.split(`/`).length;return a===o?e.path.localeCompare(t.path):o-a})}sortApiRoutes(e){return e.sort((e,t)=>{if(!e.isDynamic&&t.isDynamic)return-1;if(e.isDynamic&&!t.isDynamic)return 1;let n=e.path.split(`/`).length,r=t.path.split(`/`).length;return n===r?e.path.localeCompare(t.path):n-r})}sortLayouts(e){return e.sort((e,t)=>e.path===`/`&&t.path!==`/`?-1:t.path===`/`&&e.path!==`/`?1:e.path.split(`/`).length-t.path.split(`/`).length)}sortTemplates(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=k.join(this.appDir,e),n=await O.readFile(t,`utf-8`),r=[];for(let e of je){let t=RegExp(`export\\s+(?:async\\s+)?function\\s+${e}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${e}\\s*=`);(t.test(n)||i.test(n))&&r.push(e)}return r}async processApiRouteFile(e,t){let n=k.join(e,t).replace(x,`/`),r=this.pathToRoute(e),i=this.parseRouteSegments(e),a=this.extractParams(i),o=await this.detectHttpMethods(n);return{path:r,filePath:n,segments:i,params:a,isDynamic:a.length>0,methods:o}}};async function Ne(e,t={}){return new Me({appDir:e,...t}).generateManifest()}const Pe=/export\s+const\s+metadata\s*(?::\s*\w+\s*)?=\s*(\{[\s\S]*?\n\})/,Fe=/title\s*:\s*['"]([^'"]+)['"]/,Ie=/description\s*:\s*['"]([^'"]+)['"]/,Le=/keywords\s*:\s*\[([\s\S]*?)\]/,Re={appDir:`src/app`,extensions:[`.tsx`,`.jsx`,`.ts`,`.js`],outDir:`dist`};function ze(e){switch(k.basename(e).replace(v,``)){case`page`:return`page`;case`layout`:return`layout`;case`template`:return`template`;case`loading`:return`loading`;case`error`:return`error`;case`not-found`:return`not-found`;case`route`:return`route`;default:return null}}function Be(e){return/^\([^/]+\)$/.test(e)}function Ve(e){if(!e||e===`/`)return`/`;let t=e.replace(x,`/`).split(`/`).filter(e=>!!e&&!Be(e));return t.length>0?`/${t.join(`/`)}`:`/`}function He(e,t){let n=k.relative(t,k.dirname(e));return!n||n===`.`?`/`:Ve(`/${n.replace(x,`/`).split(`/`).filter(Boolean).join(`/`)}`)}function Ue(e,t,n){if(t===`page`)return[e];let r=`${e}${e===`/`?``:`/`}`,i=n.filter(t=>t===e||t.startsWith(r));return i.length>0?i:[e]}function We(e){try{let t=Pe.exec(e);if(!t)return null;let n=t[1],r={},i=Fe.exec(n);i&&(r.title=i[1]);let a=Ie.exec(n);a&&(r.description=a[1]);let o=Le.exec(n);o&&(r.keywords=o[1].split(`,`).map(e=>e.trim().replace(ne,``)).filter(Boolean));for(let e of[`author`,`viewport`,`themeColor`,`robots`,`openGraph`,`twitter`]){let t=RegExp(`${e}\\s*:\\s*['"]([^'"]+)['"]`,`m`),i=n.match(t);i&&(r[e]=i[1])}return Object.keys(r).length>0?r:null}catch(e){return console.error(`[rari] Router: Failed to extract metadata:`,e),null}}function Ge(e){let t=[];for(let n of[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`]){let r=RegExp(`export\\s+(?:async\\s+)?function\\s+${n}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${n}\\s*=`);(r.test(e)||i.test(e))&&t.push(n)}return t}function Ke(e){return a(e)&&Array.isArray(e.routes)}async function qe(e){try{let n=await fetch(`${ve()}/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate-api-route`,filePath:e})});if(!n.ok){console.error(`[rari] Router: Failed to invalidate API route cache: ${n.statusText}`);return}let r=t(await n.text());if(r?.success!==!0){let e=typeof r?.error==`string`&&r.error!==``?r.error:`Unknown error`;console.error(`[rari] HMR: Failed to invalidate API route cache: ${e}`)}}catch(e){console.error(`[rari] Router: Failed to notify API route invalidation:`,e)}}function Je(e={}){let n={...Re,...e},i=null,a=new Map,o=null,s=new Set,l=e=>[...e].toSorted().join(`|`),u=async e=>{let t=new Set,r=async e=>{try{let i=await O.readdir(e,{withFileTypes:!0});for(let a of i){let i=k.join(e,a.name);a.isDirectory()?await r(i):a.isFile()&&n.extensions.some(e=>a.name.endsWith(e))&&ze(i)&&t.add(i)}}catch{}};return await r(e),t},d=async(e,t=!1)=>{let r=k.resolve(e,n.appDir);try{await O.access(r)}catch{return null}try{let a=await u(r),c=l(a);if(!t&&o===c&&i!=null&&i!==``)return i;let d=await Ne(r,{extensions:n.extensions}),f=JSON.stringify(d),p=k.resolve(e,n.outDir);await O.mkdir(p,{recursive:!0});let m=k.join(p,`server`);return await O.mkdir(m,{recursive:!0}),await O.writeFile(k.join(m,`routes.json`),f,`utf-8`),o=c,s.clear(),a.forEach(e=>{s.add(e)}),f}catch(e){return console.error(`[rari] Router: Failed to generate app routes:`,e),null}},f=e=>{let t=k.resolve(e.config.root,n.appDir);e.watcher.on(`all`,(r,i)=>{(async()=>{if(i.startsWith(t)&&n.extensions.some(e=>i.endsWith(e)))try{let t=ze(i)!==null,a=r===`add`||r===`unlink`,o=t&&!s.has(i);(a||o)&&(await d(e.config.root,!0),i.includes(n.appDir)&&e.ws.send({type:`full-reload`,path:`*`}))}catch(e){console.error(`[rari] Router: Failed to regenerate app routes:`,e)}})()})},p;return ge({name:`rari-router`,configResolved(e){p=e.root;let t=e.logger.warn.bind(e.logger);e.logger.warn=(e,n)=>{typeof e==`string`&&e.includes(`The above dynamic import cannot be analyzed`)&&e.includes(`packages/rari/dist/`)||t(e,n)}},async writeBundle(){let e=p||A.cwd();i=await d(e,!0)},configureServer(e){f(e)},async handleHotUpdate(e){let{file:r,server:o}=e,c=k.resolve(o.config.root,n.appDir);if(r.startsWith(c)&&n.extensions.some(e=>r.endsWith(e))){let e=ze(r);if(e){let n=a.get(r);n&&clearTimeout(n);let l=setTimeout(()=>{(async()=>{a.delete(r);let n=!s.has(r),l=i;i=await d(o.config.root,n);let u=l!==i,f=He(r,c),p=[f];if(i!=null&&i!==``)try{let e=t(i);e&&Ke(e)&&(p=e.routes.map(e=>e.path))}catch(e){console.error(`[rari] Router: Failed to parse manifest for affected routes:`,e)}let m=Ue(f,e,p),h,g=!1,_;if(e===`page`||e===`layout`)try{let e=We(await O.readFile(r,`utf-8`));e&&(h=e,g=!0)}catch(e){console.error(`[rari] Router: Failed to extract metadata:`,e)}if(e===`route`)try{_=Ge(await O.readFile(r,`utf-8`)),await qe(k.relative(c,r))}catch(e){console.error(`[rari] Router: Failed to detect HTTP methods:`,e)}let v={fileType:e,filePath:k.relative(o.config.root,r),routePath:f,affectedRoutes:m,manifestUpdated:u,timestamp:Date.now(),metadata:h,metadataChanged:g,methods:_};o.ws.send({type:`custom`,event:`rari:app-router-updated`,data:v})})()},200);return a.set(r,l),[]}return i=await d(o.config.root),[]}},async closeBundle(){for(let e of a.values())clearTimeout(e);a.clear();let e=p||A.cwd(),i=k.resolve(e,n.outDir,`server`),o=k.join(i,`routes.json`);try{let e=await O.readFile(o,`utf-8`),n=t(e);if(!n||!Ke(n))return;let a=n,s=a.routes.flatMap(e=>{if(!e.isDynamic)return[];let t=e.componentId;return t==null||t===``?[]:[{route:e,componentId:t}]}),l=Math.min(8,Math.max(1,s.length)),u=s.map(()=>!1),d=0,f=0;await new Promise(e=>{let t=()=>{for(;f<l&&d<s.length;){let n=d++,{route:a,componentId:o}=s[n],l=k.join(i,`${o}.js`);f++,(async()=>{try{let e=await be(l);if(e==null)return;r(e)?(a.staticParams=e,u[n]=!0):c(o)}catch(e){console.warn(`[rari] Failed to evaluate generateStaticParams for ${o}:`,e)}finally{f--,d>=s.length&&f===0?e():t()}})()}s.length===0&&e()};t()}),u.some(Boolean)&&await O.writeFile(o,JSON.stringify(a),`utf-8`)}catch(e){console.warn(`[rari] Failed to enrich routes manifest with static params:`,e)}}})}function Ye(e,t,n,r){let i=e.indexOf(t);if(i===-1)throw Error(`Failed to patch flight browser client: anchor for ${r} not found. The react-server-dom-webpack sources likely changed shape after a version bump; update the anchors in patch-flight-browser-client.ts.`);if(e.includes(t,i+1))throw Error(`Failed to patch flight browser client: anchor for ${r} matched more than once. Update the anchors in patch-flight-browser-client.ts to be unambiguous.`);return e.slice(0,i)+n+e.slice(i+t.length)}function Xe(e,t){let n=t.indexOf(`var boundCache = new WeakMap();`),r=t.indexOf(`function createBoundServerReference`,n);if(n===-1||r===-1)throw Error(`Failed to locate edge client form-action helpers for browser patch`);return Ye(e,`function registerBoundServerReference(reference, id, bound) {
|
|
21
|
+
knownServerReferences.has(reference) ||
|
|
22
|
+
knownServerReferences.set(reference, {
|
|
23
|
+
id: id,
|
|
24
|
+
originalBind: reference.bind,
|
|
25
|
+
bound: bound
|
|
26
|
+
});
|
|
27
|
+
}`,Ye(t.slice(n,r),`return {
|
|
21
28
|
name: referenceClosure,
|
|
22
29
|
method: "POST",
|
|
23
30
|
encType: "multipart/form-data",
|
|
@@ -37,15 +44,8 @@ process.send(result, () => {
|
|
|
37
44
|
encType: "multipart/form-data",
|
|
38
45
|
action: resolveRariFormActionUrl(),
|
|
39
46
|
data: data
|
|
40
|
-
};`);return e.replace(`function registerBoundServerReference(reference, id, bound) {
|
|
41
|
-
|
|
42
|
-
knownServerReferences.set(reference, {
|
|
43
|
-
id: id,
|
|
44
|
-
originalBind: reference.bind,
|
|
45
|
-
bound: bound
|
|
46
|
-
});
|
|
47
|
-
}`,i)}function Ke(e){return e.replace(/(?<!\$)\$FORM_ACTION/g,()=>`$$FORM_ACTION`).replace(/(?<!\$)\$IS_SIGNATURE_EQUAL/g,()=>`$$IS_SIGNATURE_EQUAL`)}function R(e,t=8){return F.createHash(`sha256`).update(e).digest(`hex`).slice(0,t)}function z(e,t=M.cwd()){let n=j.isAbsolute(e)?e:j.resolve(t,e),r=j.relative(t,n);return j.isAbsolute(r)?n.replace(b,`/`):r.replace(b,`/`)}function qe(e){return e.replace(v,``).replace(te,`_`).replace(ee,``)}function B(e,t=M.cwd()){let n=z(e,t);return`${qe(n)}_${R(n)}`}const Je=new Set([`return`,`throw`,`case`,`typeof`,`instanceof`,`new`,`delete`,`void`,`in`,`of`]),Ye=8232,Xe=8233;function V(e){return e===32||e===9||e===13||e===10||e===Ye||e===Xe||e===65279}function H(e){return e===13||e===10||e===Ye||e===Xe}function U(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95||e===36}function Ze(e){return e>=97&&e<=122||e>=65&&e<=90||e===95||e===36}function Qe(e,t,n){for(;t<n&&V(e.charCodeAt(t));)t++;return t}function W(e,t,n){for(;t<n;){let r=Qe(e,t,n);if(r!==t){t=r;continue}let i=e.charCodeAt(t);if(i===47&&e.charCodeAt(t+1)===47){t=$e(e,t,n);continue}if(i===47&&e.charCodeAt(t+1)===42){t=et(e,t,n);continue}break}return t}function $e(e,t,n){for(;t<n&&!H(e.charCodeAt(t));)t++;return t}function et(e,t,n){for(t+=2;t<n-1&&(e.charCodeAt(t)!==42||e.charCodeAt(t+1)!==47);)t++;return t+2}function G(e,t,n,r){for(t++;t<n;){let n=e.charCodeAt(t);if(n===92){t+=2;continue}if(n===r)return t+1;t++}return t}function tt(e,t,n){t++;let r=e.charCodeAt(t)===47;for(r&&t++;t<n;){let n=e.charCodeAt(t);if(U(n)||n===46||n===45)t++;else break}let i=+!r;for(;t<n&&i>0;){let a=e.charCodeAt(t);if(a===39||a===34||a===96){t=G(e,t,n,a);continue}if(a===123){t++;let r=1;for(;t<n&&r>0;){let i=e.charCodeAt(t);if(i===39||i===34||i===96){t=G(e,t,n,i);continue}i===123&&r++,i===125&&r--,t++}continue}if(a===47&&e.charCodeAt(t+1)===62){i--,t+=2;continue}if(a===62){t++,r&&i--;continue}if(a===60){let r=e.charCodeAt(t+1);if(r===47||r===46||r===62||Ze(r)){for(r===47?(i--,t++):r!==33&&i++,t++;t<n;){let n=e.charCodeAt(t);if(U(n)||n===46||n===45)t++;else break}continue}t++;continue}t++}return t}function nt(e,t,n){for(let r=0;r<n.length;r++)if(e.charCodeAt(t+r)!==n.charCodeAt(r))return!1;return!0}function K(e,t,n){if(t+n.length>e.length)return!1;for(let r=0;r<n.length;r++)if(e.charCodeAt(t+r)!==n.charCodeAt(r))return!1;let r=t>0?e.charCodeAt(t-1):-1,i=t+n.length,a=i<e.length?e.charCodeAt(i):-1;return!(r!==-1&&U(r)||a!==-1&&U(a))}function rt(e,t,n){let r=W(e,t,n);if(r>=n)return null;let i=e.charCodeAt(r);if(i!==39&&i!==34)return null;let a=r+1,o=G(e,r,n,i);return o<=a?null:{source:e.slice(a,o-1),end:o}}function it(e,t,n){if(!K(e,t,`import`))return{sources:[],end:t+6};let r=t+6;if(r=W(e,r,n),K(e,r,`type`)&&(r=W(e,r+4,n)),e.charCodeAt(r)===46){for(r++;r<n&&U(e.charCodeAt(r));)r++;for(;r<n&&e.charCodeAt(r)===46;)for(r++;r<n&&U(e.charCodeAt(r));)r++;return{sources:[],end:r}}if(e.charCodeAt(r)===40){r++;let t=rt(e,r,n);return t?{sources:[t.source],end:t.end}:{sources:[],end:r}}let i=rt(e,r,n);if(i)return{sources:[i.source],end:i.end};let a=0;for(;r<n&&(r=W(e,r,n),!(r>=n));){let t=e.charCodeAt(r);if(a===0&&K(e,r,`from`)){let t=rt(e,r+4,n);if(t)return{sources:[t.source],end:t.end};break}if(t===39||t===34||t===96){r=G(e,r,n,t);continue}t===123||t===40||t===91?a++:(t===125||t===41||t===93)&&(a=Math.max(0,a-1)),r++}return{sources:[],end:r}}function at(e,t){return e.charCodeAt(t)===101&&e.charCodeAt(t+1)===120&&e.charCodeAt(t+2)===112&&e.charCodeAt(t+3)===111&&e.charCodeAt(t+4)===114&&e.charCodeAt(t+5)===116}function ot(e,t){return e.charCodeAt(t)===100&&e.charCodeAt(t+1)===101&&e.charCodeAt(t+2)===102&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===117&&e.charCodeAt(t+5)===108&&e.charCodeAt(t+6)===116}function q(e){let t={hasUseClient:!1,hasUseServer:!1},n=!1,r=!1,i=!1,a=!1,o=[],s=!0,c=!1,l=0,u=e.length;for(;l<u;){let d=e.charCodeAt(l);if(V(d)){l++;continue}if(d===47&&e.charCodeAt(l+1)===47){l=$e(e,l,u);continue}if(d===47&&e.charCodeAt(l+1)===42){l=et(e,l,u);continue}if(s&&(d===39||d===34)){let i=l+1,a=G(e,l,u,d);if(a<=i){s=!1,l++;continue}let o=a-1-i,f=o===10&&nt(e,i,`use client`),p=o===10&&nt(e,i,`use server`);c||(c=!0,n=f,r=p),f&&(t.hasUseClient=!0),p&&(t.hasUseServer=!0);let m=a,h=!1;for(;m<u;){let t=e.charCodeAt(m);if(V(t)&&!H(t)){m++;continue}if(H(t)||t===59){h=!0,l=m+1;break}if(t===47&&e.charCodeAt(m+1)===47){m=$e(e,m,u);continue}if(t===47&&e.charCodeAt(m+1)===42){m=et(e,m,u);continue}s=!1,h=!1;break}if(!h){m>=u&&(s=!1),l=s?a:m;continue}continue}if(s=!1,d===39||d===34||d===96){l=G(e,l,u,d);continue}if(d===47&&e.charCodeAt(l+1)!==47&&e.charCodeAt(l+1)!==42&&dt(e,l)){l=ft(e,l,u);continue}if(d===60){let t=e.charCodeAt(l+1);if(t===47||t===46||t===62||Ze(t)){l=tt(e,l,u);continue}l++;continue}if(K(e,l,`import`)){let t=it(e,l,u);for(let e of t.sources)o.push(e);l=t.end;continue}if(at(e,l)){let t=l+6;if(t<u){let n=e.charCodeAt(t);if(V(n)||n===123||n===47&&(e.charCodeAt(t+1)===47||e.charCodeAt(t+1)===42)){let n=W(e,t,u);if(ot(e,n)){i=!0,a=!0;let r=n+7;if(r>=u||!U(e.charCodeAt(r))){l=t;continue}}if(e.charCodeAt(n)===123){let t=n+1;for(;t<u&&(t=W(e,t,u),e.charCodeAt(t)!==125);){let n=t;for(;t<u&&U(e.charCodeAt(t));)t++;let r=t-n;if(r===0)break;t=W(e,t,u);let o=!1;if(e.charCodeAt(t)===97&&e.charCodeAt(t+1)===115){o=!0;let n=t+2;if(n<u&&!U(e.charCodeAt(n))){t=W(e,n,u);let r=t;for(;t<u&&U(e.charCodeAt(t));)t++;t-r===7&&ot(e,r)&&(i=!0,a=!0)}}if(!o&&r===7&&ot(e,n)&&(i=!0,a=!0),e.charCodeAt(t)===44){t++;continue}if(e.charCodeAt(t)===125)break;t++}}else(K(e,n,`async`)||K(e,n,`function`)||K(e,n,`class`))&&(a=!0)}}}l++}return{directives:t,topLevelUseClient:n,topLevelUseServer:r,hasDefaultExport:i,hasComponentExport:a,importSources:[...new Set(o)]}}function st(e){return q(e).hasDefaultExport}function ct(e){return e===40||e===91||e===123||e===44||e===59||e===61||e===58||e===63||e===33||e===43||e===45||e===42||e===37||e===38||e===124||e===94||e===126||e===60||e===62}function lt(e,t){let n=t-1;for(;n>=0;){let t=e.charCodeAt(n);if(V(t)){n--;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===42){for(n-=2;n>=1;){if(e.charCodeAt(n)===42&&e.charCodeAt(n-1)===47){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===47){n-=2;continue}let r=n;for(;r>=0&&e.charCodeAt(r)!==10&&e.charCodeAt(r)!==13;)r--;let i=r+1;for(;i<n&&(e.charCodeAt(i)===32||e.charCodeAt(i)===9);)i++;if(i<n&&e.charCodeAt(i)===47&&e.charCodeAt(i+1)===47){n=i-1;continue}break}if(n<0||!U(e.charCodeAt(n)))return;let r=n;for(;n>=0&&U(e.charCodeAt(n));)n--;return e.slice(n+1,r+1)}function ut(e,t){let n=t-1;for(;n>=0;){let t=e.charCodeAt(n);if(V(t)){n--;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===42){for(n-=2;n>=1;){if(e.charCodeAt(n)===42&&e.charCodeAt(n-1)===47){n-=2;break}n--}if(n<0)return-1;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===47){n-=2;continue}let r=n;for(;r>=0&&e.charCodeAt(r)!==10&&e.charCodeAt(r)!==13;)r--;let i=r+1;for(;i<n&&(e.charCodeAt(i)===32||e.charCodeAt(i)===9);)i++;if(i<n&&e.charCodeAt(i)===47&&e.charCodeAt(i+1)===47){n=i-1;continue}return t}return-1}function dt(e,t){let n=ut(e,t);if(n===-1||ct(n))return!0;let r=lt(e,t);return r!=null&&r!==``&&Je.has(r)}function ft(e,t,n){t++;let r=!1;for(;t<n;){let i=e.charCodeAt(t);if(i===92){t+=2;continue}if(r){i===93&&(r=!1),t++;continue}if(i===91){r=!0,t++;continue}if(i===47){for(t++;t<n&&U(e.charCodeAt(t));)t++;return t}if(H(i))return t;t++}return t}const pt=new Set([`node_modules`,`.git`,`.cache`,`dist`]);function mt(e,t){let n=new Set,r=e=>{if(!k.existsSync(e))return;let i=k.readdirSync(e,{withFileTypes:!0});for(let a of i){let i=j.join(e,a.name);if(a.isDirectory()){if(pt.has(a.name))continue;r(i)}else if(a.isFile()&&v.test(a.name)){if(n.has(i))continue;n.add(i),t(i)}}};for(let t of e)t&&k.existsSync(t)&&r(t)}function ht(e){let t=[];return mt(e,e=>{t.push(e)}),t}function gt(e,t=[]){let n=[e],r=j.resolve(e);for(let e of t){if(!e)continue;let t=j.resolve(e);if(t===r)continue;let i=j.relative(r,t);if(!(i===``||!i.startsWith(`..`)&&!j.isAbsolute(i)))try{k.statSync(e).isDirectory()&&n.push(e)}catch{}}return n}const _t=new Set(E);function J(e){return _t.has(e)}function vt(e){for(let t of e.importSources)if(t.startsWith(`node:`)||J(t))return!0;return!1}function yt(e,t=_t){let n=[];for(let r of e)!r.startsWith(`.`)&&!r.startsWith(`/`)&&!r.startsWith(`@/`)&&!r.startsWith(`node:`)&&!t.has(r)&&n.push(r);return[...new Set(n)]}function bt(e){let t=[];for(let n of e)(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`@/`))&&t.push(n);return t}function Y(e){try{return k.realpathSync(e)}catch{return j.resolve(e)}}function xt(e,t){e.delete(t);try{e.delete(k.realpathSync(t))}catch{e.delete(j.resolve(t))}}function St(e,t){let n=[];for(let r of ht(e))try{t.get(r).directives.hasUseClient&&n.push(r)}catch{}return n}var Ct=class{cache=new Map;get(e,t){let n=Y(e),r=this.cache.get(n);if(t!==void 0){if(r?.source===t)return r.analysis}else if(r){let e=this.readMtimeMs(n);if(e>=0&&r.mtimeMs===e)return r.analysis}t??=k.readFileSync(n,`utf-8`);let i=this.readMtimeMs(n),a=q(t);return this.cache.set(n,{mtimeMs:i,source:t,analysis:a}),a}getSource(e){return this.get(e),this.cache.get(Y(e)).source}invalidate(e){xt(this.cache,e)}clear(){this.cache.clear()}readMtimeMs(e){try{return k.statSync(e).mtimeMs}catch{return-1}}},wt=class extends Error{status;statusText;bodyPreview;constructor(e,t,n){super(`HTTP ${e}: ${t}`),this.name=`HttpError`,this.status=e,this.statusText=t,this.bodyPreview=n}};async function Tt(e){if(!e.ok){let t;try{t=await e.text()}catch{t=`<unable to read response body>`}let n=t.length>200?`${t.slice(0,200)}...`:t;throw new wt(e.status,e.statusText,n)}}var Et=class{errorCount=0;maxErrors;resetTimeout;resetTimer=null;lastError=null;constructor(e={}){this.maxErrors=e.maxErrors??5,this.resetTimeout=e.resetTimeout??3e4}recordError(e){this.errorCount++,this.lastError=e,this.resetTimer=le(this.resetTimer),this.resetTimer=setTimeout(()=>{this.reset()},this.resetTimeout),this.errorCount>=this.maxErrors&&this.handleMaxErrorsReached()}reset(){this.errorCount=0,this.lastError=null,this.resetTimer=le(this.resetTimer)}getErrorCount(){return this.errorCount}getLastError(){return this.lastError}hasReachedMaxErrors(){return this.errorCount>=this.maxErrors}handleMaxErrorsReached(){console.error(`[rari] HMR: Maximum error count (${this.maxErrors}) reached. Consider restarting the dev server if issues persist.`)}dispose(){this.reset()}};function Dt(e){return a(e)&&e.success===!0&&typeof e.componentId==`string`&&typeof e.filePath==`string`&&typeof e.relativePath==`string`}function Ot(e){return a(e)&&e.success===!1&&typeof e.filePath==`string`&&typeof e.relativePath==`string`&&e.error instanceof Error}function kt(e){return e===`info`||e===`success`||e===`warning`||e===`error`}var At=class{serverComponentBuilder;rustServerUrl;pendingUpdates=new Map;pendingFiles=new Set;batchTimer=null;DEBOUNCE_DELAY=200;errorHandler;logBatch=[];logBatchTimer=null;LOG_BATCH_DELAY=500;constructor(e,t=3e3){this.serverComponentBuilder=e,this.rustServerUrl=`http://localhost:${t}`,this.errorHandler=new Et({maxErrors:5,resetTimeout:3e4})}getErrorCount(){return this.errorHandler.getErrorCount()}async handleClientComponentUpdate(e,t){let n=j.relative(M.cwd(),e);try{let r=t.moduleGraph.getModuleById(e);r?(t.moduleGraph.invalidateModule(r),this.errorHandler.reset()):this.queueLog(`warning`,`Client component module not found in graph: ${n}`)}catch(e){let t=e instanceof Error?e.message:String(e);this.queueLog(`error`,`Failed to update client component: ${n} - ${t}`),this.errorHandler.recordError(e instanceof Error?e:Error(t))}return Promise.resolve()}async handleServerComponentUpdate(e,t){this.pendingFiles.add(e);let n=this.pendingUpdates.get(e);return n&&(clearTimeout(n),this.pendingUpdates.delete(e)),this.batchTimer&&clearTimeout(this.batchTimer),this.batchTimer=setTimeout(()=>{(async()=>{let e=[...this.pendingFiles];if(this.pendingFiles.clear(),this.batchTimer=null,e.length===0)return;let n=this.collectDependentPageComponents(e);for(let e of n)this.serverComponentBuilder.invalidateBuildCacheFor(e);let r=[...e,...n],i=await Promise.allSettled(r.map(async e=>{let t=j.relative(M.cwd(),e);try{let n=await this.serverComponentBuilder.rebuildComponent(e);if(!n.success)throw Error(n.error!=null&&n.error!==``?n.error:`Build failed`);return await this.notifyRustServer(n.componentId,n.bundlePath),{success:!0,componentId:n.componentId,filePath:e,relativePath:t}}catch(n){return{success:!1,filePath:e,relativePath:t,error:n instanceof Error?n:Error(String(n))}}})),a=[],o=[];if(i.forEach(e=>{e.status===`fulfilled`&&Dt(e.value)?a.push(e.value):e.status===`fulfilled`&&Ot(e.value)?o.push(e.value):e.status===`rejected`&&o.push({filePath:``,relativePath:`unknown`,error:Error(String(e.reason))})}),a.length>0){let e=Date.now();a.forEach(({componentId:n})=>{t.hot.send(`rari:server-component-updated`,{id:n,t:e})}),this.errorHandler.reset(),t.ws.send({type:`custom`,event:`rari:hmr-error-cleared`,data:{t:e}})}if(o.length>0){let e=Date.now();o.forEach(({relativePath:n,error:r})=>{let i=r.message,a=(r.stack!=null&&r.stack!==``?r.stack:``).substring(0,500);this.queueLog(`error`,`Failed to rebuild: ${n} - ${i}`),this.errorHandler.recordError(r),t.ws.send({type:`custom`,event:`rari:hmr-error`,data:{msg:i,stack:a,file:n,t:e,count:this.errorHandler.getErrorCount(),max:5}})}),this.errorHandler.hasReachedMaxErrors()&&this.queueLog(`error`,`Maximum error count reached (${this.errorHandler.getErrorCount()}). Consider restarting the dev server if issues persist.`)}})()},this.DEBOUNCE_DELAY),Promise.resolve()}async notifyRustServer(e,n){try{let r=await fetch(`${this.rustServerUrl}/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`reload-component`,component_id:e,bundle_path:n})});await Tt(r);let i=await r.text(),a;try{a=JSON.parse(i)}catch(e){throw Error(`Failed to parse server response (status ${r.status}): ${e instanceof Error?e.message:String(e)}. Response body: ${i.substring(0,200)}${i.length>200?`...`:``}`)}let o=t(i);if(!o)throw Error(`Invalid server response (status ${r.status}): expected object, got ${typeof a}. Response body: ${i.substring(0,200)}${i.length>200?`...`:``}`);if(o.success!==!0){let e=typeof o.message==`string`&&o.message!==``?o.message:typeof o.error==`string`&&o.error!==``?o.error:`Component reload failed`;throw Error(e)}}catch(e){throw console.error(`[rari] HMR: Failed to notify Rust server:`,e),e}}collectDependentPageComponents(e){let t=this.serverComponentBuilder.getImportGraph(),n=new Set,r=new Set,i=a=>{if(r.has(a))return;r.add(a);let o=t.get(a);if(o)for(let t of o)(t.includes(`/app/`)||t.includes(`\\app\\`))&&!e.includes(t)&&n.add(t),i(t)};for(let t of e)i(t);return[...n]}detectComponentType(e){try{return this.serverComponentBuilder.getModuleAnalysis(e).topLevelUseClient?`client`:`server`}catch{return`unknown`}}queueLog(e,t){this.logBatch.push({type:e,message:t,timestamp:Date.now()}),this.logBatchTimer&&clearTimeout(this.logBatchTimer),this.logBatchTimer=setTimeout(()=>{this.flushLogs()},this.LOG_BATCH_DELAY)}flushLogs(){if(this.logBatch.length===0)return;let e=this.logBatch.reduce((e,t)=>(e[t.type]??=[],e[t.type].push(t),e),{});for(let[t,n]of Object.entries(e))if(kt(t))if(n.length===1){let e=n[0];this.outputLog(t,e.message)}else{let e=n.map(e=>e.message).join(`
|
|
48
|
-
• `);this.outputLog(t,`${n.length} updates:\n • ${e}`)}this.logBatch=[],this.logBatchTimer=null}outputLog(e,t){let n=`[rari] HMR:`;switch(e){case`success`:console.warn(`\x1B[32m${n}\x1B[0m ${t}`);break;case`warning`:console.warn(`\x1B[33m${n}\x1B[0m ${t}`);break;case`error`:console.error(`\x1B[31m${n}\x1B[0m ${t}`);break;default:console.warn(`${n} ${t}`);break}}dispose(){this.logBatchTimer&&(clearTimeout(this.logBatchTimer),this.flushLogs()),this.batchTimer&&=(clearTimeout(this.batchTimer),null);for(let e of this.pendingUpdates.values())clearTimeout(e);this.pendingUpdates.clear(),this.pendingFiles.clear(),this.errorHandler.dispose()}};function jt(e){let t=e.replace(b,`/`);return t===`rari/mdx/registry`||t.startsWith(`rari/mdx/registry?`)?!0:t.endsWith(`/mdx/registry.ts`)||t.endsWith(`/mdx/registry.mts`)||t.endsWith(`/mdx/registry.mjs`)||t.endsWith(`/mdx/registry.js`)||t.endsWith(`/mdx/registry`)?t.includes(`/node_modules/rari/`)||t.includes(`/packages/rari/`):!1}function Mt(e,t){let n=e=>{if(k.existsSync(e))for(let r of k.readdirSync(e,{withFileTypes:!0})){let i=j.join(e,r.name);if(r.isDirectory()){if(r.name===`node_modules`||r.name===`.git`||r.name===`dist`)continue;n(i)}else r.isFile()&&r.name.endsWith(`.mdx`)&&t(i)}};for(let t of e)t&&k.existsSync(t)&&n(t)}function Nt(e){let t=new Set;return Mt(e,e=>{try{let n=k.readFileSync(e,`utf-8`);for(let e of T(n))t.add(e)}catch{}}),t}function Pt(e,t){try{if(t.get(e).hasDefaultExport)return j.basename(e,j.extname(e));let n=t.getSource(e).match(ne);if(n?.[1]!=null&&n[1]!==``)return n[1]}catch{}return j.basename(e,j.extname(e))}function Ft(e){let t=Nt(e.contentDirs.map(t=>j.join(e.projectRoot,t)));if(t.size===0)return[];let n=St(e.componentScanDirs,e.cache),r=[],i=new Set;for(let a of n){let n=Pt(a,e.cache);if(n==null||n===``||!t.has(n))continue;let o=z(a,e.projectRoot).replace(b,`/`),s=o.startsWith(`/`)?o:`/${o}`,c=n.replace(/[^\w$]/g,`_`);i.has(c)&&(c=`${c}_${r.length}`),i.add(c),r.push({name:n,binding:c,importPath:s,moduleId:o,client:!0})}return r.sort((e,t)=>e.name.localeCompare(t.name))}function It(e){let t=Rt(e.projectRoot,e.mdxOptions),n=e.srcDir??j.join(e.projectRoot,`src`),r=zt(e.projectRoot,t.componentsDir,gt(n,Object.values(e.alias??{})));return Ft({projectRoot:e.projectRoot,componentsDir:t.componentsDir,contentDirs:t.contentDirs,cache:e.cache,componentScanDirs:r})}function Lt(e,t={}){let n=t.importStyle??`root-absolute`,r=t.mode??`vite`;return e.length===0?`import { defineMdxComponents } from 'rari/mdx/define'
|
|
47
|
+
};`,`edge $$FORM_ACTION return block`),`browser registerBoundServerReference`)}function Ze(e){return e.replace(/(?<!\$)\$FORM_ACTION/g,()=>`$$FORM_ACTION`).replace(/(?<!\$)\$IS_SIGNATURE_EQUAL/g,()=>`$$IS_SIGNATURE_EQUAL`)}function L(e,t=8){return me.createHash(`sha256`).update(e).digest(`hex`).slice(0,t)}function Qe(e,t=A.cwd()){let n=k.isAbsolute(e)?e:k.resolve(t,e),r=k.relative(t,n);return k.isAbsolute(r)?n.replace(x,`/`):r.replace(x,`/`)}function $e(e){return e.replace(v,``).replace(ee,`_`).replace(b,``)}function et(e,t=A.cwd()){let n=Qe(e,t);return`${$e(n)}_${L(n)}`}const tt=new Set([`return`,`throw`,`case`,`typeof`,`instanceof`,`new`,`delete`,`void`,`in`,`of`]),nt=8232,rt=8233;function R(e){return e===32||e===9||e===13||e===10||e===nt||e===rt||e===65279}function z(e){return e===13||e===10||e===nt||e===rt}function B(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95||e===36}function it(e){return e>=97&&e<=122||e>=65&&e<=90||e===95||e===36}function at(e,t,n){for(;t<n&&R(e.charCodeAt(t));)t++;return t}function V(e,t,n){for(;t<n;){let r=at(e,t,n);if(r!==t){t=r;continue}let i=e.charCodeAt(t);if(i===47&&e.charCodeAt(t+1)===47){t=H(e,t,n);continue}if(i===47&&e.charCodeAt(t+1)===42){t=ot(e,t,n);continue}break}return t}function H(e,t,n){for(;t<n&&!z(e.charCodeAt(t));)t++;return t}function ot(e,t,n){for(t+=2;t<n-1&&(e.charCodeAt(t)!==42||e.charCodeAt(t+1)!==47);)t++;return t+2}function U(e,t,n,r){for(t++;t<n;){let n=e.charCodeAt(t);if(n===92){t+=2;continue}if(n===r)return t+1;t++}return t}function st(e,t,n){t++;let r=e.charCodeAt(t)===47;for(r&&t++;t<n;){let n=e.charCodeAt(t);if(B(n)||n===46||n===45)t++;else break}let i=+!r;for(;t<n&&i>0;){let a=e.charCodeAt(t);if(a===39||a===34||a===96){t=U(e,t,n,a);continue}if(a===123){t++;let r=1;for(;t<n&&r>0;){let i=e.charCodeAt(t);if(i===39||i===34||i===96){t=U(e,t,n,i);continue}i===123&&r++,i===125&&r--,t++}continue}if(a===47&&e.charCodeAt(t+1)===62){i--,t+=2;continue}if(a===62){t++,r&&i--;continue}if(a===60){let r=e.charCodeAt(t+1);if(r===47||r===46||r===62||it(r)){for(r===47?(i--,t++):r!==33&&i++,t++;t<n;){let n=e.charCodeAt(t);if(B(n)||n===46||n===45)t++;else break}continue}t++;continue}t++}return t}function ct(e,t,n){for(let r=0;r<n.length;r++)if(e.charCodeAt(t+r)!==n.charCodeAt(r))return!1;return!0}function W(e,t,n){if(t+n.length>e.length)return!1;for(let r=0;r<n.length;r++)if(e.charCodeAt(t+r)!==n.charCodeAt(r))return!1;let r=t>0?e.charCodeAt(t-1):-1,i=t+n.length,a=i<e.length?e.charCodeAt(i):-1;return!(r!==-1&&B(r)||a!==-1&&B(a))}function lt(e,t,n){let r=V(e,t,n);if(r>=n)return null;let i=e.charCodeAt(r);if(i!==39&&i!==34)return null;let a=r+1,o=U(e,r,n,i);return o<=a?null:{source:e.slice(a,o-1),end:o}}function ut(e,t,n){if(!W(e,t,`import`))return{sources:[],end:t+6};let r=t+6;if(r=V(e,r,n),W(e,r,`type`)&&(r=V(e,r+4,n)),e.charCodeAt(r)===46){for(r++;r<n&&B(e.charCodeAt(r));)r++;for(;r<n&&e.charCodeAt(r)===46;)for(r++;r<n&&B(e.charCodeAt(r));)r++;return{sources:[],end:r}}if(e.charCodeAt(r)===40){r++;let t=lt(e,r,n);return t?{sources:[t.source],end:t.end}:{sources:[],end:r}}let i=lt(e,r,n);if(i)return{sources:[i.source],end:i.end};let a=0;for(;r<n&&(r=V(e,r,n),!(r>=n));){let t=e.charCodeAt(r);if(a===0&&W(e,r,`from`)){let t=lt(e,r+4,n);if(t)return{sources:[t.source],end:t.end};break}if(t===39||t===34||t===96){r=U(e,r,n,t);continue}t===123||t===40||t===91?a++:(t===125||t===41||t===93)&&(a=Math.max(0,a-1)),r++}return{sources:[],end:r}}function dt(e,t){return e.charCodeAt(t)===101&&e.charCodeAt(t+1)===120&&e.charCodeAt(t+2)===112&&e.charCodeAt(t+3)===111&&e.charCodeAt(t+4)===114&&e.charCodeAt(t+5)===116}function ft(e,t){return e.charCodeAt(t)===100&&e.charCodeAt(t+1)===101&&e.charCodeAt(t+2)===102&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===117&&e.charCodeAt(t+5)===108&&e.charCodeAt(t+6)===116}function G(e){let t={hasUseClient:!1,hasUseServer:!1},n=!1,r=!1,i=!1,a=!1,o=[],s=!0,c=!1,l=0,u=e.length;for(;l<u;){let d=e.charCodeAt(l);if(s&&(d===39||d===34)){let i=l+1,a=U(e,l,u,d);if(a<=i){s=!1,l++;continue}let o=a-1-i,f=o===10&&ct(e,i,`use client`),p=o===10&&ct(e,i,`use server`);c||(c=!0,n=f,r=p),f&&(t.hasUseClient=!0),p&&(t.hasUseServer=!0);let m=a,h=!1;for(;m<u;){let t=e.charCodeAt(m);if(R(t)&&!z(t)){m++;continue}if(z(t)||t===59){h=!0,l=m+1;break}if(t===47&&e.charCodeAt(m+1)===47){m=H(e,m,u);continue}if(t===47&&e.charCodeAt(m+1)===42){m=ot(e,m,u);continue}s=!1,h=!1;break}if(!h){m>=u&&(s=!1),l=s?a:m;continue}continue}let f=q(e,l,u);if(f!==-1){s&&!Ot(e,l)&&(s=!1),l=f;continue}if(s=!1,W(e,l,`import`)){let t=ut(e,l,u);for(let e of t.sources)o.push(e);l=t.end;continue}if(dt(e,l)){let t=l+6;if(t<u){let n=e.charCodeAt(t);if(R(n)||n===123||n===47&&(e.charCodeAt(t+1)===47||e.charCodeAt(t+1)===42)){let n=V(e,t,u);if(ft(e,n)){i=!0,a=!0;let r=n+7;if(r>=u||!B(e.charCodeAt(r))){l=t;continue}}if(e.charCodeAt(n)===123){let t=n+1;for(;t<u&&(t=V(e,t,u),e.charCodeAt(t)!==125);){let n=t;for(;t<u&&B(e.charCodeAt(t));)t++;let r=t-n;if(r===0)break;t=V(e,t,u);let o=!1;if(e.charCodeAt(t)===97&&e.charCodeAt(t+1)===115){o=!0;let n=t+2;if(n<u&&!B(e.charCodeAt(n))){t=V(e,n,u);let r=t;for(;t<u&&B(e.charCodeAt(t));)t++;t-r===7&&ft(e,r)&&(i=!0,a=!0)}}if(!o&&r===7&&ft(e,n)&&(i=!0,a=!0),e.charCodeAt(t)===44){t++;continue}if(e.charCodeAt(t)===125)break;t++}}else(W(e,n,`async`)||W(e,n,`function`)||W(e,n,`class`))&&(a=!0)}}}l++}return{directives:t,topLevelUseClient:n,topLevelUseServer:r,hasDefaultExport:i,hasComponentExport:a,importSources:[...new Set(o)]}}function K(e,t,n){if(t>=n||!it(e.charCodeAt(t)))return null;let r=t+1;for(;r<n&&B(e.charCodeAt(r));)r++;return{name:e.slice(t,r),end:r}}function pt(e,t,n){let r=t;for(;r<n;){let t=e.charCodeAt(r);if(t===32||t===9){r++;continue}if(t===59)return r+1;break}return t}function mt(e,t,n){let r=[],i=t+1;for(;;){if(i=V(e,i,n),i>=n)return null;if(e.charCodeAt(i)===125)return{named:r,end:i+1};let t=!1;if(W(e,i,`type`)){let r=V(e,i+4,n),a=e.charCodeAt(r);(a===39||a===34||K(e,r,n)!==null)&&!W(e,r,`as`)&&(t=!0,i=r)}let a,o=e.charCodeAt(i);if(o===39||o===34){let t=U(e,i,n,o);a=e.slice(i+1,t-1),i=t}else{let t=K(e,i,n);if(!t)return null;a=t.name,i=t.end}i=V(e,i,n);let s=a;if(W(e,i,`as`)){i=V(e,i+2,n);let t=K(e,i,n);if(!t)return null;s=t.name,i=V(e,t.end,n)}r.push({imported:a,local:s,typeOnly:t});let c=e.charCodeAt(i);if(c===44){i++;continue}return c===125?{named:r,end:i+1}:null}}function ht(e,t,n){let r=V(e,t+6,n);if(r>=n)return null;let i=e.charCodeAt(r);if(i===40||i===46)return null;if(i===39||i===34){let i=lt(e,r,n);return i?{start:t,end:pt(e,i.end,n),source:i.source,typeOnly:!1,sideEffectOnly:!0,defaultBinding:null,namespaceBinding:null,named:[]}:null}let a=!1;if(W(e,r,`type`)){let t=V(e,r+4,n);!W(e,t,`from`)&&e.charCodeAt(t)!==44&&(a=!0,r=t)}let o=null,s=null,c=[],l=e.charCodeAt(r);if(l!==123&&l!==42){let t=K(e,r,n);if(!t)return null;o=t.name,r=V(e,t.end,n),e.charCodeAt(r)===44?(r=V(e,r+1,n),l=e.charCodeAt(r)):l=-1}if(l===42){if(r=V(e,r+1,n),!W(e,r,`as`))return null;r=V(e,r+2,n);let t=K(e,r,n);if(!t)return null;s=t.name,r=t.end}else if(l===123){let t=mt(e,r,n);if(!t)return null;c=t.named,r=t.end}if(r=V(e,r,n),!W(e,r,`from`))return null;let u=lt(e,r+4,n);return u?{start:t,end:pt(e,u.end,n),source:u.source,typeOnly:a,sideEffectOnly:!1,defaultBinding:o,namespaceBinding:s,named:c}:null}function gt(e){let t=[],n=0,r=e.length;for(;n<r;){let i=q(e,n,r);if(i!==-1){n=i;continue}if(W(e,n,`import`)){let i=ht(e,n,r);if(i){t.push(i),n=i.end;continue}n+=6;continue}n++}return t}function _t(e){let t=new Set,n=0,r=e.length;for(;n<r;){let i=q(e,n,r);if(i!==-1){n=i;continue}if(!W(e,n,`export`)){n++;continue}let a=V(e,n+6,r);if(W(e,a,`type`)||W(e,a,`interface`)){n=a+1;continue}if(e.charCodeAt(a)===42){let i=V(e,a+1,r);if(W(e,i,`as`)){i=V(e,i+2,r);let a=K(e,i,r);a&&t.add(a.name),n=a?.end??i+1}else n=a+1;continue}if(W(e,a,`default`)){t.add(`default`),n=a+7;continue}if(e.charCodeAt(a)===123){let i=vt(e,a,r),o=e.slice(a+1,i-1);for(let e of o.split(`,`)){let n=e.trim();if(!n||n.startsWith(`type `)||n.startsWith(`typeof `))continue;let r=(n.split(/\s+as\s+/).at(-1)??``).trim();r!==``&&r!==`type`&&t.add(r)}n=i;continue}if(W(e,a,`async`)&&(a=V(e,a+5,r)),W(e,a,`function`)||W(e,a,`class`)||W(e,a,`const`)||W(e,a,`let`)||W(e,a,`var`)){let i=W(e,a,`function`)?8:W(e,a,`class`)||W(e,a,`const`)?5:3,o=V(e,a+i,r);e.charCodeAt(o)===42&&(o=V(e,o+1,r));let s=K(e,o,r);s&&t.add(s.name),n=s?.end??o+1;continue}n++}return[...t]}function vt(e,t,n){let r=t,i=0;for(;r<n;){let t=e.charCodeAt(r);if(t===39||t===34||t===96){r=U(e,r,n,t);continue}if(t===47&&e.charCodeAt(r+1)===47){r=H(e,r,n);continue}if(t===47&&e.charCodeAt(r+1)===42){r=ot(e,r,n);continue}if(t===123){i++,r++;continue}if(t===125){if(i--,r++,i===0)return r;continue}r++}return r}function yt(e){return G(e).hasDefaultExport}function bt(e){return e===40||e===91||e===123||e===44||e===59||e===61||e===58||e===63||e===33||e===43||e===45||e===42||e===37||e===38||e===124||e===94||e===126||e===60||e===62}function xt(e,t){let n=t-1;for(;n>=0;){let t=e.charCodeAt(n);if(R(t)){n--;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===42){for(n-=2;n>=1;){if(e.charCodeAt(n)===42&&e.charCodeAt(n-1)===47){n-=2;break}n--}if(n<0)return;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===47){n-=2;continue}let r=n;for(;r>=0&&e.charCodeAt(r)!==10&&e.charCodeAt(r)!==13;)r--;let i=r+1;for(;i<n&&(e.charCodeAt(i)===32||e.charCodeAt(i)===9);)i++;if(i<n&&e.charCodeAt(i)===47&&e.charCodeAt(i+1)===47){n=i-1;continue}break}if(n<0||!B(e.charCodeAt(n)))return;let r=n;for(;n>=0&&B(e.charCodeAt(n));)n--;return e.slice(n+1,r+1)}function St(e,t){let n=t-1;for(;n>=0;){let t=e.charCodeAt(n);if(R(t)){n--;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===42){for(n-=2;n>=1;){if(e.charCodeAt(n)===42&&e.charCodeAt(n-1)===47){n-=2;break}n--}if(n<0)return-1;continue}if(n>=1&&t===47&&e.charCodeAt(n-1)===47){n-=2;continue}let r=n;for(;r>=0&&e.charCodeAt(r)!==10&&e.charCodeAt(r)!==13;)r--;let i=r+1;for(;i<n&&(e.charCodeAt(i)===32||e.charCodeAt(i)===9);)i++;if(i<n&&e.charCodeAt(i)===47&&e.charCodeAt(i+1)===47){n=i-1;continue}return t}return-1}function Ct(e,t){let n=St(e,t);if(n===-1||bt(n))return!0;let r=xt(e,t);return r!=null&&r!==``&&tt.has(r)}const wt=new Set([`return`,`throw`,`case`,`default`,`else`,`do`,`typeof`,`void`,`yield`,`await`,`delete`]);function Tt(e,t){let n=St(e,t);if(n===-1)return!0;if(B(n)||n>=48&&n<=57){let n=xt(e,t);return n!=null&&n!==``&&wt.has(n)}return n!==41&&n!==93&&n!==125}function Et(e,t,n){if(!Tt(e,t))return-1;let r=e.charCodeAt(t+1);if(r!==47&&r!==46&&r!==62&&!it(r))return-1;let i=st(e,t,n);return i<n&&e.charCodeAt(i)===62&&i++,i>t&&e.charCodeAt(i-1)===62?i:-1}function Dt(e,t,n){t++;let r=!1;for(;t<n;){let i=e.charCodeAt(t);if(i===92){t+=2;continue}if(r){i===93&&(r=!1),t++;continue}if(i===91){r=!0,t++;continue}if(i===47){for(t++;t<n&&B(e.charCodeAt(t));)t++;return t}if(z(i))return t;t++}return t}function q(e,t,n){if(t>=n)return-1;let r=e.charCodeAt(t);if(R(r))return t+1;if(r===47&&e.charCodeAt(t+1)===47)return H(e,t,n);if(r===47&&e.charCodeAt(t+1)===42)return ot(e,t,n);if(r===39||r===34||r===96)return U(e,t,n,r);if(r===47&&e.charCodeAt(t+1)!==47&&e.charCodeAt(t+1)!==42&&Ct(e,t))return Dt(e,t,n);if(r===60){let r=Et(e,t,n);if(r!==-1)return r}return-1}function Ot(e,t){let n=e.charCodeAt(t);return R(n)?!0:n===47&&(e.charCodeAt(t+1)===47||e.charCodeAt(t+1)===42)}function kt(e){let t=e.length,n=0;for(;n<t;){let r=q(e,n,t);if(r!==-1){n=r;continue}if(W(e,n,`export`)){let r=V(e,n+6,t);if(!W(e,r,`default`)){n++;continue}let i=V(e,r+7,t),a=i,o=null;if(W(e,a,`async`)){let n=V(e,a+5,t);W(e,n,`function`)&&(a=n)}if(W(e,a,`function`)||W(e,a,`class`)){let n=W(e,a,`function`)?8:5,r=V(e,a+n,t);e.charCodeAt(r)===42&&(r=V(e,r+1,t));let i=K(e,r,t);i&&(o=i.name)}let s=Mt(e,i,t),c=pt(e,s,t);return{exportStart:n,valueStart:i,valueEnd:s,statementEnd:c,bindingName:o}}n++}return null}function At(e,t,n){if(t>=n)return!1;let r=e.charCodeAt(t),i=t+1<n?e.charCodeAt(t+1):-1;return r===46||r===63&&i===46||r===40||r===91||r===96||r===61&&i===62||r===43||r===45||r===42||r===47||r===37||r===38||r===124||r===94||r===60||r===62||r===61||r===33||r===63||r===58||r===44||r===126||W(e,t,`instanceof`)||W(e,t,`in`)||W(e,t,`of`)||W(e,t,`as`)}const jt=new Set([`typeof`,`void`,`delete`,`await`,`yield`,`new`]);function Mt(e,t,n){let r=t,i=0,a=0,o=0,s=!1;for(;r<n;){let t=e.charCodeAt(r);if(t===39||t===34||t===96){r=U(e,r,n,t),s=!0;continue}if(t===47&&e.charCodeAt(r+1)===47){r=H(e,r,n);continue}if(t===47&&e.charCodeAt(r+1)===42){r=ot(e,r,n);continue}if(t===47&&e.charCodeAt(r+1)!==47&&e.charCodeAt(r+1)!==42&&Ct(e,r)){r=Dt(e,r,n),s=!0;continue}if(t===60&&i===0&&a===0&&o===0){let t=Et(e,r,n);if(t!==-1){r=t,s=!0;continue}}if(t===40){i++,s=!1,r++;continue}if(t===41){i=Math.max(0,i-1),s=!0,r++;continue}if(t===123){a++,s=!1,r++;continue}if(t===125){if(a=Math.max(0,a-1),s=!0,r++,i===0&&a===0&&o===0)return r;continue}if(t===91){o++,s=!1,r++;continue}if(t===93){o=Math.max(0,o-1),s=!0,r++;continue}if(i===0&&a===0&&o===0){if(t===59)return r;if(z(t)){let t=V(e,r+1,n);if(!s||At(e,t,n)){r++;continue}return r}}if(it(t)){let t=K(e,r,n);if(t){s=!jt.has(t.name),r=t.end;continue}}if(t>=48&&t<=57){for(s=!0,r++;r<n;){let t=e.charCodeAt(r);if(t>=48&&t<=57||t===46||t===110||t===101||t===69){r++;continue}break}continue}if(t===61&&e.charCodeAt(r+1)===62){s=!1,r+=2;continue}if(t===46||t===44||t===58||t===63||t===61||t===43||t===45||t===42||t===47||t===37||t===38||t===124||t===94||t===33||t===126||t===60||t===62){s=!1,r++;continue}r++}return r}function Nt(e,t){let n=kt(e);if(n==null||n.bindingName!=null)return null;let r=`const ${t} = ${e.slice(n.valueStart,n.valueEnd).trimEnd()};\nexport default ${t}${e.slice(n.statementEnd)}`;return e.slice(0,n.exportStart)+r}const Pt=new Set([`node_modules`,`.git`,`.cache`,`dist`]);function Ft(e,t){let n=new Set,r=e=>{if(!D.existsSync(e))return;let i=D.readdirSync(e,{withFileTypes:!0});for(let a of i){let i=k.join(e,a.name);if(a.isDirectory()){if(Pt.has(a.name))continue;r(i)}else if(a.isFile()&&v.test(a.name)){if(n.has(i))continue;n.add(i),t(i)}}};for(let t of e)t&&D.existsSync(t)&&r(t)}function It(e){let t=[];return Ft(e,e=>{t.push(e)}),t}function Lt(e,t=[]){let n=[e],r=k.resolve(e);for(let e of t){if(!e)continue;let t=k.resolve(e);if(t===r)continue;let i=k.relative(r,t);if(!(i===``||!i.startsWith(`..`)&&!k.isAbsolute(i)))try{D.statSync(e).isDirectory()&&n.push(e)}catch{}}return n}const Rt=new Set(T);function zt(e){return Rt.has(e)}function Bt(e){for(let t of e.importSources)if(t.startsWith(`node:`)||zt(t))return!0;return!1}function Vt(e,t=Rt){let n=[];for(let r of e)!r.startsWith(`.`)&&!r.startsWith(`/`)&&!r.startsWith(`@/`)&&!r.startsWith(`node:`)&&!t.has(r)&&n.push(r);return[...new Set(n)]}function Ht(e){let t=[];for(let n of e)(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`@/`))&&t.push(n);return t}function J(e){try{return D.realpathSync(e)}catch{return k.resolve(e)}}function Ut(e,t){e.delete(t);try{e.delete(D.realpathSync(t))}catch{e.delete(k.resolve(t))}}function Wt(e,t){let n=[];for(let r of It(e))try{t.get(r).directives.hasUseClient&&n.push(r)}catch{}return n}var Gt=class{cache=new Map;get(e,t){let n=J(e),r=this.cache.get(n);if(t!==void 0){if(r?.source===t)return r.analysis}else if(r){let e=this.readMtimeMs(n);if(e>=0&&r.mtimeMs===e)return r.analysis}t??=D.readFileSync(n,`utf-8`);let i=this.readMtimeMs(n),a=G(t);return this.cache.set(n,{mtimeMs:i,source:t,analysis:a}),a}getSource(e){return this.get(e),this.cache.get(J(e)).source}invalidate(e){Ut(this.cache,e)}clear(){this.cache.clear()}readMtimeMs(e){try{return D.statSync(e).mtimeMs}catch{return-1}}},Kt=class extends Error{status;statusText;bodyPreview;constructor(e,t,n){super(`HTTP ${e}: ${t}`),this.name=`HttpError`,this.status=e,this.statusText=t,this.bodyPreview=n}};async function qt(e){if(!e.ok){let t;try{t=await e.text()}catch{t=`<unable to read response body>`}let n=t.length>200?`${t.slice(0,200)}...`:t;throw new Kt(e.status,e.statusText,n)}}var Jt=class{errorCount=0;maxErrors;resetTimeout;resetTimer=null;lastError=null;constructor(e={}){this.maxErrors=e.maxErrors??5,this.resetTimeout=e.resetTimeout??3e4}recordError(e){this.errorCount++,this.lastError=e,this.resetTimer=ue(this.resetTimer),this.resetTimer=setTimeout(()=>{this.reset()},this.resetTimeout),this.errorCount>=this.maxErrors&&this.handleMaxErrorsReached()}reset(){this.errorCount=0,this.lastError=null,this.resetTimer=ue(this.resetTimer)}getErrorCount(){return this.errorCount}getLastError(){return this.lastError}hasReachedMaxErrors(){return this.errorCount>=this.maxErrors}handleMaxErrorsReached(){console.error(`[rari] HMR: Maximum error count (${this.maxErrors}) reached. Consider restarting the dev server if issues persist.`)}dispose(){this.reset()}};function Yt(e,t,n){let r=new Set(t),i=new Set,a=[...t];for(;a.length>0;){let t=a.pop();if(t==null)break;let o=e.get(t);if(o)for(let e of o)r.has(e)||(r.add(e),a.push(e),(n==null||n(e))&&i.add(e))}return i}function Xt(e){return a(e)&&e.success===!0&&typeof e.componentId==`string`&&typeof e.filePath==`string`&&typeof e.relativePath==`string`}function Zt(e){return a(e)&&e.success===!1&&typeof e.filePath==`string`&&typeof e.relativePath==`string`&&e.error instanceof Error}function Qt(e){return e===`info`||e===`success`||e===`warning`||e===`error`}var $t=class{serverComponentBuilder;rustServerUrl;pendingUpdates=new Map;pendingFiles=new Set;batchTimer=null;DEBOUNCE_DELAY=200;errorHandler;logBatch=[];logBatchTimer=null;LOG_BATCH_DELAY=500;constructor(e,t=F()){this.serverComponentBuilder=e,this.rustServerUrl=`http://localhost:${t}`,this.errorHandler=new Jt({maxErrors:5,resetTimeout:3e4})}getErrorCount(){return this.errorHandler.getErrorCount()}async handleClientComponentUpdate(e,t){let n=k.relative(A.cwd(),e);try{let r=t.moduleGraph.getModuleById(e);r?(t.moduleGraph.invalidateModule(r),this.errorHandler.reset()):this.queueLog(`warning`,`Client component module not found in graph: ${n}`)}catch(e){let t=e instanceof Error?e.message:String(e);this.queueLog(`error`,`Failed to update client component: ${n} - ${t}`),this.errorHandler.recordError(e instanceof Error?e:Error(t))}return Promise.resolve()}async handleServerComponentUpdate(e,t){this.pendingFiles.add(e);let n=this.pendingUpdates.get(e);return n&&(clearTimeout(n),this.pendingUpdates.delete(e)),this.batchTimer&&clearTimeout(this.batchTimer),this.batchTimer=setTimeout(()=>{(async()=>{let e=[...this.pendingFiles];if(this.pendingFiles.clear(),this.batchTimer=null,e.length===0)return;let n=this.collectDependentPageComponents(e);for(let e of n)this.serverComponentBuilder.invalidateBuildCacheFor(e);let r=[...e,...n],i=await Promise.allSettled(r.map(async e=>{let t=k.relative(A.cwd(),e);try{let n=await this.serverComponentBuilder.rebuildComponent(e);if(!n.success)throw Error(n.error!=null&&n.error!==``?n.error:`Build failed`);return await this.notifyRustServer(n.componentId,n.bundlePath),{success:!0,componentId:n.componentId,filePath:e,relativePath:t}}catch(n){return{success:!1,filePath:e,relativePath:t,error:n instanceof Error?n:Error(String(n))}}})),a=[],o=[];if(i.forEach(e=>{e.status===`fulfilled`&&Xt(e.value)?a.push(e.value):e.status===`fulfilled`&&Zt(e.value)?o.push(e.value):e.status===`rejected`&&o.push({filePath:``,relativePath:`unknown`,error:Error(String(e.reason))})}),a.length>0){let e=Date.now();a.forEach(({componentId:n})=>{t.hot.send(`rari:server-component-updated`,{id:n,t:e})}),this.errorHandler.reset(),t.ws.send({type:`custom`,event:`rari:hmr-error-cleared`,data:{t:e}})}if(o.length>0){let e=Date.now();o.forEach(({relativePath:n,error:r})=>{let i=r.message,a=(r.stack!=null&&r.stack!==``?r.stack:``).substring(0,500);this.queueLog(`error`,`Failed to rebuild: ${n} - ${i}`),this.errorHandler.recordError(r),t.ws.send({type:`custom`,event:`rari:hmr-error`,data:{msg:i,stack:a,file:n,t:e,count:this.errorHandler.getErrorCount(),max:5}})}),this.errorHandler.hasReachedMaxErrors()&&this.queueLog(`error`,`Maximum error count reached (${this.errorHandler.getErrorCount()}). Consider restarting the dev server if issues persist.`)}})()},this.DEBOUNCE_DELAY),Promise.resolve()}async notifyRustServer(e,t){try{let n=await fetch(`${this.rustServerUrl}/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`reload-component`,component_id:e,bundle_path:t})});await qt(n);let r=await n.text(),i;try{i=JSON.parse(r)}catch(e){throw Error(`Failed to parse server response (status ${n.status}): ${e instanceof Error?e.message:String(e)}. Response body: ${r.substring(0,200)}${r.length>200?`...`:``}`)}if(!a(i))throw Error(`Invalid server response (status ${n.status}): expected object, got ${typeof i}. Response body: ${r.substring(0,200)}${r.length>200?`...`:``}`);if(i.success!==!0){let e=typeof i.message==`string`&&i.message!==``?i.message:typeof i.error==`string`&&i.error!==``?i.error:`Component reload failed`;throw Error(e)}}catch(e){throw console.error(`[rari] HMR: Failed to notify Rust server:`,e),e}}collectDependentPageComponents(e){return[...Yt(this.serverComponentBuilder.getImportGraph(),e,e=>e.includes(`/app/`)||e.includes(`\\app\\`))]}detectComponentType(e){try{return this.serverComponentBuilder.getModuleAnalysis(e).topLevelUseClient?`client`:`server`}catch{return`unknown`}}queueLog(e,t){this.logBatch.push({type:e,message:t,timestamp:Date.now()}),this.logBatchTimer&&clearTimeout(this.logBatchTimer),this.logBatchTimer=setTimeout(()=>{this.flushLogs()},this.LOG_BATCH_DELAY)}flushLogs(){if(this.logBatch.length===0)return;let e=this.logBatch.reduce((e,t)=>(e[t.type]??=[],e[t.type].push(t),e),{});for(let[t,n]of Object.entries(e))if(Qt(t))if(n.length===1){let e=n[0];this.outputLog(t,e.message)}else{let e=n.map(e=>e.message).join(`
|
|
48
|
+
• `);this.outputLog(t,`${n.length} updates:\n • ${e}`)}this.logBatch=[],this.logBatchTimer=null}outputLog(e,t){let n=`[rari] HMR:`;switch(e){case`success`:console.warn(`\x1B[32m${n}\x1B[0m ${t}`);break;case`warning`:console.warn(`\x1B[33m${n}\x1B[0m ${t}`);break;case`error`:console.error(`\x1B[31m${n}\x1B[0m ${t}`);break;default:console.warn(`${n} ${t}`)}}dispose(){this.logBatchTimer&&(clearTimeout(this.logBatchTimer),this.flushLogs()),this.batchTimer&&=(clearTimeout(this.batchTimer),null);for(let e of this.pendingUpdates.values())clearTimeout(e);this.pendingUpdates.clear(),this.pendingFiles.clear(),this.errorHandler.dispose()}};function en(e){let t=e.replace(x,`/`);return t===`rari/mdx/registry`||t.startsWith(`rari/mdx/registry?`)?!0:t.endsWith(`/mdx/registry.ts`)||t.endsWith(`/mdx/registry.mts`)||t.endsWith(`/mdx/registry.mjs`)||t.endsWith(`/mdx/registry.js`)||t.endsWith(`/mdx/registry`)?t.includes(`/node_modules/rari/`)||t.includes(`/packages/rari/`):!1}function tn(e,t){let n=e=>{if(D.existsSync(e))for(let r of D.readdirSync(e,{withFileTypes:!0})){let i=k.join(e,r.name);if(r.isDirectory()){if(r.name===`node_modules`||r.name===`.git`||r.name===`dist`)continue;n(i)}else r.isFile()&&r.name.endsWith(`.mdx`)&&t(i)}};for(let t of e)t&&D.existsSync(t)&&n(t)}function nn(e){let t=new Set;return tn(e,e=>{try{let n=D.readFileSync(e,`utf-8`);for(let e of w(n))t.add(e)}catch{}}),t}function rn(e,t){try{if(t.get(e).hasDefaultExport)return k.basename(e,k.extname(e));let n=t.getSource(e).match(te);if(n?.[1]!=null&&n[1]!==``)return n[1]}catch{}return k.basename(e,k.extname(e))}function an(e){let t=nn(e.contentDirs.map(t=>k.join(e.projectRoot,t)));if(t.size===0)return[];let n=Wt(e.componentScanDirs,e.cache),r=[],i=new Set;for(let a of n){let n=rn(a,e.cache);if(n==null||n===``||!t.has(n))continue;let o=Qe(a,e.projectRoot).replace(x,`/`),s=o.startsWith(`/`)?o:`/${o}`,c=n.replace(/[^\w$]/g,`_`);i.has(c)&&(c=`${c}_${r.length}`),i.add(c),r.push({name:n,binding:c,importPath:s,moduleId:o,client:!0})}return r.sort((e,t)=>e.name.localeCompare(t.name))}function on(e){let t=cn(e.projectRoot,e.mdxOptions),n=e.srcDir??k.join(e.projectRoot,`src`),r=ln(e.projectRoot,t.componentsDir,Lt(n,Object.values(e.alias??{})));return an({projectRoot:e.projectRoot,componentsDir:t.componentsDir,contentDirs:t.contentDirs,cache:e.cache,componentScanDirs:r})}function sn(e,t={}){let n=t.importStyle??`root-absolute`,r=t.mode??`vite`;return e.length===0?`import { defineMdxComponents } from 'rari/mdx/define'
|
|
49
49
|
|
|
50
50
|
export const getMDXComponents = defineMdxComponents([])
|
|
51
51
|
`:r===`production`?`import { defineMdxComponents } from 'rari/mdx/define'
|
|
@@ -62,86 +62,77 @@ export const getMDXComponents = defineMdxComponents([
|
|
|
62
62
|
${e.map(e=>` { name: ${JSON.stringify(e.name)}, component: ${e.binding}, id: ${JSON.stringify(e.moduleId)}, client: ${e.client} }`).join(`,
|
|
63
63
|
`)},
|
|
64
64
|
])
|
|
65
|
-
`}function
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
`}function cn(e,t){return{componentsDir:t?.componentsDir??`src/components`,contentDirs:t?.contentDirs??[`public/content`,`content`]}}function ln(e,t,n){let r=k.join(e,t),i=new Set(n);return D.existsSync(r)&&i.add(r),[...i]}function un(e,t,n){if(n.length===0)return e;let r=gt(e).find(e=>e.source===t&&!e.typeOnly&&!e.sideEffectOnly),i=new Map;if(r!=null)for(let e of r.named)e.typeOnly||i.set(e.imported,e.local);for(let e of n)i.has(e)||i.set(e,e);let a=[...i.entries()].map(([e,t])=>e===t?e:`${e} as ${t}`);if(r?.namespaceBinding!=null||r?.named.some(e=>e.typeOnly)){let i=n.filter(e=>!r.named.some(t=>!t.typeOnly&&t.imported===e));return i.length===0?e:`${`import { ${[...new Set(i)].join(`, `)} } from ${JSON.stringify(t)};`}\n${e}`}let o=`import ${r?.defaultBinding==null?``:`${r.defaultBinding}, `}{ ${a.join(`, `)} } from ${JSON.stringify(t)};`;return r==null?`${o}\n\n${e}`:e.slice(0,r.start)+o+e.slice(r.end)}function dn(e,t){return`const ${e} = createClientModuleProxy(${JSON.stringify(t)});`}function fn(e,t,n){return`const ${e} = registerClientReference(
|
|
66
|
+
function() {
|
|
67
|
+
throw new Error("Attempted to call ${e} from the server but it's on the client. It can only be rendered as a Component or passed to props of a Client Component.");
|
|
68
|
+
},
|
|
69
|
+
${JSON.stringify(t)},
|
|
70
|
+
${JSON.stringify(n)}
|
|
71
|
+
);`}function pn(e,t){let n=[],r=new Set;e.namespaceBinding!=null&&(r.add(`createClientModuleProxy`),n.push(dn(e.namespaceBinding,t))),e.defaultBinding!=null&&(r.add(`registerClientReference`),n.push(fn(e.defaultBinding,t,`default`)));for(let i of e.named)i.typeOnly||(r.add(`registerClientReference`),n.push(fn(i.local,t,i.imported)));return n.length===0?{code:``,helpers:[]}:{code:n.join(`
|
|
72
|
+
`),helpers:[...r]}}function mn(e,t){let n=t.length>0?t:[`default`],r=[`import { registerClientReference } from ${JSON.stringify(`react-server-dom-rari/server`)};`];for(let t of n)t==="default"?r.push(`export default registerClientReference(null, ${JSON.stringify(e)}, "default");`):r.push(`export const ${t} = registerClientReference(null, ${JSON.stringify(e)}, ${JSON.stringify(t)});`);return`${r.join(`
|
|
73
|
+
`)}\n`}function hn(e,t,n){let r=n==="default"?`if (Component && typeof Component === 'object' && Component.default) {
|
|
72
74
|
Component = Component.default;
|
|
73
|
-
}
|
|
75
|
+
}`:`if (Component && typeof Component === 'object') {
|
|
76
|
+
Component = Component[${JSON.stringify(n)}] ?? Component.default?.[${JSON.stringify(n)}];
|
|
77
|
+
}`;return`// Component reference: ${t}#${n}
|
|
78
|
+
const ${e} = (props) => {
|
|
79
|
+
let Component = globalThis['~clientComponents']?.[${JSON.stringify(t)}]?.component
|
|
80
|
+
|| globalThis[${JSON.stringify(t)}];
|
|
74
81
|
|
|
75
|
-
|
|
76
|
-
throw new Error('Component components/${i} not loaded');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (typeof Component !== 'function') {
|
|
80
|
-
throw new Error('Component components/${i} is not a function, got: ' + typeof Component);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return Component(props);
|
|
84
|
-
}`;t.push({original:e,replacement:s})}}continue}let o=this.options.alias;for(let[e,t]of Object.entries(o))if(i.startsWith(`${e}/`)||i===e){let n=i.slice(e.length).replace(/^\/+/,``);a=j.join(t,n);break}if(a!=null&&a!==``){let n=Xt.exec(a);if(n){let i=n[1],o=j.isAbsolute(a)?a:j.resolve(this.projectRoot,a),s=[o,`${o}.tsx`,`${o}.ts`,`${o}.jsx`,`${o}.js`],c=!1,l=o;for(let e of s)if(k.existsSync(e)){l=e,this.isClientComponent(e)&&(c=!0);break}if(!c)continue;let u=this.getComponentReferenceId(l),d=`// Component reference: ${i}
|
|
85
|
-
const ${r} = (props) => {
|
|
86
|
-
let Component = globalThis['~clientComponents']?.['${u}']?.component
|
|
87
|
-
|| globalThis['${u}'];
|
|
88
|
-
|
|
89
|
-
if (Component && typeof Component === 'object' && Component.default) {
|
|
90
|
-
Component = Component.default;
|
|
91
|
-
}
|
|
82
|
+
${r}
|
|
92
83
|
|
|
93
84
|
if (!Component) {
|
|
94
|
-
throw new Error('Component ${
|
|
85
|
+
throw new Error('Component ${t}#${n} not loaded');
|
|
95
86
|
}
|
|
96
87
|
|
|
97
88
|
if (typeof Component !== 'function') {
|
|
98
|
-
throw new Error('Component ${
|
|
89
|
+
throw new Error('Component ${t}#${n} is not a function, got: ' + typeof Component);
|
|
99
90
|
}
|
|
100
91
|
|
|
101
92
|
return Component(props);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
`,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=l.get(t)?.actionId??this.getComponentId(t);return{code:this.generateServerActionRuntimeModule(t,n),moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,t)=>{if(!i)return null;if(e.startsWith(`file://`)){let t=e.replace(h,``);return k.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null,r=this.options.alias;n=w(e,r,this.projectRoot);let a=t?.startsWith(`\0`)?o:t!=null&&t!==``?j.dirname(t):o;if((n==null||n===``)&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=j.resolve(a,e)),n==null||n===``||a.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(k.existsSync(t)&&k.statSync(t).isFile()){if(this.isClientComponent(t)||this.isServerActionFile(t))return null;let e=j.join(this.projectRoot,`src`);if(!t.startsWith(e))return null;let n=this.getComponentId(t),r=j.join(this.options.outDir,this.options.rscDir,`${n}.js`);if(k.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:k.readFileSync(t,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let t=w(e,this.options.alias,this.projectRoot);if(t==null||t===``)return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let n=t+e;if(k.existsSync(n)&&k.statSync(n).isFile()){if(this.isServerActionFile(n)){let e=this.getComponentId(n);return l.set(n,{actionId:e,hasDefaultExport:this.moduleAnalysisCache.get(n).hasDefaultExport}),{id:`\0server-action:${n}`}}return n}}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=j.join(t,`index${e}`);if(k.existsSync(n)){if(this.isServerActionFile(n)){let e=this.getComponentId(n);return l.set(n,{actionId:e,hasDefaultExport:this.moduleAnalysisCache.get(n).hasDefaultExport}),{id:`\0server-action:${n}`}}return n}}return t}},{name:`resolve-rari-proxy`,resolveId:e=>{if(s&&e===`rari`){let e=j.join(an,`proxy/RariResponse.mjs`);if(k.existsSync(e))return e;let t=j.join(Z,`src/proxy/http/response.ts`);if(k.existsSync(t))return t}return null}},{name:`css-modules`,resolveId:(e,t)=>{if(e.endsWith(`.module.css`)){let n=t!=null&&t!==``&&!t.startsWith(`\0`)?j.dirname(t):o,r=j.resolve(n,e);if(k.existsSync(r))return{id:`\0css-module:${r}`}}return null},load:async e=>{if(!e.startsWith(`\0css-module:`))return null;let t=e.slice(12);try{let e=await pn(),n=k.readFileSync(t),r=e({filename:j.relative(this.projectRoot,t),code:n,cssModules:{pattern:en}});a&&a.push(new TextDecoder().decode(r.code));let i={};if(r.exports)for(let[e,t]of Object.entries(r.exports))i[e]=t.name;return{code:`export default ${JSON.stringify(i)}`,moduleType:`js`}}catch(t){throw Error(`[rari] Failed to process CSS module ${e}: ${t instanceof Error?t.message:String(t)}`)}}},{name:`externalize-deps`,resolveId:(e,t)=>{if(e.startsWith(`\0`))return null;if(e.startsWith(`node:`)||J(e)||[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`rari/image`].includes(e)||e in{"rari/runtime/cache-wrapper":`node_modules/rari/dist/runtime/cache-wrapper.mjs`,"react-server-dom-rari/server":`node_modules/rari/dist/runtime/rsc-references.mjs`})return{id:e,external:!0};if(e===`rari`||w(e,this.options.alias,this.projectRoot)!=null)return null;if(!e.startsWith(`.`)&&!e.startsWith(`/`)){if(nn(this.projectRoot,e))return{id:e,external:!0};let n=[t!=null&&t!==``&&!t.startsWith(`\0`)?t:null,r].filter(e=>!!e);for(let t of n)try{return{id:D(t).resolve(e)}}catch{try{return{id:N(import.meta.resolve(e,P(t).href))}}catch{}}return null}return null}},this.createRolldownModuleInfoPlugin(r),{name:`use-cache`,transform:async(e,t)=>{if(!this.options.experimental?.useCache&&!this.options.experimental?.useCacheRemote)return null;let n=await Gt();return n?n(e,t,{hashSalt:`${this.useCacheBuildId??`development`}:rari-use-cache-v1`}):null}}]}async buildComponentCodeOnly(e){let t=await k.promises.readFile(e,`utf-8`),n=this.transformClientImports(t,e),r=this.isPageComponent(e),i=r?this.transformComponentImportsToGlobal(n):n,a=j.extname(e),o;o=a===`.tsx`?`tsx`:a===`.ts`?`ts`:a===`.jsx`?`jsx`:`js`;let s=`\0virtual:${e}`,c=await I({input:s,platform:`node`,write:!1,external:[$t,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${o}`]:o},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(M.env.NODE_ENV!=null&&M.env.NODE_ENV!==``?M.env.NODE_ENV:`production`),...this.options.define}},plugins:this.createBuildPlugins(s,i,o,e,r,[])});if(c.output.length===0)throw Error(`No output generated from Rolldown`);let l=c.output.find(e=>e.type===`chunk`&&e.isEntry);if(l?.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let u=l.code;return u=`// Built: ${new Date().toISOString()}\n${u}`,u}async buildComponentBatch(e,t,n){let r=0,i=0,a=[];if(await new Promise(o=>{let s=()=>{for(;r<n&&i<e.length;){let[n,c]=e[i++],l=j.relative(this.projectRoot,n),u=this.getComponentId(n),d=j.join(this.options.rscDir,`${u}.js`),f=j.join(this.options.outDir,d);r++,(async()=>{try{let e=j.dirname(f);await k.promises.mkdir(e,{recursive:!0});let r=await this.buildSingleComponent(n,f),i=await this.writeComponentCssAsset(u,r.css),a=P(j.resolve(this.projectRoot,f)).href;t.components[u]={id:u,filePath:n,relativePath:l,bundlePath:d,moduleSpecifier:a,dependencies:[...c.dependencies],hasNodeImports:c.hasNodeImports,css:i}}catch(e){a.push(e instanceof Error?e:Error(String(e)))}finally{r--,i>=e.length&&r===0?o():s()}})()}e.length===0&&o()};s()}),a.length>0)throw a[0]}async buildServerComponents(){let e=j.join(this.options.outDir,this.options.rscDir);await k.promises.mkdir(e,{recursive:!0});let t={components:{},buildTime:new Date().toISOString()},n=this.options.experimental?.useCache===!0||this.options.experimental?.useCacheRemote!=null,r=Math.min(8,Math.max(1,(await import(`node:os`)).cpus().length)),i=[...this.serverComponents.entries()].filter(([e])=>!this.isPageComponent(e)),a=[...this.serverComponents.entries()].filter(([e])=>this.isPageComponent(e)),s=[...this.serverActions.entries()];await Promise.all([this.buildComponentBatch(i,t,r),this.buildComponentBatch(s,t,r)]),await this.buildComponentBatch(a,t,r),n&&(this.useCacheBuildId=R(JSON.stringify(t.components),16),t.useCacheBuildId=this.useCacheBuildId);let c=j.join(this.options.outDir,this.options.manifestPath);await k.promises.writeFile(c,JSON.stringify(t),`utf-8`),await this.writeRouteCssEntries(t);let l={};this.options.csp&&(l.csp=this.options.csp),this.options.cacheControl&&(l.cacheControl=this.options.cacheControl),this.options.cache&&(l.cache=this.options.cache),this.options.action&&(l.action=this.options.action),this.options.jsPoolSize!=null&&(l.jsPoolSize=this.options.jsPoolSize),this.options.htmlLimitedBots!=null&&(l.htmlLimitedBots=this.options.htmlLimitedBots),(this.options.experimental?.useCacheRemote!=null||this.useCacheBuildId!=null&&this.useCacheBuildId!==``)&&(l.useCache={...this.options.experimental?.useCacheRemote?{remote:this.options.experimental.useCacheRemote}:{},...this.useCacheBuildId!=null&&this.useCacheBuildId!==``?{buildId:this.useCacheBuildId}:{}},!this.options.experimental?.useCache&&this.options.experimental?.useCacheRemote&&console.warn(`[server-build] experimental.useCacheRemote is set without experimental.useCache; the 'use cache' transform will still run because useCacheRemote is configured.`));let u=j.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(l).length===0)try{await k.promises.unlink(u)}catch(e){o(e)!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await k.promises.writeFile(u,JSON.stringify(l),`utf-8`);return t}async buildMdxRegistry(e){let n=It({projectRoot:this.projectRoot,mdxOptions:e,alias:this.options.alias,cache:this.moduleAnalysisCache}),r=j.join(this.options.outDir,this.options.manifestPath),i;if(k.existsSync(r)){let e=t(await k.promises.readFile(r,`utf-8`));i=e&&mn(e)?e:{components:{},buildTime:new Date().toISOString()}}else i={components:{},buildTime:new Date().toISOString()};i.mdxRegistry=n.map(e=>({name:e.name,id:e.moduleId,client:e.client})),await k.promises.writeFile(r,JSON.stringify(i),`utf-8`)}async buildSSRClientComponents(){let e=j.join(this.options.outDir,`ssr`);await k.promises.mkdir(e,{recursive:!0});let t=[...this.getClientComponentFiles()];for(let e of this.discoveredExternalClientComponents)if(!t.some(t=>t.filePath===e))try{let n=k.readFileSync(e,`utf-8`);t.push({filePath:e,code:n})}catch{}try{let e=cn();if(e!=null&&e!==``){let n=k.readFileSync(e,`utf-8`);t.push({filePath:e,code:n})}}catch{}if(t.length===0){let t={};await this.buildExternalClientComponents(t,new Map),await this.writeClientReferenceManifest(e,t);return}let n=new Map;for(let{filePath:e}of t){let t=dn(e,this.projectRoot);n.set(j.resolve(e),`file:///ssr/${t}.js`)}let r={},i=Math.min(8,Math.max(1,(await import(`node:os`)).cpus().length)),a=0,o=0;await new Promise(e=>{let s=()=>{for(;a<i&&o<t.length;){let{filePath:i,code:c}=t[o++],l=un(i,this.projectRoot),u=`ssr/${dn(i,this.projectRoot)}.js`,d=j.join(this.options.outDir,u);a++,(async()=>{try{let e=j.dirname(d);await k.promises.mkdir(e,{recursive:!0}),await this.buildSSRSingleClient(i,d,n);let t=this.extractExportNames(c);r[l]={id:l,filePath:i,bundlePath:u,exports:t}}catch(e){console.warn(`[rari] SSR build failed for ${l}:`,e instanceof Error?e.message:e)}finally{a--,o>=t.length&&a===0?e():s()}})()}t.length===0&&e()};s()}),await this.buildExternalClientComponents(r,n),await this.writeClientReferenceManifest(e,r)}async writeClientReferenceManifest(e,t){let n=j.join(e,`manifest.json`);await k.promises.writeFile(n,JSON.stringify(t),`utf-8`);let r={};for(let[e,n]of Object.entries(t))for(let t of n.exports){let i=`${e}#${t}`;r[i]={id:i,chunks:`/${n.bundlePath}`,name:t}}let i=j.join(this.options.outDir,`server`);await k.promises.mkdir(i,{recursive:!0});let a=j.join(i,`client-reference-manifest.json`);await k.promises.writeFile(a,JSON.stringify(r),`utf-8`)}resolveExternalClientSourcePath(e,t){let n=j.join(Z,...e);if(k.existsSync(n))return n;try{let e=N(import.meta.resolve(t));if(k.existsSync(e))return e}catch{}return null}async buildExternalClientComponents(e,t){for(let{componentId:n,devSourceSegments:r,publishedExport:i,exports:a}of rn){let o=this.resolveExternalClientSourcePath(r,i);if(o!=null&&o!==``)try{let r=`ssr/${`external_${R(n)}`}.js`,i=j.join(this.options.outDir,r);await k.promises.mkdir(j.dirname(i),{recursive:!0}),await this.buildSSRSingleClient(o,i,t),e[n]={id:n,filePath:o,bundlePath:r,exports:[...a]}}catch(e){console.warn(`[rari] SSR build failed for ${n}:`,e instanceof Error?e.message:e)}}}extractExportNames(e){let t=[];/export\s+default\b/.test(e)&&t.push(`default`);for(let n of e.matchAll(/export\s+(?:async\s+)?(?:function|const|let|var|class)\s+(\w+)/g))t.push(n[1]);return t.length>0?t:[`default`]}isServerActionFile(e){try{let t=k.readFileSync(e,`utf-8`);return this.isServerAction(t,e)}catch{return!1}}generateServerActionRuntimeModule(e,t){let n=k.readFileSync(e,`utf-8`),r=this.extractExportNames(n),i=[`const __rariActionMod = globalThis.__rari_rsc_require__(${JSON.stringify(t)});`,`if (!__rariActionMod) throw new Error("Server action module ${t} is not registered");`];for(let e of r)e==="default"?i.push(`export default __rariActionMod.default;`):i.push(`export const ${e} = __rariActionMod.${e};`);return`${i.join(`
|
|
105
|
-
|
|
93
|
+
}`}function gn(e,t){return`// Component namespace reference: ${t}
|
|
94
|
+
const ${e} = globalThis['~clientComponents']?.[${JSON.stringify(t)}]?.component
|
|
95
|
+
|| globalThis[${JSON.stringify(t)}]
|
|
96
|
+
|| {};`}const _n=/import\s*\(\s*["']([^"']+)["']\s*\)|import\s+["']([^"']+)["']/g,vn=/<script\b[^>]*>/gi;function yn(e,t,n){n?.startsWith(`/src/`)&&e.add(J(k.join(t,n.slice(1))))}function bn(e){return/\btype\s*=\s*["']module["']/i.test(e)?/\bsrc\s*=\s*["']([^"']+)["']/i.exec(e)?.[1]??null:null}function xn(e){let t=new Set,n=k.join(e,`index.html`);if(!D.existsSync(n))return t;try{let r=D.readFileSync(n,`utf-8`);for(let n of r.matchAll(_n))yn(t,e,n[1]||n[2]);for(let n of r.matchAll(vn))yn(t,e,bn(n[0]))}catch{}return t}const Sn=/(?:^|[\n\r;])\s*import\s*\{[^}]*\bregisterServerReference\b[^}]*\}\s*from\s*["'][^"'\n]+["']/;function Cn(e){return Sn.test(e)}const wn=new Set(`undefined.NaN.Infinity.arguments.Object.Array.String.Number.Boolean.Symbol.BigInt.Math.Date.JSON.Promise.Error.TypeError.RangeError.Map.Set.WeakMap.WeakSet.RegExp.Proxy.Reflect.Function.console.fetch.process.Buffer.globalThis.global.window.document.navigator.location.crypto.TextEncoder.TextDecoder.URL.URLSearchParams.FormData.Headers.Request.Response.AbortController.AbortSignal.setTimeout.clearTimeout.setInterval.clearInterval.queueMicrotask.structuredClone.atob.btoa.React.jsx.jsxs.Fragment`.split(`.`)),Tn=new Set(`await.return.throw.if.else.for.while.do.switch.case.break.continue.new.typeof.instanceof.void.delete.yield.class.extends.super.this.try.catch.finally.with.debugger.default.of.in.from.as.import.export.async.function.const.let.var.true.false.null.static.get.set.typeof`.split(`.`));function En(e){return e>=97&&e<=122||e>=65&&e<=90||e===95||e===36}function Dn(e){return En(e)||e>=48&&e<=57}function Y(e,t){let n=e.length;for(;t<n;){let r=e.charCodeAt(t);if(r===32||r===9||r===10||r===13||r===65279){t++;continue}if(r===47&&e.charCodeAt(t+1)===47){for(t+=2;t<n&&e.charCodeAt(t)!==10&&e.charCodeAt(t)!==13;)t++;continue}if(r===47&&e.charCodeAt(t+1)===42){for(t+=2;t<n-1&&(e.charCodeAt(t)!==42||e.charCodeAt(t+1)!==47);)t++;t+=2;continue}break}return t}function On(e,t,n){t++;let r=e.length;for(;t<r;){let r=e.charCodeAt(t);if(r===92){t+=2;continue}if(r===n)return t+1;t++}return t}function X(e,t,n,r){let i=t,a=0,o=e.length;for(;i<o;){let t=q(e,i,o);if(t!==-1){i=t;continue}let s=e.charCodeAt(i);if(s===n)a++;else if(s===r&&(a--,a===0))return i+1;i++}return i}function kn(e,t,n){for(let r=0;r<n.length;r++)if(e.charCodeAt(t+r)!==n.charCodeAt(r))return!1;return!0}function An(e,t,n){let r=Y(e,t+1);if(r>=n)return!1;let i=e.charCodeAt(r);if(i!==39&&i!==34)return!1;let a=r+1,o=On(e,r,i);if(o-1-a!=10||!kn(e,a,`use server`))return!1;for(r=o;r<n;){let t=e.charCodeAt(r);if(t===32||t===9){r++;continue}return t===59||t===10||t===13||t===47&&e.charCodeAt(r+1)===47||t===47&&e.charCodeAt(r+1)===42}return!0}function jn(e,t,n){let r=Y(e,t+1),i=e.charCodeAt(r);return i!==39&&i!==34?e.slice(t+1,n):(r=Y(e,On(e,r,i)),e.charCodeAt(r)===59&&r++,r=Y(e,r),e.slice(r,n))}function Mn(e,t){if(!En(e.charCodeAt(t)))return null;let n=t+1;for(;n<e.length&&Dn(e.charCodeAt(n));)n++;return{name:e.slice(t,n),end:n}}function Nn(e,t,n){if(!kn(e,t,n))return!1;let r=t>0?e.charCodeAt(t-1):-1,i=t+n.length<e.length?e.charCodeAt(t+n.length):-1;return!(r!==-1&&Dn(r)||i!==-1&&Dn(i))}function Pn(e){let t=new Set,n=0,r=e.length;for(;n<r&&(n=Y(e,n),!(n>=r));){let r=e.charCodeAt(n);if(r===123||r===91){let i=X(e,n,r,r===123?125:93);for(let r of e.slice(n,i).matchAll(/[a-z_$][\w$]*/gi))r[0]!==`as`&&t.add(r[0]);n=i;continue}if(r===46&&e.charCodeAt(n+1)===46&&e.charCodeAt(n+2)===46){n+=3,n=Y(e,n);let r=Mn(e,n);r&&(t.add(r.name),n=r.end);continue}let i=Mn(e,n);if(i){t.add(i.name),n=i.end;continue}n++}return t}function Fn(e){let t=new Set;for(let n of e.matchAll(/\b(?:const|let|var|function|class|async\s+function)\s+([A-Za-z_$][\w$]*)/g))t.add(n[1]);return t}function In(e){let t=new Set;for(let n of e.matchAll(/\b(?:import|export)\s+(?:type\s+)?(?:\{([^}]+)\}|(\*\s+as\s+[A-Za-z_$][\w$]*)|([A-Za-z_$][\w$]*))/g)){if(n[1])for(let e of n[1].split(`,`)){let n=e.trim();if(!n||n.startsWith(`type `))continue;let r=(n.split(/\s+as\s+/).at(-1)??``).trim();r&&t.add(r)}if(n[2]){let e=/as\s+([A-Za-z_$][\w$]*)/.exec(n[2]);e&&t.add(e[1])}n[3]&&n[3]!==`type`&&n[3]!==`async`&&n[3]!==`function`&&n[3]!==`class`&&t.add(n[3])}for(let n of e.matchAll(/(?:^|\n)\s*(?:export\s+)?(?:async\s+)?(?:function|class|const|let|var)\s+([A-Za-z_$][\w$]*)/g))t.add(n[1]);return t}function Ln(e,t,n){let r=new Set([...Pn(t),...Fn(e),...n,...wn,...Tn]),i=new Set,a=0,o=e.length;for(;a<o;){let t=q(e,a,o);if(t!==-1){a=t;continue}if(!En(e.charCodeAt(a))){a++;continue}let n=Mn(e,a);if(n==null){a++;continue}if(a>0&&e.charCodeAt(a-1)===46){a=n.end;continue}if(Rn(e,a,n.end)){a=n.end;continue}r.has(n.name)||i.add(n.name),a=n.end}return[...i]}function Z(e,t){for(;t>0;){let n=e.charCodeAt(t-1);if(n===32||n===9||n===10||n===13||n===65279)t--;else break}return t}function Q(e,t,n){let r=t-n.length;return r<0||!Nn(e,r,n)?null:r}function Rn(e,t,n){let r=Y(e,n);if(e.charCodeAt(r)!==58)return!1;let i=Z(e,t);if(i===0)return!1;let a=e.charCodeAt(i-1);return a===123||a===44}function zn(e,t){let n=Z(e,t),r=Q(e,n,`default`);if(r!=null){n=Z(e,r);let t=Q(e,n,`export`);if(t!=null)return{start:t,exportKind:`default`,bindingName:null}}if(n>0&&e.charCodeAt(n-1)===61){let r=Z(e,n-1),i=r;for(;i>0&&Dn(e.charCodeAt(i-1));)i--;if(i<r&&En(e.charCodeAt(i))){let n=e.slice(i,r),a=Z(e,i),o=Q(e,a,`const`)??Q(e,a,`let`)??Q(e,a,`var`);if(o!=null)return Q(e,Z(e,o),`export`)==null?{start:t,exportKind:null,bindingName:n}:{start:t,exportKind:`named`,bindingName:n}}}let i=Q(e,n,`export`);return i==null?{start:t,exportKind:null,bindingName:null}:{start:i,exportKind:`named`,bindingName:null}}function Bn(e){let t=[],n=e.length,r=0;for(;r<n;){let n=e.charCodeAt(r);if(n===39||n===34||n===96){r=On(e,r,n);continue}if(n===47&&(e.charCodeAt(r+1)===47||e.charCodeAt(r+1)===42)){r=Y(e,r);continue}if(Nn(e,r,`async`)||Nn(e,r,`function`)){let n=r,i=r,a=!1;if(Nn(e,i,`async`)&&(a=!0,i=Y(e,i+5)),Nn(e,i,`function`)){i=Y(e,i+8),e.charCodeAt(i)===42&&(i=Y(e,i+1));let o=null,s=Mn(e,i);if(s&&(o=s.name,i=Y(e,s.end)),e.charCodeAt(i)!==40){r++;continue}let c=X(e,i,40,41),l=e.slice(i+1,c-1);if(i=Y(e,c),e.charCodeAt(i)!==123){r++;continue}let u=X(e,i,123,125)-1;An(e,i,u)?(t.push({start:n,end:u+1,bodyOpen:i,bodyClose:u,paramsRaw:l,isAsync:a,name:o,kind:o==null?`expression`:`declaration`}),r=u+1):r=i+1;continue}if(a&&e.charCodeAt(i)===40){let a=X(e,i,40,41),o=e.slice(i+1,a-1),s=Y(e,a);if(e.charCodeAt(s)===61&&e.charCodeAt(s+1)===62&&(s=Y(e,s+2),e.charCodeAt(s)===123)){let i=X(e,s,123,125)-1;An(e,s,i)?(t.push({start:n,end:i+1,bodyOpen:s,bodyClose:i,paramsRaw:o,isAsync:!0,name:null,kind:`arrow`}),r=i+1):r=s+1;continue}}}if(e.charCodeAt(r)===40){let n=X(e,r,40,41),i=Y(e,n);if(e.charCodeAt(i)===61&&e.charCodeAt(i+1)===62&&(i=Y(e,i+2),e.charCodeAt(i)===123)){let a=X(e,i,123,125)-1;An(e,i,a)?(t.push({start:r,end:a+1,bodyOpen:i,bodyClose:a,paramsRaw:e.slice(r+1,n-1),isAsync:!1,name:null,kind:`arrow`}),r=a+1):r=i+1;continue}}r++}return t}function Vn(e,t){let n=Bn(e);if(n.length===0)return null;let r=In(e),i=[],a=[],o=e,s=[],c=!1,l=[...n].sort((e,t)=>t.start-e.start),u=n.length-1;for(let e of l){let n=e.name??`anonymous_server_function`,l=`$$ACTION_${u}_${n.replace(/\W/g,`_`)}`;u--,i.unshift(l);let d=jn(o,e.bodyOpen,e.bodyClose),f=Ln(d,e.paramsRaw,r),p=[...f,e.paramsRaw.trim()].filter(e=>e!==``).join(`, `),m=e.isAsync?`async `:``,h=f.length>0?`${l}.bind(null, ${f.join(`, `)})`:l,{start:g,exportKind:_,bindingName:v}=zn(o,e.start),y=h,b=null;_==="default"?(b=`default`,y=`export default registerServerReference(${h}, ${JSON.stringify(t)}, "default")`):_===`named`&&e.name!=null?(b=e.name,y=`export const ${e.name} = registerServerReference(${h}, ${JSON.stringify(t)}, ${JSON.stringify(e.name)})`):_===`named`&&v!=null?(b=v,y=`registerServerReference(${h}, ${JSON.stringify(t)}, ${JSON.stringify(v)})`):e.kind===`declaration`&&e.name!=null&&(y=`const ${e.name} = ${h}`),b==null?s.unshift(`${m}function ${l}(${p}) {\n${d}\n}`,`registerServerReference(${l}, ${JSON.stringify(t)}, ${JSON.stringify(l)});`):(s.unshift(`${m}function ${l}(${p}) {\n${d}\n}`),a.unshift(b)),c=!0,o=o.slice(0,g)+y+o.slice(e.end)}let d=c?`import { registerServerReference } from ${JSON.stringify(`react-server-dom-rari/server`)};\n`:``;return{code:`${c&&!Cn(o)?d:``}${o}\n\n${s.join(`
|
|
97
|
+
`)}\n`,actionNames:i,rewrittenExportNames:a}}let Hn;async function Un(){if(Hn!==void 0)return Hn;try{let e=(await import(`@rari/use-cache`)).transformUseCacheModule;return Hn=typeof e==`function`?e:null,Hn}catch{return Hn=null,null}}const Wn=/^proxy\.(?:tsx?|jsx?|mts|mjs)$/,Gn=/\/components\/(\w+)(?:\.tsx?|\.jsx?)?$/,Kn=/[/\\]components[/\\]\w+(?:\.tsx?|\.jsx?)?$/,qn=/^(?:robots|sitemap|feed)\.(?:tsx?|jsx?)$/,Jn=/^[./@~#]/,Yn=/^node:/,Xn=`[hash]_[local]`;function Zn(e){if(e.startsWith(`@`)){let t=e.split(`/`);return t.length>=2?`${t[0]}/${t[1]}`:e}return e.split(`/`)[0]??e}function Qn(e,t){let n=Zn(t),r=e;for(;;){let e=k.join(r,`node_modules`,...n.split(`/`));if(D.existsSync(k.join(e,`package.json`)))return!0;let t=k.dirname(r);if(t===r)return!1;r=t}}const $n=[{componentId:`rari/image`,devSourceSegments:[`src`,`image`,`image.tsx`],publishedExport:`rari/image`,exports:[`Image`]}],er=k.dirname(j(import.meta.url)),$=k.dirname(er);function tr(e){return e.startsWith($)}function nr(e,t){return tr(e)?k.join($,`src`):k.join(t,`src`)}function rr(){let e=k.join($,`src`,`runtime`,`boundaries`,`error-boundary-wrapper.tsx`);if(D.existsSync(e))return e;try{let e=j(import.meta.resolve(`rari/runtime/ErrorBoundaryWrapper`));if(D.existsSync(e))return e}catch{}return null}function ir(e){let t=e.replace(x,`/`);return t.includes(`ErrorBoundaryWrapper`)||t.includes(`/boundaries/error-boundary-wrapper`)||t.endsWith(`/error-boundary-wrapper.tsx`)}function ar(e,t){if(ir(e))return`virtual:error-boundary-wrapper.tsx`;let n=k.relative(t,e).replace(x,`/`);return n.startsWith(`..`)||k.isAbsolute(n)?e.replace(x,`/`):n}function or(e,t){if(ir(e))return`error_boundary_wrapper_${L(`virtual:error-boundary-wrapper.tsx`)}`;if(tr(e)){let t=k.relative($,e).replace(x,`/`);return`${$e(t)}_${L(t)}`}return et(e,t)}let sr=null;async function cr(){return sr||=(await import(`lightningcss`)).transform,sr}function lr(e){return a(e)&&a(e.components)}function ur(e,t,n,r){return e.includes(`node_modules`)||n.has(r??J(e))?!1:!t.directives.hasUseClient&&!t.directives.hasUseServer}var dr=class{serverComponents=new Map;serverActions=new Map;options;projectRoot;buildCache=new Map;useCacheBuildId=null;htmlOnlyImports=new Set;fileImporters=new Map;moduleAnalysisCache;discoveredExternalClientComponents=new Set;clientComponentFiles=new Map;recordClientComponent(e,t){this.clientComponentFiles.set(e,t)}getClientComponentFiles(){return[...this.clientComponentFiles.entries()].map(([e,t])=>({filePath:e,code:t}))}getClientComponentPaths(){return[...this.clientComponentFiles.keys()]}getModuleAnalysisCache(){return this.moduleAnalysisCache}clearClientComponentFiles(){this.clientComponentFiles.clear()}getComponentCount(){return this.serverComponents.size+this.serverActions.size}hasComponent(e){return this.serverComponents.has(e)||this.serverActions.has(e)}removeComponent(e){this.serverComponents.delete(e),this.serverActions.delete(e),this.moduleAnalysisCache.invalidate(e)}getImportGraph(){let e=new Map;for(let[t,n]of this.fileImporters)e.set(t,new Set(n));return e}getHtmlOnlyImports(){return new Set(this.htmlOnlyImports)}async writeComponentCssAsset(e,t){if(t.length===0)return[];let n=k.join(this.options.outDir,`assets`,`server`);await D.promises.mkdir(n,{recursive:!0});let r=`${t.join(`
|
|
98
|
+
`)}\n`,i=`${L(e+r,12)}.css`,a=k.join(n,i);return await D.promises.writeFile(a,r,`utf-8`),[`/assets/server/${i}`]}getComponentIdFromRouteManifestPath(e){return this.getComponentId(k.join(this.projectRoot,`src`,`app`,e))}getComponentReferenceId(e){return this.getReadableComponentId(this.getProjectRelativePath(e))}async writeRouteCssEntries(e){let t=k.join(this.options.outDir,this.options.rscDir,`routes.json`);if(!D.existsSync(t))return;let n=await D.promises.readFile(t,`utf-8`),r=JSON.parse(n);if(!a(r))return;let i=r,o=t=>{if(Array.isArray(t))for(let n of t){if(!a(n))continue;let t=n.filePath;if(typeof t!=`string`||t===``)continue;let r=this.getComponentIdFromRouteManifestPath(t);n.componentId=r;let i=e.components[r]?.css??[];i.length?n.css=i:delete n.css}};o(i.routes),o(i.layouts),o(i.loading),o(i.errors),o(i.notFound),o(i.templates);let s=i.apiRoutes;if(Array.isArray(s))for(let e of s){if(!a(e))continue;let t=e.filePath;typeof t==`string`&&t!==``&&(e.componentId=this.getComponentIdFromRouteManifestPath(t))}await D.promises.writeFile(t,JSON.stringify(i),`utf-8`)}constructor(e,t={}){this.projectRoot=e,this.moduleAnalysisCache=t.moduleAnalysisCache??new Gt;let n=t.rscDir!=null&&t.rscDir!==``?t.rscDir:`server`;this.options={outDir:t.outDir!=null&&t.outDir!==``?t.outDir:k.join(e,`dist`),rscDir:n,manifestPath:t.manifestPath!=null&&t.manifestPath!==``?t.manifestPath:k.join(n,`manifest.json`),serverConfigPath:t.serverConfigPath!=null&&t.serverConfigPath!==``?t.serverConfigPath:k.join(n,`config.json`),minify:t.minify??A.env.NODE_ENV===`production`,alias:t.alias??{},define:t.define,csp:t.csp,cacheControl:t.cacheControl,cache:t.cache,action:t.action,jsPoolSize:t.jsPoolSize,htmlLimitedBots:t.htmlLimitedBots,experimental:t.experimental,mdx:t.mdx},this.parseHtmlImports()}parseHtmlImports(){for(let e of xn(this.projectRoot))this.htmlOnlyImports.add(e)}getModuleAnalysis(e,t){return this.moduleAnalysisCache.get(e,t)}isServerComponent(e,t){try{return ur(e,this.moduleAnalysisCache.get(e,t),this.htmlOnlyImports)}catch{return!1}}isClientComponent(e,t){try{return this.moduleAnalysisCache.get(e,t).directives.hasUseClient}catch{return!1}}resolveImportedFilePath(e,t){let n=null;if(t.startsWith(`./`)||t.startsWith(`../`)){let r=k.dirname(e);n=k.resolve(r,t)}else if(n=C(t,this.options.alias,this.projectRoot),(n==null||n===``)&&t.startsWith(`@/`)){let e=t.slice(2);n=k.join(this.projectRoot,`src`,e)}return n==null||n===``?null:S(n,[``,`.ts`,`.tsx`,`.js`,`.jsx`])}populateImportGraphFromFiles(e){this.fileImporters.clear();for(let{filePath:t,analysis:n}of e)for(let e of Ht(n.importSources)){let n=this.resolveImportedFilePath(t,e);n!=null&&n!==``&&(this.fileImporters.has(n)||this.fileImporters.set(n,new Set),this.fileImporters.get(n).add(t))}}buildImportGraph(e){let t=fr(this,[e]);this.populateImportGraphFromFiles(t)}isOnlyImportedByClientComponents(e){let t=this.fileImporters.get(e);if(!t||t.size===0)return!1;for(let e of t)if(!this.isClientComponent(e)&&!this.isOnlyImportedByClientComponents(e))return!1;return!0}addServerComponent(e,t,n){let r=t??D.readFileSync(e,`utf-8`),i=n??this.moduleAnalysisCache.get(e,r),a=Vt(i.importSources),o=Bt(i);if(i.directives.hasUseServer){this.serverActions.set(e,{filePath:e,originalCode:r,dependencies:a,hasNodeImports:o});return}ur(e,i,this.htmlOnlyImports)&&this.serverComponents.set(e,{filePath:e,originalCode:r,dependencies:a,hasNodeImports:o})}isServerAction(e,t){return t!=null&&t!==``?this.moduleAnalysisCache.get(t,e).directives.hasUseServer:G(e).directives.hasUseServer}extractDependencies(e,t){return Vt((t!=null&&t!==``?this.moduleAnalysisCache.get(t,e):G(e)).importSources)}hasNodeImports(e,t){return Bt(t!=null&&t!==``?this.moduleAnalysisCache.get(t,e):G(e))}async getTransformedComponentsForDevelopment(e){let t=[];for(let[n]of this.serverComponents){if(e&&!e(n))continue;let r=k.relative(this.projectRoot,n),i=this.getComponentId(r),a=await this.buildComponentCodeOnly(n);t.push({id:i,code:a,isAction:!1})}for(let[n]of this.serverActions){if(e&&!e(n))continue;let r=k.relative(this.projectRoot,n),i=this.getComponentId(r),a=await this.buildComponentCodeOnly(n);t.push({id:i,code:a,isAction:!0})}return t}resolveComponentsDirClientImport(e){if(!e.startsWith(`.`)&&!e.startsWith(`@`)&&!e.startsWith(`~`)&&!e.startsWith(`#`))return null;if(e.startsWith(`.`)){if(!e.includes(`/components/`))return null;let t=Gn.exec(e);if(!t)return null;let n=t[1],r=[k.resolve(this.projectRoot,`src`,`components`,`${n}.tsx`),k.resolve(this.projectRoot,`src`,`components`,`${n}.ts`),k.resolve(this.projectRoot,`src`,`components`,`${n}.jsx`),k.resolve(this.projectRoot,`src`,`components`,`${n}.js`)];for(let e of r)if(D.existsSync(e)&&this.isClientComponent(e))return{registryKey:`components/${n}`,absolutePath:e};return null}let t=null;for(let[n,r]of Object.entries(this.options.alias))if(e.startsWith(`${n}/`)||e===n){let i=e.slice(n.length).replace(/^\/+/,``);t=k.join(r,i);break}if(t==null||t===``||!Kn.exec(t))return null;let n=k.isAbsolute(t)?t:k.resolve(this.projectRoot,t),r=[n,`${n}.tsx`,`${n}.ts`,`${n}.jsx`,`${n}.js`];for(let e of r)if(D.existsSync(e)&&this.isClientComponent(e))return{registryKey:this.getComponentReferenceId(e),absolutePath:e};return null}transformComponentImportsToGlobal(e){let t=[];for(let n of gt(e)){if(n.typeOnly||n.sideEffectOnly)continue;let e=this.resolveComponentsDirClientImport(n.source);if(e==null)continue;let r=[];n.namespaceBinding!=null&&r.push(gn(n.namespaceBinding,e.registryKey)),n.defaultBinding!=null&&r.push(hn(n.defaultBinding,e.registryKey,`default`));for(let t of n.named)t.typeOnly||r.push(hn(t.local,e.registryKey,t.imported));r.length!==0&&t.push({start:n.start,end:n.end,replacement:r.join(`
|
|
99
|
+
`)})}if(t.length===0)return e;let n=e;for(let{start:e,end:r,replacement:i}of[...t].sort((e,t)=>t.start-e.start))n=n.slice(0,e)+i+n.slice(r);return n}isPageComponent(e){return e.includes(`/app/`)||e.includes(`\\app\\`)}createRolldownModuleInfoPlugin(e){let t=new Set;return{name:`rari-rolldown-module-info`,moduleParsed(e){for(let n of e.importedIds)!n.startsWith(`.`)&&!n.startsWith(`/`)&&!n.startsWith(`node:`)&&!zt(n)&&t.add(n);for(let n of e.dynamicallyImportedIds)!n.startsWith(`.`)&&!n.startsWith(`/`)&&!n.startsWith(`node:`)&&!zt(n)&&t.add(n)},buildEnd:()=>{if(t.size===0)return;let n=[...t].sort(),r=this.serverComponents.get(e)??this.serverActions.get(e);r&&(r.dependencies=n);let i=this.buildCache.get(e);i&&(i.bundledDependencies=n)}}}createBuildPlugins(e,t,n,r,i=!1,a){let o=k.dirname(r),s=Wn.test(k.basename(r)),c=new Map,l=new Map;return[{name:`virtual-module`,resolveId(t,n){if(t===e)return t;if(n===e&&(t.startsWith(`./`)||t.startsWith(`../`))){if(t.endsWith(`.module.css`))return null;let e=k.resolve(o,t);for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let n=e+t;if(D.existsSync(n)&&D.statSync(n).isFile())return n}for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=k.join(e,`index${t}`);if(D.existsSync(n))return n}return e}return null},load(r){return r===e?{code:t,moduleType:n}:null}},{name:`resolve-client-server-boundaries`,enforce:`pre`,resolveId:(t,n)=>{if(n==null||n===``||n.includes(`node_modules`)||tr(n)||t.startsWith(`node:`)||zt(t)||t===`react`||t===`react-dom`||t===`react/jsx-runtime`||t===`react/jsx-dev-runtime`)return null;let r=null,i=this.options.alias;if(r=C(t,i,this.projectRoot),(r==null||r===``)&&(t.startsWith(`./`)||t.startsWith(`../`))){let i=n===e?o:k.dirname(n);r=k.resolve(i,t)}if((r==null||r===``)&&k.isAbsolute(t)&&(r=t),r!==``)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=r+e;if(D.existsSync(t)&&D.statSync(t).isFile()){if(this.isClientComponent(t)){let e=k.relative(this.projectRoot,t),n=(e.startsWith(`..`)?t:e).replace(x,`/`);return c.set(t,n),e.startsWith(`..`)&&this.discoveredExternalClientComponents.add(t),{id:`\0client-ref:${t}`}}try{let e=this.moduleAnalysisCache.get(t);if(e.directives.hasUseServer){let n=this.getComponentId(t);return l.set(t,{actionId:n,hasDefaultExport:e.hasDefaultExport}),{id:`\0server-action:${t}`}}}catch(e){console.error(`[rari] Failed to read file for server action detection: ${t}`,e)}break}}return null},load:e=>{if(e.startsWith(`\0client-ref:`)){let t=e.slice(12),n=k.relative(this.projectRoot,t),r=(c.get(t)??(n.startsWith(`..`)?t:n)).replace(x,`/`);return{code:this.generateClientReferenceStub(t,r),moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=l.get(t)?.actionId??this.getComponentId(t);return{code:this.generateServerActionRuntimeModule(t,n),moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,t)=>{if(!i)return null;if(e.startsWith(`file://`)){let t=e.replace(h,``);return D.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null,r=this.options.alias;n=C(e,r,this.projectRoot);let a=t?.startsWith(`\0`)?o:t!=null&&t!==``?k.dirname(t):o;if((n==null||n===``)&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=k.resolve(a,e)),n==null||n===``||a.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(D.existsSync(t)&&D.statSync(t).isFile()){if(this.isClientComponent(t)||this.isServerActionFile(t))return null;let e=k.join(this.projectRoot,`src`);if(!t.startsWith(e))return null;let n=this.getComponentId(t),r=k.join(this.options.outDir,this.options.rscDir,`${n}.js`);if(D.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:D.readFileSync(t,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let t=C(e,this.options.alias,this.projectRoot);if(t==null||t===``)return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let n=t+e;if(D.existsSync(n)&&D.statSync(n).isFile()){if(this.isServerActionFile(n)){let e=this.getComponentId(n);return l.set(n,{actionId:e,hasDefaultExport:this.moduleAnalysisCache.get(n).hasDefaultExport}),{id:`\0server-action:${n}`}}return n}}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=k.join(t,`index${e}`);if(D.existsSync(n)){if(this.isServerActionFile(n)){let e=this.getComponentId(n);return l.set(n,{actionId:e,hasDefaultExport:this.moduleAnalysisCache.get(n).hasDefaultExport}),{id:`\0server-action:${n}`}}return n}}return t}},{name:`resolve-rari-proxy`,resolveId:e=>{if(s&&e===`rari`){let e=k.join(er,`proxy/RariResponse.mjs`);if(D.existsSync(e))return e;let t=k.join($,`src/proxy/http/response.ts`);if(D.existsSync(t))return t}return null}},{name:`css-modules`,resolveId:(e,t)=>{if(e.endsWith(`.module.css`)){let n=t!=null&&t!==``&&!t.startsWith(`\0`)?k.dirname(t):o,r=k.resolve(n,e);if(D.existsSync(r))return{id:`\0css-module:${r}`}}return null},load:async e=>{if(!e.startsWith(`\0css-module:`))return null;let t=e.slice(12);try{let e=await cr(),n=D.readFileSync(t),r=e({filename:k.relative(this.projectRoot,t),code:n,cssModules:{pattern:Xn}});a&&a.push(new TextDecoder().decode(r.code));let i={};if(r.exports)for(let[e,t]of Object.entries(r.exports))i[e]=t.name;return{code:`export default ${JSON.stringify(i)}`,moduleType:`js`}}catch(t){throw Error(`[rari] Failed to process CSS module ${e}: ${t instanceof Error?t.message:String(t)}`)}}},{name:`externalize-deps`,resolveId:(e,t)=>{if(e.startsWith(`\0`))return null;if(e.startsWith(`node:`)||zt(e)||[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`rari/image`].includes(e)||e in{"rari/runtime/cache-wrapper":`node_modules/rari/dist/runtime/cache-wrapper.mjs`,"react-server-dom-rari/server":`node_modules/rari/dist/runtime/rsc-references.mjs`})return{id:e,external:!0};if(e===`rari`||C(e,this.options.alias,this.projectRoot)!=null)return null;if(!e.startsWith(`.`)&&!e.startsWith(`/`)){if(Qn(this.projectRoot,e))return{id:e,external:!0};let n=[t!=null&&t!==``&&!t.startsWith(`\0`)?t:null,r].filter(e=>!!e);for(let t of n)try{return{id:de(t).resolve(e)}}catch{try{let n=import.meta.resolve(e,M(t).href);return{id:j(n)}}catch{}}return null}return null}},this.createRolldownModuleInfoPlugin(r),{name:`use-cache`,transform:async(e,t)=>{if(!this.options.experimental?.useCache&&!this.options.experimental?.useCacheRemote)return null;let n=await Un();return n?n(e,t,{hashSalt:`${this.useCacheBuildId??`development`}:rari-use-cache-v1`}):null}}]}async buildComponentCodeOnly(e){let t=await D.promises.readFile(e,`utf-8`),n=Vn(t,this.getComponentId(e))?.code??t,r=this.transformClientImports(n,e),i=this.isPageComponent(e),a=i?this.transformComponentImportsToGlobal(r):r,o=k.extname(e),s;s=o===`.tsx`?`tsx`:o===`.ts`?`ts`:o===`.jsx`?`jsx`:`js`;let c=`\0virtual:${e}`,l=await N({input:c,platform:`node`,write:!1,external:[Yn,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${s}`]:s},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(A.env.NODE_ENV!=null&&A.env.NODE_ENV!==``?A.env.NODE_ENV:`production`),...this.options.define}},plugins:this.createBuildPlugins(c,a,s,e,i,[])});if(l.output.length===0)throw Error(`No output generated from Rolldown`);let u=l.output.find(e=>e.type===`chunk`&&e.isEntry);if(u?.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let d=u.code;return d=`// Built: ${new Date().toISOString()}\n${d}`,d}async buildComponentBatch(e,t,n){let r=0,i=0,a=[];if(await new Promise(o=>{let s=()=>{for(;r<n&&i<e.length;){let[n,c]=e[i++],l=k.relative(this.projectRoot,n),u=this.getComponentId(n),d=k.join(this.options.rscDir,`${u}.js`),f=k.join(this.options.outDir,d);r++,(async()=>{try{let e=k.dirname(f);await D.promises.mkdir(e,{recursive:!0});let r=await this.buildSingleComponent(n,f),i=await this.writeComponentCssAsset(u,r.css),a=M(k.resolve(this.projectRoot,f)).href;t.components[u]={id:u,filePath:n,relativePath:l,bundlePath:d,moduleSpecifier:a,dependencies:[...c.dependencies],hasNodeImports:c.hasNodeImports,css:i}}catch(e){a.push(e instanceof Error?e:Error(String(e)))}finally{r--,i>=e.length&&r===0?o():s()}})()}e.length===0&&o()};s()}),a.length>0)throw a[0]}async buildServerComponents(){let e=k.join(this.options.outDir,this.options.rscDir);await D.promises.mkdir(e,{recursive:!0});let t={components:{},buildTime:new Date().toISOString()},n=this.options.experimental?.useCache===!0||this.options.experimental?.useCacheRemote!=null,r=Math.min(8,Math.max(1,(await import(`node:os`)).cpus().length)),i=[...this.serverComponents.entries()].filter(([e])=>!this.isPageComponent(e)),a=[...this.serverComponents.entries()].filter(([e])=>this.isPageComponent(e)),s=[...this.serverActions.entries()];await Promise.all([this.buildComponentBatch(i,t,r),this.buildComponentBatch(s,t,r)]),await this.buildComponentBatch(a,t,r),n&&(this.useCacheBuildId=L(JSON.stringify(t.components),16),t.useCacheBuildId=this.useCacheBuildId);let c=k.join(this.options.outDir,this.options.manifestPath);await D.promises.writeFile(c,JSON.stringify(t),`utf-8`),await this.writeRouteCssEntries(t);let l={};this.options.csp&&(l.csp=this.options.csp),this.options.cacheControl&&(l.cacheControl=this.options.cacheControl),this.options.cache&&(l.cache=this.options.cache),this.options.action&&(l.action=this.options.action),this.options.jsPoolSize!=null&&(l.jsPoolSize=this.options.jsPoolSize),this.options.htmlLimitedBots!=null&&(l.htmlLimitedBots=this.options.htmlLimitedBots),(this.options.experimental?.useCacheRemote!=null||this.useCacheBuildId!=null&&this.useCacheBuildId!==``)&&(l.useCache={...this.options.experimental?.useCacheRemote?{remote:this.options.experimental.useCacheRemote}:{},...this.useCacheBuildId!=null&&this.useCacheBuildId!==``?{buildId:this.useCacheBuildId}:{}},!this.options.experimental?.useCache&&this.options.experimental?.useCacheRemote&&console.warn(`[server-build] experimental.useCacheRemote is set without experimental.useCache; the 'use cache' transform will still run because useCacheRemote is configured.`));let u=k.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(l).length===0)try{await D.promises.unlink(u)}catch(e){o(e)!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await D.promises.writeFile(u,JSON.stringify(l),`utf-8`);return t}async buildMdxRegistry(e){let n=on({projectRoot:this.projectRoot,mdxOptions:e,alias:this.options.alias,cache:this.moduleAnalysisCache}),r=k.join(this.options.outDir,this.options.manifestPath),i;if(D.existsSync(r)){let e=await D.promises.readFile(r,`utf-8`),n=t(e);i=n&&lr(n)?n:{components:{},buildTime:new Date().toISOString()}}else i={components:{},buildTime:new Date().toISOString()};i.mdxRegistry=n.map(e=>({name:e.name,id:e.moduleId,client:e.client})),await D.promises.writeFile(r,JSON.stringify(i),`utf-8`)}async buildSSRClientComponents(){let e=k.join(this.options.outDir,`ssr`);await D.promises.mkdir(e,{recursive:!0});let t=[...this.getClientComponentFiles()];for(let e of this.discoveredExternalClientComponents)if(!t.some(t=>t.filePath===e))try{let n=D.readFileSync(e,`utf-8`);t.push({filePath:e,code:n})}catch{}try{let e=rr();if(e!=null&&e!==``){let n=D.readFileSync(e,`utf-8`);t.push({filePath:e,code:n})}}catch{}if(t.length===0){let t={};await this.buildExternalClientComponents(t,new Map),await this.writeClientReferenceManifest(e,t);return}let n=new Map;for(let{filePath:e}of t){let t=or(e,this.projectRoot);n.set(k.resolve(e),`file:///ssr/${t}.js`)}let r={},i=Math.min(8,Math.max(1,(await import(`node:os`)).cpus().length)),a=0,o=0;await new Promise(e=>{let s=()=>{for(;a<i&&o<t.length;){let{filePath:i,code:c}=t[o++],l=ar(i,this.projectRoot),u=`ssr/${or(i,this.projectRoot)}.js`,d=k.join(this.options.outDir,u);a++,(async()=>{try{let e=k.dirname(d);await D.promises.mkdir(e,{recursive:!0}),await this.buildSSRSingleClient(i,d,n);let t=this.extractExportNames(c);r[l]={id:l,filePath:i,bundlePath:u,exports:t}}catch(e){console.warn(`[rari] SSR build failed for ${l}:`,e instanceof Error?e.message:e)}finally{a--,o>=t.length&&a===0?e():s()}})()}t.length===0&&e()};s()}),await this.buildExternalClientComponents(r,n),await this.writeClientReferenceManifest(e,r)}async writeClientReferenceManifest(e,t){let n=k.join(e,`manifest.json`);await D.promises.writeFile(n,JSON.stringify(t),`utf-8`);let r={};for(let[e,n]of Object.entries(t))for(let t of n.exports){let i=`${e}#${t}`;r[i]={id:i,chunks:`/${n.bundlePath}`,name:t}}let i=k.join(this.options.outDir,`server`);await D.promises.mkdir(i,{recursive:!0});let a=k.join(i,`client-reference-manifest.json`);await D.promises.writeFile(a,JSON.stringify(r),`utf-8`)}resolveExternalClientSourcePath(e,t){let n=k.join($,...e);if(D.existsSync(n))return n;try{let e=j(import.meta.resolve(t));if(D.existsSync(e))return e}catch{}return null}async buildExternalClientComponents(e,t){for(let{componentId:n,devSourceSegments:r,publishedExport:i,exports:a}of $n){let o=this.resolveExternalClientSourcePath(r,i);if(o!=null&&o!==``)try{let r=`ssr/${`external_${L(n)}`}.js`,i=k.join(this.options.outDir,r);await D.promises.mkdir(k.dirname(i),{recursive:!0}),await this.buildSSRSingleClient(o,i,t),e[n]={id:n,filePath:o,bundlePath:r,exports:[...a]}}catch(e){console.warn(`[rari] SSR build failed for ${n}:`,e instanceof Error?e.message:e)}}}extractExportNames(e){return _t(e)}generateClientReferenceStub(e,t){let n=[`default`];try{n=_t(D.readFileSync(e,`utf-8`))}catch{}return mn(t,n)}isServerActionFile(e){try{let t=D.readFileSync(e,`utf-8`);return this.isServerAction(t,e)}catch{return!1}}generateServerActionRuntimeModule(e,t){let n=D.readFileSync(e,`utf-8`),r=this.extractExportNames(n),i=[`const __rariActionMod = globalThis.__rari_rsc_require__(${JSON.stringify(t)});`,`if (!__rariActionMod) throw new Error("Server action module ${t} is not registered");`];for(let e of r)e==="default"?i.push(`export default __rariActionMod.default;`):i.push(`export const ${e} = __rariActionMod.${e};`);return`${i.join(`
|
|
100
|
+
`)}\n`}generateServerActionReferenceModule(e){let t=D.readFileSync(e,`utf-8`),n=this.extractExportNames(t),r=this.getComponentId(e),i=`import { createServerReference } from 'react-server-dom-webpack/client';
|
|
106
101
|
`;i+=`import { callServer } from 'rari/runtime/call-server';
|
|
107
|
-
`;for(let e of n){let t=`${r}#${e}`;e==="default"
|
|
102
|
+
`;for(let e of n){let t=`${r}#${e}`;i+=e==="default"?`export default createServerReference(${JSON.stringify(t)}, callServer);\n`:`export const ${e} = createServerReference(${JSON.stringify(t)}, callServer);\n`}return i}async buildSSRSingleClient(e,t,n){let r=(await D.promises.readFile(e,`utf-8`)).replace(/^['"]use client['"];?\s*/m,``),i=k.extname(e),a;a=i===`.tsx`?`tsx`:i===`.ts`?`ts`:i===`.jsx`?`jsx`:`js`;let o=`\0ssr-virtual:${e}`,s=this.projectRoot,c=nr(e,s),l=e=>this.generateServerActionReferenceModule(e),u=e=>this.isServerActionFile(e),d=(await N({input:o,platform:`node`,write:!1,external:[Yn,`react`,`react-dom`,/^react\//,/^rari/,`react-server-dom-webpack/client`,/^react-server-dom-webpack\//],output:{format:`esm`,minify:!1},moduleTypes:{[`.${a}`]:a},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react-jsx`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(A.env.NODE_ENV!=null&&A.env.NODE_ENV!==``?A.env.NODE_ENV:`production`)}},plugins:[{name:`ssr-client-virtual`,resolveId(e){return e===o?e:null},load(e){if(e===o)return{code:r,moduleType:a};if(e.startsWith(`\0server-action-ref:`)){let t=e.slice(19);return{code:l(t),moduleType:`js`}}return null}},{name:`ssr-client-resolve`,resolveId(t,r){if(t.startsWith(`\0server-action-ref:`))return t;if(t.startsWith(`.`)||t.startsWith(`/`)||t.startsWith(`@/`)){let i=t;t.startsWith(`@/`)?i=k.join(c,t.slice(2)):r===o?i=k.resolve(k.dirname(e),t):r!=null&&r!==``&&(i=k.resolve(k.dirname(r.replace(`\0ssr-virtual:`,``).replace(`\0server-action-ref:`,``)),t));let a=oe(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`]),s=a!=null&&a!==``?a:se(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`]);if(s!=null&&s!==``&&u(s))return`\0server-action-ref:${k.resolve(s)}`;if(s!=null&&s!==``&&n!=null){let t=k.resolve(s),r=n.get(t);if(r!=null&&r!==``&&t!==k.resolve(e))return{id:r,external:!0}}return s!=null&&s!==``?s:null}return null}}]})).output[0],f=typeof d==`object`&&`code`in d?d.code:``;return await D.promises.writeFile(t,f,`utf-8`),{code:f}}async buildSingleComponent(e,t){let n=await D.promises.readFile(e,`utf-8`),r=Vn(n,this.getComponentId(e))?.code??n,i=this.transformClientImports(r,e),a=this.isPageComponent(e),o=a?this.transformComponentImportsToGlobal(i):i,s=k.extname(e),c;c=s===`.tsx`?`tsx`:s===`.ts`?`ts`:s===`.jsx`?`jsx`:`js`;let l=`\0virtual:${e}`,u=[],d=await N({input:l,platform:`node`,write:!1,external:[Yn,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${c}`]:c},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(A.env.NODE_ENV!=null&&A.env.NODE_ENV!==``?A.env.NODE_ENV:`production`),...this.options.define}},plugins:this.createBuildPlugins(l,o,c,e,a,u)});if(d.output.length===0)throw Error(`No output generated from Rolldown`);let f=d.output.find(e=>e.type===`chunk`&&e.isEntry);if(f?.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let p=f.code;p=`// Built: ${new Date().toISOString()}\n${p}`,await D.promises.writeFile(t,p,`utf-8`);let m=await D.promises.open(t,`r+`);return await m.sync(),await m.close(),{code:p,css:u}}transformClientImports(e,t){let n=$n.map(e=>e.componentId),r=[],i=!1,a=!1;for(let o of gt(e)){if(o.typeOnly||o.sideEffectOnly)continue;let e=!1,s=o.source;if(n.includes(o.source))e=!0;else if(Jn.test(o.source)||Object.keys(this.options.alias).some(e=>o.source===e||o.source.startsWith(`${e}/`))){let n=this.resolveImportPath(o.source,t);this.isClientComponent(n)&&(e=!0,s=k.relative(this.projectRoot,n).replace(x,`/`))}if(!e)continue;let c=[];o.namespaceBinding!=null&&(a=!0,c.push(`const ${o.namespaceBinding} = createClientModuleProxy(${JSON.stringify(s)});`)),o.defaultBinding!=null&&(i=!0,c.push(`const ${o.defaultBinding} = registerClientReference(
|
|
108
103
|
null,
|
|
109
|
-
${JSON.stringify(
|
|
104
|
+
${JSON.stringify(s)},
|
|
110
105
|
"default"
|
|
111
|
-
)
|
|
106
|
+
);`));for(let e of o.named)e.typeOnly||(i=!0,c.push(`const ${e.local} = registerClientReference(
|
|
112
107
|
null,
|
|
113
|
-
${JSON.stringify(
|
|
114
|
-
${JSON.stringify(
|
|
115
|
-
);`
|
|
116
|
-
`)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
${JSON.stringify(n)}
|
|
125
|
-
);`).join(`
|
|
126
|
-
`)}`}const yr={remotePatterns:[],localPatterns:[],deviceSizes:p,imageSizes:f,formats:u,qualityAllowlist:d,minimumCacheTTL:60,maxCacheSize:l},br=new Map;async function xr(e){let t=br.get(e);if(t!=null&&t!==``)return t;let n=import.meta.url,r=N(n),i=j.dirname(r),a=[j.join(i,`runtime`,e),j.join(i,`../runtime`,e)];for(let t of a)try{let n=await k.promises.readFile(t,`utf-8`);return t.endsWith(`.ts`)&&(n=n.replace(qn,(e,t,n)=>`import type ${t} from "rari/${n}";`),n=n.replace(Jn,(e,t,n)=>`import type ${t} from "rari/${n}";`),n=n.replace(Yn,(e,t,n)=>`import type ${t} from "rari/${n}";`),n=n.replace(Xn,(e,t,n)=>`import ${t} from "rari/${n}";`),n=n.replace(Zn,(e,t,n)=>`import ${t} from "rari/${n}";`),n=n.replace(Qn,(e,t,n)=>`import ${t} from "rari/${n}";`),n=n.replace($n,(e,t)=>`import "rari/${t}";`)),br.set(e,n),n}catch(e){let n=o(e);n!==`ENOENT`&&n!==`EISDIR`&&console.warn(`[rari] Unexpected error reading ${t}:`,e)}throw Error(`Could not find ${e}. Tried: ${a.join(`, `)}`)}const Sr=j.dirname(N(import.meta.url)),Cr=j.dirname(Sr);function wr(e){let t=[j.join(Sr,`runtime`,e),j.join(Sr,`../runtime`,e)];for(let e of t)if(k.existsSync(e))return e;return null}function Tr(e){return e.startsWith(Cr)}async function Er(){return xr(`rsc-client-runtime.mjs`)}async function Dr(e,t){return(await xr(`entry-client.mjs`)).replace(`/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */`,e).replace(`/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */`,t)}async function Or(){return xr(`rsc-references.mjs`)}async function kr(e,t){let r=j.join(e,`src`),{getBinaryPath:i}=await import(`./platform.mjs`),a=O(i(),[`scan-images`,`--src`,r],{encoding:`utf8`,cwd:e,shell:!1,timeout:6e4});if(a.error)throw Error(`Failed to scan for image usage: ${a.error.message}`);if(a.signal)throw Error(`Failed to scan for image usage: process terminated by signal ${a.signal}`);if(a.status!==0)throw Error(`Failed to scan for image usage: ${a.stderr||a.stdout||`exit code ${a.status}`}`);let o;try{o={images:n(a.stdout,`images`)??[]}}catch(e){let t=e instanceof SyntaxError||e instanceof Error?e.message:String(e),n=(a.stdout||a.stderr||`(empty)`).slice(0,500);throw Error(`Failed to parse image scanner output as JSON: ${t}. Scanner output: ${n}`,{cause:e})}let s={...yr,...t.images,preoptimizeManifest:o.images},c=j.join(e,`dist`),l=j.join(c,`server`);k.existsSync(l)||k.mkdirSync(l,{recursive:!0});let u=j.join(l,`image.json`);k.writeFileSync(u,JSON.stringify(s))}function Ar(e){return e}function jr(e={}){if(e.jsPoolSize!=null){let t=e.jsPoolSize;if(!Number.isInteger(t)||t<1||!Number.isFinite(t))throw Error(`jsPoolSize must be a finite positive integer; received ${String(t)}`)}let n=new Map,r=new Set,c=new Ct,l=null,u=null,d=null,f={},p=null;function m(){p=null}function h(){return p!=null&&p!==``||(p=Lt(It({projectRoot:e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:M.cwd(),mdxOptions:e.mdx,alias:f,cache:c}))),p}function g(e){return n.get(Y(e))}function y(e,t){n.set(Y(e),t)}function ee(e){xt(n,e)}function te(e){r.add(Y(e))}function re(e){return r.has(Y(e))}function ie(e){r.delete(e);try{r.delete(k.realpathSync(e))}catch{r.delete(j.resolve(e))}}function x(){let e=new Set(r);if(l)for(let t of l.getClientComponentPaths())e.add(t);return e}function S(e){let t={hasUseServer:!1,hasUseClient:!1},n=e.replace(b,`/`);if(!v.test(n)||!n.includes(`/src/`))return t;try{let n=c.get(e);t.hasUseServer=n.directives.hasUseServer,t.hasUseClient=n.directives.hasUseClient}catch{}return t}let C=null,w=null;function le(){if(l)return l.getHtmlOnlyImports();let t=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:M.cwd(),n=j.join(t,`index.html`);try{let e=k.statSync(n).mtimeMs;if(C!==null&&e===w)return C;w=e}catch{return C??=new Set,C}return C=Wt(t),C}function T(e){if(e.includes(`node_modules`)||Tr(e))return!1;let t=Y(e);try{return Q(t,c.get(e),le(),t)}catch{return!1}}function E(e,t){try{let n=[],r=e.matchAll(er);for(let e of r){let t=e[1].split(`,`);for(let e of t){let t=e.trim().split(tr).at(-1)?.trim();t!=null&&t!==``&&n.push(t)}}(nr.test(e)||(t?.hasDefaultExport??st(e)))&&n.push(`default`);let i=e.matchAll(ar);for(let e of i)e[1]&&n.push(e[1]);return[...new Set(n)]}catch{return[]}}function D(t,n,r){if(!r.topLevelUseServer)return t;let i=E(t,r);if(i.length===0)return t;let a=B(n,e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:M.cwd()),o=JSON.stringify(a),s=t;s+=`
|
|
108
|
+
${JSON.stringify(s)},
|
|
109
|
+
${JSON.stringify(e.imported)}
|
|
110
|
+
);`));c.length!==0&&r.push({start:o.start,end:o.end,replacement:c.join(`
|
|
111
|
+
`)})}if(r.length===0)return e;let o=e;for(let{start:e,end:t,replacement:n}of[...r].sort((e,t)=>t.start-e.start))o=o.slice(0,e)+n+o.slice(t);let s=[...i?[`registerClientReference`]:[],...a?[`createClientModuleProxy`]:[]];return un(o,`react-server-dom-rari/server`,s)}resolveImportPath(e,t){let n=e,r=this.options.alias;for(let[t,i]of Object.entries(r))if(e.startsWith(`${t}/`)||e===t){let r=e.slice(t.length).replace(/^\/+/,``);n=k.join(i,r);break}k.isAbsolute(n)||(n=k.resolve(k.dirname(t),n));let i=[`.tsx`,`.jsx`,`.ts`,`.js`],a=oe(n,i);if(a!=null&&a!==``)return a;let o=se(n,i);return o!=null&&o!==``?o:`${n}.tsx`}getProjectRelativePath(e){return Qe(e,this.projectRoot)}getReadableComponentId(e){return $e(e)}getComponentId(e){return et(e,this.projectRoot)}async rebuildComponent(e){let t=this.getComponentId(e),n=await D.promises.readFile(e,`utf-8`),r=this.extractDependencies(n,e),i={filePath:e,originalCode:n,dependencies:r,hasNodeImports:this.hasNodeImports(n,e)};this.isServerAction(n,e)?(this.serverActions.set(e,i),this.serverComponents.delete(e)):(this.serverComponents.set(e,i),this.serverActions.delete(e));let a=k.join(this.options.rscDir,`${t}.js`),o=k.join(this.options.outDir,a),s=this.buildCache.get(e),c=(await D.promises.stat(e)).mtimeMs;if(s&&s.timestamp>=c&&JSON.stringify(s.sourceDependencies)===JSON.stringify(r)){let n=this.serverActions.get(e)??this.serverComponents.get(e);return n&&s.bundledDependencies.length>0&&(n.dependencies=s.bundledDependencies),await D.promises.writeFile(o,s.code,`utf-8`),await this.updateManifestForComponent(t,e,a,s.css),{componentId:t,bundlePath:k.join(this.options.outDir,a),success:!0}}let l=k.dirname(o);await D.promises.mkdir(l,{recursive:!0});let u=await this.buildSingleComponent(e,o),d=await this.writeComponentCssAsset(t,u.css),f=this.serverActions.get(e)??this.serverComponents.get(e);return this.buildCache.set(e,{code:u.code,css:d,timestamp:Date.now(),sourceDependencies:r,bundledDependencies:f?.dependencies??r}),await this.updateManifestForComponent(t,e,a,d),{componentId:t,bundlePath:k.join(this.options.outDir,a),success:!0}}manifestCache=null;async updateManifestForComponent(e,n,r,i=[]){let a=k.join(this.options.outDir,this.options.manifestPath),o;if(this.manifestCache)o=this.manifestCache;else if(D.existsSync(a)){let e=await D.promises.readFile(a,`utf-8`),n=t(e);n&&lr(n)?(o=n,this.manifestCache=o):(o={components:{},buildTime:new Date().toISOString()},this.manifestCache=o)}else o={components:{},buildTime:new Date().toISOString()},this.manifestCache=o;let s=this.serverComponents.get(n)??this.serverActions.get(n),c=k.join(this.options.outDir,r),l=M(k.resolve(this.projectRoot,c)).href;if(s)o.components[e]={id:e,filePath:n,relativePath:k.relative(this.projectRoot,n),bundlePath:r,moduleSpecifier:l,dependencies:[...s.dependencies],hasNodeImports:s.hasNodeImports,css:i};else{let t=await D.promises.readFile(n,`utf-8`);o.components[e]={id:e,filePath:n,relativePath:k.relative(this.projectRoot,n),bundlePath:r,moduleSpecifier:l,dependencies:this.extractDependencies(t,n),hasNodeImports:this.hasNodeImports(t,n),css:i}}o.buildTime=new Date().toISOString(),await D.promises.writeFile(a,JSON.stringify(o),`utf-8`),await this.writeRouteCssEntries(o),this.manifestCache=o}clearCache(){this.buildCache.clear(),this.manifestCache=null}invalidateBuildCacheFor(e){this.buildCache.delete(e)}async getTransformedComponentCode(e){return this.buildComponentCodeOnly(e)}};function fr(e,t){let n=[];for(let r of It(t))try{let t=J(r),i=D.readFileSync(r,`utf-8`),a=e.getModuleAnalysis(r,i);n.push({filePath:r,cacheKey:t,code:i,analysis:a})}catch(e){console.warn(`[server-build] Error reading ${r}:`,e instanceof Error?e.message:e)}return n}function pr(e,t){return(t??G(e)).hasComponentExport||m.test(e)||y.test(e)||re.test(e)}function mr(e,t,n,r,i){let a=k.basename(e);if(qn.test(a)||a.endsWith(`.d.ts`))return!1;let o=r??n.getModuleAnalysis(e,t);return o.directives.hasUseClient?!1:o.directives.hasUseServer?!0:!n.isOnlyImportedByClientComponents(e)&&ur(e,o,n.getHtmlOnlyImports(),i)&&pr(t,o)}function hr(e,t,n=[]){let r=fr(t,Lt(e,n));t.clearClientComponentFiles(),t.populateImportGraphFromFiles(r);let i=[],a=[];for(let{filePath:e,cacheKey:n,code:o,analysis:s}of r)s.directives.hasUseClient&&(a.push(e),t.recordClientComponent(e,o)),mr(e,o,t,s,n)&&(t.addServerComponent(e,o,s),i.push(e));return{serverComponentPaths:i,clientComponentPaths:a}}function gr(e={}){let t=null,n,r=!1,i={};return{name:`rari-server-build`,configResolved(a){n=a.root,r=a.command===`serve`;let o=new Set([`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]),s={},c=a.resolve.alias;Array.isArray(c)?c.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&!o.has(e.find)&&(s[e.find]=e.replacement)}):typeof c==`object`&&Object.entries(c).forEach(([e,t])=>{typeof t==`string`&&!o.has(e)&&(s[e]=t)}),i=s,t=new dr(n,{...e,alias:s})},buildStart(){if(!t)return;let e=A.env.NODE_ENV===`production`,r=[k.join(n,`dist`,`cache`,`og`),k.join(n,`dist`,`cache`,`images`)];e&&r.push(`/tmp/rari-og-cache`,`/tmp/rari-image-cache`);for(let e of r)try{D.existsSync(e)&&D.rmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[rari] Failed to clear cache ${e}:`,t)}let a=k.join(n,`src`);D.existsSync(a)&&hr(a,t,Object.values(i))},async closeBundle(){if(t){await t.buildServerComponents(),await t.buildSSRClientComponents();try{await t.buildMdxRegistry(e.mdx)}catch(e){console.warn(`[rari] Failed to build MDX component registry:`,e)}try{let{generateRobotsFile:e}=await import(`./robots-BGCTYwKN.mjs`);await e({appDir:k.join(n,`src`,`app`),outDir:k.join(n,`dist`)})}catch(e){console.warn(`[rari] Failed to generate robots.txt:`,e)}try{let{generateSitemapFiles:e}=await import(`./sitemap-1n5BIACA.mjs`);await e({appDir:k.join(n,`src`,`app`),outDir:k.join(n,`dist`),aliases:i})}catch(e){console.warn(`[rari] Failed to generate sitemap:`,e)}try{let{generateFeedFile:e}=await import(`./feed-Ixvy9L12.mjs`);await e({appDir:k.join(n,`src`,`app`),outDir:k.join(n,`dist`),aliases:i})}catch(e){console.warn(`[rari] Failed to generate feed:`,e)}}},async handleHotUpdate({file:e}){if(!t||!r)return;let i=k.relative(n,e).replace(x,`/`);if(!(!i.startsWith(`src/`)||!v.test(i)))try{let n=await D.promises.readFile(e,`utf-8`),r=t.getModuleAnalysis(e,n),i=t.hasComponent(e);if(!mr(e,n,t,r)){i&&t.removeComponent(e);return}i||t.addServerComponent(e,n,r),await t.rebuildComponent(e)}catch(e){console.error(`[rari] Build: Error rebuilding ${i}:`,e)}}}}const _r=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,vr=/import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g,yr=/import\s+(\w+)\s*,\s*\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g,br=/defineMdxComponents\s*\(\s*\{([\s\S]*?)\}\s*\)/;function xr(e,t,n){for(let r of t.split(`,`)){let t=r.trim();if(!t||(t=t.replace(/^type\s+/i,``).trim(),!t))continue;let i=t.split(/\s+as\s+/i),a=(i[1]??i[0]).trim();a&&n.set(a,e)}}function Sr(e){let t=new Map;for(let n of e.matchAll(yr))t.set(n[1],n[3]),xr(n[3],n[2],t);for(let n of e.matchAll(_r))t.set(n[1],n[2]);for(let n of e.matchAll(vr))xr(n[2],n[1],t);return t}function Cr(e){let t=[];for(let n of e.split(`,`)){let e=n.trim();if(!e)continue;let r=e.indexOf(`:`);if(r===-1){t.push({name:e,binding:e});continue}let i=e.slice(0,r).trim(),a=e.slice(r+1).trim();i&&a&&t.push({name:i,binding:a})}return t}function wr(e){try{return G(D.readFileSync(e,`utf-8`)).topLevelUseClient}catch{return!1}}function Tr(e){let{code:t,id:n,projectRoot:r,resolvedAlias:i}=e;if(!t.includes(`defineMdxComponents`)||t.includes(`__RARI_MDX_RESOLVED__`))return null;let a=br.exec(t);if(!a)return null;let o=Sr(t),s=Cr(a[1]);if(s.length===0)return null;let c=`defineMdxComponents(/* __RARI_MDX_RESOLVED__ */[\n${s.map(({name:e,binding:t})=>{let a=o.get(t);if(a==null||a===``)throw Error(`[rari/mdx] Could not resolve import for MDX component "${e}" (binding "${t}") in ${n}`);let s=le(a,n,i),c=Qe(s,r).replace(x,`/`),l=wr(s);return` { name: ${JSON.stringify(e)}, component: ${t}, id: ${JSON.stringify(c)}, client: ${l} }`}).join(`,
|
|
112
|
+
`)},\n])`;return t.replace(br,c)}function Er(e){return a(e)}function Dr(e){return a(e)}async function Or(e){let t=await import(e);return Er(t)?t:{}}function kr(e,t){e&&(e.notFound&&(t.notFound=!0),e.redirect!=null&&(t.redirect=typeof e.redirect==`string`?e.redirect:e.redirect.destination),e.revalidate!==void 0&&(t.revalidate=e.revalidate),e.props&&(t.props={...t.props,...e.props}))}async function Ar(e,t,n,r){typeof e.getData==`function`&&kr(await e.getData({params:t,searchParams:n}),r)}async function jr(e,t,n,r){typeof e.getServerSideProps==`function`&&kr(await e.getServerSideProps({params:t,searchParams:n}),r)}async function Mr(e,t,n){typeof e.getStaticProps==`function`&&kr(await e.getStaticProps({params:t}),n)}async function Nr(e,t,n){try{let r=await Or(e),i={props:{}};return await Ar(r,t,n,i),await jr(r,t,n,i),await Mr(r,t,i),i}catch(t){return console.error(`[rari] Router: Failed to extract server props from ${e}:`,t),{props:{}}}}async function Pr(e,t,n){try{let r=await Or(e);if(typeof r.generateMetadata==`function`){let e=await r.generateMetadata({params:t,searchParams:n});if(Dr(e))return e}return Dr(r.metadata)?r.metadata:{}}catch(t){return console.error(`[rari] Router: Failed to extract metadata from ${e}:`,t),{}}}async function Fr(e){try{let t=await be(e);return t==null?[]:r(t)?t:(c(e),[])}catch(t){return console.error(`[rari] Router: Failed to extract static params from ${e}:`,t),[]}}async function Ir(e){try{let t=await Or(e);return!!(t.getData??t.getServerSideProps??t.getStaticProps??t.generateMetadata??t.generateStaticParams)}catch{return!1}}const Lr=new Map;async function Rr(e,t,n,r=6e4){let i=`${e}:${JSON.stringify(t)}:${JSON.stringify(n)}`,a=Lr.get(i);if(a&&Date.now()-a.timestamp<r)return a.result;let o=await Nr(e,t,n);return Lr.set(i,{result:o,timestamp:Date.now()}),o}function zr(){Lr.clear()}function Br(e){for(let t of Lr.keys())t.startsWith(e)&&Lr.delete(t)}const Vr="[rari] Runtime dist not built. Run `pnpm build` in the rari package first.",Hr=/import\s+type\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Ur=/import\s+type\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Wr=/import\s+type\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Gr=/import\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Kr=/import\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,qr=/import\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,Jr=/import\s+["']\.\.?\/([^"']+)["'];?/g,Yr=/export\s+default\s+(?:async\s+)?function\s+(\w+)/,Xr=/^['"]use client['"];?\s*$/gm,Zr=/import\s+["']([^"']+)["']/g,Qr=/^[./@~#]/;function $r(e,t){for(let n of Object.keys(t))if(e===n||e.startsWith(`${n}/`))return!0;return!1}const ei=/import\s+\{[^}]*\}\s+from\s+['"]react['"]/,ti=/import\s+[^,\s]+\s*,\s*\{[^}]*\}\s+from\s+['"]react['"]/,ni=/import React(,\s*\{([^}]*)\})?\s+from\s+['"]react['"];?/,ri=/import\s+["']([^"']+)["']/g,ii=/from(\s*)(['"])(?:\.\/vendor\/react-flight-client\/index|rari\/runtime\/vendor\/react-flight-client\/index)\.mjs\2/g,ai=/\bJSX\b/,oi=/\{([^}]*)\}/,si=/^['"]use client['"];?\s*\n/,ci={remotePatterns:[],localPatterns:[],deviceSizes:p,imageSizes:f,formats:u,qualityAllowlist:d,minimumCacheTTL:60,maxCacheSize:l},li=new Map;async function ui(e){let t=li.get(e);if(t!=null&&t!==``)return t;let n=import.meta.url,r=j(n),i=k.dirname(r),a=[k.join(i,`runtime`,e),k.join(i,`../runtime`,e)];for(let t of a)try{let n=await D.promises.readFile(t,`utf-8`);return t.endsWith(`.ts`)&&(n=n.replace(Hr,(e,t,n)=>`import type ${t} from "rari/${n}";`),n=n.replace(Ur,(e,t,n)=>`import type ${t} from "rari/${n}";`),n=n.replace(Wr,(e,t,n)=>`import type ${t} from "rari/${n}";`),n=n.replace(Gr,(e,t,n)=>`import ${t} from "rari/${n}";`),n=n.replace(Kr,(e,t,n)=>`import ${t} from "rari/${n}";`),n=n.replace(qr,(e,t,n)=>`import ${t} from "rari/${n}";`),n=n.replace(Jr,(e,t)=>`import "rari/${t}";`)),li.set(e,n),n}catch(e){let n=o(e);n!==`ENOENT`&&n!==`EISDIR`&&console.warn(`[rari] Unexpected error reading ${t}:`,e)}throw Error(`Could not find ${e}. Tried: ${a.join(`, `)}`)}const di=k.dirname(j(import.meta.url)),fi=k.dirname(di);function pi(e){let t=[k.join(di,`runtime`,e),k.join(di,`../runtime`,e)];for(let e of t)if(D.existsSync(e))return e;return null}function mi(e){return e.startsWith(fi)}async function hi(){return ui(`rsc-client-runtime.mjs`)}async function gi(e,t){return(await ui(`entry-client.mjs`)).replace(`/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */`,e).replace(`/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */`,t)}async function _i(){return ui(`rsc-references.mjs`)}async function vi(e,t){let r=k.join(e,`src`),{getBinaryPath:i}=await import(`./platform.mjs`),a=i(),o=E(a,[`scan-images`,`--src`,r],{encoding:`utf8`,cwd:e,shell:!1,timeout:6e4});if(o.error)throw Error(`Failed to scan for image usage: ${o.error.message}`);if(o.signal)throw Error(`Failed to scan for image usage: process terminated by signal ${o.signal}`);if(o.status!==0)throw Error(`Failed to scan for image usage: ${o.stderr||o.stdout||`exit code ${o.status}`}`);let s;try{s={images:n(o.stdout,`images`)??[]}}catch(e){let t=e instanceof SyntaxError||e instanceof Error?e.message:String(e),n=(o.stdout||o.stderr||`(empty)`).slice(0,500);throw Error(`Failed to parse image scanner output as JSON: ${t}. Scanner output: ${n}`,{cause:e})}let c={...ci,...t.images,preoptimizeManifest:s.images},l=k.join(e,`dist`),u=k.join(l,`server`);D.existsSync(u)||D.mkdirSync(u,{recursive:!0});let d=k.join(u,`image.json`);D.writeFileSync(d,JSON.stringify(c))}function yi(e){return e}function bi(e={}){if(e.jsPoolSize!=null){let t=e.jsPoolSize;if(!Number.isInteger(t)||t<1||!Number.isFinite(t))throw Error(`jsPoolSize must be a finite positive integer; received ${String(t)}`)}let n=new Map,r=new Set,c=new Gt,l=null,u=null,d=null,f={},p=null;function m(){p=null}function h(){return p!=null&&p!==``||(p=sn(on({projectRoot:e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),mdxOptions:e.mdx,alias:f,cache:c}))),p}function g(e){return n.get(J(e))}function y(e,t){n.set(J(e),t)}function b(e){Ut(n,e)}function ee(e){r.add(J(e))}function ne(e){return r.has(J(e))}function re(e){r.delete(e);try{r.delete(D.realpathSync(e))}catch{r.delete(k.resolve(e))}}function oe(){let e=new Set(r);if(l)for(let t of l.getClientComponentPaths())e.add(t);return e}function se(e){let t={hasUseServer:!1,hasUseClient:!1},n=e.replace(x,`/`);if(!v.test(n)||!n.includes(`/src/`))return t;try{let n=c.get(e);t.hasUseServer=n.directives.hasUseServer,t.hasUseClient=n.directives.hasUseClient}catch{}return t}let S=null,C=null;function ue(){if(l)return l.getHtmlOnlyImports();let t=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),n=k.join(t,`index.html`);try{let e=D.statSync(n).mtimeMs;if(S!==null&&e===C)return S;C=e}catch{return S??=new Set,S}return S=xn(t),S}function w(e){if(e.includes(`node_modules`)||mi(e))return!1;let t=J(e);try{return ur(t,c.get(e),ue(),t)}catch{return!1}}function T(e,t){try{let n=new Set(_t(e));return(t?.hasDefaultExport??yt(e))&&n.add(`default`),[...n]}catch{return[]}}function de(t,n,r){let i=et(n,e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd()),a=Vn(t,i),o=a?.code??t;if(!r.topLevelUseServer)return a==null?t:(o+=`
|
|
113
|
+
|
|
114
|
+
if (import.meta.hot) {
|
|
115
|
+
import.meta.hot.accept(() => {
|
|
116
|
+
});
|
|
117
|
+
}`,o);let s=T(o,r);if(s.length===0&&a==null)return t;let c=JSON.stringify(i);Cn(o)?o+=`
|
|
118
|
+
`:o+=`
|
|
127
119
|
|
|
128
120
|
import {registerServerReference} from "react-server-dom-rari/server";
|
|
129
|
-
`;for(let e of
|
|
121
|
+
`;for(let e of s)if(e==="default"){let t=Yr.exec(o);if(t){let n=t[1];o+=`
|
|
130
122
|
// Register server reference for default export
|
|
131
|
-
`,
|
|
123
|
+
`,o+=`registerServerReference(${n}, ${c}, ${JSON.stringify(e)});\n`}else{let t=`__default_export__`,n=Nt(o,t);n!=null&&(o=n,o+=`
|
|
132
124
|
// Register server reference for default export
|
|
133
|
-
`,
|
|
134
|
-
`}}
|
|
135
|
-
`;return
|
|
125
|
+
`,o+=`if (typeof ${t} === "function") {\n`,o+=` registerServerReference(${t}, ${c}, ${JSON.stringify(e)});\n`,o+=`}
|
|
126
|
+
`)}}else if(a?.rewrittenExportNames.includes(e))continue;else o+=`\n// Register server reference for ${e}\n`,o+=`if (typeof ${e} === "function") {\n`,o+=` registerServerReference(${e}, ${c}, ${JSON.stringify(e)});\n`,o+=`}
|
|
127
|
+
`;return o+=`
|
|
136
128
|
|
|
137
129
|
if (import.meta.hot) {
|
|
138
130
|
import.meta.hot.accept(() => {
|
|
139
131
|
});
|
|
140
|
-
}`,
|
|
132
|
+
}`,o}function E(t,n,r){let i=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),a=w(n);if(r.topLevelUseServer){let e=T(t,r);if(e.length===0)return``;let a=et(n,i),o=`import { createServerReference } from "virtual:react-flight-client";
|
|
141
133
|
`;o+=`import { callServer } from "rari/runtime/call-server";
|
|
142
|
-
`;for(let t of e){let e=`${a}#${t}`,n=JSON.stringify(e);t==="default"
|
|
143
|
-
`;for(let e of o){if(e==="default"){let e=`Attempted to call the default export of ${n} from the server but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;c+=`export default `,c+=`registerClientReference(function() {`,c+=`throw new Error(${JSON.stringify(e)});`}else{let t=`Attempted to call ${e}() from the server but ${e} is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;c+=`export const ${e} = `,c+=`registerClientReference(function() {`,c+=`throw new Error(${JSON.stringify(t)});`}c+=`},`,c+=`${s},`,c+=`${JSON.stringify(e)});\n`}return c}function
|
|
144
|
-
`);for(let t of e){let e=t.match(xn),r=e?null:cr.exec(t);if(!e&&!r)continue;let i=e?.[2]??r[4];if(!i)continue;let a=ce(i,n,f);k.existsSync(a)&&(y(a,`client`),te(a))}return A(t,n,o)}if(g(n)===`client`||re(n))return A(t,n,o);if(T(n)){if(y(n,`server`),a.name===`rsc`||a.name===`ssr`)return D(t,n,o);{let e=O(t,n,o);return e=`// HMR acceptance for server component
|
|
134
|
+
`;for(let t of e){let e=`${a}#${t}`,n=JSON.stringify(e);o+=t==="default"?`export default createServerReference(${n}, callServer);\n`:`export const ${t} = createServerReference(${n}, callServer);\n`}return o}if(a)return console.warn(`[rari] Server component ${n} should not be imported in client bundle`),``;if(!r.topLevelUseClient)return t;let o=T(t,r);if(o.length===0)return``;let s=JSON.stringify(n),c=`import {registerClientReference} from "react-server-dom-rari/server";
|
|
135
|
+
`;for(let e of o){if(e==="default"){let e=`Attempted to call the default export of ${n} from the server but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;c+=`export default `,c+=`registerClientReference(function() {`,c+=`throw new Error(${JSON.stringify(e)});`}else{let t=`Attempted to call ${e}() from the server but ${e} is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;c+=`export const ${e} = `,c+=`registerClientReference(function() {`,c+=`throw new Error(${JSON.stringify(t)});`}c+=`},`,c+=`${s},`,c+=`${JSON.stringify(e)});\n`}return c}function O(e,t,n){return!n.topLevelUseClient||T(e,n).length===0?e:e.replace(Xr,``)}let M=!1;async function me(){let e=`http://localhost:${F()}`;try{let t=(await fetch(`${e}/_rari/health`,{signal:AbortSignal.timeout(1e3)})).ok;return M=t,t}catch{return M=!1,!1}}let N=null;async function ge(e){return await me()?!0:(N??=(async()=>{try{let t=Date.now()+e,n=50;for(;Date.now()<t;){if(await new Promise(e=>{setTimeout(e,Math.min(n,t-Date.now()))}),await me())return!0;n=Math.min(n*2,500)}return!1}finally{N=null}})(),N)}let P=[{name:`rari`,config(t,{command:n}){if(t.define??={},n===`serve`||A.env.RARI_SERVER_URL!=null&&A.env.RARI_SERVER_URL!==``||A.env.RARI_HOST!=null&&A.env.RARI_HOST!==``){let e=F(),n;if(A.env.RARI_SERVER_URL!=null&&A.env.RARI_SERVER_URL!==``)n=A.env.RARI_SERVER_URL;else if(A.env.RARI_HOST!=null&&A.env.RARI_HOST!==``){let t=A.env.RARI_HOST.startsWith(`http`)?A.env.RARI_HOST:`http://${A.env.RARI_HOST}`;n=t.replace(ae,``).includes(`:`)?t:`${t}:${e}`}else n=`http://localhost:${e}`;t.define[`import.meta.env.RARI_SERVER_URL`]=JSON.stringify(n)}let r=typeof t.css?.modules==`object`?t.css.modules:{};if(t.css={...t.css,transformer:t.css?.transformer??`lightningcss`,modules:{...r,pattern:Xn}},n===`build`){let n=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),r=k.join(n,`index.html`);if(D.existsSync(r))try{let e=D.readFileSync(r,`utf-8`),n=[];for(let t of e.matchAll(Zr)){let e=t[1];if(e.startsWith(`/src/`)&&v.test(e)){let t=e.slice(1),r=k.basename(t,k.extname(t));n.push({path:t,name:r})}}if(n.length>0){t.build??={},t.build.rolldownOptions??={};let e=t.build.rolldownOptions.input??{main:`./index.html`},r;r=typeof e==`string`?{main:e}:Array.isArray(e)?{main:e[0]??`./index.html`}:{...e},n.forEach(({path:e,name:t})=>{r[t]=`./${e}`}),t.build.rolldownOptions.input=r}}catch(e){console.warn(`[rari] Error parsing index.html for build inputs:`,e)}}t.resolve??={};let c=t.resolve,l=Array.isArray(c.dedupe)?c.dedupe:[],u=[`react`,`react-dom`];c.dedupe=[...new Set([...l,...u])];let d=[];i(c.alias)?d=c.alias:a(c.alias)&&(d=s(c.alias));let f=new Set(d.map(e=>String(e.find)));try{let e=j(import.meta.resolve(`react`)),t=j(import.meta.resolve(`react-dom/client`)),n=j(import.meta.resolve(`react/jsx-runtime`)),r=[];f.has(`react/jsx-runtime`)||r.push({find:`react/jsx-runtime`,replacement:n});try{let e=j(import.meta.resolve(`react/jsx-dev-runtime`));f.has(`react/jsx-dev-runtime`)||r.push({find:`react/jsx-dev-runtime`,replacement:e})}catch(e){o(e)!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving react/jsx-dev-runtime:`,e)}f.has(`react`)||r.push({find:`react`,replacement:e}),f.has(`react-dom/client`)||r.push({find:`react-dom/client`,replacement:t}),r.length>0&&(c.alias=[...d,...r])}catch(e){o(e)!==`ENOENT`&&console.warn(`[rari] Unexpected error configuring React aliases:`,e)}t.environments??={},t.environments.rsc={resolve:{conditions:[`react-server`,`node`,`import`]},...t.environments.rsc},t.environments.ssr={resolve:{conditions:[`node`,`import`]},...t.environments.ssr},t.environments.client={resolve:{conditions:[`browser`,`import`]},...t.environments.client},t.optimizeDeps??={},t.optimizeDeps.include??=[];for(let e of[`react`,`react-dom`,`react-dom/client`,`react-dom/server`,`react/jsx-runtime`,`react/jsx-dev-runtime`])t.optimizeDeps.include.includes(e)||t.optimizeDeps.include.push(e);if(t.optimizeDeps.exclude??=[],t.optimizeDeps.exclude.includes(`rari`)||t.optimizeDeps.exclude.push(`rari`),n===`build`)for(let e of[`rsc`,`ssr`,`client`]){let n=t.environments[e];n.build!=null&&(n.build.rolldownOptions??={})}t.server??={},t.server.proxy??={};let p=F();if(t.server.proxy[`/api`]={target:`http://localhost:${p}`,changeOrigin:!0,secure:!1,ws:!0},t.server.proxy[`/_rari`]={target:`http://localhost:${p}`,changeOrigin:!0,secure:!1,ws:!0},n===`build`){t.build??={},t.build.rolldownOptions??={},t.build.rolldownOptions.input??={main:`./index.html`},t.build.rolldownOptions.output??={};let e=Array.isArray(t.build.rolldownOptions.output)?t.build.rolldownOptions.output:[t.build.rolldownOptions.output];for(let t of e){if(t.codeSplitting!==!1&&typeof t.codeSplitting!=`object`&&(t.codeSplitting={}),typeof t.codeSplitting==`object`){t.codeSplitting.groups??=[];let e=t.codeSplitting.groups;t.codeSplitting.groups.push({name(t){if(t.includes(`node_modules`)){for(let n of e)if(n.test!=null){let e=!1;if(typeof n.test==`function`?e=!!n.test(t):n.test instanceof RegExp?e=n.test.test(t):typeof n.test==`string`&&(e=t.includes(n.test)),e)return null}return t.includes(`node_modules/react-dom`)?`react-dom`:t.includes(`node_modules/react`)?`react`:`vendor`}return null}})}t.chunkFileNames??=e=>e.moduleIds.some(e=>se(e).hasUseServer)?`client/actions/[name]-[hash].js`:e.moduleIds.some(e=>se(e).hasUseClient)?`client/components/[name]-[hash].js`:`assets/[name]-[hash].js`}}t.environments.client.build??={},t.environments.client.build.rolldownOptions??={},t.environments.client.build.rolldownOptions.input??={},t.environments.client.build.rolldownOptions.external??=[];let m=t.environments.client.build.rolldownOptions.external;if(Array.isArray(m)){let e=m.indexOf(`react-server-dom-webpack/client`);e!==-1&&m.splice(e,1)}return t},configResolved(e){let t=new Set([`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]),n=e.resolve.alias;Array.isArray(n)?n.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&!t.has(e.find)&&(f[e.find]=e.replacement)}):typeof n==`object`&&Object.entries(n).forEach(([e,n])=>{typeof n==`string`&&!t.has(e)&&(f[e]=n)})},async transform(t,n){if(n.endsWith(`.mdx`)&&m(),/\.(?:tsx?|jsx?|mts|mjs)$/.test(n)&&t.includes(`defineMdxComponents`)){let r=Tr({code:t,id:n,projectRoot:e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),resolvedAlias:f});if(r!=null&&r!==``)return{code:r,map:null}}if(!v.test(n))return null;let r=t,i=!1;if(e.experimental?.useCache||e.experimental?.useCacheRemote){let e=await Un();if(e){let r=e(t,n);r!=null&&r!==``&&(t=r,i=!0)}}let a=this.environment,o=c.get(n,r);if(o.topLevelUseClient){y(n,`client`),ee(n);for(let e of o.importSources){if(!Qr.test(e)&&!$r(e,f))continue;let t=le(e,n,f);D.existsSync(t)&&(y(t,`client`),ee(t))}return O(t,n,o)}if(g(n)===`client`||ne(n))return O(t,n,o);if(w(n)){if(y(n,`server`),a.name===`rsc`||a.name===`ssr`)return de(t,n,o);{let e=E(t,n,o);return e=`// HMR acceptance for server component
|
|
145
136
|
if (import.meta.hot) {
|
|
146
137
|
import.meta.hot.accept();
|
|
147
138
|
if (typeof globalThis !== 'undefined') {
|
|
@@ -151,9 +142,8 @@ if (import.meta.hot) {
|
|
|
151
142
|
}
|
|
152
143
|
}
|
|
153
144
|
|
|
154
|
-
${e}`,e}}if(o.topLevelUseServer)return y(n,`server`),a.name===`rsc`||a.name===`ssr`?
|
|
155
|
-
`),
|
|
156
|
-
`),t&&(u=t+u),!u.includes(`Suspense`)){let e=dr.exec(u);e&&(e[1]&&!e[2].includes(`Suspense`)?u=u.replace(e[0],e[0].replace(hr,`{ Suspense, $1 }`)):e[1]||(u=u.replace(e[0],`import React, { Suspense } from 'react';`)))}let r=M.env.NODE_ENV!==`production`;return(u.includes(`</`)||u.includes(`/>`)||mr.test(u))&&r&&(u=`'use client';\n\n${u}`,y(n,`client`)),u}return i?t:null},async configureServer(n){let r=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:M.cwd(),i=j.join(r,`src`);await kr(r,e);let a=async()=>{try{let t=new hn(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:f,csp:e.csp,cacheControl:e.cacheControl,cache:e.cache,action:e.action,jsPoolSize:e.jsPoolSize,htmlLimitedBots:e.htmlLimitedBots,experimental:e.experimental,moduleAnalysisCache:c});if(l=t,d||=new At(t,M.env.SERVER_PORT!=null&&M.env.SERVER_PORT!==``?Number(M.env.SERVER_PORT):Number(M.env.PORT!=null&&M.env.PORT!==``?M.env.PORT:M.env.RSC_PORT!=null&&M.env.RSC_PORT!==``?M.env.RSC_PORT:3e3)),k.existsSync(i)){let e=yn(i,t,Object.values(f));e.serverComponentPaths.length>0&&n.ws.send({type:`custom`,event:`rari:server-components-registry`,data:{serverComponents:e.serverComponentPaths}})}let a=await t.getTransformedComponentsForDevelopment(),o=`http://localhost:${M.env.SERVER_PORT!=null&&M.env.SERVER_PORT!==``?Number(M.env.SERVER_PORT):Number(M.env.PORT!=null&&M.env.PORT!==``?M.env.PORT:M.env.RSC_PORT!=null&&M.env.RSC_PORT!==``?M.env.RSC_PORT:3e3)}`;for(let e of a)try{if(e.id.startsWith(`app/`)||e.isAction)continue;let t=await fetch(`${o}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Runtime: Failed to register component ${e.id}:`,t instanceof Error?t.message:String(t))}}catch(e){console.error(`[rari] Runtime: Component discovery failed:`,e instanceof Error?e.message:String(e))}},o=async()=>{try{let e=`http://localhost:${M.env.SERVER_PORT!=null&&M.env.SERVER_PORT!==``?Number(M.env.SERVER_PORT):Number(M.env.PORT!=null&&M.env.PORT!==``?M.env.PORT:M.env.RSC_PORT!=null&&M.env.RSC_PORT!==``?M.env.RSC_PORT:3e3)}`,t=x();for(let n of t){let t=j.relative(M.cwd(),n),r=j.basename(n).replace(ae,``);try{await fetch(`${e}/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:r,file_path:t,export_name:`default`})})}catch(e){console.error(`[rari] Runtime: Failed to pre-register client component ${r}:`,e)}}}catch(e){console.error(`[rari] Runtime: Failed to pre-register client components:`,e)}},s=async()=>{if(u)return;let{getBinaryPath:t,getInstallationInstructions:r}=await import(`./platform.mjs`),i;try{i=t()}catch(e){console.error(`rari binary not found`),console.error(` ${e instanceof Error?e.message:String(e)}`),console.error(r());return}let s=M.env.SERVER_PORT!=null&&M.env.SERVER_PORT!==``?Number(M.env.SERVER_PORT):Number(M.env.PORT!=null&&M.env.PORT!==``?M.env.PORT:M.env.RSC_PORT!=null&&M.env.RSC_PORT!==``?M.env.RSC_PORT:3e3),c=M.env.NODE_ENV===`production`?`production`:`development`,l=n.config.server.port,d=[`--mode`,c,`--port`,s.toString(),`--host`,`127.0.0.1`];u=de(i,d,{stdio:[`ignore`,`pipe`,`pipe`],cwd:M.cwd(),env:{...M.env,RUST_LOG:M.env.RUST_LOG!=null&&M.env.RUST_LOG!==``?M.env.RUST_LOG:`error`,RARI_VITE_PORT:l.toString(),...e.jsPoolSize!=null&&(M.env.RARI_JS_POOL_SIZE==null||M.env.RARI_JS_POOL_SIZE===``)?{RARI_JS_POOL_SIZE:String(e.jsPoolSize)}:{},...e.htmlLimitedBots!=null&&(M.env.RARI_HTML_LIMITED_BOTS==null||M.env.RARI_HTML_LIMITED_BOTS===``)?{RARI_HTML_LIMITED_BOTS:e.htmlLimitedBots}:{}}}),u.stdout?.on(`data`,e=>{let t=e.toString().trim();t&&console.error(t)}),u.stderr?.on(`data`,e=>{let t=e.toString().trim();t&&!t.includes(`warning`)&&console.error(t)}),u.on(`error`,e=>{P=!1,console.error(`Failed to start rari server:`,e.message),e.message.includes(`ENOENT`)&&console.error(` Binary not found. Please ensure rari is properly installed.`)}),u.on(`exit`,(e,t)=>{u=null,P=!1,t?console.error(`rari server stopped by signal ${t}`):e===0?console.error(`rari server stopped successfully`):e&&console.error(`rari server exited with code ${e}`)});let f=!1;for(let e=0;e<20&&(f=await F(),!f);e++)await new Promise(e=>{setTimeout(e,500)});f?(await a(),await o()):console.error(`Server failed to become ready for component registration`)},p=async e=>{try{if(!T(e))return;l??await a();let t=l;if(t==null)return;let n=c.getSource(e);t.addServerComponent(e,n);let r=await t.getTransformedComponentsForDevelopment();if(r.length===0)return;let i=`http://localhost:${M.env.SERVER_PORT!=null&&M.env.SERVER_PORT!==``?Number(M.env.SERVER_PORT):Number(M.env.PORT!=null&&M.env.PORT!==``?M.env.PORT:M.env.RSC_PORT!=null&&M.env.RSC_PORT!==``?M.env.RSC_PORT:3e3)}`;for(let e of r)try{let t=await fetch(`${i}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Failed to register component`,`${e.id}:`,t instanceof Error?t.message:String(t))}}catch(t){console.error(`[rari] Targeted HMR failed for`,`${e}:`,t instanceof Error?t.message:String(t)),setTimeout(()=>{a()},1e3)}};s().catch(e=>{console.error(`[rari] Failed to start Rust server:`,e)}),n.middlewares.use((e,t,n)=>{(async()=>{let r=e.headers.accept;if(r!=null&&r!==``&&r.includes(`text/x-component`)&&e.url!=null&&e.url!==``&&!e.url.startsWith(`/api`)&&!e.url.startsWith(`/rsc`)&&!e.url.includes(`.`)){if(!P){let e=await F();if(!e){let n=Date.now();for(;Date.now()-n<1e4&&(e=await F(),!e);)await new Promise(e=>{setTimeout(e,100)});if(!e){console.error(`[rari] Rust server not ready, cannot proxy RSC request`),t.headersSent||(t.statusCode=503,t.end(`Server not ready`));return}}}let n=M.env.SERVER_PORT!=null&&M.env.SERVER_PORT!==``?Number(M.env.SERVER_PORT):Number(M.env.PORT!=null&&M.env.PORT!==``?M.env.PORT:M.env.RSC_PORT!=null&&M.env.RSC_PORT!==``?M.env.RSC_PORT:3e3),r=`http://localhost:${n}${e.url}`;try{let i={};for(let[t,n]of Object.entries(e.headers))typeof n==`string`?i[t]=n:Array.isArray(n)&&(i[t]=n.join(`,`));i.host=`localhost:${n}`,i[`accept-encoding`]=`identity`;let a=await fetch(r,{method:e.method,headers:i});if(t.statusCode=a.status,a.headers.forEach((e,n)=>{n.toLowerCase()!==`content-encoding`&&t.setHeader(n,e)}),a.body){let e=a.body.getReader();try{let n=!1;for(;!n;){let{done:r,value:i}=await e.read();n=r,!n&&i!=null&&t.write(ue.from(i))}t.end()}catch(e){console.error(`[rari] Stream error:`,e),t.headersSent||(t.statusCode=500),t.end()}}else t.end();return}catch(e){console.error(`[rari] Failed to proxy RSC request:`,e),t.headersSent||(t.statusCode=500,t.end(`Internal Server Error`));return}}n()})()}),n.watcher.on(`change`,e=>{(async()=>{v.test(e)&&(ee(e),ie(e),c.invalidate(e)),v.test(e)&&e.includes(i)&&(T(e)?(n.ws.send({type:`custom`,event:`rari:register-server-component`,data:{filePath:e}}),await p(e)):setTimeout(()=>{a()},1e3))})()}),n.middlewares.use(`/api/vite/hmr-transform`,(e,n)=>{if(e.method!==`POST`){n.statusCode=405,n.end(`Method Not Allowed`);return}let r=``;e.on(`data`,e=>{r+=e.toString()}),e.on(`end`,()=>{(async()=>{try{let e=t(r),i=e&&typeof e.filePath==`string`?e.filePath:void 0;if(i==null||i===``){n.statusCode=400,n.end(JSON.stringify({error:`filePath is required`}));return}await p(i),n.statusCode=200,n.setHeader(`Content-Type`,`application/json`),n.end(JSON.stringify({success:!0,filePath:i,message:`Component transformation completed`}))}catch(e){n.statusCode=500,n.setHeader(`Content-Type`,`application/json`),n.end(JSON.stringify({success:!1,error:e instanceof Error?e.message:String(e)}))}})()})}),n.httpServer?.on(`close`,()=>{if(d&&=(d.dispose(),null),u){let e=u;u=null,P=!1;let t=!1,n=setTimeout(()=>{t||e.kill(`SIGKILL`)},5e3);n.unref(),e.once(`exit`,()=>{t=!0,clearTimeout(n)}),e.kill(`SIGTERM`);return}P=!1})},resolveId(e,t){if(e===`virtual:rsc-integration`||e===`virtual:rsc-integration.ts`)return`virtual:rsc-integration.ts`;if(e===`virtual:rari-entry-client`||e===`virtual:rari-entry-client.ts`)return`virtual:rari-entry-client.ts`;if(e===`virtual:react-flight-client`||e===`virtual:react-flight-client.ts`)return`virtual:react-flight-client.ts`;if(e===`virtual:app-router-provider`||e===`virtual:app-router-provider.tsx`)return`virtual:app-router-provider.tsx`;if(e===`virtual:error-boundary-wrapper`||e===`virtual:error-boundary-wrapper.tsx`)return`virtual:error-boundary-wrapper.tsx`;if(jt(e)||e===`virtual:rari-mdx-components`||e===`virtual:rari-mdx-components.ts`)return`virtual:rari-mdx-components.ts`;if(e===`react-server-dom-webpack/client`||e===`react-server-dom-webpack/client.browser`)return`virtual:react-flight-client.ts`;if(e===`./LoadingErrorBoundary`||e===`./LoadingErrorBoundary.tsx`)return`virtual:loading-error-boundary.tsx`;if(e===`react-server-dom-rari/server`)return e;if(t!=null&&t!==``&&t.startsWith(`virtual:`)&&e.startsWith(`./`)){let t=wr(j.basename(e));if(t!=null&&t!==``)return t}if(t!=null&&t!==``&&t.startsWith(`virtual:`)&&e.startsWith(`../`)){let n=import.meta.url,r=N(n),i=j.dirname(r),a=null,o=[j.join(i,`runtime`),j.join(i,`../runtime`)];for(let e of o)if(k.existsSync(e)){a=e;break}if(a!=null&&a!==``){let t=j.join(a,e);if(k.existsSync(t))return t;let n=j.join(a,`../dist`,j.basename(e));if(k.existsSync(n))return n}else console.warn(`[rari] Runtime directory not found, attempting fallback resolution for virtual import.\n Importer: ${t}\n ID: ${e}\n Current Dir: ${i}\n Hint: Runtime lookup failed, trying currentDir as fallback`);let s=j.join(i,e);if(k.existsSync(s))return s;let c=j.join(i,`../dist`,j.basename(e));if(k.existsSync(c))return c}if(M.env.NODE_ENV===`production`)try{let t=j.resolve(e);if(k.existsSync(t)&&T(t))return{id:e,external:!0}}catch(t){o(t)!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving server component:`,e,t)}return null},async load(t){if(v.test(t)&&this.environment.name===`client`)try{let e=c.get(t);if(e.topLevelUseServer)return O(c.getSource(t),t,e)}catch{}if(t===`virtual:rari-mdx-components.ts`)return h();if(t===`virtual:rari-entry-client.ts`){let t=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:M.cwd(),n=St(gt(j.join(t,`src`),Object.values(f)),c),r=new Set([...x(),...n]),i=[{path:`rari/image`,exports:[`Image`]},{path:`virtual:error-boundary-wrapper.tsx`,exports:[`ErrorBoundaryWrapper`]}],a=[...r].filter(e=>{try{return c.get(e).topLevelUseClient}catch{return!1}}).map(e=>{let t=j.relative(M.cwd(),e).replace(b,`/`),n=t.replace(v,``),r=t.startsWith(`..`)?e.replace(b,`/`):t,i=!1,a=``;try{if(!c.get(e).hasDefaultExport){let t=c.getSource(e).match(ne);t&&(i=!0,a=t[1])}}catch(t){o(t)!==`ENOENT`&&console.warn(`[rari] Unexpected error reading component for export detection:`,e,t)}let s=i?a:`default`,l=i?a:j.basename(e,j.extname(e)),u=r.replace(b,`/`),d=u.startsWith(`/`)||_.test(u)?u:`/${u}`;return` "${r}": {
|
|
145
|
+
${e}`,e}}if(o.topLevelUseServer)return y(n,`server`),a.name===`rsc`||a.name===`ssr`?de(t,n,o):E(t,n,o);let s=g(n);if(s===`server`)return a.name===`rsc`||a.name===`ssr`?de(t,n,o):E(t,n,o);if(s===`client`)return O(t,n,o);y(n,`unknown`);let l=t,u=!1,d=!1,p=n.includes(`entry-client`),h=[],_=new Set;for(let e of gt(t)){if(e.typeOnly||e.sideEffectOnly||!Qr.test(e.source)&&!$r(e.source,f))continue;let t=le(e.source,n,f),r=g(t)===`client`||D.existsSync(t)&&c.get(t).topLevelUseClient;if(r&&(y(t,`client`),ee(t)),!r||p||a.name!==`rsc`&&a.name!==`ssr`)continue;let i=pn(e,t);if(i.code!==``){for(let e of i.helpers)_.add(e);h.push({start:e.start,end:e.end,replacement:i.code}),u=!0,d=!0}}for(let{start:e,end:t,replacement:n}of[...h].sort((e,t)=>t.start-e.start))l=l.slice(0,e)+n+l.slice(t);if(_.size>0&&(l=un(l,`react-server-dom-rari/server`,[..._])),u){let e=l.includes(`import React`)||ei.test(l)||ti.test(l),t=``;if(d&&!e&&(t+=`import React from 'react';
|
|
146
|
+
`),t&&(l=t+l),!l.includes(`Suspense`)){let e=ni.exec(l);e&&(e[1]&&!e[2].includes(`Suspense`)?l=l.replace(e[0],e[0].replace(oi,`{ Suspense, $1 }`)):e[1]||(l=l.replace(e[0],`import React, { Suspense } from 'react';`)))}let r=A.env.NODE_ENV!==`production`;return(l.includes(`</`)||l.includes(`/>`)||ai.test(l))&&r&&(l=`'use client';\n\n${l}`,y(n,`client`)),l}return i?t:null},async configureServer(n){let r=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),i=k.join(r,`src`);await vi(r,e);let a=async()=>{try{let t=new dr(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:f,csp:e.csp,cacheControl:e.cacheControl,cache:e.cache,action:e.action,jsPoolSize:e.jsPoolSize,htmlLimitedBots:e.htmlLimitedBots,experimental:e.experimental,moduleAnalysisCache:c});if(l=t,d??=new $t(t,F()),D.existsSync(i)){let e=hr(i,t,Object.values(f));e.serverComponentPaths.length>0&&n.ws.send({type:`custom`,event:`rari:server-components-registry`,data:{serverComponents:e.serverComponentPaths}})}let a=await t.getTransformedComponentsForDevelopment(),o=`http://localhost:${F()}`;await Promise.all(a.map(async e=>{try{if(e.id.startsWith(`app/`)||e.isAction)return;let t=await fetch(`${o}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Runtime: Failed to register component ${e.id}:`,t instanceof Error?t.message:String(t))}}))}catch(e){console.error(`[rari] Runtime: Component discovery failed:`,e instanceof Error?e.message:String(e))}},o=async()=>{try{let e=`http://localhost:${F()}`,t=oe();await Promise.all([...t].map(async t=>{let n=k.relative(A.cwd(),t),r=k.basename(t).replace(ie,``);try{await fetch(`${e}/_rari/register-client`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:r,file_path:n,export_name:`default`})})}catch(e){console.error(`[rari] Runtime: Failed to pre-register client component ${r}:`,e)}}))}catch(e){console.error(`[rari] Runtime: Failed to pre-register client components:`,e)}},s=async()=>{if(u)return;let{getBinaryPath:t,getInstallationInstructions:r}=await import(`./platform.mjs`),i;try{i=t()}catch(e){console.error(`rari binary not found`),console.error(` ${e instanceof Error?e.message:String(e)}`),console.error(r());return}let s=F(),c=A.env.NODE_ENV===`production`?`production`:`development`,l=n.config.server.port,d=[`--mode`,c,`--port`,s.toString(),`--host`,`127.0.0.1`];u=pe(i,d,{stdio:[`ignore`,`pipe`,`pipe`],cwd:A.cwd(),env:{...A.env,RUST_LOG:A.env.RUST_LOG!=null&&A.env.RUST_LOG!==``?A.env.RUST_LOG:`error`,RARI_VITE_PORT:l.toString(),...e.jsPoolSize!=null&&(A.env.RARI_JS_POOL_SIZE==null||A.env.RARI_JS_POOL_SIZE===``)?{RARI_JS_POOL_SIZE:String(e.jsPoolSize)}:{},...e.htmlLimitedBots!=null&&(A.env.RARI_HTML_LIMITED_BOTS==null||A.env.RARI_HTML_LIMITED_BOTS===``)?{RARI_HTML_LIMITED_BOTS:e.htmlLimitedBots}:{}}}),u.stdout?.on(`data`,e=>{let t=e.toString().trim();t&&console.error(t)}),u.stderr?.on(`data`,e=>{let t=e.toString().trim();t&&!t.includes(`warning`)&&console.error(t)}),u.on(`error`,e=>{M=!1,console.error(`Failed to start rari server:`,e.message),e.message.includes(`ENOENT`)&&console.error(` Binary not found. Please ensure rari is properly installed.`)}),u.on(`exit`,(e,t)=>{u=null,M=!1,t?console.error(`rari server stopped by signal ${t}`):e===0?console.error(`rari server stopped successfully`):e&&console.error(`rari server exited with code ${e}`)}),await ge(1e4)?(await a(),await o()):console.error(`Server failed to become ready for component registration`)},p=async e=>{try{if(!w(e))return;l??await a();let t=l;if(t==null)return;let n=c.getSource(e);t.addServerComponent(e,n);let r=Yt(t.getImportGraph(),[e]);r.add(e);let i=await t.getTransformedComponentsForDevelopment(e=>r.has(e));if(i.length===0)return;let o=`http://localhost:${F()}`;await Promise.all(i.map(async e=>{try{let t=await fetch(`${o}/_rari/register`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({component_id:e.id,component_code:e.code})});if(!t.ok){let e=await t.text();throw Error(`HTTP ${t.status}: ${e}`)}}catch(t){console.error(`[rari] Failed to register component`,`${e.id}:`,t instanceof Error?t.message:String(t))}}))}catch(t){console.error(`[rari] Targeted HMR failed for`,`${e}:`,t instanceof Error?t.message:String(t))}};s().catch(e=>{console.error(`[rari] Failed to start Rust server:`,e)}),n.middlewares.use((e,t,n)=>{(async()=>{let r=e.headers.accept;if(r!=null&&r!==``&&r.includes(`text/x-component`)&&e.url!=null&&e.url!==``&&!e.url.startsWith(`/api`)&&!e.url.startsWith(`/rsc`)&&!e.url.includes(`.`)){if(!M&&!await ge(1e4)){console.error(`[rari] Rust server not ready, cannot proxy RSC request`),t.headersSent||(t.statusCode=503,t.end(`Server not ready`));return}let n=F(),r=`http://localhost:${n}${e.url}`;try{let i={};for(let[t,n]of Object.entries(e.headers))typeof n==`string`?i[t]=n:Array.isArray(n)&&(i[t]=n.join(`,`));i.host=`localhost:${n}`,i[`accept-encoding`]=`identity`;let a=await fetch(r,{method:e.method,headers:i});if(t.statusCode=a.status,a.headers.forEach((e,n)=>{n.toLowerCase()!==`content-encoding`&&t.setHeader(n,e)}),a.body){let e=a.body.getReader();try{let n=!1;for(;!n;){let{done:r,value:i}=await e.read();n=r,!n&&i!=null&&t.write(fe.from(i))}t.end()}catch(e){console.error(`[rari] Stream error:`,e),t.headersSent||(t.statusCode=500),t.end()}}else t.end();return}catch(e){console.error(`[rari] Failed to proxy RSC request:`,e),t.headersSent||(t.statusCode=500,t.end(`Internal Server Error`));return}}n()})()}),n.watcher.on(`change`,e=>{(async()=>{v.test(e)&&(b(e),re(e),c.invalidate(e)),v.test(e)&&e.includes(i)&&w(e)&&(n.ws.send({type:`custom`,event:`rari:register-server-component`,data:{filePath:e}}),await p(e))})()}),n.middlewares.use(`/api/vite/hmr-transform`,(e,n)=>{if(e.method!==`POST`){n.statusCode=405,n.end(`Method Not Allowed`);return}let r=``;e.on(`data`,e=>{r+=e.toString()}),e.on(`end`,()=>{(async()=>{try{let e=t(r),i=e&&typeof e.filePath==`string`?e.filePath:void 0;if(i==null||i===``){n.statusCode=400,n.end(JSON.stringify({error:`filePath is required`}));return}await p(i),n.statusCode=200,n.setHeader(`Content-Type`,`application/json`),n.end(JSON.stringify({success:!0,filePath:i,message:`Component transformation completed`}))}catch(e){n.statusCode=500,n.setHeader(`Content-Type`,`application/json`),n.end(JSON.stringify({success:!1,error:e instanceof Error?e.message:String(e)}))}})()})}),n.httpServer?.on(`close`,()=>{if(d&&=(d.dispose(),null),u){let e=u;u=null,M=!1;let t=!1,n=setTimeout(()=>{t||e.kill(`SIGKILL`)},5e3);n.unref(),e.once(`exit`,()=>{t=!0,clearTimeout(n)}),e.kill(`SIGTERM`);return}M=!1})},resolveId(e,t){if(e===`virtual:rsc-integration`||e===`virtual:rsc-integration.ts`)return`virtual:rsc-integration.ts`;if(e===`virtual:rari-entry-client`||e===`virtual:rari-entry-client.ts`)return`virtual:rari-entry-client.ts`;if(e===`virtual:react-flight-client`||e===`virtual:react-flight-client.ts`)return`virtual:react-flight-client.ts`;if(e===`virtual:app-router-provider`||e===`virtual:app-router-provider.tsx`)return`virtual:app-router-provider.tsx`;if(e===`virtual:error-boundary-wrapper`||e===`virtual:error-boundary-wrapper.tsx`)return`virtual:error-boundary-wrapper.tsx`;if(en(e)||e===`virtual:rari-mdx-components`||e===`virtual:rari-mdx-components.ts`)return`virtual:rari-mdx-components.ts`;if(e===`react-server-dom-webpack/client`||e===`react-server-dom-webpack/client.browser`)return`virtual:react-flight-client.ts`;if(e===`./LoadingErrorBoundary`||e===`./LoadingErrorBoundary.tsx`)return`virtual:loading-error-boundary.tsx`;if(e===`react-server-dom-rari/server`)return e;if(t!=null&&t!==``&&t.startsWith(`virtual:`)&&e.startsWith(`./`)){let t=pi(k.basename(e));if(t!=null&&t!==``)return t}if(t!=null&&t!==``&&t.startsWith(`virtual:`)&&e.startsWith(`../`)){let n=import.meta.url,r=j(n),i=k.dirname(r),a=null,o=[k.join(i,`runtime`),k.join(i,`../runtime`)];for(let e of o)if(D.existsSync(e)){a=e;break}if(a!=null&&a!==``){let t=k.join(a,e);if(D.existsSync(t))return t;let n=k.join(a,`../dist`,k.basename(e));if(D.existsSync(n))return n}else console.warn(`[rari] Runtime directory not found, attempting fallback resolution for virtual import.\n Importer: ${t}\n ID: ${e}\n Current Dir: ${i}\n Hint: Runtime lookup failed, trying currentDir as fallback`);let s=k.join(i,e);if(D.existsSync(s))return s;let c=k.join(i,`../dist`,k.basename(e));if(D.existsSync(c))return c}if(A.env.NODE_ENV===`production`)try{let t=k.resolve(e);if(D.existsSync(t)&&w(t))return{id:e,external:!0}}catch(t){o(t)!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving server component:`,e,t)}return null},async load(t){if(v.test(t)&&this.environment.name===`client`)try{let e=c.get(t);if(e.topLevelUseServer)return E(c.getSource(t),t,e)}catch{}if(t===`virtual:rari-mdx-components.ts`)return h();if(t===`virtual:rari-entry-client.ts`){let t=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),n=Wt(Lt(k.join(t,`src`),Object.values(f)),c),r=new Set([...oe(),...n]),i=[{path:`rari/image`,exports:[`Image`]},{path:`virtual:error-boundary-wrapper.tsx`,exports:[`ErrorBoundaryWrapper`]}],a=[...r].filter(e=>{try{return c.get(e).topLevelUseClient}catch{return!1}}).map(e=>{let t=k.relative(A.cwd(),e).replace(x,`/`),n=t.replace(v,``),r=t.startsWith(`..`)?e.replace(x,`/`):t,i=!1,a=``;try{if(!c.get(e).hasDefaultExport){let t=c.getSource(e).match(te);t&&(i=!0,a=t[1])}}catch(t){o(t)!==`ENOENT`&&console.warn(`[rari] Unexpected error reading component for export detection:`,e,t)}let s=i?a:`default`,l=i?a:k.basename(e,k.extname(e)),u=r.replace(x,`/`),d=u.startsWith(`/`)||_.test(u)?u:`/${u}`;return` "${r}": {
|
|
157
147
|
id: "${n}",
|
|
158
148
|
path: "${r}",
|
|
159
149
|
exportName: "${s}",
|
|
@@ -178,7 +168,7 @@ globalThis['~clientComponents']["${e.path}"] = globalThis['~clientComponents']["
|
|
|
178
168
|
globalThis['~clientComponents']["${e.path}"].component = ExternalModule${t};
|
|
179
169
|
globalThis['~clientComponentPaths'] = globalThis['~clientComponentPaths'] || {};
|
|
180
170
|
globalThis['~clientComponentPaths']["${e.path}"] = "${n}";`)).join(`
|
|
181
|
-
`);return
|
|
171
|
+
`);return gi(s,[`
|
|
182
172
|
const lazyComponentRegistry = {
|
|
183
173
|
${a}
|
|
184
174
|
};
|
|
@@ -191,9 +181,9 @@ for (const [path, config] of Object.entries(lazyComponentRegistry)) {
|
|
|
191
181
|
globalThis['~clientComponentPaths'][path] = config.id;
|
|
192
182
|
}
|
|
193
183
|
`,l].filter(Boolean).join(`
|
|
194
|
-
`))}if(t===`react-server-dom-rari/server`)return
|
|
184
|
+
`))}if(t===`react-server-dom-rari/server`)return _i();if(t===`virtual:app-router-provider.tsx`){let e=pi(`AppRouterProvider.mjs`);if(e!=null&&e!==``)return D.readFileSync(e,`utf-8`);throw Error(Vr)}if(t===`virtual:loading-error-boundary.tsx`){let e=pi(`LoadingErrorBoundary.mjs`);if(e!=null&&e!==``)return D.readFileSync(e,`utf-8`);throw Error(Vr)}if(t===`virtual:error-boundary-wrapper.tsx`){let e=pi(`ErrorBoundaryWrapper.mjs`);if(e!=null&&e!==``){let t=D.readFileSync(e,`utf-8`);if(!t.includes(`import React`)&&!t.includes(`from "react"`)&&!t.includes(`from 'react'`)){let e=si.exec(t);if(e){let n=e[0];return`
|
|
195
185
|
${n}import * as React from 'react';\n${t.slice(n.length)}`}return`
|
|
196
|
-
import * as React from 'react';\n${t}`}return t}throw Error(
|
|
186
|
+
import * as React from 'react';\n${t}`}return t}throw Error(Vr)}if(t===`virtual:rsc-integration.ts`)return(await hi()).replace(ii,(e,t,n)=>`from${t}${n}virtual:react-flight-client.ts${n}`);if(t===`virtual:react-flight-client.ts`){let e,t;try{let n=k.dirname(j(import.meta.resolve(`react-server-dom-webpack/package.json`)));e=k.join(n,`cjs/react-server-dom-webpack-client.browser.production.js`),t=k.join(n,`cjs/react-server-dom-webpack-client.edge.production.js`)}catch{let n=k.dirname(j(import.meta.url)),r=k.resolve(n,`../../node_modules`);e=k.join(r,`react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js`),t=k.join(r,`react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js`)}return{code:`
|
|
197
187
|
import * as React from 'react';
|
|
198
188
|
import * as ReactDOM from 'react-dom';
|
|
199
189
|
import { callServer as rariCallServer } from 'rari/runtime/call-server';
|
|
@@ -201,7 +191,7 @@ import { callServer as rariCallServer } from 'rari/runtime/call-server';
|
|
|
201
191
|
const module = { exports: {} };
|
|
202
192
|
const exports = module.exports;
|
|
203
193
|
(function(module, exports, require) {
|
|
204
|
-
${
|
|
194
|
+
${Ze(Xe(D.readFileSync(e,`utf-8`),D.readFileSync(t,`utf-8`)))}
|
|
205
195
|
})(module, module.exports, function require(id) {
|
|
206
196
|
if (id === 'react') return React;
|
|
207
197
|
if (id === 'react-dom') return ReactDOM;
|
|
@@ -217,4 +207,4 @@ export function createFromReadableStream(stream, options) {
|
|
|
217
207
|
export const createServerReference = module.exports.createServerReference;
|
|
218
208
|
export const encodeReply = module.exports.encodeReply;
|
|
219
209
|
export const createTemporaryReferenceSet = module.exports.createTemporaryReferenceSet;
|
|
220
|
-
`}}if(t.endsWith(`.mjs`)&&
|
|
210
|
+
`}}if(t.endsWith(`.mjs`)&&D.existsSync(t))try{let n=e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),r=D.realpathSync(t),i=k.relative(n,r),a=!i.startsWith(`..`)&&!k.isAbsolute(i),o=r.includes(`${k.sep}node_modules${k.sep}`),s=r.includes(`${k.sep}packages${k.sep}rari${k.sep}`)||r.includes(`${k.sep}node_modules${k.sep}rari${k.sep}`);return a||o||s?D.readFileSync(t,`utf-8`):(console.warn(`[rari] Refusing to load .mjs file outside project root and node_modules: ${t}`),null)}catch(e){return console.warn(`[rari] Error validating .mjs file path: ${t}`,e),null}},async handleHotUpdate({file:e,server:t}){if(ce(),e.endsWith(`.mdx`)&&m(),!v.test(e))return;if(b(e),re(e),c.invalidate(e),m(),e.includes(`/dist/`)||e.includes(`\\dist\\`))return[];let n=d?.detectComponentType(e)??`unknown`,r=e.includes(`/app/`)||e.includes(`\\app\\`),i=(e,t)=>e.endsWith(`${t}.tsx`)||e.endsWith(`${t}.jsx`)||e.endsWith(`${t}.ts`)||e.endsWith(`${t}.js`),a=[`page`,`layout`,`template`,`loading`,`error`,`not-found`].some(t=>i(e,t));if(!(r&&a)&&n!==`client`&&n===`server`)return d&&await d.handleServerComponentUpdate(e,t),[]},transformIndexHtml:{order:`pre`,handler(e){let t=[];for(let n of e.matchAll(ri)){let e=n[1];e.startsWith(`/src/`)&&t.push(e)}let n=[];n.push({tag:`script`,attrs:{type:`module`},children:`import 'virtual:rari-entry-client';`,injectTo:`head-prepend`}),t.length>0&&n.push(...t.map(e=>({tag:`script`,attrs:{type:`module`,src:e},injectTo:`head-prepend`})));let r=e;r=r.replace(/^\s*import\s+["']\/src\/[^"']+["'];?\s*$/gm,``),r=r.replace(/^\s*import\s+["']virtual:rari-entry-client["'];?\s*$/gm,``);let i;do i=r,r=r.replace(/<script\s+type=["']module["'][^>]*>\s*<\/script>/gi,``);while(r!==i);return{html:r,tags:n}}},async writeBundle(){await vi(e.projectRoot!=null&&e.projectRoot!==``?e.projectRoot:A.cwd(),e)}},{name:`rari:patch-react-server-dom-webpack`,transform(e){if(!e.includes(`__webpack_require__`)&&!e.includes(`__webpack_chunk_load__`))return null;let t=e;return t.includes(`__webpack_chunk_load__`)&&(t=t.replaceAll(`__webpack_chunk_load__`,`__rari_chunk_load__`)),t.includes(`__webpack_require__.u`)&&(t=t.replaceAll(`__webpack_require__.u`,`({}).u`)),t.includes(`__webpack_require__`)&&(t=t.replaceAll(`__webpack_require__`,`__rari_rsc_require__`)),t===e?null:{code:t,map:null}}},gr({...e.serverBuild,csp:e.csp,cacheControl:e.cacheControl,cache:e.cache,action:e.action,jsPoolSize:e.jsPoolSize,htmlLimitedBots:e.htmlLimitedBots,experimental:e.experimental,moduleAnalysisCache:c,mdx:e.mdx})];return e.proxy!==!1&&P.push(_e(e.proxy??{})),e.router!==!1&&P.push(Je(e.router??{})),he(P)}function xi(e){return{...e,plugins:[bi(),...e.plugins??[]]}}export{e as ApiResponse,zr as clearPropsCache,Br as clearPropsCacheForComponent,xi as defineRariConfig,yi as defineRariOptions,Pr as extractMetadata,Nr as extractServerProps,Rr as extractServerPropsWithCache,Fr as extractStaticParams,Ne as generateAppRouteManifest,Ir as hasServerSideDataFetching,bi as rari,_e as rariProxy,Je as rariRouter};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rari",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.15.
|
|
4
|
+
"version": "0.15.9",
|
|
5
5
|
"description": "Runtime Accelerated Rendering Infrastructure (rari)",
|
|
6
6
|
"author": "Ryan Skinner",
|
|
7
7
|
"license": "MIT",
|
|
@@ -142,27 +142,26 @@
|
|
|
142
142
|
"dependencies": {
|
|
143
143
|
"lightningcss": "^1.33.0",
|
|
144
144
|
"react-server-dom-webpack": "^19.2.8",
|
|
145
|
-
"rolldown": "^1.2.
|
|
145
|
+
"rolldown": "^1.2.3"
|
|
146
146
|
},
|
|
147
147
|
"optionalDependencies": {
|
|
148
|
-
"@rari/use-cache": "0.15.
|
|
149
|
-
"rari-darwin-arm64": "0.15.
|
|
150
|
-
"rari-darwin-x64": "0.15.
|
|
151
|
-
"rari-linux-arm64": "0.15.
|
|
152
|
-
"rari-linux-x64": "0.15.
|
|
153
|
-
"rari-win32-arm64": "0.15.
|
|
154
|
-
"rari-win32-x64": "0.15.
|
|
148
|
+
"@rari/use-cache": "0.15.9",
|
|
149
|
+
"rari-darwin-arm64": "0.15.9",
|
|
150
|
+
"rari-darwin-x64": "0.15.9",
|
|
151
|
+
"rari-linux-arm64": "0.15.9",
|
|
152
|
+
"rari-linux-x64": "0.15.9",
|
|
153
|
+
"rari-win32-arm64": "0.15.9",
|
|
154
|
+
"rari-win32-x64": "0.15.9"
|
|
155
155
|
},
|
|
156
156
|
"devDependencies": {
|
|
157
157
|
"@mdx-js/mdx": "^3.1.1",
|
|
158
158
|
"@types/node": "^26.1.2",
|
|
159
|
-
"@types/react": "^19.2.
|
|
160
|
-
"@types/react-dom": "^19.2.
|
|
159
|
+
"@types/react": "^19.2.18",
|
|
160
|
+
"@types/react-dom": "^19.2.4",
|
|
161
161
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
162
162
|
"typescript-7": "npm:typescript@^7.0.2",
|
|
163
|
-
"vite-plus": "^0.2.
|
|
163
|
+
"vite-plus": "^0.2.8",
|
|
164
164
|
"@rari/deploy": "0.0.0",
|
|
165
|
-
"@rari/lint": "0.0.0",
|
|
166
165
|
"@rari/logger": "0.0.0"
|
|
167
166
|
},
|
|
168
167
|
"scripts": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=[640,750,828,1080,1200,1920,2048,3840],t=[16,32,48,64,96,128,256,384],n=[`avif`],r=[25,50,75,100],i=60,a=100*1024*1024;export{i as a,a as i,n,r as o,t as r,e as t};
|