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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,42 +1,42 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import*as v from'path';import v__default,{join,basename}from'path';import ft from'prompts';import {z}from'zod';import Et,{promises,existsSync,readFileSync,mkdirSync,writeFileSync,statSync}from'fs';import {cosmiconfig}from'cosmiconfig';import {loadConfig,createMatchPath}from'tsconfig-paths';import ut from'fs-extra';import Qe from'fast-glob';import Ds,{createHash}from'crypto';import Vt from'deepmerge';import*as $ from'fs/promises';import $__default,{writeFile,rm}from'fs/promises';import As,{homedir,tmpdir}from'os';import {Project,ScriptKind}from'ts-morph';import Re from'kleur';import Fo 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 vt={version:"2.3.2-canary.0"};var It="MISSING_DIR_OR_EMPTY_PROJECT",C="MISSING_CONFIG",A="BUILD_MISSING_REGISTRY_FILE";var Gr=z.enum(["registry:api","registry:vendor","registry:admin"]),bt=z.object({path:z.string(),content:z.string().optional(),type:Gr,target:z.string().optional()}),St=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()}),T=St.extend({files:z.array(bt)}),Y=z.object({name:z.string(),homepage:z.string(),items:z.array(T)}),Sn=z.array(St),kt=T.pick({dependencies:true,devDependencies:true,files:true,docs:true}),Vr=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()})]),Ct=z.record(z.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @mercurjs)"}),Vr);var _e="https://registry.mercurjs.com/registry.json",Pt="https://registry.mercurjs.com/registry-item.json",ue=process.env.REGISTRY_URL??"https://raw.githubusercontent.com/mercurjs/mercur/main/packages/registry/r",P={"@mercurjs":`${ue}/{name}.json`};var j={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"},I=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||j.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);}},re=class extends I{constructor(r,o){let s=`The item at ${r} was not found. It may not exist at the registry.`;super(s,{code:j.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 I{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:j.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 I{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:j.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 I{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:j.FETCH_ERROR,statusCode:o,cause:n,context:{url:r,responseBody:s},suggestion:c});this.url=r;this.responseBody=s;this.name="RegistryFetchError";}url;responseBody},J=class extends I{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.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:
3
3
  {
4
4
  "registries": {
5
5
  "${r}": "[URL_TO_REGISTRY]"
6
6
  }
7
- }`:'Unknown registry. Make sure it is defined in blocks.json under "registries".';super(o,{code:j.NOT_CONFIGURED,context:{registryName:r},suggestion:"Add the registry configuration to your blocks.json file. Consult the registry documentation for the correct format."});this.registryName=r;this.name="RegistryNotConfiguredError";}registryName},H=class extends I{constructor(r,o){super(`Failed to read local registry file: ${r}`,{code:j.LOCAL_FILE_ERROR,cause:o,context:{filePath:r},suggestion:"Check if the file exists and you have read permissions."});this.filePath=r;this.name="RegistryLocalFileError";}filePath},_=class extends I{constructor(r,o){let s=`Failed to parse registry item: ${r}`;o instanceof z.ZodError&&(s=`Failed to parse registry item: ${r}
7
+ }`:'Unknown registry. Make sure it is defined in blocks.json under "registries".';super(o,{code:F.NOT_CONFIGURED,context:{registryName:r},suggestion:"Add the registry configuration to your blocks.json file. Consult the registry documentation for the correct format."});this.registryName=r;this.name="RegistryNotConfiguredError";}registryName},K=class extends S{constructor(r,o){super(`Failed to read local registry file: ${r}`,{code:F.LOCAL_FILE_ERROR,cause:o,context:{filePath:r},suggestion:"Check if the file exists and you have read permissions."});this.filePath=r;this.name="RegistryLocalFileError";}filePath},T=class extends S{constructor(r,o){let s=`Failed to parse registry item: ${r}`;o instanceof z.ZodError&&(s=`Failed to parse registry item: ${r}
8
8
  ${o.issues.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
9
- `)}`);super(s,{code:j.PARSE_ERROR,cause:o,context:{item:r},suggestion:"The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object."});this.item=r;this.parseError=o,this.name="RegistryParseError";}item;parseError},Oe=class extends I{constructor(r,o){let s=`Registry "${r}" requires the following environment variables:
9
+ `)}`);super(s,{code:F.PARSE_ERROR,cause:o,context:{item:r},suggestion:"The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object."});this.item=r;this.parseError=o,this.name="RegistryParseError";}item;parseError},Oe=class extends S{constructor(r,o){let s=`Registry "${r}" requires the following environment variables:
10
10
 
11
11
  `+o.map(n=>` \u2022 ${n}`).join(`
12
- `);super(s,{code:j.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 I{constructor(r){let o=`Invalid registry namespace: "${r}". Registry names must start with @ (e.g., @mercurjs).`;super(o,{code:j.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 I{constructor(r,o){let s=`Invalid blocks.json configuration in ${r}.`;o instanceof z.ZodError&&(s=`Invalid blocks.json configuration in ${r}:
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:j.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 M=z.object({$schema:z.string().optional(),aliases:z.object({api:z.string(),vendor:z.string(),admin:z.string()}),registries:Ct.optional()}).strict(),Tt=M.extend({resolvedPaths:z.object({cwd:z.string(),api:z.string(),vendor:z.string(),admin:z.string()})});async function oe(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx"])}var Kr="packages/api/src",qr="apps/vendor/src",Zr="apps/admin/src",Xr=cosmiconfig("blocks",{searchPlaces:["blocks.json"]});async function E(e){let t=await Qr(e);return t?await Xe(e,t):null}async function Xe(e,t){t.registries={...t.registries||{},...P};let r=await loadConfig(e);if(r.resultType==="failed")throw new Error(`Failed to load tsconfig.json. ${r.message??""}`.trim());return Tt.parse({...t,resolvedPaths:{cwd:e,api:await oe(t.aliases.api,r),vendor:await oe(t.aliases.vendor,r),admin:await oe(t.aliases.admin,r)}})}async function Qr(e){try{let t=await Xr.search(e);if(!t)return null;let r=M.parse(t.config);if(r.registries){for(let o of Object.keys(r.registries))if(o in P)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 L(e){let t={resolvedPaths:{cwd:process.cwd(),api:"",vendor:"",admin:""},aliases:{api:Kr,vendor:qr,admin:Zr},registries:{...P}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}var et=["**/node_modules/**","public","dist"];async function b(e){let[t,r,o,s,n,i]=await Promise.all([ut.pathExists(v__default.resolve(e,"src")),to(e),ge(e),ro(e),oo(e),so(e)]);return {isSrcDir:t,aliasPrefix:r,packageJson:o,medusaConfigFile:s?.file??null,medusaVersion:n,mercurVersion:i}}async function to(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=v__default.join(e,"package.json");return ut.readJSONSync(r,{throws:t})}async function ro(e){let t=await Qe.glob("medusa-config.*",{cwd:e,deep:3,ignore:et});if(!t.length)return null;let r=t[0];return {file:r,dir:v__default.resolve(e,v__default.dirname(r))}}async function oo(e){let r=ge(e,false)?.dependencies?.["@medusajs/framework"];if(r)return r;let o=await Qe.glob("**/package.json",{cwd:e,deep:3,ignore:et});for(let s of o){let i=ge(v__default.join(e,v__default.dirname(s)),false)?.dependencies?.["@medusajs/framework"];if(i)return i}return null}async function so(e){let r=ge(e,false)?.dependencies?.["@mercurjs/cli"];if(r)return r;let o=await Qe.glob("**/package.json",{cwd:e,deep:3,ignore:et});for(let s of o){let i=ge(v__default.join(e,v__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 Ft(e){let t={},r=v__default.resolve(e.cwd);if(!existsSync(r))return t[It]=true,{errors:t,config:null};let o=await E(r);if(!o)return t[C]=true,{errors:t,config:null};let s=await b(r);return {errors:t,config:o,projectInfo:s}}var De={headers:{}};function tt(e){De.headers={...De.headers,...e};}function Ot(e){return De.headers[e]||{}}function S(){De.headers={};}function se(e){let t={aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:P};return {...t,...e||{},aliases:{...t.aliases,...e?.aliases||{}},registries:{...e?.registries||{},...P}}}function de(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function he(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 ao=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function ne(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(ao);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var Nt=[".tsx",".ts"],$t=["lib/utils.ts"],po=[/^(react|react-dom)(\/.*)?$/,/^(node|jsr|npm):.*$/],uo=new Project({compilerOptions:{}});function go(e){if(po.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 rt(e,t,r,o=new Set){let s=v.resolve(t.resolvedPaths.cwd,e),n=v.relative(t.resolvedPaths.cwd,s);if($t.includes(n))return {dependencies:[],files:[]};let i=v.extname(e);if(!Nt.includes(i))return {dependencies:[],files:[]};if(o.has(n))return {dependencies:[],files:[]};o.add(n);try{if(!(await $.stat(s)).isFile())return {dependencies:[],files:[]}}catch{return {dependencies:[],files:[]}}let f=await $.readFile(s,"utf-8"),c=await ho(v.basename(s)),a=uo.createSourceFile(c,f,{scriptKind:ScriptKind.TSX}),m=await loadConfig(t.resolvedPaths.cwd);if(m.resultType==="failed")return {dependencies:[],files:[]};let p=[],g=new Set,h=Dt(e),y={path:n,type:h,target:"",content:""};p.push(y);let w=a.getImportDeclarations();for(let O of w){let D=O.getModuleSpecifierValue(),ke=D.startsWith(".");if(!(r.aliasPrefix&&D.startsWith(`${r.aliasPrefix}/`))&&!ke){let N=go(D);N&&g.add(N);continue}let ee=await oe(D,m);if(ke&&(ee=v.resolve(v.dirname(s),D)),!ee)continue;if(!v.extname(ee))for(let N of Nt){let xt=`${ee}${N}`;try{await $.access(xt),ee=xt;break}catch{continue}}let Ce=v.relative(t.resolvedPaths.cwd,ee);if(o.has(Ce)||$t.includes(Ce))continue;let zr=Dt(D),Br={path:Ce,type:zr,target:"",content:""};p.push(Br);let Pe=await rt(Ce,t,r,o);if(Pe.files)for(let N of Pe.files)o.has(N.path)||(o.add(N.path),p.push(N));Pe.dependencies&&Pe.dependencies.forEach(N=>g.add(N));}let k=Array.from(new Map(p.map(O=>[O.path,O])).values());return {dependencies:Array.from(g),files:k}}async function ho(e){let t=await $.mkdtemp(v.join(tmpdir(),"mercur-"));return v.join(t,e)}function Dt(e){return e.includes("/vendor")?"registry:vendor":e.includes("/admin")?"registry:admin":"registry:api"}function B(e){try{return new URL(e),!0}catch{return false}}function q(e){return e.endsWith(".json")&&!B(e)}function yo(e){let t=new Set;if(typeof e=="string")for(let r of he(e))t.add(r);else {for(let r of he(e.url))t.add(r);if(e.params)for(let r of Object.values(e.params))for(let o of he(r))t.add(o);if(e.headers)for(let r of Object.values(e.headers))for(let o of he(r))t.add(o);}return Array.from(t)}function At(e,t){let o=yo(t).filter(s=>!process.env[s]);if(o.length>0)throw new Oe(e,o)}var Ae="{name}",wo=`${Ae}.json`,Mt=/\${(\w+)}/g,Lt="?",Ro="&";function Eo(e){return e.includes(Ae)}function Ut(e){return Eo(e)?e:`${e.endsWith("/")?e:`${e}/`}${wo}`}function ye(e,t){let{registry:r,item:o}=ne(e);if(!r)return null;let n=(t?.registries||{})[r];if(!n)throw new J(r);return At(r,n),{url:xo(o,n),headers:vo(n)}}function xo(e,t,r){if(typeof t=="string"){let i=Ut(t).replace(Ae,e);return de(i)}let s=Ut(t.url).replace(Ae,e);return s=de(s),t.params?Io(s,t.params):s}function vo(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,o]of Object.entries(e.headers)){let s=de(o);bo(o,s)&&(t[r]=s);}return t}function Io(e,t){let r=new URLSearchParams;for(let[n,i]of Object.entries(t)){let f=de(i);f&&r.append(n,f);}let o=r.toString();if(!o)return e;let s=e.includes(Lt)?Ro:Lt;return `${e}${s}${o}`}function bo(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(Mt)){let s=e.replace(Mt,"").trim();return r!==s}return true}function zt(e){return B(e)||q(e)?e:`${ue}/${e}`}var Me=new Map;async function So(e){let t=e;t.startsWith("file://")&&(t=t.slice(7)),t.startsWith("~/")&&(t=v__default.join(homedir(),t.slice(2)));let r=v__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 H(e,o):new H(e,o)}}async function Z(e){return await Promise.all(e.map(async r=>{let o=zt(r);if(Me.has(o))return Me.get(o);if(q(o)){let n=So(o);return Me.set(o,n),n}let s=(async()=>{let n=Ot(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 re(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 Gt(e){try{let t=e;e.startsWith("~/")&&(t=v__default.join(homedir(),e.slice(2)));let r=v__default.resolve(t),o=await promises.readFile(r,"utf8"),s=JSON.parse(o);try{return T.parse(s)}catch(n){throw new _(e,n)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new H(e,t):t instanceof _?t:new H(e,t)}}T.extend({_source:z.string().optional()});function ot(e,t){let r={},o=[...e];if(!t?.registries)return tt({}),o;for(let s=0;s<o.length;s++){let n=ye(o[s],t);n&&(o[s]=n.url,Object.keys(n.headers).length>0&&(r[n.url]=n.headers));}return tt(r),o}async function Ue(e,t){return await Promise.all(e.map(async o=>{if(q(o))return Gt(o);if(B(o)){let[i]=await Z([o]);try{return T.parse(i)}catch(f){throw new _(o,f)}}if(o.startsWith("@")&&t?.registries){let i=ot([o],t),[f]=await Z(i);try{return T.parse(f)}catch(c){throw new _(o,c)}}let s=`${ue}/${o}.json`,[n]=await Z([s]);try{return T.parse(n)}catch(i){throw new _(o,i)}}))}async function st(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 g=m.registryDependencies;if(t?.registries)g=ot(m.registryDependencies,t);else {let y=m.registryDependencies.filter(w=>w.startsWith("@"));if(y.length>0){let{registry:w}=ne(y[0]);throw new J(w)}}let{blocks:h}=await Jt(g,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=_o(r,f),kt.parse({dependencies:Vt.all(r.map(a=>a.dependencies??[])),devDependencies:Vt.all(r.map(a=>a.devDependencies??[])),files:To(r.map(a=>a.files??[])),docs:r.map(a=>a.docs).filter(Boolean).join(`
15
- `)})}async function Jt(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}=ne(s);if(i&&!(i in t.registries))throw new J(i)}let[n]=await Ue([s],t);if(n&&(o.push({...n,_source:s}),n.registryDependencies)){let i=t?.registries?ot(n.registryDependencies,t):n.registryDependencies,f=await Jt(i,t,r);o.push(...f.blocks);}}return {blocks:o}}function W(e,t){let r=t||e.name,o=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${o}`}function Po(e){if(B(e)){let o=new URL(e).pathname,s=o.match(/\/([^/]+)\.json$/),n=s?s[1]:v__default.basename(o,".json");return {name:n,hash:W({name:n},e)}}if(q(e)){let r=e.match(/\/([^/]+)\.json$/),o=r?r[1]:v__default.basename(e,".json");return {name:o,hash:W({name:o},e)}}let{item:t}=ne(e);return {name:t,hash:W({name:t},e)}}function _o(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=W(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=W(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=W(a,m);if(a.registryDependencies)for(let g of a.registryDependencies){let h,y=i.get(g)||[];if(y.length===1)h=y[0];else if(y.length>1)h=y[0];else {let{name:w}=Po(g),k=i.get(w)||[];k.length>0&&(h=k[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 g=s.get(p)-1;s.set(p,g),g===0&&f.push(p);}}if(c.length!==e.length){let a=Array.from(r.keys()).filter(m=>!c.some(p=>W(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(g=>W(g,t.get(g))===m)||c.push(p);}return c}function To(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=>Re.red(e),warn:e=>Re.yellow(e),info:e=>Re.blue(e),success:e=>Re.green(e),dim:e=>Re.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 R(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 I&&(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 x(e,t){return Fo({text:e,isSilent:t?.silent??false})}var $o=["bun","yarn","pnpm","deno","npm"];function Kt(e){if(e)return $o.find(t=>e.startsWith(t))}function Do(){return Kt(process.env.npm_config_user_agent)}async function Ht(e){try{return await execa(e,["--version"]),!0}catch{return false}}async function ze(e){let t=Kt(await detect({programmatic:true,cwd:e}));if(t&&await Ht(t))return t;let r=Do();return r&&await Ht(r)?r:"npm"}async function qt(e,t,r,o={}){if(e=Array.from(new Set(e||[])),t=Array.from(new Set(t||[])),!e?.length&&!t?.length)return;o={silent:false,...o};let s=x("Installing dependencies.",{silent:o.silent})?.start(),n=await ze(r.resolvedPaths.cwd);s?.start(),await Ao(n,e,t,r.resolvedPaths.cwd),s?.succeed();}async function Ao(e,t,r,o){if(e==="npm")return Mo(t,r,o);if(e==="deno")return Lo(t,r,o);t?.length&&await execa(e,["add",...t],{cwd:o}),r?.length&&await execa(e,["add","-D",...r],{cwd:o});}async function Mo(e,t,r){e.length&&await execa("npm",["install",...e],{cwd:r}),t.length&&await execa("npm",["install","-D",...t],{cwd:r});}async function Lo(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 Zt(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"),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,`
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,g,h,y)=>{if(h.startsWith("."))return `${g}${h}${y}`;let w=h.split("/"),k=w[w.length-1];return `${g}@normalized/${k}${y}`}),c=f(s),a=f(n);return c===a}function Uo(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=Uo(e,t);if(e.type==="registry:api"){let i=e.path.replace(/^\/|\/$/g,"").split("/").slice(1).join("/");return v__default.join(o,i)}let s=zo(e.path,o);return v__default.join(o,s)}function zo(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 Vo=new Project({compilerOptions:{}});async function Yo(e){let t=await promises.mkdtemp(v__default.join(tmpdir(),"mercurjs-")),r=v__default.basename(e,v__default.extname(e));return v__default.join(t,`${r}.ts`)}function Jo(e){switch(v__default.extname(e).toLowerCase()){case ".tsx":case ".ts":return ScriptKind.TS;default:return ScriptKind.Unknown}}async function We(e){let t=v__default.extname(e.filename).toLowerCase();if(![".tsx",".ts"].includes(t))return e.raw;let r=Jo(e.filename),o=await Yo(e.filename),s=Vo.createSourceFile(o,e.raw,{scriptKind:r});for(let n of s.getImportStringLiterals()){let i=Ho(n.getLiteralValue(),e.config);n.setLiteralValue(i);}return s.getText()}function Ho(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 tr(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[],filesDeclined:[]};r={overwrite:false,silent:false,yes:false,...r};let o=x("Updating files.",{silent:r.silent})?.start(),s=await b(t.resolvedPaths.cwd),n=[],i=[],f=[],c=[];for(let p of e){let g=Be(p,t,{isSrcDir:s?.isSrcDir??false,path:r.path??""}),h=basename(p.path),y=v__default.dirname(g),w=existsSync(g);if(w&&statSync(g).isDirectory())throw new Error(`Cannot write to ${g}: path exists and is a directory. Please provide a file path instead.`);let k=await We({filename:p.path,raw:p.content,config:t});if(w&&!r.overwrite){let O=await promises.readFile(g,"utf-8");if(Zt(O,k)){f.push(v__default.relative(t.resolvedPaths.cwd,g));continue}if(!r.yes){o.stop();let D=diffLines(O,k);l.info(`
20
- File: ${u.info(h)}`),ts(D);let{overwrite:ke}=await ft({type:"confirm",name:"overwrite",message:`The file ${u.info(h)} already exists. Would you like to overwrite?`,initial:false});if(!ke){c.push(v__default.relative(t.resolvedPaths.cwd,g));continue}}}existsSync(y)||await promises.mkdir(y,{recursive:true}),await promises.writeFile(g,k,"utf-8"),w?i.push(v__default.relative(t.resolvedPaths.cwd,g)):n.push(v__default.relative(t.resolvedPaths.cwd,g));}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 Qo=3;function es(e,t=Qo){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 ts(e){let t=es(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}`}),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)}
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 rr(e,t,r){if(r={overwrite:false,silent:false,yes:false,...r},!e.length)return;let o=x("Checking registry.",{silent:r.silent})?.start(),s=await st(e,se(t));if(!s)return o?.fail(),R(new Error("Failed to fetch items from registry."));o?.succeed();let{filesCreated:n,filesUpdated:i}=await tr(s.files,t,{overwrite:r.overwrite,silent:r.silent,path:r.path,yes:r.yes});(n.length||i.length)&&await qt(s.dependencies,s.devDependencies,t,{silent:r.silent}),s.docs&&l.info(s.docs);}z.object({cwd:z.string(),yes:z.boolean(),defaults:z.boolean(),silent:z.boolean()});async function or(e){let t={},r=v__default.resolve(e.cwd);existsSync(r)||(t.MISSING_DIR=true);let o=await b(r);return {errors:t,projectInfo:o}}var nr=join(homedir(),".mercur"),it=join(nr,"config.json"),at={telemetry_enabled:true,telemetry_email:null,notice_shown:false},ct=class{get(t){return this.read()[t]}set(t,r){let o=this.read();o[t]=r,this.write(o);}read(){try{if(!existsSync(it))return {...at};let t=readFileSync(it,"utf-8"),r=JSON.parse(t);return {...at,...r}}catch{return {...at}}}write(t){try{mkdirSync(nr,{recursive:!0}),writeFileSync(it,JSON.stringify(t,null,2)+`
28
- `,{mode:384});}catch{}}},G=new ct;var ce=e=>Function("mm","return import(mm)")(e);function ls(){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 ar(){try{let e=await ce("os"),t=e.cpus();return {deploymentVendor:ls(),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 fs(),isDocker:await cr(),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 fs(){try{if(typeof process>"u"||process?.platform!=="linux")return !1;let e=await ce("fs");return (await ce("os")).release().toLowerCase().includes("microsoft")?!await ir():e.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!await ir():!1}catch{return false}}var ms=async()=>{try{return (await ce("fs")).statSync("/run/.containerenv"),!0}catch{return false}};async function cr(){return await ps()||await us()}async function ps(){try{return (await ce("fs")).statSync("/.dockerenv"),!0}catch{return false}}async function us(){try{return (await ce("fs")).readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return false}}async function ir(){return await ms()||await cr()}var lt=e=>createHash("sha256").update(e).digest("base64");var hs=process.env.MERCUR_TELEMETRY_PROXY_URL||"https://telemetry.mercurjs.com/api/v1/events";var lr=e=>{G.set("telemetry_enabled",e);},Ge="https://docs.mercurjs.com/telemetry",le=()=>{G.get("notice_shown")||(G.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
- `)));},ys=()=>G.get("telemetry_enabled")&&process.env.MERCUR_DISABLE_TELEMETRY!=="true",V=async(e,t)=>{try{if(!ys())return;let r=await b(t.cwd),{projectId:o}=Es(r.packageJson),s={nodeEnv:ws(),nodeVersion:process.version,mercurVersion:r.mercurVersion,medusaVersion:r.medusaVersion,isSrcDir:r.isSrcDir,aliasPrefix:r.aliasPrefix,config:await E(t.cwd),projectId:o,systemInfo:await ar(),packageManager:await ze(t.cwd),email:xs()};await fetch(hs,{body:JSON.stringify({...s,...e}),headers:{"Content-Type":"application/json"},method:"post"});}catch{}};function ws(){return process.env.NODE_ENV||"development"}var Rs=()=>{try{let e=execSync("git config --local --get remote.origin.url",{stdio:"pipe",timeout:1e3});return String(e).trim()}catch{return null}},Es=e=>{let t=Rs();if(t)return {projectId:lt(t)};let r=process.cwd();return {projectId:lt(r)}},xs=()=>G.get("telemetry_email")||void 0;var bs=z.object({cwd:z.string(),yes:z.boolean(),defaults:z.boolean(),silent:z.boolean()}),mr=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{le();let t=bs.parse({cwd:v__default.resolve(e.cwd),...e});await mt(t),l.log(`${u.success("Success!")} Project initialization completed.
30
- You may now add blocks.`),l.break(),await V({type:"init",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){l.break(),R(t);}finally{S();}});async function mt(e){await or(e);let t=await E(e.cwd),r=t?await ks(t,e):await Ss(e);if(!e.yes){let{proceed:n}=await ft({type:"confirm",name:"proceed",message:`Write configuration to ${u.info("blocks.json")}. Proceed?`,initial:true});n||process.exit(0);}let o=x("Writing blocks.json.").start(),s=v__default.resolve(e.cwd,"blocks.json");return r.registries=Object.fromEntries(Object.entries(r.registries||{}).filter(([n])=>!Object.keys(P).includes(n))),await promises.writeFile(s,`${JSON.stringify(r,null,2)}
31
- `,"utf8"),o.succeed(),await Xe(e.cwd,r)}async function Ss(e){if(e.defaults)return M.parse({$schema:_e,aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:P});l.info("");let t=await ft([{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 M.parse({$schema:_e,aliases:{api:t.api??"packages/api/src",vendor:t.vendor??"apps/vendor/src",admin:t.admin??"apps/admin/src"},registries:P})}async function ks(e,t){if(t.defaults)return M.parse({$schema:_e,aliases:{api:"packages/api/src",vendor:"apps/vendor/src",admin:"apps/admin/src"},registries:P});let r=await ft([{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 M.parse({$schema:e.$schema,aliases:{api:r.api??e.aliases.api,vendor:r.vendor??e.aliases.vendor,admin:r.admin??e.aliases.admin}})}var Ts=z.object({blocks:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),cwd:z.string(),silent:z.boolean()}),pr=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{le();let r=Ts.parse({blocks:e,cwd:v__default.resolve(t.cwd),...t}),o=await E(r.cwd);o||(o=L({resolvedPaths:{cwd:r.cwd}})),r.blocks?.length||(l.error("Please specify at least one item to add."),process.exit(1));let{errors:s}=await Ft(r);if(s[C]){let{proceed:n}=await ft({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 mt({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 rr(r.blocks,o,{overwrite:r.overwrite,silent:r.silent,yes:r.yes,path:r.cwd}),await V({type:"add",payload:{outcome:"success",blocks:r.blocks}},{cwd:r.cwd});}catch(r){l.break(),R(r);}finally{S();}});async function ur(e){let t={},r={cwd:e.cwd,registryFile:v__default.resolve(e.cwd,e.registryFile),outputDir:v__default.resolve(e.cwd,e.outputDir)};if(!ut.existsSync(r.registryFile))return t[A]=true,{errors:t,resolvePaths:null,config:null};if(!ut.existsSync(v__default.resolve(e.cwd,"blocks.json")))return t[C]=true,{errors:t,resolvePaths:null,config:null};await ut.mkdir(r.outputDir,{recursive:true});try{let o=await E(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 Fs=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string(),verbose:z.boolean().optional().default(false)}),gr=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 Os({cwd:v.resolve(t.cwd),registryFile:e,outputDir:t.output,verbose:t.verbose});});async function Os(e){try{le();let t=Fs.parse(e),[{errors:r,resolvePaths:o,config:s},n]=await Promise.all([ur(t),b(t.cwd)]);(r[C]||!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 V({type:"build",payload:{outcome:"missing_config"}},{cwd:t.cwd}),process.exit(1)),(r[A]||!o)&&(l.error(`We could not find a registry file at ${u.info(v.resolve(t.cwd,t.registryFile))}.`),l.break(),await V({type:"build",payload:{outcome:"missing_registry_file"}},{cwd:t.cwd}),process.exit(1));let i=await $.readFile(o.registryFile,"utf-8"),f=Y.safeParse(JSON.parse(i));f.success||(l.error(`Invalid registry file found at ${u.info(o.registryFile)}.`),l.break(),process.exit(1));let c=x("Building registry..."),a=await Ns(f.data,s,n);for(let m of a.items)m.files=m.files?.filter((p,g,h)=>g===h.findIndex(y=>y.path===p.path)),m.dependencies&&(m.dependencies=m.dependencies.filter((p,g,h)=>g===h.findIndex(y=>y===p)));for(let m of a.items){if(!m.files)continue;c.start(`Building ${m.name}...`),m.$schema=Pt;for(let g of m.files){let h=n.isSrcDir?"src":"",y=v.resolve(o.cwd,h,g.path);try{if(!(await $.stat(y)).isFile())continue;g.content=await $.readFile(y,"utf-8");}catch(w){console.error("Error reading file in registry build:",y,w);continue}}let p=T.safeParse(m);if(!p.success){l.error(`Invalid registry item found for ${u.info(m.name)}.`);continue}await $.writeFile(v.resolve(o.outputDir,`${p.data.name}.json`),JSON.stringify(p.data,null,2));}if(await $.copyFile(o.registryFile,v.resolve(o.outputDir,"registry.json")),c.succeed("Building registry."),t.verbose){x(`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 V({type:"build",payload:{outcome:"success"}},{cwd:t.cwd});}catch(t){l.break(),R(t);}}async function Ns(e,t,r){for(let o of e.items)if(o.files?.length)for(let s of o.files){let n=await rt(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",Q=/route\.(ts|js)$/;async function dt(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 $__default.readdir(a,{withFileTypes:!0});for(let g of p){if(s&&s(g.name))continue;let h=v__default.join(a,g.name);o&&o(h)||(g.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 $__default.stat(e).catch(()=>null)!==null}async function Je(e){await Ye(e)||await $__default.mkdir(e,{recursive:true});}var Ls="https://raw.githubusercontent.com/mercurjs/mercur/canary/packages/cli/routes-manifest.json",Us=5e3;function zs(e){let t=Ds.createHash("sha256").update(e).digest("hex").slice(0,16);return v__default.join(As.tmpdir(),`mercur-routes-manifest-${t}.json`)}async function He(){let e=process.env.MERCUR_ROUTES_MANIFEST_URL??Ls,t=zs(e);try{let r=new AbortController,o=setTimeout(()=>r.abort(),Us),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 $__default.writeFile(t,JSON.stringify(n),"utf-8").catch(()=>{}),n}catch{try{return JSON.parse(await $__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 me(e){return e.replace(/\\/g,"/")}function be(e){return e.split("/").reduce((r,o)=>{if(!o||Q.test(o))return r;if(o.startsWith("[")&&o.endsWith("]")){let s=o.slice(1,-1);return `${r}/:${s}`}return `${r}/${o}`},"")||"/"}async function ht(e){return await Ye(e)?(await dt(e,{pathnameFilter:o=>Q.test(o),ignorePartFilter:o=>o.startsWith("_")||o==="node_modules"})).map(o=>{let s=v__default.relative(e,o);return {filePath:me(s),route:be(me(s))}}):[]}function yt(e){return e.replace(/[-_]+(.)?/g,(t,r)=>r?r.toUpperCase():"").replace(/^[A-Z]/,t=>t.toLowerCase())}function Ws(e){return `../src/api/${e.replace(/\.ts$/,"")}`}function Gs(e){return e.startsWith(":")?`$${yt(e.slice(1))}`:yt(e)}function hr(){return {children:new Map}}function Vs(e){let t=hr();for(let[r,o]of e){let s=r.split("/").filter(Boolean),n=t;for(let i of s){let f=Gs(i);n.children.has(f)||n.children.set(f,hr()),n=n.children.get(f);}n.importType=o;}return t}function wr(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=wr(n,t+" ");o.push(`${t} ${s}: ${i}`);}r.push(`{
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)+`
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(`{
33
33
  ${o.join(`;
34
34
  `)};
35
- ${t}}`);}return r.length===0?"{}":r.length===1?r[0]:r.join(" & ")}function Rr(e,t,r){let o=new Map;for(let[f,c]of Object.entries(t))o.set(f,c);let s=r??Ws;for(let f of e){let c=s(f.filePath);o.set(f.route,`typeof import("${c}")`);}let n=Vs(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,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
36
36
  // Do not edit this file manually
37
37
 
38
- export type Routes = ${wr(n,"")};
39
- `}async function Er(e){let t=v__default.join(e,Ve,"routes.d.ts"),r=v__default.join(e,"src","api"),o=v__default.dirname(t);await Je(o);let s=await He(),n=await ht(r),i=Rr(n,s);await $__default.writeFile(t,i,"utf-8");}async function xr(e,t){let r=v__default.join(e,Ve,"index.d.ts"),o=v__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:be(me(m))}}),n=c=>`../src/${c.replace(/\.ts$/,"")}`,i=await He(),f=Rr(s,i,n);await $__default.writeFile(r,f,"utf-8");}async function br(e){let t={},r={cwd:e.cwd,registryFile:v__default.resolve(e.cwd,e.registryFile)};if(!ut.existsSync(r.registryFile))return t[A]=true,{errors:t,resolvePaths:null,config:null};if(!ut.existsSync(v__default.resolve(e.cwd,"blocks.json")))return t[C]=true,{errors:t,resolvePaths:null,config:null};try{let o=await E(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 Js=z.object({cwd:z.string(),registryFile:z.string()}),kr=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 Hs({cwd:v.resolve(t.cwd),registryFile:e});});async function Hs(e){try{let t=Js.parse(e),{errors:r,resolvePaths:o}=await br(t);r[C]&&(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[A]||!o)&&(l.error(`Could not find a registry file at ${u.info(v.resolve(t.cwd,t.registryFile))}.`),l.break(),process.exit(1));let s=await $.readFile(o.registryFile,"utf-8"),n=Y.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"&&Q.test(a.path)&&i.push(a.path);if(i.length===0){l.warn("No API route files found in registry.");return}let f=x("Generating registry route types...");await xr(t.cwd,i),f.succeed("Registry route types generated successfully."),l.break();}catch(t){l.break(),R(t);}}var qs=z.object({cwd:z.string()}),_r=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 Zs({cwd:v.resolve(e.cwd)});});async function Zs(e){try{let t=qs.parse(e),r=x("Generating route types...");await Er(t.cwd),r.succeed("Route types generated successfully."),l.break();}catch(t){l.break(),R(t);}}async function Tr(e,t){let{config:r}=t||{};if(B(e)){let[i]=await Z([e]);try{return Y.parse(i)}catch(f){throw new _(e,f)}}if(!e.startsWith("@"))throw new Ne(e);let o=e;o.endsWith("/registry")||(o=`${o}/registry`);let s=ye(o,se(r));if(!s?.url)throw new re(o);let[n]=await Z([s.url]);try{return Y.parse(n)}catch(i){throw new _(o,i)}}async function Ke(e,t){let{config:r}=t||{};return S(),Ue(e,se(r))}var on=z.object({blocks:z.array(z.string()).optional(),cwd:z.string()}),jr=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=on.parse({blocks:e,cwd:v__default.resolve(t.cwd),type:t.type}),o=await E(r.cwd);o||(o=L({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 b(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}),g=diffLines(m,p);g.length>1&&(l.info(`
41
- File: ${u.info(c.path)}`),sn(g));}}catch(r){R(r);}finally{S();}});function sn(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 Fr=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 b(e.cwd)),l.break(),l.info("> blocks.json"),console.log(await E(e.cwd));}catch(t){R(t);}});var ln=z.object({cwd:z.string(),query:z.string().optional(),registry:z.string().optional()}),Or=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=ln.parse({cwd:v__default.resolve(e.cwd),query:e.query,type:e.type,registry:e.registry}),r=await E(t.cwd);r||(r=L({resolvedPaths:{cwd:t.cwd}}));let s=(await Tr(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){R(t);}finally{S();}});var Nr=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=G.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;lr(t),t?l.success(`Telemetry enabled. Learn more: ${Ge}`):l.success("Telemetry disabled. No data will be collected.");}catch(t){R(t);}});var un=z.object({cwd:z.string()}),Dr=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=un.parse({cwd:v__default.resolve(t.cwd),type:t.type}),o=await E(r.cwd);o||(o=L({resolvedPaths:{cwd:r.cwd}}));let s=await Ke(e,{config:o});console.log(JSON.stringify(s,null,2)),process.exit(0);}catch(r){R(r);}finally{S();}});async function Mr(e){let t=v__default.resolve(e.root,"src/vendor");if(!Et.existsSync(t))return true;let r=await import('vite'),o=(await import('@vitejs/plugin-react')).default,s=JSON.parse(readFileSync(v__default.resolve(e.root,"package.json"),"utf-8")),n=new Set([...Object.keys(s.dependencies||{}),...Object.keys(s.peerDependencies||{}),...Object.keys(s.devDependencies||{}),"react","react/jsx-runtime","react-router-dom","react-i18next","@medusajs/js-sdk","@medusajs/admin-sdk","@mercurjs/client","@tanstack/react-query"]),i=v__default.resolve(e.outDir,"src/vendor"),f=v__default.resolve(e.root,"src/vendor/__vendor-extensions__.js");try{let c=generatePluginEntryModule(t);await writeFile(f,c,"utf-8");let a=process.env.NODE_ENV;process.env.NODE_ENV="production",await r.build({build:{lib:{entry:f,formats:["es","cjs"],fileName:"index"},emptyOutDir:!1,minify:!1,outDir:i,rollupOptions:{external:(g,h)=>{let y=g.split("/"),w=y[0]?.startsWith("@")?`${y[0]}/${y[1]}`:y[0],k=[...builtinModules,...builtinModules.map(O=>`node:${O}`)];return h?!!(w&&n.has(w)):!!(w&&n.has(w)||w&&k.includes(w))},output:{preserveModules:!1,interop:"auto",chunkFileNames:()=>"_chunks/[name]-[hash]"}}},plugins:[o()],logLevel:"silent",clearScreen:!1}),process.env.NODE_ENV=a;let m=v__default.join(i,"index.es.js"),p=v__default.join(i,"index.mjs");return Et.existsSync(m)&&Et.renameSync(m,p),!0}catch(c){return console.error(c),false}finally{try{await rm(f,{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=v__default.resolve(e.cwd),r=x("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=await import('@medusajs/admin-bundler'),f=v__default.resolve(t,".medusa/server");(await Promise.all([s.buildPluginBackend(n),s.buildPluginAdminExtensions(i),Mr({root:t,outDir:f})])).every(a=>a===!0)?r.succeed("Plugin built successfully."):(r.fail("Plugin build failed."),process.exit(1));}catch(t){l.break(),R(t);}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function En(){let e=new Command().name("@mercurjs/cli").description("Add blocks from registries to your project").version(vt.version,"-v, --version","display the version number");e.addCommand(pr).addCommand(gr).addCommand(kr).addCommand(_r).addCommand(jr).addCommand(Fr).addCommand(mr).addCommand(Or).addCommand(Nr).addCommand(Dr).addCommand(Ur),e.parse();}En();export{Vr as registryConfigItemSchema,Ct as registryConfigSchema,Sn as registryIndexSchema,bt as registryItemFileSchema,T as registryItemSchema,Gr as registryItemTypeSchema,kt as registryResolvedItemsTreeSchema,Y as registrySchema};//# sourceMappingURL=index.js.map
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
42
42
  //# sourceMappingURL=index.js.map