rari 0.15.16 → 0.15.17

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 (2) hide show
  1. package/dist/vite.mjs +1 -1
  2. package/package.json +8 -8
package/dist/vite.mjs CHANGED
@@ -99,7 +99,7 @@ const ${e} = globalThis['~clientComponents']?.[${JSON.stringify(t)}]?.component
99
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:`)&&!Rt(n)&&t.add(n);for(let n of e.dynamicallyImportedIds)!n.startsWith(`.`)&&!n.startsWith(`/`)&&!n.startsWith(`node:`)&&!Rt(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=E.dirname(r),s=Un.test(E.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=E.resolve(o,t);for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`,``]){let n=e+t;if(w.existsSync(n)&&w.statSync(n).isFile())return n}for(let t of[`.ts`,`.tsx`,`.js`,`.jsx`]){let n=E.join(e,`index${t}`);if(w.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`)||er(n)||t.startsWith(`node:`)||Rt(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=S(t,i,this.projectRoot),(r==null||r===``)&&(t.startsWith(`./`)||t.startsWith(`../`))){let i=n===e?o:E.dirname(n);r=E.resolve(i,t)}if((r==null||r===``)&&E.isAbsolute(t)&&(r=t),r!==``)for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=r+e;if(w.existsSync(t)&&w.statSync(t).isFile()){if(this.isClientComponent(t)){let e=E.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=E.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(m,``);return w.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null,r=this.options.alias;n=S(e,r,this.projectRoot);let a=t?.startsWith(`\0`)?o:t!=null&&t!==``?E.dirname(t):o;if((n==null||n===``)&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=E.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(w.existsSync(t)&&w.statSync(t).isFile()){if(this.isClientComponent(t)||this.isServerActionFile(t))return null;let e=E.join(this.projectRoot,`src`);if(!t.startsWith(e))return null;let n=this.getComponentId(t),r=E.join(this.options.outDir,this.options.rscDir,`${n}.js`);if(w.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:w.readFileSync(t,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let t=S(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(w.existsSync(n)&&w.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=E.join(t,`index${e}`);if(w.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=E.join($n,`proxy/RariResponse.mjs`);if(w.existsSync(e))return e;let t=E.join(Q,`src/proxy/http/response.ts`);if(w.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`)?E.dirname(t):o,r=E.resolve(n,e);if(w.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 sr(),n=w.readFileSync(t),r=e({filename:E.relative(this.projectRoot,t),code:n,cssModules:{pattern:Yn}});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:`)||Rt(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`||S(e,this.options.alias,this.projectRoot)!=null)return null;if(!e.startsWith(`.`)&&!e.startsWith(`/`)){if(Zn(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:fe(t).resolve(e)}}catch{try{let n=import.meta.resolve(e,k(t).href);return{id:O(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 Hn();return n?n(e,t,{hashSalt:`${this.useCacheBuildId??`development`}:rari-use-cache-v1`}):null}}]}async buildComponentCodeOnly(e){let t=await w.promises.readFile(e,`utf-8`),n=Bn(t,this.getComponentId(e))?.code??t,r=this.transformClientImports(n,e),i=this.isPageComponent(e),a=i?this.transformComponentImportsToGlobal(r):r,o=E.extname(e),s;s=o===`.tsx`?`tsx`:o===`.ts`?`ts`:o===`.jsx`?`jsx`:`js`;let c=`\0virtual:${e}`,l=await j({input:c,platform:`node`,write:!1,external:[Jn,`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(D.env.NODE_ENV!=null&&D.env.NODE_ENV!==``?D.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=E.relative(this.projectRoot,n),u=this.getComponentId(n),d=E.join(this.options.rscDir,`${u}.js`),f=E.join(this.options.outDir,d);r++,(async()=>{try{let e=E.dirname(f);await w.promises.mkdir(e,{recursive:!0});let r=await this.buildSingleComponent(n,f),i=await this.writeComponentCssAsset(u,r.css),a=k(E.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=E.join(this.options.outDir,this.options.rscDir);await w.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=P(JSON.stringify(t.components),16),t.useCacheBuildId=this.useCacheBuildId);let c=E.join(this.options.outDir,this.options.manifestPath);await w.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);let u=this.options.origin?.trim().replace(/\/+$/,``);u!=null&&u!==``&&(l.origin=u),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 d=E.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(l).length===0)try{await w.promises.unlink(d)}catch(e){o(e)!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await w.promises.writeFile(d,JSON.stringify(l),`utf-8`);return t}async buildMdxRegistry(e){let n=an({projectRoot:this.projectRoot,mdxOptions:e,alias:this.options.alias,cache:this.moduleAnalysisCache}),r=E.join(this.options.outDir,this.options.manifestPath),i;if(w.existsSync(r)){let e=await w.promises.readFile(r,`utf-8`),n=t(e);i=n&&cr(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 w.promises.writeFile(r,JSON.stringify(i),`utf-8`)}async buildSSRClientComponents(){let e=E.join(this.options.outDir,`ssr`);await w.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=w.readFileSync(e,`utf-8`);t.push({filePath:e,code:n})}catch{}try{let e=nr();if(e!=null&&e!==``){let n=w.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=ar(e,this.projectRoot);n.set(E.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=ir(i,this.projectRoot),u=`ssr/${ar(i,this.projectRoot)}.js`,d=E.join(this.options.outDir,u);a++,(async()=>{try{let e=E.dirname(d);await w.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=E.join(e,`manifest.json`);await w.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=E.join(this.options.outDir,`server`);await w.promises.mkdir(i,{recursive:!0});let a=E.join(i,`client-reference-manifest.json`);await w.promises.writeFile(a,JSON.stringify(r),`utf-8`)}resolveExternalClientSourcePath(e,t){let n=E.join(Q,...e);if(w.existsSync(n))return n;try{let e=O(import.meta.resolve(t));if(w.existsSync(e))return e}catch{}return null}async buildExternalClientComponents(e,t){for(let{componentId:n,devSourceSegments:r,publishedExport:i,exports:a}of Qn){let o=this.resolveExternalClientSourcePath(r,i);if(o!=null&&o!==``)try{let r=`ssr/${`external_${P(n)}`}.js`,i=E.join(this.options.outDir,r);await w.promises.mkdir(E.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 gt(e)}generateClientReferenceStub(e,t){let n=[`default`];try{n=gt(w.readFileSync(e,`utf-8`))}catch{}return pn(t,n)}isServerActionFile(e){try{let t=w.readFileSync(e,`utf-8`);return this.isServerAction(t,e)}catch{return!1}}generateServerActionRuntimeModule(e,t){let n=w.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
100
  `)}\n`}generateServerActionReferenceModule(e){let t=w.readFileSync(e,`utf-8`),n=this.extractExportNames(t),r=this.getComponentId(e),i=`import { createServerReference } from 'react-server-dom-webpack/client';
101
101
  `;i+=`import { callServer } from 'rari/runtime/call-server';
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 w.promises.readFile(e,`utf-8`)).replace(/^['"]use client['"];?\s*/m,``),i=E.extname(e),a;a=i===`.tsx`?`tsx`:i===`.ts`?`ts`:i===`.jsx`?`jsx`:`js`;let o=`\0ssr-virtual:${e}`,s=this.projectRoot,c=tr(e,s),l=e=>this.generateServerActionReferenceModule(e),u=e=>this.isServerActionFile(e),d=(await j({input:o,platform:`node`,write:!1,external:[Jn,`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(D.env.NODE_ENV!=null&&D.env.NODE_ENV!==``?D.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=E.join(c,t.slice(2)):r===o?i=E.resolve(E.dirname(e),t):r!=null&&r!==``&&(i=E.resolve(E.dirname(r.replace(`\0ssr-virtual:`,``).replace(`\0server-action-ref:`,``)),t));let a=ae(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`]),s=a!=null&&a!==``?a:oe(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`]);if(s!=null&&s!==``&&u(s))return`\0server-action-ref:${E.resolve(s)}`;if(s!=null&&s!==``&&n!=null){let t=E.resolve(s),r=n.get(t);if(r!=null&&r!==``&&t!==E.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 w.promises.writeFile(t,f,`utf-8`),{code:f}}async buildSingleComponent(e,t){let n=await w.promises.readFile(e,`utf-8`),r=Bn(n,this.getComponentId(e))?.code??n,i=this.transformClientImports(r,e),a=this.isPageComponent(e),o=a?this.transformComponentImportsToGlobal(i):i,s=E.extname(e),c;c=s===`.tsx`?`tsx`:s===`.ts`?`ts`:s===`.jsx`?`jsx`:`js`;let l=`\0virtual:${e}`,u=[],d=await j({input:l,platform:`node`,write:!1,external:[Jn,`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(D.env.NODE_ENV!=null&&D.env.NODE_ENV!==``?D.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 w.promises.writeFile(t,p,`utf-8`);let m=await w.promises.open(t,`r+`);return await m.sync(),await m.close(),{code:p,css:u}}transformClientImports(e,t){let n=Qn.map(e=>e.componentId),r=[],i=!1,a=!1;for(let o of ht(e)){if(o.typeOnly||o.sideEffectOnly)continue;let e=!1,s=o.source;if(n.includes(o.source))e=!0;else if(qn.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=E.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(
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 w.promises.readFile(e,`utf-8`)).replace(/^['"]use client['"];?\s*/m,``),i=E.extname(e),a;a=i===`.tsx`?`tsx`:i===`.ts`?`ts`:i===`.jsx`?`jsx`:`js`;let o=`\0ssr-virtual:${e}`,s=this.projectRoot,c=tr(e,s),l=e=>this.generateServerActionReferenceModule(e),u=e=>this.isServerActionFile(e),d=(await j({input:o,platform:`node`,write:!1,external:[Jn,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,`react/compiler-runtime`,/^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`,`.mjs`]},transform:{jsx:`react-jsx`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(D.env.NODE_ENV!=null&&D.env.NODE_ENV!==``?D.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=E.join(c,t.slice(2)):r===o?i=E.resolve(E.dirname(e),t):r!=null&&r!==``&&(i=E.resolve(E.dirname(r.replace(`\0ssr-virtual:`,``).replace(`\0server-action-ref:`,``)),t));let a=ae(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`]),s=a!=null&&a!==``?a:oe(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`]);if(s!=null&&s!==``&&u(s))return`\0server-action-ref:${E.resolve(s)}`;if(s!=null&&s!==``&&n!=null){let t=E.resolve(s),r=n.get(t);if(r!=null&&r!==``&&t!==E.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 w.promises.writeFile(t,f,`utf-8`),{code:f}}async buildSingleComponent(e,t){let n=await w.promises.readFile(e,`utf-8`),r=Bn(n,this.getComponentId(e))?.code??n,i=this.transformClientImports(r,e),a=this.isPageComponent(e),o=a?this.transformComponentImportsToGlobal(i):i,s=E.extname(e),c;c=s===`.tsx`?`tsx`:s===`.ts`?`ts`:s===`.jsx`?`jsx`:`js`;let l=`\0virtual:${e}`,u=[],d=await j({input:l,platform:`node`,write:!1,external:[Jn,`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(D.env.NODE_ENV!=null&&D.env.NODE_ENV!==``?D.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 w.promises.writeFile(t,p,`utf-8`);let m=await w.promises.open(t,`r+`);return await m.sync(),await m.close(),{code:p,css:u}}transformClientImports(e,t){let n=Qn.map(e=>e.componentId),r=[],i=!1,a=!1;for(let o of ht(e)){if(o.typeOnly||o.sideEffectOnly)continue;let e=!1,s=o.source;if(n.includes(o.source))e=!0;else if(qn.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=E.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(
103
103
  null,
104
104
  ${JSON.stringify(s)},
105
105
  "default"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rari",
3
3
  "type": "module",
4
- "version": "0.15.16",
4
+ "version": "0.15.17",
5
5
  "description": "Runtime Accelerated Rendering Infrastructure (rari)",
6
6
  "author": "Ryan Skinner",
7
7
  "license": "MIT",
@@ -153,13 +153,13 @@
153
153
  "rolldown": "^1.2.6"
154
154
  },
155
155
  "optionalDependencies": {
156
- "@rari/use-cache": "0.15.16",
157
- "rari-darwin-arm64": "0.15.16",
158
- "rari-darwin-x64": "0.15.16",
159
- "rari-linux-arm64": "0.15.16",
160
- "rari-linux-x64": "0.15.16",
161
- "rari-win32-arm64": "0.15.16",
162
- "rari-win32-x64": "0.15.16"
156
+ "@rari/use-cache": "0.15.17",
157
+ "rari-darwin-arm64": "0.15.17",
158
+ "rari-darwin-x64": "0.15.17",
159
+ "rari-linux-arm64": "0.15.17",
160
+ "rari-linux-x64": "0.15.17",
161
+ "rari-win32-arm64": "0.15.17",
162
+ "rari-win32-x64": "0.15.17"
163
163
  },
164
164
  "devDependencies": {
165
165
  "@mdx-js/mdx": "^3.1.1",