@mercurjs/cli 2.3.8-canary.1 → 2.3.8-canary.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.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import*as b from'path';import b__default,{join,basename}from'path';import pt from'prompts';import {z}from'zod';import Xe,{promises,existsSync,readFileSync,mkdirSync,writeFileSync,statSync}from'fs';import {cosmiconfig}from'cosmiconfig';import {loadConfig,createMatchPath}from'tsconfig-paths';import gt from'fs-extra';import tt from'fast-glob';import Ms,{createHash}from'crypto';import Jt from'deepmerge';import*as A from'fs/promises';import A__default,{writeFile,rm}from'fs/promises';import Ls,{homedir,tmpdir}from'os';import {Project,ScriptKind}from'ts-morph';import xe from'kleur';import No from'ora';import {execa}from'execa';import {detect}from'@antfu/ni';import {diffLines}from'diff';import {execSync}from'child_process';import {builtinModules}from'module';import {generatePluginEntryModule}from'@mercurjs/dashboard-sdk/vite';var It={version:"2.3.8-canary.1"};var St="MISSING_DIR_OR_EMPTY_PROJECT",P="MISSING_CONFIG",M="BUILD_MISSING_REGISTRY_FILE";var Yr=z.enum(["registry:api","registry:vendor","registry:admin"]),kt=z.object({path:z.string(),content:z.string().optional(),type:Yr,target:z.string().optional()}),Ct=z.object({$schema:z.string().optional(),name:z.string(),title:z.string().optional(),author:z.string().min(2).optional(),description:z.string().optional(),dependencies:z.array(z.string()).optional(),devDependencies:z.array(z.string()).optional(),registryDependencies:z.array(z.string()).optional(),meta:z.record(z.string(),z.any()).optional(),docs:z.string().optional(),categories:z.array(z.string()).optional()}),j=Ct.extend({files:z.array(kt)}),J=z.object({name:z.string(),homepage:z.string(),items:z.array(j)}),Fn=z.array(Ct),Pt=j.pick({dependencies:true,devDependencies:true,files:true,docs:true}),Jr=z.union([z.string(),z.object({url:z.string(),params:z.record(z.string(),z.string()).optional(),headers:z.record(z.string(),z.string()).optional()})]),_t=z.record(z.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @mercurjs)"}),Jr);var _e="https://registry.mercurjs.com/registry.json",Tt="https://registry.mercurjs.com/registry-item.json",de=process.env.REGISTRY_URL??"https://raw.githubusercontent.com/mercurjs/mercur/main/packages/registry/r",_={"@mercurjs":`${de}/{name}.json`};var F={NOT_FOUND:"NOT_FOUND",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},S=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||F.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}},se=class extends S{constructor(r,o){let s=`The item at ${r} was not found. It may not exist at the registry.`;super(s,{code:F.NOT_FOUND,statusCode:404,cause:o,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError";}url},Te=class extends S{constructor(r,o){let s=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(s,{code:F.UNAUTHORIZED,statusCode:401,cause:o,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError";}url},je=class extends S{constructor(r,o){let s=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(s,{code:F.FORBIDDEN,statusCode:403,cause:o,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError";}url},Fe=class extends S{constructor(r,o,s,n){let i=o?`Failed to fetch from registry (${o}): ${r}`:`Failed to fetch from registry: ${r}`,f=typeof n=="string"&&n?`${i} - ${n}`:i,c="Check your network connection and try again.";o===404?c="The requested resource was not found. Check the URL or item name.":o===500?c="The registry server encountered an error. Try again later.":o&&o>=400&&o<500&&(c="There was a client error. Check your request parameters.");super(f,{code:F.FETCH_ERROR,statusCode:o,cause:n,context:{url:r,responseBody:s},suggestion:c});this.url=r;this.responseBody=s;this.name="RegistryFetchError";}url;responseBody},H=class extends S{constructor(r){let o=r?`Unknown registry "${r}". Make sure it is defined in agents.json as follows:
2
+ import {Command}from'commander';import*as b from'path';import b__default,{join,basename}from'path';import pt from'prompts';import {z}from'zod';import Xe,{promises,existsSync,readFileSync,mkdirSync,writeFileSync,statSync}from'fs';import {cosmiconfig}from'cosmiconfig';import {loadConfig,createMatchPath}from'tsconfig-paths';import gt from'fs-extra';import tt from'fast-glob';import Ls,{createHash}from'crypto';import Ht from'deepmerge';import*as A from'fs/promises';import A__default,{writeFile,rm}from'fs/promises';import Us,{homedir,tmpdir}from'os';import {Project,ScriptKind}from'ts-morph';import xe from'kleur';import $o from'ora';import {execa}from'execa';import {detect}from'@antfu/ni';import {diffLines}from'diff';import {execSync}from'child_process';import {builtinModules}from'module';import {generatePluginEntryModule}from'@mercurjs/dashboard-sdk/vite';var St={version:"2.3.8-canary.3"};var kt="MISSING_DIR_OR_EMPTY_PROJECT",P="MISSING_CONFIG",M="BUILD_MISSING_REGISTRY_FILE";var Jr=z.enum(["registry:api","registry:vendor","registry:admin"]),Ct=z.object({path:z.string(),content:z.string().optional(),type:Jr,target:z.string().optional()}),Pt=z.object({$schema:z.string().optional(),name:z.string(),title:z.string().optional(),author:z.string().min(2).optional(),description:z.string().optional(),dependencies:z.array(z.string()).optional(),devDependencies:z.array(z.string()).optional(),registryDependencies:z.array(z.string()).optional(),meta:z.record(z.string(),z.any()).optional(),docs:z.string().optional(),categories:z.array(z.string()).optional()}),j=Pt.extend({files:z.array(Ct)}),J=z.object({name:z.string(),homepage:z.string(),items:z.array(j)}),On=z.array(Pt),_t=j.pick({dependencies:true,devDependencies:true,files:true,docs:true}),Hr=z.union([z.string(),z.object({url:z.string(),params:z.record(z.string(),z.string()).optional(),headers:z.record(z.string(),z.string()).optional()})]),Tt=z.record(z.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @mercurjs)"}),Hr);var _e="https://registry.mercurjs.com/registry.json",jt="https://registry.mercurjs.com/registry-item.json",de=process.env.REGISTRY_URL??"https://raw.githubusercontent.com/mercurjs/mercur/main/packages/registry/r",_={"@mercurjs":`${de}/{name}.json`};var F={NOT_FOUND:"NOT_FOUND",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},S=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||F.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}},se=class extends S{constructor(r,o){let s=`The item at ${r} was not found. It may not exist at the registry.`;super(s,{code:F.NOT_FOUND,statusCode:404,cause:o,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError";}url},Te=class extends S{constructor(r,o){let s=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(s,{code:F.UNAUTHORIZED,statusCode:401,cause:o,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError";}url},je=class extends S{constructor(r,o){let s=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(s,{code:F.FORBIDDEN,statusCode:403,cause:o,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError";}url},Fe=class extends S{constructor(r,o,s,n){let i=o?`Failed to fetch from registry (${o}): ${r}`:`Failed to fetch from registry: ${r}`,f=typeof n=="string"&&n?`${i} - ${n}`:i,c="Check your network connection and try again.";o===404?c="The requested resource was not found. Check the URL or item name.":o===500?c="The registry server encountered an error. Try again later.":o&&o>=400&&o<500&&(c="There was a client error. Check your request parameters.");super(f,{code:F.FETCH_ERROR,statusCode:o,cause:n,context:{url:r,responseBody:s},suggestion:c});this.url=r;this.responseBody=s;this.name="RegistryFetchError";}url;responseBody},H=class extends S{constructor(r){let o=r?`Unknown registry "${r}". Make sure it is defined in agents.json as follows:
3
3
  {
4
4
  "registries": {
5
5
  "${r}": "[URL_TO_REGISTRY]"
@@ -11,32 +11,32 @@ ${o.issues.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
11
11
  `+o.map(n=>` \u2022 ${n}`).join(`
12
12
  `);super(s,{code:F.MISSING_ENV_VARS,context:{registryName:r,missingVars:o},suggestion:"Set the required environment variables to your .env or .env.local file."});this.registryName=r;this.missingVars=o;this.name="RegistryMissingEnvironmentVariablesError";}registryName;missingVars},Ne=class extends S{constructor(r){let o=`Invalid registry namespace: "${r}". Registry names must start with @ (e.g., @mercurjs).`;super(o,{code:F.VALIDATION_ERROR,context:{name:r},suggestion:"Use a valid registry name starting with @ or provide a direct URL to the registry."});this.name=r;this.name="RegistryInvalidNamespaceError";}name};var $e=class extends S{constructor(r,o){let s=`Invalid blocks.json configuration in ${r}.`;o instanceof z.ZodError&&(s=`Invalid blocks.json configuration in ${r}:
13
13
  ${o.issues.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
14
- `)}`);super(s,{code:F.INVALID_CONFIG,cause:o,context:{cwd:r},suggestion:"Check your blocks.json file for syntax errors or invalid configuration. Run '@mercurjs/cli init' to regenerate a valid configuration."});this.cwd=r;this.name="ConfigParseError";}cwd};var L=z.object({$schema:z.string().optional(),aliases:z.object({api:z.string(),vendor:z.string(),admin:z.string()}),registries:_t.optional()}).strict(),Ft=L.extend({resolvedPaths:z.object({cwd:z.string(),api:z.string(),vendor:z.string(),admin:z.string()})});async function ne(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx"])}var Zr="packages/api/src",Xr="apps/vendor/src",Qr="apps/admin/src",eo=cosmiconfig("blocks",{searchPlaces:["blocks.json"]});async function R(e){let t=await to(e);return t?await et(e,t):null}async function et(e,t){t.registries={...t.registries||{},..._};let r=await loadConfig(e);if(r.resultType==="failed")throw new Error(`Failed to load tsconfig.json. ${r.message??""}`.trim());return Ft.parse({...t,resolvedPaths:{cwd:e,api:await ne(t.aliases.api,r),vendor:await ne(t.aliases.vendor,r),admin:await ne(t.aliases.admin,r)}})}async function to(e){try{let t=await eo.search(e);if(!t)return null;let r=L.parse(t.config);if(r.registries){for(let o of Object.keys(r.registries))if(o in _)throw new Error(`"${o}" is a built-in registry and cannot be overridden.`)}return r}catch(t){throw t instanceof Error&&t.message.includes("reserved registry")?t:new $e(e,t)}}function U(e){let t={resolvedPaths:{cwd:process.cwd(),api:"",vendor:"",admin:""},aliases:{api:Zr,vendor:Xr,admin:Qr},registries:{..._}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}var rt=["**/node_modules/**","public","dist"];async function k(e){let[t,r,o,s,n,i]=await Promise.all([gt.pathExists(b__default.resolve(e,"src")),oo(e),ge(e),so(e),no(e),io(e)]);return {isSrcDir:t,aliasPrefix:r,packageJson:o,medusaConfigFile:s?.file??null,medusaVersion:n,mercurVersion:i}}async function oo(e){let t=loadConfig(e);if(t.resultType==="failed")return null;let r=t.paths||{},o=Object.keys(r);if(o.length===0)return null;let s=o[0];return s?.includes("*")?s.replace("/*",""):s?.replace("/","")??null}function ge(e="",t=true){let r=b__default.join(e,"package.json");return gt.readJSONSync(r,{throws:t})}async function so(e){let t=await tt.glob("medusa-config.*",{cwd:e,deep:3,ignore:rt});if(!t.length)return null;let r=t[0];return {file:r,dir:b__default.resolve(e,b__default.dirname(r))}}async function no(e){let r=ge(e,false)?.dependencies?.["@medusajs/framework"];if(r)return r;let o=await tt.glob("**/package.json",{cwd:e,deep:3,ignore:rt});for(let s of o){let i=ge(b__default.join(e,b__default.dirname(s)),false)?.dependencies?.["@medusajs/framework"];if(i)return i}return null}async function io(e){let r=ge(e,false)?.dependencies?.["@mercurjs/cli"];if(r)return r;let o=await tt.glob("**/package.json",{cwd:e,deep:3,ignore:rt});for(let s of o){let i=ge(b__default.join(e,b__default.dirname(s)),false)?.dependencies?.["@mercurjs/cli"];if(i)return i}return null}z.object({cwd:z.string(),blocks:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),silent:z.boolean()});async function Nt(e){let t={},r=b__default.resolve(e.cwd);if(!existsSync(r))return t[St]=true,{errors:t,config:null};let o=await R(r);if(!o)return t[P]=true,{errors:t,config:null};let s=await k(r);return {errors:t,config:o,projectInfo:s}}var De={headers:{}};function ot(e){De.headers={...De.headers,...e};}function $t(e){return De.headers[e]||{}}function C(){De.headers={};}function ie(e){let t={aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:_};return {...t,...e||{},aliases:{...t.aliases,...e?.aliases||{}},registries:{...e?.registries||{},..._}}}function he(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function ye(e){let t=[],r=/\${(\w+)}/g,o=r.exec(e);for(;o!==null;){let s=o[1];s&&t.push(s),o=r.exec(e);}return t}var lo=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function ae(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(lo);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var Dt=[".tsx",".ts"],At=["lib/utils.ts"],go=[/^(react|react-dom)(\/.*)?$/,/^(node|jsr|npm):.*$/],ho=new Project({compilerOptions:{}});function yo(e){if(go.some(t=>t.test(e)))return null;if(!e.startsWith("@")&&e.includes("/")&&(e=e.split("/")[0]),e.startsWith("@")){let t=e.split("/");t.length>2&&(e=t.slice(0,2).join("/"));}return e}async function st(e,t,r,o=new Set){let s=b.resolve(t.resolvedPaths.cwd,e),n=b.relative(t.resolvedPaths.cwd,s);if(At.includes(n))return {dependencies:[],files:[]};let i=b.extname(e);if(!Dt.includes(i))return {dependencies:[],files:[]};if(o.has(n))return {dependencies:[],files:[]};o.add(n);try{if(!(await A.stat(s)).isFile())return {dependencies:[],files:[]}}catch{return {dependencies:[],files:[]}}let f=await A.readFile(s,"utf-8"),c=await wo(b.basename(s)),a=ho.createSourceFile(c,f,{scriptKind:ScriptKind.TSX}),m=await loadConfig(t.resolvedPaths.cwd);if(m.resultType==="failed")return {dependencies:[],files:[]};let p=[],d=new Set,h=Mt(e),w={path:n,type:h,target:"",content:""};p.push(w);let x=a.getImportDeclarations();for(let I of x){let N=I.getModuleSpecifierValue(),te=N.startsWith(".");if(!(r.aliasPrefix&&N.startsWith(`${r.aliasPrefix}/`))&&!te){let $=yo(N);$&&d.add($);continue}let re=await ne(N,m);if(te&&(re=b.resolve(b.dirname(s),N)),!re)continue;if(!b.extname(re))for(let $ of Dt){let vt=`${re}${$}`;try{await A.access(vt),re=vt;break}catch{continue}}let Ce=b.relative(t.resolvedPaths.cwd,re);if(o.has(Ce)||At.includes(Ce))continue;let Wr=Mt(N),Gr={path:Ce,type:Wr,target:"",content:""};p.push(Gr);let Pe=await st(Ce,t,r,o);if(Pe.files)for(let $ of Pe.files)o.has($.path)||(o.add($.path),p.push($));Pe.dependencies&&Pe.dependencies.forEach($=>d.add($));}let v=Array.from(new Map(p.map(I=>[I.path,I])).values());return {dependencies:Array.from(d),files:v}}async function wo(e){let t=await A.mkdtemp(b.join(tmpdir(),"mercur-"));return b.join(t,e)}function Mt(e){return e.includes("/vendor")?"registry:vendor":e.includes("/admin")?"registry:admin":"registry:api"}function W(e){try{return new URL(e),!0}catch{return false}}function Z(e){return e.endsWith(".json")&&!W(e)}function Ro(e){let t=new Set;if(typeof e=="string")for(let r of ye(e))t.add(r);else {for(let r of ye(e.url))t.add(r);if(e.params)for(let r of Object.values(e.params))for(let o of ye(r))t.add(o);if(e.headers)for(let r of Object.values(e.headers))for(let o of ye(r))t.add(o);}return Array.from(t)}function Lt(e,t){let o=Ro(t).filter(s=>!process.env[s]);if(o.length>0)throw new Oe(e,o)}var Ae="{name}",xo=`${Ae}.json`,Ut=/\${(\w+)}/g,zt="?",Eo="&";function bo(e){return e.includes(Ae)}function Bt(e){return bo(e)?e:`${e.endsWith("/")?e:`${e}/`}${xo}`}function we(e,t){let{registry:r,item:o}=ae(e);if(!r)return null;let n=(t?.registries||{})[r];if(!n)throw new H(r);return Lt(r,n),{url:vo(o,n),headers:Io(n)}}function vo(e,t,r){if(typeof t=="string"){let i=Bt(t).replace(Ae,e);return he(i)}let s=Bt(t.url).replace(Ae,e);return s=he(s),t.params?So(s,t.params):s}function Io(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,o]of Object.entries(e.headers)){let s=he(o);ko(o,s)&&(t[r]=s);}return t}function So(e,t){let r=new URLSearchParams;for(let[n,i]of Object.entries(t)){let f=he(i);f&&r.append(n,f);}let o=r.toString();if(!o)return e;let s=e.includes(zt)?Eo:zt;return `${e}${s}${o}`}function ko(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(Ut)){let s=e.replace(Ut,"").trim();return r!==s}return true}function Wt(e){return W(e)||Z(e)?e:`${de}/${e}`}var Me=new Map;async function Co(e){let t=e;t.startsWith("file://")&&(t=t.slice(7)),t.startsWith("~/")&&(t=b__default.join(homedir(),t.slice(2)));let r=b__default.resolve(t);try{let o=await promises.readFile(r,"utf8");return JSON.parse(o)}catch(o){throw o instanceof Error&&(o.message.includes("ENOENT")||o.message.includes("no such file"))?new K(e,o):new K(e,o)}}async function X(e){return await Promise.all(e.map(async r=>{let o=Wt(r);if(Me.has(o))return Me.get(o);if(Z(o)){let n=Co(o);return Me.set(o,n),n}let s=(async()=>{let n=$t(o),i=await fetch(o,{headers:{...n}});if(!i.ok){let f;if(i.headers.get("content-type")?.includes("application/json")){let c=await i.json(),a=z.object({detail:z.string().optional(),title:z.string().optional(),message:z.string().optional(),error:z.string().optional()}).safeParse(c);a.success&&(f=a.data.detail||a.data.message,a.data.error&&(f=`[${a.data.error}] ${f}`));}throw i.status===401?new Te(o,f):i.status===404?new se(o,f):i.status===403?new je(o,f):new Fe(o,i.status,f)}return i.json()})();return Me.set(o,s),s}))}async function Yt(e){try{let t=e;e.startsWith("~/")&&(t=b__default.join(homedir(),e.slice(2)));let r=b__default.resolve(t),o=await promises.readFile(r,"utf8"),s=JSON.parse(o);try{return j.parse(s)}catch(n){throw new T(e,n)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new K(e,t):t instanceof T?t:new K(e,t)}}j.extend({_source:z.string().optional()});function nt(e,t){let r={},o=[...e];if(!t?.registries)return ot({}),o;for(let s=0;s<o.length;s++){let n=we(o[s],t);n&&(o[s]=n.url,Object.keys(n.headers).length>0&&(r[n.url]=n.headers));}return ot(r),o}async function Ue(e,t){return await Promise.all(e.map(async o=>{if(Z(o))return Yt(o);if(W(o)){let[i]=await X([o]);try{return j.parse(i)}catch(f){throw new T(o,f)}}if(o.startsWith("@")&&t?.registries){let i=nt([o],t),[f]=await X(i);try{return j.parse(f)}catch(c){throw new T(o,c)}}let s=`${de}/${o}.json`,[n]=await X([s]);try{return j.parse(n)}catch(i){throw new T(o,i)}}))}async function it(e,t){let r=[],o=[],s=Array.from(new Set(e)),n=await Ue(s,t),i=new Map;for(let a=0;a<n.length;a++)n[a]&&i.set(s[a],n[a]);for(let[a,m]of Array.from(i.entries())){let p={...m,_source:a};if(r.push(p),m.registryDependencies){let d=m.registryDependencies;if(t?.registries)d=nt(m.registryDependencies,t);else {let w=m.registryDependencies.filter(x=>x.startsWith("@"));if(w.length>0){let{registry:x}=ae(w[0]);throw new H(x)}}let{blocks:h}=await Kt(d,t,new Set(s));o.push(...h);}}r.push(...o);let f=new Map;for(let a of r){let m=a._source||a.name;f.set(a,m);}return r=jo(r,f),Pt.parse({dependencies:Jt.all(r.map(a=>a.dependencies??[])),devDependencies:Jt.all(r.map(a=>a.devDependencies??[])),files:Fo(r.map(a=>a.files??[])),docs:r.map(a=>a.docs).filter(Boolean).join(`
15
- `)})}async function Kt(e,t,r=new Set){let o=[];for(let s of e){if(r.has(s))continue;if(r.add(s),s.startsWith("@")&&t?.registries){let{registry:i}=ae(s);if(i&&!(i in t.registries))throw new H(i)}let[n]=await Ue([s],t);if(n&&(o.push({...n,_source:s}),n.registryDependencies)){let i=t?.registries?nt(n.registryDependencies,t):n.registryDependencies,f=await Kt(i,t,r);o.push(...f.blocks);}}return {blocks:o}}function G(e,t){let r=t||e.name,o=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${o}`}function To(e){if(W(e)){let o=new URL(e).pathname,s=o.match(/\/([^/]+)\.json$/),n=s?s[1]:b__default.basename(o,".json");return {name:n,hash:G({name:n},e)}}if(Z(e)){let r=e.match(/\/([^/]+)\.json$/),o=r?r[1]:b__default.basename(e,".json");return {name:o,hash:G({name:o},e)}}let{item:t}=ae(e);return {name:t,hash:G({name:t},e)}}function jo(e,t){let r=new Map,o=new Map,s=new Map,n=new Map;for(let a of e){let m=t.get(a)||a.name,p=G(a,m);r.set(p,a),o.set(p,a),s.set(p,0),n.set(p,[]);}let i=new Map;for(let a of e){let m=t.get(a)||a.name,p=G(a,m);i.has(a.name)||i.set(a.name,[]),i.get(a.name).push(p),m!==a.name&&(i.has(m)||i.set(m,[]),i.get(m).push(p));}for(let a of e){let m=t.get(a)||a.name,p=G(a,m);if(a.registryDependencies)for(let d of a.registryDependencies){let h,w=i.get(d)||[];if(w.length===1)h=w[0];else if(w.length>1)h=w[0];else {let{name:x}=To(d),v=i.get(x)||[];v.length>0&&(h=v[0]);}h&&r.has(h)&&(n.get(h).push(p),s.set(p,s.get(p)+1));}}let f=[],c=[];for(let[a,m]of s)m===0&&f.push(a);for(;f.length>0;){let a=f.shift(),m=r.get(a);c.push(m);for(let p of n.get(a)){let d=s.get(p)-1;s.set(p,d),d===0&&f.push(p);}}if(c.length!==e.length){let a=Array.from(r.keys()).filter(m=>!c.some(p=>G(p,t.get(p))===m));console.warn(`Warning: Circular dependencies detected. Some items may not be sorted correctly: ${a.join(", ")}`);for(let[m,p]of r.entries())c.some(d=>G(d,t.get(d))===m)||c.push(p);}return c}function Fo(e){let t=new Map,r=[];for(let o of e)if(o)for(let s of o){let n=s.target||s.path;t.has(n)||(t.set(n,s),r.push(s));}return r}var u={error:e=>xe.red(e),warn:e=>xe.yellow(e),info:e=>xe.blue(e),success:e=>xe.green(e),dim:e=>xe.cyan(e)};var l={error(...e){console.log(u.error(e.join(" ")));},warn(...e){console.log(u.warn(e.join(" ")));},info(...e){console.log(u.info(e.join(" ")));},success(...e){console.log(u.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};function y(e){if(l.break(),l.error("Something went wrong. Please check the error below for more details."),l.error("If the problem persists, please open an issue on GitHub."),l.error(""),typeof e=="string"&&(l.error(e),l.break(),process.exit(1)),e instanceof S&&(e.message&&(l.error(e.cause?"Error:":"Message:"),l.error(e.message)),e.cause&&(l.error(`
14
+ `)}`);super(s,{code:F.INVALID_CONFIG,cause:o,context:{cwd:r},suggestion:"Check your blocks.json file for syntax errors or invalid configuration. Run '@mercurjs/cli init' to regenerate a valid configuration."});this.cwd=r;this.name="ConfigParseError";}cwd};var L=z.object({$schema:z.string().optional(),aliases:z.object({api:z.string(),vendor:z.string(),admin:z.string()}),registries:Tt.optional()}).strict(),Ot=L.extend({resolvedPaths:z.object({cwd:z.string(),api:z.string(),vendor:z.string(),admin:z.string()})});async function ne(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx"])}var Xr="packages/api/src",Qr="apps/vendor/src",eo="apps/admin/src",to=cosmiconfig("blocks",{searchPlaces:["blocks.json"]});async function R(e){let t=await ro(e);return t?await et(e,t):null}async function et(e,t){t.registries={...t.registries||{},..._};let r=await loadConfig(e);if(r.resultType==="failed")throw new Error(`Failed to load tsconfig.json. ${r.message??""}`.trim());return Ot.parse({...t,resolvedPaths:{cwd:e,api:await ne(t.aliases.api,r),vendor:await ne(t.aliases.vendor,r),admin:await ne(t.aliases.admin,r)}})}async function ro(e){try{let t=await to.search(e);if(!t)return null;let r=L.parse(t.config);if(r.registries){for(let o of Object.keys(r.registries))if(o in _)throw new Error(`"${o}" is a built-in registry and cannot be overridden.`)}return r}catch(t){throw t instanceof Error&&t.message.includes("reserved registry")?t:new $e(e,t)}}function U(e){let t={resolvedPaths:{cwd:process.cwd(),api:"",vendor:"",admin:""},aliases:{api:Xr,vendor:Qr,admin:eo},registries:{..._}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}var rt=["**/node_modules/**","public","dist"];async function k(e){let[t,r,o,s,n,i]=await Promise.all([gt.pathExists(b__default.resolve(e,"src")),so(e),ge(e),no(e),io(e),ao(e)]);return {isSrcDir:t,aliasPrefix:r,packageJson:o,medusaConfigFile:s?.file??null,medusaVersion:n,mercurVersion:i}}async function so(e){let t=loadConfig(e);if(t.resultType==="failed")return null;let r=t.paths||{},o=Object.keys(r);if(o.length===0)return null;let s=o[0];return s?.includes("*")?s.replace("/*",""):s?.replace("/","")??null}function ge(e="",t=true){let r=b__default.join(e,"package.json");return gt.readJSONSync(r,{throws:t})}async function no(e){let t=await tt.glob("medusa-config.*",{cwd:e,deep:3,ignore:rt});if(!t.length)return null;let r=t[0];return {file:r,dir:b__default.resolve(e,b__default.dirname(r))}}async function io(e){let r=ge(e,false)?.dependencies?.["@medusajs/framework"];if(r)return r;let o=await tt.glob("**/package.json",{cwd:e,deep:3,ignore:rt});for(let s of o){let i=ge(b__default.join(e,b__default.dirname(s)),false)?.dependencies?.["@medusajs/framework"];if(i)return i}return null}async function ao(e){let r=ge(e,false)?.dependencies?.["@mercurjs/cli"];if(r)return r;let o=await tt.glob("**/package.json",{cwd:e,deep:3,ignore:rt});for(let s of o){let i=ge(b__default.join(e,b__default.dirname(s)),false)?.dependencies?.["@mercurjs/cli"];if(i)return i}return null}z.object({cwd:z.string(),blocks:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),silent:z.boolean()});async function $t(e){let t={},r=b__default.resolve(e.cwd);if(!existsSync(r))return t[kt]=true,{errors:t,config:null};let o=await R(r);if(!o)return t[P]=true,{errors:t,config:null};let s=await k(r);return {errors:t,config:o,projectInfo:s}}var De={headers:{}};function ot(e){De.headers={...De.headers,...e};}function Dt(e){return De.headers[e]||{}}function C(){De.headers={};}function ie(e){let t={aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:_};return {...t,...e||{},aliases:{...t.aliases,...e?.aliases||{}},registries:{...e?.registries||{},..._}}}function he(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function ye(e){let t=[],r=/\${(\w+)}/g,o=r.exec(e);for(;o!==null;){let s=o[1];s&&t.push(s),o=r.exec(e);}return t}var fo=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function ae(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(fo);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var At=[".tsx",".ts"],Mt=["lib/utils.ts"],ho=[/^(react|react-dom)(\/.*)?$/,/^(node|jsr|npm):.*$/],yo=new Project({compilerOptions:{}});function wo(e){if(ho.some(t=>t.test(e)))return null;if(!e.startsWith("@")&&e.includes("/")&&(e=e.split("/")[0]),e.startsWith("@")){let t=e.split("/");t.length>2&&(e=t.slice(0,2).join("/"));}return e}async function st(e,t,r,o=new Set){let s=b.resolve(t.resolvedPaths.cwd,e),n=b.relative(t.resolvedPaths.cwd,s);if(Mt.includes(n))return {dependencies:[],files:[]};let i=b.extname(e);if(!At.includes(i))return {dependencies:[],files:[]};if(o.has(n))return {dependencies:[],files:[]};o.add(n);try{if(!(await A.stat(s)).isFile())return {dependencies:[],files:[]}}catch{return {dependencies:[],files:[]}}let f=await A.readFile(s,"utf-8"),c=await Ro(b.basename(s)),a=yo.createSourceFile(c,f,{scriptKind:ScriptKind.TSX}),m=await loadConfig(t.resolvedPaths.cwd);if(m.resultType==="failed")return {dependencies:[],files:[]};let p=[],d=new Set,h=Lt(e),w={path:n,type:h,target:"",content:""};p.push(w);let x=a.getImportDeclarations();for(let I of x){let N=I.getModuleSpecifierValue(),te=N.startsWith(".");if(!(r.aliasPrefix&&N.startsWith(`${r.aliasPrefix}/`))&&!te){let $=wo(N);$&&d.add($);continue}let re=await ne(N,m);if(te&&(re=b.resolve(b.dirname(s),N)),!re)continue;if(!b.extname(re))for(let $ of At){let It=`${re}${$}`;try{await A.access(It),re=It;break}catch{continue}}let Ce=b.relative(t.resolvedPaths.cwd,re);if(o.has(Ce)||Mt.includes(Ce))continue;let Gr=Lt(N),Vr={path:Ce,type:Gr,target:"",content:""};p.push(Vr);let Pe=await st(Ce,t,r,o);if(Pe.files)for(let $ of Pe.files)o.has($.path)||(o.add($.path),p.push($));Pe.dependencies&&Pe.dependencies.forEach($=>d.add($));}let v=Array.from(new Map(p.map(I=>[I.path,I])).values());return {dependencies:Array.from(d),files:v}}async function Ro(e){let t=await A.mkdtemp(b.join(tmpdir(),"mercur-"));return b.join(t,e)}function Lt(e){return e.includes("/vendor")?"registry:vendor":e.includes("/admin")?"registry:admin":"registry:api"}function W(e){try{return new URL(e),!0}catch{return false}}function Z(e){return e.endsWith(".json")&&!W(e)}function xo(e){let t=new Set;if(typeof e=="string")for(let r of ye(e))t.add(r);else {for(let r of ye(e.url))t.add(r);if(e.params)for(let r of Object.values(e.params))for(let o of ye(r))t.add(o);if(e.headers)for(let r of Object.values(e.headers))for(let o of ye(r))t.add(o);}return Array.from(t)}function Ut(e,t){let o=xo(t).filter(s=>!process.env[s]);if(o.length>0)throw new Oe(e,o)}var Ae="{name}",Eo=`${Ae}.json`,zt=/\${(\w+)}/g,Bt="?",bo="&";function vo(e){return e.includes(Ae)}function Wt(e){return vo(e)?e:`${e.endsWith("/")?e:`${e}/`}${Eo}`}function we(e,t){let{registry:r,item:o}=ae(e);if(!r)return null;let n=(t?.registries||{})[r];if(!n)throw new H(r);return Ut(r,n),{url:Io(o,n),headers:So(n)}}function Io(e,t,r){if(typeof t=="string"){let i=Wt(t).replace(Ae,e);return he(i)}let s=Wt(t.url).replace(Ae,e);return s=he(s),t.params?ko(s,t.params):s}function So(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,o]of Object.entries(e.headers)){let s=he(o);Co(o,s)&&(t[r]=s);}return t}function ko(e,t){let r=new URLSearchParams;for(let[n,i]of Object.entries(t)){let f=he(i);f&&r.append(n,f);}let o=r.toString();if(!o)return e;let s=e.includes(Bt)?bo:Bt;return `${e}${s}${o}`}function Co(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(zt)){let s=e.replace(zt,"").trim();return r!==s}return true}function Gt(e){return W(e)||Z(e)?e:`${de}/${e}`}var Me=new Map;async function Po(e){let t=e;t.startsWith("file://")&&(t=t.slice(7)),t.startsWith("~/")&&(t=b__default.join(homedir(),t.slice(2)));let r=b__default.resolve(t);try{let o=await promises.readFile(r,"utf8");return JSON.parse(o)}catch(o){throw o instanceof Error&&(o.message.includes("ENOENT")||o.message.includes("no such file"))?new K(e,o):new K(e,o)}}async function X(e){return await Promise.all(e.map(async r=>{let o=Gt(r);if(Me.has(o))return Me.get(o);if(Z(o)){let n=Po(o);return Me.set(o,n),n}let s=(async()=>{let n=Dt(o),i=await fetch(o,{headers:{...n}});if(!i.ok){let f;if(i.headers.get("content-type")?.includes("application/json")){let c=await i.json(),a=z.object({detail:z.string().optional(),title:z.string().optional(),message:z.string().optional(),error:z.string().optional()}).safeParse(c);a.success&&(f=a.data.detail||a.data.message,a.data.error&&(f=`[${a.data.error}] ${f}`));}throw i.status===401?new Te(o,f):i.status===404?new se(o,f):i.status===403?new je(o,f):new Fe(o,i.status,f)}return i.json()})();return Me.set(o,s),s}))}async function Jt(e){try{let t=e;e.startsWith("~/")&&(t=b__default.join(homedir(),e.slice(2)));let r=b__default.resolve(t),o=await promises.readFile(r,"utf8"),s=JSON.parse(o);try{return j.parse(s)}catch(n){throw new T(e,n)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new K(e,t):t instanceof T?t:new K(e,t)}}j.extend({_source:z.string().optional()});function nt(e,t){let r={},o=[...e];if(!t?.registries)return ot({}),o;for(let s=0;s<o.length;s++){let n=we(o[s],t);n&&(o[s]=n.url,Object.keys(n.headers).length>0&&(r[n.url]=n.headers));}return ot(r),o}async function Ue(e,t){return await Promise.all(e.map(async o=>{if(Z(o))return Jt(o);if(W(o)){let[i]=await X([o]);try{return j.parse(i)}catch(f){throw new T(o,f)}}if(o.startsWith("@")&&t?.registries){let i=nt([o],t),[f]=await X(i);try{return j.parse(f)}catch(c){throw new T(o,c)}}let s=`${de}/${o}.json`,[n]=await X([s]);try{return j.parse(n)}catch(i){throw new T(o,i)}}))}async function it(e,t){let r=[],o=[],s=Array.from(new Set(e)),n=await Ue(s,t),i=new Map;for(let a=0;a<n.length;a++)n[a]&&i.set(s[a],n[a]);for(let[a,m]of Array.from(i.entries())){let p={...m,_source:a};if(r.push(p),m.registryDependencies){let d=m.registryDependencies;if(t?.registries)d=nt(m.registryDependencies,t);else {let w=m.registryDependencies.filter(x=>x.startsWith("@"));if(w.length>0){let{registry:x}=ae(w[0]);throw new H(x)}}let{blocks:h}=await qt(d,t,new Set(s));o.push(...h);}}r.push(...o);let f=new Map;for(let a of r){let m=a._source||a.name;f.set(a,m);}return r=Fo(r,f),_t.parse({dependencies:Ht.all(r.map(a=>a.dependencies??[])),devDependencies:Ht.all(r.map(a=>a.devDependencies??[])),files:Oo(r.map(a=>a.files??[])),docs:r.map(a=>a.docs).filter(Boolean).join(`
15
+ `)})}async function qt(e,t,r=new Set){let o=[];for(let s of e){if(r.has(s))continue;if(r.add(s),s.startsWith("@")&&t?.registries){let{registry:i}=ae(s);if(i&&!(i in t.registries))throw new H(i)}let[n]=await Ue([s],t);if(n&&(o.push({...n,_source:s}),n.registryDependencies)){let i=t?.registries?nt(n.registryDependencies,t):n.registryDependencies,f=await qt(i,t,r);o.push(...f.blocks);}}return {blocks:o}}function G(e,t){let r=t||e.name,o=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${o}`}function jo(e){if(W(e)){let o=new URL(e).pathname,s=o.match(/\/([^/]+)\.json$/),n=s?s[1]:b__default.basename(o,".json");return {name:n,hash:G({name:n},e)}}if(Z(e)){let r=e.match(/\/([^/]+)\.json$/),o=r?r[1]:b__default.basename(e,".json");return {name:o,hash:G({name:o},e)}}let{item:t}=ae(e);return {name:t,hash:G({name:t},e)}}function Fo(e,t){let r=new Map,o=new Map,s=new Map,n=new Map;for(let a of e){let m=t.get(a)||a.name,p=G(a,m);r.set(p,a),o.set(p,a),s.set(p,0),n.set(p,[]);}let i=new Map;for(let a of e){let m=t.get(a)||a.name,p=G(a,m);i.has(a.name)||i.set(a.name,[]),i.get(a.name).push(p),m!==a.name&&(i.has(m)||i.set(m,[]),i.get(m).push(p));}for(let a of e){let m=t.get(a)||a.name,p=G(a,m);if(a.registryDependencies)for(let d of a.registryDependencies){let h,w=i.get(d)||[];if(w.length===1)h=w[0];else if(w.length>1)h=w[0];else {let{name:x}=jo(d),v=i.get(x)||[];v.length>0&&(h=v[0]);}h&&r.has(h)&&(n.get(h).push(p),s.set(p,s.get(p)+1));}}let f=[],c=[];for(let[a,m]of s)m===0&&f.push(a);for(;f.length>0;){let a=f.shift(),m=r.get(a);c.push(m);for(let p of n.get(a)){let d=s.get(p)-1;s.set(p,d),d===0&&f.push(p);}}if(c.length!==e.length){let a=Array.from(r.keys()).filter(m=>!c.some(p=>G(p,t.get(p))===m));console.warn(`Warning: Circular dependencies detected. Some items may not be sorted correctly: ${a.join(", ")}`);for(let[m,p]of r.entries())c.some(d=>G(d,t.get(d))===m)||c.push(p);}return c}function Oo(e){let t=new Map,r=[];for(let o of e)if(o)for(let s of o){let n=s.target||s.path;t.has(n)||(t.set(n,s),r.push(s));}return r}var u={error:e=>xe.red(e),warn:e=>xe.yellow(e),info:e=>xe.blue(e),success:e=>xe.green(e),dim:e=>xe.cyan(e)};var l={error(...e){console.log(u.error(e.join(" ")));},warn(...e){console.log(u.warn(e.join(" ")));},info(...e){console.log(u.info(e.join(" ")));},success(...e){console.log(u.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};function y(e){if(l.break(),l.error("Something went wrong. Please check the error below for more details."),l.error("If the problem persists, please open an issue on GitHub."),l.error(""),typeof e=="string"&&(l.error(e),l.break(),process.exit(1)),e instanceof S&&(e.message&&(l.error(e.cause?"Error:":"Message:"),l.error(e.message)),e.cause&&(l.error(`
16
16
  Message:`),l.error(e.cause)),e.suggestion&&(l.error(`
17
- Suggestion:`),l.error(e.suggestion)),l.break(),process.exit(1)),e instanceof z.ZodError){l.error("Validation failed:");for(let t of e.issues){let r=t.path.join(".")||"root";l.error(`- ${u.info(r)}: ${t.message}`);}l.break(),process.exit(1);}e instanceof Error&&(l.error(e.message),l.break(),process.exit(1)),l.break(),process.exit(1);}function E(e,t){return No({text:e,isSilent:t?.silent??false})}var Ao=["bun","yarn","pnpm","deno","npm"];function Zt(e){if(e)return Ao.find(t=>e.startsWith(t))}function Mo(){return Zt(process.env.npm_config_user_agent)}async function qt(e){try{return await execa(e,["--version"]),!0}catch{return false}}async function ze(e){let t=Zt(await detect({programmatic:true,cwd:e}));if(t&&await qt(t))return t;let r=Mo();return r&&await qt(r)?r:"npm"}async function Xt(e,t,r,o={}){if(e=Array.from(new Set(e||[])),t=Array.from(new Set(t||[])),!e?.length&&!t?.length)return;o={silent:false,...o};let s=E("Installing dependencies.",{silent:o.silent})?.start(),n=await ze(r.resolvedPaths.cwd);s?.start(),await Lo(n,e,t,r.resolvedPaths.cwd),s?.succeed();}async function Lo(e,t,r,o){if(e==="npm")return Uo(t,r,o);if(e==="deno")return zo(t,r,o);t?.length&&await execa(e,["add",...t],{cwd:o}),r?.length&&await execa(e,["add","-D",...r],{cwd:o});}async function Uo(e,t,r){e.length&&await execa("npm",["install",...e],{cwd:r}),t.length&&await execa("npm",["install","-D",...t],{cwd:r});}async function zo(e,t,r){e?.length&&await execa("deno",["add",...e.map(o=>`npm:${o}`)],{cwd:r}),t?.length&&await execa("deno",["add","-D",...t.map(o=>`npm:${o}`)],{cwd:r});}function Qt(e,t,r={}){let{ignoreImports:o=false}=r,s=e.replace(/\r\n/g,`
17
+ Suggestion:`),l.error(e.suggestion)),l.break(),process.exit(1)),e instanceof z.ZodError){l.error("Validation failed:");for(let t of e.issues){let r=t.path.join(".")||"root";l.error(`- ${u.info(r)}: ${t.message}`);}l.break(),process.exit(1);}e instanceof Error&&(l.error(e.message),l.break(),process.exit(1)),l.break(),process.exit(1);}function E(e,t){return $o({text:e,isSilent:t?.silent??false})}var Mo=["bun","yarn","pnpm","deno","npm"];function Xt(e){if(e)return Mo.find(t=>e.startsWith(t))}function Lo(){return Xt(process.env.npm_config_user_agent)}async function Zt(e){try{return await execa(e,["--version"]),!0}catch{return false}}async function ze(e){let t=Xt(await detect({programmatic:true,cwd:e}));if(t&&await Zt(t))return t;let r=Lo();return r&&await Zt(r)?r:"npm"}async function Qt(e,t,r,o={}){if(e=Array.from(new Set(e||[])),t=Array.from(new Set(t||[])),!e?.length&&!t?.length)return;o={silent:false,...o};let s=E("Installing dependencies.",{silent:o.silent})?.start(),n=await ze(r.resolvedPaths.cwd);s?.start(),await Uo(n,e,t,r.resolvedPaths.cwd),s?.succeed();}async function Uo(e,t,r,o){if(e==="npm")return zo(t,r,o);if(e==="deno")return Bo(t,r,o);t?.length&&await execa(e,["add",...t],{cwd:o}),r?.length&&await execa(e,["add","-D",...r],{cwd:o});}async function zo(e,t,r){e.length&&await execa("npm",["install",...e],{cwd:r}),t.length&&await execa("npm",["install","-D",...t],{cwd:r});}async function Bo(e,t,r){e?.length&&await execa("deno",["add",...e.map(o=>`npm:${o}`)],{cwd:r}),t?.length&&await execa("deno",["add","-D",...t.map(o=>`npm:${o}`)],{cwd:r});}function er(e,t,r={}){let{ignoreImports:o=false}=r,s=e.replace(/\r\n/g,`
18
18
  `).trim(),n=t.replace(/\r\n/g,`
19
- `).trim();if(s===n)return true;if(!o)return false;let i=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,f=m=>m.replace(i,(p,d,h,w)=>{if(h.startsWith("."))return `${d}${h}${w}`;let x=h.split("/"),v=x[x.length-1];return `${d}@normalized/${v}${w}`}),c=f(s),a=f(n);return c===a}function Bo(e,t){if(e.type==="registry:api")return t.resolvedPaths.api;if(e.type==="registry:vendor")return t.resolvedPaths.vendor;if(e.type==="registry:admin")return t.resolvedPaths.admin;throw new Error(`Unknown file type: ${e.type}`)}function Be(e,t,r){let o=Bo(e,t);if(e.type==="registry:api"){let i=e.path.replace(/^\/|\/$/g,"").split("/").slice(1).join("/");return b__default.join(o,i)}let s=Wo(e.path,o);return b__default.join(o,s)}function Wo(e,t){let r=e.replace(/^\/|\/$/g,""),o=t.replace(/^\/|\/$/g,""),s=r.split("/"),n=o.split("/");for(let i=n.length-1;i>=0;i--){let f=s.findIndex(c=>c===n[i]);if(f!==-1)return s.slice(f+1).join("/")}return s[s.length-1]}var Jo=new Project({compilerOptions:{}});async function Ho(e){let t=await promises.mkdtemp(b__default.join(tmpdir(),"mercurjs-")),r=b__default.basename(e,b__default.extname(e));return b__default.join(t,`${r}.ts`)}function Ko(e){switch(b__default.extname(e).toLowerCase()){case ".tsx":case ".ts":return ScriptKind.TS;default:return ScriptKind.Unknown}}async function We(e){let t=b__default.extname(e.filename).toLowerCase();if(![".tsx",".ts"].includes(t))return e.raw;let r=Ko(e.filename),o=await Ho(e.filename),s=Jo.createSourceFile(o,e.raw,{scriptKind:r});for(let n of s.getImportStringLiterals()){let i=qo(n.getLiteralValue(),e.config);n.setLiteralValue(i);}return s.getText()}function qo(e,t){if(e.startsWith("@/workflows/")){let r=e.replace(/^@\/workflows\//,"");return `${t.aliases.api}/workflows/${r}`}if(e==="@/workflows")return `${t.aliases.api}/workflows`;if(e.startsWith("@/api/")){let r=e.replace(/^@\/api\//,"");return `${t.aliases.api}/api/${r}`}if(e==="@/api")return `${t.aliases.api}/api`;if(e.startsWith("@/links/")){let r=e.replace(/^@\/links\//,"");return `${t.aliases.api}/links/${r}`}if(e==="@/links")return `${t.aliases.api}/links`;if(e.startsWith("@/modules/")){let r=e.replace(/^@\/modules\//,"");return `${t.aliases.api}/modules/${r}`}if(e==="@/modules")return `${t.aliases.api}/modules`;if(e.startsWith("@/lib/")){let r=e.replace(/^@\/lib\//,"");return `${t.aliases.api}/lib/${r}`}if(e==="@/lib")return `${t.aliases.api}/lib`;if(e.startsWith("@/vendor/")){let r=e.replace(/^@\/vendor\//,"");return `${t.aliases.vendor}/${r}`}if(e==="@/vendor")return t.aliases.vendor;if(e.startsWith("@/admin/")){let r=e.replace(/^@\/admin\//,"");return `${t.aliases.admin}/${r}`}return e==="@/admin"?t.aliases.admin:e}async function or(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[],filesDeclined:[]};r={overwrite:false,silent:false,yes:false,...r};let o=E("Updating files.",{silent:r.silent})?.start(),s=await k(t.resolvedPaths.cwd),n=[],i=[],f=[],c=[];for(let p of e){let d=Be(p,t,{isSrcDir:s?.isSrcDir??false,path:r.path??""}),h=basename(p.path),w=b__default.dirname(d),x=existsSync(d);if(x&&statSync(d).isDirectory())throw new Error(`Cannot write to ${d}: path exists and is a directory. Please provide a file path instead.`);let v=await We({filename:p.path,raw:p.content,config:t});if(x&&!r.overwrite){let I=await promises.readFile(d,"utf-8");if(Qt(I,v)){f.push(b__default.relative(t.resolvedPaths.cwd,d));continue}if(!r.yes){o.stop();let N=diffLines(I,v);l.info(`
20
- File: ${u.info(h)}`),os(N);let{overwrite:te}=await pt({type:"confirm",name:"overwrite",message:`The file ${u.info(h)} already exists. Would you like to overwrite?`,initial:false});if(!te){c.push(b__default.relative(t.resolvedPaths.cwd,d));continue}}}existsSync(w)||await promises.mkdir(w,{recursive:true}),await promises.writeFile(d,v,"utf-8"),x?i.push(b__default.relative(t.resolvedPaths.cwd,d)):n.push(b__default.relative(t.resolvedPaths.cwd,d));}let a=n.length+i.length,m=f.length+c.length;if(a>0){if(o?.succeed(),m>0&&!r.silent){let p=[];a===1?p.push("1 file updated"):p.push(`${a} files updated`),m===1?p.push("1 file skipped"):p.push(`${m} files skipped`),l.info(`${p.join(", ")}.`);}}else c.length?o?.info("No files were updated."):f.length?o?.info("Already up to date."):o?.info("No files to update.");return {filesCreated:n,filesUpdated:i,filesSkipped:f,filesDeclined:c}}var ts=3;function rs(e,t=ts){let r=[],o=new Set;for(let n=0;n<e.length;n++)(e[n]?.added||e[n]?.removed)&&o.add(n);if(o.size===0)return r;let s=new Map;for(let n=0;n<e.length;n++){let i=e[n];if(i)if(i.added||i.removed)s.set(n,"full");else {let f=o.has(n-1),c=o.has(n+1);f&&c?s.set(n,"both"):f?s.set(n,"start"):c&&s.set(n,"end");}}for(let n=0;n<e.length;n++){let i=e[n],f=s.get(n);if(!(!i||!f))if(i.added){let c=i.value.split(`
19
+ `).trim();if(s===n)return true;if(!o)return false;let i=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,f=m=>m.replace(i,(p,d,h,w)=>{if(h.startsWith("."))return `${d}${h}${w}`;let x=h.split("/"),v=x[x.length-1];return `${d}@normalized/${v}${w}`}),c=f(s),a=f(n);return c===a}function Wo(e,t){if(e.type==="registry:api")return t.resolvedPaths.api;if(e.type==="registry:vendor")return t.resolvedPaths.vendor;if(e.type==="registry:admin")return t.resolvedPaths.admin;throw new Error(`Unknown file type: ${e.type}`)}function Be(e,t,r){let o=Wo(e,t);if(e.type==="registry:api"){let i=e.path.replace(/^\/|\/$/g,"").split("/").slice(1).join("/");return b__default.join(o,i)}let s=Go(e.path,o);return b__default.join(o,s)}function Go(e,t){let r=e.replace(/^\/|\/$/g,""),o=t.replace(/^\/|\/$/g,""),s=r.split("/"),n=o.split("/");for(let i=n.length-1;i>=0;i--){let f=s.findIndex(c=>c===n[i]);if(f!==-1)return s.slice(f+1).join("/")}return s[s.length-1]}var Ho=new Project({compilerOptions:{}});async function Ko(e){let t=await promises.mkdtemp(b__default.join(tmpdir(),"mercurjs-")),r=b__default.basename(e,b__default.extname(e));return b__default.join(t,`${r}.ts`)}function qo(e){switch(b__default.extname(e).toLowerCase()){case ".tsx":case ".ts":return ScriptKind.TS;default:return ScriptKind.Unknown}}async function We(e){let t=b__default.extname(e.filename).toLowerCase();if(![".tsx",".ts"].includes(t))return e.raw;let r=qo(e.filename),o=await Ko(e.filename),s=Ho.createSourceFile(o,e.raw,{scriptKind:r});for(let n of s.getImportStringLiterals()){let i=Zo(n.getLiteralValue(),e.config);n.setLiteralValue(i);}return s.getText()}function Zo(e,t){if(e.startsWith("@/workflows/")){let r=e.replace(/^@\/workflows\//,"");return `${t.aliases.api}/workflows/${r}`}if(e==="@/workflows")return `${t.aliases.api}/workflows`;if(e.startsWith("@/api/")){let r=e.replace(/^@\/api\//,"");return `${t.aliases.api}/api/${r}`}if(e==="@/api")return `${t.aliases.api}/api`;if(e.startsWith("@/links/")){let r=e.replace(/^@\/links\//,"");return `${t.aliases.api}/links/${r}`}if(e==="@/links")return `${t.aliases.api}/links`;if(e.startsWith("@/modules/")){let r=e.replace(/^@\/modules\//,"");return `${t.aliases.api}/modules/${r}`}if(e==="@/modules")return `${t.aliases.api}/modules`;if(e.startsWith("@/lib/")){let r=e.replace(/^@\/lib\//,"");return `${t.aliases.api}/lib/${r}`}if(e==="@/lib")return `${t.aliases.api}/lib`;if(e.startsWith("@/vendor/")){let r=e.replace(/^@\/vendor\//,"");return `${t.aliases.vendor}/${r}`}if(e==="@/vendor")return t.aliases.vendor;if(e.startsWith("@/admin/")){let r=e.replace(/^@\/admin\//,"");return `${t.aliases.admin}/${r}`}return e==="@/admin"?t.aliases.admin:e}async function sr(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[],filesDeclined:[]};r={overwrite:false,silent:false,yes:false,...r};let o=E("Updating files.",{silent:r.silent})?.start(),s=await k(t.resolvedPaths.cwd),n=[],i=[],f=[],c=[];for(let p of e){let d=Be(p,t,{isSrcDir:s?.isSrcDir??false,path:r.path??""}),h=basename(p.path),w=b__default.dirname(d),x=existsSync(d);if(x&&statSync(d).isDirectory())throw new Error(`Cannot write to ${d}: path exists and is a directory. Please provide a file path instead.`);let v=await We({filename:p.path,raw:p.content,config:t});if(x&&!r.overwrite){let I=await promises.readFile(d,"utf-8");if(er(I,v)){f.push(b__default.relative(t.resolvedPaths.cwd,d));continue}if(!r.yes){o.stop();let N=diffLines(I,v);l.info(`
20
+ File: ${u.info(h)}`),ss(N);let{overwrite:te}=await pt({type:"confirm",name:"overwrite",message:`The file ${u.info(h)} already exists. Would you like to overwrite?`,initial:false});if(!te){c.push(b__default.relative(t.resolvedPaths.cwd,d));continue}}}existsSync(w)||await promises.mkdir(w,{recursive:true}),await promises.writeFile(d,v,"utf-8"),x?i.push(b__default.relative(t.resolvedPaths.cwd,d)):n.push(b__default.relative(t.resolvedPaths.cwd,d));}let a=n.length+i.length,m=f.length+c.length;if(a>0){if(o?.succeed(),m>0&&!r.silent){let p=[];a===1?p.push("1 file updated"):p.push(`${a} files updated`),m===1?p.push("1 file skipped"):p.push(`${m} files skipped`),l.info(`${p.join(", ")}.`);}}else c.length?o?.info("No files were updated."):f.length?o?.info("Already up to date."):o?.info("No files to update.");return {filesCreated:n,filesUpdated:i,filesSkipped:f,filesDeclined:c}}var rs=3;function os(e,t=rs){let r=[],o=new Set;for(let n=0;n<e.length;n++)(e[n]?.added||e[n]?.removed)&&o.add(n);if(o.size===0)return r;let s=new Map;for(let n=0;n<e.length;n++){let i=e[n];if(i)if(i.added||i.removed)s.set(n,"full");else {let f=o.has(n-1),c=o.has(n+1);f&&c?s.set(n,"both"):f?s.set(n,"start"):c&&s.set(n,"end");}}for(let n=0;n<e.length;n++){let i=e[n],f=s.get(n);if(!(!i||!f))if(i.added){let c=i.value.split(`
21
21
  `);c[c.length-1]===""&&c.pop();for(let a of c)r.push(`+ ${a}`);}else if(i.removed){let c=i.value.split(`
22
22
  `);c[c.length-1]===""&&c.pop();for(let a of c)r.push(`- ${a}`);}else {let c=i.value.split(`
23
- `);c[c.length-1]===""&&c.pop();let a=[];f==="full"||c.length<=t*2+1?a=c.map(m=>` ${m}`):f==="start"?(a=c.slice(0,t).map(m=>` ${m}`),c.length>t&&a.push(` ... ${c.length-t} lines hidden ...`)):f==="end"?(c.length>t&&a.push(` ... ${c.length-t} lines hidden ...`),a.push(...c.slice(-t).map(m=>` ${m}`))):f==="both"&&(c.length<=t*2+1?a=c.map(m=>` ${m}`):a=[...c.slice(0,t).map(m=>` ${m}`),` ... ${c.length-t*2} lines hidden ...`,...c.slice(-t).map(m=>` ${m}`)]),r.push(...a);}}return r}function os(e){let t=rs(e);if(t.length!==0)for(let r of t)r.startsWith("+ ")?process.stdout.write(`${u.success(r)}
23
+ `);c[c.length-1]===""&&c.pop();let a=[];f==="full"||c.length<=t*2+1?a=c.map(m=>` ${m}`):f==="start"?(a=c.slice(0,t).map(m=>` ${m}`),c.length>t&&a.push(` ... ${c.length-t} lines hidden ...`)):f==="end"?(c.length>t&&a.push(` ... ${c.length-t} lines hidden ...`),a.push(...c.slice(-t).map(m=>` ${m}`))):f==="both"&&(c.length<=t*2+1?a=c.map(m=>` ${m}`):a=[...c.slice(0,t).map(m=>` ${m}`),` ... ${c.length-t*2} lines hidden ...`,...c.slice(-t).map(m=>` ${m}`)]),r.push(...a);}}return r}function ss(e){let t=os(e);if(t.length!==0)for(let r of t)r.startsWith("+ ")?process.stdout.write(`${u.success(r)}
24
24
  `):r.startsWith("- ")?process.stdout.write(`${u.error(r)}
25
25
  `):r.includes("lines hidden")?process.stdout.write(`${u.info(r)}
26
26
  `):process.stdout.write(`${r}
27
- `);}async function sr(e,t,r){if(r={overwrite:false,silent:false,yes:false,...r},!e.length)return;let o=E("Checking registry.",{silent:r.silent})?.start(),s=await it(e,ie(t));if(!s)return o?.fail(),y(new Error("Failed to fetch items from registry."));o?.succeed();let{filesCreated:n,filesUpdated:i}=await or(s.files,t,{overwrite:r.overwrite,silent:r.silent,path:r.path,yes:r.yes});(n.length||i.length)&&await Xt(s.dependencies,s.devDependencies,t,{silent:r.silent}),s.docs&&l.info(s.docs);}z.object({cwd:z.string(),yes:z.boolean(),defaults:z.boolean(),silent:z.boolean()});async function nr(e){let t={},r=b__default.resolve(e.cwd);existsSync(r)||(t.MISSING_DIR=true);let o=await k(r);return {errors:t,projectInfo:o}}var ar=join(homedir(),".mercur"),ct=join(ar,"config.json"),lt={telemetry_enabled:true,telemetry_email:null,notice_shown:false},ft=class{get(t){return this.read()[t]}set(t,r){let o=this.read();o[t]=r,this.write(o);}read(){try{if(!existsSync(ct))return {...lt};let t=readFileSync(ct,"utf-8"),r=JSON.parse(t);return {...lt,...r}}catch{return {...lt}}}write(t){try{mkdirSync(ar,{recursive:!0}),writeFileSync(ct,JSON.stringify(t,null,2)+`
28
- `,{mode:384});}catch{}}},V=new ft;var fe=e=>Function("mm","return import(mm)")(e);function ms(){let e=(...t)=>t.some(r=>!!process.env[r]);return e("MEDUSA_CLOUD_ENVIRONMENT_HANDLE","MEDUSA_CLOUD_SANDBOX_HANDLE","MEDUSA_CLOUD_API_KEY")?"medusa-cloud":e("RENDER","RENDER_URL","RENDER_INTERNAL_HOSTNAME","RENDER_SERVICE_ID")?"render":e("FLY_APP_NAME","FLY_REGION","FLY_ALLOC_ID")?"fly-io":e("RAILWAY_STATIC_URL","RAILWAY_ENVIRONMENT_NAME")?"railway":e("DYNO","HEROKU_APP_NAME")?"heroku":e("DO_DEPLOYMENT_ID","DO_APP_NAME","DIGITALOCEAN")?"digitalocean":e("KOYEB","KOYEB_DEPLOYMENT_ID","KOYEB_APP_NAME")?"koyeb":null}async function lr(){try{let e=await fe("os"),t=e.cpus();return {deploymentVendor:ms(),systemPlatform:e.platform(),systemRelease:e.release(),systemArchitecture:e.arch(),cpuCount:t.length,cpuModel:t.length?t[0].model:null,cpuSpeed:t.length?t[0].speed:null,memory:e.totalmem(),isWSL:await ps(),isDocker:await fr(),isTTY:typeof process<"u"&&process.stdout?process.stdout.isTTY:null}}catch{return {systemPlatform:null,systemRelease:null,systemArchitecture:null,cpuCount:null,cpuModel:null,cpuSpeed:null,memory:null,isWSL:null,isDocker:null,isTTY:null}}}async function ps(){try{if(typeof process>"u"||process?.platform!=="linux")return !1;let e=await fe("fs");return (await fe("os")).release().toLowerCase().includes("microsoft")?!await cr():e.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!await cr():!1}catch{return false}}var us=async()=>{try{return (await fe("fs")).statSync("/run/.containerenv"),!0}catch{return false}};async function fr(){return await ds()||await gs()}async function ds(){try{return (await fe("fs")).statSync("/.dockerenv"),!0}catch{return false}}async function gs(){try{return (await fe("fs")).readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return false}}async function cr(){return await us()||await fr()}var mt=e=>createHash("sha256").update(e).digest("base64");var ws=process.env.MERCUR_TELEMETRY_PROXY_URL||"https://telemetry.mercurjs.com/api/v1/events";var mr=e=>{V.set("telemetry_enabled",e);},Ge="https://docs.mercurjs.com/telemetry",me=()=>{V.get("notice_shown")||(V.set("notice_shown",true),process.env.MERCUR_DISABLE_TELEMETRY!=="true"&&console.error(["","Mercur collects anonymous usage data to improve the CLI experience.",`You can disable this at any time by running: ${u.info("mercurjs telemetry --disable")}`,`Or by setting ${u.info("MERCUR_DISABLE_TELEMETRY=true")}`,`Learn more: ${u.info(Ge)}`,""].join(`
29
- `)));},Rs=()=>V.get("telemetry_enabled")&&process.env.MERCUR_DISABLE_TELEMETRY!=="true",Y=async(e,t)=>{try{if(!Rs())return;let r=await k(t.cwd),{projectId:o}=bs(r.packageJson),s={nodeEnv:xs(),nodeVersion:process.version,mercurVersion:r.mercurVersion,medusaVersion:r.medusaVersion,isSrcDir:r.isSrcDir,aliasPrefix:r.aliasPrefix,config:await R(t.cwd),projectId:o,systemInfo:await lr(),packageManager:await ze(t.cwd),email:vs()};await fetch(ws,{body:JSON.stringify({...s,...e}),headers:{"Content-Type":"application/json"},method:"post"});}catch{}};function xs(){return process.env.NODE_ENV||"development"}var Es=()=>{try{let e=execSync("git config --local --get remote.origin.url",{stdio:"pipe",timeout:1e3});return String(e).trim()}catch{return null}},bs=e=>{let t=Es();if(t)return {projectId:mt(t)};let r=process.cwd();return {projectId:mt(r)}},vs=()=>V.get("telemetry_email")||void 0;var ks=z.object({cwd:z.string(),yes:z.boolean(),defaults:z.boolean(),silent:z.boolean()}),ur=new Command().name("init").description("initialize your project and install dependencies").option("-y, --yes","skip confirmation prompt.",true).option("-d, --defaults","use default configuration.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async e=>{try{me();let t=ks.parse({cwd:b__default.resolve(e.cwd),...e});await ut(t),l.log(`${u.success("Success!")} Project initialization completed.
30
- You may now add blocks.`),l.break(),await Y({type:"init",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){l.break(),y(t);}finally{C();}});async function ut(e){await nr(e);let t=await R(e.cwd),r=t?await Ps(t,e):await Cs(e);if(!e.yes){let{proceed:n}=await pt({type:"confirm",name:"proceed",message:`Write configuration to ${u.info("blocks.json")}. Proceed?`,initial:true});n||process.exit(0);}let o=E("Writing blocks.json.").start(),s=b__default.resolve(e.cwd,"blocks.json");return r.registries=Object.fromEntries(Object.entries(r.registries||{}).filter(([n])=>!Object.keys(_).includes(n))),await promises.writeFile(s,`${JSON.stringify(r,null,2)}
31
- `,"utf8"),o.succeed(),await et(e.cwd,r)}async function Cs(e){if(e.defaults)return L.parse({$schema:_e,aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:_});l.info("");let t=await pt([{type:"text",name:"api",message:`Configure the import alias for ${u.info("api")}:`,initial:"packages/api/src"},{type:"text",name:"vendor",message:`Configure the import alias for ${u.info("vendor")}:`,initial:"apps/vendor/src"},{type:"text",name:"admin",message:`Configure the import alias for ${u.info("admin")}:`,initial:"apps/admin/src"}],{onCancel:()=>{process.exit(0);}});return L.parse({$schema:_e,aliases:{api:t.api??"packages/api/src",vendor:t.vendor??"apps/vendor/src",admin:t.admin??"apps/admin/src"},registries:_})}async function Ps(e,t){if(t.defaults)return L.parse({$schema:_e,aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:_});let r=await pt([{type:"text",name:"api",message:`Configure the import alias for ${u.info("api")}:`,initial:e.aliases.api},{type:"text",name:"vendor",message:`Configure the import alias for ${u.info("vendor")}:`,initial:e.aliases.vendor},{type:"text",name:"admin",message:`Configure the import alias for ${u.info("admin")}:`,initial:e.aliases.admin}],{onCancel:()=>{process.exit(0);}});return L.parse({$schema:e.$schema,aliases:{api:r.api??e.aliases.api,vendor:r.vendor??e.aliases.vendor,admin:r.admin??e.aliases.admin}})}var Fs=z.object({blocks:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),cwd:z.string(),silent:z.boolean()}),dr=new Command().name("add").description("add blocks to your project").argument("[blocks...]","names of blocks to add").option("-y, --yes","skip confirmation prompt.",false).option("-o, --overwrite","overwrite existing files.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e,t)=>{try{me();let r=Fs.parse({blocks:e,cwd:b__default.resolve(t.cwd),...t}),o=await R(r.cwd);o||(o=U({resolvedPaths:{cwd:r.cwd}})),r.blocks?.length||(l.error("Please specify at least one item to add."),process.exit(1));let{errors:s}=await Nt(r);if(s[P]){let{proceed:n}=await pt({type:"confirm",name:"proceed",message:`You need to create a ${u.info("blocks.json")} file to add items. Proceed?`,initial:!0});n||(l.break(),process.exit(1)),o=await ut({cwd:r.cwd,yes:!0,defaults:!1,silent:r.silent});}if(!o)throw new Error(`Failed to read config at ${u.info(r.cwd)}.`);await sr(r.blocks,o,{overwrite:r.overwrite,silent:r.silent,yes:r.yes,path:r.cwd}),await Y({type:"add",payload:{outcome:"success",blocks:r.blocks}},{cwd:r.cwd});}catch(r){l.break(),y(r);}finally{C();}});async function gr(e){let t={},r={cwd:e.cwd,registryFile:b__default.resolve(e.cwd,e.registryFile),outputDir:b__default.resolve(e.cwd,e.outputDir)};if(!gt.existsSync(r.registryFile))return t[M]=true,{errors:t,resolvePaths:null,config:null};if(!gt.existsSync(b__default.resolve(e.cwd,"blocks.json")))return t[P]=true,{errors:t,resolvePaths:null,config:null};await gt.mkdir(r.outputDir,{recursive:true});try{let o=await R(e.cwd);return {errors:t,config:o,resolvePaths:r}}catch{l.break(),l.error(`An invalid ${u.info("blocks.json")} file was found at ${u.info(e.cwd)}.
32
- Before you can build the registry, you must create a valid ${u.info("blocks.json")} file by running the ${u.info("init")} command.`),l.break(),process.exit(1);}}var Ns=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string(),verbose:z.boolean().optional().default(false)}),hr=new Command().name("registry:build").description("builds the registry").argument("[registry]","path to registry.json file","./registry.json").option("-o, --output <path>","destination directory for json files","./r").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-v, --verbose","verbose output").action(async(e,t)=>{await $s({cwd:b.resolve(t.cwd),registryFile:e,outputDir:t.output,verbose:t.verbose});});async function $s(e){try{me();let t=Ns.parse(e),[{errors:r,resolvePaths:o,config:s},n]=await Promise.all([gr(t),k(t.cwd)]);(r[P]||!n)&&(l.error(`A ${u.info("blocks.json")} file is required to build the registry. Run ${u.info("mercur init")} to create one.`),l.break(),await Y({type:"build",payload:{outcome:"missing_config"}},{cwd:t.cwd}),process.exit(1)),(r[M]||!o)&&(l.error(`We could not find a registry file at ${u.info(b.resolve(t.cwd,t.registryFile))}.`),l.break(),await Y({type:"build",payload:{outcome:"missing_registry_file"}},{cwd:t.cwd}),process.exit(1));let i=await A.readFile(o.registryFile,"utf-8"),f=J.safeParse(JSON.parse(i));f.success||(l.error(`Invalid registry file found at ${u.info(o.registryFile)}.`),l.break(),process.exit(1));let c=E("Building registry..."),a=await Ds(f.data,s,n);for(let m of a.items)m.files=m.files?.filter((p,d,h)=>d===h.findIndex(w=>w.path===p.path)),m.dependencies&&(m.dependencies=m.dependencies.filter((p,d,h)=>d===h.findIndex(w=>w===p)));for(let m of a.items){if(!m.files)continue;c.start(`Building ${m.name}...`),m.$schema=Tt;for(let d of m.files){let h=n.isSrcDir?"src":"",w=b.resolve(o.cwd,h,d.path);try{if(!(await A.stat(w)).isFile())continue;d.content=await A.readFile(w,"utf-8");}catch(x){console.error("Error reading file in registry build:",w,x);continue}}let p=j.safeParse(m);if(!p.success){l.error(`Invalid registry item found for ${u.info(m.name)}.`);continue}await A.writeFile(b.resolve(o.outputDir,`${p.data.name}.json`),JSON.stringify(p.data,null,2));}if(await A.copyFile(o.registryFile,b.resolve(o.outputDir,"registry.json")),c.succeed("Building registry."),t.verbose){E(`The registry has ${u.info(a.items.length.toString())} items:`).succeed();for(let m of a.items){l.log(` - ${m.name}`);for(let p of m.files??[])l.log(` - ${p.path}`);}}await Y({type:"build",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){l.break(),y(t);}}async function Ds(e,t,r){for(let o of e.items)if(o.files?.length)for(let s of o.files){let n=await st(s.path,t,r);n.files=n.files?.filter(i=>i.path!==s.path),n.files&&o.files.push(...n.files),n.dependencies&&(o.dependencies=o.dependencies?o.dependencies.concat(n.dependencies):n.dependencies);}return e}var Ve=".mercur",ee=/route\.(ts|js)$/;async function yt(e,t={}){let{pathnameFilter:r,ignoreFilter:o,ignorePartFilter:s,sortPathnames:n=true}=t,i=[],f=[e];for(;f.length>0;){let c=await Promise.all(f.map(async a=>{let m={directories:[],pathnames:[]};try{let p=await A__default.readdir(a,{withFileTypes:!0});for(let d of p){if(s&&s(d.name))continue;let h=b__default.join(a,d.name);o&&o(h)||(d.isDirectory()?m.directories.push(h):(!r||r(h))&&m.pathnames.push(h));}}catch(p){if(p.code!=="ENOENT"||a===e)throw p;return null}return m}));f=[];for(let a of c)a&&(f.push(...a.directories),i.push(...a.pathnames));}return n&&i.sort(),i}async function Ye(e){return await A__default.stat(e).catch(()=>null)!==null}async function Je(e){await Ye(e)||await A__default.mkdir(e,{recursive:true});}var zs="https://raw.githubusercontent.com/mercurjs/mercur/canary/packages/cli/routes-manifest.json",Bs=5e3;function Ws(e){let t=Ms.createHash("sha256").update(e).digest("hex").slice(0,16);return b__default.join(Ls.tmpdir(),`mercur-routes-manifest-${t}.json`)}async function He(){let e=process.env.MERCUR_ROUTES_MANIFEST_URL??zs,t=Ws(e);try{let r=new AbortController,o=setTimeout(()=>r.abort(),Bs),s=await fetch(e,{signal:r.signal});if(clearTimeout(o),!s.ok)throw new Error(`Request failed with status ${s.status}`);let n=await s.json();return await A__default.writeFile(t,JSON.stringify(n),"utf-8").catch(()=>{}),n}catch{try{return JSON.parse(await A__default.readFile(t,"utf-8"))}catch{throw new Error(`Failed to fetch the routes manifest from ${e} and no cached copy is available. Connect to the network and re-run codegen.`)}}}function ue(e){return e.replace(/\\/g,"/")}function Se(e){return e.split("/").reduce((r,o)=>{if(!o||ee.test(o))return r;if(o.startsWith("[")&&o.endsWith("]")){let s=o.slice(1,-1);return `${r}/:${s}`}return `${r}/${o}`},"")||"/"}async function wt(e){return await Ye(e)?(await yt(e,{pathnameFilter:o=>ee.test(o),ignorePartFilter:o=>o.startsWith("_")||o==="node_modules"})).map(o=>{let s=b__default.relative(e,o);return {filePath:ue(s),route:Se(ue(s))}}):[]}function Rt(e){return e.replace(/[-_]+(.)?/g,(t,r)=>r?r.toUpperCase():"").replace(/^[A-Z]/,t=>t.toLowerCase())}function Vs(e){return `../src/api/${e.replace(/\.ts$/,"")}`}function Ys(e){return e.startsWith(":")?`$${Rt(e.slice(1))}`:Rt(e)}function wr(){return {children:new Map}}function Js(e){let t=wr();for(let[r,o]of e){let s=r.split("/").filter(Boolean),n=t;for(let i of s){let f=Ys(i);n.children.has(f)||n.children.set(f,wr()),n=n.children.get(f);}n.importType=o;}return t}function xr(e,t=" "){let r=[];if(e.importType&&r.push(e.importType),e.children.size>0){let o=[];for(let[s,n]of e.children){let i=xr(n,t+" ");o.push(`${t} ${s}: ${i}`);}r.push(`{
27
+ `);}async function nr(e,t,r){if(r={overwrite:false,silent:false,yes:false,...r},!e.length)return;let o=E("Checking registry.",{silent:r.silent})?.start(),s=await it(e,ie(t));if(!s)return o?.fail(),y(new Error("Failed to fetch items from registry."));o?.succeed();let{filesCreated:n,filesUpdated:i}=await sr(s.files,t,{overwrite:r.overwrite,silent:r.silent,path:r.path,yes:r.yes});(n.length||i.length)&&await Qt(s.dependencies,s.devDependencies,t,{silent:r.silent}),s.docs&&l.info(s.docs);}z.object({cwd:z.string(),yes:z.boolean(),defaults:z.boolean(),silent:z.boolean()});async function ir(e){let t={},r=b__default.resolve(e.cwd);existsSync(r)||(t.MISSING_DIR=true);let o=await k(r);return {errors:t,projectInfo:o}}var cr=join(homedir(),".mercur"),ct=join(cr,"config.json"),lt={telemetry_enabled:true,telemetry_email:null,notice_shown:false},ft=class{get(t){return this.read()[t]}set(t,r){let o=this.read();o[t]=r,this.write(o);}read(){try{if(!existsSync(ct))return {...lt};let t=readFileSync(ct,"utf-8"),r=JSON.parse(t);return {...lt,...r}}catch{return {...lt}}}write(t){try{mkdirSync(cr,{recursive:!0}),writeFileSync(ct,JSON.stringify(t,null,2)+`
28
+ `,{mode:384});}catch{}}},V=new ft;var fe=e=>Function("mm","return import(mm)")(e);function ps(){let e=(...t)=>t.some(r=>!!process.env[r]);return e("MEDUSA_CLOUD_ENVIRONMENT_HANDLE","MEDUSA_CLOUD_SANDBOX_HANDLE","MEDUSA_CLOUD_API_KEY")?"medusa-cloud":e("RENDER","RENDER_URL","RENDER_INTERNAL_HOSTNAME","RENDER_SERVICE_ID")?"render":e("FLY_APP_NAME","FLY_REGION","FLY_ALLOC_ID")?"fly-io":e("RAILWAY_STATIC_URL","RAILWAY_ENVIRONMENT_NAME")?"railway":e("DYNO","HEROKU_APP_NAME")?"heroku":e("DO_DEPLOYMENT_ID","DO_APP_NAME","DIGITALOCEAN")?"digitalocean":e("KOYEB","KOYEB_DEPLOYMENT_ID","KOYEB_APP_NAME")?"koyeb":null}async function fr(){try{let e=await fe("os"),t=e.cpus();return {deploymentVendor:ps(),systemPlatform:e.platform(),systemRelease:e.release(),systemArchitecture:e.arch(),cpuCount:t.length,cpuModel:t.length?t[0].model:null,cpuSpeed:t.length?t[0].speed:null,memory:e.totalmem(),isWSL:await us(),isDocker:await mr(),isTTY:typeof process<"u"&&process.stdout?process.stdout.isTTY:null}}catch{return {systemPlatform:null,systemRelease:null,systemArchitecture:null,cpuCount:null,cpuModel:null,cpuSpeed:null,memory:null,isWSL:null,isDocker:null,isTTY:null}}}async function us(){try{if(typeof process>"u"||process?.platform!=="linux")return !1;let e=await fe("fs");return (await fe("os")).release().toLowerCase().includes("microsoft")?!await lr():e.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!await lr():!1}catch{return false}}var ds=async()=>{try{return (await fe("fs")).statSync("/run/.containerenv"),!0}catch{return false}};async function mr(){return await gs()||await hs()}async function gs(){try{return (await fe("fs")).statSync("/.dockerenv"),!0}catch{return false}}async function hs(){try{return (await fe("fs")).readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return false}}async function lr(){return await ds()||await mr()}var mt=e=>createHash("sha256").update(e).digest("base64");var Rs=process.env.MERCUR_TELEMETRY_PROXY_URL||"https://telemetry.mercurjs.com/api/v1/events";var pr=e=>{V.set("telemetry_enabled",e);},Ge="https://docs.mercurjs.com/telemetry",me=()=>{V.get("notice_shown")||(V.set("notice_shown",true),process.env.MERCUR_DISABLE_TELEMETRY!=="true"&&console.error(["","Mercur collects anonymous usage data to improve the CLI experience.",`You can disable this at any time by running: ${u.info("mercurjs telemetry --disable")}`,`Or by setting ${u.info("MERCUR_DISABLE_TELEMETRY=true")}`,`Learn more: ${u.info(Ge)}`,""].join(`
29
+ `)));},xs=()=>V.get("telemetry_enabled")&&process.env.MERCUR_DISABLE_TELEMETRY!=="true",Y=async(e,t)=>{try{if(!xs())return;let r=await k(t.cwd),{projectId:o}=vs(r.packageJson),s={nodeEnv:Es(),nodeVersion:process.version,mercurVersion:r.mercurVersion,medusaVersion:r.medusaVersion,isSrcDir:r.isSrcDir,aliasPrefix:r.aliasPrefix,config:await R(t.cwd),projectId:o,systemInfo:await fr(),packageManager:await ze(t.cwd),email:Is()};await fetch(Rs,{body:JSON.stringify({...s,...e}),headers:{"Content-Type":"application/json"},method:"post"});}catch{}};function Es(){return process.env.NODE_ENV||"development"}var bs=()=>{try{let e=execSync("git config --local --get remote.origin.url",{stdio:"pipe",timeout:1e3});return String(e).trim()}catch{return null}},vs=e=>{let t=bs();if(t)return {projectId:mt(t)};let r=process.cwd();return {projectId:mt(r)}},Is=()=>V.get("telemetry_email")||void 0;var Cs=z.object({cwd:z.string(),yes:z.boolean(),defaults:z.boolean(),silent:z.boolean()}),dr=new Command().name("init").description("initialize your project and install dependencies").option("-y, --yes","skip confirmation prompt.",true).option("-d, --defaults","use default configuration.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async e=>{try{me();let t=Cs.parse({cwd:b__default.resolve(e.cwd),...e});await ut(t),l.log(`${u.success("Success!")} Project initialization completed.
30
+ You may now add blocks.`),l.break(),await Y({type:"init",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){l.break(),y(t);}finally{C();}});async function ut(e){await ir(e);let t=await R(e.cwd),r=t?await _s(t,e):await Ps(e);if(!e.yes){let{proceed:n}=await pt({type:"confirm",name:"proceed",message:`Write configuration to ${u.info("blocks.json")}. Proceed?`,initial:true});n||process.exit(0);}let o=E("Writing blocks.json.").start(),s=b__default.resolve(e.cwd,"blocks.json");return r.registries=Object.fromEntries(Object.entries(r.registries||{}).filter(([n])=>!Object.keys(_).includes(n))),await promises.writeFile(s,`${JSON.stringify(r,null,2)}
31
+ `,"utf8"),o.succeed(),await et(e.cwd,r)}async function Ps(e){if(e.defaults)return L.parse({$schema:_e,aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:_});l.info("");let t=await pt([{type:"text",name:"api",message:`Configure the import alias for ${u.info("api")}:`,initial:"packages/api/src"},{type:"text",name:"vendor",message:`Configure the import alias for ${u.info("vendor")}:`,initial:"apps/vendor/src"},{type:"text",name:"admin",message:`Configure the import alias for ${u.info("admin")}:`,initial:"apps/admin/src"}],{onCancel:()=>{process.exit(0);}});return L.parse({$schema:_e,aliases:{api:t.api??"packages/api/src",vendor:t.vendor??"apps/vendor/src",admin:t.admin??"apps/admin/src"},registries:_})}async function _s(e,t){if(t.defaults)return L.parse({$schema:_e,aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:_});let r=await pt([{type:"text",name:"api",message:`Configure the import alias for ${u.info("api")}:`,initial:e.aliases.api},{type:"text",name:"vendor",message:`Configure the import alias for ${u.info("vendor")}:`,initial:e.aliases.vendor},{type:"text",name:"admin",message:`Configure the import alias for ${u.info("admin")}:`,initial:e.aliases.admin}],{onCancel:()=>{process.exit(0);}});return L.parse({$schema:e.$schema,aliases:{api:r.api??e.aliases.api,vendor:r.vendor??e.aliases.vendor,admin:r.admin??e.aliases.admin}})}var Os=z.object({blocks:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),cwd:z.string(),silent:z.boolean()}),gr=new Command().name("add").description("add blocks to your project").argument("[blocks...]","names of blocks to add").option("-y, --yes","skip confirmation prompt.",false).option("-o, --overwrite","overwrite existing files.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e,t)=>{try{me();let r=Os.parse({blocks:e,cwd:b__default.resolve(t.cwd),...t}),o=await R(r.cwd);o||(o=U({resolvedPaths:{cwd:r.cwd}})),r.blocks?.length||(l.error("Please specify at least one item to add."),process.exit(1));let{errors:s}=await $t(r);if(s[P]){let{proceed:n}=await pt({type:"confirm",name:"proceed",message:`You need to create a ${u.info("blocks.json")} file to add items. Proceed?`,initial:!0});n||(l.break(),process.exit(1)),o=await ut({cwd:r.cwd,yes:!0,defaults:!1,silent:r.silent});}if(!o)throw new Error(`Failed to read config at ${u.info(r.cwd)}.`);await nr(r.blocks,o,{overwrite:r.overwrite,silent:r.silent,yes:r.yes,path:r.cwd}),await Y({type:"add",payload:{outcome:"success",blocks:r.blocks}},{cwd:r.cwd});}catch(r){l.break(),y(r);}finally{C();}});async function hr(e){let t={},r={cwd:e.cwd,registryFile:b__default.resolve(e.cwd,e.registryFile),outputDir:b__default.resolve(e.cwd,e.outputDir)};if(!gt.existsSync(r.registryFile))return t[M]=true,{errors:t,resolvePaths:null,config:null};if(!gt.existsSync(b__default.resolve(e.cwd,"blocks.json")))return t[P]=true,{errors:t,resolvePaths:null,config:null};await gt.mkdir(r.outputDir,{recursive:true});try{let o=await R(e.cwd);return {errors:t,config:o,resolvePaths:r}}catch{l.break(),l.error(`An invalid ${u.info("blocks.json")} file was found at ${u.info(e.cwd)}.
32
+ Before you can build the registry, you must create a valid ${u.info("blocks.json")} file by running the ${u.info("init")} command.`),l.break(),process.exit(1);}}var $s=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string(),verbose:z.boolean().optional().default(false)}),yr=new Command().name("registry:build").description("builds the registry").argument("[registry]","path to registry.json file","./registry.json").option("-o, --output <path>","destination directory for json files","./r").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-v, --verbose","verbose output").action(async(e,t)=>{await Ds({cwd:b.resolve(t.cwd),registryFile:e,outputDir:t.output,verbose:t.verbose});});async function Ds(e){try{me();let t=$s.parse(e),[{errors:r,resolvePaths:o,config:s},n]=await Promise.all([hr(t),k(t.cwd)]);(r[P]||!n)&&(l.error(`A ${u.info("blocks.json")} file is required to build the registry. Run ${u.info("mercur init")} to create one.`),l.break(),await Y({type:"build",payload:{outcome:"missing_config"}},{cwd:t.cwd}),process.exit(1)),(r[M]||!o)&&(l.error(`We could not find a registry file at ${u.info(b.resolve(t.cwd,t.registryFile))}.`),l.break(),await Y({type:"build",payload:{outcome:"missing_registry_file"}},{cwd:t.cwd}),process.exit(1));let i=await A.readFile(o.registryFile,"utf-8"),f=J.safeParse(JSON.parse(i));f.success||(l.error(`Invalid registry file found at ${u.info(o.registryFile)}.`),l.break(),process.exit(1));let c=E("Building registry..."),a=await As(f.data,s,n);for(let m of a.items)m.files=m.files?.filter((p,d,h)=>d===h.findIndex(w=>w.path===p.path)),m.dependencies&&(m.dependencies=m.dependencies.filter((p,d,h)=>d===h.findIndex(w=>w===p)));for(let m of a.items){if(!m.files)continue;c.start(`Building ${m.name}...`),m.$schema=jt;for(let d of m.files){let h=n.isSrcDir?"src":"",w=b.resolve(o.cwd,h,d.path);try{if(!(await A.stat(w)).isFile())continue;d.content=await A.readFile(w,"utf-8");}catch(x){console.error("Error reading file in registry build:",w,x);continue}}let p=j.safeParse(m);if(!p.success){l.error(`Invalid registry item found for ${u.info(m.name)}.`);continue}await A.writeFile(b.resolve(o.outputDir,`${p.data.name}.json`),JSON.stringify(p.data,null,2));}if(await A.copyFile(o.registryFile,b.resolve(o.outputDir,"registry.json")),c.succeed("Building registry."),t.verbose){E(`The registry has ${u.info(a.items.length.toString())} items:`).succeed();for(let m of a.items){l.log(` - ${m.name}`);for(let p of m.files??[])l.log(` - ${p.path}`);}}await Y({type:"build",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){l.break(),y(t);}}async function As(e,t,r){for(let o of e.items)if(o.files?.length)for(let s of o.files){let n=await st(s.path,t,r);n.files=n.files?.filter(i=>i.path!==s.path),n.files&&o.files.push(...n.files),n.dependencies&&(o.dependencies=o.dependencies?o.dependencies.concat(n.dependencies):n.dependencies);}return e}var Ve=".mercur",ee=/route\.(ts|js)$/;async function yt(e,t={}){let{pathnameFilter:r,ignoreFilter:o,ignorePartFilter:s,sortPathnames:n=true}=t,i=[],f=[e];for(;f.length>0;){let c=await Promise.all(f.map(async a=>{let m={directories:[],pathnames:[]};try{let p=await A__default.readdir(a,{withFileTypes:!0});for(let d of p){if(s&&s(d.name))continue;let h=b__default.join(a,d.name);o&&o(h)||(d.isDirectory()?m.directories.push(h):(!r||r(h))&&m.pathnames.push(h));}}catch(p){if(p.code!=="ENOENT"||a===e)throw p;return null}return m}));f=[];for(let a of c)a&&(f.push(...a.directories),i.push(...a.pathnames));}return n&&i.sort(),i}async function Ye(e){return await A__default.stat(e).catch(()=>null)!==null}async function Je(e){await Ye(e)||await A__default.mkdir(e,{recursive:true});}var Bs="https://raw.githubusercontent.com/mercurjs/mercur/canary/packages/cli/routes-manifest.json",Ws=5e3;function Gs(e){let t=Ls.createHash("sha256").update(e).digest("hex").slice(0,16);return b__default.join(Us.tmpdir(),`mercur-routes-manifest-${t}.json`)}async function He(){let e=process.env.MERCUR_ROUTES_MANIFEST_URL??Bs,t=Gs(e);try{let r=new AbortController,o=setTimeout(()=>r.abort(),Ws),s=await fetch(e,{signal:r.signal});if(clearTimeout(o),!s.ok)throw new Error(`Request failed with status ${s.status}`);let n=await s.json();return await A__default.writeFile(t,JSON.stringify(n),"utf-8").catch(()=>{}),n}catch{try{return JSON.parse(await A__default.readFile(t,"utf-8"))}catch{throw new Error(`Failed to fetch the routes manifest from ${e} and no cached copy is available. Connect to the network and re-run codegen.`)}}}function ue(e){return e.replace(/\\/g,"/")}function Se(e){return e.split("/").reduce((r,o)=>{if(!o||ee.test(o))return r;if(o.startsWith("[")&&o.endsWith("]")){let s=o.slice(1,-1);return `${r}/:${s}`}return `${r}/${o}`},"")||"/"}async function wt(e){return await Ye(e)?(await yt(e,{pathnameFilter:o=>ee.test(o),ignorePartFilter:o=>o.startsWith("_")||o==="node_modules"})).map(o=>{let s=b__default.relative(e,o);return {filePath:ue(s),route:Se(ue(s))}}):[]}function Rt(e){return e.replace(/[-_]+(.)?/g,(t,r)=>r?r.toUpperCase():"").replace(/^[A-Z]/,t=>t.toLowerCase())}function Ys(e){return `../src/api/${e.replace(/\.ts$/,"")}`}function Js(e){return e.startsWith(":")?`$${Rt(e.slice(1))}`:Rt(e)}function Rr(){return {children:new Map}}function Hs(e){let t=Rr();for(let[r,o]of e){let s=r.split("/").filter(Boolean),n=t;for(let i of s){let f=Js(i);n.children.has(f)||n.children.set(f,Rr()),n=n.children.get(f);}n.importType=o;}return t}function Er(e,t=" "){let r=[];if(e.importType&&r.push(e.importType),e.children.size>0){let o=[];for(let[s,n]of e.children){let i=Er(n,t+" ");o.push(`${t} ${s}: ${i}`);}r.push(`{
33
33
  ${o.join(`;
34
34
  `)};
35
- ${t}}`);}return r.length===0?"{}":r.length===1?r[0]:r.join(" & ")}function Er(e,t,r){let o=new Map;for(let[f,c]of Object.entries(t))o.set(f,c);let s=r??Vs;for(let f of e){let c=s(f.filePath);o.set(f.route,`typeof import("${c}")`);}let n=Js(o);return `// This file is generated automatically by Mercur CLI
35
+ ${t}}`);}return r.length===0?"{}":r.length===1?r[0]:r.join(" & ")}function br(e,t,r){let o=new Map;for(let[f,c]of Object.entries(t))o.set(f,c);let s=r??Ys;for(let f of e){let c=s(f.filePath);o.set(f.route,`typeof import("${c}")`);}let n=Hs(o);return `// This file is generated automatically by Mercur CLI
36
36
  // Do not edit this file manually
37
37
 
38
- export type Routes = ${xr(n,"")};
39
- `}async function br(e){let t=b__default.join(e,Ve,"routes.d.ts"),r=b__default.join(e,"src","api"),o=b__default.dirname(t);await Je(o);let s=await He(),n=await wt(r),i=Er(n,s);await A__default.writeFile(t,i,"utf-8");}async function vr(e,t){let r=b__default.join(e,Ve,"index.d.ts"),o=b__default.dirname(r);await Je(o);let s=t.map(c=>{let a=c.indexOf("/api/"),m=a!==-1?c.slice(a+5):c;return {filePath:c,route:Se(ue(m))}}),n=c=>`../src/${c.replace(/\.ts$/,"")}`,i=await He(),f=Er(s,i,n);await A__default.writeFile(r,f,"utf-8");}async function kr(e){let t={},r={cwd:e.cwd,registryFile:b__default.resolve(e.cwd,e.registryFile)};if(!gt.existsSync(r.registryFile))return t[M]=true,{errors:t,resolvePaths:null,config:null};if(!gt.existsSync(b__default.resolve(e.cwd,"blocks.json")))return t[P]=true,{errors:t,resolvePaths:null,config:null};try{let o=await R(e.cwd);return {errors:t,config:o,resolvePaths:r}}catch{l.break(),l.error(`An invalid ${u.info("blocks.json")} file was found at ${u.info(e.cwd)}.
40
- Before you can run registry:codegen, you must create a valid ${u.info("blocks.json")} file by running the ${u.info("init")} command.`),l.break(),process.exit(1);}}var Ks=z.object({cwd:z.string(),registryFile:z.string()}),Pr=new Command().name("registry:codegen").description("generate type definitions for registry block API routes").argument("[registry]","path to registry.json file","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{await qs({cwd:b.resolve(t.cwd),registryFile:e});});async function qs(e){try{let t=Ks.parse(e),{errors:r,resolvePaths:o}=await kr(t);r[P]&&(l.error(`A ${u.info("blocks.json")} file is required to run registry:codegen. Run ${u.info("mercur init")} to create one.`),l.break(),process.exit(1)),(r[M]||!o)&&(l.error(`Could not find a registry file at ${u.info(b.resolve(t.cwd,t.registryFile))}.`),l.break(),process.exit(1));let s=await A.readFile(o.registryFile,"utf-8"),n=J.safeParse(JSON.parse(s));n.success||(l.error(`Invalid registry file at ${u.info(o.registryFile)}.`),l.break(),process.exit(1));let i=[];for(let c of n.data.items)if(c.files)for(let a of c.files)a.type==="registry:api"&&ee.test(a.path)&&i.push(a.path);if(i.length===0){l.warn("No API route files found in registry.");return}let f=E("Generating registry route types...");await vr(t.cwd,i),f.succeed("Registry route types generated successfully."),l.break();}catch(t){l.break(),y(t);}}var Xs=z.object({cwd:z.string()}),jr=new Command().name("codegen").description("generate type definitions for API routes").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{await Qs({cwd:b.resolve(e.cwd)});});async function Qs(e){try{let t=Xs.parse(e),r=E("Generating route types...");await br(t.cwd),r.succeed("Route types generated successfully."),l.break();}catch(t){l.break(),y(t);}}async function Fr(e,t){let{config:r}=t||{};if(W(e)){let[i]=await X([e]);try{return J.parse(i)}catch(f){throw new T(e,f)}}if(!e.startsWith("@"))throw new Ne(e);let o=e;o.endsWith("/registry")||(o=`${o}/registry`);let s=we(o,ie(r));if(!s?.url)throw new se(o);let[n]=await X([s.url]);try{return J.parse(n)}catch(i){throw new T(o,i)}}async function Ke(e,t){let{config:r}=t||{};return C(),Ue(e,ie(r))}var nn=z.object({blocks:z.array(z.string()).optional(),cwd:z.string()}),Or=new Command().name("diff").description("check for updates against the registry").argument("[blocks...]","the block names to diff").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=nn.parse({blocks:e,cwd:b__default.resolve(t.cwd),type:t.type}),o=await R(r.cwd);o||(o=U({resolvedPaths:{cwd:r.cwd}})),r.blocks?.length||(l.error("Please specify at least one block to diff."),process.exit(1));let s=await Ke(r.blocks,{config:o}),n=r.blocks.filter(f=>!s.some(c=>c.name===f));n.length>0&&(l.error(`Blocks ${n.join(", ")} not found in registry.`),process.exit(1));let i=await k(o.resolvedPaths.cwd);for(let f of s)for(let c of f.files){let a=Be(c,o,{isSrcDir:i?.isSrcDir??!1,path:r.cwd});if(!existsSync(a)){l.info(`File ${a} does not exist locally.`);continue}let m=await promises.readFile(a,"utf-8"),p=await We({filename:c.path,raw:c.content,config:o,isRemote:!1}),d=diffLines(m,p);d.length>1&&(l.info(`
41
- File: ${u.info(c.path)}`),an(d));}}catch(r){y(r);}finally{C();}});function an(e){for(let t of e)t&&(t.added?process.stdout.write(u.success(t.value)):t.removed?process.stdout.write(u.error(t.value)):process.stdout.write(t.value));}var Nr=new Command().name("info").description("get information about your project").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{try{l.info("> project info"),console.log(await k(e.cwd)),l.break(),l.info("> blocks.json"),console.log(await R(e.cwd));}catch(t){y(t);}});var mn=z.object({cwd:z.string(),query:z.string().optional(),registry:z.string().optional()}),$r=new Command().name("search").description("search blocks from registries").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-r, --registry <registry>","the registry to search from (default: @mercurjs)","@mercurjs").action(async e=>{try{let t=mn.parse({cwd:b__default.resolve(e.cwd),query:e.query,type:e.type,registry:e.registry}),r=await R(t.cwd);r||(r=U({resolvedPaths:{cwd:t.cwd}}));let s=(await Fr(t.registry??"@mercurjs",{config:r})).items;if(t.query){let n=t.query.toLowerCase();s=s.filter(i=>i.name.toLowerCase().includes(n)||i.description?.toLowerCase().includes(n));}console.log(JSON.stringify(s,null,2)),process.exit(0);}catch(t){y(t);}finally{C();}});var Dr=new Command().name("telemetry").description("manage the collection of anonymous usage data").option("--enable","enable telemetry").option("--disable","disable telemetry").action(async e=>{try{if(e.enable&&e.disable){l.error("Cannot use --enable and --disable together.");return}if(!e.enable&&!e.disable){let r=V.get("telemetry_enabled"),o=process.env.MERCUR_DISABLE_TELEMETRY==="true",s=r&&!o,n=s?"enabled":"disabled";l.log(`Telemetry is currently ${n}.`),o&&r&&l.log("(Disabled via MERCUR_DISABLE_TELEMETRY environment variable)"),l.log(s?'Run "mercurjs telemetry --disable" to opt out.':'Run "mercurjs telemetry --enable" to opt in.'),l.log(`Learn more: ${Ge}`);return}let t=!!e.enable;mr(t),t?l.success(`Telemetry enabled. Learn more: ${Ge}`):l.success("Telemetry disabled. No data will be collected.");}catch(t){y(t);}});var gn=z.object({cwd:z.string()}),Mr=new Command().name("view").description("view block details from the registry").argument("<blocks...>","the block names to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=gn.parse({cwd:b__default.resolve(t.cwd),type:t.type}),o=await R(r.cwd);o||(o=U({resolvedPaths:{cwd:r.cwd}}));let s=await Ke(e,{config:o});console.log(JSON.stringify(s,null,2)),process.exit(0);}catch(r){y(r);}finally{C();}});var xn=[".tsx",".ts",".jsx",".js"];function En(e){for(let t of xn){let r=b__default.join(e,`index${t}`);if(Xe.existsSync(r))return r}return null}function bn(e,t){let r={};try{r=JSON.parse(readFileSync(b__default.resolve(e,"package.json"),"utf-8"));}catch{}return new Set([...Object.keys(r.dependencies||{}),...Object.keys(r.peerDependencies||{}),...Object.keys(r.devDependencies||{}),"react","react/jsx-runtime","react-dom","react-router-dom","react-i18next","i18next","@medusajs/js-sdk","@medusajs/admin-sdk","@medusajs/ui","@medusajs/icons","@mercurjs/client","@mercurjs/dashboard-shared","@tanstack/react-query",...t])}async function Qe(e){let t=b__default.resolve(e.root,e.srcDir);if(!Xe.existsSync(t))return true;let r=await import('vite'),o=(await import('@vitejs/plugin-react')).default,s=bn(e.root,e.extraExternal??[]),n=b__default.resolve(e.root,e.outFile),i=b__default.dirname(n),f=b__default.basename(n,b__default.extname(n)),c=En(t),a=b__default.join(t,"__dashboard-extensions__.js"),m=c??a;try{c||await writeFile(a,generatePluginEntryModule(t),"utf-8");let p=process.env.NODE_ENV;process.env.NODE_ENV="production",await r.build({build:{lib:{entry:m,formats:["es","cjs"],fileName:f},emptyOutDir:!1,minify:!1,outDir:i,watch:e.watch?{}:void 0,rollupOptions:{external:(w,x)=>{let v=w.split("/"),I=v[0]?.startsWith("@")?`${v[0]}/${v[1]}`:v[0],N=[...builtinModules,...builtinModules.map(te=>`node:${te}`)];return x?!!(I&&s.has(I)):!!(I&&s.has(I)||I&&N.includes(I))},output:{preserveModules:!1,chunkFileNames:()=>"_chunks/[name]-[hash]"}}},plugins:[o()],logLevel:"silent",clearScreen:!1}),process.env.NODE_ENV=p;let d=b__default.join(i,`${f}.es.js`),h=b__default.join(i,`${f}.mjs`);return Xe.existsSync(d)&&Xe.renameSync(d,h),!0}catch(p){return console.error(p),false}finally{if(!c)try{await rm(a,{force:!0});}catch{}}}var Ur=new Command().name("plugin:build").description("build a Medusa plugin").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{try{let t=b__default.resolve(e.cwd),r=E("Building plugin..."),{Compiler:o}=await import('@medusajs/framework/build-tools'),s=new o(t,l),n=await s.loadTSConfigFile();n||(r.fail("Unable to compile plugin \u2014 tsconfig not found."),process.exit(1));let i=b__default.resolve(t,".medusa/server");(await Promise.all([s.buildPluginBackend(n),...["admin","vendor"].map(c=>Qe({root:t,srcDir:`src/${c}`,outFile:b__default.join(i,"src",c,"index.mjs")}))])).every(c=>c===!0)?r.succeed("Plugin built successfully."):(r.fail("Plugin build failed."),process.exit(1));}catch(t){l.break(),y(t);}});var zr=["admin","vendor"],Br=new Command().name("dashboard:build").description("build a dashboard extensions entry (routes, widgets, custom fields, i18n) from a source directory").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-a, --app <app>","which panel the entry targets (admin|vendor)","admin").option("-s, --src <src>","source directory to crawl","src").option("-o, --out <out>","output file","dist/admin-extensions.mjs").option("-w, --watch","rebuild on change",false).action(async e=>{try{let t=b__default.resolve(e.cwd);zr.includes(e.app)||(l.error(`--app must be one of: ${zr.join(", ")}`),process.exit(1));let r=E(`Building ${e.app} extensions...`);await Qe({root:t,srcDir:e.src,outFile:e.out,watch:e.watch})?r.succeed(`Built ${e.app} extensions.`):(r.fail(`Failed to build ${e.app} extensions.`),process.exit(1));}catch(t){l.break(),y(t);}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Cn(){let e=new Command().name("@mercurjs/cli").description("Add blocks from registries to your project").version(It.version,"-v, --version","display the version number");e.addCommand(dr).addCommand(hr).addCommand(Pr).addCommand(jr).addCommand(Or).addCommand(Nr).addCommand(ur).addCommand($r).addCommand(Dr).addCommand(Mr).addCommand(Ur).addCommand(Br),e.parse();}Cn();export{Jr as registryConfigItemSchema,_t as registryConfigSchema,Fn as registryIndexSchema,kt as registryItemFileSchema,j as registryItemSchema,Yr as registryItemTypeSchema,Pt as registryResolvedItemsTreeSchema,J as registrySchema};//# sourceMappingURL=index.js.map
38
+ export type Routes = ${Er(n,"")};
39
+ `}async function vr(e){let t=b__default.join(e,Ve,"routes.d.ts"),r=b__default.join(e,"src","api"),o=b__default.dirname(t);await Je(o);let s=await He(),n=await wt(r),i=br(n,s);await A__default.writeFile(t,i,"utf-8");}async function Ir(e,t){let r=b__default.join(e,Ve,"index.d.ts"),o=b__default.dirname(r);await Je(o);let s=t.map(c=>{let a=c.indexOf("/api/"),m=a!==-1?c.slice(a+5):c;return {filePath:c,route:Se(ue(m))}}),n=c=>`../src/${c.replace(/\.ts$/,"")}`,i=await He(),f=br(s,i,n);await A__default.writeFile(r,f,"utf-8");}async function Cr(e){let t={},r={cwd:e.cwd,registryFile:b__default.resolve(e.cwd,e.registryFile)};if(!gt.existsSync(r.registryFile))return t[M]=true,{errors:t,resolvePaths:null,config:null};if(!gt.existsSync(b__default.resolve(e.cwd,"blocks.json")))return t[P]=true,{errors:t,resolvePaths:null,config:null};try{let o=await R(e.cwd);return {errors:t,config:o,resolvePaths:r}}catch{l.break(),l.error(`An invalid ${u.info("blocks.json")} file was found at ${u.info(e.cwd)}.
40
+ Before you can run registry:codegen, you must create a valid ${u.info("blocks.json")} file by running the ${u.info("init")} command.`),l.break(),process.exit(1);}}var qs=z.object({cwd:z.string(),registryFile:z.string()}),_r=new Command().name("registry:codegen").description("generate type definitions for registry block API routes").argument("[registry]","path to registry.json file","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{await Zs({cwd:b.resolve(t.cwd),registryFile:e});});async function Zs(e){try{let t=qs.parse(e),{errors:r,resolvePaths:o}=await Cr(t);r[P]&&(l.error(`A ${u.info("blocks.json")} file is required to run registry:codegen. Run ${u.info("mercur init")} to create one.`),l.break(),process.exit(1)),(r[M]||!o)&&(l.error(`Could not find a registry file at ${u.info(b.resolve(t.cwd,t.registryFile))}.`),l.break(),process.exit(1));let s=await A.readFile(o.registryFile,"utf-8"),n=J.safeParse(JSON.parse(s));n.success||(l.error(`Invalid registry file at ${u.info(o.registryFile)}.`),l.break(),process.exit(1));let i=[];for(let c of n.data.items)if(c.files)for(let a of c.files)a.type==="registry:api"&&ee.test(a.path)&&i.push(a.path);if(i.length===0){l.warn("No API route files found in registry.");return}let f=E("Generating registry route types...");await Ir(t.cwd,i),f.succeed("Registry route types generated successfully."),l.break();}catch(t){l.break(),y(t);}}var Qs=z.object({cwd:z.string()}),Fr=new Command().name("codegen").description("generate type definitions for API routes").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{await en({cwd:b.resolve(e.cwd)});});async function en(e){try{let t=Qs.parse(e),r=E("Generating route types...");await vr(t.cwd),r.succeed("Route types generated successfully."),l.break();}catch(t){l.break(),y(t);}}async function Or(e,t){let{config:r}=t||{};if(W(e)){let[i]=await X([e]);try{return J.parse(i)}catch(f){throw new T(e,f)}}if(!e.startsWith("@"))throw new Ne(e);let o=e;o.endsWith("/registry")||(o=`${o}/registry`);let s=we(o,ie(r));if(!s?.url)throw new se(o);let[n]=await X([s.url]);try{return J.parse(n)}catch(i){throw new T(o,i)}}async function Ke(e,t){let{config:r}=t||{};return C(),Ue(e,ie(r))}var an=z.object({blocks:z.array(z.string()).optional(),cwd:z.string()}),Nr=new Command().name("diff").description("check for updates against the registry").argument("[blocks...]","the block names to diff").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=an.parse({blocks:e,cwd:b__default.resolve(t.cwd),type:t.type}),o=await R(r.cwd);o||(o=U({resolvedPaths:{cwd:r.cwd}})),r.blocks?.length||(l.error("Please specify at least one block to diff."),process.exit(1));let s=await Ke(r.blocks,{config:o}),n=r.blocks.filter(f=>!s.some(c=>c.name===f));n.length>0&&(l.error(`Blocks ${n.join(", ")} not found in registry.`),process.exit(1));let i=await k(o.resolvedPaths.cwd);for(let f of s)for(let c of f.files){let a=Be(c,o,{isSrcDir:i?.isSrcDir??!1,path:r.cwd});if(!existsSync(a)){l.info(`File ${a} does not exist locally.`);continue}let m=await promises.readFile(a,"utf-8"),p=await We({filename:c.path,raw:c.content,config:o,isRemote:!1}),d=diffLines(m,p);d.length>1&&(l.info(`
41
+ File: ${u.info(c.path)}`),cn(d));}}catch(r){y(r);}finally{C();}});function cn(e){for(let t of e)t&&(t.added?process.stdout.write(u.success(t.value)):t.removed?process.stdout.write(u.error(t.value)):process.stdout.write(t.value));}var $r=new Command().name("info").description("get information about your project").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{try{l.info("> project info"),console.log(await k(e.cwd)),l.break(),l.info("> blocks.json"),console.log(await R(e.cwd));}catch(t){y(t);}});var pn=z.object({cwd:z.string(),query:z.string().optional(),registry:z.string().optional()}),Dr=new Command().name("search").description("search blocks from registries").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-r, --registry <registry>","the registry to search from (default: @mercurjs)","@mercurjs").action(async e=>{try{let t=pn.parse({cwd:b__default.resolve(e.cwd),query:e.query,type:e.type,registry:e.registry}),r=await R(t.cwd);r||(r=U({resolvedPaths:{cwd:t.cwd}}));let s=(await Or(t.registry??"@mercurjs",{config:r})).items;if(t.query){let n=t.query.toLowerCase();s=s.filter(i=>i.name.toLowerCase().includes(n)||i.description?.toLowerCase().includes(n));}console.log(JSON.stringify(s,null,2)),process.exit(0);}catch(t){y(t);}finally{C();}});var Ar=new Command().name("telemetry").description("manage the collection of anonymous usage data").option("--enable","enable telemetry").option("--disable","disable telemetry").action(async e=>{try{if(e.enable&&e.disable){l.error("Cannot use --enable and --disable together.");return}if(!e.enable&&!e.disable){let r=V.get("telemetry_enabled"),o=process.env.MERCUR_DISABLE_TELEMETRY==="true",s=r&&!o,n=s?"enabled":"disabled";l.log(`Telemetry is currently ${n}.`),o&&r&&l.log("(Disabled via MERCUR_DISABLE_TELEMETRY environment variable)"),l.log(s?'Run "mercurjs telemetry --disable" to opt out.':'Run "mercurjs telemetry --enable" to opt in.'),l.log(`Learn more: ${Ge}`);return}let t=!!e.enable;pr(t),t?l.success(`Telemetry enabled. Learn more: ${Ge}`):l.success("Telemetry disabled. No data will be collected.");}catch(t){y(t);}});var hn=z.object({cwd:z.string()}),Lr=new Command().name("view").description("view block details from the registry").argument("<blocks...>","the block names to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=hn.parse({cwd:b__default.resolve(t.cwd),type:t.type}),o=await R(r.cwd);o||(o=U({resolvedPaths:{cwd:r.cwd}}));let s=await Ke(e,{config:o});console.log(JSON.stringify(s,null,2)),process.exit(0);}catch(r){y(r);}finally{C();}});var En=[".tsx",".ts",".jsx",".js"];function bn(e){for(let t of En){let r=b__default.join(e,`index${t}`);if(Xe.existsSync(r))return r}return null}function vn(e,t){let r={};try{r=JSON.parse(readFileSync(b__default.resolve(e,"package.json"),"utf-8"));}catch{}return new Set([...Object.keys(r.dependencies||{}),...Object.keys(r.peerDependencies||{}),...Object.keys(r.devDependencies||{}),"react","react/jsx-runtime","react-dom","react-router-dom","react-i18next","i18next","@medusajs/js-sdk","@medusajs/admin-sdk","@medusajs/ui","@medusajs/icons","@mercurjs/client","@mercurjs/dashboard-shared","@tanstack/react-query",...t])}async function Qe(e){let t=b__default.resolve(e.root,e.srcDir);if(!Xe.existsSync(t))return true;let r=await import('vite'),o=(await import('@vitejs/plugin-react')).default,s=vn(e.root,e.extraExternal??[]),n=b__default.resolve(e.root,e.outFile),i=b__default.dirname(n),f=b__default.basename(n,b__default.extname(n)),c=bn(t),a=b__default.join(t,"__dashboard-extensions__.js"),m=c??a;try{c||await writeFile(a,generatePluginEntryModule(t),"utf-8");let p=process.env.NODE_ENV;process.env.NODE_ENV="production",await r.build({build:{lib:{entry:m,formats:["es","cjs"],fileName:f},emptyOutDir:!1,minify:!1,outDir:i,watch:e.watch?{}:void 0,rollupOptions:{external:(w,x)=>{let v=w.split("/"),I=v[0]?.startsWith("@")?`${v[0]}/${v[1]}`:v[0],N=[...builtinModules,...builtinModules.map(te=>`node:${te}`)];return x?!!(I&&s.has(I)):!!(I&&s.has(I)||I&&N.includes(I))},output:{preserveModules:!1,chunkFileNames:()=>"_chunks/[name]-[hash]"}}},plugins:[o()],logLevel:"silent",clearScreen:!1}),process.env.NODE_ENV=p;let d=b__default.join(i,`${f}.es.js`),h=b__default.join(i,`${f}.mjs`);return Xe.existsSync(d)&&Xe.renameSync(d,h),!0}catch(p){return console.error(p),false}finally{if(!c)try{await rm(a,{force:!0});}catch{}}}var zr=new Command().name("plugin:build").description("build a Medusa plugin").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{try{let t=b__default.resolve(e.cwd),r=E("Building plugin..."),{Compiler:o}=await import('@medusajs/framework/build-tools'),s=new o(t,l),n=await s.loadTSConfigFile();n||(r.fail("Unable to compile plugin \u2014 tsconfig not found."),process.exit(1));let i=b__default.resolve(t,".medusa/server");(await Promise.all([s.buildPluginBackend(n),...["admin","vendor"].map(c=>Qe({root:t,srcDir:`src/${c}`,outFile:b__default.join(i,"src",c,"index.mjs")}))])).every(c=>c===!0)?r.succeed("Plugin built successfully."):(r.fail("Plugin build failed."),process.exit(1));}catch(t){l.break(),y(t);}});var Br=["admin","vendor"],Wr=new Command().name("dashboard:build").description("build a dashboard extensions entry (routes, widgets, custom fields, layouts, i18n) from a source directory").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-a, --app <app>","which panel the entry targets (admin|vendor)","admin").option("-s, --src <src>","source directory to crawl. defaults to src/<app> when it exists, else src.").option("-o, --out <out>","output file. defaults to dist/<app>-extensions.mjs.").option("-w, --watch","rebuild on change",false).action(async e=>{try{let t=b__default.resolve(e.cwd);Br.includes(e.app)||(l.error(`--app must be one of: ${Br.join(", ")}`),process.exit(1));let r=e.src??(Xe.existsSync(b__default.join(t,"src",e.app))?b__default.join("src",e.app):"src"),o=e.out??`dist/${e.app}-extensions.mjs`,s=E(`Building ${e.app} extensions...`);await Qe({root:t,srcDir:r,outFile:o,watch:e.watch})?s.succeed(`Built ${e.app} extensions.`):(s.fail(`Failed to build ${e.app} extensions.`),process.exit(1));}catch(t){l.break(),y(t);}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Pn(){let e=new Command().name("@mercurjs/cli").description("Add blocks from registries to your project").version(St.version,"-v, --version","display the version number");e.addCommand(gr).addCommand(yr).addCommand(_r).addCommand(Fr).addCommand(Nr).addCommand($r).addCommand(dr).addCommand(Dr).addCommand(Ar).addCommand(Lr).addCommand(zr).addCommand(Wr),e.parse();}Pn();export{Hr as registryConfigItemSchema,Tt as registryConfigSchema,On as registryIndexSchema,Ct as registryItemFileSchema,j as registryItemSchema,Jr as registryItemTypeSchema,_t as registryResolvedItemsTreeSchema,J as registrySchema};//# sourceMappingURL=index.js.map
42
42
  //# sourceMappingURL=index.js.map