@visulima/vis 4.0.2 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +2 -2
  3. package/dist/bin.js +1 -1
  4. package/dist/binx.js +1 -1
  5. package/dist/packem_chunks/catalog.js +1 -1
  6. package/dist/packem_chunks/cli-exec.js +1 -1
  7. package/dist/packem_chunks/cli-main.js +155 -155
  8. package/dist/packem_chunks/git.js +4 -3
  9. package/dist/packem_chunks/handler2.js +1 -1
  10. package/dist/packem_chunks/handler28.js +1 -1
  11. package/dist/packem_chunks/handler3.js +1 -1
  12. package/dist/packem_chunks/handler39.js +6 -6
  13. package/dist/packem_chunks/handler40.js +1 -75
  14. package/dist/packem_chunks/handler56.js +6 -6
  15. package/dist/packem_chunks/handler59.js +73 -9
  16. package/dist/packem_chunks/handler6.js +1 -1
  17. package/dist/packem_chunks/handler60.js +11 -3
  18. package/dist/packem_chunks/handler61.js +3 -22
  19. package/dist/packem_chunks/handler62.js +21 -60
  20. package/dist/packem_chunks/handler63.js +61 -3
  21. package/dist/packem_chunks/handler64.js +3 -6
  22. package/dist/packem_chunks/handler65.js +6 -9
  23. package/dist/packem_chunks/handler72.js +1 -1
  24. package/dist/packem_chunks/handler78.js +1 -1
  25. package/dist/packem_chunks/help-command.js +2 -2
  26. package/dist/packem_chunks/resolveFormatter.js +7 -5
  27. package/dist/packem_chunks/root-handler.js +1 -0
  28. package/dist/packem_chunks/version-resolver.js +3 -2
  29. package/dist/packem_shared/DEFAULT_BREAKING_SECTION-DUAcKVLD.js +1 -0
  30. package/dist/packem_shared/DEFAULT_CONVENTIONAL_HEADING-D7oNGUcP.js +1 -0
  31. package/dist/packem_shared/{affected-selection-BdFnUyQZ.js → affected-selection-D3rosWKF.js} +1 -1
  32. package/dist/packem_shared/{api.d-BPftyU9r.d.ts → api.d-C10vHKJZ.d.ts} +1 -1
  33. package/dist/packem_shared/{bin-BieNPL6n.js → bin-Bc5j8Cdm.js} +1 -1
  34. package/dist/packem_shared/buildCompareUrl-BLaukjgu.js +1 -0
  35. package/dist/packem_shared/conventional-CGiOOEq1.js +4 -0
  36. package/dist/packem_shared/hasBulletMarker-BX2KwzI5.js +1 -0
  37. package/dist/packem_shared/{index-BPeT7L7t.js → index-B0ahNAKR.js} +1 -1
  38. package/dist/packem_shared/{package-version-DqNoc-rP.js → package-version-BhrkMRQ2.js} +1 -1
  39. package/dist/packem_shared/{project-name-filter-B0y95mKx.js → project-name-filter-jDQpaOkI.js} +1 -1
  40. package/dist/packem_shared/release-heading-DRpkhETz.js +1 -0
  41. package/dist/packem_shared/run-D-uVGHQ4.js +10 -0
  42. package/dist/packem_shared/{vis-user-error-4RgO8nMw.js → vis-user-error-CEc_asoq.js} +1 -1
  43. package/dist/release/core/changelog/index.d.ts +274 -31
  44. package/dist/release/core/changelog/index.js +1 -1
  45. package/dist/release/plugin-sdk.d.ts +2 -2
  46. package/dist/release/types.d.ts +44 -2
  47. package/index.js +52 -52
  48. package/package.json +11 -11
  49. package/schemas/vis-config.schema.json +19 -1
  50. package/schemas/vis-release-config.schema.json +19 -1
@@ -1,4 +1,4 @@
1
- import{createRequire as Dt}from"node:module";import{b as fe,u as Bt,c as F,h as Wt,i as Oe,d as zt,a as Ft,l as Gt,e as Me}from"./package-version-DqNoc-rP.js";let Tt;const Vt=t=>(Tt??=Dt(import.meta.url))(t),se=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,jt=t=>{if(typeof se<"u"&&se.versions&&se.versions.node){const[e,n]=se.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return se.getBuiltinModule(t)}return Vt(t)},{createRequire:Rt}=jt("node:module"),qt=16,we=32,Ht=64,R=128,he="positionals";let oe=class extends Error{loc;title;hint;type="VisulimaError";constructor({cause:e,hint:n,location:o,message:i,name:s,stack:l,title:r}){super(i,{cause:e}),this.title=r,this.name=s,this.stack=l??this.stack,this.loc=o,this.hint=n}setLocation(e){this.loc=e}setName(e){this.name=e}setMessage(e){this.message=e}setHint(e){this.hint=e}},b=class extends oe{code;context;constructor(e,n,o){super({message:e,name:"CerebroError"}),this.code=n,this.context=o}},Jt=class extends b{argument;choices;value;constructor(e,n,o){super(`Invalid value "${n}" for argument "${e}". Allowed values: ${o.join(", ")}`,"INVALID_CHOICE",{argument:e,choices:o,value:n}),this.name="InvalidArgumentChoiceError",this.argument=e,this.value=n,this.choices=o,this.hint=`Pass one of: ${o.join(", ")}`}},Kt=class extends b{commandName;missingArguments;constructor(e,n){super(`Command "${e}" is missing required arguments: ${n.join(", ")}`,"MISSING_ARGUMENT",{commandName:e,missingArguments:n}),this.name="MissingArgumentError",this.commandName=e,this.missingArguments=n,this.hint=`Provide the following positional arguments: ${n.join(", ")}`}},Zt=class extends b{commandName;surplusArguments;constructor(e,n,o){super(`Command "${e}" accepts ${String(o)} positional argument${o===1?"":"s"}, but got ${String(n.length)} extra: ${n.join(", ")}`,"SURPLUS_ARGUMENT",{commandName:e,surplusArguments:[...n]}),this.name="SurplusArgumentError",this.commandName=e,this.surplusArguments=n,this.hint=`Remove the extra argument${n.length===1?"":"s"}, or declare a trailing "multiple: true" argument to collect them.`}};const at=String.raw,Ue=at`\p{Emoji}(?:\p{EMod}|[\u{E0020}-\u{E007E}]+\u{E007F}|\uFE0F?\u20E3?)`,Yt=()=>new RegExp(at`\p{RI}{2}|(?![#*\d](?!\uFE0F?\u20E3))${Ue}(?:\u200D${Ue})*`,"gu");Object.freeze(new Map([[0,0],[1,22],[2,22],[3,23],[4,24],[7,27],[8,28],[9,29],[30,39],[31,39],[32,39],[33,39],[34,39],[35,39],[36,39],[37,39],[40,49],[41,49],[42,49],[43,49],[44,49],[45,49],[46,49],[47,49],[90,39]]));const $i=/[\u001B\u009B](?:[[()#;?]{0,10}(?:\d{1,4}(?:;\d{0,4})*)?[0-9A-ORZcf-nqry=><]|\]8;;[^\u0007\u001B]{0,100}(?:\u0007|\u001B\\))/g,Ni=/[\u0000-\u0008\n-\u001F\u007F-\u009F]{1,1000}/y,G=Yt(),Qt=/[-_./\s]+/g,pe=/(\u001B\[[0-9;]*[a-z])/i,Pe=new RegExp("\\p{Script=Arabic}","u"),Xt=new RegExp("\\p{Script=Bengali}","u"),ee=new RegExp("\\p{Script=Cyrillic}","u"),en=new RegExp("\\p{Script=Devanagari}","u"),tn=new RegExp("\\p{Script=Ethiopic}","u"),ve=new RegExp("\\p{Script=Greek}","u"),De=new RegExp("\\p{Script=Greek}+|\\p{Script=Latin}+|[^\\p{Script=Greek}\\p{Script=Latin}]+","gu"),nn=new RegExp("\\p{Script=Gujarati}","u"),on=new RegExp("\\p{Script=Gurmukhi}","u"),Te=new RegExp("\\p{Script=Hangul}","u"),Ve=new RegExp("\\p{Script=Hebrew}","u"),sn=new RegExp("\\p{Script=Hiragana}","u"),je=new RegExp("\\p{Script=Han}","u"),rn=new RegExp("\\p{Script=Kannada}","u"),an=new RegExp("\\p{Script=Katakana}","u"),cn=new RegExp("\\p{Script=Khmer}","u"),ln=new RegExp("\\p{Script=Lao}","u"),L=new RegExp("\\p{Script=Latin}","u"),un=new RegExp("\\p{Script=Malayalam}","u"),hn=new RegExp("\\p{Script=Myanmar}","u"),pn=new RegExp("\\p{Script=Oriya}","u"),dn=new RegExp("\\p{Script=Sinhala}","u"),fn=new RegExp("\\p{Script=Tamil}","u"),mn=new RegExp("\\p{Script=Telugu}","u"),gn=new RegExp("\\p{Script=Thai}","u"),wn=new RegExp("\\p{Script=Tibetan}","u"),Re=/[\u02BB\u02BC\u0027]/u,vn=t=>t.replace(G,""),V={COMMAND_NOT_FOUND:"COMMAND_NOT_FOUND",COMMAND_VALIDATION_ERROR:"COMMAND_VALIDATION_ERROR",CONFLICTING_OPTIONS:"CONFLICTING_OPTIONS",INVALID_ARGUMENT:"INVALID_ARGUMENT",INVALID_CHOICE:"INVALID_CHOICE",INVALID_INPUT:"INVALID_INPUT",MISSING_ARGUMENT:"MISSING_ARGUMENT",SURPLUS_ARGUMENT:"SURPLUS_ARGUMENT",UNKNOWN_OPTION:"UNKNOWN_OPTION"},yn=new Set([V.COMMAND_NOT_FOUND,V.COMMAND_VALIDATION_ERROR,V.CONFLICTING_OPTIONS,V.INVALID_ARGUMENT,V.INVALID_CHOICE,V.INVALID_INPUT,V.MISSING_ARGUMENT,V.SURPLUS_ARGUMENT,V.UNKNOWN_OPTION]),$n=t=>{const e=t?.code;return typeof e=="string"&&yn.has(e)},_e=t=>{if(!$n(t))return;const{hint:e,message:n}=t,o=(Array.isArray(e)?e:[e]).filter(i=>typeof i=="string"&&i.length>0);return o.length>0?[n,...o].join(`
1
+ import{createRequire as Dt}from"node:module";import{b as fe,u as Bt,c as F,h as Wt,i as Oe,d as zt,a as Ft,l as Gt,e as Me}from"./package-version-BhrkMRQ2.js";let Tt;const Vt=t=>(Tt??=Dt(import.meta.url))(t),se=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,jt=t=>{if(typeof se<"u"&&se.versions&&se.versions.node){const[e,n]=se.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return se.getBuiltinModule(t)}return Vt(t)},{createRequire:Rt}=jt("node:module"),qt=16,we=32,Ht=64,R=128,he="positionals";let oe=class extends Error{loc;title;hint;type="VisulimaError";constructor({cause:e,hint:n,location:o,message:i,name:s,stack:l,title:r}){super(i,{cause:e}),this.title=r,this.name=s,this.stack=l??this.stack,this.loc=o,this.hint=n}setLocation(e){this.loc=e}setName(e){this.name=e}setMessage(e){this.message=e}setHint(e){this.hint=e}},b=class extends oe{code;context;constructor(e,n,o){super({message:e,name:"CerebroError"}),this.code=n,this.context=o}},Jt=class extends b{argument;choices;value;constructor(e,n,o){super(`Invalid value "${n}" for argument "${e}". Allowed values: ${o.join(", ")}`,"INVALID_CHOICE",{argument:e,choices:o,value:n}),this.name="InvalidArgumentChoiceError",this.argument=e,this.value=n,this.choices=o,this.hint=`Pass one of: ${o.join(", ")}`}},Kt=class extends b{commandName;missingArguments;constructor(e,n){super(`Command "${e}" is missing required arguments: ${n.join(", ")}`,"MISSING_ARGUMENT",{commandName:e,missingArguments:n}),this.name="MissingArgumentError",this.commandName=e,this.missingArguments=n,this.hint=`Provide the following positional arguments: ${n.join(", ")}`}},Zt=class extends b{commandName;surplusArguments;constructor(e,n,o){super(`Command "${e}" accepts ${String(o)} positional argument${o===1?"":"s"}, but got ${String(n.length)} extra: ${n.join(", ")}`,"SURPLUS_ARGUMENT",{commandName:e,surplusArguments:[...n]}),this.name="SurplusArgumentError",this.commandName=e,this.surplusArguments=n,this.hint=`Remove the extra argument${n.length===1?"":"s"}, or declare a trailing "multiple: true" argument to collect them.`}};const at=String.raw,Ue=at`\p{Emoji}(?:\p{EMod}|[\u{E0020}-\u{E007E}]+\u{E007F}|\uFE0F?\u20E3?)`,Yt=()=>new RegExp(at`\p{RI}{2}|(?![#*\d](?!\uFE0F?\u20E3))${Ue}(?:\u200D${Ue})*`,"gu");Object.freeze(new Map([[0,0],[1,22],[2,22],[3,23],[4,24],[7,27],[8,28],[9,29],[30,39],[31,39],[32,39],[33,39],[34,39],[35,39],[36,39],[37,39],[40,49],[41,49],[42,49],[43,49],[44,49],[45,49],[46,49],[47,49],[90,39]]));const $i=/[\u001B\u009B](?:[[()#;?]{0,10}(?:\d{1,4}(?:;\d{0,4})*)?[0-9A-ORZcf-nqry=><]|\]8;;[^\u0007\u001B]{0,100}(?:\u0007|\u001B\\))/g,Ni=/[\u0000-\u0008\n-\u001F\u007F-\u009F]{1,1000}/y,G=Yt(),Qt=/[-_./\s]+/g,pe=/(\u001B\[[0-9;]*[a-z])/i,Pe=new RegExp("\\p{Script=Arabic}","u"),Xt=new RegExp("\\p{Script=Bengali}","u"),ee=new RegExp("\\p{Script=Cyrillic}","u"),en=new RegExp("\\p{Script=Devanagari}","u"),tn=new RegExp("\\p{Script=Ethiopic}","u"),ve=new RegExp("\\p{Script=Greek}","u"),De=new RegExp("\\p{Script=Greek}+|\\p{Script=Latin}+|[^\\p{Script=Greek}\\p{Script=Latin}]+","gu"),nn=new RegExp("\\p{Script=Gujarati}","u"),on=new RegExp("\\p{Script=Gurmukhi}","u"),Te=new RegExp("\\p{Script=Hangul}","u"),Ve=new RegExp("\\p{Script=Hebrew}","u"),sn=new RegExp("\\p{Script=Hiragana}","u"),je=new RegExp("\\p{Script=Han}","u"),rn=new RegExp("\\p{Script=Kannada}","u"),an=new RegExp("\\p{Script=Katakana}","u"),cn=new RegExp("\\p{Script=Khmer}","u"),ln=new RegExp("\\p{Script=Lao}","u"),L=new RegExp("\\p{Script=Latin}","u"),un=new RegExp("\\p{Script=Malayalam}","u"),hn=new RegExp("\\p{Script=Myanmar}","u"),pn=new RegExp("\\p{Script=Oriya}","u"),dn=new RegExp("\\p{Script=Sinhala}","u"),fn=new RegExp("\\p{Script=Tamil}","u"),mn=new RegExp("\\p{Script=Telugu}","u"),gn=new RegExp("\\p{Script=Thai}","u"),wn=new RegExp("\\p{Script=Tibetan}","u"),Re=/[\u02BB\u02BC\u0027]/u,vn=t=>t.replace(G,""),V={COMMAND_NOT_FOUND:"COMMAND_NOT_FOUND",COMMAND_VALIDATION_ERROR:"COMMAND_VALIDATION_ERROR",CONFLICTING_OPTIONS:"CONFLICTING_OPTIONS",INVALID_ARGUMENT:"INVALID_ARGUMENT",INVALID_CHOICE:"INVALID_CHOICE",INVALID_INPUT:"INVALID_INPUT",MISSING_ARGUMENT:"MISSING_ARGUMENT",SURPLUS_ARGUMENT:"SURPLUS_ARGUMENT",UNKNOWN_OPTION:"UNKNOWN_OPTION"},yn=new Set([V.COMMAND_NOT_FOUND,V.COMMAND_VALIDATION_ERROR,V.CONFLICTING_OPTIONS,V.INVALID_ARGUMENT,V.INVALID_CHOICE,V.INVALID_INPUT,V.MISSING_ARGUMENT,V.SURPLUS_ARGUMENT,V.UNKNOWN_OPTION]),$n=t=>{const e=t?.code;return typeof e=="string"&&yn.has(e)},_e=t=>{if(!$n(t))return;const{hint:e,message:n}=t,o=(Array.isArray(e)?e:[e]).filter(i=>typeof i=="string"&&i.length>0);return o.length>0?[n,...o].join(`
2
2
  `):n},B=new Uint32Array(65536),Nn=(t,e)=>{const n=t.length,o=e.length,i=1<<n-1;let s=-1,l=0,r=n,u=n;for(;u--;)B[t.charCodeAt(u)]|=1<<u;for(u=0;u<o;u++){let a=B[e.charCodeAt(u)];const c=a|l;a|=(a&s)+s^s,l|=~(a|s),s&=a,l&i&&r++,s&i&&r--,l=l<<1|1,s=s<<1|~(c|l),l&=c}for(u=n;u--;)B[t.charCodeAt(u)]=0;return r},An=(t,e)=>{const n=e.length,o=t.length,i=[],s=[],l=Math.ceil(n/32),r=Math.ceil(o/32);for(let p=0;p<l;p++)s[p]=-1,i[p]=0;let u=0;for(;u<r-1;u++){let p=0,w=-1;const $=u*32,m=Math.min(32,o)+$;for(let y=$;y<m;y++)B[t.charCodeAt(y)]|=1<<y;for(let y=0;y<n;y++){const A=B[e.charCodeAt(y)],O=s[y/32|0]>>>y&1,C=i[y/32|0]>>>y&1,D=A|p,E=((A|C)&w)+w^w|A|C;let g=p|~(E|w),v=w&E;g>>>31^O&&(s[y/32|0]^=1<<y),v>>>31^C&&(i[y/32|0]^=1<<y),g=g<<1|O,v=v<<1|C,w=v|~(D|g),p=g&D}for(let y=$;y<m;y++)B[t.charCodeAt(y)]=0}let a=0,c=-1;const d=u*32,h=Math.min(32,o-d)+d;for(let p=d;p<h;p++)B[t.charCodeAt(p)]|=1<<p;let f=o;for(let p=0;p<n;p++){const w=B[e.charCodeAt(p)],$=s[p/32|0]>>>p&1,m=i[p/32|0]>>>p&1,y=w|a,A=((w|m)&c)+c^c|w|m;let O=a|~(A|c),C=c&A;f+=O>>>o-1&1,f-=C>>>o-1&1,O>>>31^$&&(s[p/32|0]^=1<<p),C>>>31^m&&(i[p/32|0]^=1<<p),O=O<<1|$,C=C<<1|m,c=C|~(y|O),a=O&y}for(let p=d;p<h;p++)B[t.charCodeAt(p)]=0;return f},xn=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return e.length===0?t.length:t.length<=32?Nn(t,e):An(t,e)};let bn;const Cn=t=>(bn??=Rt(import.meta.url))(t),ie=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,On=t=>{if(typeof ie<"u"&&ie.versions&&ie.versions.node){const[e,n]=ie.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return ie.getBuiltinModule(t)}return Cn(t)},{writeFile:_n,stat:In,rm:En,readFile:Be,readdir:kn,mkdir:Sn,access:Ln}=On("node:fs/promises"),ce=[{alias:"v",description:"Turn on verbose output",group:"global",name:"verbose",type:Boolean},{description:"Turn on debugging output",group:"global",name:"debug",type:Boolean},{alias:"h",description:"Print out helpful usage information",group:"global",name:"help",type:Boolean},{alias:"q",description:"Silence output",group:"global",name:"quiet",type:Boolean},{alias:"V",description:"Print version info",group:"global",name:"version",type:Boolean},{description:"Turn off colored output",group:"global",name:"no-color",type:Boolean},{description:"Force colored output",group:"global",name:"color",type:Boolean}];let H=class extends b{commandName;constructor(e,n=[]){const o=`Command "${e}" not found${n.length>0?`. Did you mean: ${n.join(", ")}?`:""}`;super(o,"COMMAND_NOT_FOUND",{commandName:e,suggestions:n}),this.name="CommandNotFoundError",this.commandName=e,n.length>0&&(this.hint=`Try one of these commands: ${n.join(", ")}`)}};class ct extends b{option1;option2;constructor(e,n){super(`Options "${e}" and "${n}" cannot be used together`,"CONFLICTING_OPTIONS",{option1:e,option2:n}),this.name="ConflictingOptionsError",this.option1=e,this.option2=n,this.hint=`Remove either --${e} or --${n}`}}class Mn extends b{unknownOptions;constructor(e,n){const o=e.join(", "),i=`Found unknown ${e.length===1?"option":"options"}: ${o}`;super(i,"UNKNOWN_OPTION",{suggestions:n,unknownOptions:e}),this.name="UnknownOptionError",this.unknownOptions=e,n&&n.length>0&&(this.hint=`Did you mean: ${n.join(", ")}?`)}}class Un extends b{pluginName;constructor(e,n,o){super(`Plugin "${e}" error: ${n}`,"PLUGIN_ERROR",{originalError:o,pluginName:e}),this.name="PluginError",this.pluginName=e,o&&(this.cause=o)}}class Pn{logger;plugins=new Map;initialized=!1;cachedDependencyOrder=void 0;constructor(e){this.logger=e}hasPlugins(){return this.plugins.size>0}register(e){if(this.initialized)throw new Error(`Cannot register plugin "${e.name}" after initialization`);if(this.plugins.has(e.name))throw new Error(`Plugin "${e.name}" is already registered`);fe().CEREBRO_OUTPUT_LEVEL===String(R)&&this.logger.debug(`registering plugin: ${e.name}`),this.plugins.set(e.name,e),this.cachedDependencyOrder=void 0}async init(e){if(this.initialized)throw new Error("PluginManager already initialized");if(this.plugins.size===0){this.logger.debug("no plugins registered, skipping initialization"),this.initialized=!0;return}this.validateDependencies();const n=this.getDependencyOrder();this.logger.debug(`initializing ${String(n.length)} plugin(s)...`);for(const o of n)if(typeof o.init=="function"){this.logger.debug(`initializing plugin: ${o.name}`);try{await o.init(e)}catch(i){const s=new Un(o.name,`Failed to initialize: ${i instanceof Error?i.message:String(i)}`,i instanceof Error?i:void 0);throw this.logger.error(s.message),s}}this.initialized=!0}async executeLifecycle(e,n,o){if(!this.initialized)throw new Error("PluginManager not initialized");if(this.plugins.size===0)return;const i=this.getDependencyOrder();for(const s of i){const l=s[e];if(typeof l=="function"){this.logger.debug(`executing ${e} hook for plugin: ${s.name}`);try{await(e==="afterCommand"?l(n,o):l(n))}catch(r){throw this.logger.error(`Error in ${e} hook for plugin "${s.name}":`,r),r}}}}async executeErrorHandlers(e,n){if(!this.initialized||this.plugins.size===0)return;const o=this.getDependencyOrder();for(const i of o)if(typeof i.onError=="function"){this.logger.debug(`executing error handler for plugin: ${i.name}`);try{await i.onError(e,n)}catch(s){this.logger.error(`Error in error handler for plugin "${i.name}":`,s)}}}getDependencyOrder(){if(this.cachedDependencyOrder!==void 0)return this.cachedDependencyOrder;const e=[],n=new Set,o=new Set,i=s=>{if(n.has(s))return;if(o.has(s))throw new Error(`Circular dependency detected involving plugin "${s}"`);const l=this.plugins.get(s);if(!l)throw new Error(`Plugin "${s}" not found`);if(o.add(s),l.dependencies)for(const r of l.dependencies)i(r);o.delete(s),n.add(s),e.push(l)};for(const s of this.plugins.keys())i(s);return this.cachedDependencyOrder=e,e}validateDependencies(){for(const e of this.plugins.values())if(e.dependencies){for(const n of e.dependencies)if(!this.plugins.has(n))throw new Error(`Plugin "${e.name}" depends on "${n}" which is not registered`)}}}const re=t=>t.type?.name==="Boolean",Dn=t=>{let e=t.type?t.type.name.toLowerCase():"string";const n=t.multiple??t.lazyMultiple?"[]":"";return e&&(e=e==="boolean"?"":`{underline ${e}${n}}`),e},We=t=>(re(t)||(t.typeLabel=t.typeLabel??Dn(t),t.defaultOption&&(t.typeLabel=`${t.typeLabel} (D)`),t.required&&(t.typeLabel=`${t.typeLabel} (R)`)),t),Tn=new RegExp(/^-([^\d-])$/),Vn=new RegExp(/^--(\S+)/),jn=new RegExp(/^-([^\d-]{2,})$/),Rn=t=>Tn.test(t)||Vn.test(t)||jn.test(t),Bn=(t,e)=>{const n=e[0]&&Rn(e[0])||e.length===0?null:e.shift()??null;if(!t.includes(n)){const o=new Error(`Command not recognised: ${String(n)}`);throw o.command=n,o.name="INVALID_COMMAND",o}return{argv:e,command:n}};let Wn=class lt extends oe{optionName;value;constructor(e,n,o){super({hint:`Pass a valid ${o} value for '${e}'.`,message:`Invalid ${o} value '${n}' for option '${e}'`,name:"INVALID_VALUE",title:"Invalid Value"}),this.optionName=e,this.value=n,Object.setPrototypeOf(this,lt.prototype)}},zn=class ut extends oe{optionName;constructor(e){super({cause:void 0,hint:`Remove the duplicate option '${e}' from your command line arguments.`,location:void 0,message:`Option '${e}' is already set`,name:"ALREADY_SET",stack:void 0,title:"Option Already Set"}),this.optionName=e,Object.setPrototypeOf(this,ut.prototype)}},ze=class ht extends oe{optionName;constructor(e){super({cause:void 0,hint:`Check your option definitions or remove the unknown option '${e}' from your command line arguments.`,location:void 0,message:`Unknown option: --${e}`,name:"UNKNOWN_OPTION",stack:void 0,title:"Unknown Option"}),this.optionName=`--${e}`,Object.setPrototypeOf(this,ht.prototype)}},Fn=class pt extends oe{value;constructor(e){super({hint:"Use a defined option or add a defaultOption to capture this value.",message:`Unknown value: ${e}`,name:"UNKNOWN_VALUE",title:"Unknown Value"}),this.value=e,Object.setPrototypeOf(this,pt.prototype)}},M=class dt extends oe{constructor(e,n){super({cause:void 0,hint:n,location:void 0,message:e,name:"INVALID_DEFINITIONS",stack:void 0,title:"Invalid Option Definition"}),Object.setPrototypeOf(this,dt.prototype)}};const Z=t=>t===Boolean||typeof t=="function"&&t.name==="Boolean",Ie=t=>t===Number||typeof t=="function"&&t.name==="Number",Fe=t=>t===String||typeof t=="function"&&t.name==="String",Ge=(t,e,n)=>{const o=Number(t);if(e&&Number.isNaN(o)&&String(t).trim().toLowerCase()!=="nan")throw new Wn(n??"",String(t),"Number");return o},Gn=(t,e,n={})=>{const{optionName:o,strictTypes:i}=n;return Array.isArray(t)?Z(e)?t.map(Boolean):Ie(e)?t.map(s=>Ge(s,i,o)):Fe(e)?t.map(String):t.map(s=>e(String(s))):t===null?null:Z(e)?!!t:Ie(e)?Ge(t,i,o):Fe(e)?typeof t=="string"?t:String(t):e(typeof t=="string"?t:String(t))},I=(t,e,n,...o)=>{t&&console.debug(`[command-line-args:${n}] ${e}`,...o)},qn=/-([a-z])/g,Hn=/^\d+$/,Jn=t=>t.codePointAt(0)===95,qe=(t,e)=>Array.isArray(t)?[...t,...e]:[t,...e],He=t=>t==="__proto__"||t==="constructor"||t==="prototype",ye=(t,e,n,o=!1)=>{t[e]===void 0?t[e]=o?[n]:n:o&&Array.isArray(t[e])?t[e].push(n):t[e]=[t[e],n]},Je=(t,e,n,o,i)=>{let s=e.get(t)??n.get(t);if(!s&&o){const l=t.toLowerCase();s=o.get(l)??i?.get(l)}return s},Kn=(t,e,n,o)=>{const i=n.debug??!1;I(i,"resolveArgs called with options:","resolver",{partial:n.partial,stopAtFirstUnknown:n.stopAtFirstUnknown}),I(i,"Starting argument resolution","resolver"),I(i,"Tokens:","resolver",t),I(i,"Definitions:","resolver",e),I(i,"Processing tokens...","resolver");const s=new Map,l=new Map,r=n.caseInsensitive?new Map:void 0,u=n.caseInsensitive?new Map:void 0,a=n.camelCase?new Map:void 0,c=n.camelCase?new Map:void 0;for(const g of e)if(s.set(g.name,g),g.alias&&l.set(g.alias,g),n.caseInsensitive&&r&&(r.set(g.name.toLowerCase(),g),g.alias&&u&&u.set(g.alias.toLowerCase(),g)),n.camelCase&&a&&c){const v=g.name.replaceAll(qn,(N,k)=>k.toUpperCase());a.set(g.name,v),c.set(v,g.name)}const d=Object.create(null),h=Object.create(null),f=[],p=[],w=new Set;let $=!1;const m=e.find(g=>g.defaultOption),y=e.some(g=>g.group),A=e.find(g=>Ie(g.type));for(let g=0;g<t.length;g++){const v=t[g];if(v.kind==="option-terminator"){d._unknown=o.slice(v.index),$=!0;break}if(v.kind==="option"&&v.name){let N=Je(v.name,s,l,r,u);!N&&v.value===void 0&&A&&Hn.test(v.name)&&(N=A,v.value=v.name,v.name=A.name);let k=!1;if(!N&&n.negation&&v.value===void 0&&v.name.startsWith("no-")){const _=v.name.slice(3),P=Je(_,s,l,r,u);P?.type&&Z(P.type)&&(N=P,k=!0)}const x=N?N.name:v.name,S=N?.multiple,U=N?.lazyMultiple;if(Object.hasOwn(h,x)&&h[x]!==void 0&&!S&&!U&&!n.partial)throw new zn(x);if(!N&&n.partial){const _=v.rawName??`--${v.name}${v.value!==void 0&&v.inlineValue?`=${v.value}`:""}`;f.push({index:v.index,value:_});continue}if(!N&&n.stopAtFirstUnknown){d._unknown=o.slice(v.index);break}if(!N&&!n.partial)throw new ze(v.name);if(v.value===void 0){const _=t[g+1],P=_?.kind==="option"&&!("name"in _)&&_.value!==void 0,T=_&&N&&!(N.type&&Z(N.type))&&(_.kind==="positional"||P),Pt=N&&N.defaultOption&&!N.multiple&&!N.lazyMultiple;if(T&&(!N?.defaultOption||Pt))if(S){let j=g+1;const ge=[];for(;j<t.length&&(t[j].kind==="positional"||t[j].kind==="option"&&!("name"in t[j])&&t[j].value!==void 0);)ge.push(t[j].value),w.add(t[j].index),j++;h[x]=h[x]===void 0?ge:qe(h[x],ge),g=j-1}else U?(ye(h,x,_.value,!0),w.add(_.index),g++):(h[x]=_.value,w.add(_.index),g++);else N?.type&&Z(N.type)?ye(h,x,!k,S):(S||U)&&h[x]!==void 0?ye(h,x,null,!0):h[x]=S?[]:null}else{let{value:_}=v;if(N?.type&&Z(N.type))switch(_){case"":{if(n.partial){const T=`${v.rawName??`--${v.name}`}${v.value?`=${v.value}`:""}`;p.push({index:v.index,value:T}),_=!0}else throw new ze(v.name);break}case"false":{_=!1;break}case"true":{_=!0;break}default:_=!0}const P=[_];if(S){let T=g+1;for(;T<t.length&&t[T].kind==="positional";)P.push(t[T].value),w.add(t[T].index),T++;g=T-1}h[x]===void 0?h[x]=S||U?P:_:S||U?h[x]=qe(h[x],P):h[x]=_}}else if(v.kind==="positional"&&n.stopAtFirstUnknown&&!w.has(v.index)&&!m){I(i,`Found unconsumed positional token at index ${String(v.index)}, stopping processing`,"resolver"),d._unknown=o.slice(v.index);break}}for(const[g,v]of Object.entries(h)){const N=s.get(g);N&&(N.multiple||N.lazyMultiple)&&!Array.isArray(v)&&(h[g]=[v])}const O=g=>g.kind==="option"&&!s.has(g.name??"")&&!l.has(g.name??"")&&(!n.caseInsensitive||!r?.has(g.name?.toLowerCase()??"")&&!u?.has(g.name?.toLowerCase()??""));let C=-1,D=Number.POSITIVE_INFINITY;if(n.stopAtFirstUnknown&&!$&&(C=t.findIndex(g=>O(g)),C!==-1&&(D=t[C].index)),m){const g=[],v=[];for(const N of t)N.kind==="positional"&&!w.has(N.index)&&N.index<D&&(g.push(N.value),v.push(N));if(g.length>0){const N=h[m.name],k=m.multiple??m.lazyMultiple;N===void 0?k?(v.forEach(x=>w.add(x.index)),h[m.name]=g):(w.add(v[0].index),h[m.name]=g[0]):k&&(v.forEach(x=>w.add(x.index)),h[m.name]=Array.isArray(N)?[...g,...N]:[...g,N])}}if(!n.partial){for(const g of t)if(g.kind==="positional"&&!w.has(g.index))throw new Fn(o[g.index])}if(n.partial&&!n.stopAtFirstUnknown){const g=[...f];for(const v of p)g.push({index:v.index,value:v.value});for(const v of t)v.kind==="positional"&&!w.has(v.index)&&g.push({index:v.index,value:o[v.index]});g.length>0&&(g.sort((v,N)=>v.index-N.index),d._unknown=g.map(v=>v.value))}if(n.stopAtFirstUnknown&&!$){const g=t.findIndex(N=>N.kind==="positional"&&!w.has(N.index));let v=-1;if(C!==-1&&g!==-1?v=Math.min(C,g):C!==-1?v=C:g!==-1&&(v=g),v>=0){const N=t[v].index;d._unknown=o.slice(N)}}for(const[g,v]of Object.entries(h)){const N=n.camelCase?a?.get(g)??g:g,k=s.get(g);k?.type?d[N]=Gn(v,k.type,{optionName:k.name,strictTypes:n.strictTypes}):d[N]=v===void 0?null:v}for(const g of e){const v=n.camelCase?a?.get(g.name)??g.name:g.name;!(v in d)&&g.defaultValue!==void 0&&(g.multiple??g.lazyMultiple?d[v]=Array.isArray(g.defaultValue)?[...g.defaultValue]:[g.defaultValue]:d[v]=g.defaultValue)}if(y){const g={},v={},N={};for(const x of e)if(x.group){const S=Array.isArray(x.group)?x.group:[x.group];for(const U of S)He(U)||(g[U]??={})}for(const x of Object.keys(d))if(!Jn(x)){v[x]=d[x];let S=x;n.camelCase&&(S=c?.get(x)??x);const U=s.get(S);if(U?.group){const _=Array.isArray(U.group)?U.group:[U.group];for(const P of _)He(P)||g[P]&&(g[P][x]=d[x])}else N[x]=d[x]}const k={_all:v};for(const[x,S]of Object.entries(g))k[x]=S;Object.keys(N).length>0&&(k._none=N),d._unknown&&(k._unknown=d._unknown),Object.keys(d).forEach(x=>delete d[x]),Object.assign(d,k)}const E=Object.defineProperties({},Object.getOwnPropertyDescriptors(d));return I(i,"Final parsed result:","resolver",E),E},ft="-",ne=ft.codePointAt(0),Y="=",Zn=Y.codePointAt(0),Yn="--",Qn=ft,Xn="--",mt=t=>t.length>2&&t.startsWith(Xn),eo=t=>mt(t)&&!t.includes(Y,3),to=t=>mt(t)&&t.includes(Y,3),no=t=>{if(t.length!==2||t.codePointAt(0)!==ne||t.codePointAt(1)===ne)return!1;const e=t.codePointAt(1);return e!==void 0&&(e<48||e>57)},oo=t=>{if(t.length<=2||t.codePointAt(0)!==ne||t.codePointAt(1)===ne)return!1;const e=t.codePointAt(1);return!(e!==void 0&&e>=48&&e<=57)},so=t=>{const e=[];let n=0,o=[],i=0,s=-1,l=0;for(;i<o.length||n<t.length;){let r;if(i<o.length?(r=o[i],i++):(r=t[n],n++),l>0?l--:s++,r===Yn){e.push({index:s,kind:"option-terminator"});const u=[...o.slice(i),...t.slice(n)],a=u.map((c,d)=>({index:s+d+1,kind:"positional",value:c}));e.push(...a),s+=u.length;break}if(no(r)){const u=r.charAt(1);e.push({index:s,kind:"option",name:u,rawName:r});continue}if(oo(r)&&!r.includes(Y)){const u=[];let a="",c=!1;for(let d=1;d<r.length;d++){const h=r.charAt(d);c?a+=h:h.codePointAt(0)===Zn?c=!0:u.push(`${Qn}${h}`)}if(c)if(u.length>0){const d=u.pop();u.push(`${d}=${a}`)}else u.push(a);o=i<o.length?[...u,...o.slice(i)]:u,i=0,l=u.length;continue}if(eo(r)){const u=r.slice(2);e.push({index:s,kind:"option",name:u,rawName:r});continue}if(to(r)){const u=r.indexOf(Y),a=r.slice(2,u),c=r.slice(u+1);e.push({index:s,inlineValue:!0,kind:"option",name:a,rawName:r,value:c});continue}if(r.length>2&&r.codePointAt(0)===ne&&r.codePointAt(1)!==ne&&r.includes(Y)){const u=r.indexOf(Y),a=r.charAt(1),c=r.slice(u+1);e.push({index:s,inlineValue:!0,kind:"option",name:a,rawName:r,value:c});continue}e.push({index:s,kind:"positional",value:r})}return e},io=/\d/,ro=t=>typeof t=="function",ao=(t,e,n)=>{const o=n?.debug??!1;I(o,"Validating definitions:","validation",t,"caseInsensitive:",e);const i=new Set,s=new Set,l=new Set,r=new Set;let u=0;for(const a of t){if(I(o,"Checking definition:","validation",a),!a.name)throw I(o,"Validation failed: name is required","validation"),new M("Invalid option definition: name is required");if(typeof a.name!="string")throw new M("Invalid option definition: name must be a string");if(a.name.trim()==="")throw new M("Invalid option definition: name cannot be empty");const c=e?a.name.toLowerCase():"";if(i.has(a.name)||e&&l.has(c))throw new M(`Invalid option definition: duplicate name '${a.name}'`);if(s.has(a.name)||e&&r.has(c))throw new M(`Invalid option definition: name '${a.name}' conflicts with an existing alias`);if(i.add(a.name),e&&l.add(c),a.alias!==void 0){if(typeof a.alias!="string")throw new M("Invalid option definition: alias must be a string");if(a.alias.length!==1)throw new M("Invalid option definition: alias must be a single character");if(io.test(a.alias))throw new M("Invalid option definition: alias cannot be numeric");if(a.alias==="-")throw new M('Invalid option definition: alias cannot be "-"');const d=e?a.alias.toLowerCase():"";if(s.has(a.alias)||e&&r.has(d))throw new M(`Invalid option definition: duplicate alias '${a.alias}'`);if(i.has(a.alias)||e&&l.has(d))throw new M(`Invalid option definition: alias '${a.alias}' conflicts with an existing option name`);s.add(a.alias),e&&r.add(d)}if(a.defaultOption&&(u++,a.type!==void 0&&Z(a.type)))throw new M("Invalid option definition: defaultOption cannot be Boolean type");if(a.type!==void 0&&!(a.type===Boolean||a.type===Number||a.type===String||typeof a.type=="function"&&ro(a.type)))throw new M("Invalid option definition: invalid type")}if(u>1)throw I(o,"Validation failed: multiple defaultOptions not allowed","validation"),new M("Invalid option definition: multiple defaultOptions not allowed");I(o,"Validation completed successfully","validation")};function co(t,e={}){const n=e.debug??!1;I(n,"Starting command-line-args parsing","index"),I(n,"Options:","index",e);const o={...e};o.stopAtFirstUnknown&&(o.partial=!0);const i=Array.isArray(t)?t:[t];I(n,"Normalized definitions:","index",i),ao(i,o.caseInsensitive,n?o:void 0);let{argv:s}=o;s??=process.argv.slice(2),I(n,"Using argv:","index",s);let l=s;o.caseInsensitive&&(l=s.map(a=>{if(a.startsWith("--")){const c=a.indexOf("="),d=(c===-1?a.slice(2):a.slice(2,c)).toLowerCase();return c===-1?`--${d}`:`--${d}${a.slice(c)}`}if(a.startsWith("-")&&!a.startsWith("--")&&a.length>1){const c=a.indexOf("="),d=c===-1?a.slice(1):a.slice(1,c);if(!d)return a;const h=d.toLowerCase();return c===-1?`-${h}`:`-${h}${a.slice(c)}`}return a}));const r=so(l.map(String));I(n,"Tokenized arguments:","index",r);const u=Kn(r,i,o,s);return I(n,"Command-line-args parsing completed","index"),u}class lo{result;argv;options;argument;args;command;commandName;env;logger;console;fs;process;runtime;rawUnknown;rawArgv;constructor(e,n){this.commandName=e,this.command=n}}let $e=class extends b{commandName;constructor(e,n,o){super(`Failed to load command "${e}": ${n}`,"COMMAND_LOADER_ERROR",{commandName:e,reason:n}),this.name="CommandLoaderError",this.commandName=e,this.hint="Ensure the loader resolves to a module with a default export that is the command handler function.",o!==void 0&&(this.cause=o)}};const uo=/^-{1,2}(\w+)(=(.+))?$/,gt=(t,e,n,o)=>{const i=uo.exec(t);if(i===null)return{};const s=i[1];if(!s)return{};const l=n&&o?n.get(s)??o.get(s):e.find(r=>r.name===s||r.alias===s);return l!==void 0?{argName:l.name,argValue:i[3],option:l}:{}},Ke=(t,e)=>{if(e.type===void 0)return t;if(e.type.name==="Boolean"){if(t==="true"||t==="1")return e.type(!0);if(t==="false"||t==="0")return e.type(!1)}return e.type(t)},ho=new Set(["0","1","false","true"]),po=(t,e,n,o)=>{if(e.length===0||t.length===0)return{};const i=(s,l)=>{const{argName:r,argValue:u,option:a}=gt(l,e,n,o),{lastOption:c}=s;return a&&re(a)&&u&&r?s.partial[r]=Ke(u,a):s.lastName&&c&&re(c)&&ho.has(l)&&(s.partial[s.lastName]=Ke(l,c)),{lastName:r,lastOption:a,partial:s.partial}};return t.reduce(i,{partial:{}}).partial},fo=new Set(["0","1","false","true"]),mo=(t,e,n,o)=>{if(e.length===0||t.length===0)return t;const i=(s,l)=>{const{argValue:r,option:u}=gt(l,e,n,o),{lastOption:a}=s;if(a&&re(a)&&fo.has(l)){const{args:c}=s;return{args:c.slice(0,-1)}}return u&&re(u)&&r?{args:s.args}:{args:[...s.args,l],lastOption:u}};return t.reduce(i,{args:[]}).args},go=t=>{const e=new Map;for(const n of t){const o=e.get(n.name);o?e.set(n.name,{...o,...n}):e.set(n.name,n)}return[...e.values()]},wo=t=>{if(t===void 0)return;const e=t.toLowerCase().trim();return e==="true"||e==="1"||e==="yes"||e==="on"},vo=(t,e)=>{if(!t.type)return e;if(e!==void 0){if(t.type===Boolean||typeof t.type=="function"&&t.type.name==="Boolean")return wo(e);if(t.type===Number||typeof t.type=="function"&&t.type.name==="Number"){const n=Number.parseFloat(e);return Number.isNaN(n)?void 0:n}return t.type===String||typeof t.type=="function"&&t.type.name==="String"?e:t.type(e)}},yo=/_./g,$o=/^[A-Z]/,No=t=>t.toLowerCase().replaceAll(yo,e=>e[1]?.toUpperCase()??e).replace($o,e=>e.toLowerCase()),Ao=(t,e=fe())=>{if(!t||t.length===0)return{};const n={};for(const o of t){const i=e[o.name],s=vo(o,i),l=s===void 0?o.defaultValue:s,r=No(o.name);n[r]=l}return n},xo=/-([a-z])/g,wt=t=>t.replaceAll(xo,(e,n)=>n.toUpperCase()),Ze=(t,e)=>t.type===void 0?e:t.type(e),bo=(t,e)=>{const{choices:n}=t;if(!n||n.length===0)return[];const o=[];for(const i of e)n.includes(i)||o.push({choices:n,name:t.name,value:i});return o},Co=(t,e)=>e&&t.defaultValue!==void 0&&!Array.isArray(t.defaultValue)?[t.defaultValue]:t.defaultValue,Oo=(t,e)=>{const n={},o=[],i=[],s=t.length-1;let l=0;for(const[r,u]of t.entries()){const a=wt(u.name),c=r===s&&u.multiple===!0,d=c?e.slice(r):e.slice(r,r+1);if(d.length===0){u.required===!0&&o.push(u.name),n[a]=Co(u,c);continue}i.push(...bo(u,d)),l=r+d.length,n[a]=c?d.map(h=>Ze(u,h)):Ze(u,d[0])}return{invalid:i,missing:o,resolved:n,surplus:e.slice(l)}},_o=t=>{const e=new Map,n=new Map;for(const o of t)if(e.set(o.name,o),o.alias){const i=Array.isArray(o.alias)?o.alias:[o.alias];for(const s of i)n.set(s,o)}return{optionMapByAlias:n,optionMapByName:e}},vt=async t=>{if(typeof t.__resolvedExecute__=="function")return t.__resolvedExecute__;if(typeof t.loader!="function")throw new $e(t.name,"no execute or loader defined");let e;try{e=await t.loader()}catch(o){throw new $e(t.name,o instanceof Error?o.message:String(o),o)}const n=e.default;if(typeof n!="function")throw new $e(t.name,"loader did not return a module with a default-exported handler function");return t.__resolvedExecute__=n,n},Io=(t,e,n,o,i,s=[])=>{const l=new lo(t.name,t),{_all:r,_unknown:u,positionals:a}=e,c=Object.keys(n).length>0?{...r,...n}:r;he in c&&delete c[he],l.argument=a?.[he]??[],l.args={},l.rawUnknown=[...u??[]],l.rawArgv=[...s];const d=Object.keys(o).length>0;return l.options=d?{...c,...o}:c,l.env=Ao(t.env,i),l},Eo=(t,e,n)=>{const o=t.options??[],i=o.length>0;let s=go(i?[...o,...n]:n);if(s.length>0){for(const c of s)if(c.multiple&&c.lazyMultiple)throw new Error(`Argument "${c.name}" cannot have both multiple and lazyMultiple options, please choose one.`)}const l=t.arguments!==void 0&&t.arguments.length>0;(t.argument||l)&&(s=[{defaultOption:!0,description:t.argument?.description,group:"positionals",multiple:!0,name:he,type:t.argument?.type??String,typeLabel:t.argument?.typeLabel},...s]);let r,u;if(i){const{optionMapByAlias:c,optionMapByName:d}=_o(o);r=mo(e,o,d,c),u=po(e,o,d,c)}else r=e,u={};const a=co(s,{argv:r,camelCase:!0,partial:!0,stopAtFirstUnknown:!0});return{arguments_:s,booleanValues:u,parsedArgs:a}},Ne=async(t,e,n)=>typeof t.execute=="function"?t.execute(e):(await vt(t))(e),ko=(t,e)=>{if(!t.arguments||t.arguments.length===0)return;const n=e.rawUnknown.indexOf("--"),o=n===-1?[]:e.rawUnknown.slice(n+1),i=o.length===0?e.argument:e.argument.slice(0,Math.max(0,e.argument.length-o.length)),s=Oo(t.arguments,i);if(e.args=s.resolved,s.missing.length>0)throw new Kt(t.name,s.missing);const[l]=s.invalid;if(l)throw new Jt(l.name,l.value,l.choices);if(s.surplus.length>0)throw new Zt(t.name,s.surplus,t.arguments.length)};let So=class{capacity;cache;constructor(t){this.capacity=t,this.cache=new Map}get(t){if(!this.cache.has(t))return;const e=this.cache.get(t);return this.cache.delete(t),this.cache.set(t,e),e}has(t){return this.cache.has(t)}set(t,e){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.capacity){const n=this.cache.keys().next().value;n!==void 0&&this.cache.delete(n)}this.cache.set(t,e)}delete(t){this.cache.delete(t)}clear(){this.cache.clear()}size(){return this.cache.size}};const Lo=(t,e)=>typeof t!="string"||t===""?"":t[0].toLowerCase()+t.slice(1),Mo=new RegExp("[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))","g"),Uo=t=>{if(typeof t!="string")throw new TypeError(`The "value" argument must be of type string. Received ${typeof t}`);return t.replaceAll(Mo,"")},Ae=new So(1e3),Po=/[.*+?^${}()|[\]\\]/g,Do=t=>{const e=t.join("");if(Ae.has(e)){const i=Ae.get(e);return i.lastIndex=0,i}const n=t.map(i=>i.replaceAll(Po,String.raw`\$&`)).join("|"),o=new RegExp(n,"g");return Ae.set(e,o),o},To=t=>{const e=[];let n=0,o;for(G.lastIndex=0;(o=G.exec(t))!==null;)o.index>n&&e.push(t.slice(n,o.index)),e.push(o[0]),n=G.lastIndex;return n<t.length&&e.push(t.slice(n)),e.filter(Boolean)},Vo=/[ČŠŽĐ]/i,yt=new Uint8Array(128),$t=new Uint8Array(128),Nt=new Uint8Array(128);for(let t=0;t<128;t++)yt[t]=t>=65&&t<=90?1:0,$t[t]=t>=97&&t<=122?1:0,Nt[t]=t>=48&&t<=57?1:0;const xe=t=>yt[t],Ye=t=>$t[t],be=t=>Nt[t],W=(t,e,n,o,i)=>{if(t.length===0)return[];let s=!1;const l=Object.values(e);for(const f of l)if(f(t[0])){s=!0;break}if(!s&&!n)return[t];const r=[...t],u=[];let a=r[0],c="other";const d=Object.entries(e);for(const f of d){const[p,w]=f;if(w(r[0])){c=p;break}}let h=n&&o?r[0]===r[0].toLocaleUpperCase(o):!1;for(let f=1;f<r.length;f++){const p=r[f];let w="other";for(const y of d){const[A,O]=y;if(O(p)){w=A;break}}const $=n&&o?p===p.toLocaleUpperCase(o):!1;let m=!1;i?m=i(c,w,h,$,p,f,r):(c!==w&&c!=="other"&&w!=="other"&&(m=!0),n&&w!=="other"&&!h&&$&&(m=!0)),m?(u.push(a),a=p):a+=p,c=w,n&&(h=$)}return a&&a.length>0&&u.push(a),u.length>0?u:[t]},jo=(t,e,n,o)=>{if(n.size===0)return e;for(const i of n)if(t.startsWith(i,e))return o.push(i),e+i.length;return e},At=(t,e=new Set)=>{if(t.length===0)return[];if(t.toUpperCase()===t)return[t];let n=0;const o=[],i=t.length;for(let s=1;s<i;s++){const l=jo(t,n,e,o);if(l!==n){n=l,s=n-1;continue}const r=t.codePointAt(s-1),u=t.codePointAt(s),a=r&&r<128&&xe(r),c=u&&u<128&&xe(u),d=r&&r<128&&Ye(r),h=r&&r<128&&be(r),f=u&&u<128&&be(u);if(d&&c){o.push(t.slice(n,s)),n=s;continue}if(h&&!f||!h&&f){o.push(t.slice(n,s)),n=s;continue}if(f&&!h){let p=!1,w=!1;if(s+1<i){const $=t.codePointAt(s+1);p=$&&$<128&&xe($),w=$&&$<128&&be($)}if(!w&&p){o.push(t.slice(n,s),t.slice(s,s+1)),n=s+1;continue}}if(s+1<i){const p=t.codePointAt(s+1),w=p&&p<128&&Ye(p);if(a&&c&&w){const $=t.slice(n,s+1);e.has($)||(o.push(t.slice(n,s)),n=s)}}}return n<i&&o.push(t.slice(n)),o.filter(s=>s!=="")},xt=(t,e,n)=>{if(t.length===0)return[];const o=t===t.toLocaleUpperCase(e);if(e.startsWith("de")){if(!o&&t.replaceAll("ß","SS")===t.toLocaleUpperCase(e))return[t];const a=[...t],c=a.length,d=[];let h=a[0],f=a[0]===a[0].toLocaleUpperCase(e),p=f,w=f?0:-1;for(let $=1;$<c;$++){const m=a[$],y=m===m.toLocaleUpperCase(e);if(y===f)h+=m;else if(y)h&&h.length>0&&(d.push(h),h=m),p=!0,w=$;else{if(p&&$-w>1){const A=a[$-1],O=h.slice(0,-1);O&&O.length>0&&d.push(O),h=A+m}else h+=m;p=!1,w=-1}f=y}return h&&h.length>0&&d.push(h),d}if(e.startsWith("uk")||e.startsWith("ru")||e.startsWith("bg")||e.startsWith("sr")||e.startsWith("mk")||e.startsWith("be")){if(!ee.test(t)&&!L.test(t))return[t];const a=[...t],c=a.length,d=[];let h=a[0];const f=a[0];let p;ee.test(f)?p=1:L.test(f)?p=2:p=0;let w=f===f.toLocaleUpperCase(e);for(let m=1;m<c;m++){const y=a[m];let A;ee.test(y)?A=1:L.test(y)?A=2:A=0;const O=y===y.toLocaleUpperCase(e);p!==A&&(p===1||p===2)&&(A===1||A===2)||A===p&&!w&&O?(d.push(h),h=y):h+=y,p=A,w=O}h&&h.length>0&&d.push(h);const $=[];for(let m=0;m<d.length;m++)m<d.length-1&&d[m].length===1&&L.test(d[m])&&ee.test(d[m+1][0])?($.push(d[m]+d[m+1]),m+=1):$.push(d[m]);return $}if(e.startsWith("el")){if(!ve.test(t)&&!L.test(t))return[t];const a=[];De.lastIndex=0;let c;for(;(c=De.exec(t))!==null;)a.push(c[0]);a.length===0&&a.push(t);const d=[];if(a.length===1){const h=a[0];if(!h||!ve.test(h[0])||h.length===1)return[h??t]}for(const h of a){if(!h)continue;if(!ve.test(h[0])||h.length===1){d.push(h);continue}const f=h.length;let p=h[0],w=h[0]===h[0].toLocaleUpperCase(e);for(let $=1;$<f;$++){const m=h[$],y=m===m.toLocaleUpperCase(e);!w&&y?(d.push(p),p=m):p+=m,w=y}p&&d.push(p)}return d}if(e.startsWith("ja")||e.startsWith("ko")){const a=e.startsWith("ja"),c=a?{hiragana:h=>sn.test(h),kanji:h=>je.test(h),katakana:h=>an.test(h),latin:h=>L.test(h)}:{hangul:h=>Te.test(h),latin:h=>L.test(h)},d=new Set(["が","で","と","に","の","は","へ","も","や","を"]);if(a){const h=W(t,c,!1,e,(p,w)=>p==="hiragana"&&w==="katakana"||p==="katakana"&&w==="hiragana"||p==="hiragana"&&w==="latin"||p==="katakana"&&w==="latin"||p==="kanji"&&w==="latin"||p==="latin"&&(w==="hiragana"||w==="katakana"||w==="kanji")),f=[];for(const p of h){const w=p;w.length===1&&d.has(w)&&f.length>0?f[f.length-1]=f.at(-1)+w:f.push(w)}return f.length>0?f:[t]}return W(t,c,!1,e,(h,f)=>h==="hangul"&&f==="latin"||h==="latin"&&f==="hangul")}if(e.startsWith("sl")){const a=[...t],c=a.length,d=[];let h=a[0],f=a[0]===a[0].toLocaleUpperCase(e);for(let p=1;p<c;p++){const w=a[p],$=w===w.toLocaleUpperCase(e),m=Vo.test(w),y=p<c-1&&a[p+1]===a[p+1].toLocaleUpperCase(e);!f&&$||m&&y?(d.push(h),h=w,m&&y&&(d.push(h),h="")):h+=w,f=$}return h&&h.length>0&&d.push(h),d}if(e.startsWith("zh"))return W(t,{han:a=>je.test(a),latin:a=>L.test(a)},!1,e);if(["ar","fa","he","ur"].includes(e.split("-")[0])){const a=c=>Ve.test(c)||Pe.test(c);return W(t,{latin:c=>L.test(c),rtl:c=>a(c)},!1,e)}if(["am","bn","gu","hi","km","kn","lo","ml","mr","ne","or","pa","si","ta","te","th"].includes(e.split("-")[0])){const a=c=>en.test(c)||Xt.test(c)||nn.test(c)||on.test(c)||rn.test(c)||fn.test(c)||mn.test(c)||un.test(c)||dn.test(c)||gn.test(c)||ln.test(c)||wn.test(c)||hn.test(c)||tn.test(c)||cn.test(c)||pn.test(c);return W(t,{indic:c=>a(c),latin:c=>L.test(c)},!1,e)}if(["be","bg","ru","sr","uk"].includes(e))return W(t,{cyrillic:a=>ee.test(a),latin:a=>L.test(a)},!0,e);if(["ar","fa","he"].includes(e))return W(t,{latin:a=>L.test(a),rtl:a=>Ve.test(a)||Pe.test(a)},!1,e);if(e.startsWith("ko"))return W(t,{hangul:a=>Te.test(a),latin:a=>L.test(a)},!1,e);if(e.startsWith("uz")){if(!ee.test(t)&&!L.test(t))return[t];const a=[...t],c=a.length,d=[];let h=a[0],f=a[0]===a[0].toLocaleUpperCase(e);for(let p=1;p<c;p++){const w=a[p],$=w===w.toLocaleUpperCase(e);if(Re.test(w)||Re.test(a[p-1])){h+=w;continue}!f&&$?(d.push(h),h=w):h+=w,f=$}return h&&h.length>0&&d.push(h),d}const i=[...t],s=i.length,l=[];let r=i[0],u=i[0]===i[0].toLocaleUpperCase(e);for(const a of n)if(t.startsWith(a)){l.push(a),r=i[a.length],u=r===r.toLocaleUpperCase(e);break}for(let a=1;a<s;a++){const c=i[a],d=c===c.toLocaleUpperCase(e);let h=0;for(const f of n)if(t.startsWith(f,a)){l.push(r,f),h=f.length,r="";const p=f.at(-1);p&&(u=p===p.toLocaleUpperCase(e));break}if(h>0){a+=h-1;continue}!u&&d?(l.push(r),r=c):r+=c,u=d}return r&&l.push(r),l},Ro=(t,e,n)=>{const o=[],i=pe.test(t)?t.split(pe).filter(Boolean):[t];for(const s of i){const l=s;if(pe.test(l))o.push(l);else{G.lastIndex=0;const r=G.test(l)?To(l).filter(Boolean):[l];for(const u of r)if(G.lastIndex=0,G.test(u))o.push(u);else if(e){const a=e.toLowerCase().split("-")[0];o.push(...xt(u,a,n))}else o.push(...At(u,n))}}return o},Bo=(t,e={})=>{if(!t||typeof t!="string")return[];const{handleAnsi:n=!1,handleEmoji:o=!1,knownAcronyms:i=[],locale:s,normalize:l=!1,separators:r,stripAnsi:u=!1,stripEmoji:a=!1}=e,c=new Set([...i].toSorted((m,y)=>y.length-m.length));let d=t;u&&(d=Uo(d)),a&&(d=vn(d));let h;Array.isArray(r)?h=Do(r):r instanceof RegExp?h=r:h=Qt;const f=[];let p=d;const w=h.flags.includes("g")?h:new RegExp(h.source,`${h.flags}g`);for(;p.length>0;){const m=w.exec(p);if(!m){p===".."?f.push(".."):p==="."?f.push("."):p.length>0&&f.push(p);break}const y=m.index,A=m[0],O=A.length,C=p.slice(0,y),D=p.slice(y+O);if(A.startsWith("../"))f.push(".."),p=p.slice(y+3);else if(A.startsWith("./"))f.push("."),p=p.slice(y+2);else if(y===0&&A==="..")f.push(".."),p=p.slice(2);else if(y===0&&A===".")f.push("."),p=p.slice(1);else{C.length>0&&f.push(C);let E=0;for(;(E=A.indexOf("../",E))!==-1;)f.push(".."),E+=3;for(E=0;(E=A.indexOf("./",E))!==-1;)(E===0||A[E-1]!==".")&&f.push("."),E+=2;let g=D;for(;g.startsWith("../");)f.push(".."),g=g.slice(3);for(;g.startsWith("./");)f.push("."),g=g.slice(2);if(g===".."){f.push("..");break}else if(g==="."){f.push(".");break}else p=g}w.lastIndex=0}if(f.length===0){const m=d.split(h).filter(Boolean);f.push(...m)}let $=[];for(const m of f)n||o?$.push(...Ro(m,s,c)):s?$.push(...xt(m,s,c)):$.push(...At(m,c));return l&&($=$.map(m=>c.has(m)?m:s&&m===m.toLocaleUpperCase(s)?m[0]+m.slice(1).toLocaleLowerCase(s):m.toUpperCase()===m&&!c.has(m)?m.slice(0,1)+m.slice(1).toLowerCase():m)),$},Wo=(t,e)=>typeof t!="string"||t===""?"":t[0].toUpperCase()+t.slice(1),zo=(t,e)=>{const{length:n}=t;if(n===0)return"";if(n===1)return t[0];const o=[];let i="",s="";for(let l=0;l<n;l++){const r=t[l];if(pe.test(r)){i?(o.push(i+s+r),i="",s=""):(o.length>0&&o.push(e),i=r);continue}i?(s&&(s+=e),s+=r):(o.length>0&&o.push(e),o.push(r))}return o.join("")},te=(t,e)=>{if(typeof t!="string"||!t)return"";let n=!0;return zo(Bo(t,{handleAnsi:e?.handleAnsi,handleEmoji:e?.handleEmoji,knownAcronyms:e?.knownAcronyms,locale:e?.locale,normalize:e?.normalize,separators:void 0,stripAnsi:e?.stripAnsi,stripEmoji:e?.stripEmoji}).map(o=>{const i=o,s=i.toLowerCase();return n?(n=!1,Lo(s)):Wo(s)}),"")};class Fo extends b{commandName;missingOptions;constructor(e,n){super(`Command "${e}" is missing required options: ${n.join(", ")}`,"COMMAND_VALIDATION_ERROR",{commandName:e,missingOptions:n}),this.name="CommandValidationError",this.commandName=e,this.missingOptions=n,this.hint=`Provide the following required options: ${n.join(", ")}`}}class Go extends b{choices;option;value;constructor(e,n,o){super(`Invalid value "${n}" for option "${e}". Allowed values: ${o.join(", ")}`,"INVALID_CHOICE",{choices:o,option:e,value:n}),this.name="InvalidChoiceError",this.option=e,this.value=n,this.choices=o,this.hint=`Use one of: ${o.map(i=>`--${e} ${i}`).join(", ")}`}}const Qe=(t,e,n=!1)=>{const o=[],i=e._all??e;for(const s of t){if(!n&&!s.required)continue;const l=s.__camelCaseName__??s.name;if(i[l]===void 0){if(s.type?.name==="Boolean"){e[l]=!1;continue}o.push(s)}}return o},qo=(t,e)=>e.includes(t)?!0:Math.abs(t.length-e.length)>t.length/2?!1:xn(t,e)<=t.length/3,z=(t,e)=>{const n=t.toLowerCase();return e.filter(o=>qo(o.toLowerCase(),n))},Ho=(t,e)=>{const n=[];if(t._unknown&&t._unknown.forEach(o=>{const i=o.startsWith("--");let s=`Found unknown ${i?"option":"argument"} "${o}"`;if(i){const l=z(o.replace("--",""),(e.options??[]).map(r=>r.name));if(l.length>0){const[r,...u]=l.map(a=>`--${a}`);s+=u.length>0?`, did you mean ${r??""} or ${u.join(", ")}?`:`, did you mean ${r??""}?`}}n.push(s)}),n.length>0)throw new b(n.join(`
3
3
  `),V.UNKNOWN_OPTION,{unknownOptions:[...t._unknown??[]]})},K=(t,e)=>new b(`Command "${t}" ${e}`,"INVALID_COMMAND",{commandName:t}),Jo=(t,e)=>{const n=new Set;for(const[o,i]of t.entries()){if(typeof i!="object"||i===null)throw K(e,`has a positional argument at index ${String(o)} that is not an object`);const{name:s}=i;if(typeof s!="string"||s.length===0)throw K(e,`has a positional argument at index ${String(o)} without a name`);const l=wt(s);if(n.has(l))throw K(e,`declares duplicate positional argument "${s}"`);n.add(l);const r=o===0?void 0:t[o-1];if(i.required===!0&&r!==void 0&&r.required!==!0)throw K(e,`declares required positional "${s}" after an optional one, which can never be satisfied`);if(i.multiple===!0&&o!==t.length-1)throw K(e,`declares a variadic positional "${s}" that is not the last one`)}},Ko=(t,e,n)=>{const o=n.__requiredOptions__,i=o?Qe(o,e,!0):Qe(t,e,!1);if(i.length>0)throw new Fo(n.name,i.map(s=>s.name));e._unknown&&e._unknown.length>0&&!n.argument&&!n.arguments?.length&&Ho(e,n)},Zo=(t,e,n)=>{const o=n.__conflictingOptions__??t.filter(i=>i.conflicts!==void 0);if(o.length>0){const i=o.find(s=>{const l=s.__camelCaseName__??te(s.name);return Array.isArray(s.conflicts)?s.conflicts.some(r=>e[te(r)]!==void 0)&&e[l]!==void 0:e[te(s.conflicts)]!==void 0&&e[l]!==void 0});if(i)throw new ct(i.name,typeof i.conflicts=="string"?i.conflicts:i.conflicts?.[0]??"unknown")}},Yo=(t,e)=>{const n=e.options;if(n)for(const o of n){if(!o.choices||o.choices.length===0)continue;const i=o.__camelCaseName__??te(o.name),s=t[i];if(s==null)continue;const l=Array.isArray(s)?s:[s];for(const r of l){const u=String(r);if(!o.choices.includes(u))throw new Go(o.name,u,o.choices)}}},Qo=t=>{if(!Array.isArray(t.options))return;const e=new Map,n=new Map;for(const i of t.options){if(i.name){const s=e.get(i.name)??[];s.push(i),e.set(i.name,s)}if(typeof i.alias=="string"&&i.alias.length>0){const s=n.get(i.alias)??[];s.push(i),n.set(i.alias,s)}else if(Array.isArray(i.alias)){for(const s of i.alias)if(s.length>0){const l=n.get(s)??[];l.push(i),n.set(s,l)}}}const o=[];for(const[i,s]of e)s.length>1&&o.push(`Duplicate option name "${i}" in command "${t.name}": ${JSON.stringify(s)}`);for(const[i,s]of n)s.length>1&&o.push(`Duplicate option alias "-${i}" used by options ${s.map(l=>`"${l.name}"`).join(", ")} in command "${t.name}"`);if(o.length>0)throw new Error(o.join(`
4
4
  `))},Xo=t=>{const{arguments:e}=t;if(e!==void 0){if(!Array.isArray(e))throw K(t.name,'must declare "arguments" as an array — slot order is significant, so a record cannot express it');if(t.argument!==void 0)throw K(t.name,'cannot define both "argument" and "arguments" — choose one');Jo(e,t.name)}},es=(t,e)=>{if(e.length===0)return{argv:[],commandPath:void 0};const n=[];let o;for(let i=1;i<=e.length;i+=1){const s=e[i-1];if(s===void 0||s.startsWith("-"))break;n.push(s);const l=n.join(" ");t.has(l)&&(o={commandPath:[...n],depth:i})}return o?{argv:e.slice(o.depth),commandPath:o.commandPath}:{argv:e,commandPath:void 0}},J=t=>t.join(" "),Xe=(t,e)=>e&&e.length>0?[...e,t]:[t],et=t=>t===void 0||Array.isArray(t)?t:Object.entries(t).map(([e,n])=>({...n,name:e})),ts=t=>{const e=et(t.options),n=et(t.env);return e===t.options&&n===t.env?t:Object.assign(Object.create(Object.getPrototypeOf(t)),t,{env:n,options:e})},ns=/^no-/,os=t=>{t.options?.forEach(e=>{e.__camelCaseName__=te(e.name)})},ss=t=>{if(!Array.isArray(t.options)||t.options.length===0)return;const e=new Set;for(const o of t.options)e.add(o.name);const n=[];for(const o of t.options)if(o.name.startsWith("no-")){const i=o.name.replace(ns,"");if(!e.has(i)){if(o.type!==Boolean)throw new Error(`Cannot add negated option "${o.name}" to command "${t.name}" because it is not a boolean.`);const s={...o,alias:void 0,defaultValue:o.defaultValue===void 0?!0:!o.defaultValue,description:`Inverse of --${o.name}.`,name:i};n.push(s),e.add(i)}}n.length>0&&t.options.push(...n)},is=(t,e)=>{if(!e.options||e.options.length===0)return;const{options:n}=t,o=new Map;for(const s of e.options)if(s.name.startsWith("no-")){const l=te(s.name);o.set(l,s)}const i=Object.keys(n).filter(s=>o.has(s));if(i.length!==0)for(const s of i){const l=s.charAt(2);if(!l)continue;const r=l.toLowerCase()+s.slice(3),u=o.get(s);u&&(u.__negated__=!0),n[r]=!n[s],Reflect.deleteProperty(n,s)}},rs=(t,e)=>{if(!e.options||e.options.length===0)return;const n=new Map;for(const i of e.options)i.__camelCaseName__&&i.__negated__===void 0&&i.implies!==void 0&&n.set(i.__camelCaseName__,i);if(n.size===0)return;const{options:o}=t;for(const i of Object.keys(o)){const s=n.get(i);if(s?.implies){const{implies:l}=s;for(const[r,u]of Object.entries(l))o[r]===void 0&&(o[r]=u)}}},as=()=>!!process.versions.electron,cs=()=>as()&&!process.defaultApp,ls=()=>cs()?0:1,us=t=>t.slice(ls()+1),hs=" ",ps=(t,e)=>t===e?!0:t.length!==e.length?!1:t.every((n,o)=>n===e[o]),ds=t=>{if(typeof t=="string")return t.split(hs);const e=Oe();return ps(t,e)?us(t):t},fs=t=>{const e=s=>{t.error(`Uncaught exception: ${s.message||s}`),s.stack&&t.error(s.stack),F(1)},n=(s,l)=>{if(s instanceof Error)t.error(`Promise rejection: ${s.message||s}`),s.stack&&t.error(s.stack);else{let r;if(typeof s=="string")r=s;else try{r=JSON.stringify(s)}catch{r=String(s)}t.error(`Promise rejection: ${r}`)}F(1)},o=Me("uncaughtException",e),i=Me("unhandledRejection",n);return()=>{o(),i()}},tt=100,ms=/^[a-z][\w-]*$/i,Ee=(t,e)=>{if(typeof t!="string"||t.trim().length===0)throw new b(`${e} must be a non-empty string`,"INVALID_INPUT",{fieldName:e,value:t});return t.trim()},nt=(t,e)=>{if(!Array.isArray(t)||!t.every(n=>typeof n=="string"))throw new b(`${e} must be an array of strings`,"INVALID_INPUT",{fieldName:e,value:t});return t},le=(t,e)=>{if(typeof t!="object"||t===null)throw new b(`${e} must be an object`,"INVALID_INPUT",{fieldName:e,value:t});return t},ue=t=>{const e=Ee(t,"Command name");if(e.length>tt)throw new b(`Command name is too long (maximum ${String(tt)} characters)`,"INVALID_COMMAND_NAME",{commandName:e,length:e.length});if(e.includes("..")||e.includes("/")||e.includes("\\")||e.includes(";")||e.includes("|")||e.includes("&"))throw new b(`Command name "${e}" contains invalid characters`,"INVALID_COMMAND_NAME",{commandName:e});if(!ms.test(e))throw new b(`Command name "${e}" must start with a letter and contain only letters, numbers, hyphens, and underscores`,"INVALID_COMMAND_NAME",{commandName:e});return e},gs=1e6,ws=1e5,vs=new Set([`
@@ -1,65 +1,308 @@
1
- import { C as ChangelogFormatter } from "../../../packem_shared/api.d-BPftyU9r.js";
1
+ import { C as ChangelogFormatter } from "../../../packem_shared/api.d-C10vHKJZ.js";
2
2
  export {
3
3
  /**
4
4
  * Public entry point for `@visulima/vis/release/changelog`.
5
5
  *
6
6
  * Exposes the changelog formatter contract (`ChangelogFormatter` /
7
- * `ChangelogContext`), the `defineFormatter` authoring helper, and
8
- * `resolveFormatter` which maps a `release.changelog` config value
9
- * (`"default"`, `"github"`, `"keep-a-changelog"`, a path, a `[path, opts]`
10
- * tuple, or `false`) to a concrete formatter function.
7
+ * `ChangelogContext`), the `defineFormatter` authoring helper, the
8
+ * conventional-commit primitives the built-in formatters share
9
+ * (`parseConventionalHeader`, `renderGroupedEntries`, `renderReleaseHeading`),
10
+ * and `resolveFormatter` which maps a `release.changelog` config value
11
+ * (`"default"`, `"github"`, `"keep-a-changelog"`, `"conventional"`, a path, a
12
+ * `[path, opts]` tuple, or `false`) to a concrete formatter function.
11
13
  */
12
- type a as ChangeFileMeta,
14
+ type d as ChangeFileMeta,
13
15
  /**
14
16
  * Public entry point for `@visulima/vis/release/changelog`.
15
17
  *
16
18
  * Exposes the changelog formatter contract (`ChangelogFormatter` /
17
- * `ChangelogContext`), the `defineFormatter` authoring helper, and
18
- * `resolveFormatter` which maps a `release.changelog` config value
19
- * (`"default"`, `"github"`, `"keep-a-changelog"`, a path, a `[path, opts]`
20
- * tuple, or `false`) to a concrete formatter function.
19
+ * `ChangelogContext`), the `defineFormatter` authoring helper, the
20
+ * conventional-commit primitives the built-in formatters share
21
+ * (`parseConventionalHeader`, `renderGroupedEntries`, `renderReleaseHeading`),
22
+ * and `resolveFormatter` which maps a `release.changelog` config value
23
+ * (`"default"`, `"github"`, `"keep-a-changelog"`, `"conventional"`, a path, a
24
+ * `[path, opts]` tuple, or `false`) to a concrete formatter function.
21
25
  */
22
- type b as ChangelogContext,
26
+ type a as ChangelogContext,
23
27
  /**
24
28
  * Public entry point for `@visulima/vis/release/changelog`.
25
29
  *
26
30
  * Exposes the changelog formatter contract (`ChangelogFormatter` /
27
- * `ChangelogContext`), the `defineFormatter` authoring helper, and
28
- * `resolveFormatter` which maps a `release.changelog` config value
29
- * (`"default"`, `"github"`, `"keep-a-changelog"`, a path, a `[path, opts]`
30
- * tuple, or `false`) to a concrete formatter function.
31
+ * `ChangelogContext`), the `defineFormatter` authoring helper, the
32
+ * conventional-commit primitives the built-in formatters share
33
+ * (`parseConventionalHeader`, `renderGroupedEntries`, `renderReleaseHeading`),
34
+ * and `resolveFormatter` which maps a `release.changelog` config value
35
+ * (`"default"`, `"github"`, `"keep-a-changelog"`, `"conventional"`, a path, a
36
+ * `[path, opts]` tuple, or `false`) to a concrete formatter function.
31
37
  */
32
- type c as ChangelogFormatterModule,
38
+ type b as ChangelogFormatterModule,
33
39
  /**
34
40
  * Public entry point for `@visulima/vis/release/changelog`.
35
41
  *
36
42
  * Exposes the changelog formatter contract (`ChangelogFormatter` /
37
- * `ChangelogContext`), the `defineFormatter` authoring helper, and
38
- * `resolveFormatter` which maps a `release.changelog` config value
39
- * (`"default"`, `"github"`, `"keep-a-changelog"`, a path, a `[path, opts]`
40
- * tuple, or `false`) to a concrete formatter function.
43
+ * `ChangelogContext`), the `defineFormatter` authoring helper, the
44
+ * conventional-commit primitives the built-in formatters share
45
+ * (`parseConventionalHeader`, `renderGroupedEntries`, `renderReleaseHeading`),
46
+ * and `resolveFormatter` which maps a `release.changelog` config value
47
+ * (`"default"`, `"github"`, `"keep-a-changelog"`, `"conventional"`, a path, a
48
+ * `[path, opts]` tuple, or `false`) to a concrete formatter function.
41
49
  */
42
- type d as ChangelogTarget,
50
+ type c as ChangelogTarget,
43
51
  /**
44
52
  * Public entry point for `@visulima/vis/release/changelog`.
45
53
  *
46
54
  * Exposes the changelog formatter contract (`ChangelogFormatter` /
47
- * `ChangelogContext`), the `defineFormatter` authoring helper, and
48
- * `resolveFormatter` which maps a `release.changelog` config value
49
- * (`"default"`, `"github"`, `"keep-a-changelog"`, a path, a `[path, opts]`
50
- * tuple, or `false`) to a concrete formatter function.
55
+ * `ChangelogContext`), the `defineFormatter` authoring helper, the
56
+ * conventional-commit primitives the built-in formatters share
57
+ * (`parseConventionalHeader`, `renderGroupedEntries`, `renderReleaseHeading`),
58
+ * and `resolveFormatter` which maps a `release.changelog` config value
59
+ * (`"default"`, `"github"`, `"keep-a-changelog"`, `"conventional"`, a path, a
60
+ * `[path, opts]` tuple, or `false`) to a concrete formatter function.
51
61
  */
52
- e as defineFormatter } from "../../../packem_shared/api.d-BPftyU9r.js";
62
+ e as defineFormatter } from "../../../packem_shared/api.d-C10vHKJZ.js";
63
+ import { C as CommandRunner } from "../../../packem_shared/interface.d-CRqRz4jt.js";
53
64
  import { VisReleaseConfig } from "../../types.js";
65
+ /**
66
+ * One `type → section` mapping. Same shape as
67
+ * `conventional-changelog-conventionalcommits`' `presetConfig.types`, so a
68
+ * config lifted straight out of a `.versionrc` / release-please config works
69
+ * unchanged.
70
+ */
71
+ interface ConventionalTypeRule {
72
+ /**
73
+ * Drop entries of this type from the rendered output. Breaking changes
74
+ * are still surfaced under the breaking section — hiding a type never
75
+ * hides an incompatible change.
76
+ */
77
+ hidden?: boolean;
78
+ /** Markdown heading text, rendered as `### &lt;section>`. */
79
+ section: string;
80
+ /** Conventional-commit type — `feat`, `fix`, `perf`, … Matched case-insensitively. */
81
+ type: string;
82
+ }
83
+ /**
84
+ * Bucket key for entries that no rule claims: a line that does not parse as a
85
+ * conventional header, and a header whose type has no rule in the table.
86
+ * A table may name it explicitly (`{ type: "other", … }`) to place the
87
+ * catch-all section or to hide it.
88
+ */
89
+ declare const UNCATEGORIZED_TYPE = "other";
90
+ /** Heading used for breaking changes, matching this monorepo's existing history. */
91
+ declare const DEFAULT_BREAKING_SECTION = "⚠ BREAKING CHANGES";
92
+ /** Heading used for the catch-all bucket when the table doesn't name one. */
93
+ declare const DEFAULT_UNCATEGORIZED_SECTION = "Other Changes";
94
+ /**
95
+ * Default `type → section` table.
96
+ *
97
+ * The first block is `conventional-changelog-conventionalcommits`' preset
98
+ * verbatim (`feat`/`fix`/`perf`/`revert` visible; `docs`/`style`/`chore`/
99
+ * `refactor`/`test`/`build`/`ci` hidden), so a package migrating off
100
+ * semantic-release keeps the exact section set its history already uses.
101
+ *
102
+ * The second block covers the extra types this repo's commit convention adds
103
+ * on top of the Angular set. They are hidden by default — they describe work
104
+ * on the repo rather than a change a consumer of the published package can
105
+ * observe — with one exception: `deps` is visible as `Dependencies`, because
106
+ * `multi-semantic-release` already writes a visible `### Dependencies` section
107
+ * and dropping it would lose the upgrade trail an adopter reads to answer
108
+ * "which version of X did this release pull in?".
109
+ *
110
+ * `other` is the home for commits that do not parse as conventional; it is
111
+ * visible so nothing is ever silently dropped. Hide it explicitly with
112
+ * `{ type: "other", section: "…", hidden: true }` if you would rather lose them.
113
+ */
114
+ declare const DEFAULT_CONVENTIONAL_TYPES: ReadonlyArray<ConventionalTypeRule>;
115
+ /** A single changelog line handed to the grouped renderer. */
116
+ interface GroupableEntry {
117
+ /** The authored line — with or without a leading bullet marker. */
118
+ line: string;
119
+ /** Appended verbatim after the rendered entry (PR / commit refs, author credit). */
120
+ suffix?: string;
121
+ }
122
+ /**
123
+ * How an entry's text is derived from its authored line.
124
+ *
125
+ * - `"scope"` — conventional-changelog rendering: drop the `type(scope):`
126
+ * prefix and re-emit the scope as a bold `**scope:**`
127
+ * lead-in. Lines no rule claims stay verbatim so their
128
+ * prefix isn't lost.
129
+ * - `"verbatim"` — keep the authored line exactly as written, including any
130
+ * leading list marker (what the `default` formatter emits).
131
+ */
132
+ type EntryStyle = "scope" | "verbatim";
133
+ interface RenderGroupedOptions {
134
+ /**
135
+ * Heading listing every breaking change ahead of the type sections, so an
136
+ * incompatible change stays visible even when its own type is hidden.
137
+ * Pass `false` to fold breaking changes into their type section only.
138
+ * Default: {@link DEFAULT_BREAKING_SECTION}.
139
+ */
140
+ breakingSection?: false | string;
141
+ /**
142
+ * Re-bucket entries whose header carries the `!` marker under this
143
+ * pseudo-type instead of their own, so a table can give them a section of
144
+ * their own (`{ section: "Breaking Changes", type: "breaking" }`). An
145
+ * inline `BREAKING CHANGE` note does *not* re-type an entry — only the
146
+ * header marker does. Off by default.
147
+ */
148
+ breakingType?: string;
149
+ /** List marker. Default `"*"`, matching conventional-changelog output. */
150
+ bullet?: string;
151
+ /** How each entry's text is rendered. Default `"scope"`. */
152
+ entryStyle?: EntryStyle;
153
+ /** Ordered `type → section` table. Default: {@link DEFAULT_CONVENTIONAL_TYPES}. */
154
+ types?: ReadonlyArray<ConventionalTypeRule>;
155
+ /**
156
+ * Heading for the catch-all section, used when `types` has no
157
+ * `{ type: "other" }` rule to place and name it.
158
+ * Default: {@link DEFAULT_UNCATEGORIZED_SECTION}.
159
+ */
160
+ uncategorizedSection?: string;
161
+ }
162
+ /**
163
+ * Bucket `entries` by conventional-commit type and render them as Markdown
164
+ * lines (`### &lt;section>` followed by a bullet list, blank-line separated).
165
+ *
166
+ * Ordering follows the `types` array; types sharing a section heading are
167
+ * merged under it, emitted at the position of the first rule that names it.
168
+ * Hidden types are omitted. Everything no rule claims — unparseable lines and
169
+ * unmapped types alike — is emitted under the catch-all section, which sits
170
+ * where the table's `{ type: "other" }` rule places it or, when the table has
171
+ * none, after every other section.
172
+ */
173
+ declare const renderGroupedEntries: (entries: ReadonlyArray<GroupableEntry>, options?: RenderGroupedOptions) => string[];
174
+ interface ConventionalFormatterOptions {
175
+ /**
176
+ * Heading for breaking changes, rendered above every type section.
177
+ * `false` folds them into their type section instead.
178
+ * Default: `"⚠ BREAKING CHANGES"`.
179
+ */
180
+ breakingSection?: false | string;
181
+ /** List marker. Default `"*"` — what conventional-changelog emits. */
182
+ bullet?: string;
183
+ /**
184
+ * Base URL for `{compareUrl}` (self-hosted GitLab / Gitea). Wins over
185
+ * `repo`. The formatter appends `/compare/&lt;fromTag>...&lt;toTag>`.
186
+ */
187
+ compareUrlPrefix?: string;
188
+ /**
189
+ * Release-heading template. Tokens: `{name}`, `{version}`, `{date}`,
190
+ * `{compareUrl}`. `[...]({compareUrl})` link syntax is unwrapped when
191
+ * there is no compare URL (no remote, or a first release), so the
192
+ * heading never degrades into a dangling `[1.0.0]()`.
193
+ *
194
+ * Default: `"## {name} [{version}]({compareUrl}) ({date})"`.
195
+ */
196
+ heading?: string;
197
+ /**
198
+ * `owner/name` slug for `{compareUrl}` and `#123` issue links.
199
+ * Auto-detected from the active remote provider when omitted; when
200
+ * detection fails the links are simply not emitted. The provider itself
201
+ * is always detected, so a GitLab remote gets GitLab link shapes.
202
+ */
203
+ repo?: string;
204
+ /** Override the runner — used by tests. */
205
+ runner?: CommandRunner;
206
+ /**
207
+ * Tag template naming both ends of `{compareUrl}`. Should match the
208
+ * workspace `releaseTagPattern`. Default `"{name}@{version}"`.
209
+ */
210
+ tagPattern?: string;
211
+ /**
212
+ * Ordered `type → section` table, `presetConfig.types` shaped.
213
+ * Default: {@link DEFAULT_CONVENTIONAL_TYPES}.
214
+ */
215
+ types?: ReadonlyArray<ConventionalTypeRule>;
216
+ }
217
+ declare const DEFAULT_CONVENTIONAL_HEADING = "## {name} [{version}]({compareUrl}) ({date})";
218
+ declare const createConventionalFormatter: (options?: ConventionalFormatterOptions) => ChangelogFormatter;
219
+ /** Result of parsing a conventional-commit header line. */
220
+ interface ParsedConventionalHeader {
221
+ /** `true` for the `!` marker — `feat!:`, `fix(scope)!:`. */
222
+ breakingMarker: boolean;
223
+ /** `true` when the line carries an inline `BREAKING CHANGE` / `BREAKING-CHANGE` note. */
224
+ breakingNote: boolean;
225
+ /** Scope between the parentheses, `undefined` when the header has none. */
226
+ scope: string | undefined;
227
+ /** Everything after `: `. */
228
+ subject: string;
229
+ /** Lower-cased conventional type. */
230
+ type: string;
231
+ }
232
+ /**
233
+ * `true` when the line already opens with a Markdown list marker.
234
+ *
235
+ * Renderers use this to decide whether to prefix a bullet of their own; it is
236
+ * the same test {@link stripBulletMarker} strips with, so the two can never
237
+ * disagree about what a marker is (a `+ ` bullet used to be stripped here but
238
+ * re-bulleted there, emitting `* + fix: …`).
239
+ */
240
+ declare const hasBulletMarker: (line: string) => boolean;
241
+ /** Strip the leading list marker (if any) from an authored body line. */
242
+ declare const stripBulletMarker: (line: string) => string;
243
+ /**
244
+ * Parse a single body line as a conventional-commit header.
245
+ *
246
+ * Returns `undefined` when the line does not follow the convention — the
247
+ * caller is responsible for routing those to the uncategorized bucket rather
248
+ * than dropping them.
249
+ */
250
+ declare const parseConventionalHeader: (line: string) => ParsedConventionalHeader | undefined;
251
+ /** `true` when the header announces a breaking change by either signal. */
252
+ declare const isBreakingChange: (parsed: ParsedConventionalHeader) => boolean;
253
+ type RemoteProvider = "github" | "gitlab";
254
+ /** Values substituted into a `heading` template. */
255
+ interface ReleaseHeadingTokens {
256
+ /** Version-comparison URL. Omit / leave empty when there is nothing to compare against. */
257
+ compareUrl?: string;
258
+ /** ISO date `YYYY-MM-DD`. */
259
+ date: string;
260
+ /** Package name. */
261
+ name: string;
262
+ /** The version being released. */
263
+ version: string;
264
+ }
265
+ /**
266
+ * Render a release heading from a template. Recognised tokens:
267
+ *
268
+ * `{name}` — package name (`@scope/pkg`)
269
+ * `{version}` — the version being released
270
+ * `{date}` — ISO date `YYYY-MM-DD`
271
+ * `{compareUrl}` — version-comparison URL, or nothing
272
+ *
273
+ * Mirrors `renderTagPattern`: unknown `{x}` tokens are left intact so a typo
274
+ * shows up in the output rather than silently vanishing.
275
+ */
276
+ declare const renderReleaseHeading: (template: string, tokens: ReleaseHeadingTokens) => string;
277
+ interface CompareUrlInput {
278
+ /** Override the URL prefix (self-hosted GitLab, Gitea, …). Wins over `repo`. */
279
+ compareUrlPrefix?: string;
280
+ name: string;
281
+ newVersion: string;
282
+ /** Previous version. Absent / empty on a first release → no compare URL. */
283
+ oldVersion?: string;
284
+ /**
285
+ * Forge the `repo` slug lives on — it decides the URL shape (GitLab nests
286
+ * the comparison under `/-/`). Default `"github"`.
287
+ */
288
+ provider?: RemoteProvider;
289
+ /** `owner/name` slug, resolved against the provider's public web host. */
290
+ repo?: string;
291
+ /** Tag template used to name both ends of the comparison. Default `"{name}@{version}"`. */
292
+ tagPattern?: string;
293
+ }
294
+ declare const buildCompareUrl: (input: CompareUrlInput) => string | undefined;
54
295
  declare const resolveFormatter: (setting: VisReleaseConfig["changelog"], cwd: string) => Promise<ChangelogFormatter>;
55
296
  export {
56
297
  /**
57
298
  * Public entry point for `@visulima/vis/release/changelog`.
58
299
  *
59
300
  * Exposes the changelog formatter contract (`ChangelogFormatter` /
60
- * `ChangelogContext`), the `defineFormatter` authoring helper, and
61
- * `resolveFormatter` which maps a `release.changelog` config value
62
- * (`"default"`, `"github"`, `"keep-a-changelog"`, a path, a `[path, opts]`
63
- * tuple, or `false`) to a concrete formatter function.
301
+ * `ChangelogContext`), the `defineFormatter` authoring helper, the
302
+ * conventional-commit primitives the built-in formatters share
303
+ * (`parseConventionalHeader`, `renderGroupedEntries`, `renderReleaseHeading`),
304
+ * and `resolveFormatter` which maps a `release.changelog` config value
305
+ * (`"default"`, `"github"`, `"keep-a-changelog"`, `"conventional"`, a path, a
306
+ * `[path, opts]` tuple, or `false`) to a concrete formatter function.
64
307
  */
65
- type ChangelogFormatter, resolveFormatter };
308
+ type ChangelogFormatter, type CompareUrlInput, type ConventionalFormatterOptions, type ConventionalTypeRule, DEFAULT_BREAKING_SECTION, DEFAULT_CONVENTIONAL_HEADING, DEFAULT_CONVENTIONAL_TYPES, DEFAULT_UNCATEGORIZED_SECTION, type EntryStyle, type GroupableEntry, type ParsedConventionalHeader, type ReleaseHeadingTokens, type RenderGroupedOptions, UNCATEGORIZED_TYPE, buildCompareUrl, createConventionalFormatter, hasBulletMarker, isBreakingChange, parseConventionalHeader, renderGroupedEntries, renderReleaseHeading, resolveFormatter, stripBulletMarker };
@@ -1 +1 @@
1
- import{defineFormatter as o}from"../../../packem_shared/defineFormatter-D5dCp6Kv.js";import{resolveFormatter as m}from"../../../packem_chunks/resolveFormatter.js";export{o as defineFormatter,m as resolveFormatter};
1
+ import{defineFormatter as o}from"../../../packem_shared/defineFormatter-D5dCp6Kv.js";import{D as t,c as E}from"../../../packem_shared/conventional-CGiOOEq1.js";import{hasBulletMarker as N,isBreakingChange as T,parseConventionalHeader as s,stripBulletMarker as l}from"../../../packem_shared/hasBulletMarker-BX2KwzI5.js";import{b as p,r as A}from"../../../packem_shared/release-heading-DRpkhETz.js";import{resolveFormatter as i}from"../../../packem_chunks/resolveFormatter.js";import{DEFAULT_BREAKING_SECTION as D,DEFAULT_CONVENTIONAL_TYPES as I,DEFAULT_UNCATEGORIZED_SECTION as O,UNCATEGORIZED_TYPE as d,renderGroupedEntries as f}from"../../../packem_shared/DEFAULT_BREAKING_SECTION-DUAcKVLD.js";export{D as DEFAULT_BREAKING_SECTION,t as DEFAULT_CONVENTIONAL_HEADING,I as DEFAULT_CONVENTIONAL_TYPES,O as DEFAULT_UNCATEGORIZED_SECTION,d as UNCATEGORIZED_TYPE,p as buildCompareUrl,E as createConventionalFormatter,o as defineFormatter,N as hasBulletMarker,T as isBreakingChange,s as parseConventionalHeader,f as renderGroupedEntries,A as renderReleaseHeading,i as resolveFormatter,l as stripBulletMarker};
@@ -1,5 +1,5 @@
1
- import { C as ChangelogFormatter } from "../packem_shared/api.d-BPftyU9r.js";
2
- export type { b as ChangelogContext, c as ChangelogFormatterModule, d as ChangelogTarget } from "../packem_shared/api.d-BPftyU9r.js";
1
+ import { C as ChangelogFormatter } from "../packem_shared/api.d-C10vHKJZ.js";
2
+ export type { a as ChangelogContext, b as ChangelogFormatterModule, c as ChangelogTarget } from "../packem_shared/api.d-C10vHKJZ.js";
3
3
  import { V as VersionActions } from "../packem_shared/interface.d-CrHOtJc1.js";
4
4
  export { A as AfterAllProjectsVersioned, type a as AfterAllVersionedContext, type b as AfterAllVersionedResult, type P as PublishContext } from "../packem_shared/interface.d-CrHOtJc1.js";
5
5
  export type { e as PublishResult } from "../packem_shared/interface.d-CRqRz4jt.js";
@@ -1067,8 +1067,17 @@ interface VisReleaseConfig {
1067
1067
  changedFilePatterns?: string[];
1068
1068
  /**
1069
1069
  * Changelog formatter selection. Pass `false` to disable changelog output,
1070
- * one of the built-in names (`"default"`, `"github"`, `"keep-a-changelog"`),
1071
- * a path to a custom module, or a `[path, options]` tuple.
1070
+ * one of the built-in names (`"default"`, `"github"`, `"keep-a-changelog"`,
1071
+ * `"conventional"`), a path to a custom module, or a `[path, options]`
1072
+ * tuple.
1073
+ *
1074
+ * `"conventional"` renders the `conventional-changelog` /
1075
+ * `semantic-release` shape: entries grouped by commit type under
1076
+ * configurable `types: [{ type, section, hidden? }]` headings, the scope
1077
+ * lifted out and bolded (`* **client,react:** …`), and a templated
1078
+ * release heading (`heading`, tokens `{name}`, `{version}`, `{date}`,
1079
+ * `{compareUrl}`). The same `types` / `heading` options are available
1080
+ * opt-in on `"github"`, and `heading` on `"default"`.
1072
1081
  */
1073
1082
  changelog?: false | string | [string, Record<string, unknown>];
1074
1083
  /** Directory holding change files. Default: `".vis/release"`. */
@@ -1248,6 +1257,39 @@ interface VisReleaseConfig {
1248
1257
  httpProxy?: string;
1249
1258
  /** Globs of packages to exclude from release entirely. */
1250
1259
  ignore?: string[];
1260
+ /**
1261
+ * Extra regex source(s) matched against each commit subject by
1262
+ * `vis release generate`. A matching commit contributes neither a
1263
+ * bump nor a changelog line.
1264
+ *
1265
+ * Accepts a single regex source or an array of them (plain strings,
1266
+ * not `/…/` literals — the config file is also expressed as JSON in
1267
+ * `schemas/vis-release-config.schema.json`). Invalid sources are
1268
+ * skipped with a warning rather than failing the release.
1269
+ *
1270
+ * These EXTEND the built-in machine-release-commit heuristic
1271
+ * (`chore(release): …`, `chore(main): release …`, `chore: release v…`,
1272
+ * `release(alpha): …`). Set `ignoreReleaseCommits: false` to drop the
1273
+ * built-ins and match only your own patterns.
1274
+ *
1275
+ * A bare `[skip ci]` marker is deliberately not built in — it means
1276
+ * "don't run CI", not "don't release", so matching it would swallow a
1277
+ * real `fix: … [skip ci]` and its bump. Opt in with
1278
+ * `ignoreCommitPattern: ["\\[skip ci\\]"]` if you want that.
1279
+ */
1280
+ ignoreCommitPattern?: string | string[];
1281
+ /**
1282
+ * Skip machine-authored release commits in `vis release generate`.
1283
+ * Default `true`.
1284
+ *
1285
+ * With the default, a package whose only commits in the range are
1286
+ * its own `chore(release): pkg@1.2.3 [skip ci]` commits is not
1287
+ * bumped, and the previous changelog header those commits carry is
1288
+ * never transcribed into the new entry. Set to `false` for the
1289
+ * historical (verbatim) behaviour — `ignoreCommitPattern` then
1290
+ * becomes the only filter.
1291
+ */
1292
+ ignoreReleaseCommits?: boolean;
1251
1293
  /** Globs that override `ignore` and `private` exclusion. */
1252
1294
  include?: string[];
1253
1295
  /**