cli-kiss 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/Usage.ts +1 -0
- package/tests/unit.command.usage.ts +3 -0
- package/tests/unit.runner.cycle.ts +2 -0
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var z=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var ht=Object.prototype.hasOwnProperty;var pt=t=>{throw TypeError(t)};var wt=(t,e)=>{for(var n in e)z(t,n,{get:e[n],enumerable:!0})},ft=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of yt(e))!ht.call(t,o)&&o!==n&&z(t,o,{get:()=>e[o],enumerable:!(r=mt(e,o))||r.enumerable});return t};var bt=t=>ft(z({},"__esModule",{value:!0}),t);var X=(t,e,n)=>e.has(t)||pt("Cannot "+n);var c=(t,e,n)=>(X(t,e,"read from private field"),n?n.call(t):e.get(t)),b=(t,e,n)=>e.has(t)?pt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),h=(t,e,n,r)=>(X(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),w=(t,e,n)=>(X(t,e,"access private method"),n);var lt=(t,e,n,r)=>({set _(o){h(t,e,o,n)},get _(){return c(t,e,r)}});var _t={};wt(_t,{ReaderArgs:()=>j,TypoError:()=>d,TypoGrid:()=>P,TypoString:()=>s,TypoSupport:()=>V,TypoText:()=>p,command:()=>kt,commandChained:()=>At,commandWithSubcommands:()=>$t,operation:()=>Vt,optionFlag:()=>Kt,optionRepeatable:()=>jt,optionSingleValue:()=>Nt,positionalOptional:()=>qt,positionalRequired:()=>Yt,positionalVariadics:()=>Ht,runAsCliAndExit:()=>Xt,typeBigInt:()=>Lt,typeBoolean:()=>q,typeDate:()=>vt,typeDecode:()=>C,typeList:()=>Wt,typeMapped:()=>Ft,typeNumber:()=>Gt,typeOneOf:()=>Dt,typeString:()=>Bt,typeTuple:()=>Mt,typeUrl:()=>Et,typoStyleConstants:()=>f,typoStyleFailure:()=>ut,typoStyleQuote:()=>x,typoStyleUserInput:()=>y,usageToStyledLines:()=>it});module.exports=bt(_t);var ut={fgColor:"darkRed",bold:!0},f={fgColor:"darkCyan",bold:!0},y={fgColor:"darkBlue",bold:!0},x={fgColor:"darkYellow",bold:!0},G,N,s=class{constructor(e,n={}){b(this,G);b(this,N);h(this,G,e),h(this,N,n)}getRawString(){return c(this,G)}computeStyledString(e){return e.computeStyledString(c(this,G),c(this,N))}};G=new WeakMap,N=new WeakMap;var T,Z=class Z{constructor(...e){b(this,T);h(this,T,[]);for(let n of e)n instanceof Z?this.pushText(n):n instanceof s?this.pushString(n):typeof n=="string"&&this.pushString(new s(n))}pushString(e){c(this,T).push(e)}pushText(e){for(let n of c(e,T))c(this,T).push(n)}computeStyledString(e){return c(this,T).map(n=>n.computeStyledString(e)).join("")}computeRawString(){return c(this,T).map(e=>e.getRawString()).join("")}computeRawLength(){let e=0;for(let n of c(this,T))e+=n.getRawString().length;return e}};T=new WeakMap;var p=Z,A,P=class{constructor(){b(this,A);h(this,A,[])}pushRow(e){c(this,A).push(e)}computeStyledGrid(e){let n=new Array,r=new Array;for(let o of c(this,A))for(let i=0;i<o.length;i++){let l=o[i].computeRawLength();(n[i]===void 0||l>n[i])&&(n[i]=l)}for(let o of c(this,A)){let i=new Array;for(let a=0;a<o.length;a++){let l=o[a],u=l.computeStyledString(e);if(i.push(u),a<o.length-1){let g=l.computeRawLength(),U=" ".repeat(n[a]-g);i.push(U)}}r.push(i)}return r}};A=new WeakMap;var L,_=class _ extends Error{constructor(n,r){let o=new p;o.pushText(n),r instanceof Error?o.pushString(new s(`: ${r.message}`)):r instanceof _?(o.pushString(new s(": ")),o.pushText(c(r,L))):r!==void 0&&o.pushString(new s(`: ${String(r)}`));super(o.computeRawString());b(this,L);h(this,L,o)}computeStyledString(n){return c(this,L).computeStyledString(n)}};L=new WeakMap;var d=_,I,S=class S{constructor(e){b(this,I);h(this,I,e)}static none(){return new S("none")}static tty(){return new S("tty")}static mock(){return new S("mock")}static inferFromProcess(){if(!process)return S.none();if(process.env){if(process.env.FORCE_COLOR==="0")return S.none();if(process.env.FORCE_COLOR)return S.tty();if("NO_COLOR"in process.env)return S.none()}return!process.stdout||!process.stdout.isTTY?S.none():S.tty()}computeStyledString(e,n){if(c(this,I)==="none")return e;if(c(this,I)==="tty"){let r=n.fgColor?Rt[n.fgColor]:"",o=n.bgColor?It[n.bgColor]:"",i=n.bold?Ct:"",a=n.dim?St:"",l=n.italic?Tt:"",u=n.underline?Ut:"",g=n.strikethrough?Ot:"";return`${r}${o}${i}${a}${l}${u}${g}${e}${xt}`}if(c(this,I)==="mock"){let r=n.fgColor?`{${e}}@${n.fgColor}`:e,o=n.bgColor?`{${r}}#${n.bgColor}`:r,i=n.bold?`{${o}}+`:o,a=n.dim?`{${i}}-`:i,l=n.italic?`{${a}}*`:a,u=n.underline?`{${l}}_`:l;return n.strikethrough?`{${u}}~`:u}throw new Error(`Unknown TypoSupport kind: ${c(this,I)}`)}computeStyledErrorMessage(e){return[this.computeStyledString("Error:",ut),e instanceof d?e.computeStyledString(this):e instanceof Error?e.message:String(e)].join(" ")}};I=new WeakMap;var V=S,xt="\x1B[0m",Ct="\x1B[1m",St="\x1B[2m",Tt="\x1B[3m",Ut="\x1B[4m",Ot="\x1B[9m",Rt={darkBlack:"\x1B[30m",darkRed:"\x1B[31m",darkGreen:"\x1B[32m",darkYellow:"\x1B[33m",darkBlue:"\x1B[34m",darkMagenta:"\x1B[35m",darkCyan:"\x1B[36m",darkWhite:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m"},It={darkBlack:"\x1B[40m",darkRed:"\x1B[41m",darkGreen:"\x1B[42m",darkYellow:"\x1B[43m",darkBlue:"\x1B[44m",darkMagenta:"\x1B[45m",darkCyan:"\x1B[46m",darkWhite:"\x1B[47m",brightBlack:"\x1B[100m",brightRed:"\x1B[101m",brightGreen:"\x1B[102m",brightYellow:"\x1B[103m",brightBlue:"\x1B[104m",brightMagenta:"\x1B[105m",brightCyan:"\x1B[106m",brightWhite:"\x1B[107m"};function kt(t,e){return{getInformation(){return t},createFactory(n){function r(){let o=e.generateUsage();return{breadcrumbs:o.positionals.map(i=>v(i.label)),information:t,positionals:o.positionals,subcommands:[],options:o.options}}try{let o=e.createFactory(n),i=n.consumePositional();if(i!==void 0)throw Error(`Unexpected argument: "${i}"`);return{generateUsage:r,createInstance(){let a=o.createInstance();return{async executeWithContext(l){return await a.executeWithContext(l)}}}}}catch(o){return{generateUsage:r,createInstance(){throw o}}}}}}function $t(t,e,n){return{getInformation(){return t},createFactory(r){try{let o=e.createFactory(r),i=r.consumePositional();if(i===void 0)throw new d(new p(new s("<SUBCOMMAND>",y),new s(": Is required, but was not provided")));let a=n[i];if(a===void 0)throw new d(new p(new s("<SUBCOMMAND>",y),new s(": Invalid value: "),new s(`"${i}"`,x)));let l=a.createFactory(r);return{generateUsage(){let u=e.generateUsage(),g=l.generateUsage();return{breadcrumbs:u.positionals.map(U=>v(U.label)).concat([Pt(i)]).concat(g.breadcrumbs),information:g.information,positionals:u.positionals.concat(g.positionals),subcommands:g.subcommands,options:u.options.concat(g.options)}},createInstance(){let u=o.createInstance(),g=l.createInstance();return{async executeWithContext(U){return await g.executeWithContext(await u.executeWithContext(U))}}}}}catch(o){return{generateUsage(){let i=e.generateUsage();return{breadcrumbs:i.positionals.map(a=>v(a.label)).concat([v("<SUBCOMMAND>")]),information:t,positionals:i.positionals,subcommands:Object.entries(n).map(a=>{let l=a[1].getInformation();return{name:a[0],description:l.description,hint:l.hint}}),options:i.options}},createInstance(){throw o}}}}}}function At(t,e,n){return{getInformation(){return t},createFactory(r){try{let o=e.createFactory(r),i=n.createFactory(r);return{generateUsage(){let a=e.generateUsage(),l=i.generateUsage();return{breadcrumbs:a.positionals.map(u=>v(u.label)).concat(l.breadcrumbs),information:l.information,positionals:a.positionals.concat(l.positionals),subcommands:l.subcommands,options:a.options.concat(l.options)}},createInstance(){let a=o.createInstance(),l=i.createInstance();return{async executeWithContext(u){return await l.executeWithContext(await a.executeWithContext(u))}}}}}catch(o){return{generateUsage(){let i=e.generateUsage();return{breadcrumbs:i.positionals.map(a=>v(a.label)).concat([v("[REST]...")]),information:t,positionals:i.positionals,subcommands:[],options:i.options}},createInstance(){throw o}}}}}}function v(t){return{positional:t}}function Pt(t){return{command:t}}function Vt(t,e){return{generateUsage(){let n=new Array;for(let o in t.options){let i=t.options[o];i&&n.push(i.generateUsage())}let r=new Array;for(let o of t.positionals)r.push(o.generateUsage());return{options:n,positionals:r}},createFactory(n){let r={};for(let i in t.options){let a=t.options[i];r[i]=a.createGetter(n)}let o=[];for(let i of t.positionals)o.push(i.consumePositionals(n));return{createInstance(){let i={};for(let a in r)i[a]=r[a].getValue();return{executeWithContext(a){return e(a,{options:i,positionals:o})}}}}}}}var q={label:"BOOLEAN",decoder(t){let e=t.toLowerCase();if(e==="true"||e==="yes")return!0;if(e==="false"||e==="no")return!1;throw new d(new p(new s("Invalid boolean: "),new s(`"${t}"`,x)))}},vt={label:"DATE",decoder(t){let e=Date.parse(t);if(isNaN(e))throw new d(new p(new s("Invalid date (ISO_8601): "),new s(`"${t}"`,x)));return new Date(e)}},Et={label:"URL",decoder(t){try{return new URL(t)}catch{throw new d(new p(new s("Invalid URL: "),new s(`"${t}"`,x)))}}},Bt={label:"STRING",decoder(t){return t}},Gt={label:"NUMBER",decoder(t){try{return Number(t)}catch{throw new d(new p(new s("Invalid number: "),new s(`"${t}"`,x)))}}},Lt={label:"BIGINT",decoder(t){try{return BigInt(t)}catch{throw new d(new p(new s("Invalid integer: "),new s(`"${t}"`,x)))}}};function Ft(t,e){return{label:e.label,decoder:n=>e.decoder(C(t,n,()=>new p(new s(t.label,y))))}}function Dt(t,e){let n=new Set(e);return{label:t.label,decoder(r){let o=C(t,r,()=>new p(new s(t.label,y)));if(n.has(o))return o;let i=[];for(let a of e){if(i.length>=5){i.push(new s("..."));break}i.length>0&&i.push(new s(" | ")),i.push(new s(`"${a}"`,x))}throw new d(new p(new s("Invalid value: "),new s(`"${r}"`,x),new s(" (expected one of: "),...i,new s(")")))}}}function Mt(t,e=","){return{label:t.map(n=>n.label).join(e),decoder(n){let r=n.split(e,t.length);if(r.length!==t.length)throw new d(new p(new s("Invalid tuple: "),new s(`"${n}"`,x),new s(` (expected ${t.length} parts)`)));return r.map((o,i)=>C(t[i],o,()=>new p(new s(t[i].label,y),new s(`@${i}`))))}}}function Wt(t,e=","){return{label:`${t.label}[${e}${t.label}]...`,decoder(n){return n.split(e).map((r,o)=>C(t,r,()=>new p(new s(t.label,y),new s(`@${o}`))))}}}function C(t,e,n){try{return t.decoder(e)}catch(r){throw new d(n(),r)}}function Kt(t){let e=`<${q.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,long:t.long,short:t.short,label:void 0}},createGetter(n){let r=tt(n,{...t,valued:!1});return{getValue(){let o=n.getOptionValues(r);if(o.length>1)throw new d(new p(new s(`--${t.long}`,f),new s(": Must not be set multiple times")));let i=o[0];if(i===void 0)try{return t.default?t.default():!1}catch(a){throw new d(new p(new s(`--${t.long}`,f),new s(": Failed to get default value")),a)}return C(q,i,()=>new p(new s(`--${t.long}`,f),new s(": "),new s(e,y)))}}}}}function Nt(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,long:t.long,short:t.short,label:e}},createGetter(n){let r=tt(n,{...t,valued:!0});return{getValue(){let o=n.getOptionValues(r);if(o.length>1)throw new d(new p(new s(`--${t.long}`,f),new s(": Requires a single value, but got multiple")));let i=o[0];if(i===void 0)try{return t.default()}catch(a){throw new d(new p(new s(`--${t.long}`,f),new s(": Failed to get default value")),a)}return C(t.type,i,()=>new p(new s(`--${t.long}`,f),new s(": "),new s(e,y)))}}}}}function jt(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,long:t.long,short:t.short,label:e}},createGetter(n){let r=tt(n,{...t,valued:!0});return{getValue(){return n.getOptionValues(r).map(o=>C(t.type,o,()=>new p(new s(`--${t.long}`,f),new s(": "),new s(e,y))))}}}}}function tt(t,e){let{long:n,short:r,aliases:o,valued:i}=e,a=n?[n]:[];o?.longs&&a.push(...o?.longs);let l=r?[r]:[];return o?.shorts&&l.push(...o?.shorts),t.registerOption({longs:a,shorts:l,valued:i})}function Yt(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,label:e}},consumePositionals(n){let r=n.consumePositional();if(r===void 0)throw new d(new p(new s(e,y),new s(": Is required, but was not provided")));return C(t.type,r,()=>new p(new s(e,y)))}}}function qt(t){let e=`[${t.label??t.type.label}]`;return{generateUsage(){return{description:t.description,hint:t.hint,label:e}},consumePositionals(n){let r=n.consumePositional();if(r===void 0)try{return t.default()}catch(o){throw new d(new p(new s(e,y),new s(": Failed to get default value")),o)}return C(t.type,r,()=>new p(new s(e,y)))}}}function Ht(t){let e=`[${t.label??t.type.label}]`;return{generateUsage(){return{description:t.description,hint:t.hint,label:`${e}...`+(t.endDelimiter?`["${t.endDelimiter}"]`:"")}},consumePositionals(n){let r=[];for(;;){let o=n.consumePositional();if(o===void 0||o===t.endDelimiter)break;r.push(C(t.type,o,()=>new p(new s(e,y))))}return r}}}var Y,F,$,E,O,B,D,m,H,ct,et,gt,nt,k,j=class{constructor(e){b(this,m);b(this,Y);b(this,F);b(this,$);b(this,E);b(this,O);b(this,B);b(this,D);h(this,Y,e),h(this,F,0),h(this,$,!1),h(this,E,new Map),h(this,O,new Map),h(this,B,new Map),h(this,D,new Map)}registerOption(e){let n=[...e.longs.map(r=>`--${r}`),...e.shorts.map(r=>`-${r}`)].join(", ");for(let r of e.longs){if(c(this,E).has(r))throw new Error(`Option already registered: --${r}`);c(this,E).set(r,n)}for(let r of e.shorts){if(c(this,O).has(r))throw new Error(`Option already registered: -${r}`);for(let o=0;o<r.length;o++){let i=r.slice(0,o);if(c(this,O).has(i))throw new Error(`Option -${r} overlap with shorter option: -${i}`)}for(let o of c(this,O).keys())if(o.startsWith(r))throw new Error(`Option -${r} overlap with longer option: -${o}`);c(this,O).set(r,n)}return c(this,B).set(n,e.valued),c(this,D).set(n,new Array),n}getOptionValues(e){let n=c(this,D).get(e);if(n===void 0)throw new Error(`Unregistered option: ${e}`);return n}consumePositional(){for(;;){let e=w(this,m,H).call(this);if(e===null)return;if(w(this,m,ct).call(this,e))return e}}};Y=new WeakMap,F=new WeakMap,$=new WeakMap,E=new WeakMap,O=new WeakMap,B=new WeakMap,D=new WeakMap,m=new WeakSet,H=function(){let e=c(this,Y)[c(this,F)];return e===void 0?null:(lt(this,F)._++,!c(this,$)&&e==="--"?(h(this,$,!0),w(this,m,H).call(this)):e)},ct=function(e){if(c(this,$))return!0;if(e.startsWith("--")){let n=e.indexOf("=");return n===-1?w(this,m,et).call(this,e.slice(2),null):w(this,m,et).call(this,e.slice(2,n),e.slice(n+1)),!1}if(e.startsWith("-")){let n=1,r=2;for(;r<=e.length;){let o=w(this,m,gt).call(this,e.slice(n,r),e.slice(r));if(o===!0)return!1;o===!1&&(n=r),r++}throw new d(new p(new s(`-${e.slice(n)}`,f),new s(": Unexpected unknown option")))}return!0},et=function(e,n){let r=`--${e}`,o=c(this,E).get(e);if(o!==void 0)return n!==null?w(this,m,k).call(this,o,n):c(this,B).get(o)?w(this,m,k).call(this,o,w(this,m,nt).call(this,r)):w(this,m,k).call(this,o,"true");throw new d(new p(new s(r,f),new s(": Unexpected unknown option")))},gt=function(e,n){let r=c(this,O).get(e);return r!==void 0?n.startsWith("=")?(w(this,m,k).call(this,r,n.slice(1)),!0):c(this,B).get(r)?(n===""?w(this,m,k).call(this,r,w(this,m,nt).call(this,`-${e}`)):w(this,m,k).call(this,r,n),!0):(w(this,m,k).call(this,r,"true"),n===""):null},nt=function(e){let n=w(this,m,H).call(this);if(n===null)throw new d(new p(new s(e,f),new s(": Requires a value, but got end of input")));if(c(this,$))throw new d(new p(new s(e,f),new s(": Requires a value before "),new s('"--"',x)));if(n.startsWith("-"))throw new d(new p(new s(e,f),new s(": Requires a value, but got: "),new s(`"${n}"`,x)));return n},k=function(e,n){this.getOptionValues(e).push(n)};function it(t){let{cliName:e,commandUsage:n,typoSupport:r}=t,o=new Array,i=[Qt("Usage:").computeStyledString(r),M(e).computeStyledString(r)].concat(n.breadcrumbs.map(l=>{if("positional"in l)return st(l.positional).computeStyledString(r);if("command"in l)return M(l.command).computeStyledString(r);throw new Error(`Unknown breadcrumb: ${JSON.stringify(l)}`)}));o.push(i.join(" ")),o.push("");let a=new p;a.pushString(Jt(n.information.description)),n.information.hint&&(a.pushString(R(" ")),a.pushString(Q(`(${n.information.hint})`))),o.push(a.computeStyledString(r));for(let l of n.information.details??[]){let u=new p;u.pushString(Q(l)),o.push(u.computeStyledString(r))}if(n.positionals.length>0){o.push(""),o.push(rt("Positionals:").computeStyledString(r));let l=new P;for(let u of n.positionals){let g=new Array;g.push(new p(R(" "))),g.push(new p(st(u.label))),g.push(...ot(u)),l.pushRow(g)}o.push(...l.computeStyledGrid(r).map(u=>u.join("")))}if(n.subcommands.length>0){o.push(""),o.push(rt("Subcommands:").computeStyledString(r));let l=new P;for(let u of n.subcommands){let g=new Array;g.push(new p(R(" "))),g.push(new p(M(u.name))),g.push(...ot(u)),l.pushRow(g)}o.push(...l.computeStyledGrid(r).map(u=>u.join("")))}if(n.options.length>0){o.push(""),o.push(rt("Options:").computeStyledString(r));let l=new P;for(let u of n.options){let g=new Array;g.push(new p(R(" "))),u.short?g.push(new p(M(`-${u.short}`),R(", "))):g.push(new p),u.label?g.push(new p(M(`--${u.long}`),R(" "),st(u.label))):g.push(new p(M(`--${u.long}`),Q("[=no]"))),g.push(...ot(u)),l.pushRow(g)}o.push(...l.computeStyledGrid(r).map(u=>u.join("")))}return o}function ot(t){let e=[];return t.description&&(e.push(R(" ")),e.push(zt(t.description))),t.hint&&(e.push(R(" ")),e.push(Q(`(${t.hint})`))),e.length>0?[new p(R(" "),...e)]:[]}function Qt(t){return new s(t,{fgColor:"darkMagenta",bold:!0})}function Jt(t){return new s(t,{bold:!0})}function zt(t){return new s(t)}function rt(t){return new s(t,{fgColor:"darkGreen",bold:!0})}function Q(t){return new s(t,{italic:!0,dim:!0})}function M(t){return new s(t,f)}function st(t){return new s(t,y)}function R(t){return new s(t)}async function Xt(t,e,n,r,o){let i=new j(e),a=o?.usageOnHelp??!0;a&&i.registerOption({shorts:[],longs:["help"],valued:!1});let l=o?.buildVersion;l&&i.registerOption({shorts:[],longs:["version"],valued:!1});let u=Zt(o?.useColors),g=o?.onLogStdOut??console.log,U=o?.onLogStdErr??console.error,W=o?.onExit??process.exit,J=r.createFactory(i);for(;;)try{if(i.consumePositional()===void 0)break}catch{}if(a&&i.getOptionValues("--help").length>0)return g(dt(t,J,u)),W(0);if(l&&i.getOptionValues("--version").length>0)return g([t,l].join(" ")),W(0);try{let K=J.createInstance();try{return await K.executeWithContext(n),W(0)}catch(at){return o?.onExecutionError?o.onExecutionError(at):U(u.computeStyledErrorMessage(at)),W(1)}}catch(K){return U(dt(t,J,u)),U(u.computeStyledErrorMessage(K)),W(1)}}function dt(t,e,n){return it({cliName:t,commandUsage:e.generateUsage(),typoSupport:n}).join(`
|
|
1
|
+
"use strict";var z=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var ht=Object.prototype.hasOwnProperty;var pt=t=>{throw TypeError(t)};var wt=(t,e)=>{for(var n in e)z(t,n,{get:e[n],enumerable:!0})},ft=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of yt(e))!ht.call(t,o)&&o!==n&&z(t,o,{get:()=>e[o],enumerable:!(r=mt(e,o))||r.enumerable});return t};var bt=t=>ft(z({},"__esModule",{value:!0}),t);var X=(t,e,n)=>e.has(t)||pt("Cannot "+n);var c=(t,e,n)=>(X(t,e,"read from private field"),n?n.call(t):e.get(t)),b=(t,e,n)=>e.has(t)?pt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),h=(t,e,n,r)=>(X(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),w=(t,e,n)=>(X(t,e,"access private method"),n);var lt=(t,e,n,r)=>({set _(o){h(t,e,o,n)},get _(){return c(t,e,r)}});var _t={};wt(_t,{ReaderArgs:()=>j,TypoError:()=>d,TypoGrid:()=>P,TypoString:()=>s,TypoSupport:()=>V,TypoText:()=>p,command:()=>kt,commandChained:()=>At,commandWithSubcommands:()=>$t,operation:()=>Vt,optionFlag:()=>Kt,optionRepeatable:()=>jt,optionSingleValue:()=>Nt,positionalOptional:()=>qt,positionalRequired:()=>Yt,positionalVariadics:()=>Ht,runAsCliAndExit:()=>Xt,typeBigInt:()=>Lt,typeBoolean:()=>q,typeDate:()=>vt,typeDecode:()=>C,typeList:()=>Wt,typeMapped:()=>Ft,typeNumber:()=>Gt,typeOneOf:()=>Dt,typeString:()=>Bt,typeTuple:()=>Mt,typeUrl:()=>Et,typoStyleConstants:()=>f,typoStyleFailure:()=>ut,typoStyleQuote:()=>x,typoStyleUserInput:()=>y,usageToStyledLines:()=>it});module.exports=bt(_t);var ut={fgColor:"darkRed",bold:!0},f={fgColor:"darkCyan",bold:!0},y={fgColor:"darkBlue",bold:!0},x={fgColor:"darkYellow",bold:!0},G,N,s=class{constructor(e,n={}){b(this,G);b(this,N);h(this,G,e),h(this,N,n)}getRawString(){return c(this,G)}computeStyledString(e){return e.computeStyledString(c(this,G),c(this,N))}};G=new WeakMap,N=new WeakMap;var T,Z=class Z{constructor(...e){b(this,T);h(this,T,[]);for(let n of e)n instanceof Z?this.pushText(n):n instanceof s?this.pushString(n):typeof n=="string"&&this.pushString(new s(n))}pushString(e){c(this,T).push(e)}pushText(e){for(let n of c(e,T))c(this,T).push(n)}computeStyledString(e){return c(this,T).map(n=>n.computeStyledString(e)).join("")}computeRawString(){return c(this,T).map(e=>e.getRawString()).join("")}computeRawLength(){let e=0;for(let n of c(this,T))e+=n.getRawString().length;return e}};T=new WeakMap;var p=Z,A,P=class{constructor(){b(this,A);h(this,A,[])}pushRow(e){c(this,A).push(e)}computeStyledGrid(e){let n=new Array,r=new Array;for(let o of c(this,A))for(let i=0;i<o.length;i++){let l=o[i].computeRawLength();(n[i]===void 0||l>n[i])&&(n[i]=l)}for(let o of c(this,A)){let i=new Array;for(let a=0;a<o.length;a++){let l=o[a],u=l.computeStyledString(e);if(i.push(u),a<o.length-1){let g=l.computeRawLength(),U=" ".repeat(n[a]-g);i.push(U)}}r.push(i)}return r}};A=new WeakMap;var L,_=class _ extends Error{constructor(n,r){let o=new p;o.pushText(n),r instanceof Error?o.pushString(new s(`: ${r.message}`)):r instanceof _?(o.pushString(new s(": ")),o.pushText(c(r,L))):r!==void 0&&o.pushString(new s(`: ${String(r)}`));super(o.computeRawString());b(this,L);h(this,L,o)}computeStyledString(n){return c(this,L).computeStyledString(n)}};L=new WeakMap;var d=_,I,S=class S{constructor(e){b(this,I);h(this,I,e)}static none(){return new S("none")}static tty(){return new S("tty")}static mock(){return new S("mock")}static inferFromProcess(){if(!process)return S.none();if(process.env){if(process.env.FORCE_COLOR==="0")return S.none();if(process.env.FORCE_COLOR)return S.tty();if("NO_COLOR"in process.env)return S.none()}return!process.stdout||!process.stdout.isTTY?S.none():S.tty()}computeStyledString(e,n){if(c(this,I)==="none")return e;if(c(this,I)==="tty"){let r=n.fgColor?Rt[n.fgColor]:"",o=n.bgColor?It[n.bgColor]:"",i=n.bold?Ct:"",a=n.dim?St:"",l=n.italic?Tt:"",u=n.underline?Ut:"",g=n.strikethrough?Ot:"";return`${r}${o}${i}${a}${l}${u}${g}${e}${xt}`}if(c(this,I)==="mock"){let r=n.fgColor?`{${e}}@${n.fgColor}`:e,o=n.bgColor?`{${r}}#${n.bgColor}`:r,i=n.bold?`{${o}}+`:o,a=n.dim?`{${i}}-`:i,l=n.italic?`{${a}}*`:a,u=n.underline?`{${l}}_`:l;return n.strikethrough?`{${u}}~`:u}throw new Error(`Unknown TypoSupport kind: ${c(this,I)}`)}computeStyledErrorMessage(e){return[this.computeStyledString("Error:",ut),e instanceof d?e.computeStyledString(this):e instanceof Error?e.message:String(e)].join(" ")}};I=new WeakMap;var V=S,xt="\x1B[0m",Ct="\x1B[1m",St="\x1B[2m",Tt="\x1B[3m",Ut="\x1B[4m",Ot="\x1B[9m",Rt={darkBlack:"\x1B[30m",darkRed:"\x1B[31m",darkGreen:"\x1B[32m",darkYellow:"\x1B[33m",darkBlue:"\x1B[34m",darkMagenta:"\x1B[35m",darkCyan:"\x1B[36m",darkWhite:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m"},It={darkBlack:"\x1B[40m",darkRed:"\x1B[41m",darkGreen:"\x1B[42m",darkYellow:"\x1B[43m",darkBlue:"\x1B[44m",darkMagenta:"\x1B[45m",darkCyan:"\x1B[46m",darkWhite:"\x1B[47m",brightBlack:"\x1B[100m",brightRed:"\x1B[101m",brightGreen:"\x1B[102m",brightYellow:"\x1B[103m",brightBlue:"\x1B[104m",brightMagenta:"\x1B[105m",brightCyan:"\x1B[106m",brightWhite:"\x1B[107m"};function kt(t,e){return{getInformation(){return t},createFactory(n){function r(){let o=e.generateUsage();return{breadcrumbs:o.positionals.map(i=>v(i.label)),information:t,positionals:o.positionals,subcommands:[],options:o.options}}try{let o=e.createFactory(n),i=n.consumePositional();if(i!==void 0)throw Error(`Unexpected argument: "${i}"`);return{generateUsage:r,createInstance(){let a=o.createInstance();return{async executeWithContext(l){return await a.executeWithContext(l)}}}}}catch(o){return{generateUsage:r,createInstance(){throw o}}}}}}function $t(t,e,n){return{getInformation(){return t},createFactory(r){try{let o=e.createFactory(r),i=r.consumePositional();if(i===void 0)throw new d(new p(new s("<SUBCOMMAND>",y),new s(": Is required, but was not provided")));let a=n[i];if(a===void 0)throw new d(new p(new s("<SUBCOMMAND>",y),new s(": Invalid value: "),new s(`"${i}"`,x)));let l=a.createFactory(r);return{generateUsage(){let u=e.generateUsage(),g=l.generateUsage();return{breadcrumbs:u.positionals.map(U=>v(U.label)).concat([Pt(i)]).concat(g.breadcrumbs),information:g.information,positionals:u.positionals.concat(g.positionals),subcommands:g.subcommands,options:u.options.concat(g.options)}},createInstance(){let u=o.createInstance(),g=l.createInstance();return{async executeWithContext(U){return await g.executeWithContext(await u.executeWithContext(U))}}}}}catch(o){return{generateUsage(){let i=e.generateUsage();return{breadcrumbs:i.positionals.map(a=>v(a.label)).concat([v("<SUBCOMMAND>")]),information:t,positionals:i.positionals,subcommands:Object.entries(n).map(a=>{let l=a[1].getInformation();return{name:a[0],description:l.description,hint:l.hint}}),options:i.options}},createInstance(){throw o}}}}}}function At(t,e,n){return{getInformation(){return t},createFactory(r){try{let o=e.createFactory(r),i=n.createFactory(r);return{generateUsage(){let a=e.generateUsage(),l=i.generateUsage();return{breadcrumbs:a.positionals.map(u=>v(u.label)).concat(l.breadcrumbs),information:l.information,positionals:a.positionals.concat(l.positionals),subcommands:l.subcommands,options:a.options.concat(l.options)}},createInstance(){let a=o.createInstance(),l=i.createInstance();return{async executeWithContext(u){return await l.executeWithContext(await a.executeWithContext(u))}}}}}catch(o){return{generateUsage(){let i=e.generateUsage();return{breadcrumbs:i.positionals.map(a=>v(a.label)).concat([v("[REST]...")]),information:t,positionals:i.positionals,subcommands:[],options:i.options}},createInstance(){throw o}}}}}}function v(t){return{positional:t}}function Pt(t){return{command:t}}function Vt(t,e){return{generateUsage(){let n=new Array;for(let o in t.options){let i=t.options[o];i&&n.push(i.generateUsage())}let r=new Array;for(let o of t.positionals)r.push(o.generateUsage());return{options:n,positionals:r}},createFactory(n){let r={};for(let i in t.options){let a=t.options[i];r[i]=a.createGetter(n)}let o=[];for(let i of t.positionals)o.push(i.consumePositionals(n));return{createInstance(){let i={};for(let a in r)i[a]=r[a].getValue();return{executeWithContext(a){return e(a,{options:i,positionals:o})}}}}}}}var q={label:"BOOLEAN",decoder(t){let e=t.toLowerCase();if(e==="true"||e==="yes")return!0;if(e==="false"||e==="no")return!1;throw new d(new p(new s("Invalid boolean: "),new s(`"${t}"`,x)))}},vt={label:"DATE",decoder(t){let e=Date.parse(t);if(isNaN(e))throw new d(new p(new s("Invalid date (ISO_8601): "),new s(`"${t}"`,x)));return new Date(e)}},Et={label:"URL",decoder(t){try{return new URL(t)}catch{throw new d(new p(new s("Invalid URL: "),new s(`"${t}"`,x)))}}},Bt={label:"STRING",decoder(t){return t}},Gt={label:"NUMBER",decoder(t){try{return Number(t)}catch{throw new d(new p(new s("Invalid number: "),new s(`"${t}"`,x)))}}},Lt={label:"BIGINT",decoder(t){try{return BigInt(t)}catch{throw new d(new p(new s("Invalid integer: "),new s(`"${t}"`,x)))}}};function Ft(t,e){return{label:e.label,decoder:n=>e.decoder(C(t,n,()=>new p(new s(t.label,y))))}}function Dt(t,e){let n=new Set(e);return{label:t.label,decoder(r){let o=C(t,r,()=>new p(new s(t.label,y)));if(n.has(o))return o;let i=[];for(let a of e){if(i.length>=5){i.push(new s("..."));break}i.length>0&&i.push(new s(" | ")),i.push(new s(`"${a}"`,x))}throw new d(new p(new s("Invalid value: "),new s(`"${r}"`,x),new s(" (expected one of: "),...i,new s(")")))}}}function Mt(t,e=","){return{label:t.map(n=>n.label).join(e),decoder(n){let r=n.split(e,t.length);if(r.length!==t.length)throw new d(new p(new s("Invalid tuple: "),new s(`"${n}"`,x),new s(` (expected ${t.length} parts)`)));return r.map((o,i)=>C(t[i],o,()=>new p(new s(t[i].label,y),new s(`@${i}`))))}}}function Wt(t,e=","){return{label:`${t.label}[${e}${t.label}]...`,decoder(n){return n.split(e).map((r,o)=>C(t,r,()=>new p(new s(t.label,y),new s(`@${o}`))))}}}function C(t,e,n){try{return t.decoder(e)}catch(r){throw new d(n(),r)}}function Kt(t){let e=`<${q.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,long:t.long,short:t.short,label:void 0}},createGetter(n){let r=tt(n,{...t,valued:!1});return{getValue(){let o=n.getOptionValues(r);if(o.length>1)throw new d(new p(new s(`--${t.long}`,f),new s(": Must not be set multiple times")));let i=o[0];if(i===void 0)try{return t.default?t.default():!1}catch(a){throw new d(new p(new s(`--${t.long}`,f),new s(": Failed to get default value")),a)}return C(q,i,()=>new p(new s(`--${t.long}`,f),new s(": "),new s(e,y)))}}}}}function Nt(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,long:t.long,short:t.short,label:e}},createGetter(n){let r=tt(n,{...t,valued:!0});return{getValue(){let o=n.getOptionValues(r);if(o.length>1)throw new d(new p(new s(`--${t.long}`,f),new s(": Requires a single value, but got multiple")));let i=o[0];if(i===void 0)try{return t.default()}catch(a){throw new d(new p(new s(`--${t.long}`,f),new s(": Failed to get default value")),a)}return C(t.type,i,()=>new p(new s(`--${t.long}`,f),new s(": "),new s(e,y)))}}}}}function jt(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,long:t.long,short:t.short,label:e}},createGetter(n){let r=tt(n,{...t,valued:!0});return{getValue(){return n.getOptionValues(r).map(o=>C(t.type,o,()=>new p(new s(`--${t.long}`,f),new s(": "),new s(e,y))))}}}}}function tt(t,e){let{long:n,short:r,aliases:o,valued:i}=e,a=n?[n]:[];o?.longs&&a.push(...o?.longs);let l=r?[r]:[];return o?.shorts&&l.push(...o?.shorts),t.registerOption({longs:a,shorts:l,valued:i})}function Yt(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,hint:t.hint,label:e}},consumePositionals(n){let r=n.consumePositional();if(r===void 0)throw new d(new p(new s(e,y),new s(": Is required, but was not provided")));return C(t.type,r,()=>new p(new s(e,y)))}}}function qt(t){let e=`[${t.label??t.type.label}]`;return{generateUsage(){return{description:t.description,hint:t.hint,label:e}},consumePositionals(n){let r=n.consumePositional();if(r===void 0)try{return t.default()}catch(o){throw new d(new p(new s(e,y),new s(": Failed to get default value")),o)}return C(t.type,r,()=>new p(new s(e,y)))}}}function Ht(t){let e=`[${t.label??t.type.label}]`;return{generateUsage(){return{description:t.description,hint:t.hint,label:`${e}...`+(t.endDelimiter?`["${t.endDelimiter}"]`:"")}},consumePositionals(n){let r=[];for(;;){let o=n.consumePositional();if(o===void 0||o===t.endDelimiter)break;r.push(C(t.type,o,()=>new p(new s(e,y))))}return r}}}var Y,F,$,E,O,B,D,m,H,ct,et,gt,nt,k,j=class{constructor(e){b(this,m);b(this,Y);b(this,F);b(this,$);b(this,E);b(this,O);b(this,B);b(this,D);h(this,Y,e),h(this,F,0),h(this,$,!1),h(this,E,new Map),h(this,O,new Map),h(this,B,new Map),h(this,D,new Map)}registerOption(e){let n=[...e.longs.map(r=>`--${r}`),...e.shorts.map(r=>`-${r}`)].join(", ");for(let r of e.longs){if(c(this,E).has(r))throw new Error(`Option already registered: --${r}`);c(this,E).set(r,n)}for(let r of e.shorts){if(c(this,O).has(r))throw new Error(`Option already registered: -${r}`);for(let o=0;o<r.length;o++){let i=r.slice(0,o);if(c(this,O).has(i))throw new Error(`Option -${r} overlap with shorter option: -${i}`)}for(let o of c(this,O).keys())if(o.startsWith(r))throw new Error(`Option -${r} overlap with longer option: -${o}`);c(this,O).set(r,n)}return c(this,B).set(n,e.valued),c(this,D).set(n,new Array),n}getOptionValues(e){let n=c(this,D).get(e);if(n===void 0)throw new Error(`Unregistered option: ${e}`);return n}consumePositional(){for(;;){let e=w(this,m,H).call(this);if(e===null)return;if(w(this,m,ct).call(this,e))return e}}};Y=new WeakMap,F=new WeakMap,$=new WeakMap,E=new WeakMap,O=new WeakMap,B=new WeakMap,D=new WeakMap,m=new WeakSet,H=function(){let e=c(this,Y)[c(this,F)];return e===void 0?null:(lt(this,F)._++,!c(this,$)&&e==="--"?(h(this,$,!0),w(this,m,H).call(this)):e)},ct=function(e){if(c(this,$))return!0;if(e.startsWith("--")){let n=e.indexOf("=");return n===-1?w(this,m,et).call(this,e.slice(2),null):w(this,m,et).call(this,e.slice(2,n),e.slice(n+1)),!1}if(e.startsWith("-")){let n=1,r=2;for(;r<=e.length;){let o=w(this,m,gt).call(this,e.slice(n,r),e.slice(r));if(o===!0)return!1;o===!1&&(n=r),r++}throw new d(new p(new s(`-${e.slice(n)}`,f),new s(": Unexpected unknown option")))}return!0},et=function(e,n){let r=`--${e}`,o=c(this,E).get(e);if(o!==void 0)return n!==null?w(this,m,k).call(this,o,n):c(this,B).get(o)?w(this,m,k).call(this,o,w(this,m,nt).call(this,r)):w(this,m,k).call(this,o,"true");throw new d(new p(new s(r,f),new s(": Unexpected unknown option")))},gt=function(e,n){let r=c(this,O).get(e);return r!==void 0?n.startsWith("=")?(w(this,m,k).call(this,r,n.slice(1)),!0):c(this,B).get(r)?(n===""?w(this,m,k).call(this,r,w(this,m,nt).call(this,`-${e}`)):w(this,m,k).call(this,r,n),!0):(w(this,m,k).call(this,r,"true"),n===""):null},nt=function(e){let n=w(this,m,H).call(this);if(n===null)throw new d(new p(new s(e,f),new s(": Requires a value, but got end of input")));if(c(this,$))throw new d(new p(new s(e,f),new s(": Requires a value before "),new s('"--"',x)));if(n.startsWith("-"))throw new d(new p(new s(e,f),new s(": Requires a value, but got: "),new s(`"${n}"`,x)));return n},k=function(e,n){this.getOptionValues(e).push(n)};function it(t){let{cliName:e,commandUsage:n,typoSupport:r}=t,o=new Array,i=[Qt("Usage:").computeStyledString(r),M(e).computeStyledString(r)].concat(n.breadcrumbs.map(l=>{if("positional"in l)return st(l.positional).computeStyledString(r);if("command"in l)return M(l.command).computeStyledString(r);throw new Error(`Unknown breadcrumb: ${JSON.stringify(l)}`)}));o.push(i.join(" ")),o.push("");let a=new p;a.pushString(Jt(n.information.description)),n.information.hint&&(a.pushString(R(" ")),a.pushString(Q(`(${n.information.hint})`))),o.push(a.computeStyledString(r));for(let l of n.information.details??[]){let u=new p;u.pushString(Q(l)),o.push(u.computeStyledString(r))}if(n.positionals.length>0){o.push(""),o.push(rt("Positionals:").computeStyledString(r));let l=new P;for(let u of n.positionals){let g=new Array;g.push(new p(R(" "))),g.push(new p(st(u.label))),g.push(...ot(u)),l.pushRow(g)}o.push(...l.computeStyledGrid(r).map(u=>u.join("")))}if(n.subcommands.length>0){o.push(""),o.push(rt("Subcommands:").computeStyledString(r));let l=new P;for(let u of n.subcommands){let g=new Array;g.push(new p(R(" "))),g.push(new p(M(u.name))),g.push(...ot(u)),l.pushRow(g)}o.push(...l.computeStyledGrid(r).map(u=>u.join("")))}if(n.options.length>0){o.push(""),o.push(rt("Options:").computeStyledString(r));let l=new P;for(let u of n.options){let g=new Array;g.push(new p(R(" "))),u.short?g.push(new p(M(`-${u.short}`),R(", "))):g.push(new p),u.label?g.push(new p(M(`--${u.long}`),R(" "),st(u.label))):g.push(new p(M(`--${u.long}`),Q("[=no]"))),g.push(...ot(u)),l.pushRow(g)}o.push(...l.computeStyledGrid(r).map(u=>u.join("")))}return o.push(""),o}function ot(t){let e=[];return t.description&&(e.push(R(" ")),e.push(zt(t.description))),t.hint&&(e.push(R(" ")),e.push(Q(`(${t.hint})`))),e.length>0?[new p(R(" "),...e)]:[]}function Qt(t){return new s(t,{fgColor:"darkMagenta",bold:!0})}function Jt(t){return new s(t,{bold:!0})}function zt(t){return new s(t)}function rt(t){return new s(t,{fgColor:"darkGreen",bold:!0})}function Q(t){return new s(t,{italic:!0,dim:!0})}function M(t){return new s(t,f)}function st(t){return new s(t,y)}function R(t){return new s(t)}async function Xt(t,e,n,r,o){let i=new j(e),a=o?.usageOnHelp??!0;a&&i.registerOption({shorts:[],longs:["help"],valued:!1});let l=o?.buildVersion;l&&i.registerOption({shorts:[],longs:["version"],valued:!1});let u=Zt(o?.useColors),g=o?.onLogStdOut??console.log,U=o?.onLogStdErr??console.error,W=o?.onExit??process.exit,J=r.createFactory(i);for(;;)try{if(i.consumePositional()===void 0)break}catch{}if(a&&i.getOptionValues("--help").length>0)return g(dt(t,J,u)),W(0);if(l&&i.getOptionValues("--version").length>0)return g([t,l].join(" ")),W(0);try{let K=J.createInstance();try{return await K.executeWithContext(n),W(0)}catch(at){return o?.onExecutionError?o.onExecutionError(at):U(u.computeStyledErrorMessage(at)),W(1)}}catch(K){return U(dt(t,J,u)),U(u.computeStyledErrorMessage(K)),W(1)}}function dt(t,e,n){return it({cliName:t,commandUsage:e.generateUsage(),typoSupport:n}).join(`
|
|
2
2
|
`)}function Zt(t){return t===void 0?V.inferFromProcess():t?V.tty():V.none()}0&&(module.exports={ReaderArgs,TypoError,TypoGrid,TypoString,TypoSupport,TypoText,command,commandChained,commandWithSubcommands,operation,optionFlag,optionRepeatable,optionSingleValue,positionalOptional,positionalRequired,positionalVariadics,runAsCliAndExit,typeBigInt,typeBoolean,typeDate,typeDecode,typeList,typeMapped,typeNumber,typeOneOf,typeString,typeTuple,typeUrl,typoStyleConstants,typoStyleFailure,typoStyleQuote,typoStyleUserInput,usageToStyledLines});
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/Typo.ts","../src/lib/Command.ts","../src/lib/Operation.ts","../src/lib/Type.ts","../src/lib/Option.ts","../src/lib/Positional.ts","../src/lib/Reader.ts","../src/lib/Usage.ts","../src/lib/Run.ts"],"sourcesContent":["export * from \"./lib/Command\";\nexport * from \"./lib/Operation\";\nexport * from \"./lib/Option\";\nexport * from \"./lib/Positional\";\nexport * from \"./lib/Reader\";\nexport * from \"./lib/Run\";\nexport * from \"./lib/Type\";\nexport * from \"./lib/Typo\";\nexport * from \"./lib/Usage\";\n","export type TypoColor =\n | \"darkBlack\"\n | \"darkRed\"\n | \"darkGreen\"\n | \"darkYellow\"\n | \"darkBlue\"\n | \"darkMagenta\"\n | \"darkCyan\"\n | \"darkWhite\"\n | \"brightBlack\"\n | \"brightRed\"\n | \"brightGreen\"\n | \"brightYellow\"\n | \"brightBlue\"\n | \"brightMagenta\"\n | \"brightCyan\"\n | \"brightWhite\";\n\nexport type TypoStyle = {\n fgColor?: TypoColor;\n bgColor?: TypoColor;\n dim?: boolean;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n};\n\nexport const typoStyleFailure: TypoStyle = {\n fgColor: \"darkRed\",\n bold: true,\n};\nexport const typoStyleConstants: TypoStyle = {\n fgColor: \"darkCyan\",\n bold: true,\n};\nexport const typoStyleUserInput: TypoStyle = {\n fgColor: \"darkBlue\",\n bold: true,\n};\nexport const typoStyleQuote: TypoStyle = {\n fgColor: \"darkYellow\",\n bold: true,\n};\n\nexport class TypoString {\n #value: string;\n #typoStyle: TypoStyle;\n constructor(value: string, typoStyle: TypoStyle = {}) {\n this.#value = value;\n this.#typoStyle = typoStyle;\n }\n getRawString(): string {\n return this.#value;\n }\n computeStyledString(typoSupport: TypoSupport): string {\n return typoSupport.computeStyledString(this.#value, this.#typoStyle);\n }\n}\n\nexport class TypoText {\n #typoStrings: Array<TypoString>;\n constructor(...typoParts: Array<TypoText | TypoString | string>) {\n this.#typoStrings = [];\n for (const typoPart of typoParts) {\n if (typoPart instanceof TypoText) {\n this.pushText(typoPart);\n } else if (typoPart instanceof TypoString) {\n this.pushString(typoPart);\n } else if (typeof typoPart === \"string\") {\n this.pushString(new TypoString(typoPart));\n }\n }\n }\n pushString(typoString: TypoString) {\n this.#typoStrings.push(typoString);\n }\n pushText(typoText: TypoText) {\n for (const typoString of typoText.#typoStrings) {\n this.#typoStrings.push(typoString);\n }\n }\n computeStyledString(typoSupport: TypoSupport): string {\n return this.#typoStrings\n .map((t) => t.computeStyledString(typoSupport))\n .join(\"\");\n }\n computeRawString(): string {\n return this.#typoStrings.map((t) => t.getRawString()).join(\"\");\n }\n computeRawLength(): number {\n let length = 0;\n for (const typoString of this.#typoStrings) {\n length += typoString.getRawString().length;\n }\n return length;\n }\n}\n\nexport class TypoGrid {\n #typoRows: Array<Array<TypoText>>;\n constructor() {\n this.#typoRows = [];\n }\n pushRow(cells: Array<TypoText>) {\n this.#typoRows.push(cells);\n }\n computeStyledGrid(typoSupport: TypoSupport): Array<Array<string>> {\n const widths = new Array<number>();\n const printableGrid = new Array<Array<string>>();\n for (const typoGridRow of this.#typoRows) {\n for (\n let typoGridColumnIndex = 0;\n typoGridColumnIndex < typoGridRow.length;\n typoGridColumnIndex++\n ) {\n const typoGridCell = typoGridRow[typoGridColumnIndex]!;\n const width = typoGridCell.computeRawLength();\n if (\n widths[typoGridColumnIndex] === undefined ||\n width > widths[typoGridColumnIndex]!\n ) {\n widths[typoGridColumnIndex] = width;\n }\n }\n }\n for (const typoGridRow of this.#typoRows) {\n const printableGridRow = new Array<string>();\n for (\n let typoGridColumnIndex = 0;\n typoGridColumnIndex < typoGridRow.length;\n typoGridColumnIndex++\n ) {\n const typoGridCell = typoGridRow[typoGridColumnIndex]!;\n const printableGridCell = typoGridCell.computeStyledString(typoSupport);\n printableGridRow.push(printableGridCell);\n if (typoGridColumnIndex < typoGridRow.length - 1) {\n const width = typoGridCell.computeRawLength();\n const padding = \" \".repeat(widths[typoGridColumnIndex]! - width);\n printableGridRow.push(padding);\n }\n }\n printableGrid.push(printableGridRow);\n }\n return printableGrid;\n }\n}\n\nexport class TypoError extends Error {\n #typoText: TypoText;\n constructor(currentTypoText: TypoText, source?: unknown) {\n const typoText = new TypoText();\n typoText.pushText(currentTypoText);\n if (source instanceof Error) {\n typoText.pushString(new TypoString(`: ${source.message}`));\n } else if (source instanceof TypoError) {\n typoText.pushString(new TypoString(\": \"));\n typoText.pushText(source.#typoText);\n } else if (source !== undefined) {\n typoText.pushString(new TypoString(`: ${String(source)}`));\n }\n super(typoText.computeRawString());\n this.#typoText = typoText;\n }\n computeStyledString(typoSupport: TypoSupport): string {\n return this.#typoText.computeStyledString(typoSupport);\n }\n}\n\nexport class TypoSupport {\n #kind: \"none\" | \"tty\" | \"mock\";\n private constructor(kind: \"none\" | \"tty\" | \"mock\") {\n this.#kind = kind;\n }\n static none(): TypoSupport {\n return new TypoSupport(\"none\");\n }\n static tty(): TypoSupport {\n return new TypoSupport(\"tty\");\n }\n static mock(): TypoSupport {\n return new TypoSupport(\"mock\");\n }\n static inferFromProcess(): TypoSupport {\n if (!process) {\n return TypoSupport.none();\n }\n if (process.env) {\n if (process.env[\"FORCE_COLOR\"] === \"0\") {\n return TypoSupport.none();\n }\n if (process.env[\"FORCE_COLOR\"]) {\n return TypoSupport.tty();\n }\n if (\"NO_COLOR\" in process.env) {\n return TypoSupport.none();\n }\n }\n if (!process.stdout || !process.stdout.isTTY) {\n return TypoSupport.none();\n }\n return TypoSupport.tty();\n }\n computeStyledString(value: string, typoStyle: TypoStyle): string {\n if (this.#kind === \"none\") {\n return value;\n }\n if (this.#kind === \"tty\") {\n const fgColorCode = typoStyle.fgColor\n ? ttyCodeFgColors[typoStyle.fgColor]\n : \"\";\n const bgColorCode = typoStyle.bgColor\n ? ttyCodeBgColors[typoStyle.bgColor]\n : \"\";\n const boldCode = typoStyle.bold ? ttyCodeBold : \"\";\n const dimCode = typoStyle.dim ? ttyCodeDim : \"\";\n const italicCode = typoStyle.italic ? ttyCodeItalic : \"\";\n const underlineCode = typoStyle.underline ? ttyCodeUnderline : \"\";\n const strikethroughCode = typoStyle.strikethrough\n ? ttyCodeStrikethrough\n : \"\";\n return `${fgColorCode}${bgColorCode}${boldCode}${dimCode}${italicCode}${underlineCode}${strikethroughCode}${value}${ttyCodeReset}`;\n }\n if (this.#kind === \"mock\") {\n const fgColorPart = typoStyle.fgColor\n ? `{${value}}@${typoStyle.fgColor}`\n : value;\n const bgColorPart = typoStyle.bgColor\n ? `{${fgColorPart}}#${typoStyle.bgColor}`\n : fgColorPart;\n const boldPart = typoStyle.bold ? `{${bgColorPart}}+` : bgColorPart;\n const dimPart = typoStyle.dim ? `{${boldPart}}-` : boldPart;\n const italicPart = typoStyle.italic ? `{${dimPart}}*` : dimPart;\n const underlinePart = typoStyle.underline\n ? `{${italicPart}}_`\n : italicPart;\n const strikethroughPart = typoStyle.strikethrough\n ? `{${underlinePart}}~`\n : underlinePart;\n return strikethroughPart;\n }\n throw new Error(`Unknown TypoSupport kind: ${this.#kind}`);\n }\n computeStyledErrorMessage(error: unknown): string {\n return [\n this.computeStyledString(\"Error:\", typoStyleFailure),\n error instanceof TypoError\n ? error.computeStyledString(this)\n : error instanceof Error\n ? error.message\n : String(error),\n ].join(\" \");\n }\n}\n\nconst ttyCodeReset = \"\\x1b[0m\";\nconst ttyCodeBold = \"\\x1b[1m\";\nconst ttyCodeDim = \"\\x1b[2m\";\nconst ttyCodeItalic = \"\\x1b[3m\";\nconst ttyCodeUnderline = \"\\x1b[4m\";\nconst ttyCodeStrikethrough = \"\\x1b[9m\";\nconst ttyCodeFgColors: Record<TypoColor, string> = {\n darkBlack: \"\\x1b[30m\",\n darkRed: \"\\x1b[31m\",\n darkGreen: \"\\x1b[32m\",\n darkYellow: \"\\x1b[33m\",\n darkBlue: \"\\x1b[34m\",\n darkMagenta: \"\\x1b[35m\",\n darkCyan: \"\\x1b[36m\",\n darkWhite: \"\\x1b[37m\",\n brightBlack: \"\\x1b[90m\",\n brightRed: \"\\x1b[91m\",\n brightGreen: \"\\x1b[92m\",\n brightYellow: \"\\x1b[93m\",\n brightBlue: \"\\x1b[94m\",\n brightMagenta: \"\\x1b[95m\",\n brightCyan: \"\\x1b[96m\",\n brightWhite: \"\\x1b[97m\",\n};\nconst ttyCodeBgColors: Record<TypoColor, string> = {\n darkBlack: \"\\x1b[40m\",\n darkRed: \"\\x1b[41m\",\n darkGreen: \"\\x1b[42m\",\n darkYellow: \"\\x1b[43m\",\n darkBlue: \"\\x1b[44m\",\n darkMagenta: \"\\x1b[45m\",\n darkCyan: \"\\x1b[46m\",\n darkWhite: \"\\x1b[47m\",\n brightBlack: \"\\x1b[100m\",\n brightRed: \"\\x1b[101m\",\n brightGreen: \"\\x1b[102m\",\n brightYellow: \"\\x1b[103m\",\n brightBlue: \"\\x1b[104m\",\n brightMagenta: \"\\x1b[105m\",\n brightCyan: \"\\x1b[106m\",\n brightWhite: \"\\x1b[107m\",\n};\n","import { OperationDescriptor } from \"./Operation\";\nimport { OptionUsage } from \"./Option\";\nimport { PositionalUsage } from \"./Positional\";\nimport { ReaderArgs } from \"./Reader\";\nimport {\n TypoError,\n TypoString,\n typoStyleQuote,\n typoStyleUserInput,\n TypoText,\n} from \"./Typo\";\n\nexport type CommandDescriptor<Context, Result> = {\n getInformation(): CommandInformation;\n createFactory(readerArgs: ReaderArgs): CommandFactory<Context, Result>;\n};\n\nexport type CommandFactory<Context, Result> = {\n generateUsage(): CommandUsage;\n createInstance(): CommandInstance<Context, Result>;\n};\n\nexport type CommandInstance<Context, Result> = {\n executeWithContext(context: Context): Promise<Result>;\n};\n\nexport type CommandInformation = {\n description: string;\n hint?: string;\n details?: Array<string>;\n // TODO - printable examples ?\n};\n\nexport type CommandUsage = {\n breadcrumbs: Array<CommandUsageBreadcrumb>;\n information: CommandInformation;\n positionals: Array<PositionalUsage>;\n subcommands: Array<CommandUsageSubcommand>;\n options: Array<OptionUsage>;\n};\n\nexport type CommandUsageBreadcrumb =\n | { positional: string }\n | { command: string };\n\nexport type CommandUsageSubcommand = {\n name: string;\n description: string | undefined;\n hint: string | undefined;\n};\n\nexport function command<Context, Result>(\n information: CommandInformation,\n operation: OperationDescriptor<Context, Result>,\n): CommandDescriptor<Context, Result> {\n return {\n getInformation() {\n return information;\n },\n createFactory(readerArgs: ReaderArgs) {\n function generateUsage(): CommandUsage {\n const operationUsage = operation.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals.map((positional) =>\n breadcrumbPositional(positional.label),\n ),\n information: information,\n positionals: operationUsage.positionals,\n subcommands: [],\n options: operationUsage.options,\n };\n }\n try {\n const operationFactory = operation.createFactory(readerArgs);\n const endPositional = readerArgs.consumePositional();\n if (endPositional !== undefined) {\n throw Error(`Unexpected argument: \"${endPositional}\"`);\n }\n return {\n generateUsage,\n createInstance() {\n const operationInstance = operationFactory.createInstance();\n return {\n async executeWithContext(context: Context) {\n return await operationInstance.executeWithContext(context);\n },\n };\n },\n };\n } catch (error) {\n return {\n generateUsage,\n createInstance() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nexport function commandWithSubcommands<Context, Payload, Result>(\n information: CommandInformation,\n operation: OperationDescriptor<Context, Payload>,\n subcommands: {\n [subcommand: Lowercase<string>]: CommandDescriptor<Payload, Result>;\n },\n): CommandDescriptor<Context, Result> {\n return {\n getInformation() {\n return information;\n },\n createFactory(readerArgs: ReaderArgs) {\n try {\n const operationFactory = operation.createFactory(readerArgs);\n const subcommandName = readerArgs.consumePositional();\n if (subcommandName === undefined) {\n throw new TypoError(\n new TypoText(\n new TypoString(`<SUBCOMMAND>`, typoStyleUserInput),\n new TypoString(`: Is required, but was not provided`),\n ),\n );\n }\n const subcommandInput =\n subcommands[subcommandName as Lowercase<string>];\n if (subcommandInput === undefined) {\n throw new TypoError(\n new TypoText(\n new TypoString(`<SUBCOMMAND>`, typoStyleUserInput),\n new TypoString(`: Invalid value: `),\n new TypoString(`\"${subcommandName}\"`, typoStyleQuote),\n ),\n );\n }\n const subcommandFactory = subcommandInput.createFactory(readerArgs);\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n const subcommandUsage = subcommandFactory.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbCommand(subcommandName)])\n .concat(subcommandUsage.breadcrumbs),\n information: subcommandUsage.information,\n positionals: operationUsage.positionals.concat(\n subcommandUsage.positionals,\n ),\n subcommands: subcommandUsage.subcommands,\n options: operationUsage.options.concat(subcommandUsage.options),\n };\n },\n createInstance() {\n const operationInstance = operationFactory.createInstance();\n const subcommandInstance = subcommandFactory.createInstance();\n return {\n async executeWithContext(context: Context) {\n return await subcommandInstance.executeWithContext(\n await operationInstance.executeWithContext(context),\n );\n },\n };\n },\n };\n } catch (error) {\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbPositional(\"<SUBCOMMAND>\")]),\n information: information,\n positionals: operationUsage.positionals,\n subcommands: Object.entries(subcommands).map((subcommand) => {\n const metadata = subcommand[1].getInformation();\n return {\n name: subcommand[0],\n description: metadata.description,\n hint: metadata.hint,\n };\n }),\n options: operationUsage.options,\n };\n },\n createInstance() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nexport function commandChained<Context, Payload, Result>(\n information: CommandInformation,\n operation: OperationDescriptor<Context, Payload>,\n nextCommand: CommandDescriptor<Payload, Result>,\n): CommandDescriptor<Context, Result> {\n return {\n getInformation() {\n return information;\n },\n createFactory(readerArgs: ReaderArgs) {\n try {\n const operationFactory = operation.createFactory(readerArgs);\n const nextCommandFactory = nextCommand.createFactory(readerArgs);\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n const nextCommandUsage = nextCommandFactory.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat(nextCommandUsage.breadcrumbs),\n information: nextCommandUsage.information,\n positionals: operationUsage.positionals.concat(\n nextCommandUsage.positionals,\n ),\n subcommands: nextCommandUsage.subcommands,\n options: operationUsage.options.concat(nextCommandUsage.options),\n };\n },\n createInstance() {\n const operationInstance = operationFactory.createInstance();\n const nextCommandInstance = nextCommandFactory.createInstance();\n return {\n async executeWithContext(context: Context) {\n return await nextCommandInstance.executeWithContext(\n await operationInstance.executeWithContext(context),\n );\n },\n };\n },\n };\n } catch (error) {\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbPositional(\"[REST]...\")]),\n information: information,\n positionals: operationUsage.positionals,\n subcommands: [],\n options: operationUsage.options,\n };\n },\n createInstance() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nfunction breadcrumbPositional(value: string): CommandUsageBreadcrumb {\n return { positional: value };\n}\n\nfunction breadcrumbCommand(value: string): CommandUsageBreadcrumb {\n return { command: value };\n}\n","import { Option, OptionUsage } from \"./Option\";\nimport { Positional, PositionalUsage } from \"./Positional\";\nimport { ReaderArgs } from \"./Reader\";\n\nexport type OperationDescriptor<Input, Output> = {\n generateUsage(): OperationUsage;\n createFactory(readerArgs: ReaderArgs): OperationFactory<Input, Output>;\n};\n\nexport type OperationFactory<Input, Output> = {\n createInstance(): OperationInstance<Input, Output>;\n};\n\nexport type OperationInstance<Input, Output> = {\n executeWithContext(input: Input): Promise<Output>;\n};\n\nexport type OperationUsage = {\n options: Array<OptionUsage>;\n positionals: Array<PositionalUsage>;\n};\n\nexport function operation<\n Context,\n Result,\n Options extends { [option: string]: any },\n const Positionals extends Array<any>,\n>(\n inputs: {\n options: { [K in keyof Options]: Option<Options[K]> };\n positionals: { [K in keyof Positionals]: Positional<Positionals[K]> };\n },\n handler: (\n context: Context,\n inputs: { options: Options; positionals: Positionals },\n ) => Promise<Result>,\n): OperationDescriptor<Context, Result> {\n return {\n generateUsage() {\n const optionsUsage = new Array<OptionUsage>();\n for (const optionKey in inputs.options) {\n const optionInput = inputs.options[optionKey]!;\n if (optionInput) {\n optionsUsage.push(optionInput.generateUsage());\n }\n }\n const positionalsUsage = new Array<PositionalUsage>();\n for (const positionalInput of inputs.positionals) {\n positionalsUsage.push(positionalInput.generateUsage());\n }\n return { options: optionsUsage, positionals: positionalsUsage };\n },\n createFactory(readerArgs: ReaderArgs) {\n const optionsGetters: any = {};\n for (const optionKey in inputs.options) {\n const optionInput = inputs.options[optionKey]!;\n optionsGetters[optionKey] = optionInput.createGetter(readerArgs);\n }\n const positionalsValues: any = [];\n for (const positionalInput of inputs.positionals) {\n positionalsValues.push(positionalInput.consumePositionals(readerArgs));\n }\n return {\n createInstance() {\n const optionsValues: any = {};\n for (const optionKey in optionsGetters) {\n optionsValues[optionKey] = optionsGetters[optionKey]!.getValue();\n }\n return {\n executeWithContext(context: Context) {\n return handler(context, {\n options: optionsValues,\n positionals: positionalsValues,\n });\n },\n };\n },\n };\n },\n };\n}\n","import {\n TypoError,\n TypoString,\n typoStyleQuote,\n typoStyleUserInput,\n TypoText,\n} from \"./Typo\";\n\nexport type Type<Value> = {\n label: Uppercase<string>; // TODO - is there a better way to enforce uppercase labels?\n decoder(value: string): Value;\n};\n\nexport const typeBoolean: Type<boolean> = {\n label: \"BOOLEAN\",\n decoder(value: string) {\n const lowerValue = value.toLowerCase();\n if (lowerValue === \"true\" || lowerValue === \"yes\") {\n return true;\n }\n if (lowerValue === \"false\" || lowerValue === \"no\") {\n return false;\n }\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid boolean: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n },\n};\n\nexport const typeDate: Type<Date> = {\n label: \"DATE\",\n decoder(value: string) {\n const timestamp = Date.parse(value);\n if (isNaN(timestamp)) {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid date (ISO_8601): `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n return new Date(timestamp);\n },\n};\n\nexport const typeUrl: Type<URL> = {\n label: \"URL\",\n decoder(value: string) {\n try {\n return new URL(value);\n } catch {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid URL: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n },\n};\n\nexport const typeString: Type<string> = {\n label: \"STRING\",\n decoder(value: string) {\n return value;\n },\n};\n\nexport const typeNumber: Type<number> = {\n label: \"NUMBER\",\n decoder(value: string) {\n try {\n return Number(value);\n } catch {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid number: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n },\n};\n\nexport const typeBigInt: Type<bigint> = {\n label: \"BIGINT\",\n decoder(value: string) {\n try {\n return BigInt(value);\n } catch {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid integer: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n },\n};\n\nexport function typeMapped<Before, After>(\n before: Type<Before>,\n after: {\n label: Uppercase<string>;\n decoder: (value: Before) => After;\n },\n): Type<After> {\n return {\n label: after.label,\n decoder: (value: string) => {\n return after.decoder(\n typeDecode(\n before,\n value,\n () => new TypoText(new TypoString(before.label, typoStyleUserInput)),\n ),\n );\n },\n };\n}\n\nexport function typeOneOf<Value>(\n type: Type<Value>,\n values: Array<Value>,\n): Type<Value> {\n const valuesSet = new Set(values);\n return {\n label: type.label,\n decoder(value: string) {\n const decoded = typeDecode(\n type,\n value,\n () => new TypoText(new TypoString(type.label, typoStyleUserInput)),\n );\n if (valuesSet.has(decoded)) {\n return decoded;\n }\n const valuesPreview = [];\n for (const value of values) {\n if (valuesPreview.length >= 5) {\n valuesPreview.push(new TypoString(`...`));\n break;\n }\n if (valuesPreview.length > 0) {\n valuesPreview.push(new TypoString(` | `));\n }\n valuesPreview.push(new TypoString(`\"${value}\"`, typoStyleQuote));\n }\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid value: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n new TypoString(` (expected one of: `),\n ...valuesPreview,\n new TypoString(`)`),\n ),\n );\n },\n };\n}\n\nexport function typeTuple<const Elements extends Array<any>>(\n elementTypes: { [K in keyof Elements]: Type<Elements[K]> },\n separator: string = \",\",\n): Type<Elements> {\n return {\n label: elementTypes\n .map((elementType) => elementType.label)\n .join(separator) as Uppercase<string>,\n decoder(value: string) {\n const parts = value.split(separator, elementTypes.length);\n if (parts.length !== elementTypes.length) {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid tuple: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n new TypoString(` (expected ${elementTypes.length} parts)`),\n ),\n );\n }\n return parts.map((part, index) =>\n typeDecode(\n elementTypes[index]!,\n part,\n () =>\n new TypoText(\n new TypoString(elementTypes[index]!.label, typoStyleUserInput),\n new TypoString(`@${index}`),\n ),\n ),\n ) as Elements;\n },\n };\n}\n\nexport function typeList<Value>(\n elementType: Type<Value>,\n separator: string = \",\",\n): Type<Array<Value>> {\n return {\n label:\n `${elementType.label}[${separator}${elementType.label}]...` as Uppercase<string>,\n decoder(value: string) {\n return value\n .split(separator)\n .map((part, index) =>\n typeDecode(\n elementType,\n part,\n () =>\n new TypoText(\n new TypoString(elementType.label, typoStyleUserInput),\n new TypoString(`@${index}`),\n ),\n ),\n );\n },\n };\n}\n\nexport function typeDecode<Value>(\n type: Type<Value>,\n value: string,\n context: () => TypoText,\n): Value {\n try {\n return type.decoder(value);\n } catch (error) {\n throw new TypoError(context(), error);\n }\n}\n","import { ReaderArgs as ReaderOptions } from \"./Reader\";\nimport { Type, typeBoolean, typeDecode } from \"./Type\";\nimport {\n TypoError,\n TypoString,\n typoStyleConstants,\n typoStyleUserInput,\n TypoText,\n} from \"./Typo\";\n\nexport type Option<Value> = {\n generateUsage(): OptionUsage;\n createGetter(readerOptions: ReaderOptions): OptionGetter<Value>;\n};\n\nexport type OptionUsage = {\n description: string | undefined;\n hint: string | undefined;\n long: Lowercase<string>; // TODO - better type for long option names ?\n short: string | undefined;\n label: Uppercase<string> | undefined;\n};\n\nexport type OptionGetter<Value> = {\n getValue(): Value;\n};\n\nexport function optionFlag(definition: {\n long: Lowercase<string>;\n short?: string;\n description?: string;\n hint?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n default?: () => boolean;\n}): Option<boolean> {\n const label = `<${typeBoolean.label}>` as Uppercase<string>;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n long: definition.long,\n short: definition.short,\n label: undefined,\n };\n },\n createGetter(readerOptions: ReaderOptions) {\n const key = registerOption(readerOptions, {\n ...definition,\n valued: false,\n });\n return {\n getValue() {\n const optionValues = readerOptions.getOptionValues(key);\n if (optionValues.length > 1) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Must not be set multiple times`),\n ),\n );\n }\n const optionValue = optionValues[0];\n if (optionValue === undefined) {\n try {\n return definition.default ? definition.default() : false;\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Failed to get default value`),\n ),\n error,\n );\n }\n }\n return typeDecode(\n typeBoolean,\n optionValue,\n () =>\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: `),\n new TypoString(label, typoStyleUserInput),\n ),\n );\n },\n };\n },\n };\n}\n\nexport function optionSingleValue<Value>(definition: {\n long: Lowercase<string>;\n short?: string;\n description?: string;\n hint?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n label?: Uppercase<string>;\n type: Type<Value>;\n default: () => Value;\n}): Option<Value> {\n const label = `<${definition.label ?? definition.type.label}>`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n long: definition.long,\n short: definition.short,\n label: label as Uppercase<string>,\n };\n },\n createGetter(readerOptions: ReaderOptions) {\n const key = registerOption(readerOptions, {\n ...definition,\n valued: true,\n });\n return {\n getValue() {\n const optionValues = readerOptions.getOptionValues(key);\n if (optionValues.length > 1) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Requires a single value, but got multiple`),\n ),\n );\n }\n const optionValue = optionValues[0];\n if (optionValue === undefined) {\n try {\n return definition.default();\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Failed to get default value`),\n ),\n error,\n );\n }\n }\n return typeDecode(\n definition.type,\n optionValue,\n () =>\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: `),\n new TypoString(label, typoStyleUserInput),\n ),\n );\n },\n };\n },\n };\n}\n\nexport function optionRepeatable<Value>(definition: {\n long: Lowercase<string>;\n short?: string;\n description?: string;\n hint?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n label?: Uppercase<string>;\n type: Type<Value>;\n}): Option<Array<Value>> {\n const label = `<${definition.label ?? definition.type.label}>`;\n return {\n generateUsage() {\n // TODO - showcase that it can be repeated ?\n return {\n description: definition.description,\n hint: definition.hint,\n long: definition.long,\n short: definition.short,\n label: label as Uppercase<string>,\n };\n },\n createGetter(readerOptions: ReaderOptions) {\n const key = registerOption(readerOptions, {\n ...definition,\n valued: true,\n });\n return {\n getValue() {\n return readerOptions\n .getOptionValues(key)\n .map((value) =>\n typeDecode(\n definition.type,\n value,\n () =>\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: `),\n new TypoString(label, typoStyleUserInput),\n ),\n ),\n );\n },\n };\n },\n };\n}\n\nfunction registerOption(\n readerOptions: ReaderOptions,\n definition: {\n long: Lowercase<string>;\n short?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n valued: boolean;\n },\n) {\n const { long, short, aliases, valued } = definition;\n const longs = long ? [long] : [];\n if (aliases?.longs) {\n longs.push(...aliases?.longs);\n }\n const shorts = short ? [short] : [];\n if (aliases?.shorts) {\n shorts.push(...aliases?.shorts);\n }\n return readerOptions.registerOption({ longs, shorts, valued });\n}\n","import { ReaderPositionals } from \"./Reader\";\nimport { Type, typeDecode } from \"./Type\";\nimport { TypoError, TypoString, typoStyleUserInput, TypoText } from \"./Typo\";\n\nexport type Positional<Value> = {\n generateUsage(): PositionalUsage;\n consumePositionals(readerPositionals: ReaderPositionals): Value;\n};\n\nexport type PositionalUsage = {\n description: string | undefined;\n hint: string | undefined;\n label: Uppercase<string>;\n};\n\nexport function positionalRequired<Value>(definition: {\n description?: string;\n hint?: string;\n label?: Uppercase<string>;\n type: Type<Value>;\n}): Positional<Value> {\n const label = `<${definition.label ?? definition.type.label}>`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n label: label as Uppercase<string>,\n };\n },\n consumePositionals(readerPositionals: ReaderPositionals) {\n const positional = readerPositionals.consumePositional();\n if (positional === undefined) {\n throw new TypoError(\n new TypoText(\n new TypoString(label, typoStyleUserInput),\n new TypoString(`: Is required, but was not provided`),\n ),\n );\n }\n return typeDecode(\n definition.type,\n positional,\n () => new TypoText(new TypoString(label, typoStyleUserInput)),\n );\n },\n };\n}\n\nexport function positionalOptional<Value>(definition: {\n description?: string;\n hint?: string;\n label?: Uppercase<string>;\n type: Type<Value>;\n default: () => Value;\n}): Positional<Value> {\n const label = `[${definition.label ?? definition.type.label}]`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n label: label as Uppercase<string>,\n };\n },\n consumePositionals(readerPositionals: ReaderPositionals) {\n const positional = readerPositionals.consumePositional();\n if (positional === undefined) {\n try {\n return definition.default();\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(label, typoStyleUserInput),\n new TypoString(`: Failed to get default value`),\n ),\n error,\n );\n }\n }\n return typeDecode(\n definition.type,\n positional,\n () => new TypoText(new TypoString(label, typoStyleUserInput)),\n );\n },\n };\n}\n\nexport function positionalVariadics<Value>(definition: {\n endDelimiter?: string;\n description?: string;\n hint?: string;\n label?: Uppercase<string>;\n type: Type<Value>;\n}): Positional<Array<Value>> {\n const label = `[${definition.label ?? definition.type.label}]`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n label: (`${label}...` +\n (definition.endDelimiter\n ? `[\"${definition.endDelimiter}\"]`\n : \"\")) as Uppercase<string>,\n };\n },\n consumePositionals(readerPositionals: ReaderPositionals) {\n const positionals: Array<Value> = [];\n while (true) {\n const positional = readerPositionals.consumePositional();\n if (\n positional === undefined ||\n positional === definition.endDelimiter\n ) {\n break;\n }\n positionals.push(\n typeDecode(\n definition.type,\n positional,\n () => new TypoText(new TypoString(label, typoStyleUserInput)),\n ),\n );\n }\n return positionals;\n },\n };\n}\n","import {\n TypoError,\n TypoString,\n typoStyleConstants,\n typoStyleQuote,\n TypoText,\n} from \"./Typo\";\n\nexport type ReaderOptionKey = (string | { __brand: \"ReaderOptionKey\" }) & {\n __brand: \"ReaderOptionKey\";\n};\n\nexport type ReaderOptions = {\n registerOption(definition: {\n longs: Array<string>;\n shorts: Array<string>;\n valued: boolean;\n }): ReaderOptionKey;\n getOptionValues(key: ReaderOptionKey): Array<string>;\n};\n\nexport type ReaderPositionals = {\n consumePositional(): string | undefined;\n};\n\nexport class ReaderArgs {\n #args: ReadonlyArray<string>;\n #parsedIndex: number;\n #parsedDouble: boolean;\n #keyByLong: Map<string, ReaderOptionKey>;\n #keyByShort: Map<string, ReaderOptionKey>;\n #valuedByKey: Map<ReaderOptionKey, boolean>;\n #resultByKey: Map<ReaderOptionKey, Array<string>>;\n\n constructor(args: ReadonlyArray<string>) {\n this.#args = args;\n this.#parsedIndex = 0;\n this.#parsedDouble = false;\n this.#keyByLong = new Map();\n this.#keyByShort = new Map();\n this.#valuedByKey = new Map();\n this.#resultByKey = new Map();\n }\n\n registerOption(definition: {\n longs: Array<string>;\n shorts: Array<string>;\n valued: boolean;\n }) {\n const key = [\n ...definition.longs.map((long) => `--${long}`),\n ...definition.shorts.map((short) => `-${short}`),\n ].join(\", \") as ReaderOptionKey;\n for (const long of definition.longs) {\n if (this.#keyByLong.has(long)) {\n throw new Error(`Option already registered: --${long}`);\n }\n this.#keyByLong.set(long, key);\n }\n for (const short of definition.shorts) {\n if (this.#keyByShort.has(short)) {\n throw new Error(`Option already registered: -${short}`);\n }\n for (let i = 0; i < short.length; i++) {\n const shortSlice = short.slice(0, i);\n if (this.#keyByShort.has(shortSlice)) {\n throw new Error(\n `Option -${short} overlap with shorter option: -${shortSlice}`,\n );\n }\n }\n for (const shortOther of this.#keyByShort.keys()) {\n if (shortOther.startsWith(short)) {\n throw new Error(\n `Option -${short} overlap with longer option: -${shortOther}`,\n );\n }\n }\n this.#keyByShort.set(short, key);\n }\n this.#valuedByKey.set(key, definition.valued);\n this.#resultByKey.set(key, new Array<string>());\n return key;\n }\n\n getOptionValues(key: ReaderOptionKey): Array<string> {\n const optionResult = this.#resultByKey.get(key);\n if (optionResult === undefined) {\n throw new Error(`Unregistered option: ${key}`);\n }\n return optionResult;\n }\n\n consumePositional(): string | undefined {\n while (true) {\n const arg = this.#consumeArg();\n if (arg === null) {\n return undefined;\n }\n if (this.#processedAsPositional(arg)) {\n return arg;\n }\n }\n }\n\n #consumeArg(): string | null {\n const arg = this.#args[this.#parsedIndex];\n if (arg === undefined) {\n return null;\n }\n this.#parsedIndex++;\n if (!this.#parsedDouble) {\n if (arg === \"--\") {\n this.#parsedDouble = true;\n return this.#consumeArg();\n }\n }\n return arg;\n }\n\n #processedAsPositional(arg: string): boolean {\n if (this.#parsedDouble) {\n return true;\n }\n if (arg.startsWith(\"--\")) {\n const valueIndexStart = arg.indexOf(\"=\");\n if (valueIndexStart === -1) {\n this.#consumeOptionLong(arg.slice(2), null);\n } else {\n this.#consumeOptionLong(\n arg.slice(2, valueIndexStart),\n arg.slice(valueIndexStart + 1),\n );\n }\n return false;\n }\n if (arg.startsWith(\"-\")) {\n let shortIndexStart = 1;\n let shortIndexEnd = 2;\n while (shortIndexEnd <= arg.length) {\n const result = this.#tryConsumeOptionShort(\n arg.slice(shortIndexStart, shortIndexEnd),\n arg.slice(shortIndexEnd),\n );\n if (result === true) {\n return false;\n }\n if (result === false) {\n shortIndexStart = shortIndexEnd;\n }\n shortIndexEnd++;\n }\n throw new TypoError(\n new TypoText(\n new TypoString(`-${arg.slice(shortIndexStart)}`, typoStyleConstants),\n new TypoString(`: Unexpected unknown option`),\n ),\n );\n }\n return true;\n }\n\n #consumeOptionLong(long: string, direct: string | null): void {\n const constant = `--${long}`;\n const key = this.#keyByLong.get(long);\n if (key !== undefined) {\n if (direct !== null) {\n return this.#acknowledgeOption(key, direct);\n }\n const valued = this.#valuedByKey.get(key);\n if (valued) {\n return this.#acknowledgeOption(key, this.#consumeOptionValue(constant));\n }\n return this.#acknowledgeOption(key, \"true\");\n }\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Unexpected unknown option`),\n ),\n );\n }\n\n #tryConsumeOptionShort(short: string, rest: string): boolean | null {\n const key = this.#keyByShort.get(short);\n if (key !== undefined) {\n if (rest.startsWith(\"=\")) {\n this.#acknowledgeOption(key, rest.slice(1));\n return true;\n }\n const valued = this.#valuedByKey.get(key);\n if (valued) {\n if (rest === \"\") {\n this.#acknowledgeOption(key, this.#consumeOptionValue(`-${short}`));\n } else {\n this.#acknowledgeOption(key, rest);\n }\n return true;\n }\n this.#acknowledgeOption(key, \"true\");\n return rest === \"\";\n }\n return null;\n }\n\n #consumeOptionValue(constant: string) {\n const arg = this.#consumeArg();\n if (arg === null) {\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Requires a value, but got end of input`),\n ),\n );\n }\n if (this.#parsedDouble) {\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Requires a value before `),\n new TypoString(`\"--\"`, typoStyleQuote),\n ),\n );\n }\n // TODO - is that weird, could a valid value start with dash ?\n if (arg.startsWith(\"-\")) {\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Requires a value, but got: `),\n new TypoString(`\"${arg}\"`, typoStyleQuote),\n ),\n );\n }\n return arg;\n }\n\n #acknowledgeOption(key: ReaderOptionKey, value: string) {\n this.getOptionValues(key).push(value);\n }\n}\n","import { CommandUsage } from \"./Command\";\nimport {\n TypoGrid,\n TypoString,\n typoStyleConstants,\n typoStyleUserInput,\n TypoSupport,\n TypoText,\n} from \"./Typo\";\n\nexport function usageToStyledLines(params: {\n cliName: Lowercase<string>;\n commandUsage: CommandUsage;\n typoSupport: TypoSupport;\n}) {\n const { cliName, commandUsage, typoSupport } = params;\n\n const lines = new Array<string>();\n\n const breadcrumbs = [\n textUsageHero(\"Usage:\").computeStyledString(typoSupport),\n textConstants(cliName).computeStyledString(typoSupport),\n ].concat(\n commandUsage.breadcrumbs.map((breadcrumb) => {\n if (\"positional\" in breadcrumb) {\n return textUserInput(breadcrumb.positional).computeStyledString(\n typoSupport,\n );\n }\n if (\"command\" in breadcrumb) {\n return textConstants(breadcrumb.command).computeStyledString(\n typoSupport,\n );\n }\n throw new Error(`Unknown breadcrumb: ${JSON.stringify(breadcrumb)}`);\n }),\n );\n lines.push(breadcrumbs.join(\" \"));\n\n lines.push(\"\");\n const introText = new TypoText();\n introText.pushString(textUsageText(commandUsage.information.description));\n if (commandUsage.information.hint) {\n introText.pushString(textDelimiter(\" \"));\n introText.pushString(textSubtleInfo(`(${commandUsage.information.hint})`));\n }\n lines.push(introText.computeStyledString(typoSupport));\n\n for (const detail of commandUsage.information.details ?? []) {\n const detailText = new TypoText();\n detailText.pushString(textSubtleInfo(detail));\n lines.push(detailText.computeStyledString(typoSupport));\n }\n\n if (commandUsage.positionals.length > 0) {\n lines.push(\"\");\n lines.push(textBlockTitle(\"Positionals:\").computeStyledString(typoSupport));\n const typoGrid = new TypoGrid();\n for (const positionalUsage of commandUsage.positionals) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter(\" \")));\n typoGridRow.push(new TypoText(textUserInput(positionalUsage.label)));\n typoGridRow.push(...createInformationals(positionalUsage));\n typoGrid.pushRow(typoGridRow);\n }\n lines.push(\n ...typoGrid.computeStyledGrid(typoSupport).map((row) => row.join(\"\")),\n );\n }\n\n if (commandUsage.subcommands.length > 0) {\n lines.push(\"\");\n lines.push(textBlockTitle(\"Subcommands:\").computeStyledString(typoSupport));\n const typoGrid = new TypoGrid();\n for (const subcommandUsage of commandUsage.subcommands) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter(\" \")));\n typoGridRow.push(new TypoText(textConstants(subcommandUsage.name)));\n typoGridRow.push(...createInformationals(subcommandUsage));\n typoGrid.pushRow(typoGridRow);\n }\n lines.push(\n ...typoGrid.computeStyledGrid(typoSupport).map((row) => row.join(\"\")),\n );\n }\n\n if (commandUsage.options.length > 0) {\n lines.push(\"\");\n lines.push(textBlockTitle(\"Options:\").computeStyledString(typoSupport));\n const typoGrid = new TypoGrid();\n for (const optionUsage of commandUsage.options) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter(\" \")));\n if (optionUsage.short) {\n typoGridRow.push(\n new TypoText(\n textConstants(`-${optionUsage.short}`),\n textDelimiter(\", \"),\n ),\n );\n } else {\n typoGridRow.push(new TypoText());\n }\n if (optionUsage.label) {\n typoGridRow.push(\n new TypoText(\n textConstants(`--${optionUsage.long}`),\n textDelimiter(\" \"),\n textUserInput(optionUsage.label),\n ),\n );\n } else {\n typoGridRow.push(\n new TypoText(\n textConstants(`--${optionUsage.long}`),\n textSubtleInfo(\"[=no]\"),\n ),\n );\n }\n typoGridRow.push(...createInformationals(optionUsage));\n typoGrid.pushRow(typoGridRow);\n }\n lines.push(\n ...typoGrid.computeStyledGrid(typoSupport).map((row) => row.join(\"\")),\n );\n }\n\n return lines;\n}\n\nfunction createInformationals(usage: {\n description: string | undefined;\n hint: string | undefined;\n}): Array<TypoText> {\n const informationals = [];\n if (usage.description) {\n informationals.push(textDelimiter(\" \"));\n informationals.push(textUsefulInfo(usage.description));\n }\n if (usage.hint) {\n informationals.push(textDelimiter(\" \"));\n informationals.push(textSubtleInfo(`(${usage.hint})`));\n }\n if (informationals.length > 0) {\n return [new TypoText(textDelimiter(\" \"), ...informationals)];\n }\n return [];\n}\n\nfunction textUsageHero(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkMagenta\", bold: true });\n}\n\nfunction textUsageText(value: string): TypoString {\n return new TypoString(value, { bold: true });\n}\n\nfunction textUsefulInfo(value: string): TypoString {\n return new TypoString(value);\n}\n\nfunction textBlockTitle(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkGreen\", bold: true });\n}\n\nfunction textSubtleInfo(value: string): TypoString {\n return new TypoString(value, { italic: true, dim: true });\n}\n\nfunction textConstants(value: string): TypoString {\n return new TypoString(value, typoStyleConstants);\n}\n\nfunction textUserInput(value: string): TypoString {\n return new TypoString(value, typoStyleUserInput);\n}\n\nfunction textDelimiter(value: string): TypoString {\n return new TypoString(value);\n}\n","import { CommandDescriptor, CommandFactory } from \"./Command\";\nimport { ReaderArgs } from \"./Reader\";\nimport { TypoSupport } from \"./Typo\";\nimport { usageToStyledLines } from \"./Usage\";\n\nexport async function runAsCliAndExit<Context>(\n cliName: Lowercase<string>,\n cliArgs: ReadonlyArray<string>,\n context: Context,\n command: CommandDescriptor<Context, void>,\n options?: {\n useColors?: boolean | undefined;\n usageOnHelp?: boolean | undefined;\n buildVersion?: string | undefined;\n onExecutionError?: ((error: unknown) => void) | undefined;\n onLogStdOut?: ((message: string) => void) | undefined;\n onLogStdErr?: ((message: string) => void) | undefined;\n onExit?: ((code: number) => never) | undefined;\n },\n): Promise<never> {\n const readerArgs = new ReaderArgs(cliArgs);\n const usageOnHelp = options?.usageOnHelp ?? true;\n if (usageOnHelp) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"help\"],\n valued: false,\n });\n }\n const buildVersion = options?.buildVersion;\n if (buildVersion) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"version\"],\n valued: false,\n });\n }\n /*\n // TODO - handle completions ?\n readerArgs.registerFlag({\n key: \"completion\",\n shorts: [],\n longs: [\"completion\"],\n });\n */\n const typoSupport = chooseTypoSupport(options?.useColors);\n const onLogStdOut = options?.onLogStdOut ?? console.log;\n const onLogStdErr = options?.onLogStdErr ?? console.error;\n const onExit = options?.onExit ?? process.exit;\n const commandFactory = command.createFactory(readerArgs);\n while (true) {\n try {\n const positional = readerArgs.consumePositional();\n if (positional === undefined) {\n break;\n }\n } catch (_) {}\n }\n if (usageOnHelp) {\n if (readerArgs.getOptionValues(\"--help\" as any).length > 0) {\n onLogStdOut(computeUsageString(cliName, commandFactory, typoSupport));\n return onExit(0);\n }\n }\n if (buildVersion) {\n if (readerArgs.getOptionValues(\"--version\" as any).length > 0) {\n onLogStdOut([cliName, buildVersion].join(\" \"));\n return onExit(0);\n }\n }\n try {\n const commandInstance = commandFactory.createInstance();\n try {\n await commandInstance.executeWithContext(context);\n return onExit(0);\n } catch (executionError) {\n if (options?.onExecutionError) {\n options.onExecutionError(executionError);\n } else {\n onLogStdErr(typoSupport.computeStyledErrorMessage(executionError));\n }\n return onExit(1);\n }\n } catch (parsingError) {\n onLogStdErr(computeUsageString(cliName, commandFactory, typoSupport));\n onLogStdErr(typoSupport.computeStyledErrorMessage(parsingError));\n return onExit(1);\n }\n}\n\nfunction computeUsageString<Context, Result>(\n cliName: Lowercase<string>,\n commandFactory: CommandFactory<Context, Result>,\n typoSupport: TypoSupport,\n) {\n return usageToStyledLines({\n cliName,\n commandUsage: commandFactory.generateUsage(),\n typoSupport,\n }).join(\"\\n\");\n}\n\nfunction chooseTypoSupport(useColors?: boolean): TypoSupport {\n if (useColors === undefined) {\n return TypoSupport.inferFromProcess();\n }\n return useColors ? TypoSupport.tty() : TypoSupport.none();\n}\n"],"mappings":"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","names":["index_exports","__export","ReaderArgs","TypoError","TypoGrid","TypoString","TypoSupport","TypoText","command","commandChained","commandWithSubcommands","operation","optionFlag","optionRepeatable","optionSingleValue","positionalOptional","positionalRequired","positionalVariadics","runAsCliAndExit","typeBigInt","typeBoolean","typeDate","typeDecode","typeList","typeMapped","typeNumber","typeOneOf","typeString","typeTuple","typeUrl","typoStyleConstants","typoStyleFailure","typoStyleQuote","typoStyleUserInput","usageToStyledLines","__toCommonJS","typoStyleFailure","typoStyleConstants","typoStyleUserInput","typoStyleQuote","_value","_typoStyle","TypoString","value","typoStyle","__privateAdd","__privateSet","__privateGet","typoSupport","_typoStrings","_TypoText","typoParts","typoPart","typoString","typoText","t","length","TypoText","_typoRows","TypoGrid","cells","widths","printableGrid","typoGridRow","typoGridColumnIndex","width","printableGridRow","typoGridCell","printableGridCell","padding","_typoText","_TypoError","currentTypoText","source","TypoError","_kind","_TypoSupport","kind","fgColorCode","ttyCodeFgColors","bgColorCode","ttyCodeBgColors","boldCode","ttyCodeBold","dimCode","ttyCodeDim","italicCode","ttyCodeItalic","underlineCode","ttyCodeUnderline","strikethroughCode","ttyCodeStrikethrough","ttyCodeReset","fgColorPart","bgColorPart","boldPart","dimPart","italicPart","underlinePart","error","TypoSupport","command","information","operation","readerArgs","generateUsage","operationUsage","positional","breadcrumbPositional","operationFactory","endPositional","operationInstance","context","error","commandWithSubcommands","subcommands","subcommandName","TypoError","TypoText","TypoString","typoStyleUserInput","subcommandInput","typoStyleQuote","subcommandFactory","subcommandUsage","breadcrumbCommand","subcommandInstance","subcommand","metadata","commandChained","nextCommand","nextCommandFactory","nextCommandUsage","nextCommandInstance","value","operation","inputs","handler","optionsUsage","optionKey","optionInput","positionalsUsage","positionalInput","readerArgs","optionsGetters","positionalsValues","optionsValues","context","typeBoolean","value","lowerValue","TypoError","TypoText","TypoString","typoStyleQuote","typeDate","timestamp","typeUrl","typeString","typeNumber","typeBigInt","typeMapped","before","after","typeDecode","typoStyleUserInput","typeOneOf","type","values","valuesSet","decoded","valuesPreview","typeTuple","elementTypes","separator","elementType","parts","part","index","typeList","context","error","optionFlag","definition","label","typeBoolean","readerOptions","key","registerOption","optionValues","TypoError","TypoText","TypoString","typoStyleConstants","optionValue","error","typeDecode","typoStyleUserInput","optionSingleValue","optionRepeatable","value","long","short","aliases","valued","longs","shorts","positionalRequired","definition","label","readerPositionals","positional","TypoError","TypoText","TypoString","typoStyleUserInput","typeDecode","positionalOptional","error","positionalVariadics","positionals","_args","_parsedIndex","_parsedDouble","_keyByLong","_keyByShort","_valuedByKey","_resultByKey","_ReaderArgs_instances","consumeArg_fn","processedAsPositional_fn","consumeOptionLong_fn","tryConsumeOptionShort_fn","consumeOptionValue_fn","acknowledgeOption_fn","ReaderArgs","args","__privateAdd","__privateSet","definition","key","long","short","__privateGet","i","shortSlice","shortOther","optionResult","arg","__privateMethod","__privateWrapper","valueIndexStart","shortIndexStart","shortIndexEnd","result","TypoError","TypoText","TypoString","typoStyleConstants","direct","constant","rest","typoStyleQuote","value","usageToStyledLines","params","cliName","commandUsage","typoSupport","lines","breadcrumbs","textUsageHero","textConstants","breadcrumb","textUserInput","introText","TypoText","textUsageText","textDelimiter","textSubtleInfo","detail","detailText","textBlockTitle","typoGrid","TypoGrid","positionalUsage","typoGridRow","createInformationals","row","subcommandUsage","optionUsage","usage","informationals","textUsefulInfo","value","TypoString","typoStyleConstants","typoStyleUserInput","runAsCliAndExit","cliName","cliArgs","context","command","options","readerArgs","ReaderArgs","usageOnHelp","buildVersion","typoSupport","chooseTypoSupport","onLogStdOut","onLogStdErr","onExit","commandFactory","computeUsageString","commandInstance","executionError","parsingError","usageToStyledLines","useColors","TypoSupport"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/Typo.ts","../src/lib/Command.ts","../src/lib/Operation.ts","../src/lib/Type.ts","../src/lib/Option.ts","../src/lib/Positional.ts","../src/lib/Reader.ts","../src/lib/Usage.ts","../src/lib/Run.ts"],"sourcesContent":["export * from \"./lib/Command\";\nexport * from \"./lib/Operation\";\nexport * from \"./lib/Option\";\nexport * from \"./lib/Positional\";\nexport * from \"./lib/Reader\";\nexport * from \"./lib/Run\";\nexport * from \"./lib/Type\";\nexport * from \"./lib/Typo\";\nexport * from \"./lib/Usage\";\n","export type TypoColor =\n | \"darkBlack\"\n | \"darkRed\"\n | \"darkGreen\"\n | \"darkYellow\"\n | \"darkBlue\"\n | \"darkMagenta\"\n | \"darkCyan\"\n | \"darkWhite\"\n | \"brightBlack\"\n | \"brightRed\"\n | \"brightGreen\"\n | \"brightYellow\"\n | \"brightBlue\"\n | \"brightMagenta\"\n | \"brightCyan\"\n | \"brightWhite\";\n\nexport type TypoStyle = {\n fgColor?: TypoColor;\n bgColor?: TypoColor;\n dim?: boolean;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n};\n\nexport const typoStyleFailure: TypoStyle = {\n fgColor: \"darkRed\",\n bold: true,\n};\nexport const typoStyleConstants: TypoStyle = {\n fgColor: \"darkCyan\",\n bold: true,\n};\nexport const typoStyleUserInput: TypoStyle = {\n fgColor: \"darkBlue\",\n bold: true,\n};\nexport const typoStyleQuote: TypoStyle = {\n fgColor: \"darkYellow\",\n bold: true,\n};\n\nexport class TypoString {\n #value: string;\n #typoStyle: TypoStyle;\n constructor(value: string, typoStyle: TypoStyle = {}) {\n this.#value = value;\n this.#typoStyle = typoStyle;\n }\n getRawString(): string {\n return this.#value;\n }\n computeStyledString(typoSupport: TypoSupport): string {\n return typoSupport.computeStyledString(this.#value, this.#typoStyle);\n }\n}\n\nexport class TypoText {\n #typoStrings: Array<TypoString>;\n constructor(...typoParts: Array<TypoText | TypoString | string>) {\n this.#typoStrings = [];\n for (const typoPart of typoParts) {\n if (typoPart instanceof TypoText) {\n this.pushText(typoPart);\n } else if (typoPart instanceof TypoString) {\n this.pushString(typoPart);\n } else if (typeof typoPart === \"string\") {\n this.pushString(new TypoString(typoPart));\n }\n }\n }\n pushString(typoString: TypoString) {\n this.#typoStrings.push(typoString);\n }\n pushText(typoText: TypoText) {\n for (const typoString of typoText.#typoStrings) {\n this.#typoStrings.push(typoString);\n }\n }\n computeStyledString(typoSupport: TypoSupport): string {\n return this.#typoStrings\n .map((t) => t.computeStyledString(typoSupport))\n .join(\"\");\n }\n computeRawString(): string {\n return this.#typoStrings.map((t) => t.getRawString()).join(\"\");\n }\n computeRawLength(): number {\n let length = 0;\n for (const typoString of this.#typoStrings) {\n length += typoString.getRawString().length;\n }\n return length;\n }\n}\n\nexport class TypoGrid {\n #typoRows: Array<Array<TypoText>>;\n constructor() {\n this.#typoRows = [];\n }\n pushRow(cells: Array<TypoText>) {\n this.#typoRows.push(cells);\n }\n computeStyledGrid(typoSupport: TypoSupport): Array<Array<string>> {\n const widths = new Array<number>();\n const printableGrid = new Array<Array<string>>();\n for (const typoGridRow of this.#typoRows) {\n for (\n let typoGridColumnIndex = 0;\n typoGridColumnIndex < typoGridRow.length;\n typoGridColumnIndex++\n ) {\n const typoGridCell = typoGridRow[typoGridColumnIndex]!;\n const width = typoGridCell.computeRawLength();\n if (\n widths[typoGridColumnIndex] === undefined ||\n width > widths[typoGridColumnIndex]!\n ) {\n widths[typoGridColumnIndex] = width;\n }\n }\n }\n for (const typoGridRow of this.#typoRows) {\n const printableGridRow = new Array<string>();\n for (\n let typoGridColumnIndex = 0;\n typoGridColumnIndex < typoGridRow.length;\n typoGridColumnIndex++\n ) {\n const typoGridCell = typoGridRow[typoGridColumnIndex]!;\n const printableGridCell = typoGridCell.computeStyledString(typoSupport);\n printableGridRow.push(printableGridCell);\n if (typoGridColumnIndex < typoGridRow.length - 1) {\n const width = typoGridCell.computeRawLength();\n const padding = \" \".repeat(widths[typoGridColumnIndex]! - width);\n printableGridRow.push(padding);\n }\n }\n printableGrid.push(printableGridRow);\n }\n return printableGrid;\n }\n}\n\nexport class TypoError extends Error {\n #typoText: TypoText;\n constructor(currentTypoText: TypoText, source?: unknown) {\n const typoText = new TypoText();\n typoText.pushText(currentTypoText);\n if (source instanceof Error) {\n typoText.pushString(new TypoString(`: ${source.message}`));\n } else if (source instanceof TypoError) {\n typoText.pushString(new TypoString(\": \"));\n typoText.pushText(source.#typoText);\n } else if (source !== undefined) {\n typoText.pushString(new TypoString(`: ${String(source)}`));\n }\n super(typoText.computeRawString());\n this.#typoText = typoText;\n }\n computeStyledString(typoSupport: TypoSupport): string {\n return this.#typoText.computeStyledString(typoSupport);\n }\n}\n\nexport class TypoSupport {\n #kind: \"none\" | \"tty\" | \"mock\";\n private constructor(kind: \"none\" | \"tty\" | \"mock\") {\n this.#kind = kind;\n }\n static none(): TypoSupport {\n return new TypoSupport(\"none\");\n }\n static tty(): TypoSupport {\n return new TypoSupport(\"tty\");\n }\n static mock(): TypoSupport {\n return new TypoSupport(\"mock\");\n }\n static inferFromProcess(): TypoSupport {\n if (!process) {\n return TypoSupport.none();\n }\n if (process.env) {\n if (process.env[\"FORCE_COLOR\"] === \"0\") {\n return TypoSupport.none();\n }\n if (process.env[\"FORCE_COLOR\"]) {\n return TypoSupport.tty();\n }\n if (\"NO_COLOR\" in process.env) {\n return TypoSupport.none();\n }\n }\n if (!process.stdout || !process.stdout.isTTY) {\n return TypoSupport.none();\n }\n return TypoSupport.tty();\n }\n computeStyledString(value: string, typoStyle: TypoStyle): string {\n if (this.#kind === \"none\") {\n return value;\n }\n if (this.#kind === \"tty\") {\n const fgColorCode = typoStyle.fgColor\n ? ttyCodeFgColors[typoStyle.fgColor]\n : \"\";\n const bgColorCode = typoStyle.bgColor\n ? ttyCodeBgColors[typoStyle.bgColor]\n : \"\";\n const boldCode = typoStyle.bold ? ttyCodeBold : \"\";\n const dimCode = typoStyle.dim ? ttyCodeDim : \"\";\n const italicCode = typoStyle.italic ? ttyCodeItalic : \"\";\n const underlineCode = typoStyle.underline ? ttyCodeUnderline : \"\";\n const strikethroughCode = typoStyle.strikethrough\n ? ttyCodeStrikethrough\n : \"\";\n return `${fgColorCode}${bgColorCode}${boldCode}${dimCode}${italicCode}${underlineCode}${strikethroughCode}${value}${ttyCodeReset}`;\n }\n if (this.#kind === \"mock\") {\n const fgColorPart = typoStyle.fgColor\n ? `{${value}}@${typoStyle.fgColor}`\n : value;\n const bgColorPart = typoStyle.bgColor\n ? `{${fgColorPart}}#${typoStyle.bgColor}`\n : fgColorPart;\n const boldPart = typoStyle.bold ? `{${bgColorPart}}+` : bgColorPart;\n const dimPart = typoStyle.dim ? `{${boldPart}}-` : boldPart;\n const italicPart = typoStyle.italic ? `{${dimPart}}*` : dimPart;\n const underlinePart = typoStyle.underline\n ? `{${italicPart}}_`\n : italicPart;\n const strikethroughPart = typoStyle.strikethrough\n ? `{${underlinePart}}~`\n : underlinePart;\n return strikethroughPart;\n }\n throw new Error(`Unknown TypoSupport kind: ${this.#kind}`);\n }\n computeStyledErrorMessage(error: unknown): string {\n return [\n this.computeStyledString(\"Error:\", typoStyleFailure),\n error instanceof TypoError\n ? error.computeStyledString(this)\n : error instanceof Error\n ? error.message\n : String(error),\n ].join(\" \");\n }\n}\n\nconst ttyCodeReset = \"\\x1b[0m\";\nconst ttyCodeBold = \"\\x1b[1m\";\nconst ttyCodeDim = \"\\x1b[2m\";\nconst ttyCodeItalic = \"\\x1b[3m\";\nconst ttyCodeUnderline = \"\\x1b[4m\";\nconst ttyCodeStrikethrough = \"\\x1b[9m\";\nconst ttyCodeFgColors: Record<TypoColor, string> = {\n darkBlack: \"\\x1b[30m\",\n darkRed: \"\\x1b[31m\",\n darkGreen: \"\\x1b[32m\",\n darkYellow: \"\\x1b[33m\",\n darkBlue: \"\\x1b[34m\",\n darkMagenta: \"\\x1b[35m\",\n darkCyan: \"\\x1b[36m\",\n darkWhite: \"\\x1b[37m\",\n brightBlack: \"\\x1b[90m\",\n brightRed: \"\\x1b[91m\",\n brightGreen: \"\\x1b[92m\",\n brightYellow: \"\\x1b[93m\",\n brightBlue: \"\\x1b[94m\",\n brightMagenta: \"\\x1b[95m\",\n brightCyan: \"\\x1b[96m\",\n brightWhite: \"\\x1b[97m\",\n};\nconst ttyCodeBgColors: Record<TypoColor, string> = {\n darkBlack: \"\\x1b[40m\",\n darkRed: \"\\x1b[41m\",\n darkGreen: \"\\x1b[42m\",\n darkYellow: \"\\x1b[43m\",\n darkBlue: \"\\x1b[44m\",\n darkMagenta: \"\\x1b[45m\",\n darkCyan: \"\\x1b[46m\",\n darkWhite: \"\\x1b[47m\",\n brightBlack: \"\\x1b[100m\",\n brightRed: \"\\x1b[101m\",\n brightGreen: \"\\x1b[102m\",\n brightYellow: \"\\x1b[103m\",\n brightBlue: \"\\x1b[104m\",\n brightMagenta: \"\\x1b[105m\",\n brightCyan: \"\\x1b[106m\",\n brightWhite: \"\\x1b[107m\",\n};\n","import { OperationDescriptor } from \"./Operation\";\nimport { OptionUsage } from \"./Option\";\nimport { PositionalUsage } from \"./Positional\";\nimport { ReaderArgs } from \"./Reader\";\nimport {\n TypoError,\n TypoString,\n typoStyleQuote,\n typoStyleUserInput,\n TypoText,\n} from \"./Typo\";\n\nexport type CommandDescriptor<Context, Result> = {\n getInformation(): CommandInformation;\n createFactory(readerArgs: ReaderArgs): CommandFactory<Context, Result>;\n};\n\nexport type CommandFactory<Context, Result> = {\n generateUsage(): CommandUsage;\n createInstance(): CommandInstance<Context, Result>;\n};\n\nexport type CommandInstance<Context, Result> = {\n executeWithContext(context: Context): Promise<Result>;\n};\n\nexport type CommandInformation = {\n description: string;\n hint?: string;\n details?: Array<string>;\n // TODO - printable examples ?\n};\n\nexport type CommandUsage = {\n breadcrumbs: Array<CommandUsageBreadcrumb>;\n information: CommandInformation;\n positionals: Array<PositionalUsage>;\n subcommands: Array<CommandUsageSubcommand>;\n options: Array<OptionUsage>;\n};\n\nexport type CommandUsageBreadcrumb =\n | { positional: string }\n | { command: string };\n\nexport type CommandUsageSubcommand = {\n name: string;\n description: string | undefined;\n hint: string | undefined;\n};\n\nexport function command<Context, Result>(\n information: CommandInformation,\n operation: OperationDescriptor<Context, Result>,\n): CommandDescriptor<Context, Result> {\n return {\n getInformation() {\n return information;\n },\n createFactory(readerArgs: ReaderArgs) {\n function generateUsage(): CommandUsage {\n const operationUsage = operation.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals.map((positional) =>\n breadcrumbPositional(positional.label),\n ),\n information: information,\n positionals: operationUsage.positionals,\n subcommands: [],\n options: operationUsage.options,\n };\n }\n try {\n const operationFactory = operation.createFactory(readerArgs);\n const endPositional = readerArgs.consumePositional();\n if (endPositional !== undefined) {\n throw Error(`Unexpected argument: \"${endPositional}\"`);\n }\n return {\n generateUsage,\n createInstance() {\n const operationInstance = operationFactory.createInstance();\n return {\n async executeWithContext(context: Context) {\n return await operationInstance.executeWithContext(context);\n },\n };\n },\n };\n } catch (error) {\n return {\n generateUsage,\n createInstance() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nexport function commandWithSubcommands<Context, Payload, Result>(\n information: CommandInformation,\n operation: OperationDescriptor<Context, Payload>,\n subcommands: {\n [subcommand: Lowercase<string>]: CommandDescriptor<Payload, Result>;\n },\n): CommandDescriptor<Context, Result> {\n return {\n getInformation() {\n return information;\n },\n createFactory(readerArgs: ReaderArgs) {\n try {\n const operationFactory = operation.createFactory(readerArgs);\n const subcommandName = readerArgs.consumePositional();\n if (subcommandName === undefined) {\n throw new TypoError(\n new TypoText(\n new TypoString(`<SUBCOMMAND>`, typoStyleUserInput),\n new TypoString(`: Is required, but was not provided`),\n ),\n );\n }\n const subcommandInput =\n subcommands[subcommandName as Lowercase<string>];\n if (subcommandInput === undefined) {\n throw new TypoError(\n new TypoText(\n new TypoString(`<SUBCOMMAND>`, typoStyleUserInput),\n new TypoString(`: Invalid value: `),\n new TypoString(`\"${subcommandName}\"`, typoStyleQuote),\n ),\n );\n }\n const subcommandFactory = subcommandInput.createFactory(readerArgs);\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n const subcommandUsage = subcommandFactory.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbCommand(subcommandName)])\n .concat(subcommandUsage.breadcrumbs),\n information: subcommandUsage.information,\n positionals: operationUsage.positionals.concat(\n subcommandUsage.positionals,\n ),\n subcommands: subcommandUsage.subcommands,\n options: operationUsage.options.concat(subcommandUsage.options),\n };\n },\n createInstance() {\n const operationInstance = operationFactory.createInstance();\n const subcommandInstance = subcommandFactory.createInstance();\n return {\n async executeWithContext(context: Context) {\n return await subcommandInstance.executeWithContext(\n await operationInstance.executeWithContext(context),\n );\n },\n };\n },\n };\n } catch (error) {\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbPositional(\"<SUBCOMMAND>\")]),\n information: information,\n positionals: operationUsage.positionals,\n subcommands: Object.entries(subcommands).map((subcommand) => {\n const metadata = subcommand[1].getInformation();\n return {\n name: subcommand[0],\n description: metadata.description,\n hint: metadata.hint,\n };\n }),\n options: operationUsage.options,\n };\n },\n createInstance() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nexport function commandChained<Context, Payload, Result>(\n information: CommandInformation,\n operation: OperationDescriptor<Context, Payload>,\n nextCommand: CommandDescriptor<Payload, Result>,\n): CommandDescriptor<Context, Result> {\n return {\n getInformation() {\n return information;\n },\n createFactory(readerArgs: ReaderArgs) {\n try {\n const operationFactory = operation.createFactory(readerArgs);\n const nextCommandFactory = nextCommand.createFactory(readerArgs);\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n const nextCommandUsage = nextCommandFactory.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat(nextCommandUsage.breadcrumbs),\n information: nextCommandUsage.information,\n positionals: operationUsage.positionals.concat(\n nextCommandUsage.positionals,\n ),\n subcommands: nextCommandUsage.subcommands,\n options: operationUsage.options.concat(nextCommandUsage.options),\n };\n },\n createInstance() {\n const operationInstance = operationFactory.createInstance();\n const nextCommandInstance = nextCommandFactory.createInstance();\n return {\n async executeWithContext(context: Context) {\n return await nextCommandInstance.executeWithContext(\n await operationInstance.executeWithContext(context),\n );\n },\n };\n },\n };\n } catch (error) {\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n return {\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbPositional(\"[REST]...\")]),\n information: information,\n positionals: operationUsage.positionals,\n subcommands: [],\n options: operationUsage.options,\n };\n },\n createInstance() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nfunction breadcrumbPositional(value: string): CommandUsageBreadcrumb {\n return { positional: value };\n}\n\nfunction breadcrumbCommand(value: string): CommandUsageBreadcrumb {\n return { command: value };\n}\n","import { Option, OptionUsage } from \"./Option\";\nimport { Positional, PositionalUsage } from \"./Positional\";\nimport { ReaderArgs } from \"./Reader\";\n\nexport type OperationDescriptor<Input, Output> = {\n generateUsage(): OperationUsage;\n createFactory(readerArgs: ReaderArgs): OperationFactory<Input, Output>;\n};\n\nexport type OperationFactory<Input, Output> = {\n createInstance(): OperationInstance<Input, Output>;\n};\n\nexport type OperationInstance<Input, Output> = {\n executeWithContext(input: Input): Promise<Output>;\n};\n\nexport type OperationUsage = {\n options: Array<OptionUsage>;\n positionals: Array<PositionalUsage>;\n};\n\nexport function operation<\n Context,\n Result,\n Options extends { [option: string]: any },\n const Positionals extends Array<any>,\n>(\n inputs: {\n options: { [K in keyof Options]: Option<Options[K]> };\n positionals: { [K in keyof Positionals]: Positional<Positionals[K]> };\n },\n handler: (\n context: Context,\n inputs: { options: Options; positionals: Positionals },\n ) => Promise<Result>,\n): OperationDescriptor<Context, Result> {\n return {\n generateUsage() {\n const optionsUsage = new Array<OptionUsage>();\n for (const optionKey in inputs.options) {\n const optionInput = inputs.options[optionKey]!;\n if (optionInput) {\n optionsUsage.push(optionInput.generateUsage());\n }\n }\n const positionalsUsage = new Array<PositionalUsage>();\n for (const positionalInput of inputs.positionals) {\n positionalsUsage.push(positionalInput.generateUsage());\n }\n return { options: optionsUsage, positionals: positionalsUsage };\n },\n createFactory(readerArgs: ReaderArgs) {\n const optionsGetters: any = {};\n for (const optionKey in inputs.options) {\n const optionInput = inputs.options[optionKey]!;\n optionsGetters[optionKey] = optionInput.createGetter(readerArgs);\n }\n const positionalsValues: any = [];\n for (const positionalInput of inputs.positionals) {\n positionalsValues.push(positionalInput.consumePositionals(readerArgs));\n }\n return {\n createInstance() {\n const optionsValues: any = {};\n for (const optionKey in optionsGetters) {\n optionsValues[optionKey] = optionsGetters[optionKey]!.getValue();\n }\n return {\n executeWithContext(context: Context) {\n return handler(context, {\n options: optionsValues,\n positionals: positionalsValues,\n });\n },\n };\n },\n };\n },\n };\n}\n","import {\n TypoError,\n TypoString,\n typoStyleQuote,\n typoStyleUserInput,\n TypoText,\n} from \"./Typo\";\n\nexport type Type<Value> = {\n label: Uppercase<string>; // TODO - is there a better way to enforce uppercase labels?\n decoder(value: string): Value;\n};\n\nexport const typeBoolean: Type<boolean> = {\n label: \"BOOLEAN\",\n decoder(value: string) {\n const lowerValue = value.toLowerCase();\n if (lowerValue === \"true\" || lowerValue === \"yes\") {\n return true;\n }\n if (lowerValue === \"false\" || lowerValue === \"no\") {\n return false;\n }\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid boolean: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n },\n};\n\nexport const typeDate: Type<Date> = {\n label: \"DATE\",\n decoder(value: string) {\n const timestamp = Date.parse(value);\n if (isNaN(timestamp)) {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid date (ISO_8601): `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n return new Date(timestamp);\n },\n};\n\nexport const typeUrl: Type<URL> = {\n label: \"URL\",\n decoder(value: string) {\n try {\n return new URL(value);\n } catch {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid URL: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n },\n};\n\nexport const typeString: Type<string> = {\n label: \"STRING\",\n decoder(value: string) {\n return value;\n },\n};\n\nexport const typeNumber: Type<number> = {\n label: \"NUMBER\",\n decoder(value: string) {\n try {\n return Number(value);\n } catch {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid number: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n },\n};\n\nexport const typeBigInt: Type<bigint> = {\n label: \"BIGINT\",\n decoder(value: string) {\n try {\n return BigInt(value);\n } catch {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid integer: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n ),\n );\n }\n },\n};\n\nexport function typeMapped<Before, After>(\n before: Type<Before>,\n after: {\n label: Uppercase<string>;\n decoder: (value: Before) => After;\n },\n): Type<After> {\n return {\n label: after.label,\n decoder: (value: string) => {\n return after.decoder(\n typeDecode(\n before,\n value,\n () => new TypoText(new TypoString(before.label, typoStyleUserInput)),\n ),\n );\n },\n };\n}\n\nexport function typeOneOf<Value>(\n type: Type<Value>,\n values: Array<Value>,\n): Type<Value> {\n const valuesSet = new Set(values);\n return {\n label: type.label,\n decoder(value: string) {\n const decoded = typeDecode(\n type,\n value,\n () => new TypoText(new TypoString(type.label, typoStyleUserInput)),\n );\n if (valuesSet.has(decoded)) {\n return decoded;\n }\n const valuesPreview = [];\n for (const value of values) {\n if (valuesPreview.length >= 5) {\n valuesPreview.push(new TypoString(`...`));\n break;\n }\n if (valuesPreview.length > 0) {\n valuesPreview.push(new TypoString(` | `));\n }\n valuesPreview.push(new TypoString(`\"${value}\"`, typoStyleQuote));\n }\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid value: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n new TypoString(` (expected one of: `),\n ...valuesPreview,\n new TypoString(`)`),\n ),\n );\n },\n };\n}\n\nexport function typeTuple<const Elements extends Array<any>>(\n elementTypes: { [K in keyof Elements]: Type<Elements[K]> },\n separator: string = \",\",\n): Type<Elements> {\n return {\n label: elementTypes\n .map((elementType) => elementType.label)\n .join(separator) as Uppercase<string>,\n decoder(value: string) {\n const parts = value.split(separator, elementTypes.length);\n if (parts.length !== elementTypes.length) {\n throw new TypoError(\n new TypoText(\n new TypoString(`Invalid tuple: `),\n new TypoString(`\"${value}\"`, typoStyleQuote),\n new TypoString(` (expected ${elementTypes.length} parts)`),\n ),\n );\n }\n return parts.map((part, index) =>\n typeDecode(\n elementTypes[index]!,\n part,\n () =>\n new TypoText(\n new TypoString(elementTypes[index]!.label, typoStyleUserInput),\n new TypoString(`@${index}`),\n ),\n ),\n ) as Elements;\n },\n };\n}\n\nexport function typeList<Value>(\n elementType: Type<Value>,\n separator: string = \",\",\n): Type<Array<Value>> {\n return {\n label:\n `${elementType.label}[${separator}${elementType.label}]...` as Uppercase<string>,\n decoder(value: string) {\n return value\n .split(separator)\n .map((part, index) =>\n typeDecode(\n elementType,\n part,\n () =>\n new TypoText(\n new TypoString(elementType.label, typoStyleUserInput),\n new TypoString(`@${index}`),\n ),\n ),\n );\n },\n };\n}\n\nexport function typeDecode<Value>(\n type: Type<Value>,\n value: string,\n context: () => TypoText,\n): Value {\n try {\n return type.decoder(value);\n } catch (error) {\n throw new TypoError(context(), error);\n }\n}\n","import { ReaderArgs as ReaderOptions } from \"./Reader\";\nimport { Type, typeBoolean, typeDecode } from \"./Type\";\nimport {\n TypoError,\n TypoString,\n typoStyleConstants,\n typoStyleUserInput,\n TypoText,\n} from \"./Typo\";\n\nexport type Option<Value> = {\n generateUsage(): OptionUsage;\n createGetter(readerOptions: ReaderOptions): OptionGetter<Value>;\n};\n\nexport type OptionUsage = {\n description: string | undefined;\n hint: string | undefined;\n long: Lowercase<string>; // TODO - better type for long option names ?\n short: string | undefined;\n label: Uppercase<string> | undefined;\n};\n\nexport type OptionGetter<Value> = {\n getValue(): Value;\n};\n\nexport function optionFlag(definition: {\n long: Lowercase<string>;\n short?: string;\n description?: string;\n hint?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n default?: () => boolean;\n}): Option<boolean> {\n const label = `<${typeBoolean.label}>` as Uppercase<string>;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n long: definition.long,\n short: definition.short,\n label: undefined,\n };\n },\n createGetter(readerOptions: ReaderOptions) {\n const key = registerOption(readerOptions, {\n ...definition,\n valued: false,\n });\n return {\n getValue() {\n const optionValues = readerOptions.getOptionValues(key);\n if (optionValues.length > 1) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Must not be set multiple times`),\n ),\n );\n }\n const optionValue = optionValues[0];\n if (optionValue === undefined) {\n try {\n return definition.default ? definition.default() : false;\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Failed to get default value`),\n ),\n error,\n );\n }\n }\n return typeDecode(\n typeBoolean,\n optionValue,\n () =>\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: `),\n new TypoString(label, typoStyleUserInput),\n ),\n );\n },\n };\n },\n };\n}\n\nexport function optionSingleValue<Value>(definition: {\n long: Lowercase<string>;\n short?: string;\n description?: string;\n hint?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n label?: Uppercase<string>;\n type: Type<Value>;\n default: () => Value;\n}): Option<Value> {\n const label = `<${definition.label ?? definition.type.label}>`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n long: definition.long,\n short: definition.short,\n label: label as Uppercase<string>,\n };\n },\n createGetter(readerOptions: ReaderOptions) {\n const key = registerOption(readerOptions, {\n ...definition,\n valued: true,\n });\n return {\n getValue() {\n const optionValues = readerOptions.getOptionValues(key);\n if (optionValues.length > 1) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Requires a single value, but got multiple`),\n ),\n );\n }\n const optionValue = optionValues[0];\n if (optionValue === undefined) {\n try {\n return definition.default();\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: Failed to get default value`),\n ),\n error,\n );\n }\n }\n return typeDecode(\n definition.type,\n optionValue,\n () =>\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: `),\n new TypoString(label, typoStyleUserInput),\n ),\n );\n },\n };\n },\n };\n}\n\nexport function optionRepeatable<Value>(definition: {\n long: Lowercase<string>;\n short?: string;\n description?: string;\n hint?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n label?: Uppercase<string>;\n type: Type<Value>;\n}): Option<Array<Value>> {\n const label = `<${definition.label ?? definition.type.label}>`;\n return {\n generateUsage() {\n // TODO - showcase that it can be repeated ?\n return {\n description: definition.description,\n hint: definition.hint,\n long: definition.long,\n short: definition.short,\n label: label as Uppercase<string>,\n };\n },\n createGetter(readerOptions: ReaderOptions) {\n const key = registerOption(readerOptions, {\n ...definition,\n valued: true,\n });\n return {\n getValue() {\n return readerOptions\n .getOptionValues(key)\n .map((value) =>\n typeDecode(\n definition.type,\n value,\n () =>\n new TypoText(\n new TypoString(`--${definition.long}`, typoStyleConstants),\n new TypoString(`: `),\n new TypoString(label, typoStyleUserInput),\n ),\n ),\n );\n },\n };\n },\n };\n}\n\nfunction registerOption(\n readerOptions: ReaderOptions,\n definition: {\n long: Lowercase<string>;\n short?: string;\n aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n valued: boolean;\n },\n) {\n const { long, short, aliases, valued } = definition;\n const longs = long ? [long] : [];\n if (aliases?.longs) {\n longs.push(...aliases?.longs);\n }\n const shorts = short ? [short] : [];\n if (aliases?.shorts) {\n shorts.push(...aliases?.shorts);\n }\n return readerOptions.registerOption({ longs, shorts, valued });\n}\n","import { ReaderPositionals } from \"./Reader\";\nimport { Type, typeDecode } from \"./Type\";\nimport { TypoError, TypoString, typoStyleUserInput, TypoText } from \"./Typo\";\n\nexport type Positional<Value> = {\n generateUsage(): PositionalUsage;\n consumePositionals(readerPositionals: ReaderPositionals): Value;\n};\n\nexport type PositionalUsage = {\n description: string | undefined;\n hint: string | undefined;\n label: Uppercase<string>;\n};\n\nexport function positionalRequired<Value>(definition: {\n description?: string;\n hint?: string;\n label?: Uppercase<string>;\n type: Type<Value>;\n}): Positional<Value> {\n const label = `<${definition.label ?? definition.type.label}>`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n label: label as Uppercase<string>,\n };\n },\n consumePositionals(readerPositionals: ReaderPositionals) {\n const positional = readerPositionals.consumePositional();\n if (positional === undefined) {\n throw new TypoError(\n new TypoText(\n new TypoString(label, typoStyleUserInput),\n new TypoString(`: Is required, but was not provided`),\n ),\n );\n }\n return typeDecode(\n definition.type,\n positional,\n () => new TypoText(new TypoString(label, typoStyleUserInput)),\n );\n },\n };\n}\n\nexport function positionalOptional<Value>(definition: {\n description?: string;\n hint?: string;\n label?: Uppercase<string>;\n type: Type<Value>;\n default: () => Value;\n}): Positional<Value> {\n const label = `[${definition.label ?? definition.type.label}]`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n label: label as Uppercase<string>,\n };\n },\n consumePositionals(readerPositionals: ReaderPositionals) {\n const positional = readerPositionals.consumePositional();\n if (positional === undefined) {\n try {\n return definition.default();\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(label, typoStyleUserInput),\n new TypoString(`: Failed to get default value`),\n ),\n error,\n );\n }\n }\n return typeDecode(\n definition.type,\n positional,\n () => new TypoText(new TypoString(label, typoStyleUserInput)),\n );\n },\n };\n}\n\nexport function positionalVariadics<Value>(definition: {\n endDelimiter?: string;\n description?: string;\n hint?: string;\n label?: Uppercase<string>;\n type: Type<Value>;\n}): Positional<Array<Value>> {\n const label = `[${definition.label ?? definition.type.label}]`;\n return {\n generateUsage() {\n return {\n description: definition.description,\n hint: definition.hint,\n label: (`${label}...` +\n (definition.endDelimiter\n ? `[\"${definition.endDelimiter}\"]`\n : \"\")) as Uppercase<string>,\n };\n },\n consumePositionals(readerPositionals: ReaderPositionals) {\n const positionals: Array<Value> = [];\n while (true) {\n const positional = readerPositionals.consumePositional();\n if (\n positional === undefined ||\n positional === definition.endDelimiter\n ) {\n break;\n }\n positionals.push(\n typeDecode(\n definition.type,\n positional,\n () => new TypoText(new TypoString(label, typoStyleUserInput)),\n ),\n );\n }\n return positionals;\n },\n };\n}\n","import {\n TypoError,\n TypoString,\n typoStyleConstants,\n typoStyleQuote,\n TypoText,\n} from \"./Typo\";\n\nexport type ReaderOptionKey = (string | { __brand: \"ReaderOptionKey\" }) & {\n __brand: \"ReaderOptionKey\";\n};\n\nexport type ReaderOptions = {\n registerOption(definition: {\n longs: Array<string>;\n shorts: Array<string>;\n valued: boolean;\n }): ReaderOptionKey;\n getOptionValues(key: ReaderOptionKey): Array<string>;\n};\n\nexport type ReaderPositionals = {\n consumePositional(): string | undefined;\n};\n\nexport class ReaderArgs {\n #args: ReadonlyArray<string>;\n #parsedIndex: number;\n #parsedDouble: boolean;\n #keyByLong: Map<string, ReaderOptionKey>;\n #keyByShort: Map<string, ReaderOptionKey>;\n #valuedByKey: Map<ReaderOptionKey, boolean>;\n #resultByKey: Map<ReaderOptionKey, Array<string>>;\n\n constructor(args: ReadonlyArray<string>) {\n this.#args = args;\n this.#parsedIndex = 0;\n this.#parsedDouble = false;\n this.#keyByLong = new Map();\n this.#keyByShort = new Map();\n this.#valuedByKey = new Map();\n this.#resultByKey = new Map();\n }\n\n registerOption(definition: {\n longs: Array<string>;\n shorts: Array<string>;\n valued: boolean;\n }) {\n const key = [\n ...definition.longs.map((long) => `--${long}`),\n ...definition.shorts.map((short) => `-${short}`),\n ].join(\", \") as ReaderOptionKey;\n for (const long of definition.longs) {\n if (this.#keyByLong.has(long)) {\n throw new Error(`Option already registered: --${long}`);\n }\n this.#keyByLong.set(long, key);\n }\n for (const short of definition.shorts) {\n if (this.#keyByShort.has(short)) {\n throw new Error(`Option already registered: -${short}`);\n }\n for (let i = 0; i < short.length; i++) {\n const shortSlice = short.slice(0, i);\n if (this.#keyByShort.has(shortSlice)) {\n throw new Error(\n `Option -${short} overlap with shorter option: -${shortSlice}`,\n );\n }\n }\n for (const shortOther of this.#keyByShort.keys()) {\n if (shortOther.startsWith(short)) {\n throw new Error(\n `Option -${short} overlap with longer option: -${shortOther}`,\n );\n }\n }\n this.#keyByShort.set(short, key);\n }\n this.#valuedByKey.set(key, definition.valued);\n this.#resultByKey.set(key, new Array<string>());\n return key;\n }\n\n getOptionValues(key: ReaderOptionKey): Array<string> {\n const optionResult = this.#resultByKey.get(key);\n if (optionResult === undefined) {\n throw new Error(`Unregistered option: ${key}`);\n }\n return optionResult;\n }\n\n consumePositional(): string | undefined {\n while (true) {\n const arg = this.#consumeArg();\n if (arg === null) {\n return undefined;\n }\n if (this.#processedAsPositional(arg)) {\n return arg;\n }\n }\n }\n\n #consumeArg(): string | null {\n const arg = this.#args[this.#parsedIndex];\n if (arg === undefined) {\n return null;\n }\n this.#parsedIndex++;\n if (!this.#parsedDouble) {\n if (arg === \"--\") {\n this.#parsedDouble = true;\n return this.#consumeArg();\n }\n }\n return arg;\n }\n\n #processedAsPositional(arg: string): boolean {\n if (this.#parsedDouble) {\n return true;\n }\n if (arg.startsWith(\"--\")) {\n const valueIndexStart = arg.indexOf(\"=\");\n if (valueIndexStart === -1) {\n this.#consumeOptionLong(arg.slice(2), null);\n } else {\n this.#consumeOptionLong(\n arg.slice(2, valueIndexStart),\n arg.slice(valueIndexStart + 1),\n );\n }\n return false;\n }\n if (arg.startsWith(\"-\")) {\n let shortIndexStart = 1;\n let shortIndexEnd = 2;\n while (shortIndexEnd <= arg.length) {\n const result = this.#tryConsumeOptionShort(\n arg.slice(shortIndexStart, shortIndexEnd),\n arg.slice(shortIndexEnd),\n );\n if (result === true) {\n return false;\n }\n if (result === false) {\n shortIndexStart = shortIndexEnd;\n }\n shortIndexEnd++;\n }\n throw new TypoError(\n new TypoText(\n new TypoString(`-${arg.slice(shortIndexStart)}`, typoStyleConstants),\n new TypoString(`: Unexpected unknown option`),\n ),\n );\n }\n return true;\n }\n\n #consumeOptionLong(long: string, direct: string | null): void {\n const constant = `--${long}`;\n const key = this.#keyByLong.get(long);\n if (key !== undefined) {\n if (direct !== null) {\n return this.#acknowledgeOption(key, direct);\n }\n const valued = this.#valuedByKey.get(key);\n if (valued) {\n return this.#acknowledgeOption(key, this.#consumeOptionValue(constant));\n }\n return this.#acknowledgeOption(key, \"true\");\n }\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Unexpected unknown option`),\n ),\n );\n }\n\n #tryConsumeOptionShort(short: string, rest: string): boolean | null {\n const key = this.#keyByShort.get(short);\n if (key !== undefined) {\n if (rest.startsWith(\"=\")) {\n this.#acknowledgeOption(key, rest.slice(1));\n return true;\n }\n const valued = this.#valuedByKey.get(key);\n if (valued) {\n if (rest === \"\") {\n this.#acknowledgeOption(key, this.#consumeOptionValue(`-${short}`));\n } else {\n this.#acknowledgeOption(key, rest);\n }\n return true;\n }\n this.#acknowledgeOption(key, \"true\");\n return rest === \"\";\n }\n return null;\n }\n\n #consumeOptionValue(constant: string) {\n const arg = this.#consumeArg();\n if (arg === null) {\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Requires a value, but got end of input`),\n ),\n );\n }\n if (this.#parsedDouble) {\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Requires a value before `),\n new TypoString(`\"--\"`, typoStyleQuote),\n ),\n );\n }\n // TODO - is that weird, could a valid value start with dash ?\n if (arg.startsWith(\"-\")) {\n throw new TypoError(\n new TypoText(\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: Requires a value, but got: `),\n new TypoString(`\"${arg}\"`, typoStyleQuote),\n ),\n );\n }\n return arg;\n }\n\n #acknowledgeOption(key: ReaderOptionKey, value: string) {\n this.getOptionValues(key).push(value);\n }\n}\n","import { CommandUsage } from \"./Command\";\nimport {\n TypoGrid,\n TypoString,\n typoStyleConstants,\n typoStyleUserInput,\n TypoSupport,\n TypoText,\n} from \"./Typo\";\n\nexport function usageToStyledLines(params: {\n cliName: Lowercase<string>;\n commandUsage: CommandUsage;\n typoSupport: TypoSupport;\n}) {\n const { cliName, commandUsage, typoSupport } = params;\n\n const lines = new Array<string>();\n\n const breadcrumbs = [\n textUsageHero(\"Usage:\").computeStyledString(typoSupport),\n textConstants(cliName).computeStyledString(typoSupport),\n ].concat(\n commandUsage.breadcrumbs.map((breadcrumb) => {\n if (\"positional\" in breadcrumb) {\n return textUserInput(breadcrumb.positional).computeStyledString(\n typoSupport,\n );\n }\n if (\"command\" in breadcrumb) {\n return textConstants(breadcrumb.command).computeStyledString(\n typoSupport,\n );\n }\n throw new Error(`Unknown breadcrumb: ${JSON.stringify(breadcrumb)}`);\n }),\n );\n lines.push(breadcrumbs.join(\" \"));\n\n lines.push(\"\");\n const introText = new TypoText();\n introText.pushString(textUsageText(commandUsage.information.description));\n if (commandUsage.information.hint) {\n introText.pushString(textDelimiter(\" \"));\n introText.pushString(textSubtleInfo(`(${commandUsage.information.hint})`));\n }\n lines.push(introText.computeStyledString(typoSupport));\n\n for (const detail of commandUsage.information.details ?? []) {\n const detailText = new TypoText();\n detailText.pushString(textSubtleInfo(detail));\n lines.push(detailText.computeStyledString(typoSupport));\n }\n\n if (commandUsage.positionals.length > 0) {\n lines.push(\"\");\n lines.push(textBlockTitle(\"Positionals:\").computeStyledString(typoSupport));\n const typoGrid = new TypoGrid();\n for (const positionalUsage of commandUsage.positionals) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter(\" \")));\n typoGridRow.push(new TypoText(textUserInput(positionalUsage.label)));\n typoGridRow.push(...createInformationals(positionalUsage));\n typoGrid.pushRow(typoGridRow);\n }\n lines.push(\n ...typoGrid.computeStyledGrid(typoSupport).map((row) => row.join(\"\")),\n );\n }\n\n if (commandUsage.subcommands.length > 0) {\n lines.push(\"\");\n lines.push(textBlockTitle(\"Subcommands:\").computeStyledString(typoSupport));\n const typoGrid = new TypoGrid();\n for (const subcommandUsage of commandUsage.subcommands) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter(\" \")));\n typoGridRow.push(new TypoText(textConstants(subcommandUsage.name)));\n typoGridRow.push(...createInformationals(subcommandUsage));\n typoGrid.pushRow(typoGridRow);\n }\n lines.push(\n ...typoGrid.computeStyledGrid(typoSupport).map((row) => row.join(\"\")),\n );\n }\n\n if (commandUsage.options.length > 0) {\n lines.push(\"\");\n lines.push(textBlockTitle(\"Options:\").computeStyledString(typoSupport));\n const typoGrid = new TypoGrid();\n for (const optionUsage of commandUsage.options) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter(\" \")));\n if (optionUsage.short) {\n typoGridRow.push(\n new TypoText(\n textConstants(`-${optionUsage.short}`),\n textDelimiter(\", \"),\n ),\n );\n } else {\n typoGridRow.push(new TypoText());\n }\n if (optionUsage.label) {\n typoGridRow.push(\n new TypoText(\n textConstants(`--${optionUsage.long}`),\n textDelimiter(\" \"),\n textUserInput(optionUsage.label),\n ),\n );\n } else {\n typoGridRow.push(\n new TypoText(\n textConstants(`--${optionUsage.long}`),\n textSubtleInfo(\"[=no]\"),\n ),\n );\n }\n typoGridRow.push(...createInformationals(optionUsage));\n typoGrid.pushRow(typoGridRow);\n }\n lines.push(\n ...typoGrid.computeStyledGrid(typoSupport).map((row) => row.join(\"\")),\n );\n }\n\n lines.push(\"\");\n return lines;\n}\n\nfunction createInformationals(usage: {\n description: string | undefined;\n hint: string | undefined;\n}): Array<TypoText> {\n const informationals = [];\n if (usage.description) {\n informationals.push(textDelimiter(\" \"));\n informationals.push(textUsefulInfo(usage.description));\n }\n if (usage.hint) {\n informationals.push(textDelimiter(\" \"));\n informationals.push(textSubtleInfo(`(${usage.hint})`));\n }\n if (informationals.length > 0) {\n return [new TypoText(textDelimiter(\" \"), ...informationals)];\n }\n return [];\n}\n\nfunction textUsageHero(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkMagenta\", bold: true });\n}\n\nfunction textUsageText(value: string): TypoString {\n return new TypoString(value, { bold: true });\n}\n\nfunction textUsefulInfo(value: string): TypoString {\n return new TypoString(value);\n}\n\nfunction textBlockTitle(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkGreen\", bold: true });\n}\n\nfunction textSubtleInfo(value: string): TypoString {\n return new TypoString(value, { italic: true, dim: true });\n}\n\nfunction textConstants(value: string): TypoString {\n return new TypoString(value, typoStyleConstants);\n}\n\nfunction textUserInput(value: string): TypoString {\n return new TypoString(value, typoStyleUserInput);\n}\n\nfunction textDelimiter(value: string): TypoString {\n return new TypoString(value);\n}\n","import { CommandDescriptor, CommandFactory } from \"./Command\";\nimport { ReaderArgs } from \"./Reader\";\nimport { TypoSupport } from \"./Typo\";\nimport { usageToStyledLines } from \"./Usage\";\n\nexport async function runAsCliAndExit<Context>(\n cliName: Lowercase<string>,\n cliArgs: ReadonlyArray<string>,\n context: Context,\n command: CommandDescriptor<Context, void>,\n options?: {\n useColors?: boolean | undefined;\n usageOnHelp?: boolean | undefined;\n buildVersion?: string | undefined;\n onExecutionError?: ((error: unknown) => void) | undefined;\n onLogStdOut?: ((message: string) => void) | undefined;\n onLogStdErr?: ((message: string) => void) | undefined;\n onExit?: ((code: number) => never) | undefined;\n },\n): Promise<never> {\n const readerArgs = new ReaderArgs(cliArgs);\n const usageOnHelp = options?.usageOnHelp ?? true;\n if (usageOnHelp) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"help\"],\n valued: false,\n });\n }\n const buildVersion = options?.buildVersion;\n if (buildVersion) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"version\"],\n valued: false,\n });\n }\n /*\n // TODO - handle completions ?\n readerArgs.registerFlag({\n key: \"completion\",\n shorts: [],\n longs: [\"completion\"],\n });\n */\n const typoSupport = chooseTypoSupport(options?.useColors);\n const onLogStdOut = options?.onLogStdOut ?? console.log;\n const onLogStdErr = options?.onLogStdErr ?? console.error;\n const onExit = options?.onExit ?? process.exit;\n const commandFactory = command.createFactory(readerArgs);\n while (true) {\n try {\n const positional = readerArgs.consumePositional();\n if (positional === undefined) {\n break;\n }\n } catch (_) {}\n }\n if (usageOnHelp) {\n if (readerArgs.getOptionValues(\"--help\" as any).length > 0) {\n onLogStdOut(computeUsageString(cliName, commandFactory, typoSupport));\n return onExit(0);\n }\n }\n if (buildVersion) {\n if (readerArgs.getOptionValues(\"--version\" as any).length > 0) {\n onLogStdOut([cliName, buildVersion].join(\" \"));\n return onExit(0);\n }\n }\n try {\n const commandInstance = commandFactory.createInstance();\n try {\n await commandInstance.executeWithContext(context);\n return onExit(0);\n } catch (executionError) {\n if (options?.onExecutionError) {\n options.onExecutionError(executionError);\n } else {\n onLogStdErr(typoSupport.computeStyledErrorMessage(executionError));\n }\n return onExit(1);\n }\n } catch (parsingError) {\n onLogStdErr(computeUsageString(cliName, commandFactory, typoSupport));\n onLogStdErr(typoSupport.computeStyledErrorMessage(parsingError));\n return onExit(1);\n }\n}\n\nfunction computeUsageString<Context, Result>(\n cliName: Lowercase<string>,\n commandFactory: CommandFactory<Context, Result>,\n typoSupport: TypoSupport,\n) {\n return usageToStyledLines({\n cliName,\n commandUsage: commandFactory.generateUsage(),\n typoSupport,\n }).join(\"\\n\");\n}\n\nfunction chooseTypoSupport(useColors?: boolean): TypoSupport {\n if (useColors === undefined) {\n return TypoSupport.inferFromProcess();\n }\n return useColors ? TypoSupport.tty() : TypoSupport.none();\n}\n"],"mappings":"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","names":["index_exports","__export","ReaderArgs","TypoError","TypoGrid","TypoString","TypoSupport","TypoText","command","commandChained","commandWithSubcommands","operation","optionFlag","optionRepeatable","optionSingleValue","positionalOptional","positionalRequired","positionalVariadics","runAsCliAndExit","typeBigInt","typeBoolean","typeDate","typeDecode","typeList","typeMapped","typeNumber","typeOneOf","typeString","typeTuple","typeUrl","typoStyleConstants","typoStyleFailure","typoStyleQuote","typoStyleUserInput","usageToStyledLines","__toCommonJS","typoStyleFailure","typoStyleConstants","typoStyleUserInput","typoStyleQuote","_value","_typoStyle","TypoString","value","typoStyle","__privateAdd","__privateSet","__privateGet","typoSupport","_typoStrings","_TypoText","typoParts","typoPart","typoString","typoText","t","length","TypoText","_typoRows","TypoGrid","cells","widths","printableGrid","typoGridRow","typoGridColumnIndex","width","printableGridRow","typoGridCell","printableGridCell","padding","_typoText","_TypoError","currentTypoText","source","TypoError","_kind","_TypoSupport","kind","fgColorCode","ttyCodeFgColors","bgColorCode","ttyCodeBgColors","boldCode","ttyCodeBold","dimCode","ttyCodeDim","italicCode","ttyCodeItalic","underlineCode","ttyCodeUnderline","strikethroughCode","ttyCodeStrikethrough","ttyCodeReset","fgColorPart","bgColorPart","boldPart","dimPart","italicPart","underlinePart","error","TypoSupport","command","information","operation","readerArgs","generateUsage","operationUsage","positional","breadcrumbPositional","operationFactory","endPositional","operationInstance","context","error","commandWithSubcommands","subcommands","subcommandName","TypoError","TypoText","TypoString","typoStyleUserInput","subcommandInput","typoStyleQuote","subcommandFactory","subcommandUsage","breadcrumbCommand","subcommandInstance","subcommand","metadata","commandChained","nextCommand","nextCommandFactory","nextCommandUsage","nextCommandInstance","value","operation","inputs","handler","optionsUsage","optionKey","optionInput","positionalsUsage","positionalInput","readerArgs","optionsGetters","positionalsValues","optionsValues","context","typeBoolean","value","lowerValue","TypoError","TypoText","TypoString","typoStyleQuote","typeDate","timestamp","typeUrl","typeString","typeNumber","typeBigInt","typeMapped","before","after","typeDecode","typoStyleUserInput","typeOneOf","type","values","valuesSet","decoded","valuesPreview","typeTuple","elementTypes","separator","elementType","parts","part","index","typeList","context","error","optionFlag","definition","label","typeBoolean","readerOptions","key","registerOption","optionValues","TypoError","TypoText","TypoString","typoStyleConstants","optionValue","error","typeDecode","typoStyleUserInput","optionSingleValue","optionRepeatable","value","long","short","aliases","valued","longs","shorts","positionalRequired","definition","label","readerPositionals","positional","TypoError","TypoText","TypoString","typoStyleUserInput","typeDecode","positionalOptional","error","positionalVariadics","positionals","_args","_parsedIndex","_parsedDouble","_keyByLong","_keyByShort","_valuedByKey","_resultByKey","_ReaderArgs_instances","consumeArg_fn","processedAsPositional_fn","consumeOptionLong_fn","tryConsumeOptionShort_fn","consumeOptionValue_fn","acknowledgeOption_fn","ReaderArgs","args","__privateAdd","__privateSet","definition","key","long","short","__privateGet","i","shortSlice","shortOther","optionResult","arg","__privateMethod","__privateWrapper","valueIndexStart","shortIndexStart","shortIndexEnd","result","TypoError","TypoText","TypoString","typoStyleConstants","direct","constant","rest","typoStyleQuote","value","usageToStyledLines","params","cliName","commandUsage","typoSupport","lines","breadcrumbs","textUsageHero","textConstants","breadcrumb","textUserInput","introText","TypoText","textUsageText","textDelimiter","textSubtleInfo","detail","detailText","textBlockTitle","typoGrid","TypoGrid","positionalUsage","typoGridRow","createInformationals","row","subcommandUsage","optionUsage","usage","informationals","textUsefulInfo","value","TypoString","typoStyleConstants","typoStyleUserInput","runAsCliAndExit","cliName","cliArgs","context","command","options","readerArgs","ReaderArgs","usageOnHelp","buildVersion","typoSupport","chooseTypoSupport","onLogStdOut","onLogStdErr","onExit","commandFactory","computeUsageString","commandInstance","executionError","parsingError","usageToStyledLines","useColors","TypoSupport"]}
|
package/package.json
CHANGED
package/src/lib/Usage.ts
CHANGED
|
@@ -166,6 +166,7 @@ it("run", async () => {
|
|
|
166
166
|
" {{-b}@darkCyan}+, {{--boolean-flag}@darkCyan}+{{[=no]}-}* Root boolean-flag description",
|
|
167
167
|
" {{-s}@darkCyan}+, {{--string-option}@darkCyan}+ {{<COOL-STUFF>}@darkBlue}+ Root string-option description",
|
|
168
168
|
" {{--complex-option}@darkCyan}+ {{<NUMBER,STRING[,STRING]...>}@darkBlue}+ Root complex-option description",
|
|
169
|
+
"",
|
|
169
170
|
]);
|
|
170
171
|
expect(usage2).toStrictEqual([
|
|
171
172
|
"{{Usage:}@darkMagenta}+ {{my-cli}@darkCyan}+ {{<POS-1>}@darkBlue}+ {{<POS-2>}@darkBlue}+ {{sub1}@darkCyan}+ {{<POS-STRING>}@darkBlue}+",
|
|
@@ -183,6 +184,7 @@ it("run", async () => {
|
|
|
183
184
|
" {{-b}@darkCyan}+, {{--boolean-flag}@darkCyan}+{{[=no]}-}* Root boolean-flag description",
|
|
184
185
|
" {{-s}@darkCyan}+, {{--string-option}@darkCyan}+ {{<COOL-STUFF>}@darkBlue}+ Root string-option description",
|
|
185
186
|
" {{--complex-option}@darkCyan}+ {{<NUMBER,STRING[,STRING]...>}@darkBlue}+ Root complex-option description",
|
|
187
|
+
"",
|
|
186
188
|
]);
|
|
187
189
|
expect(usage3).toStrictEqual([
|
|
188
190
|
"{{Usage:}@darkMagenta}+ {{my-cli}@darkCyan}+ {{<POS-1>}@darkBlue}+ {{<POS-2>}@darkBlue}+ {{sub2}@darkCyan}+ {{<POS-NUMBER>}@darkBlue}+ {{[OPT-POS]}@darkBlue}+ {{[VARIADIC]...}@darkBlue}+",
|
|
@@ -203,6 +205,7 @@ it("run", async () => {
|
|
|
203
205
|
" {{-s}@darkCyan}+, {{--string-option}@darkCyan}+ {{<COOL-STUFF>}@darkBlue}+ Root string-option description",
|
|
204
206
|
" {{--complex-option}@darkCyan}+ {{<NUMBER,STRING[,STRING]...>}@darkBlue}+ Root complex-option description",
|
|
205
207
|
" {{--dudu}@darkCyan}+ {{<STRING>}@darkBlue}+ Dudu option description {{(Dudu option hint)}-}*",
|
|
208
|
+
"",
|
|
206
209
|
]);
|
|
207
210
|
});
|
|
208
211
|
|
|
@@ -35,6 +35,7 @@ it("run", async () => {
|
|
|
35
35
|
" --flag[=no] Option flag description",
|
|
36
36
|
" --repeatable <STRING> Option repeatable description",
|
|
37
37
|
" --single-value <NUMBER> Option single value description",
|
|
38
|
+
"",
|
|
38
39
|
].join("\n");
|
|
39
40
|
const subcommandUsage = [
|
|
40
41
|
"Usage: my-cli <REQUIRED1> subcommand <REQUIRED2> [OPTIONAL] [VARIADICS]...",
|
|
@@ -52,6 +53,7 @@ it("run", async () => {
|
|
|
52
53
|
" --repeatable <STRING> Option repeatable description",
|
|
53
54
|
" --single-value <NUMBER> Option single value description",
|
|
54
55
|
" --url <URL> Option url description",
|
|
56
|
+
"",
|
|
55
57
|
].join("\n");
|
|
56
58
|
|
|
57
59
|
// Test that everything could work normally
|