rari 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/cli.mjs +3 -3
  2. package/dist/client.d.mts +1 -1
  3. package/dist/image/index.mjs +1 -1
  4. package/dist/{index-Dtbijzle.d.mts → index-DuCX6G_W.d.mts} +1 -1
  5. package/dist/index.d.mts +3 -3
  6. package/dist/index.mjs +1 -1
  7. package/dist/mdx.mjs +1 -1
  8. package/dist/preload-components-TyCxVZPF.mjs +1 -0
  9. package/dist/proxy/RariRequest.d.mts +1 -1
  10. package/dist/proxy/RariResponse.d.mts +1 -1
  11. package/dist/{railway-C_RKUxHY.mjs → railway-BlR0qYfX.mjs} +1 -1
  12. package/dist/regex-constants-BM4Vd-_c.mjs +1 -0
  13. package/dist/{render-D25Vkzyw.mjs → render-Cn2qdfZI.mjs} +1 -1
  14. package/dist/routes-DEvXO96u.mjs +1 -0
  15. package/dist/runtime/AppRouterProvider.mjs +4 -4
  16. package/dist/runtime/entry-client.mjs +1 -1
  17. package/dist/runtime/react-server-dom-rari-client.mjs +2 -2
  18. package/dist/runtime/rsc-client-runtime.mjs +2 -2
  19. package/dist/server-build-emJwCUjS.mjs +177 -0
  20. package/dist/sitemap-generator-Di-7pmiz.mjs +4 -0
  21. package/dist/utils-BTyXoHUx-Cp3JPZPF.mjs +1 -0
  22. package/dist/vite-BTJjUXqs.mjs +79 -0
  23. package/dist/vite.d.mts +3 -3
  24. package/dist/vite.mjs +1 -1
  25. package/package.json +8 -8
  26. package/dist/preload-components-CwqehMyC.mjs +0 -1
  27. package/dist/routes-DbsqVAaM.mjs +0 -1
  28. package/dist/server-build-DM-rQz-k.mjs +0 -177
  29. package/dist/sitemap-generator-D3T5zkl3.mjs +0 -4
  30. package/dist/utils-CvELqhML-BOdGyCyF.mjs +0 -1
  31. package/dist/vite-C4gs8tq5.mjs +0 -79
  32. /package/dist/{constants-CmqZuM5B.mjs → constants-DZAg-dr0.mjs} +0 -0
  33. /package/dist/{get-client-component-CR5zDUvd.mjs → get-client-component-CpMI09nb.mjs} +0 -0
  34. /package/dist/{robots-generator-DlnLLn5V.mjs → robots-generator-Bo5MHa-v.mjs} +0 -0
  35. /package/dist/{server-config-B0xinLcw.d.mts → server-config-BLpfK714.d.mts} +0 -0
  36. /package/dist/{types-FjFDidgJ.d.mts → types-BQ-op_Tc.d.mts} +0 -0
@@ -1,177 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DR3Ue2cl.mjs";import t from"node:fs";import n from"node:path";import r from"node:process";import{build as i}from"rolldown";var a=e({ServerComponentBuilder:()=>o,createServerBuildPlugin:()=>c,scanDirectory:()=>s}),o=class{serverComponents=new Map;serverActions=new Map;options;projectRoot;buildCache=new Map;htmlOnlyImports=new Set;fileImporters=new Map;getComponentCount(){return this.serverComponents.size+this.serverActions.size}constructor(e,t={}){this.projectRoot=e;let i=t.rscDir||`server`;this.options={outDir:t.outDir||n.join(e,`dist`),rscDir:i,manifestPath:t.manifestPath||n.join(i,`manifest.json`),serverConfigPath:t.serverConfigPath||n.join(i,`config.json`),minify:t.minify??r.env.NODE_ENV===`production`,alias:t.alias||{},define:t.define,csp:t.csp,rateLimit:t.rateLimit,spamBlocker:t.spamBlocker},this.parseHtmlImports()}parseHtmlImports(){let e=n.join(this.projectRoot,`index.html`);if(t.existsSync(e))try{let r=t.readFileSync(e,`utf-8`);for(let e of r.matchAll(/import\s*\(\s*["']([^"']+)["']\s*\)|import\s+["']([^"']+)["']/g)){let t=e[1]||e[2];if(t.startsWith(`/src/`)){let e=n.join(this.projectRoot,t.slice(1));this.htmlOnlyImports.add(e)}}}catch(e){console.warn(`[server-build] Error parsing index.html:`,e)}}isHtmlOnlyImport(e){return this.htmlOnlyImports.has(e)}isServerComponent(e){if(e.includes(`node_modules`)||this.isHtmlOnlyImport(e))return!1;try{if(!t.existsSync(e))return!1;let n=t.readFileSync(e,`utf-8`).split(`
2
- `),r=!1,i=!1;for(let e of n){let t=e.trim();if(!(t.startsWith(`//`)||t.startsWith(`/*`)||!t)){if(t===`'use client'`||t===`"use client"`||t===`'use client';`||t===`"use client";`){r=!0;break}if(t===`'use server'`||t===`"use server"`||t===`'use server';`||t===`"use server";`){i=!0;break}if(t)break}}return!r&&!i}catch{return!1}}isClientComponent(e){try{if(!t.existsSync(e))return!1;let n=t.readFileSync(e,`utf-8`),r=[`'use client'`,`"use client"`,`/* @client */`,`// @client`],i=n.trim();return r.some(e=>i.startsWith(e)||n.includes(e))}catch{return!1}}buildImportGraph(e){this.fileImporters.clear();let r=e=>{if(!t.existsSync(e))return;let i=t.readdirSync(e,{withFileTypes:!0});for(let a of i){let i=n.join(e,a.name);if(a.isDirectory()){if(a.name===`node_modules`)continue;r(i)}else if(a.isFile()&&/\.(?:tsx?|jsx?)$/.test(a.name))try{let e=t.readFileSync(i,`utf-8`),r=/from\s+['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)|import\s+['"]([^'"]+)['"]/g,a;for(a=r.exec(e);a!==null;){let o=a[1]||a[2]||a[3],s=null;if(o.startsWith(`./`)||o.startsWith(`../`)){let e=n.dirname(i);s=n.resolve(e,o)}else if(o.startsWith(`@/`)){let e=o.slice(2);s=n.join(this.projectRoot,`src`,e)}if(s){let e=[``,`.ts`,`.tsx`,`.js`,`.jsx`],n=null;for(let r of e){let e=s+r;if(t.existsSync(e)&&t.statSync(e).isFile()){n=e;break}}n&&(this.fileImporters.has(n)||this.fileImporters.set(n,new Set),this.fileImporters.get(n).add(i))}a=r.exec(e)}}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error building import graph:`,i,e)}}};r(e)}isOnlyImportedByClientComponents(e){let t=this.fileImporters.get(e);if(!t||t.size===0)return!1;for(let e of t)if(!this.isClientComponent(e)&&!this.isOnlyImportedByClientComponents(e))return!1;return!0}addServerComponent(e){let n=t.readFileSync(e,`utf-8`);if(this.isServerAction(n)){let t=this.extractDependencies(n),r=this.hasNodeImports(n);this.serverActions.set(e,{filePath:e,originalCode:n,dependencies:t,hasNodeImports:r});return}if(!this.isServerComponent(e))return;let r=this.extractDependencies(n),i=this.hasNodeImports(n);this.serverComponents.set(e,{filePath:e,originalCode:n,dependencies:r,hasNodeImports:i})}isServerAction(e){let t=e.split(`
3
- `);for(let e of t){let t=e.trim();if(!(t.startsWith(`//`)||t.startsWith(`/*`)||!t)){if(t===`'use server'`||t===`"use server"`||t===`'use server';`||t===`"use server";`)return!0;if(t)break}}return!1}extractDependencies(e){let t=[],n=/import(?:\s+(?:\w+|\{[^}]*\}|\*\s+as\s+\w+)(?:\s*,\s*(?:\w+|\{[^}]*\}|\*\s+as\s+\w+))*\s+from\s+)?['"]([^'"]+)['"]/g,r;for(;r=n.exec(e),r!==null;){let e=r[1];!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`node:`)&&!this.isNodeBuiltin(e)&&t.push(e)}return[...new Set(t)]}isNodeBuiltin(e){return[`fs`,`path`,`os`,`crypto`,`util`,`stream`,`events`,`process`,`buffer`,`url`,`querystring`,`zlib`,`http`,`https`,`net`,`tls`,`child_process`,`cluster`,`worker_threads`].includes(e)}hasNodeImports(e){return e.includes(`from 'node:`)||e.includes(`from "node:`)||e.includes(`from 'fs'`)||e.includes(`from "fs"`)||e.includes(`from 'path'`)||e.includes(`from "path"`)||e.includes(`from 'os'`)||e.includes(`from "os"`)||e.includes(`from 'crypto'`)||e.includes(`from "crypto"`)||e.includes(`from 'util'`)||e.includes(`from "util"`)||e.includes(`from 'stream'`)||e.includes(`from "stream"`)||e.includes(`from 'events'`)||e.includes(`from "events"`)}async getTransformedComponentsForDevelopment(){let e=[];for(let[t]of this.serverComponents){let r=n.relative(this.projectRoot,t),i=this.getComponentId(r),a=await this.buildComponentCodeOnly(t);e.push({id:i,code:a})}for(let[t]of this.serverActions){let r=n.relative(this.projectRoot,t),i=this.getComponentId(r),a=await this.buildComponentCodeOnly(t);e.push({id:i,code:a})}return e}transformComponentImportsToGlobal(e){let r=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,i=[];for(let a of e.matchAll(r)){let[e,r,o]=a;if(!o.startsWith(`.`)&&!o.startsWith(`@`)&&!o.startsWith(`~`)&&!o.startsWith(`#`))continue;let s=null;if(o.startsWith(`.`)){if(o.includes(`/components/`)){let a=o.match(/\/components\/(\w+)(?:\.tsx?|\.jsx?)?$/);if(a){let o=a[1],s=[n.resolve(this.projectRoot,`src`,`components`,`${o}.tsx`),n.resolve(this.projectRoot,`src`,`components`,`${o}.ts`),n.resolve(this.projectRoot,`src`,`components`,`${o}.jsx`),n.resolve(this.projectRoot,`src`,`components`,`${o}.js`)],c=!1;for(let e of s)if(t.existsSync(e)&&this.isClientComponent(e)){c=!0;break}if(!c)continue;let l=`// Component reference: ${o}
4
- const ${r} = (props) => {
5
- let Component = globalThis['~rsc']?.components?.['components/${o}']
6
- || globalThis['~rsc']?.modules?.['components/${o}']?.default
7
- || globalThis['components/${o}'];
8
-
9
- if (Component && typeof Component === 'object' && Component.default) {
10
- Component = Component.default;
11
- }
12
-
13
- if (!Component) {
14
- throw new Error('Component components/${o} not loaded');
15
- }
16
-
17
- if (typeof Component !== 'function') {
18
- throw new Error('Component components/${o} is not a function, got: ' + typeof Component);
19
- }
20
-
21
- return Component(props);
22
- }`;i.push({original:e,replacement:l})}}continue}let c=this.options.alias||{};for(let[e,t]of Object.entries(c))if(o.startsWith(`${e}/`)||o===e){let r=o.slice(e.length);s=n.join(t,r);break}if(s){let a=s.match(/[/\\]components[/\\](\w+)(?:\.tsx?|\.jsx?)?$/);if(a){let o=a[1],c=n.isAbsolute(s)?s:n.resolve(this.projectRoot,s),l=[c,`${c}.tsx`,`${c}.ts`,`${c}.jsx`,`${c}.js`],u=!1,d=c;for(let e of l)if(t.existsSync(e)){d=e,this.isClientComponent(e)&&(u=!0);break}if(!u)continue;let f=n.relative(this.projectRoot,d).replace(/\\/g,`/`).replace(/\.(tsx?|\.jsx?)$/,``).replace(/[^\w/-]/g,`_`).replace(/^src\//,``),p=`// Component reference: ${o}
23
- const ${r} = (props) => {
24
- let Component = globalThis['~rsc']?.components?.['${f}']
25
- || globalThis['~rsc']?.modules?.['${f}']?.default
26
- || globalThis['${f}'];
27
-
28
- if (Component && typeof Component === 'object' && Component.default) {
29
- Component = Component.default;
30
- }
31
-
32
- if (!Component) {
33
- throw new Error('Component ${f} not loaded');
34
- }
35
-
36
- if (typeof Component !== 'function') {
37
- throw new Error('Component ${f} is not a function, got: ' + typeof Component);
38
- }
39
-
40
- return Component(props);
41
- }`;i.push({original:e,replacement:p})}}}let a=e;for(let{original:e,replacement:t}of i)a=a.replace(e,t);return a}isPageComponent(e){return e.includes(`/app/`)||e.includes(`\\app\\`)}createBuildPlugins(e,r,i,a,o=!1){let s=n.dirname(a),c=n.basename(a).match(/^proxy\.(?:tsx?|jsx?|mts|mjs)$/),l=this,u=new Map,d=new Map;return[{name:`virtual-module`,resolveId(r,i){if(r===e)return r;if(i===e&&(r.startsWith(`./`)||r.startsWith(`../`))){let e=n.resolve(s,r);for(let n of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let r=e+n;if(t.existsSync(r)&&t.statSync(r).isFile())return r}for(let r of[`.ts`,`.tsx`,`.js`,`.jsx`]){let i=n.join(e,`index${r}`);if(t.existsSync(i))return i}return e}return null},load(t){return t===e?{code:r,moduleType:i}:null}},{name:`resolve-client-server-boundaries`,resolveId:(r,i)=>{if(!i||i.includes(`node_modules`)||i.includes(`/packages/rari/dist`)||r.startsWith(`node:`)||l.isNodeBuiltin(r)||r===`react`||r===`react-dom`||r===`react/jsx-runtime`||r===`react/jsx-dev-runtime`)return null;let a=null,o=l.options.alias||{};for(let[e,t]of Object.entries(o))if(r.startsWith(`${e}/`)||r===e){let i=r.slice(e.length),o=n.join(t,i);a=n.isAbsolute(o)?o:n.resolve(l.projectRoot,o);break}if(!a&&(r.startsWith(`./`)||r.startsWith(`../`))){let t=i===e?s:n.dirname(i);a=n.resolve(t,r)}if(a)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let r=a+e;if(t.existsSync(r)&&t.statSync(r).isFile()){if(l.isClientComponent(r)){let e=n.relative(l.projectRoot,r),t=e.startsWith(`..`)?r:e;return u.set(r,t),{id:`\0client-ref:${r}`}}try{let e=t.readFileSync(r,`utf-8`).split(`
42
- `);for(let t of e){let e=t.trim();if(!(e.startsWith(`//`)||e.startsWith(`/*`)||!e)){if(e===`'use server'`||e===`"use server"`||e===`'use server';`||e===`"use server";`){let e=n.relative(l.projectRoot,r),t=e.startsWith(`..`)?r:e;return d.set(r,t),{id:`\0server-action:${r}`}}if(e)break}}}catch(e){console.error(`[rari] Failed to read file for server action detection: ${r}`,e)}break}}return null},load(e){if(e.startsWith(`\0client-ref:`)){let t=e.slice(12),r=n.relative(l.projectRoot,t),i=u.get(t)||(r.startsWith(`..`)?t:r);return{code:`
43
- function registerClientReference(clientReference, id, exportName) {
44
- const key = id + '#' + exportName;
45
- const clientProxy = {};
46
- Object.defineProperty(clientProxy, '$$typeof', {
47
- value: Symbol.for('react.client.reference'),
48
- enumerable: false
49
- });
50
- Object.defineProperty(clientProxy, '$$id', {
51
- value: key,
52
- enumerable: false
53
- });
54
- Object.defineProperty(clientProxy, '$$async', {
55
- value: false,
56
- enumerable: false
57
- });
58
- try {
59
- if (typeof globalThis['~rari']?.bridge !== 'undefined' &&
60
- typeof globalThis['~rari'].bridge.registerClientReference === 'function') {
61
- globalThis['~rari'].bridge.registerClientReference(key, id, exportName);
62
- }
63
- } catch (error) {
64
- console.error('[rari] Build: Failed to register client reference:', error);
65
- }
66
- return clientProxy;
67
- }
68
-
69
- export default registerClientReference(null, ${JSON.stringify(i)}, "default");
70
- `,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15);return{code:`export * from ${JSON.stringify(t)};`,moduleType:`js`}}return null}},{name:`use-transformed-server-components`,resolveId:(e,r)=>{if(!o)return null;if(e.startsWith(`file://`)){let n=e.replace(/^file:\/\//,``);return t.existsSync(n)?{id:`\0transformed:${n}`}:null}let i=null,a=l.options.alias||{};for(let[t,r]of Object.entries(a))if(e.startsWith(`${t}/`)||e===t){let a=e.slice(t.length),o=n.join(r,a);i=n.isAbsolute(o)?o:n.resolve(l.projectRoot,o);break}let c=r?.startsWith(`\0`)?s:r?n.dirname(r):s;if(!i&&(e.startsWith(`./`)||e.startsWith(`../`))&&(i=n.resolve(c,e)),!i||c.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let r=i+e;if(t.existsSync(r)&&t.statSync(r).isFile()){if(l.isClientComponent(r))return null;let e=n.join(l.projectRoot,`src`);if(!r.startsWith(e))return null;let i=n.relative(e,r),a=n.join(l.options.outDir,l.options.rscDir,i.replace(/\.(tsx?|jsx?)$/,`.js`));if(t.existsSync(a))return{id:`\0transformed:${a}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let n=e.slice(13);return{code:t.readFileSync(n,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let r=l.options.alias||{};for(let[i,a]of Object.entries(r))if(e.startsWith(`${i}/`)||e===i){let r=e.slice(i.length),o=n.join(a,r),s=n.isAbsolute(o)?o:n.resolve(l.projectRoot,o);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let n=s+e;if(t.existsSync(n)&&t.statSync(n).isFile())return n}for(let e of[`.ts`,`.tsx`,`.js`,`.jsx`]){let r=n.join(s,`index${e}`);if(t.existsSync(r))return r}return s}return null}},{name:`resolve-rari-proxy`,resolveId:e=>{if(c&&e===`rari`){let e=n.resolve(l.projectRoot,`node_modules/rari/dist/proxy/RariResponse.mjs`);if(t.existsSync(e))return e;let r=n.resolve(l.projectRoot,`node_modules/rari/src/proxy/RariResponse.ts`);if(t.existsSync(r))return r}return null}},{name:`externalize-deps`,resolveId:e=>e.startsWith(`\0`)?null:e.startsWith(`node:`)||l.isNodeBuiltin(e)||[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`rari/image`].includes(e)?{id:e,external:!0}:e===`rari`||e===`rari/client`?null:!e.startsWith(`.`)&&!e.startsWith(`/`)?{id:e,external:!0}:null}]}async buildComponentCodeOnly(e){let a=await t.promises.readFile(e,`utf-8`),o=this.transformClientImports(a,e),s=this.isPageComponent(e),c=s?this.transformComponentImportsToGlobal(o):o,l=n.extname(e),u;u=l===`.tsx`?`tsx`:l===`.ts`?`ts`:l===`.jsx`?`jsx`:`js`;let d=`\0virtual:${e}`,f=await i({input:d,platform:`node`,write:!1,output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${u}`]:u},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(r.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(d,c,u,e,s)});if(!f.output||f.output.length===0)throw Error(`No output generated from Rolldown`);let p=f.output.find(e=>e.type===`chunk`&&e.isEntry);if(!p||p.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let m=p.code;return m=`// Built: ${new Date().toISOString()}\n${m}`,m}async buildServerComponents(){let e=n.join(this.options.outDir,this.options.rscDir);await t.promises.mkdir(e,{recursive:!0});let r={react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`},i=this.options.alias||{};for(let[e,t]of Object.entries(i)){let i=n.isAbsolute(t)?t:n.resolve(this.projectRoot,t);r[`${e}/`]=`file://${i}/`}let a={components:{},importMap:{imports:r},version:`1.0.0`,buildTime:new Date().toISOString()};for(let[e,r]of this.serverComponents){if(this.isPageComponent(e))continue;let i=n.relative(this.projectRoot,e),o=this.getComponentId(i),s=n.join(this.options.rscDir,`${o}.js`),c=n.join(this.options.outDir,s),l=n.dirname(c);await t.promises.mkdir(l,{recursive:!0}),await this.buildSingleComponent(e,c);let u=`file://${n.resolve(this.projectRoot,c)}`;a.components[o]={id:o,filePath:e,relativePath:i,bundlePath:s,moduleSpecifier:u,dependencies:r.dependencies,hasNodeImports:r.hasNodeImports}}for(let[e,r]of this.serverComponents){if(!this.isPageComponent(e))continue;let i=n.relative(this.projectRoot,e),o=this.getComponentId(i),s=n.join(this.options.rscDir,`${o}.js`),c=n.join(this.options.outDir,s),l=n.dirname(c);await t.promises.mkdir(l,{recursive:!0}),await this.buildSingleComponent(e,c);let u=`file://${n.resolve(this.projectRoot,c)}`;a.components[o]={id:o,filePath:e,relativePath:i,bundlePath:s,moduleSpecifier:u,dependencies:r.dependencies,hasNodeImports:r.hasNodeImports}}for(let[e,r]of this.serverActions){let i=n.relative(this.projectRoot,e),o=this.getComponentId(i),s=n.join(this.options.rscDir,`${o}.js`),c=n.join(this.options.outDir,s),l=n.dirname(c);await t.promises.mkdir(l,{recursive:!0}),await this.buildSingleComponent(e,c);let u=`file://${n.resolve(this.projectRoot,c)}`;a.components[o]={id:o,filePath:e,relativePath:i,bundlePath:s,moduleSpecifier:u,dependencies:r.dependencies,hasNodeImports:r.hasNodeImports}}let o=n.join(this.options.outDir,this.options.manifestPath);await t.promises.writeFile(o,JSON.stringify(a,null,2),`utf-8`);let s={};this.options.csp&&(s.csp=this.options.csp),this.options.rateLimit&&(s.rateLimit=this.options.rateLimit),this.options.spamBlocker&&(s.spamBlocker=this.options.spamBlocker);let c=n.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(s).length===0)try{await t.promises.unlink(c)}catch(e){e.code!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await t.promises.writeFile(c,JSON.stringify(s,null,2),`utf-8`);return a}async buildSingleComponent(e,a,o=!1){let s=await t.promises.readFile(e,`utf-8`),c=this.transformClientImports(s,e),l=this.isPageComponent(e),u=l?this.transformComponentImportsToGlobal(c):c,d=n.extname(e),f;f=d===`.tsx`?`tsx`:d===`.ts`?`ts`:d===`.jsx`?`jsx`:`js`;let p=`\0virtual:${e}`,m=await i({input:p,platform:`node`,write:!1,output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${f}`]:f},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(r.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(p,u,f,e,l)});if(!m.output||m.output.length===0)throw Error(`No output generated from Rolldown`);let h=m.output.find(e=>e.type===`chunk`&&e.isEntry);if(!h||h.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let g=h.code;g=`// Built: ${new Date().toISOString()}\n${g}`,await t.promises.writeFile(a,g,`utf-8`);let _=await t.promises.open(a,`r+`);if(await _.sync(),await _.close(),o)return g}createSelfRegisteringModule(e,t){if(e.includes(`Self-registering Production Component`))return e;let n=e,r=null,i=[];if(n=n.replace(/^export\s+default\s+function\s+(\w+)/gm,(e,t)=>(r=t,`function ${t}`)),n=n.replace(/^export\s+default\s+async\s+function\s+(\w+)/gm,(e,t)=>(r=t,`async function ${t}`)),n=n.replace(/^export\s+default\s+(\w+);?\s*$/gm,(e,t)=>(r=t,`// Default export: ${t}`)),n=n.replace(/^export\s*\{\s*(\w+)\s+as\s+default\s*\};?\s*$/gm,(e,t)=>(r=t,`// Default export: ${t}`)),n=n.replace(/^export\s*\{([^}]+)\};?\s*$/gm,(e,a)=>{let o=a.split(`,`).map(e=>e.trim()),s=[];return o.forEach(e=>{if(e.includes(`as default`)){let t=e.replace(`as default`,``).trim();r=t,s.push(`${t} (default)`)}else if(e===`default`){let e=`${t}_default`;n.includes(`var ${e}`)&&(r=e),s.push(`default`)}else i.push(e),s.push(e)}),`// Exports: ${s.join(`, `)}`}),n=n.replace(/^export\s+(?:async\s+)?function\s+(\w+)/gm,(e,t)=>(i.push(t),e.replace(`export `,``))),n=n.replace(/^export\s+(const|let|var)\s+(\w+)/gm,(e,t,n)=>(i.push(n),`${t} ${n}`)),!r){let e=`${t}_default`;n.includes(`var ${e}`)&&(r=e)}return`// Self-registering Production Component: ${t}
71
-
72
- if (!globalThis["${t}"]) {
73
- ${n}
74
-
75
- try {
76
- const moduleKey = "${t}";
77
- let mainExport = null;
78
- const exportedFunctions = {};
79
-
80
- if (!globalThis['~serverFunctions']) globalThis['~serverFunctions'] = {};
81
- if (!globalThis['~serverFunctions'].all) globalThis['~serverFunctions'].all = {};
82
-
83
- ${i.map(e=>`if (typeof ${e} !== 'undefined') {
84
- globalThis.${e} = ${e};
85
- globalThis['~serverFunctions'].all['${e}'] = ${e};
86
- exportedFunctions['${e}'] = ${e};
87
- }`).join(`
88
- `)}
89
-
90
- ${r?`if (typeof ${r} !== 'undefined') {
91
- mainExport = ${r};
92
- }`:``}
93
-
94
- if (mainExport === null && Object.keys(exportedFunctions).length > 0) {
95
- if (Object.keys(exportedFunctions).length === 1) {
96
- mainExport = exportedFunctions[Object.keys(exportedFunctions)[0]];
97
- } else {
98
- let componentFunction = null;
99
- let firstFunction = null;
100
-
101
- for (const [name, value] of Object.entries(exportedFunctions)) {
102
- if (typeof value === 'function') {
103
- if (!firstFunction) firstFunction = value;
104
- if (/^[A-Z]/.test(name)) {
105
- componentFunction = value;
106
- break;
107
- }
108
- }
109
- }
110
-
111
- mainExport = componentFunction || firstFunction;
112
- }
113
- }
114
-
115
- if (mainExport !== null) {
116
- if (!globalThis[moduleKey]) {
117
- globalThis[moduleKey] = mainExport;
118
- }
119
-
120
- if (!globalThis['~rsc']) globalThis['~rsc'] = {};
121
- globalThis['~rsc'].components = globalThis['~rsc'].components || {};
122
- globalThis['~rsc'].components[moduleKey] = mainExport;
123
-
124
- globalThis['~rsc'].modules = globalThis['~rsc'].modules || {};
125
- globalThis['~rsc'].modules[moduleKey] = { default: mainExport, ...exportedFunctions };
126
-
127
- if (typeof globalThis.RscModuleManager !== 'undefined' && globalThis.RscModuleManager.register) {
128
- globalThis.RscModuleManager.register(moduleKey, mainExport, exportedFunctions);
129
- }
130
- }
131
- } catch (error) {
132
- console.error('[rari] Build: Error in self-registration for ${t}:', error);
133
- }
134
- }`}transformClientImports(e,t){let r=e,i=/import\s+(?:(\w+)|\{([^}]+)\})\s+from\s+['"]([^'"]+)['"];?\s*$/gm,a,o=[],s=!1,c=[`rari/image`];for(;a=i.exec(e),a!==null;){let[e,r,i,l]=a,u=!1,d=l;if(c.includes(l))u=!0;else{let e=this.resolveImportPath(l,t);this.isClientComponent(e)&&(u=!0,d=n.relative(this.projectRoot,e))}if(u){s=!0;let t=``;r?t=`const ${r} = registerClientReference(
135
- null,
136
- ${JSON.stringify(d)},
137
- "default"
138
- );`:i&&(t=i.split(`,`).map(e=>e.trim()).map(e=>{let[t,n]=e.includes(` as `)?e.split(` as `).map(e=>e.trim()):[e,e];return`const ${n} = registerClientReference(
139
- null,
140
- ${JSON.stringify(d)},
141
- ${JSON.stringify(t)}
142
- );`}).join(`
143
- `)),o.push({original:e,replacement:t})}}s&&(r=`
144
- function registerClientReference(clientReference, id, exportName) {
145
- const key = id + '#' + exportName;
146
-
147
- const clientProxy = {};
148
-
149
- Object.defineProperty(clientProxy, '$$typeof', {
150
- value: Symbol.for('react.client.reference'),
151
- enumerable: false
152
- });
153
-
154
- Object.defineProperty(clientProxy, '$$id', {
155
- value: key,
156
- enumerable: false
157
- });
158
-
159
- Object.defineProperty(clientProxy, '$$async', {
160
- value: false,
161
- enumerable: false
162
- });
163
-
164
- try {
165
- if (typeof globalThis['~rari']?.bridge !== 'undefined' &&
166
- typeof globalThis['~rari'].bridge.registerClientReference === 'function') {
167
- globalThis['~rari'].bridge.registerClientReference(key, id, exportName);
168
- }
169
- } catch (error) {
170
- console.error('[rari] Build: Failed to register client reference with Rust bridge:', error);
171
- }
172
-
173
- return clientProxy;
174
- }
175
-
176
- `+r);for(let{original:e,replacement:t}of o)r=r.replace(e,t);return r}resolveImportPath(e,r){let i=e,a=this.options.alias||{};for(let[t,r]of Object.entries(a))if(e.startsWith(`${t}/`)||e===t){let a=e.slice(t.length);i=n.join(r,a);break}n.isAbsolute(i)||(i=n.resolve(n.dirname(r),i));let o=[`.tsx`,`.jsx`,`.ts`,`.js`];for(let e of o){let n=`${i}${e}`;if(t.existsSync(n))return n}if(t.existsSync(i))for(let e of o){let r=n.join(i,`index${e}`);if(t.existsSync(r))return r}return`${i}.tsx`}getComponentId(e){return e.replace(/\\/g,`/`).replace(/\.(tsx?|jsx?)$/,``).replace(/[^\w/-]/g,`_`).replace(/^src\//,``)}async rebuildComponent(e){let r=this.getComponentId(n.relative(this.projectRoot,e)),i=await t.promises.readFile(e,`utf-8`),a=this.extractDependencies(i),o={filePath:e,originalCode:i,dependencies:a,hasNodeImports:this.hasNodeImports(i)};this.isServerAction(i)?this.serverActions.set(e,o):this.serverComponents.set(e,o);let s=n.join(this.options.rscDir,`${r}.js`),c=n.join(this.options.outDir,s),l=this.buildCache.get(e),u=(await t.promises.stat(e)).mtimeMs;if(l&&l.timestamp>=u&&JSON.stringify(l.dependencies)===JSON.stringify(a))return await t.promises.writeFile(c,l.code,`utf-8`),await this.updateManifestForComponent(r,e,s),{componentId:r,bundlePath:n.join(this.options.outDir,s),success:!0};let d=n.dirname(c);await t.promises.mkdir(d,{recursive:!0});let f=await this.buildSingleComponent(e,c,!0);return this.buildCache.set(e,{code:f,timestamp:Date.now(),dependencies:a}),await this.updateManifestForComponent(r,e,s),{componentId:r,bundlePath:n.join(this.options.outDir,s),success:!0}}manifestCache=null;async updateManifestForComponent(e,r,i){let a=n.join(this.options.outDir,this.options.manifestPath),o;if(this.manifestCache)o=this.manifestCache;else if(t.existsSync(a)){let e=await t.promises.readFile(a,`utf-8`);o=JSON.parse(e),this.manifestCache=o}else o={components:{},importMap:{imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},version:`1.0.0`,buildTime:new Date().toISOString()},this.manifestCache=o;let s=this.serverComponents.get(r)||this.serverActions.get(r),c=n.join(this.options.outDir,i),l=`file://${n.resolve(this.projectRoot,c)}`;if(s)o.components[e]={id:e,filePath:r,relativePath:n.relative(this.projectRoot,r),bundlePath:i,moduleSpecifier:l,dependencies:s.dependencies,hasNodeImports:s.hasNodeImports};else{let a=await t.promises.readFile(r,`utf-8`);o.components[e]={id:e,filePath:r,relativePath:n.relative(this.projectRoot,r),bundlePath:i,moduleSpecifier:l,dependencies:this.extractDependencies(a),hasNodeImports:this.hasNodeImports(a)}}o.importMap||={imports:{react:`npm:react@19`,"react-dom":`npm:react-dom@19`,"react/jsx-runtime":`npm:react@19/jsx-runtime`,"react/jsx-dev-runtime":`npm:react@19/jsx-dev-runtime`}},o.buildTime=new Date().toISOString(),await t.promises.writeFile(a,JSON.stringify(o,null,2),`utf-8`),this.manifestCache=o}clearCache(){this.buildCache.clear(),this.manifestCache=null}async getTransformedComponentCode(e){return await this.buildComponentCodeOnly(e)}};function s(e,r,i=!0){i&&r.buildImportGraph(e);let a=t.readdirSync(e,{withFileTypes:!0});for(let i of a){let a=n.join(e,i.name);if(i.isDirectory())s(a,r,!1);else if(i.isFile()&&/\.(?:tsx?|jsx?)$/.test(i.name)){if(/^(?:robots|sitemap)\.(?:tsx?|jsx?)$/.test(i.name)||i.name.endsWith(`.d.ts`)||r.isOnlyImportedByClientComponents(a))continue;try{if(r.isServerComponent(a))r.addServerComponent(a);else{let e=t.readFileSync(a,`utf-8`).split(`
177
- `),n=!1;for(let t of e){let e=t.trim();if(!(e.startsWith(`//`)||e.startsWith(`/*`)||!e)){if(e===`'use server'`||e===`"use server"`||e===`'use server';`||e===`"use server";`){n=!0;break}if(e)break}}n&&r.addServerComponent(a)}}catch(e){console.warn(`[server-build] Error checking ${a}:`,e instanceof Error?e.message:e)}}}}function c(e={}){let i=null,a,c=!1;return{name:`rari-server-build`,configResolved(t){a=t.root,c=t.command===`serve`;let n={};if(t.resolve?.alias){let e=t.resolve.alias;Array.isArray(e)?e.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&(n[e.find]=e.replacement)}):typeof e==`object`&&Object.entries(e).forEach(([e,t])=>{typeof t==`string`&&(n[e]=t)})}i=new o(a,{...e,alias:n})},buildStart(){if(!i)return;let e=r.env.NODE_ENV===`production`,o=[n.join(a,`dist`,`cache`,`og`),n.join(a,`dist`,`cache`,`images`)];e&&o.push(`/tmp/rari-og-cache`,`/tmp/rari-image-cache`);for(let e of o)try{t.existsSync(e)&&t.rmSync(e,{recursive:!0,force:!0})}catch(t){console.warn(`[rari] Failed to clear cache ${e}:`,t)}let c=n.join(a,`src`);t.existsSync(c)&&s(c,i)},async closeBundle(){if(i){await i.buildServerComponents();try{let{generateRobotsFile:e}=await import(`./robots-generator-DlnLLn5V.mjs`);await e({appDir:n.join(a,`src`,`app`),outDir:n.join(a,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]})}catch(e){console.warn(`[rari] Failed to generate robots.txt:`,e)}try{let{generateSitemapFiles:e}=await import(`./sitemap-generator-D3T5zkl3.mjs`);await e({appDir:n.join(a,`src`,`app`),outDir:n.join(a,`dist`),extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]})}catch(e){console.warn(`[rari] Failed to generate sitemap:`,e)}}},async handleHotUpdate({file:e}){if(!i||!c)return;let r=n.relative(a,e).replace(/\\/g,`/`);if(!(!r.startsWith(`src/`)||!/\.(?:tsx?|jsx?)$/.test(r)))try{if((await t.promises.readFile(e,`utf-8`)).includes(`use client`))return;await i.buildServerComponents()}catch(e){console.error(`[rari] Build: Error rebuilding ${r}:`,e)}}}}export{a as n,c as t};
@@ -1,4 +0,0 @@
1
- import{promises as e}from"node:fs";import t from"node:path";import{Buffer as n}from"node:buffer";function r(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`)}function i(e){return(typeof e==`string`?new Date(e):e).toISOString()}function a(e){let t=[];for(let n of e)typeof n==`string`?(t.push(` <image:image>`),t.push(` <image:loc>${r(n)}</image:loc>`),t.push(` </image:image>`)):(t.push(` <image:image>`),t.push(` <image:loc>${r(n.loc)}</image:loc>`),n.title&&t.push(` <image:title>${r(n.title)}</image:title>`),n.caption&&t.push(` <image:caption>${r(n.caption)}</image:caption>`),n.geoLocation&&t.push(` <image:geo_location>${r(n.geoLocation)}</image:geo_location>`),n.license&&t.push(` <image:license>${r(n.license)}</image:license>`),t.push(` </image:image>`));return t.join(`
2
- `)}function o(e){let t=[];for(let n of e){if(t.push(` <video:video>`),t.push(` <video:title>${r(n.title)}</video:title>`),t.push(` <video:thumbnail_loc>${r(n.thumbnail_loc)}</video:thumbnail_loc>`),t.push(` <video:description>${r(n.description)}</video:description>`),n.content_loc&&t.push(` <video:content_loc>${r(n.content_loc)}</video:content_loc>`),n.player_loc&&t.push(` <video:player_loc>${r(n.player_loc)}</video:player_loc>`),n.duration!==void 0&&t.push(` <video:duration>${n.duration}</video:duration>`),n.expiration_date&&t.push(` <video:expiration_date>${r(n.expiration_date)}</video:expiration_date>`),n.rating!==void 0&&t.push(` <video:rating>${n.rating}</video:rating>`),n.view_count!==void 0&&t.push(` <video:view_count>${n.view_count}</video:view_count>`),n.publication_date&&t.push(` <video:publication_date>${r(n.publication_date)}</video:publication_date>`),n.family_friendly!==void 0&&t.push(` <video:family_friendly>${n.family_friendly?`yes`:`no`}</video:family_friendly>`),n.restriction&&t.push(` <video:restriction relationship="${n.restriction.relationship}">${r(n.restriction.content)}</video:restriction>`),n.platform&&t.push(` <video:platform relationship="${n.platform.relationship}">${r(n.platform.content)}</video:platform>`),n.requires_subscription!==void 0&&t.push(` <video:requires_subscription>${n.requires_subscription?`yes`:`no`}</video:requires_subscription>`),n.uploader){let e=n.uploader.info?` info="${r(n.uploader.info)}"`:``;t.push(` <video:uploader${e}>${r(n.uploader.name)}</video:uploader>`)}if(n.live!==void 0&&t.push(` <video:live>${n.live?`yes`:`no`}</video:live>`),n.tag)for(let e of n.tag)t.push(` <video:tag>${r(e)}</video:tag>`);t.push(` </video:video>`)}return t.join(`
3
- `)}function s(e){let t=e.some(e=>e.images&&e.images.length>0),n=e.some(e=>e.videos&&e.videos.length>0),s=e.some(e=>e.alternates?.languages),c=[`xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"`];t&&c.push(`xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"`),n&&c.push(`xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"`),s&&c.push(`xmlns:xhtml="http://www.w3.org/1999/xhtml"`);let l=[`<?xml version="1.0" encoding="UTF-8"?>`,`<urlset ${c.join(` `)}>`];for(let t of e){if(l.push(` <url>`),l.push(` <loc>${r(t.url)}</loc>`),t.lastModified&&l.push(` <lastmod>${i(t.lastModified)}</lastmod>`),t.changeFrequency&&l.push(` <changefreq>${t.changeFrequency}</changefreq>`),t.priority!==void 0&&l.push(` <priority>${t.priority}</priority>`),t.alternates?.languages)for(let[e,n]of Object.entries(t.alternates.languages))l.push(` <xhtml:link rel="alternate" hreflang="${r(e)}" href="${r(n)}" />`);t.images&&t.images.length>0&&l.push(a(t.images)),t.videos&&t.videos.length>0&&l.push(o(t.videos)),l.push(` </url>`)}return l.push(`</urlset>`),l.join(`
4
- `)}async function c(n,r=[`.ts`,`.tsx`,`.js`,`.jsx`]){let i=[],a=t.join(n,`sitemap.xml`);try{return await e.access(a),i.push({type:`static`,path:a}),i}catch{}for(let a of r){let r=t.join(n,`sitemap${a}`);try{return await e.access(r),i.push({type:`dynamic`,path:r}),i}catch{}}return i}async function l(r){let{appDir:i,extensions:a}=r,o=await c(i,a);if(o.length===0)return!1;await e.mkdir(r.outDir,{recursive:!0});let l=o[0];if(l.type===`static`){let n=t.join(r.outDir,`sitemap.xml`);return await e.copyFile(l.path,n),!0}try{let{build:i}=await import(`rolldown`),a=await e.readFile(l.path,`utf-8`),o=`\0virtual:sitemap`,c=await i({input:o,external:[`rari`],platform:`node`,write:!1,output:{format:`esm`,codeSplitting:!1},plugins:[{name:`virtual-sitemap`,resolveId(e){return e===o?e:e.startsWith(`.`)?t.resolve(t.dirname(l.path),e):null},load(e){if(e===o){let e=t.extname(l.path).slice(1),n;switch(e){case`ts`:n=`ts`;break;case`tsx`:n=`tsx`;break;case`js`:case`mjs`:case`cjs`:n=`js`;break;case`jsx`:n=`jsx`;break;case`json`:n=`json`;break;default:throw Error(`Unsupported sitemap file extension: ".${e}". Allowed extensions are: .ts, .tsx, .js, .jsx, .mjs, .cjs, .json`)}return{code:a,moduleType:n}}return null}}]});if(!c.output||c.output.length===0)throw Error(`Failed to build sitemap module`);let u=c.output.find(e=>e.type===`chunk`&&e.isEntry)||c.output.find(e=>e.type===`chunk`);if(!u||u.type!==`chunk`)throw Error(`No chunk output found in sitemap build result`);let d=u.code,f=await import(`data:text/javascript;base64,${n.from(d).toString(`base64`)}`);if(typeof f.generateSitemaps==`function`){let n=await f.generateSitemaps(),i=t.join(r.outDir,`sitemap`);await e.mkdir(i,{recursive:!0});for(let{id:i}of n){let n;n=typeof f.default==`function`?await f.default({id:String(i)}):f.default;let a=s(n),o=t.join(r.outDir,`sitemap/${i}.xml`);await e.writeFile(o,a)}}else{let n=s(typeof f.default==`function`?await f.default():f.default),i=t.join(r.outDir,`sitemap.xml`);await e.writeFile(i,n)}return!0}catch(e){return console.error(`[rari] Failed to build/execute sitemap file:`,e),!1}}export{l as generateSitemapFiles};
@@ -1 +0,0 @@
1
- import{styleText as e}from"node:util";function t(t){console.warn(`${e(`blue`,`info`)} ${t}`)}function n(t){console.warn(`${e(`green`,`✓`)} ${t}`)}function r(t){console.error(`${e(`red`,`✗`)} ${t}`)}function i(t){console.warn(`${e(`yellow`,`⚠`)} ${t}`)}function a(e,t=22){let n=e.trim();if(n.includes(`||`))return n.split(`||`).map(e=>e.trim()).some(e=>a(e,t));let r=n.split(/\s+(?:&&\s+)?/).filter(e=>e&&e!==`&&`);if(r.length>1){for(let e of r){let n=o(e);if(n!==null&&n>=t)return!0}return r.every(e=>s(e,t))}return c(n,t)}function o(e){let t=e.match(/^>=?\s*(\d+)/);return t?Number.parseInt(t[1],10):null}function s(e,t){let n=null;return n=e.match(/^<=?\s*(\d+)/),n?t<=Number.parseInt(n[1],10):c(e,t)}function c(e,t){let n=null;return/^<=?\s*\d+/.test(e)?!1:(n=e.match(/^>=?\s*(\d+)\.(\d+)\.(\d+)/),n||(n=e.match(/^=?\s*(\d+)\.(\d+)\.(\d+)/),n)||(n=e.match(/^\^\s*(\d+)\.(\d+)\.(\d+)/),n)||(n=e.match(/^~\s*(\d+)\.(\d+)\.(\d+)/),n)||(n=e.match(/^(?:>=?|<=?|[=~^])?\s*(\d+)\.(\d+)/),n)||(n=e.match(/^(\d+)\.(?:x|\*)/i),n)||(n=e.match(/^(?:>=?|[=~^])\s*(\d+)(?:\s|$)/),n)||(n=e.match(/^(\d+)$/),n)?Number.parseInt(n[1],10)>=t:!1)}export{t as a,r as i,i as n,n as r,a as t};
@@ -1,79 +0,0 @@
1
- import{a as e,i as t,n,o as r,r as i,t as a}from"./constants-CmqZuM5B.mjs";import{t as o}from"./server-build-DM-rQz-k.mjs";import s,{promises as c}from"node:fs";import l from"node:path";import u from"node:process";import{Buffer as d}from"node:buffer";import{spawn as f}from"node:child_process";import{fileURLToPath as p}from"node:url";import{build as m}from"rolldown";var h=class extends Response{static json(e,t){let n=new Headers(t?.headers);return n.has(`content-type`)||n.set(`content-type`,`application/json`),new Response(JSON.stringify(e),{...t,headers:n})}static redirect(e,t=307){return new Response(null,{status:t,headers:{location:e}})}static noContent(e){return new Response(null,{...e,status:204})}};function g(e={}){let{root:t=u.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 d(){for(let e of i){let n=`${r}${e}`,i=l.join(t,n);try{return await c.access(i),s(`Found proxy file: ${n}`),{filePath:i,exists:!0,relativePath:n}}catch{}}let e=l.join(t,n);try{await c.access(e);for(let t of i){let i=`${r}${t}`,a=l.join(e,i);try{return await c.access(a),s(`Found proxy file: ${l.join(n,i)}`),{filePath:a,exists:!0,relativePath:l.join(n,i)}}catch{}}}catch{}return null}return{name:`rari:proxy`,async buildStart(){o=await d(),s(o?`Proxy enabled: ${o.relativePath}`:`No proxy file found`)},configureServer(e){o&&(e.watcher.add(o.filePath),e.watcher.on(`change`,t=>{t===o?.filePath&&(s(`Proxy file changed, reloading...`),e.ws.send({type:`custom`,event:`rari:proxy-reload`}))}))},async handleHotUpdate({file:e,server:t}){if(o&&e===o.filePath)return s(`Hot reloading proxy...`),t.ws.send({type:`custom`,event:`rari:proxy-reload`,data:{file:o.relativePath}}),[]}}}const _={appDir:`src/app`,extensions:[`.tsx`,`.jsx`,`.ts`,`.js`],outDir:`dist`};function v(e){switch(l.basename(e).replace(/\.(tsx?|jsx?)$/,``)){case`page`:return`page`;case`layout`:return`layout`;case`loading`:return`loading`;case`error`:return`error`;case`not-found`:return`not-found`;case`route`:return`route`;default:return null}}function y(e,t){let n=l.relative(t,l.dirname(e));return!n||n===`.`?`/`:`/${n.replace(/\\/g,`/`).split(`/`).filter(Boolean).join(`/`)}`}function b(e,t,n){if(t===`page`)return[e];let r=n.filter(t=>t===e||t.startsWith(`${e}/`));return r.length>0?r:[e]}function x(e){try{let t=e.match(/export\s+const\s+metadata\s*(?::\s*\w+\s*)?=\s*(\{[\s\S]*?\n\})/);if(!t)return null;let n=t[1],r={},i=n.match(/title\s*:\s*['"]([^'"]+)['"]/);i&&(r.title=i[1]);let a=n.match(/description\s*:\s*['"]([^'"]+)['"]/);a&&(r.description=a[1]);let o=n.match(/keywords\s*:\s*\[([\s\S]*?)\]/);o&&(r.keywords=o[1].split(`,`).map(e=>e.trim().replace(/['"]/g,``)).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 S(e){let t=[];for(let n of[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`]){let r=RegExp(`export\\s+(?:async\\s+)?function\\s+${n}\\s*\\(`),i=RegExp(`export\\s+(?:async\\s+)?(?:const|let|var)\\s+${n}\\s*=`);(r.test(e)||i.test(e))&&t.push(n)}return t}async function C(e){try{let t=await fetch(`http://localhost:3000/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`invalidate-api-route`,filePath:e})});if(!t.ok){console.error(`[rari] Router: Failed to invalidate API route cache: ${t.statusText}`);return}let n=await t.json();n.success||console.error(`[rari] HMR: Failed to invalidate API route cache: ${n.error||`Unknown error`}`)}catch(e){console.error(`[rari] Router: Failed to notify API route invalidation:`,e)}}function w(e={}){let t={..._,...e},n=null,r=new Map,i=null,a=new Set,o=e=>[...e].toSorted().join(`|`),s=async e=>{let n=new Set,r=async e=>{try{let i=await c.readdir(e,{withFileTypes:!0});for(let a of i){let i=l.join(e,a.name);a.isDirectory()?await r(i):a.isFile()&&t.extensions.some(e=>a.name.endsWith(e))&&v(i)&&n.add(i)}}catch{}};return await r(e),n},d=async(e,r=!1)=>{let u=l.resolve(e,t.appDir);try{await c.access(u)}catch{return null}try{let d=await s(u),f=o(d);if(!r&&i===f&&n)return n;let{generateAppRouteManifest:p}=await import(`./routes-DbsqVAaM.mjs`).then(e=>e.n),m=await p(u,{extensions:t.extensions}),h=JSON.stringify(m,null,2),g=l.resolve(e,t.outDir);await c.mkdir(g,{recursive:!0});let _=l.join(g,`server`);return await c.mkdir(_,{recursive:!0}),await c.writeFile(l.join(_,`routes.json`),h,`utf-8`),i=f,a.clear(),d.forEach(e=>a.add(e)),h}catch(e){return console.error(`[rari] Router: Failed to generate app routes:`,e),null}},f=e=>{let n=l.resolve(e.config.root,t.appDir);e.watcher.on(`all`,async(r,i)=>{if(i.startsWith(n)&&t.extensions.some(e=>i.endsWith(e)))try{let n=v(i)!==null,o=r===`add`||r===`unlink`,s=n&&!a.has(i);(o||s)&&(await d(e.config.root,!0),i.includes(t.appDir)&&e.ws.send({type:`full-reload`,path:`*`}))}catch(e){console.error(`[rari] Router: Failed to regenerate app routes:`,e)}})},p;return{name:`rari-router`,configResolved(e){p=e.root;let t=e.logger.warn;e.logger.warn=(e,n)=>{typeof e==`string`&&e.includes(`runtime-client`)&&e.includes(`The above dynamic import cannot be analyzed`)||t(e,n)}},async writeBundle(){n=await d(p||u.cwd(),!0)},configureServer(e){f(e)},async handleHotUpdate(e){let{file:i,server:o}=e,s=l.resolve(o.config.root,t.appDir);if(i.startsWith(s)&&t.extensions.some(e=>i.endsWith(e))){let e=v(i);if(e){let t=r.get(i);t&&clearTimeout(t);let u=setTimeout(async()=>{r.delete(i);let t=!a.has(i),u=n;n=await d(o.config.root,t);let f=u!==n,p=y(i,s),m=[p];if(n)try{m=JSON.parse(n).routes.map(e=>e.path)}catch(e){console.error(`[rari] Router: Failed to parse manifest for affected routes:`,e)}let h=b(p,e,m),g,_=!1,v;if(e===`page`||e===`layout`)try{let e=x(await c.readFile(i,`utf-8`));e&&(g=e,_=!0)}catch(e){console.error(`[rari] Router: Failed to extract metadata:`,e)}if(e===`route`)try{v=S(await c.readFile(i,`utf-8`)),await C(l.relative(s,i))}catch(e){console.error(`[rari] Router: Failed to detect HTTP methods:`,e)}let w={fileType:e,filePath:l.relative(o.config.root,i),routePath:p,affectedRoutes:h,manifestUpdated:f,timestamp:Date.now(),metadata:g,metadataChanged:_,methods:v};o.ws.send({type:`custom`,event:`rari:app-router-updated`,data:w})},200);return r.set(i,u),[]}return n=await d(o.config.root),[]}},async closeBundle(){for(let e of r.values())clearTimeout(e);r.clear()}}}var T=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&&clearTimeout(this.resetTimer),this.resetTimer=setTimeout(()=>{this.reset()},this.resetTimeout),this.errorCount>=this.maxErrors&&this.handleMaxErrorsReached()}reset(){this.errorCount=0,this.lastError=null,this.resetTimer&&=(clearTimeout(this.resetTimer),null)}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.resetTimer&&=(clearTimeout(this.resetTimer),null),this.reset()}},E=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 T({maxErrors:5,resetTimeout:3e4})}async handleClientComponentUpdate(e,t){let n=l.relative(u.cwd(),e),r=Date.now();this.queueLog(`info`,`Client component changed: ${n}`);try{let i=t.moduleGraph.getModuleById(e);if(i){t.moduleGraph.invalidateModule(i);let e=Date.now()-r;this.queueLog(`success`,`Client component updated: ${n} (${e}ms)`),this.errorHandler.reset()}else this.queueLog(`warning`,`Client component module not found in graph: ${n}`)}catch(e){let t=e instanceof Error?e.message:String(e);this.queueLog(`error`,`Failed to update client component: ${n} - ${t}`),this.errorHandler.recordError(e instanceof Error?e:Error(t))}}async handleServerComponentUpdate(e,t){this.pendingFiles.add(e);let n=this.pendingUpdates.get(e);n&&(clearTimeout(n),this.pendingUpdates.delete(e)),this.batchTimer&&clearTimeout(this.batchTimer),this.batchTimer=setTimeout(async()=>{let e=[...this.pendingFiles];if(this.pendingFiles.clear(),this.batchTimer=null,e.length===0)return;let n=Date.now();if(e.length===1){let t=l.relative(u.cwd(),e[0]);this.queueLog(`info`,`Rebuilding server component: ${t}`)}else this.queueLog(`info`,`Rebuilding ${e.length} server components in batch`);let r=await Promise.allSettled(e.map(async e=>{let t=l.relative(u.cwd(),e);try{let n=await this.serverComponentBuilder.rebuildComponent(e);if(!n.success)throw Error(n.error||`Build failed`);return await this.notifyRustServer(n.componentId,n.bundlePath),{success:!0,componentId:n.componentId,filePath:e,relativePath:t}}catch(n){return{success:!1,filePath:e,relativePath:t,error:n instanceof Error?n:Error(String(n))}}})),i=[],a=[];r.forEach(e=>{e.status===`fulfilled`&&e.value.success?i.push(e.value):e.status===`fulfilled`&&!e.value.success?a.push(e.value):e.status===`rejected`&&a.push({filePath:``,relativePath:`unknown`,error:Error(String(e.reason))})});let o=Date.now()-n;if(i.length>0){let e=Date.now();i.forEach(({componentId:n})=>{t.hot.send(`rari:server-component-updated`,{id:n,t:e})}),i.length===1?this.queueLog(`success`,`Server component updated: ${i[0].relativePath} (${o}ms)`):this.queueLog(`success`,`${i.length} server components updated (${o}ms)`),this.errorHandler.reset(),t.ws.send({type:`custom`,event:`rari:hmr-error-cleared`,data:{t:e}})}if(a.length>0){let e=Date.now();a.forEach(({relativePath:n,error:r})=>{let i=r.message,a=(r.stack||``).substring(0,500);this.queueLog(`error`,`Failed to rebuild: ${n} - ${i}`),this.errorHandler.recordError(r),t.ws.send({type:`custom`,event:`rari:hmr-error`,data:{msg:i,stack:a,file:n,t:e,count:this.errorHandler.getErrorCount(),max:5}})}),this.errorHandler.hasReachedMaxErrors()&&this.queueLog(`error`,`Maximum error count reached (${this.errorHandler.getErrorCount()}). Consider restarting the dev server if issues persist.`)}},this.DEBOUNCE_DELAY)}async notifyRustServer(e,t){try{let n=await fetch(`${this.rustServerUrl}/_rari/hmr`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`reload-component`,component_id:e,bundle_path:t})});if(!n.ok){let e=await n.text();throw Error(`HTTP ${n.status}: ${e}`)}}catch(e){throw console.error(`[rari] HMR: Failed to notify Rust server:`,e),e}}detectComponentType(e){try{let t=s.readFileSync(e,`utf-8`).split(`
2
- `);for(let e of t){let t=e.trim();if(!(!t||t.startsWith(`//`)||t.startsWith(`/*`))){if(t===`'use client'`||t===`"use client"`)return`client`;break}}return`server`}catch{return`unknown`}}queueLog(e,t){this.logBatch.push({type:e,message:t,timestamp:Date.now()}),this.logBatchTimer&&clearTimeout(this.logBatchTimer),this.logBatchTimer=setTimeout(()=>{this.flushLogs()},this.LOG_BATCH_DELAY)}flushLogs(){if(this.logBatch.length===0)return;let e=this.logBatch.reduce((e,t)=>(e[t.type]||(e[t.type]=[]),e[t.type].push(t),e),{});for(let[t,n]of Object.entries(e))if(n.length===1){let e=n[0];this.outputLog(t,e.message)}else{let e=n.map(e=>e.message).join(`
3
- • `);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()}};async function D(e,t=[]){let n=new Map;async function r(e){if(!s.existsSync(e))return;let t=s.readdirSync(e,{withFileTypes:!0});for(let i of t){let t=l.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`||i.name===`dist`)continue;await r(t)}else if(i.isFile()&&/\.(?:tsx?|jsx?)$/.test(i.name))try{let e=s.readFileSync(t,`utf8`);if(!e.includes(`from 'rari/image'`)&&!e.includes(`from "rari/image"`))continue;await O(e,t,n)}catch(e){console.warn(`Failed to read or process file ${t}:`,e)}}}await r(e);for(let e of t)s.existsSync(e)&&await r(e);return{images:[...n.values()]}}async function O(e,t,n){try{let r;r=t.endsWith(`.tsx`)?`tsx`:t.endsWith(`.jsx`)?`jsx`:t.endsWith(`.ts`)?`ts`:`js`;let i=`\0virtual:${t}`,a=await m({input:i,platform:`browser`,write:!1,output:{format:`esm`},moduleTypes:{[`.${r}`]:r},transform:{jsx:`react`},plugins:[{name:`virtual-module`,resolveId(e){return e===i?e:null},load(t){return t===i?{code:e,moduleType:r}:null}}]});if(!a.output||a.output.length===0)throw Error(`Transform produced no output`);let o=a.output[0].code,s=new Set;for(let e of o.matchAll(/import\s+(\w+)\s+from\s+['"]rari\/image['"]/g))s.add(e[1]);for(let e of o.matchAll(/import\s+\{[^}]*\b(?:Image\s+as\s+(\w+)|Image)\b[^}]*\}\s+from\s+['"]rari\/image['"]/g))e[1]?s.add(e[1]):s.add(`Image`);if(s.size===0)return;for(let e of s){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),r=RegExp(`React\\.createElement\\(\\s*${t}\\s*,\\s*\\{([^}]+)\\}`,`g`);for(let e of o.matchAll(r)){let t=e[1],r=t.match(/src:\s*["']([^"']+)["']/);if(!r)continue;let i=r[1];if(!i.startsWith(`/`)&&!i.startsWith(`http`))continue;let a=t.match(/width:\s*(\d+)/),o=a?Number.parseInt(a[1],10):void 0,s=t.match(/quality:\s*(\d+)/),c=s?Number.parseInt(s[1],10):void 0,l=t.match(/preload:\s*(true|!0)/),u=t.match(/preload:\s*(false|!1)/),d=!!l&&!u,f=`${i}:${o||`auto`}:${c||75}`;(!n.has(f)||d)&&n.set(f,{src:i,width:o,quality:c,preload:d})}}}catch{k(e,n)}}function k(e,t){let n=/<Image\s([^/>]+)\/>/g,r=/<Image\s([^>]+)>/g;for(let r of e.matchAll(n))A(r[1],t);for(let n of e.matchAll(r))A(n[1],t)}function A(e,t){let n=e.match(/src=\{?["']([^"']+)["']\}?|src=\{([^}]+)\}/);if(!n)return;let r=n[1]||n[2];if(!r||r.includes(`{`)||!r.startsWith(`/`)&&!r.startsWith(`http`))return;let i=e.match(/width=\{?(\d+)\}?/),a=i?Number.parseInt(i[1],10):void 0,o=e.match(/quality=\{?(\d+)\}?/),s=o?Number.parseInt(o[1],10):void 0,c=/preload(?:=\{?true\}?)?/.test(e)&&!/preload=\{?false\}?/.test(e),l=`${r}:${a||`auto`}:${s||75}`;(!t.has(l)||c)&&t.set(l,{src:r,width:a,quality:s,preload:c})}const j={remotePatterns:[],localPatterns:[],deviceSizes:a,imageSizes:i,formats:n,qualityAllowlist:r,minimumCacheTTL:e,maxCacheSize:t};async function M(e){let t=import.meta.url,n=p(t),r=l.dirname(n),i=[l.join(r,`runtime`,e),l.join(r,`../runtime`,e)];for(let e of i)try{let t=await s.promises.readFile(e,`utf-8`);return e.endsWith(`.ts`)&&(t=t.replace(/import\s+type\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(/import\s+type\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(/import\s+type\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,(e,t,n)=>`import type ${t} from "rari/${n}";`),t=t.replace(/import\s+(\{[^}]+\})\s+from\s+["']\.\.?\/([^"']+)["'];?/g,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(/import\s+(\*\s+as\s+\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(/import\s+(\w+)\s+from\s+["']\.\.?\/([^"']+)["'];?/g,(e,t,n)=>`import ${t} from "rari/${n}";`),t=t.replace(/import\s+["']\.\.?\/([^"']+)["'];?/g,(e,t)=>`import "rari/${t}";`)),t}catch(t){t.code!==`ENOENT`&&t.code!==`EISDIR`&&console.warn(`[rari] Unexpected error reading ${e}:`,t)}throw Error(`Could not find ${e}. Tried: ${i.join(`, `)}`)}async function N(){return M(`rsc-client-runtime.mjs`)}async function P(e,t){return(await M(`entry-client.mjs`)).replace(`/*! @preserve CLIENT_COMPONENT_IMPORTS_PLACEHOLDER */`,e).replace(`/*! @preserve CLIENT_COMPONENT_REGISTRATIONS_PLACEHOLDER */`,t)}async function F(){return M(`react-server-dom-shim.mjs`)}async function I(e,t){let n=await D(l.join(e,`src`)),r={...j,...t.images,preoptimizeManifest:n.images},i=l.join(e,`dist`),a=l.join(i,`server`);s.existsSync(a)||s.mkdirSync(a,{recursive:!0});let o=l.join(a,`image.json`);s.writeFileSync(o,JSON.stringify(r,null,2))}function L(e,t=[]){let n=new Set;function r(e){if(!s.existsSync(e))return;let t=s.readdirSync(e,{withFileTypes:!0});for(let i of t){let t=l.join(e,i.name);if(i.isDirectory()){if(i.name===`node_modules`)continue;r(t)}else if(i.isFile()&&/\.(?:tsx?|jsx?)$/.test(i.name))try{let e=s.readFileSync(t,`utf8`);(e.includes(`'use client'`)||e.includes(`"use client"`))&&n.add(t)}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error during file scan:`,t,e)}}}r(e);for(let e of t)s.existsSync(e)&&r(e);return n}function R(e){return e}function z(e={}){let t=new Map,n=new Set,r=new Map,i=null,a=null,c={};function m(e){if(r.has(e))return r.get(e);let t={hasUseServer:!1,hasUseClient:!1},n=e.replace(/\\/g,`/`);if(!/\.(?:tsx?|jsx?)$/.test(n)||!n.includes(`/src/`))return r.set(e,t),t;try{let n=s.readFileSync(e,`utf-8`);t.hasUseServer=n.includes(`'use server'`)||n.includes(`"use server"`),t.hasUseClient=n.includes(`'use client'`)||n.includes(`"use client"`),r.set(e,t)}catch{r.set(e,t)}return t}function h(t){if(t.includes(`node_modules`)||t.includes(`/rari/dist/`)||t.includes(`\\rari\\dist\\`))return!1;let n=e.projectRoot||u.cwd(),r=l.join(n,`index.html`);if(s.existsSync(r))try{let e=s.readFileSync(r,`utf-8`);for(let r of e.matchAll(/import\s*(?:\(\s*)?["']([^"']+)["']\)?/g)){let e=r[1];if(e.startsWith(`/src/`)&&l.join(n,e.slice(1))===t)return!1}}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error reading index.html:`,e)}let i;try{i=s.realpathSync(t)}catch{return!1}try{if(!s.existsSync(i))return!1;let e=s.readFileSync(i,`utf-8`),t=v(e,`use client`);return v(e,`use server`)?!1:!t}catch{return!1}}function _(e){try{let t=[],n=e.matchAll(/export\s*\{([^}]+)\}/g);for(let e of n){let n=e[1].split(`,`);for(let e of n){let n=e.trim().split(/\s+as\s+/).at(-1)?.trim();n&&t.push(n)}}(/export\s+default\s+(?:function|class)\s+\w+/.test(e)||/export\s+default\s+/.test(e))&&t.push(`default`);let r=e.matchAll(/export\s+(?:async\s+)?(?:const|let|var|function|class)\s+(\w+)/g);for(let e of r)e[1]&&t.push(e[1]);return[...new Set(t)]}catch{return[]}}function v(e,t){try{let n=e.split(`
4
- `);for(let e of n){let n=e.trim();if(!(!n||n.startsWith(`//`)||n.startsWith(`/*`))){if(n===`'${t}'`||n===`"${t}"`||n===`'${t}';`||n===`"${t}";`)return!0;break}}return!1}catch{return!1}}function y(e,t){if(!v(e,`use server`))return e;let n=_(e);if(n.length===0)return e;let r=e;r+=`
5
-
6
- import {registerServerReference} from "react-server-dom-rari/server";
7
- `;for(let i of n)if(i===`default`){let n=e.match(/export\s+default\s+(?:async\s+)?function\s+(\w+)/);if(n){let e=n[1];r+=`
8
- // Register server reference for default export
9
- `,r+=`registerServerReference(${e}, ${JSON.stringify(t)}, ${JSON.stringify(i)});\n`}else{let n=/export\s+default\s+([^;]+)/,a=e.match(n);if(a){let e=a[1].trim(),o=`__default_export__`;r=r.replace(n,`const ${o} = ${e};\nexport default ${o}`),r+=`
10
- // Register server reference for default export
11
- `,r+=`if (typeof ${o} === "function") {\n`,r+=` registerServerReference(${o}, ${JSON.stringify(t)}, ${JSON.stringify(i)});\n`,r+=`}
12
- `}}}else r+=`\n// Register server reference for ${i}\n`,r+=`if (typeof ${i} === "function") {\n`,r+=` registerServerReference(${i}, ${JSON.stringify(t)}, ${JSON.stringify(i)});\n`,r+=`}
13
- `;return r+=`
14
-
15
- if (import.meta.hot) {
16
- import.meta.hot.accept(() => {
17
- });
18
- }`,r}function b(e,t){let n=v(e,`use server`),r=h(t);if(n){let n=_(e);if(n.length===0)return``;let r=l.relative(u.cwd(),t).replace(/\\/g,`/`).replace(/\.(tsx?|jsx?)$/,``).replace(/[^\w/-]/g,`_`).replace(/^src\//,``),i=`import { createServerReference } from "rari/runtime/actions";
19
- `;for(let e of n)e===`default`?i+=`export default createServerReference("default", ${JSON.stringify(r)}, "default");\n`:i+=`export const ${e} = createServerReference("${e}", ${JSON.stringify(r)}, "${e}");\n`;return i}if(r){let n=_(e);if(n.length===0)return``;let r=l.relative(u.cwd(),t).replace(/\\/g,`/`).replace(/\.(tsx?|jsx?)$/,``).replace(/[^\w/-]/g,`_`).replace(/^src\//,``).replace(/^components\//,``),i=`import { createServerComponentWrapper } from "virtual:rsc-integration.ts";
20
- `;for(let e of n)e===`default`?i+=`export default createServerComponentWrapper("${r}", ${JSON.stringify(t)});\n`:i+=`export const ${e} = createServerComponentWrapper("${r}_${e}", ${JSON.stringify(t)});\n`;return i}if(!v(e,`use client`))return e;let i=_(e);if(i.length===0)return``;let a=`import {registerClientReference} from "react-server-dom-rari/server";
21
- `;for(let e of i){if(e===`default`){let e=`Attempted to call the default export of ${t} 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.`;a+=`export default `,a+=`registerClientReference(function() {`,a+=`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.`;a+=`export const ${e} = `,a+=`registerClientReference(function() {`,a+=`throw new Error(${JSON.stringify(t)});`}a+=`},`,a+=`${JSON.stringify(t)},`,a+=`${JSON.stringify(e)});\n`}return a}function x(e,t){return!v(e,`use client`)||_(e).length===0?e:e.replace(/^['"]use client['"];?\s*$/gm,``)}function S(e,t){let n=e;for(let[t,r]of Object.entries(c))if(e.startsWith(`${t}/`)){n=e.replace(t,r);break}else if(e===t){n=r;break}let r=l.resolve(l.dirname(t),n),i=[`.tsx`,`.jsx`,`.ts`,`.js`];for(let e of i){let t=`${r}${e}`;if(s.existsSync(t))return t}if(s.existsSync(r))for(let e of i){let t=l.join(r,`index${e}`);if(s.existsSync(t))return t}return`${r}.tsx`}function C(e){return(e.split(`/`).pop()||e).replace(/\.[^.]*$/,``)}let T=!1;async function D(){let e=`http://localhost:${u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3)}`;try{let t=(await fetch(`${e}/_rari/health`,{signal:AbortSignal.timeout(1e3)})).ok;return T=t,t}catch{return T=!1,!1}}let O=[{name:`rari`,config(t,{command:n}){if(n===`build`){let n=e.projectRoot||u.cwd(),r=l.join(n,`index.html`);if(s.existsSync(r))try{let e=s.readFileSync(r,`utf-8`),n=/import\s+["']([^"']+)["']/g,i=[];for(let t of e.matchAll(n)){let e=t[1];if(e.startsWith(`/src/`)&&/\.(?:tsx?|jsx?)$/.test(e)){let t=e.slice(1),n=l.basename(t,l.extname(t));i.push({path:t,name:n})}}if(i.length>0){t.build=t.build||{},t.build.rolldownOptions=t.build.rolldownOptions||{};let e=t.build.rolldownOptions.input||{main:`./index.html`},n;n=typeof e==`string`?{main:e}:Array.isArray(e)?{main:e[0]||`./index.html`}:{...e},i.forEach(({path:e,name:t})=>{n[t]=`./${e}`}),t.build.rolldownOptions.input=n}}catch(e){console.warn(`[rari] Error parsing index.html for build inputs:`,e)}}t.resolve=t.resolve||{};let r=Array.isArray(t.resolve.dedupe)?t.resolve.dedupe:[],i=[`react`,`react-dom`];t.resolve.dedupe=[...new Set([...r||[],...i])];let a=[];Array.isArray(t.resolve.alias)?a=t.resolve.alias:t.resolve.alias&&typeof t.resolve.alias==`object`&&(a=Object.entries(t.resolve.alias).map(([e,t])=>({find:e,replacement:t})));let o=new Set(a.map(e=>String(e.find)));try{let e=p(import.meta.resolve(`react`)),n=p(import.meta.resolve(`react-dom/client`)),r=p(import.meta.resolve(`react/jsx-runtime`)),i=[];o.has(`react/jsx-runtime`)||i.push({find:`react/jsx-runtime`,replacement:r});try{let e=p(import.meta.resolve(`react/jsx-dev-runtime`));o.has(`react/jsx-dev-runtime`)||i.push({find:`react/jsx-dev-runtime`,replacement:e})}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving react/jsx-dev-runtime:`,e)}o.has(`react`)||i.push({find:`react`,replacement:e}),o.has(`react-dom/client`)||i.push({find:`react-dom/client`,replacement:n}),i.length>0&&(t.resolve.alias=[...a,...i])}catch(e){e?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error configuring React aliases:`,e)}t.environments=t.environments||{},t.environments.rsc={resolve:{conditions:[`react-server`,`node`,`import`]},...t.environments.rsc},t.environments.ssr={resolve:{conditions:[`node`,`import`]},...t.environments.ssr},t.environments.client={resolve:{conditions:[`browser`,`import`]},...t.environments.client},t.optimizeDeps=t.optimizeDeps||{},t.optimizeDeps.include=t.optimizeDeps.include||[];for(let e of[`react`,`react-dom`,`react-dom/client`,`react-dom/server`,`react/jsx-runtime`,`react/jsx-dev-runtime`])t.optimizeDeps.include.includes(e)||t.optimizeDeps.include.push(e);if(t.optimizeDeps.exclude=t.optimizeDeps.exclude||[],t.optimizeDeps.exclude.includes(`rari`)||t.optimizeDeps.exclude.push(`rari`),n===`build`)for(let e of[`rsc`,`ssr`,`client`]){let n=t.environments[e];n&&n.build&&(n.build.rolldownOptions=n.build.rolldownOptions||{})}t.server=t.server||{},t.server.proxy=t.server.proxy||{};let c=u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3);if(t.server.proxy[`/api`]={target:`http://localhost:${c}`,changeOrigin:!0,secure:!1,ws:!0},t.server.proxy[`/_rari`]={target:`http://localhost:${c}`,changeOrigin:!0,secure:!1,ws:!0},n===`build`){t.build=t.build||{},t.build.rolldownOptions=t.build.rolldownOptions||{},t.build.rolldownOptions.input||(t.build.rolldownOptions.input={main:`./index.html`}),t.build.rolldownOptions.output=t.build.rolldownOptions.output||{};let e=Array.isArray(t.build.rolldownOptions.output)?t.build.rolldownOptions.output:[t.build.rolldownOptions.output];for(let t of e)t.advancedChunks=t.advancedChunks||{},t.advancedChunks.groups=t.advancedChunks.groups||[],t.advancedChunks.groups.push({name(e){return e.includes(`node_modules`)?e.includes(`node_modules/react-dom`)?`react-dom`:e.includes(`node_modules/react`)?`react`:`vendor`:null}}),t.chunkFileNames||=e=>e.moduleIds?.some(e=>m(e).hasUseServer)?`client/actions/[name]-[hash].js`:e.moduleIds?.some(e=>m(e).hasUseClient)?`client/components/[name]-[hash].js`:`assets/[name]-[hash].js`}return t.environments&&t.environments.client&&(t.environments.client.build||(t.environments.client.build={}),t.environments.client.build.rolldownOptions||(t.environments.client.build.rolldownOptions={}),t.environments.client.build.rolldownOptions.input||(t.environments.client.build.rolldownOptions.input={})),t},configResolved(e){let t=new Set([`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]);if(e.resolve?.alias){let n=e.resolve.alias;Array.isArray(n)?n.forEach(e=>{typeof e.find==`string`&&typeof e.replacement==`string`&&!t.has(e.find)&&(c[e.find]=e.replacement)}):typeof n==`object`&&Object.entries(n).forEach(([e,n])=>{typeof n==`string`&&!t.has(e)&&(c[e]=n)})}},transform(e,r){if(!/\.(?:tsx?|jsx?)$/.test(r))return null;let i=this.environment;if(v(e,`use client`)){t.set(r,`client`),n.add(r);let i=/^\s*import\s+(?:(\w+)(?:\s*,\s*\{\s*(?:(\w+(?:\s*,\s*\w+)*)\s*)?\})?|\{\s*(\w+(?:\s*,\s*\w+)*)\s*\})\s+from\s+['"]([./@][^'"]+)['"].*$/,a=e.split(`
22
- `);for(let e of a){let a=e.match(i);if(!a)continue;let o=a[4];if(!o)continue;let c=S(o,r);s.existsSync(c)&&(t.set(c,`client`),n.add(c))}return x(e,r)}if(t.get(r)===`client`||n.has(r))return x(e,r);if(h(r)){if(t.set(r,`server`),i&&(i.name===`rsc`||i.name===`ssr`))return y(e,r);{let t=b(e,r);return t=`// HMR acceptance for server component
23
- if (import.meta.hot) {
24
- import.meta.hot.accept();
25
- }
26
-
27
- if (typeof globalThis !== 'undefined') {
28
- if (!globalThis['~rari']) globalThis['~rari'] = {};
29
- globalThis['~rari'].serverComponents = globalThis['~rari'].serverComponents || new Set();
30
- globalThis['~rari'].serverComponents.add(${JSON.stringify(r)});
31
- }
32
-
33
- ${t}`,t}}if(v(e,`use server`))return t.set(r,`server`),i&&(i.name===`rsc`||i.name===`ssr`)?y(e,r):b(e,r);let a=t.get(r);if(a===`server`)return i&&(i.name===`rsc`||i.name===`ssr`)?y(e,r):b(e,r);if(a===`client`)return x(e,r);t.set(r,`unknown`);let o=e.split(`
34
- `),c=e,l=!1,d=!1,f=!1,p=[],m=/^\s*import\s+(\w+)(?:\s*,\s*\{\s*(?:(\w+(?:\s*,\s*\w+)*)\s*)?\})?\s+from\s+['"]([./@][^'"]+)['"].*$/;for(let a of o){let o=a.match(m);if(!o)continue;let u=o[1],g=o[3],_=C(g),y=S(g,r),b=v(e,`use client`)||t.get(r)===`client`||r.includes(`entry-client`),x=t.get(y)===`client`||s.existsSync(y)&&s.readFileSync(y,`utf-8`).includes(`'use client'`);if(x&&(t.set(y,`client`),n.add(y)),x&&i&&(i.name===`rsc`||i.name===`ssr`)){if(!b){let e=a,t=u||`default`,n=`
35
- import { registerClientReference } from "react-server-dom-rari/server";
36
- const ${t} = registerClientReference(
37
- function() {
38
- throw new Error("Attempted to call ${t} from the server but it's on the client. It can only be rendered as a Component or passed to props of a Client Component.");
39
- },
40
- ${JSON.stringify(y)},
41
- ${JSON.stringify(u||`default`)}
42
- );`;c=c.replace(e,n),l=!0,d=!0}}else if(!b&&h(y)){l=!0,d=!0,f=!0;let e=a;u&&u!==`_`&&p.push(`const ${u} = createServerComponentWrapper('${_}', '${g}');`),c=c.replace(e,``)}}if(l){let e=c.includes(`import React`)||c.match(/import\s+\{[^}]*\}\s+from\s+['"]react['"]/)||c.match(/import\s+[^,\s]+\s*,\s*\{[^}]*\}\s+from\s+['"]react['"]/),n=c.includes(`createServerComponentWrapper`),i=``;if(d&&!e&&(i+=`import React from 'react';
43
- `),f&&!n&&(i+=`import { createServerComponentWrapper } from 'virtual:rsc-integration.ts';
44
- `),p.length>0&&(i+=`${p.join(`
45
- `)}\n`),i&&(c=i+c),!c.includes(`Suspense`)){let e=c.match(/import React(,\s*\{([^}]*)\})?\s+from\s+['"]react['"];?/);e&&(e[1]&&!e[2].includes(`Suspense`)?c=c.replace(e[0],e[0].replace(/\{([^}]*)\}/,`{ Suspense, $1 }`)):e[1]||(c=c.replace(e[0],`import React, { Suspense } from 'react';`)))}let a=u.env.NODE_ENV!==`production`,o=c.includes(`</`)||c.includes(`/>`)||/\bJSX\b/.test(c);return!c.includes(`'use client'`)&&!c.includes(`"use client"`)&&o&&a&&(c=`'use client';\n\n${c}`,t.set(r,`client`)),c}return null},async configureServer(n){let r=e.projectRoot||u.cwd(),o=l.join(r,`src`);await I(r,e);let p=null,m=async()=>{try{let{ServerComponentBuilder:t,scanDirectory:i}=await import(`./server-build-DM-rQz-k.mjs`).then(e=>e.n),o=new t(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:c,csp:e.csp,rateLimit:e.rateLimit,spamBlocker:e.spamBlocker});if(p=o,!a&&p){let e=u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3);a=new E(p,e)}let d=l.join(r,`src`),f=[];if(s.existsSync(d)){let e=t=>{let n=s.readdirSync(t,{withFileTypes:!0});for(let r of n){let n=l.join(t,r.name);if(r.isDirectory())e(n);else if(r.isFile()&&/\.(?:tsx?|jsx?)$/.test(r.name))try{h(n)&&f.push(n)}catch(e){console.error(`[rari] Error checking ${n}:`,e)}}};e(d),i(d,o)}f.length>0&&n.ws.send({type:`custom`,event:`rari:server-components-registry`,data:{serverComponents:f}});let m=await o.getTransformedComponentsForDevelopment(),g=`http://localhost:${u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3)}`;for(let e of m)try{if(e.id.startsWith(`app/`)||e.code.includes(`"use server"`)||e.code.includes(`'use server'`))continue;let t=await fetch(`${g}/_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))}},g=async()=>{try{let e=`http://localhost:${u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3)}`,t=L(o,Object.values(c));for(let n of t){let t=l.relative(u.cwd(),n),r=l.basename(n).replace(/\.[^.]+$/,``);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)}},_=async()=>{if(i)return;let{getBinaryPath:e,getInstallationInstructions:t}=await import(`./platform.mjs`),r;try{r=e()}catch(e){console.error(`rari binary not found`),console.error(` ${e.message}`),console.error(t());return}let a=u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3),o=u.env.NODE_ENV===`production`?`production`:`development`,s=n.config.server.port||5173,c=[`--mode`,o,`--port`,a.toString(),`--host`,`127.0.0.1`];i=f(r,c,{stdio:[`ignore`,`pipe`,`pipe`],cwd:u.cwd(),env:{...u.env,RUST_LOG:u.env.RUST_LOG||`error`,RARI_VITE_PORT:s.toString()}}),i.stdout?.on(`data`,e=>{let t=e.toString().trim();t&&console.error(`${t}`)}),i.stderr?.on(`data`,e=>{let t=e.toString().trim();t&&!t.includes(`warning`)&&console.error(`${t}`)}),i.on(`error`,e=>{T=!1,console.error(`Failed to start rari server:`,e.message),e.message.includes(`ENOENT`)&&console.error(` Binary not found. Please ensure rari is properly installed.`)}),i.on(`exit`,(e,t)=>{i=null,T=!1,t?console.error(`rari server stopped by signal ${t}`):e===0?console.error(`rari server stopped successfully`):e&&console.error(`rari server exited with code ${e}`)});let l=!1;for(let e=0;e<20&&(l=await D(),!l);e++)await new Promise(e=>setTimeout(e,500));l?(await g(),await m()):console.error(`Server failed to become ready for component registration`)},v=async t=>{try{if(!h(t))return;let{ServerComponentBuilder:n}=await import(`./server-build-DM-rQz-k.mjs`).then(e=>e.n),i=new n(r,{outDir:`dist`,rscDir:`server`,manifestPath:`server/manifest.json`,serverConfigPath:`server/config.json`,alias:c,csp:e.csp,rateLimit:e.rateLimit,spamBlocker:e.spamBlocker});i.addServerComponent(t);let a=await i.getTransformedComponentsForDevelopment();if(a.length===0)return;let o=`http://localhost:${u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3)}`;for(let e of a)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(e){console.error(`[rari] Targeted HMR failed for`,`${t}:`,e instanceof Error?e.message:String(e)),setTimeout(m,1e3)}};_().catch(e=>{console.error(`[rari] Failed to start Rust server:`,e)}),n.middlewares.use(async(e,t,n)=>{let r=e.headers.accept;if(r&&r.includes(`text/x-component`)&&e.url&&!e.url.startsWith(`/api`)&&!e.url.startsWith(`/rsc`)&&!e.url.includes(`.`)){if(!T&&!await D()){let e=Date.now();for(;Date.now()-e<1e4&&!await D();)await new Promise(e=>setTimeout(e,100));if(!T){console.error(`[rari] Rust server not ready, cannot proxy RSC request`),t.headersSent||(t.statusCode=503,t.end(`Server not ready`));return}}let n=u.env.SERVER_PORT?Number(u.env.SERVER_PORT):Number(u.env.PORT||u.env.RSC_PORT||3e3),r=`http://localhost:${n}${e.url}`;try{let i={};for(let[t,n]of Object.entries(e.headers))typeof n==`string`?i[t]=n:Array.isArray(n)&&(i[t]=n.join(`,`));i.host=`localhost:${n}`,i[`accept-encoding`]=`identity`;let a=await fetch(r,{method:e.method,headers:i});if(t.statusCode=a.status,a.headers.forEach((e,n)=>{n.toLowerCase()!==`content-encoding`&&t.setHeader(n,e)}),a.body){let e=a.body.getReader();try{for(;;){let{done:n,value:r}=await e.read();if(n)break;t.write(d.from(r))}t.end()}catch(e){console.error(`[rari] Stream error:`,e),t.headersSent||(t.statusCode=500),t.end()}}else t.end();return}catch(e){console.error(`[rari] Failed to proxy RSC request:`,e),t.headersSent||(t.statusCode=500,t.end(`Internal Server Error`));return}}n()}),n.watcher.on(`change`,async e=>{/\.(?:tsx?|jsx?)$/.test(e)&&t.delete(e),/\.(?:tsx?|jsx?)$/.test(e)&&e.includes(o)&&(h(e)?(n.ws.send({type:`custom`,event:`rari:register-server-component`,data:{filePath:e}}),await v(e)):setTimeout(m,1e3))}),n.middlewares.use(`/api/vite/hmr-transform`,async(e,t)=>{if(e.method!==`POST`){t.statusCode=405,t.end(`Method Not Allowed`);return}let n=``;e.on(`data`,e=>{n+=e.toString()}),e.on(`end`,async()=>{try{let{filePath:e}=JSON.parse(n);if(!e){t.statusCode=400,t.end(JSON.stringify({error:`filePath is required`}));return}await v(e),t.statusCode=200,t.setHeader(`Content-Type`,`application/json`),t.end(JSON.stringify({success:!0,filePath:e,message:`Component transformation completed`}))}catch(e){t.statusCode=500,t.setHeader(`Content-Type`,`application/json`),t.end(JSON.stringify({success:!1,error:e instanceof Error?e.message:String(e)}))}})}),n.httpServer?.on(`close`,()=>{a&&=(a.dispose(),null),i&&=(i.kill(`SIGTERM`),null),T=!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-server-dom-rari-client`||e===`virtual:react-server-dom-rari-client.ts`)return`virtual:react-server-dom-rari-client.ts`;if(e===`virtual:app-router-provider`||e===`virtual:app-router-provider.tsx`)return`virtual:app-router-provider.tsx`;if(e===`./DefaultLoadingIndicator`||e===`./DefaultLoadingIndicator.tsx`)return`virtual:default-loading-indicator.tsx`;if(e===`./LoadingErrorBoundary`||e===`./LoadingErrorBoundary.tsx`)return`virtual:loading-error-boundary.tsx`;if(e===`react-server-dom-rari/server`)return e;if(t&&t.startsWith(`virtual:`)&&e.startsWith(`../`)){let n=import.meta.url,r=p(n),i=l.dirname(r),a=null,o=[l.join(i,`runtime`),l.join(i,`../runtime`)];for(let e of o)if(s.existsSync(e)){a=e;break}if(a){let t=l.join(a,e);if(s.existsSync(t))return t;let n=l.join(a,`../dist`,l.basename(e));if(s.existsSync(n))return n}else console.warn(`[rari] Runtime directory not found, attempting fallback resolution for virtual import.\n Importer: ${t}\n ID: ${e}\n Current Dir: ${i}\n Hint: Runtime lookup failed, trying currentDir as fallback`);let c=l.join(i,e);if(s.existsSync(c))return c;let u=l.join(i,`../dist`,l.basename(e));if(s.existsSync(u))return u}if(u.env.NODE_ENV===`production`)try{let t=l.resolve(e);if(s.existsSync(t)&&h(t))return{id:e,external:!0}}catch(t){t?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error resolving server component:`,e,t)}return null},async load(t){if(/\.(?:tsx?|jsx?)$/.test(t)){let e=this.environment;if(e&&e.name===`client`)try{let e=s.readFileSync(t,`utf-8`);if(v(e,`use server`))return b(e,t)}catch{}}if(t===`virtual:rari-entry-client.ts`){let e=L(l.join(u.cwd(),`src`),Object.values(c)),t=new Set([...n,...e]),r=[{path:`rari/image`,exports:[`Image`]}],i=[...t].filter(e=>{try{return v(s.readFileSync(e,`utf-8`),`use client`)}catch{return!1}}).map(e=>{let t=l.relative(u.cwd(),e).replace(/\\/g,`/`),n=t.replace(/\.(tsx?|jsx?)$/,``),r=t.startsWith(`..`)?e.replace(/\\/g,`/`):t,i=!1,a=``;try{let t=s.readFileSync(e,`utf-8`),n=/export\s+default\s+/.test(t),r=t.match(/export\s+(?:function|const|class)\s+(\w+)/);!n&&r&&(i=!0,a=r[1])}catch(t){t?.code!==`ENOENT`&&console.warn(`[rari] Unexpected error reading component for export detection:`,e,t)}let o=r.replace(/\\/g,`/`),c=o.startsWith(`/`)||/^[A-Z]:\//i.test(o)?o:`/${o}`;return` "${r}": {
46
- id: "${n}",
47
- path: "${r}",
48
- type: "client",
49
- loader: () => ${i?`import(${JSON.stringify(c)}).then(m => m.${a} || m.default || m)`:`import(${JSON.stringify(c)}).then(m => m.default || m)`},
50
- component: null,
51
- loading: false,
52
- registered: false
53
- }`}).join(`,
54
- `),a=r.map((e,t)=>`import { ${e.exports.map(e=>`${e} as External${t}_${e}`).join(`, `)} } from '${e.path}';`).join(`
55
- `),o=r.flatMap((e,t)=>e.exports.map(n=>{let r=`External${t}_${n}`;return`
56
- globalThis['~clientComponents'] = globalThis['~clientComponents'] || {};
57
- globalThis['~clientComponents']["${`${e.path}#${n}`}"] = {
58
- id: "${n}",
59
- path: "${e.path}",
60
- type: "client",
61
- component: ${r},
62
- registered: true
63
- };
64
- globalThis['~clientComponents']["${e.path}"] = globalThis['~clientComponents']["${e.path}"] || {};
65
- globalThis['~clientComponents']["${e.path}"].component = ${r};
66
- globalThis['~clientComponentPaths'] = globalThis['~clientComponentPaths'] || {};
67
- globalThis['~clientComponentPaths']["${e.path}"] = "${n}";`})).join(`
68
- `);return await P(a,[`
69
- const lazyComponentRegistry = {
70
- ${i}
71
- };
72
-
73
- for (const [path, config] of Object.entries(lazyComponentRegistry)) {
74
- globalThis['~clientComponents'][path] = config;
75
- globalThis['~clientComponents'][config.id] = config;
76
- globalThis['~clientComponentPaths'][path] = config.id;
77
- }
78
- `,o].filter(Boolean).join(`
79
- `))}if(t===`react-server-dom-rari/server`)return await F();if(t===`virtual:app-router-provider.tsx`){let e=[l.join(u.cwd(),`packages/rari/dist/runtime/AppRouterProvider.mjs`),l.join(u.cwd(),`node_modules/rari/dist/runtime/AppRouterProvider.mjs`)];for(let t of e)if(s.existsSync(t))return s.readFileSync(t,`utf-8`);return`export function AppRouterProvider({ children }) { return children; }`}if(t===`virtual:default-loading-indicator.tsx`){let e=[l.join(u.cwd(),`packages/rari/dist/runtime/DefaultLoadingIndicator.mjs`),l.join(u.cwd(),`node_modules/rari/dist/runtime/DefaultLoadingIndicator.mjs`)];for(let t of e)if(s.existsSync(t))return s.readFileSync(t,`utf-8`);return`export function DefaultLoadingIndicator() { return null; }`}if(t===`virtual:loading-error-boundary.tsx`){let e=[l.join(u.cwd(),`packages/rari/dist/runtime/LoadingErrorBoundary.mjs`),l.join(u.cwd(),`node_modules/rari/dist/runtime/LoadingErrorBoundary.mjs`)];for(let t of e)if(s.existsSync(t))return s.readFileSync(t,`utf-8`);return`export class LoadingErrorBoundary extends React.Component { render() { return this.props.children; } }`}if(t===`virtual:rsc-integration.ts`)return(await N()).replace(/from(\s*)(['"])(?:\.\/|rari\/)react-server-dom-rari-client\.mjs\2/g,(e,t,n)=>`from${t}${n}virtual:react-server-dom-rari-client.ts${n}`);if(t===`virtual:react-server-dom-rari-client.ts`)return await M(`react-server-dom-rari-client.mjs`);if(t.endsWith(`.mjs`)&&s.existsSync(t))try{let n=e.projectRoot||u.cwd(),r=s.realpathSync(t),i=l.relative(n,r),a=!i.startsWith(`..`)&&!l.isAbsolute(i),o=r.includes(`${l.sep}node_modules${l.sep}`),c=r.includes(`${l.sep}packages${l.sep}rari${l.sep}`)||r.includes(`${l.sep}node_modules${l.sep}rari${l.sep}`);return a||o||c?s.readFileSync(t,`utf-8`):(console.warn(`[rari] Refusing to load .mjs file outside project root and node_modules: ${t}`),null)}catch(e){return console.warn(`[rari] Error validating .mjs file path: ${t}`,e),null}},async handleHotUpdate({file:e,server:t}){if(!/\.(?:tsx?|jsx?)$/.test(e))return;if(e.includes(`/dist/`)||e.includes(`\\dist\\`))return[];let n=a?.detectComponentType(e)||`unknown`,r=e.includes(`/app/`)||e.includes(`\\app\\`),i=e.endsWith(`page.tsx`)||e.endsWith(`page.jsx`),o=e.endsWith(`layout.tsx`)||e.endsWith(`layout.jsx`),s=e.endsWith(`loading.tsx`)||e.endsWith(`loading.jsx`),c=e.endsWith(`error.tsx`)||e.endsWith(`error.jsx`),l=e.endsWith(`not-found.tsx`)||e.endsWith(`not-found.jsx`);if(r&&(i||o||s||c||l)){let n=`page`;o?n=`layout`:s?n=`loading`:c?n=`error`:l&&(n=`not-found`),t.hot.send(`rari:app-router-updated`,{type:`rari-hmr`,filePath:e,fileType:n});return}if(n!==`client`&&n===`server`)return a&&await a.handleServerComponentUpdate(e,t),[]},transformIndexHtml:{order:`pre`,handler(e){let t=/import\s+["']([^"']+)["']/g,n=[];for(let r of e.matchAll(t)){let e=r[1];e.startsWith(`/src/`)&&n.push(e)}return n.length>0?{html:e,tags:n.map(e=>({tag:`script`,attrs:{type:`module`,src:e},injectTo:`head-prepend`}))}:e}},async writeBundle(){await I(e.projectRoot||u.cwd(),e)}},o({...e.serverBuild,csp:e.csp,rateLimit:e.rateLimit,spamBlocker:e.spamBlocker})];return e.proxy!==!1&&O.push(g(e.proxy||{})),e.router!==!1&&O.push(w(e.router||{})),O}function B(e){return{plugins:[z(),...e.plugins||[]],...e}}export{g as a,w as i,R as n,h as o,z as r,B as t};