rari 0.15.0 → 0.15.2

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
@@ -85,7 +85,7 @@ export default registerClientReference(null, ${JSON.stringify(r)}, "default");
85
85
  `,moduleType:`js`}}if(e.startsWith(`\0server-action:`)){let t=e.slice(15),n=u.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(s,``);return T.existsSync(t)?{id:`\0transformed:${t}`}:null}let n=null;n=x(e,this.options.alias||{},this.projectRoot);let r=t?.startsWith(`\0`)?o:t?D.dirname(t):o;if(!n&&(e.startsWith(`./`)||e.startsWith(`../`))&&(n=D.resolve(r,e)),!n||r.includes(`node_modules`))return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let t=n+e;if(T.existsSync(t)&&T.statSync(t).isFile()){if(this.isClientComponent(t)||this.isServerActionFile(t))return null;let e=D.join(this.projectRoot,`src`);if(!t.startsWith(e))return null;let n=this.getComponentId(t),r=D.join(this.options.outDir,this.options.rscDir,`${n}.js`);if(T.existsSync(r))return{id:`\0transformed:${r}`};break}}return null},load(e){if(e.startsWith(`\0transformed:`)){let t=e.slice(13);return{code:T.readFileSync(t,`utf-8`),moduleType:`js`}}return null}},{name:`resolve-aliases`,resolveId:e=>{if(e.startsWith(`\0`))return null;let t=x(e,this.options.alias||{},this.projectRoot);if(!t)return null;for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`]){let n=t+e;if(T.existsSync(n)&&T.statSync(n).isFile()){if(this.isServerActionFile(n)){let e=this.getComponentId(n);return u.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=D.join(t,`index${e}`);if(T.existsSync(n)){if(this.isServerActionFile(n)){let e=this.getComponentId(n);return u.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(c&&e===`rari`){let e=D.join(Wt,`proxy/RariResponse.mjs`);if(T.existsSync(e))return e;let t=D.join(Y,`src/proxy/http/response.ts`);if(T.existsSync(t))return t}return null}},{name:`css-modules`,resolveId:(e,t)=>{if(e.endsWith(`.module.css`)){let n=!t?.startsWith(`\0`)&&t?D.dirname(t):o,r=D.resolve(n,e);if(T.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 Qt(),n=T.readFileSync(t),r=e({filename:D.relative(this.projectRoot,t),code:n,cssModules:{pattern:Ht}});a&&a.push(new TextDecoder().decode(r.code));let i={};if(r.exports)for(let[e,t]of Object.entries(r.exports))i[e]=t.name;return{code:`export default ${JSON.stringify(i)}`,moduleType:`js`}}catch(t){throw Error(`[rari] Failed to process CSS module ${e}: ${t instanceof Error?t.message:String(t)}`)}}},{name:`externalize-deps`,resolveId:e=>e.startsWith(`\0`)?null:e.startsWith(`node:`)||K(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`}?{id:e,external:!0}:e===`rari`||x(e,this.options.alias||{},this.projectRoot)?null:!e.startsWith(`.`)&&!e.startsWith(`/`)?{id:e,external:!0}: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 Nt();return n?n(e,t,{hashSalt:`${this.useCacheBuildId??`development`}:rari-use-cache-v1`}):null}}]}async buildComponentCodeOnly(e){let t=await T.promises.readFile(e,`utf-8`),n=this.transformClientImports(t,e),r=this.isPageComponent(e),i=r?this.transformComponentImportsToGlobal(n):n,a=D.extname(e),o;o=a===`.tsx`?`tsx`:a===`.ts`?`ts`:a===`.jsx`?`jsx`:`js`;let s=`\0virtual:${e}`,c=await M({input:s,platform:`node`,write:!1,external:[Vt,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${o}`]:o},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(O.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(s,i,o,e,r,[])});if(!c.output||c.output.length===0)throw Error(`No output generated from Rolldown`);let l=c.output.find(e=>e.type===`chunk`&&e.isEntry);if(!l||l.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let u=l.code;return u=`// Built: ${new Date().toISOString()}\n${u}`,u}async 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=D.relative(this.projectRoot,n),u=this.getComponentId(n),d=D.join(this.options.rscDir,`${u}.js`),f=D.join(this.options.outDir,d);r++,(async()=>{try{let e=D.dirname(f);await T.promises.mkdir(e,{recursive:!0});let r=await this.buildSingleComponent(n,f),i=await this.writeComponentCssAsset(u,r.css),a=A(D.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=D.join(this.options.outDir,this.options.rscDir);await T.promises.mkdir(e,{recursive:!0});let t={components:{},buildTime:new Date().toISOString()},n=this.options.experimental?.useCache||this.options.experimental?.useCacheRemote,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)),o=[...this.serverActions.entries()];await Promise.all([this.buildComponentBatch(i,t,r),this.buildComponentBatch(o,t,r)]),await this.buildComponentBatch(a,t,r),n&&(this.useCacheBuildId=I(JSON.stringify(t.components),16),t.useCacheBuildId=this.useCacheBuildId);let s=D.join(this.options.outDir,this.options.manifestPath);await T.promises.writeFile(s,JSON.stringify(t),`utf-8`),await this.writeRouteCssEntries(t);let c={};this.options.csp&&(c.csp=this.options.csp),this.options.cacheControl&&(c.cacheControl=this.options.cacheControl),this.options.cache&&(c.cache=this.options.cache),(this.options.experimental?.useCacheRemote||this.useCacheBuildId)&&(c.useCache={...this.options.experimental?.useCacheRemote?{remote:this.options.experimental.useCacheRemote}:{},...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 l=D.join(this.options.outDir,this.options.serverConfigPath);if(Object.keys(c).length===0)try{await T.promises.unlink(l)}catch(e){e.code!==`ENOENT`&&console.warn(`Failed to remove server config file:`,e)}else await T.promises.writeFile(l,JSON.stringify(c),`utf-8`);return t}async buildMdxRegistry(e){let t=wt({projectRoot:this.projectRoot,mdxOptions:e,alias:this.options.alias||{},cache:this.moduleAnalysisCache}),n=D.join(this.options.outDir,this.options.manifestPath),r;if(T.existsSync(n)){let e=await T.promises.readFile(n,`utf-8`);r=JSON.parse(e)}else r={components:{},buildTime:new Date().toISOString()};r.mdxRegistry=t.map(e=>({name:e.name,id:e.moduleId,client:e.client})),await T.promises.writeFile(n,JSON.stringify(r),`utf-8`)}async buildSSRClientComponents(){let e=D.join(this.options.outDir,`ssr`);await T.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=T.readFileSync(e,`utf-8`);t.push({filePath:e,code:n})}catch{}try{let e=qt();if(e){let n=T.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=Xt(e,this.projectRoot);n.set(D.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=Yt(i,this.projectRoot),u=`ssr/${Xt(i,this.projectRoot)}.js`,d=D.join(this.options.outDir,u);a++,(async()=>{try{let e=D.dirname(d);await T.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=D.join(e,`manifest.json`);await T.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=D.join(this.options.outDir,`server`);await T.promises.mkdir(i,{recursive:!0});let a=D.join(i,`client-reference-manifest.json`);await T.promises.writeFile(a,JSON.stringify(r),`utf-8`)}resolveExternalClientSourcePath(e,t){let n=D.join(Y,...e);if(T.existsSync(n))return n;try{let e=k(import.meta.resolve(t));if(T.existsSync(e))return e}catch{}return null}async buildExternalClientComponents(e,t){for(let{componentId:n,devSourceSegments:r,publishedExport:i,exports:a}of Ut){let o=this.resolveExternalClientSourcePath(r,i);if(o)try{let r=`ssr/${`external_${I(n)}`}.js`,i=D.join(this.options.outDir,r);await T.promises.mkdir(D.dirname(i),{recursive:!0}),await this.buildSSRSingleClient(o,i,t),e[n]={id:n,filePath:o,bundlePath:r,exports:[...a]}}catch(e){console.warn(`[rari] SSR build failed for ${n}:`,e instanceof Error?e.message:e)}}}extractExportNames(e){let t=[];/export\s+default\b/.test(e)&&t.push(`default`);for(let n of e.matchAll(/export\s+(?:async\s+)?(?:function|const|let|var|class)\s+(\w+)/g))t.push(n[1]);return t.length>0?t:[`default`]}isServerActionFile(e){try{let t=T.readFileSync(e,`utf-8`);return this.isServerAction(t,e)}catch{return!1}}generateServerActionRuntimeModule(e,t){let n=T.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(`
86
86
  `)}\n`}generateServerActionReferenceModule(e){let t=T.readFileSync(e,`utf-8`),n=this.extractExportNames(t),r=this.getComponentId(e),i=`import { createServerReference } from 'react-server-dom-webpack/client';
87
87
  `;i+=`import { callServer } from 'rari/runtime/call-server';
88
- `;for(let e of n){let t=`${r}#${e}`;e==="default"?i+=`export default createServerReference(${JSON.stringify(t)}, callServer);\n`:i+=`export const ${e} = createServerReference(${JSON.stringify(t)}, callServer);\n`}return i}async buildSSRSingleClient(e,t,n){let r=(await T.promises.readFile(e,`utf-8`)).replace(/^['"]use client['"];?\s*/m,``),i=D.extname(e),a;a=i===`.tsx`?`tsx`:i===`.ts`?`ts`:i===`.jsx`?`jsx`:`js`;let o=`\0ssr-virtual:${e}`,s=this.projectRoot,c=Kt(e,s),l=this,u=(await M({input:o,platform:`node`,write:!1,external:[Vt,`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(O.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.generateServerActionReferenceModule(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=D.join(c,t.slice(2)):r===o?i=D.resolve(D.dirname(e),t):r&&(i=D.resolve(D.dirname(r.replace(`\0ssr-virtual:`,``).replace(`\0server-action-ref:`,``)),t));let a=b(i,[`.ts`,`.tsx`,`.js`,`.jsx`])||ee(i,[`.ts`,`.tsx`,`.js`,`.jsx`]);if(a&&l.isServerActionFile(a))return`\0server-action-ref:${D.resolve(a)}`;if(a&&n){let t=D.resolve(a),r=n.get(t);if(r&&t!==D.resolve(e))return{id:r,external:!0}}return a||null}return null}}]})).output[0],d=typeof u==`object`&&`code`in u?u.code:``;return await T.promises.writeFile(t,d,`utf-8`),{code:d}}async buildSingleComponent(e,t){let n=await T.promises.readFile(e,`utf-8`),r=this.transformClientImports(n,e),i=this.isPageComponent(e),a=i?this.transformComponentImportsToGlobal(r):r,o=D.extname(e),s;s=o===`.tsx`?`tsx`:o===`.ts`?`ts`:o===`.jsx`?`jsx`:`js`;let c=`\0virtual:${e}`,l=[],u=await M({input:c,platform:`node`,write:!1,external:[Vt,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${s}`]:s},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(O.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(c,a,s,e,i,l)});if(!u.output||u.output.length===0)throw Error(`No output generated from Rolldown`);let d=u.output.find(e=>e.type===`chunk`&&e.isEntry);if(!d||d.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let f=d.code;f=`// Built: ${new Date().toISOString()}\n${f}`,await T.promises.writeFile(t,f,`utf-8`);let p=await T.promises.open(t,`r+`);return await p.sync(),await p.close(),{code:f,css:l}}transformClientImports(e,t){let n=e,r,i=[],a=!1,o=Ut.map(e=>e.componentId);for(Ft.lastIndex=0;r=Ft.exec(e),r!==null;){let[e,n,s,c]=r,l=!1,u=c;if(o.includes(c))l=!0;else{let e=this.resolveImportPath(c,t);this.isClientComponent(e)&&(l=!0,u=D.relative(this.projectRoot,e).replace(v,`/`))}if(l){a=!0;let t=``;n?t=`const ${n} = registerClientReference(
88
+ `;for(let e of n){let t=`${r}#${e}`;e==="default"?i+=`export default createServerReference(${JSON.stringify(t)}, callServer);\n`:i+=`export const ${e} = createServerReference(${JSON.stringify(t)}, callServer);\n`}return i}async buildSSRSingleClient(e,t,n){let r=(await T.promises.readFile(e,`utf-8`)).replace(/^['"]use client['"];?\s*/m,``),i=D.extname(e),a;a=i===`.tsx`?`tsx`:i===`.ts`?`ts`:i===`.jsx`?`jsx`:`js`;let o=`\0ssr-virtual:${e}`,s=this.projectRoot,c=Kt(e,s),l=this,u=(await M({input:o,platform:`node`,write:!1,external:[Vt,`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(O.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.generateServerActionReferenceModule(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=D.join(c,t.slice(2)):r===o?i=D.resolve(D.dirname(e),t):r&&(i=D.resolve(D.dirname(r.replace(`\0ssr-virtual:`,``).replace(`\0server-action-ref:`,``)),t));let a=b(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`])||ee(i,[`.mjs`,`.mts`,`.ts`,`.tsx`,`.js`,`.jsx`]);if(a&&l.isServerActionFile(a))return`\0server-action-ref:${D.resolve(a)}`;if(a&&n){let t=D.resolve(a),r=n.get(t);if(r&&t!==D.resolve(e))return{id:r,external:!0}}return a||null}return null}}]})).output[0],d=typeof u==`object`&&`code`in u?u.code:``;return await T.promises.writeFile(t,d,`utf-8`),{code:d}}async buildSingleComponent(e,t){let n=await T.promises.readFile(e,`utf-8`),r=this.transformClientImports(n,e),i=this.isPageComponent(e),a=i?this.transformComponentImportsToGlobal(r):r,o=D.extname(e),s;s=o===`.tsx`?`tsx`:o===`.ts`?`ts`:o===`.jsx`?`jsx`:`js`;let c=`\0virtual:${e}`,l=[],u=await M({input:c,platform:`node`,write:!1,external:[Vt,`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`],output:{format:`esm`,minify:this.options.minify},moduleTypes:{[`.${s}`]:s},resolve:{mainFields:[`module`,`main`],conditionNames:[`import`,`module`,`default`],extensions:[`.ts`,`.tsx`,`.js`,`.jsx`]},transform:{jsx:`react`,define:{global:`globalThis`,"process.env.NODE_ENV":JSON.stringify(O.env.NODE_ENV||`production`),...this.options.define}},plugins:this.createBuildPlugins(c,a,s,e,i,l)});if(!u.output||u.output.length===0)throw Error(`No output generated from Rolldown`);let d=u.output.find(e=>e.type===`chunk`&&e.isEntry);if(!d||d.type!==`chunk`)throw Error(`No entry chunk found in Rolldown output`);let f=d.code;f=`// Built: ${new Date().toISOString()}\n${f}`,await T.promises.writeFile(t,f,`utf-8`);let p=await T.promises.open(t,`r+`);return await p.sync(),await p.close(),{code:f,css:l}}transformClientImports(e,t){let n=e,r,i=[],a=!1,o=Ut.map(e=>e.componentId);for(Ft.lastIndex=0;r=Ft.exec(e),r!==null;){let[e,n,s,c]=r,l=!1,u=c;if(o.includes(c))l=!0;else{let e=this.resolveImportPath(c,t);this.isClientComponent(e)&&(l=!0,u=D.relative(this.projectRoot,e).replace(v,`/`))}if(l){a=!0;let t=``;n?t=`const ${n} = registerClientReference(
89
89
  null,
90
90
  ${JSON.stringify(u)},
91
91
  "default"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rari",
3
3
  "type": "module",
4
- "version": "0.15.0",
4
+ "version": "0.15.2",
5
5
  "description": "Runtime Accelerated Rendering Infrastructure (rari)",
6
6
  "author": "Ryan Skinner",
7
7
  "license": "MIT",
@@ -145,13 +145,13 @@
145
145
  "rolldown": "^1.1.5"
146
146
  },
147
147
  "optionalDependencies": {
148
- "@rari/use-cache": "0.15.0",
149
- "rari-darwin-arm64": "0.15.0",
150
- "rari-darwin-x64": "0.15.0",
151
- "rari-linux-arm64": "0.15.0",
152
- "rari-linux-x64": "0.15.0",
153
- "rari-win32-arm64": "0.15.0",
154
- "rari-win32-x64": "0.15.0"
148
+ "@rari/use-cache": "0.15.2",
149
+ "rari-darwin-arm64": "0.15.2",
150
+ "rari-darwin-x64": "0.15.2",
151
+ "rari-linux-arm64": "0.15.2",
152
+ "rari-linux-x64": "0.15.2",
153
+ "rari-win32-arm64": "0.15.2",
154
+ "rari-win32-x64": "0.15.2"
155
155
  },
156
156
  "devDependencies": {
157
157
  "@mdx-js/mdx": "^3.1.1",