@mercurjs/cli 2.3.2-canary.2 → 2.3.2-canary.4

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.2-canary.2"};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,l="Check your network connection and try again.";o===404?l="The requested resource was not found. Check the URL or item name.":o===500?l="The registry server encountered an error. Try again later.":o&&o>=400&&o<500&&(l="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:l});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 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.2-canary.4"};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:
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"),l=await wo(b.basename(s)),a=ho.createSourceFile(l,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 l=await i.json(),a=z.object({detail:z.string().optional(),title:z.string().optional(),message:z.string().optional(),error:z.string().optional()}).safeParse(l);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(l){throw new T(o,l)}}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=[],l=[];for(let[a,m]of s)m===0&&f.push(a);for(;f.length>0;){let a=f.shift(),m=r.get(a);l.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(l.length!==e.length){let a=Array.from(r.keys()).filter(m=>!l.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())l.some(d=>G(d,t.get(d))===m)||l.push(p);}return l}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 c={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(c.break(),c.error("Something went wrong. Please check the error below for more details."),c.error("If the problem persists, please open an issue on GitHub."),c.error(""),typeof e=="string"&&(c.error(e),c.break(),process.exit(1)),e instanceof S&&(e.message&&(c.error(e.cause?"Error:":"Message:"),c.error(e.message)),e.cause&&(c.error(`
16
- Message:`),c.error(e.cause)),e.suggestion&&(c.error(`
17
- Suggestion:`),c.error(e.suggestion)),c.break(),process.exit(1)),e instanceof z.ZodError){c.error("Validation failed:");for(let t of e.issues){let r=t.path.join(".")||"root";c.error(`- ${u.info(r)}: ${t.message}`);}c.break(),process.exit(1);}e instanceof Error&&(c.error(e.message),c.break(),process.exit(1)),c.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,`
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(`
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,`
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}`}),l=f(s),a=f(n);return l===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(l=>l===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=[],l=[];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);c.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){l.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+l.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`),c.info(`${p.join(", ")}.`);}}else l.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:l}}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),l=o.has(n+1);f&&l?s.set(n,"both"):f?s.set(n,"start"):l&&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 l=i.value.split(`
21
- `);l[l.length-1]===""&&l.pop();for(let a of l)r.push(`+ ${a}`);}else if(i.removed){let l=i.value.split(`
22
- `);l[l.length-1]===""&&l.pop();for(let a of l)r.push(`- ${a}`);}else {let l=i.value.split(`
23
- `);l[l.length-1]===""&&l.pop();let a=[];f==="full"||l.length<=t*2+1?a=l.map(m=>` ${m}`):f==="start"?(a=l.slice(0,t).map(m=>` ${m}`),l.length>t&&a.push(` ... ${l.length-t} lines hidden ...`)):f==="end"?(l.length>t&&a.push(` ... ${l.length-t} lines hidden ...`),a.push(...l.slice(-t).map(m=>` ${m}`))):f==="both"&&(l.length<=t*2+1?a=l.map(m=>` ${m}`):a=[...l.slice(0,t).map(m=>` ${m}`),` ... ${l.length-t*2} lines hidden ...`,...l.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)}
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(`
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
+ `);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)}
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&&c.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)+`
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
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),c.log(`${u.success("Success!")} Project initialization completed.
30
- You may now add blocks.`),c.break(),await Y({type:"init",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){c.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:_});c.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||(c.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||(c.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){c.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{c.break(),c.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.`),c.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)&&(c.error(`A ${u.info("blocks.json")} file is required to build the registry. Run ${u.info("mercur init")} to create one.`),c.break(),await Y({type:"build",payload:{outcome:"missing_config"}},{cwd:t.cwd}),process.exit(1)),(r[M]||!o)&&(c.error(`We could not find a registry file at ${u.info(b.resolve(t.cwd,t.registryFile))}.`),c.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||(c.error(`Invalid registry file found at ${u.info(o.registryFile)}.`),c.break(),process.exit(1));let l=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;l.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){c.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")),l.succeed("Building registry."),t.verbose){E(`The registry has ${u.info(a.items.length.toString())} items:`).succeed();for(let m of a.items){c.log(` - ${m.name}`);for(let p of m.files??[])c.log(` - ${p.path}`);}}await Y({type:"build",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){c.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 l=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 l)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(`{
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(`{
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,l]of Object.entries(t))o.set(f,l);let s=r??Vs;for(let f of e){let l=s(f.filePath);o.set(f.route,`typeof import("${l}")`);}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 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
36
36
  // Do not edit this file manually
37
37
 
38
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(l=>{let a=l.indexOf("/api/"),m=a!==-1?l.slice(a+5):l;return {filePath:l,route:Se(ue(m))}}),n=l=>`../src/${l.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{c.break(),c.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.`),c.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]&&(c.error(`A ${u.info("blocks.json")} file is required to run registry:codegen. Run ${u.info("mercur init")} to create one.`),c.break(),process.exit(1)),(r[M]||!o)&&(c.error(`Could not find a registry file at ${u.info(b.resolve(t.cwd,t.registryFile))}.`),c.break(),process.exit(1));let s=await A.readFile(o.registryFile,"utf-8"),n=J.safeParse(JSON.parse(s));n.success||(c.error(`Invalid registry file at ${u.info(o.registryFile)}.`),c.break(),process.exit(1));let i=[];for(let l of n.data.items)if(l.files)for(let a of l.files)a.type==="registry:api"&&ee.test(a.path)&&i.push(a.path);if(i.length===0){c.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."),c.break();}catch(t){c.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."),c.break();}catch(t){c.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||(c.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(l=>l.name===f));n.length>0&&(c.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 l of f.files){let a=Be(l,o,{isSrcDir:i?.isSrcDir??!1,path:r.cwd});if(!existsSync(a)){c.info(`File ${a} does not exist locally.`);continue}let m=await promises.readFile(a,"utf-8"),p=await We({filename:l.path,raw:l.content,config:o,isRemote:!1}),d=diffLines(m,p);d.length>1&&(c.info(`
41
- File: ${u.info(l.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{c.info("> project info"),console.log(await k(e.cwd)),c.break(),c.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){c.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";c.log(`Telemetry is currently ${n}.`),o&&r&&c.log("(Disabled via MERCUR_DISABLE_TELEMETRY environment variable)"),c.log(s?'Run "mercurjs telemetry --disable" to opt out.':'Run "mercurjs telemetry --enable" to opt in.'),c.log(`Learn more: ${Ge}`);return}let t=!!e.enable;mr(t),t?c.success(`Telemetry enabled. Learn more: ${Ge}`):c.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)),l=En(t),a=b__default.join(t,"__dashboard-extensions__.js"),m=l??a;try{l||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(!l)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,c),n=await s.loadTSConfigFile();n||(r.fail("Unable to compile plugin \u2014 tsconfig not found."),process.exit(1));let i=await import('@medusajs/admin-bundler'),f=b__default.resolve(t,".medusa/server");(await Promise.all([s.buildPluginBackend(n),s.buildPluginAdminExtensions(i),...["admin","vendor"].map(a=>Qe({root:t,srcDir:`src/${a}`,outFile:b__default.join(f,"src",a,"index.mjs")}))])).every(a=>a===!0)?r.succeed("Plugin built successfully."):(r.fail("Plugin build failed."),process.exit(1));}catch(t){c.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)||(c.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){c.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
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
42
42
  //# sourceMappingURL=index.js.map