UNPKG

@stricli/core

Version:

Build complex CLIs with type safety and no dependencies

24 lines (23 loc) 31.6 kB
"use strict";var ie=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Ge=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var Ue=(e,t)=>{for(var n in t)ie(e,n,{get:t[n],enumerable:!0})},qe=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ge(t))!je.call(e,r)&&r!==n&&ie(e,r,{get:()=>t[r],enumerable:!(a=Me(t,r))||a.enumerable});return e};var Ve=e=>qe(ie({},"__esModule",{value:!0}),e);var gn={};Ue(gn,{AliasNotFoundError:()=>k,ArgumentParseError:()=>I,ArgumentScannerError:()=>h,EnumValidationError:()=>U,ExitCode:()=>N,FlagNotFoundError:()=>$,InvalidNegatedFlagSyntaxError:()=>K,UnexpectedFlagError:()=>z,UnexpectedPositionalError:()=>q,UnsatisfiedFlagError:()=>O,UnsatisfiedPositionalError:()=>V,booleanParser:()=>pe,buildApplication:()=>Ne,buildChoiceParser:()=>Be,buildCommand:()=>ke,buildRouteMap:()=>De,formatMessageForArgumentScannerError:()=>ee,generateHelpTextForAllCommands:()=>Pe,looseBooleanParser:()=>Q,numberParser:()=>Z,proposeCompletions:()=>Oe,run:()=>fn,text_en:()=>me});module.exports=Ve(gn);function J(e,t){let n=e.env?.[t];return typeof n=="string"&&n!=="0"}var N={UnknownCommand:-5,InvalidArgument:-4,ContextLoadError:-3,CommandLoadError:-2,InternalError:-1,Success:0,CommandRunError:1};function M(e){return e.replace(/-./g,t=>t[1].toUpperCase())}function A(e){return Array.from(e).map((t,n)=>{let a=t.toUpperCase(),r=t.toLowerCase();return n===0||a!==t||a===r?t:`-${r}`}).join("")}function We(e){let t=new Map;return{get:(...n)=>t.get(n.join(","))??e,set:(n,...a)=>{t.set(a.join(","),n)}}}function He(e,t,n){let{threshold:a,weights:r}=n;if(e===t)return 0;let i=Math.abs(e.length-t.length);if(typeof a=="number"&&i>a)return 1/0;let o=We(1/0);o.set(0,-1,-1);for(let s=0;s<t.length;++s)o.set((s+1)*r.insertion,-1,s);for(let s=0;s<e.length;++s)o.set((s+1)*r.deletion,s,-1);let d=-1/0;for(let s=0;s<e.length;++s){let u=1/0;for(let l=0;l<=t.length-1;++l){let p=e[s]===t[l]?0:1,c=[o.get(s-1,l)+r.deletion,o.get(s,l-1)+r.insertion,o.get(s-1,l-1)+p*r.substitution];e[s]===t[l-1]&&e[s-1]===t[l]&&c.push(o.get(s-2,l-2)+p*r.transposition);let f=Math.min(...c);o.set(f,s,l),f<u&&(u=f)}if(u>a){if(d>a)return 1/0;d=u}else d=-1/0}let m=o.get(e.length-1,t.length-1);return m>a?1/0:m}function _e(e,t,n){let a=e[1]-t[1];if(a!==0)return a;let r=e[0].startsWith(n),i=t[0].startsWith(n);return r&&!i?-1:!r&&i?1:e[0].localeCompare(t[0])}function G(e,t,n){let a=t.map(i=>[i,He(e,i,n)]).filter(([,i])=>i<=n.threshold),r=Math.min(...a.map(([,i])=>i));return a.filter(([,i])=>i===r).sort((i,o)=>_e(i,o,e)).map(([i])=>i)}var x=class extends Error{};function H(e){return e instanceof Error?e.stack??String(e):String(e)}function Ke(e,t){let n=[],a=Math.max(e.length,t.length);for(let r=0;r<a;++r)n[r]=Math.max(e[r],t[r]);return n}function L(e,t){if(e.length===0)return[];let n=Array(Math.max(...e.map(r=>r.length))).fill(0,0),a=e.reduce((r,i)=>{let o=i.map(d=>d.length);return Ke(r,o)},n);return e.map(r=>{let i=(r[0]??"").padEnd(a[0]);return r.slice(1).reduce((o,d,m,s)=>{let u=s.length===m+1?d:d.padEnd(a[m+1]);return[...o,t?.[m]??" ",u]},[i]).join("").trimEnd()})}function _(e,t){if(e.length<=1)return e[0]??"";if(e.length===2)return e.join(` ${t.conjunction} `);let n=e.slice(0,e.length-1).join(", ");return t.serialComma&&(n+=","),[n,t.conjunction,e[e.length-1]].join(" ")}function ze(e,t){return e.reduce((n,a)=>{let r=t(a),i=n[r]??[];return i.push(a),n[r]=i,n},{})}function ue(e,t){return ze(e,n=>n[t])}async function Y(e){let t=await Promise.allSettled(e),n=ue(t,"status");return n.rejected&&n.rejected.length>0?{status:"rejected",reasons:n.rejected.map(a=>a.reason)}:{status:"fulfilled",value:n.fulfilled?.map(a=>a.value)??[]}}var pe=e=>{switch(e.toLowerCase()){case"true":return!0;case"false":return!1}throw new SyntaxError(`Cannot convert ${e} to a boolean`)},Je=new Set(["true","t","yes","y","on","1"]),Ye=new Set(["false","f","no","n","off","0"]),Q=e=>{let t=e.toLowerCase();if(Je.has(t))return!0;if(Ye.has(t))return!1;throw new SyntaxError(`Cannot convert ${e} to a boolean`)};var Z=e=>{let t=Number(e);if(Number.isNaN(t))throw new SyntaxError(`Cannot convert ${e} to a number`);return t};var h=class extends x{_brand};function ee(e,t){let n=e.constructor.name,a=t[n];return a?a(e):e.message}function Qe(e,t,n){return Object.fromEntries(Object.entries(t).map(([a,r])=>{let i=r,o=e[i];if(!o){let d=X(i,n);throw new $(d,[],a)}return[a,[i,o]]}))}var $=class extends h{input;corrections;aliasName;constructor(t,n,a){let r=`No flag registered for --${t}`;if(a)r+=` (aliased from -${a})`;else if(n.length>0){let i=_(n.map(o=>`--${o}`),{kind:"conjunctive",conjunction:"or",serialComma:!0});r+=`, did you mean ${i}?`}super(r),this.input=t,this.corrections=n,this.aliasName=a}},k=class extends h{input;constructor(t){super(`No alias registered for -${t}`),this.input=t}};function se(e,t){return e.placeholder?e.placeholder:typeof t=="number"?`arg${t}`:"args"}function X(e,t){return t==="allow-kebab-for-camel"?A(e):e}var I=class extends h{externalFlagNameOrPlaceholder;input;exception;constructor(t,n,a){super(`Failed to parse "${n}" for ${t}: ${a instanceof Error?a.message:String(a)}`),this.externalFlagNameOrPlaceholder=t,this.input=n,this.exception=a}};function j(e,t,n,a){try{return t.parse.call(a,n)}catch(r){throw new I(e,n,r)}}var U=class extends h{externalFlagName;input;values;constructor(t,n,a,r){let i=`Expected "${n}" to be one of (${a.join("|")})`;if(r.length>0){let o=_(r.map(d=>`"${d}"`),{kind:"conjunctive",conjunction:"or",serialComma:!0});i+=`, did you mean ${o}?`}super(i),this.externalFlagName=t,this.input=n,this.values=a}},O=class extends h{externalFlagName;nextFlagName;constructor(t,n){let a=`Expected input for flag --${t}`;n&&(a+=` but encountered --${n} instead`),super(a),this.externalFlagName=t,this.nextFlagName=n}},q=class extends h{expectedCount;input;constructor(t,n){super(`Too many arguments, expected ${t} but encountered "${n}"`),this.expectedCount=t,this.input=n}},V=class extends h{placeholder;limit;constructor(t,n){let a;n?(a=`Expected at least ${n[0]} argument(s) for ${t}`,n[1]===0?a+=" but found none":a+=` but only found ${n[1]}`):a=`Expected argument for ${t}`,super(a),this.placeholder=t,this.limit=n}};function ce(e){if(e.startsWith("no")&&e.length>2){if(e[2]==="-")return e.slice(4);let t=e[2],n=t.toUpperCase();return t!==n?void 0:t.toLowerCase()+e.slice(3)}}function ge(e,t,n){let a=e,r=t[a];if(!r){let o=ce(a);if(o&&(r=t[o],r&&r.kind=="boolean"))return{namedFlag:[o,r],negated:!0}}let i=M(e);if(n.caseStyle==="allow-kebab-for-camel"&&!r){if(r=t[i],r)return{namedFlag:[i,r]};let o=ce(i);if(o&&(r=t[o],r&&r.kind=="boolean"))return{namedFlag:[o,r],negated:!0}}if(!r){if(i in t)throw new $(e,[i]);let o=A(e);if(o in t)throw new $(e,[o]);let d=G(a,Object.keys(t),n.distanceOptions);throw new $(e,d)}return{namedFlag:[a,r]}}function fe(e){return e.namedFlag[1].kind==="boolean"||e.namedFlag[1].kind==="counter"}var Ce=/^-([a-z]+)$/i,Ze=/^--([a-z][a-z-]+)$/i;function en(e,t,n,a){let r=Ce.exec(e);if(r){let o=r[1];return Array.from(o).map(d=>{let m=d,s=n[m];if(!s)throw new k(m);return{namedFlag:s}})}let i=Ze.exec(e);if(i){let o=i[1];return[ge(o,t,a)]}return[]}var nn=/^--([a-z][a-z-.\d_]+)=(.+)$/i,tn=/^-([a-z])=(.+)$/i,K=class extends h{externalFlagName;valueText;constructor(t,n){super(`Cannot negate flag --${t} and pass "${n}" as value`),this.externalFlagName=t,this.valueText=n}};function rn(e,t,n,a){let r=nn.exec(e);if(r){let o=r[1],{namedFlag:d,negated:m}=ge(o,t,a),s=r[2];if(m)throw new K(o,s);return[d,s]}let i=tn.exec(e);if(i){let o=i[1],d=n[o];if(!d)throw new k(o);let m=i[2];return[d,m]}}async function on(e,t,n,a,r){if(!n){if("default"in t&&typeof t.default<"u")return t.kind==="boolean"||t.kind==="enum"?t.default:j(e,t,t.default,r);if(t.optional)return;if(t.kind==="boolean")return!1;if(t.kind==="counter")return 0;throw new O(e)}if(t.kind==="counter")return n.reduce((o,d)=>{try{return o+Z.call(r,d)}catch(m){throw new I(e,d,m)}},0);if("variadic"in t&&t.variadic){if(t.kind==="enum"){for(let o of n)if(!t.values.includes(o)){let d=G(o,t.values,a.distanceOptions);throw new U(e,o,t.values,d)}return n}return Promise.all(n.map(o=>j(e,t,o,r)))}let i=n[0];if(t.kind==="boolean")try{return Q.call(r,i)}catch(o){throw new I(e,i,o)}if(t.kind==="enum"){if(!t.values.includes(i)){let o=G(i,t.values,a.distanceOptions);throw new U(e,i,t.values,o)}return i}return j(e,t,i,r)}var z=class extends h{externalFlagName;previousInput;input;constructor(t,n,a){super(`Too many arguments for --${t}, encountered "${a}" after "${n}"`),this.externalFlagName=t,this.previousInput=n,this.input=a}};function ye(e){return e.kind==="counter"?!0:"variadic"in e?!!e.variadic:!1}function v(e,t,n,a){let r=e.get(n[0])??[];if(r.length>0&&!ye(n[1])){let i=X(n[0],t);throw new z(i,r[0],a)}e.set(n[0],[...r,a])}function le(e,t,n){if(t.get(n)){let r=e[n];return!ye(r)}return!1}function ne(e,t){let{flags:n={},aliases:a={},positional:r={kind:"tuple",parameters:[]}}=e,i=Qe(n,a,t.caseStyle),o=[],d=new Map,m=0,s,u=!1;return{next:l=>{if(!u&&t.allowArgumentEscapeSequence&&l==="--"){if(s)if(s[1].kind==="parsed"&&s[1].inferEmpty)v(d,t.caseStyle,s,""),s=void 0;else{let p=X(s[0],t.caseStyle);throw new O(p)}u=!0;return}if(!u){let p=rn(l,n,i,t);if(p){if(s)if(s[1].kind==="parsed"&&s[1].inferEmpty)v(d,t.caseStyle,s,""),s=void 0;else{let f=X(s[0],t.caseStyle),T=X(p[0][0],t.caseStyle);throw new O(f,T)}v(d,t.caseStyle,...p);return}let c=en(l,n,i,t);if(c.length>0){if(s)if(s[1].kind==="parsed"&&s[1].inferEmpty)v(d,t.caseStyle,s,""),s=void 0;else{let f=X(s[0],t.caseStyle),T=X(c[0].namedFlag[0],t.caseStyle);throw new O(f,T)}if(c.every(fe))for(let f of c)f.namedFlag[1].kind==="boolean"?v(d,t.caseStyle,f.namedFlag,f.negated?"false":"true"):v(d,t.caseStyle,f.namedFlag,"1");else if(c.length>1){let f=c.find(E=>!fe(E)),T=X(f.namedFlag[0],t.caseStyle);throw new O(T)}else s=c[0].namedFlag;return}}if(s)v(d,t.caseStyle,s,l),s=void 0;else{if(r.kind==="tuple"){if(m>=r.parameters.length)throw new q(r.parameters.length,l)}else if(typeof r.maximum=="number"&&m>=r.maximum)throw new q(r.maximum,l);o[m]=l,++m}},parseArguments:async l=>{let p=[],c;r.kind==="array"?(typeof r.minimum=="number"&&m<r.minimum&&p.push(new V(se(r.parameter),[r.minimum,m])),c=Y(o.map(async(g,C)=>{let y=se(r.parameter,C+1);return j(y,r.parameter,g,l)}))):c=Y(r.parameters.map(async(g,C)=>{let y=se(g,C+1),b=o[C];if(typeof b!="string"){if(typeof g.default=="string")return j(y,g,g.default,l);if(g.optional)return;throw new V(y)}return j(y,g,b,l)})),s&&s[1].kind==="parsed"&&s[1].inferEmpty&&(v(d,t.caseStyle,s,""),s=void 0);let f=Y(Object.entries(n).map(async g=>{let[C,y]=g,b=X(C,t.caseStyle);if(s&&s[0]===C)throw new O(b);let P=d.get(C),w=await on(b,y,P,t,l);return[C,w]})),[T,E]=await Promise.all([c,f]);if(T.status==="rejected")for(let g of T.reasons)p.push(g);if(E.status==="rejected")for(let g of E.reasons)p.push(g);if(p.length>0)return{success:!1,errors:p};if(T.status==="rejected")throw new x("Unknown failure while scanning positional arguments");if(E.status==="rejected")throw new x("Unknown failure while scanning flag arguments");return{success:!0,arguments:[Object.fromEntries(E.value),...T.value]}},proposeCompletions:async({partial:l,completionConfig:p,text:c,context:f,includeVersionFlag:T})=>{if(s){let F=s[1],g;return F.kind==="enum"?g=F.values:F.proposeCompletions?g=await F.proposeCompletions.call(f,l):g=[],g.map(C=>({kind:"argument:value",completion:C,brief:F.brief})).filter(({completion:C})=>C.startsWith(l))}let E=[];if(!u){let F=Ce.exec(l);if(p.includeAliases){if(l===""||l==="-"){let g=Object.entries(a).filter(C=>!le(n,d,C[1]));for(let[C]of g){let y=i[C];y&&E.push({kind:"argument:flag",completion:`-${C}`,brief:y[1].brief})}}else if(F){let g=Array.from(F[1]);if(g.includes("h"))return[];if(T&&g.includes("v"))return[];let C=new Map(d);for(let P of g){let w=i[P];if(!w)throw new k(P);v(C,t.caseStyle,w,w[1].kind==="boolean"?"true":"1")}let y=g[g.length-1];if(y){let P=i[y];P&&E.push({kind:"argument:flag",completion:l,brief:P[1].brief})}let b=Object.entries(a).filter(P=>!le(n,C,P[1]));for(let[P]of b){let w=i[P];w&&E.push({kind:"argument:flag",completion:`${l}${P}`,brief:w[1].brief})}}}if(l===""||l==="-"||l.startsWith("--")){t.allowArgumentEscapeSequence&&E.push({kind:"argument:flag",completion:"--",brief:c.briefs.argumentEscapeSequence});let g=Object.entries(n).filter(([y])=>!le(n,d,y));t.caseStyle==="allow-kebab-for-camel"&&(g=g.map(([y,b])=>[A(y),b]));let C=g.map(([y,b])=>[`--${y}`,b]).filter(([y])=>y.startsWith(l));E.push(...C.map(([y,b])=>({kind:"argument:flag",completion:y,brief:b.brief})))}}if(r.kind==="array"){if(r.parameter.proposeCompletions&&(typeof r.maximum!="number"||m<r.maximum)){let F=await r.parameter.proposeCompletions.call(f,l);E.push(...F.map(g=>({kind:"argument:value",completion:g,brief:r.parameter.brief})))}}else{let F=r.parameters[m];if(F?.proposeCompletions){let g=await F.proposeCompletions.call(f,l);E.push(...g.map(C=>({kind:"argument:value",completion:C,brief:F.brief})))}}return E.filter(({completion:F})=>F.startsWith(l))}}}function xe(e,t,n){let a=t==="allow-kebab-for-camel"?"convert-camel-to-kebab":t,r=e.getAllEntries();return n.includeHiddenRoutes||(r=r.filter(i=>!i.hidden)),r.flatMap(i=>{let o=i.name[a];return n.includeAliases?[o,...i.aliases]:[o]})}var me={headers:{usage:"USAGE",aliases:"ALIASES",commands:"COMMANDS",flags:"FLAGS",arguments:"ARGUMENTS"},keywords:{default:"default ="},briefs:{help:"Print help information and exit",helpAll:"Print help information (including hidden commands/flags) and exit",version:"Print version information and exit",argumentEscapeSequence:"All subsequent inputs should be interpreted as arguments"},noCommandRegisteredForInput:({input:e,corrections:t})=>{let n=`No command registered for \`${e}\``;if(t.length>0){let a=_(t,{kind:"conjunctive",conjunction:"or",serialComma:!0});return`${n}, did you mean ${a}?`}else return n},noTextAvailableForLocale:({requestedLocale:e,defaultLocale:t})=>`Application does not support "${e}" locale, defaulting to "${t}"`,exceptionWhileParsingArguments:e=>e instanceof h?ee(e,{}):`Unable to parse arguments, ${H(e)}`,exceptionWhileLoadingCommandFunction:e=>`Unable to load command function, ${H(e)}`,exceptionWhileLoadingCommandContext:e=>`Unable to load command context, ${H(e)}`,exceptionWhileRunningCommand:e=>`Command failed, ${H(e)}`,commandErrorResult:e=>e.message,currentVersionIsNotLatest:({currentVersion:e,latestVersion:t,upgradeCommand:n})=>n?`Latest available version is ${t} (currently running ${e}), upgrade with "${n}"`:`Latest available version is ${t} (currently running ${e})`};function Te(e){if(e.startsWith("en"))return me}function S(e,t,n){return!n.disableAnsiColor&&!J(e,"STRICLI_NO_COLOR")&&(t.getColorDepth?.(e.env)??1)>=4}async function Fe({loader:e,parameters:t},{context:n,inputs:a,scannerConfig:r,errorFormatting:i,documentationConfig:o,determineExitCode:d}){let m=e(),s;try{let l=ne(t,r);for(let c of a)l.next(c);let p=await l.parseArguments(n);if(p.success)s=p.arguments;else{let c=S(n.process,n.process.stderr,o);for(let f of p.errors){let T=i.exceptionWhileParsingArguments(f,c);n.process.stderr.write(c?`\x1B[1m\x1B[31m${T}\x1B[39m\x1B[22m `:`${T} `)}return N.InvalidArgument}}catch(l){let p=S(n.process,n.process.stderr,o),c=i.exceptionWhileParsingArguments(l,p);return n.process.stderr.write(p?`\x1B[1m\x1B[31m${c}\x1B[39m\x1B[22m `:`${c} `),N.InvalidArgument}let u;try{let l=await m;typeof l=="function"?u=l:u=l.default}catch(l){let p=S(n.process,n.process.stderr,o),c=i.exceptionWhileLoadingCommandFunction(l,p);return n.process.stderr.write(p?`\x1B[1m\x1B[31m${c}\x1B[39m\x1B[22m `:`${c} `),N.CommandLoadError}try{let l=await u.call(n,...s);if(l instanceof Error){let p=S(n.process,n.process.stderr,o),c=i.commandErrorResult(l,p);return n.process.stderr.write(p?`\x1B[1m\x1B[31m${c}\x1B[39m\x1B[22m `:`${c} `),d?d(l):N.CommandRunError}}catch(l){let p=S(n.process,n.process.stderr,o),c=i.exceptionWhileRunningCommand(l,p);return n.process.stderr.write(p?`\x1B[1m\x1B[31m${c}\x1B[39m\x1B[22m `:`${c} `),d?d(l):N.CommandRunError}return N.Success}var R=Symbol("RouteMap");var B=Symbol("Command");function te(e,t,n){let a=[...n],r=[],i,o=e,d,m=!0,s=!1;return{next:u=>{if(u==="--help"||u==="-h"){s=!0,d||(d=o);return}else if(u==="--helpAll"||u==="--help-all"||u==="-H"){s="all",d||(d=o);return}if(d){r.push(u);return}if(o.kind===B){d=o,r.push(u);return}let l=M(u),p=u,c=o.getRoutingTargetForInput(p);if(t.caseStyle==="allow-kebab-for-camel"&&!c&&(c=o.getRoutingTargetForInput(l),c&&(p=l)),!c){let f=o.getDefaultCommand();if(f){m=!1,i=[o,""],r.push(u),o=f;return}return{input:u,routeMap:o}}m=!1,i=[o,u],o=c,a.push(u)},finish:()=>{if(d=d??o,d.kind===R&&!s){let l=d.getDefaultCommand();l&&(i=[d,""],d=l,m=!1)}let u=i?i[0].getOtherAliasesForInput(i[1],t.caseStyle):{original:[],"convert-camel-to-kebab":[]};return{target:d,unprocessedInputs:r,helpRequested:s,prefix:a,rootLevel:m,aliases:u}}}}async function Ae({root:e,defaultText:t,config:n},a,r){let i=t;if(r.locale){let l=n.localization.loadText(r.locale);if(l)i=l;else{let p=S(r.process,r.process.stderr,n.documentation),c=i.noTextAvailableForLocale({requestedLocale:r.locale,defaultLocale:n.localization.defaultLocale,ansiColor:p});r.process.stderr.write(p?`\x1B[1m\x1B[33m${c}\x1B[39m\x1B[22m `:`${c} `)}}if(n.versionInfo?.getLatestVersion&&!J(r.process,"STRICLI_SKIP_VERSION_CHECK")){let l;"currentVersion"in n.versionInfo?l=n.versionInfo.currentVersion:l=await n.versionInfo.getCurrentVersion.call(r);let p=await n.versionInfo.getLatestVersion.call(r,l);if(p&&l!==p){let c=S(r.process,r.process.stderr,n.documentation),f=i.currentVersionIsNotLatest({currentVersion:l,latestVersion:p,upgradeCommand:n.versionInfo.upgradeCommand,ansiColor:c});r.process.stderr.write(c?`\x1B[1m\x1B[33m${f}\x1B[39m\x1B[22m `:`${f} `)}}let o=a.slice();if(n.versionInfo&&(o[0]==="--version"||o[0]==="-v")){let l;return"currentVersion"in n.versionInfo?l=n.versionInfo.currentVersion:l=await n.versionInfo.getCurrentVersion.call(r),r.process.stdout.write(l+` `),N.Success}let d=te(e,n.scanner,[n.name]),m;for(;o.length>0&&!m;){let l=o.shift();m=d.next(l)}if(m){let l=xe(m.routeMap,n.scanner.caseStyle,n.completion),p=G(m.input,l,n.scanner.distanceOptions).map(T=>`\`${T}\``),c=S(r.process,r.process.stderr,n.documentation),f=i.noCommandRegisteredForInput({input:m.input,corrections:p,ansiColor:c});return r.process.stderr.write(c?`\x1B[1m\x1B[31m${f}\x1B[39m\x1B[22m `:`${f} `),N.UnknownCommand}let s=d.finish();if(s.helpRequested||s.target.kind===R){let l=S(r.process,r.process.stdout,n.documentation);return r.process.stdout.write(s.target.formatHelp({prefix:s.prefix,includeVersionFlag:!!n.versionInfo&&s.rootLevel,includeArgumentEscapeSequenceFlag:n.scanner.allowArgumentEscapeSequence,includeHelpAllFlag:s.helpRequested==="all"||n.documentation.alwaysShowHelpAllFlag,includeHidden:s.helpRequested==="all",config:n.documentation,aliases:s.aliases[n.documentation.caseStyle],text:i,ansiColor:l})),N.Success}let u;if("forCommand"in r)try{u=await r.forCommand({prefix:s.prefix})}catch(l){let p=S(r.process,r.process.stderr,n.documentation),c=i.exceptionWhileLoadingCommandContext(l,p);return r.process.stderr.write(p?`\x1B[1m\x1B[31m${c}\x1B[39m\x1B[22m`:c),N.ContextLoadError}else u=r;return Fe(s.target,{context:u,inputs:s.unprocessedInputs,scannerConfig:n.scanner,documentationConfig:n.documentation,errorFormatting:i,determineExitCode:n.determineExitCode})}function W(e,t){return t==="convert-camel-to-kebab"?A(e):e}function Ee(e,t){return t==="convert-camel-to-kebab"?`no-${A(e)}`:`no${e[0].toUpperCase()}${e.slice(1)}`}function he(e){let t=e.scanner?.caseStyle??"original",n;if(e.documentation?.caseStyle){if(t==="original"&&e.documentation.caseStyle==="convert-camel-to-kebab")throw new x("Cannot convert route and flag names on display but scan as original");n=e.documentation.caseStyle}else t==="allow-kebab-for-camel"?n="convert-camel-to-kebab":n=t;let a={caseStyle:t,allowArgumentEscapeSequence:e.scanner?.allowArgumentEscapeSequence??!1,distanceOptions:e.scanner?.distanceOptions??{threshold:7,weights:{insertion:1,deletion:3,substitution:2,transposition:0}}},r={alwaysShowHelpAllFlag:e.documentation?.alwaysShowHelpAllFlag??!1,useAliasInUsageLine:e.documentation?.useAliasInUsageLine??!1,onlyRequiredInUsageLine:e.documentation?.onlyRequiredInUsageLine??!1,caseStyle:n,disableAnsiColor:e.documentation?.disableAnsiColor??!1},i={includeAliases:e.completion?.includeAliases??r.useAliasInUsageLine,includeHiddenRoutes:e.completion?.includeHiddenRoutes??!1,...e.completion};return{...e,scanner:a,completion:i,documentation:r,localization:{defaultLocale:"en",loadText:Te,...e.localization}}}function Ne(e,t){let n=he(t);if(e.kind===B&&n.versionInfo){if(e.usesFlag("version"))throw new x("Unable to use command with flag --version as root when version info is supplied");if(e.usesFlag("v"))throw new x("Unable to use command with alias -v as root when version info is supplied")}let a=n.localization.loadText(n.localization.defaultLocale);if(!a)throw new x(`No text available for the default locale "${n.localization.defaultLocale}"`);return{root:e,config:n,defaultText:a}}function*be(e,t,n){for(let a of e.getAllEntries()){if(a.hidden)continue;let r=a.name[n],i=[...t,r];a.target.kind===R?yield*be(a.target,i,n):yield[i,a.target,a.aliases]}}function Pe({root:e,defaultText:t,config:n},a){let r=t;if(a){let o=n.localization.loadText(a);if(o)r=o;else throw new x(`Application does not support "${a}" locale`)}let i=[];return e.kind===B?i.push([[n.name],e,[]]):i.push(...be(e,[n.name],n.documentation.caseStyle)),i.map(([o,d,m])=>[o.join(" "),d.formatHelp({prefix:o,config:n.documentation,includeVersionFlag:!!n.versionInfo&&o.length===1,includeArgumentEscapeSequenceFlag:n.scanner.allowArgumentEscapeSequence,includeHelpAllFlag:n.documentation.alwaysShowHelpAllFlag,includeHidden:!1,aliases:m,text:r,ansiColor:!1})])}async function Se({parameters:e},t){try{let n=ne(e,t.scannerConfig);for(let a of t.inputs)n.next(a);return await n.proposeCompletions(t)}catch{return[]}}async function Re(e,{partial:t,scannerConfig:n,completionConfig:a}){let r=e.getAllEntries();a.includeHiddenRoutes||(r=r.filter(o=>!o.hidden));let i=n.caseStyle==="allow-kebab-for-camel"?"convert-camel-to-kebab":n.caseStyle;return r.flatMap(o=>{let d=o.target.kind===B?"routing-target:command":"routing-target:route-map",m=o.target.brief,s={kind:d,completion:o.name[i],brief:m};return a.includeAliases?[s,...o.aliases.map(u=>({kind:d,completion:u,brief:m}))]:[s]}).filter(({completion:o})=>o.startsWith(t))}async function Oe({root:e,config:t,defaultText:n},a,r){if(a.length===0)return[];let i=te(e,t.scanner,[]),o=a.slice(0,-1),d;for(;o.length>0&&!d;){let l=o.shift();d=i.next(l)}if(d)return[];let m=i.finish();if(m.helpRequested)return[];let s;if("forCommand"in r)try{s=await r.forCommand({prefix:m.prefix})}catch{return[]}else s=r;let u=a[a.length-1];return m.target.kind===R?Re(m.target,{context:s,partial:u,scannerConfig:t.scanner,completionConfig:t.completion}):Se(m.target,{context:s,inputs:m.unprocessedInputs,partial:u,scannerConfig:t.scanner,completionConfig:t.completion,text:n,includeVersionFlag:!!t.versionInfo&&m.rootLevel})}function an(e,t){return e.includes(t)}function Be(e){return t=>{if(!an(e,t))throw new SyntaxError(`${t} is not one of (${e.join("|")})`);return t}}function de(e){return"default"in e&&typeof e.default<"u"}function D(e){return e.optional??de(e)}function ve(e){return`(${e})`}function Xe(e){return`[${e}]`}function we(e){return`${e}...`}function sn(e){return`<${e}>`}function ln(e){return`[<${e}>]`}function mn(e){return`<${e}>...`}function re(e,t){let n=Object.entries(e.flags??{}).filter(([,i])=>!(i.hidden||t.config.onlyRequiredInUsageLine&&D(i))).map(([i,o])=>{let d=t.config.caseStyle==="convert-camel-to-kebab"?`--${A(i)}`:`--${i}`;if(e.aliases&&t.config.useAliasInUsageLine){let s=Object.entries(e.aliases).filter(u=>u[1]===i);s.length===1&&s[0]&&(d=`-${s[0][0]}`)}if(o.kind==="boolean")return[o,d];if(o.kind==="enum"&&typeof o.placeholder!="string")return[o,`${d} ${o.values.join("|")}`];let m=o.placeholder??"value";return[o,`${d} ${m}`]}).map(([i,o])=>i.kind==="parsed"&&i.variadic?D(i)?we(Xe(o)):we(ve(o)):D(i)?Xe(o):ve(o)),a=[],r=e.positional;if(r)if(r.kind==="array")a=[mn(r.parameter.placeholder??"args")];else{let i=r.parameters;t.config.onlyRequiredInUsageLine&&(i=i.filter(o=>!o.optional&&typeof o.default>"u")),a=i.map((o,d)=>{let m=o.placeholder??`arg${d+1}`;return o.optional||typeof o.default<"u"?ln(m):sn(m)})}return[...t.prefix,...n,...a].join(" ")}function oe(e,t,n){let{keywords:a,briefs:r}=n.text,i=Object.entries(e).filter(([,m])=>!(m.hidden&&!n.includeHidden)),o=i.some(([,m])=>D(m)),d=i.map(([m,s])=>{let u=Object.entries(t).filter(f=>f[1]===m).map(([f])=>`-${f}`),l="--"+W(m,n.config.caseStyle);if(s.kind==="boolean"&&s.default!==!1){let f=Ee(m,n.config.caseStyle);l=`${l}/--${f}`}D(s)?l=`[${l}]`:o&&(l=` ${l}`),s.kind==="parsed"&&s.variadic&&(l=`${l}...`);let p=[];if(s.kind==="enum"){let f=s.values.join("|");p.push(f)}if(de(s)){let f=n.ansiColor?`\x1B[90m${a.default}\x1B[39m`:a.default;p.push(`${f} ${s.default===""?'""':String(s.default)}`)}let c=p.length>0?`[${p.join(", ")}]`:void 0;return{aliases:u.join(" "),flagName:l,brief:s.brief,suffix:c,hidden:s.hidden}});if(d.push({aliases:"-h",flagName:o?" --help":"--help",brief:r.help}),n.includeHelpAllFlag){let m=W("helpAll",n.config.caseStyle);d.push({aliases:"-H",flagName:o?` --${m}`:`--${m}`,brief:r.helpAll,hidden:!n.config.alwaysShowHelpAllFlag})}return n.includeVersionFlag&&d.push({aliases:"-v",flagName:o?" --version":"--version",brief:r.version}),n.includeArgumentEscapeSequenceFlag&&d.push({aliases:"",flagName:o?" --":"--",brief:r.argumentEscapeSequence}),L(d.map(m=>n.ansiColor?[m.hidden?`\x1B[90m${m.aliases}\x1B[39m`:`\x1B[97m${m.aliases}\x1B[39m`,m.hidden?`\x1B[90m${m.flagName}\x1B[39m`:`\x1B[97m${m.flagName}\x1B[39m`,m.hidden?`\x1B[90m${m.brief}\x1B[39m`:`\x1B[03m${m.brief}\x1B[23m`,m.suffix??""]:[m.aliases,m.flagName,m.brief,m.suffix??""]),[" "," "," "])}function*ae(e){if(yield e.config.useAliasInUsageLine?"-h":"--help",e.includeHelpAllFlag){let t=W("helpAll",e.config.caseStyle);yield e.config.useAliasInUsageLine?"-H":`--${t}`}e.includeVersionFlag&&(yield e.config.useAliasInUsageLine?"-v":"--version")}function $e(e,t){if(e.kind==="array"){let r=e.parameter.placeholder??"args",i=t.ansiColor?`\x1B[97m${r}...\x1B[39m`:`${r}...`,o=t.ansiColor?`\x1B[3m${e.parameter.brief}\x1B[23m`:e.parameter.brief;return L([[i,o]],[" "])}let{keywords:n}=t.text,a=e.parameters.some(r=>r.optional);return L(e.parameters.map((r,i)=>{let o=r.placeholder??`arg${i+1}`,d;return r.optional?o=`[${o}]`:a&&(o=` ${o}`),r.default&&(d=`[${t.ansiColor?`\x1B[90m${n.default}\x1B[39m`:n.default} ${r.default}]`),[t.ansiColor?`\x1B[97m${o}\x1B[39m`:o,t.ansiColor?`\x1B[3m${r.brief}\x1B[23m`:r.brief,d??""]}),[" "," "])}function*Le(e,t,n){let{brief:a,fullDescription:r,customUsage:i}=t,{headers:o}=n.text,d=n.prefix.join(" ");if(yield n.ansiColor?`\x1B[1m${o.usage}\x1B[22m`:o.usage,i)for(let s of i)if(typeof s=="string")yield` ${d} ${s}`;else{let u=n.ansiColor?`\x1B[3m${s.brief}\x1B[23m`:s.brief;yield` ${d} ${s.input} ${u}`}else yield` ${re(e,n)}`;for(let s of ae(n))yield` ${d} ${s}`;if(yield"",yield r??a,n.aliases&&n.aliases.length>0){let s=n.prefix.slice(0,-1).join(" ");yield"",yield n.ansiColor?`\x1B[1m${o.aliases}\x1B[22m`:o.aliases;for(let u of n.aliases)yield` ${s} ${u}`}yield"",yield n.ansiColor?`\x1B[1m${o.flags}\x1B[22m`:o.flags;for(let s of oe(e.flags??{},e.aliases??{},n))yield` ${s}`;let m=e.positional??{kind:"tuple",parameters:[]};if(m.kind==="array"||m.parameters.length>0){yield"",yield n.ansiColor?`\x1B[1m${o.arguments}\x1B[22m`:o.arguments;for(let s of $e(m,n))yield` ${s}`}}function dn(e,t){for(let n of t)if(n in e)throw new x(`Unable to use reserved flag --${n}`)}function un(e,t){for(let n of t)if(n in e)throw new x(`Unable to use reserved alias -${n}`)}function*pn(e){yield`no-${A(e)}`,yield`no${e[0].toUpperCase()}${e.slice(1)}`}function cn(e){let t=Object.entries(e).filter(([,n])=>n.kind==="boolean"&&!n.optional);for(let[n]of t)for(let a of pn(n))if(a in e)throw new x(`Unable to allow negation for --${n} as it conflicts with --${a}`)}function ke(e){let{flags:t={},aliases:n={}}=e.parameters;dn(t,["help","helpAll","help-all"]),un(n,["h","H"]),cn(t);let a;return"func"in e?a=async()=>e.func:a=e.loader,{kind:B,loader:a,parameters:e.parameters,get brief(){return e.docs.brief},formatUsageLine:r=>re(e.parameters,r),formatHelp:r=>[...Le(e.parameters,e.docs,r)].join(` `)+` `,usesFlag:r=>r in t||r in n}}function*Ie(e,t,n){let{brief:a,fullDescription:r,hideRoute:i}=t,{headers:o}=n.text;yield n.ansiColor?`\x1B[1m${o.usage}\x1B[22m`:o.usage;for(let[l,p]of Object.entries(e))if(!i||!i[l]||n.includeHidden){let c=n.config.caseStyle==="convert-camel-to-kebab"?A(l):l;yield` ${p.formatUsageLine({...n,prefix:[...n.prefix,c]})}`}let d=n.prefix.join(" ");for(let l of ae(n))yield` ${d} ${l}`;if(yield"",yield r??a,n.aliases&&n.aliases.length>0){let l=n.prefix.slice(0,-1).join(" ");yield"",yield n.ansiColor?`\x1B[1m${o.aliases}\x1B[22m`:o.aliases;for(let p of n.aliases)yield` ${l} ${p}`}yield"",yield n.ansiColor?`\x1B[1m${o.flags}\x1B[22m`:o.flags;for(let l of oe({},{},n))yield` ${l}`;yield"",yield n.ansiColor?`\x1B[1m${o.commands}\x1B[22m`:o.commands;let s=Object.entries(e).filter(([l])=>!i||!i[l]||n.includeHidden).map(([l,p])=>({routeName:W(l,n.config.caseStyle),brief:p.brief,hidden:i&&i[l]})),u=L(s.map(l=>n.ansiColor?[l.hidden?`\x1B[90m${l.routeName}\x1B[39m`:`\x1B[97m${l.routeName}\x1B[39m`,l.hidden?`\x1B[90m${l.brief}\x1B[39m`:`\x1B[03m${l.brief}\x1B[23m`]:[l.routeName,l.brief]),[" "]);for(let l of u)yield` ${l}`}function De({routes:e,defaultCommand:t,docs:n,aliases:a}){if(Object.entries(e).length===0)throw new x("Route map must contain at least one route");let r=a??{},i=new Map;for(let[m,s]of Object.entries(r)){if(m in e)throw new x(`Cannot use "${m}" as an alias when a route with that name already exists`);let u=i.get(s)??[];i.set(s,[...u,m])}let o=t?e[t]:void 0;if(o&&o.kind===R)throw new x(`Cannot use "${t}" as the default command because it is not a Command`);let d=m=>{if(m in r)return r[m];if(m in e)return m};return{kind:R,get brief(){return n.brief},formatUsageLine(m){let s=this.getAllEntries().filter(u=>!u.hidden).map(u=>u.name[m.config.caseStyle]);return`${m.prefix.join(" ")} ${s.join("|")} ...`},formatHelp:m=>[...Ie(e,n,m)].join(` `)+` `,getDefaultCommand:()=>o,getOtherAliasesForInput:(m,s)=>{if(t){if(m===t)return{original:[""],"convert-camel-to-kebab":[""]};if(m==="")return{original:[t],"convert-camel-to-kebab":[t]}}let u=M(m),l=d(m);if(!l&&s==="allow-kebab-for-camel"&&(l=d(u)),!l)return{original:[],"convert-camel-to-kebab":[]};let p=[l,...i.get(l)??[]].filter(c=>c!==m&&c!==u);return{original:p,"convert-camel-to-kebab":p.map(A)}},getRoutingTargetForInput:m=>{let s=m in r?r[m]:m;return e[s]},getAllEntries(){let m=n.hideRoute;return Object.entries(e).map(([s,u])=>({name:{original:s,"convert-camel-to-kebab":A(s)},target:u,aliases:i.get(s)??[],hidden:m?.[s]??!1}))}}}async function fn(e,t,n){let a=await Ae(e,t,n);n.process.exitCode=a}0&&(module.exports={AliasNotFoundError,ArgumentParseError,ArgumentScannerError,EnumValidationError,ExitCode,FlagNotFoundError,InvalidNegatedFlagSyntaxError,UnexpectedFlagError,UnexpectedPositionalError,UnsatisfiedFlagError,UnsatisfiedPositionalError,booleanParser,buildApplication,buildChoiceParser,buildCommand,buildRouteMap,formatMessageForArgumentScannerError,generateHelpTextForAllCommands,looseBooleanParser,numberParser,proposeCompletions,run,text_en});