@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.
- package/CHANGELOG.md +46 -0
- package/README.md +2 -2
- package/dist/bin.js +1 -1
- package/dist/binx.js +1 -1
- package/dist/packem_chunks/catalog.js +1 -1
- package/dist/packem_chunks/cli-exec.js +1 -1
- package/dist/packem_chunks/cli-main.js +155 -155
- package/dist/packem_chunks/git.js +4 -3
- package/dist/packem_chunks/handler2.js +1 -1
- package/dist/packem_chunks/handler28.js +1 -1
- package/dist/packem_chunks/handler3.js +1 -1
- package/dist/packem_chunks/handler39.js +6 -6
- package/dist/packem_chunks/handler40.js +1 -75
- package/dist/packem_chunks/handler56.js +6 -6
- package/dist/packem_chunks/handler59.js +73 -9
- package/dist/packem_chunks/handler6.js +1 -1
- package/dist/packem_chunks/handler60.js +11 -3
- package/dist/packem_chunks/handler61.js +3 -22
- package/dist/packem_chunks/handler62.js +21 -60
- package/dist/packem_chunks/handler63.js +61 -3
- package/dist/packem_chunks/handler64.js +3 -6
- package/dist/packem_chunks/handler65.js +6 -9
- package/dist/packem_chunks/handler72.js +1 -1
- package/dist/packem_chunks/handler78.js +1 -1
- package/dist/packem_chunks/help-command.js +2 -2
- package/dist/packem_chunks/resolveFormatter.js +7 -5
- package/dist/packem_chunks/root-handler.js +1 -0
- package/dist/packem_chunks/version-resolver.js +3 -2
- package/dist/packem_shared/DEFAULT_BREAKING_SECTION-DUAcKVLD.js +1 -0
- package/dist/packem_shared/DEFAULT_CONVENTIONAL_HEADING-D7oNGUcP.js +1 -0
- package/dist/packem_shared/{affected-selection-BdFnUyQZ.js → affected-selection-D3rosWKF.js} +1 -1
- package/dist/packem_shared/{api.d-BPftyU9r.d.ts → api.d-C10vHKJZ.d.ts} +1 -1
- package/dist/packem_shared/{bin-BieNPL6n.js → bin-Bc5j8Cdm.js} +1 -1
- package/dist/packem_shared/buildCompareUrl-BLaukjgu.js +1 -0
- package/dist/packem_shared/conventional-CGiOOEq1.js +4 -0
- package/dist/packem_shared/hasBulletMarker-BX2KwzI5.js +1 -0
- package/dist/packem_shared/{index-BPeT7L7t.js → index-B0ahNAKR.js} +1 -1
- package/dist/packem_shared/{package-version-DqNoc-rP.js → package-version-BhrkMRQ2.js} +1 -1
- package/dist/packem_shared/{project-name-filter-B0y95mKx.js → project-name-filter-jDQpaOkI.js} +1 -1
- package/dist/packem_shared/release-heading-DRpkhETz.js +1 -0
- package/dist/packem_shared/run-D-uVGHQ4.js +10 -0
- package/dist/packem_shared/{vis-user-error-4RgO8nMw.js → vis-user-error-CEc_asoq.js} +1 -1
- package/dist/release/core/changelog/index.d.ts +274 -31
- package/dist/release/core/changelog/index.js +1 -1
- package/dist/release/plugin-sdk.d.ts +2 -2
- package/dist/release/types.d.ts +44 -2
- package/index.js +52 -52
- package/package.json +11 -11
- package/schemas/vis-config.schema.json +19 -1
- 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-
|
|
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}|(?)${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-
|
|
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,
|
|
8
|
-
*
|
|
9
|
-
* (`
|
|
10
|
-
*
|
|
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
|
|
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,
|
|
18
|
-
*
|
|
19
|
-
* (`
|
|
20
|
-
*
|
|
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
|
|
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,
|
|
28
|
-
*
|
|
29
|
-
* (`
|
|
30
|
-
*
|
|
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
|
|
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,
|
|
38
|
-
*
|
|
39
|
-
* (`
|
|
40
|
-
*
|
|
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
|
|
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,
|
|
48
|
-
*
|
|
49
|
-
* (`
|
|
50
|
-
*
|
|
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-
|
|
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 `### <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 (`### <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/<fromTag>...<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,
|
|
61
|
-
*
|
|
62
|
-
* (`
|
|
63
|
-
*
|
|
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
|
|
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-
|
|
2
|
-
export type {
|
|
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";
|
package/dist/release/types.d.ts
CHANGED
|
@@ -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]`
|
|
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
|
/**
|