cli-kiss 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -172,9 +172,12 @@ declare function positionalVariadics<Value>(definition: {
172
172
 
173
173
  type Operation<Input, Output> = {
174
174
  generateUsage(): OperationUsage;
175
- createRunnerFromArgs(readerArgs: ReaderArgs): OperationRunner<Input, Output>;
175
+ createFactory(readerArgs: ReaderArgs): OperationFactory<Input, Output>;
176
176
  };
177
- type OperationRunner<Input, Output> = {
177
+ type OperationFactory<Input, Output> = {
178
+ createInstance(): OperationInstance<Input, Output>;
179
+ };
180
+ type OperationInstance<Input, Output> = {
178
181
  executeWithContext(input: Input): Promise<Output>;
179
182
  };
180
183
  type OperationUsage = {
@@ -197,10 +200,13 @@ declare function operation<Context, Result, Options extends {
197
200
 
198
201
  type Command<Context, Result> = {
199
202
  getDescription(): string | undefined;
200
- createRunnerFromArgs(readerArgs: ReaderArgs): CommandRunner<Context, Result>;
203
+ createFactory(readerArgs: ReaderArgs): CommandFactory<Context, Result>;
201
204
  };
202
- type CommandRunner<Context, Result> = {
205
+ type CommandFactory<Context, Result> = {
203
206
  generateUsage(): CommandUsage;
207
+ createInstance(): CommandInstance<Context, Result>;
208
+ };
209
+ type CommandInstance<Context, Result> = {
204
210
  executeWithContext(context: Context): Promise<Result>;
205
211
  };
206
212
  type CommandMetadata = {
@@ -230,14 +236,13 @@ declare function commandWithSubcommands<Context, Payload, Result>(metadata: Comm
230
236
  declare function commandChained<Context, Payload, Result>(metadata: CommandMetadata, operation: Operation<Context, Payload>, nextCommand: Command<Payload, Result>): Command<Context, Result>;
231
237
 
232
238
  declare function runAsCliAndExit<Context>(cliName: Lowercase<string>, cliArgs: ReadonlyArray<string>, context: Context, command: Command<Context, void>, application?: {
233
- usageOnError?: boolean | undefined;
234
239
  usageOnHelp?: boolean | undefined;
235
240
  buildVersion?: string | undefined;
236
241
  useColors?: boolean | undefined;
237
242
  onLogStdOut?: ((message: string) => void) | undefined;
238
243
  onLogStdErr?: ((message: string) => void) | undefined;
239
244
  onExit?: ((code: number) => never) | undefined;
240
- onError?: ((error: unknown) => void) | undefined;
245
+ onExecutionError?: ((error: unknown) => void) | undefined;
241
246
  }): Promise<never>;
242
247
 
243
248
  declare function usageToStyledLines(params: {
@@ -246,4 +251,4 @@ declare function usageToStyledLines(params: {
246
251
  typoSupport: TypoSupport;
247
252
  }): string[];
248
253
 
249
- export { type Command, type CommandMetadata, type CommandRunner, type CommandUsage, type CommandUsageBreadcrumb, type CommandUsageSubcommand, type Operation, type OperationRunner, type OperationUsage, type Option, type OptionGetter, type OptionUsage, type Positional, type PositionalUsage, ReaderArgs, type ReaderOptionKey, type ReaderOptions, type ReaderPositionals, type Type, type TypoColor, TypoError, TypoGrid, TypoString, type TypoStyle, 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, typoStyleUserInput, usageToStyledLines };
254
+ export { type Command, type CommandFactory, type CommandInstance, type CommandMetadata, type CommandUsage, type CommandUsageBreadcrumb, type CommandUsageSubcommand, type Operation, type OperationFactory, type OperationInstance, type OperationUsage, type Option, type OptionGetter, type OptionUsage, type Positional, type PositionalUsage, ReaderArgs, type ReaderOptionKey, type ReaderOptions, type ReaderPositionals, type Type, type TypoColor, TypoError, TypoGrid, TypoString, type TypoStyle, 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, typoStyleUserInput, usageToStyledLines };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var q=Object.defineProperty;var me=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var se=t=>{throw TypeError(t)};var we=(t,e)=>{for(var n in e)q(t,n,{get:e[n],enumerable:!0})},fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ye(e))!he.call(t,o)&&o!==n&&q(t,o,{get:()=>e[o],enumerable:!(r=me(e,o))||r.enumerable});return t};var be=t=>fe(q({},"__esModule",{value:!0}),t);var H=(t,e,n)=>e.has(t)||se("Cannot "+n);var c=(t,e,n)=>(H(t,e,"read from private field"),n?n.call(t):e.get(t)),f=(t,e,n)=>e.has(t)?se("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),h=(t,e,n,r)=>(H(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),w=(t,e,n)=>(H(t,e,"access private method"),n);var ie=(t,e,n,r)=>({set _(o){h(t,e,o,n)},get _(){return c(t,e,r)}});var Qe={};we(Qe,{ReaderArgs:()=>K,TypoError:()=>d,TypoGrid:()=>P,TypoString:()=>s,TypoSupport:()=>V,TypoText:()=>l,command:()=>ke,commandChained:()=>Pe,commandWithSubcommands:()=>$e,operation:()=>Ve,optionFlag:()=>Ke,optionRepeatable:()=>Ne,optionSingleValue:()=>Fe,positionalOptional:()=>Ye,positionalRequired:()=>je,positionalVariadics:()=>qe,runAsCliAndExit:()=>ze,typeBigInt:()=>Le,typeBoolean:()=>j,typeDate:()=>ve,typeDecode:()=>x,typeList:()=>De,typeMapped:()=>Ie,typeNumber:()=>Ge,typeOneOf:()=>Me,typeString:()=>Be,typeTuple:()=>We,typeUrl:()=>Ee,typoStyleConstants:()=>m,typoStyleFailure:()=>ae,typoStyleUserInput:()=>y,usageToStyledLines:()=>ne});module.exports=be(Qe);var m={fgColor:"darkCyan",bold:!0},y={fgColor:"darkBlue",bold:!0},ae={fgColor:"darkRed",bold:!0},B,D,s=class{constructor(e,n={}){f(this,B);f(this,D);h(this,B,e),h(this,D,n)}getRawString(){return c(this,B)}computeStyledString(e){return e.computeStyledString(c(this,B),c(this,D))}};B=new WeakMap,D=new WeakMap;var S,J=class J{constructor(...e){f(this,S);h(this,S,[]);for(let n of e)n instanceof J?this.pushText(n):n instanceof s?this.pushString(n):typeof n=="string"&&this.pushString(new s(n))}pushString(e){c(this,S).push(e)}pushText(e){for(let n of c(e,S))c(this,S).push(n)}computeStyledString(e){return c(this,S).map(n=>n.computeStyledString(e)).join("")}computeRawString(){return c(this,S).map(e=>e.getRawString()).join("")}computeRawLength(){let e=0;for(let n of c(this,S))e+=n.getRawString().length;return e}};S=new WeakMap;var l=J,$,P=class{constructor(){f(this,$);h(this,$,[])}pushRow(e){c(this,$).push(e)}computeStyledGrid(e){let n=new Array,r=new Array;for(let o of c(this,$))for(let i=0;i<o.length;i++){let p=o[i].computeRawLength();(n[i]===void 0||p>n[i])&&(n[i]=p)}for(let o of c(this,$)){let i=new Array;for(let a=0;a<o.length;a++){let p=o[a],u=p.computeStyledString(e);if(i.push(u),a<o.length-1){let b=p.computeRawLength(),O=" ".repeat(n[a]-b);i.push(O)}}r.push(i)}return r}};$=new WeakMap;var G,z=class z extends Error{constructor(n,r){let o=new l;o.pushText(n),r instanceof Error?o.pushString(new s(`: ${r.message}`)):r instanceof z?(o.pushString(new s(": ")),o.pushText(c(r,G))):r!==void 0&&o.pushString(new s(`: ${String(r)}`));super(o.computeRawString());f(this,G);h(this,G,o)}computeStyledString(n){return c(this,G).computeStyledString(n)}};G=new WeakMap;var d=z,T,C=class C{constructor(e){f(this,T);h(this,T,e)}static none(){return new C("none")}static tty(){return new C("tty")}static mock(){return new C("mock")}static inferFromProcess(){if(!process)return C.none();if(process.env){if(process.env.FORCE_COLOR==="0")return C.none();if(process.env.FORCE_COLOR)return C.tty();if("NO_COLOR"in process.env)return C.none()}return!process.stdout||!process.stdout.isTTY?C.none():C.tty()}computeStyledString(e,n){if(c(this,T)==="none")return e;if(c(this,T)==="tty"){let r=n.fgColor?Ue[n.fgColor]:"",o=n.bgColor?Ae[n.bgColor]:"",i=n.bold?Ce:"",a=n.dim?Se:"",p=n.italic?Re:"",u=n.underline?Oe:"",b=n.strikethrough?Te:"";return`${r}${o}${i}${a}${p}${u}${b}${e}${xe}`}if(c(this,T)==="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,p=n.italic?`{${a}}*`:a,u=n.underline?`{${p}}_`:p;return n.strikethrough?`{${u}}~`:u}throw new Error(`Unknown TypoSupport kind: ${c(this,T)}`)}computeStyledErrorMessage(e){return[this.computeStyledString("Error:",ae),e instanceof d?e.computeStyledString(this):e instanceof Error?e.message:String(e)].join(" ")}};T=new WeakMap;var V=C,xe="\x1B[0m",Ce="\x1B[1m",Se="\x1B[2m",Re="\x1B[3m",Oe="\x1B[4m",Te="\x1B[9m",Ue={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"},Ae={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 ke(t,e){return{getDescription(){return t.description},createRunnerFromArgs(n){function r(){let o=e.generateUsage();return{metadata:t,breadcrumbs:o.positionals.map(i=>N(i.label)),positionals:o.positionals,subcommands:[],options:o.options}}try{let o=e.createRunnerFromArgs(n),i=n.consumePositional();if(i!==void 0)throw Error(`Unexpected argument: "${i}"`);return{generateUsage:r,async executeWithContext(a){return o.executeWithContext(a)}}}catch(o){return{generateUsage:r,async executeWithContext(){throw o}}}}}}function $e(t,e,n){return{getDescription(){return t.description},createRunnerFromArgs(r){try{let o=e.createRunnerFromArgs(r),i=r.consumePositional();if(i===void 0)throw new d(new l(new s("Missing required positional argument: "),new s("SUBCOMMAND",m)));let a=n[i];if(a===void 0)throw new d(new l(new s("Invalid value for positional argument: "),new s("SUBCOMMAND",m),new s(`: "${i}"`)));let p=a.createRunnerFromArgs(r);return{generateUsage(){let u=e.generateUsage(),b=p.generateUsage();return{metadata:b.metadata,breadcrumbs:u.positionals.map(O=>N(O.label)).concat([pe(i)]).concat(b.breadcrumbs),positionals:u.positionals.concat(b.positionals),subcommands:b.subcommands,options:u.options.concat(b.options)}},async executeWithContext(u){return await p.executeWithContext(await o.executeWithContext(u))}}}catch(o){return{generateUsage(){let i=e.generateUsage();return{metadata:t,breadcrumbs:i.positionals.map(a=>N(a.label)).concat([pe("<SUBCOMMAND>")]),positionals:i.positionals,subcommands:Object.entries(n).map(([a,p])=>({name:a,description:p.getDescription()})),options:i.options}},async executeWithContext(){throw o}}}}}}function Pe(t,e,n){return{getDescription(){return t.description},createRunnerFromArgs(r){let o=e.createRunnerFromArgs(r),i=n.createRunnerFromArgs(r);return{generateUsage(){let a=e.generateUsage(),p=i.generateUsage();return{metadata:p.metadata,breadcrumbs:a.positionals.map(u=>N(u.label)).concat(p.breadcrumbs),positionals:a.positionals.concat(p.positionals),subcommands:p.subcommands,options:a.options.concat(p.options)}},async executeWithContext(a){return await i.executeWithContext(await o.executeWithContext(a))}}}}}function N(t){return{positional:t}}function pe(t){return{command:t}}function Ve(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}},createRunnerFromArgs(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{executeWithContext(i){let a={};for(let p in r)a[p]=r[p].getValue();return e(i,{options:a,positionals:o})}}}}}var j={label:"BOOLEAN",decoder(t){let e=t.toLowerCase();if(e==="true"||e==="yes")return!0;if(e==="false"||e==="no")return!1;throw new Error(`Invalid value: "${t}"`)}},ve={label:"DATE",decoder(t){let e=Date.parse(t);if(isNaN(e))throw new Error(`Invalid ISO_8601 value: "${t}"`);return new Date(e)}},Ee={label:"URL",decoder(t){return new URL(t)}},Be={label:"STRING",decoder(t){return t}},Ge={label:"NUMBER",decoder(t){return Number(t)}},Le={label:"BIGINT",decoder(t){return BigInt(t)}};function Ie(t,e){return{label:e.label,decoder:n=>e.decoder(x(t,n,()=>new l(new s(t.label,y))))}}function Me(t,e){let n=new Set(e);return{label:t.label,decoder(r){let o=x(t,r,()=>new l(new s(t.label,y)));if(n.has(o))return o;let i=e.map(a=>`"${a}"`).join("|");throw new Error(`Unexpected value: "${r}" (expected: ${i})`)}}}function We(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 Error(`Invalid tuple parts: ${JSON.stringify(r)}`);return r.map((o,i)=>x(t[i],o,()=>new l(new s(t[i].label,y),new s(` at position ${i}`))))}}}function De(t,e=","){return{label:`${t.label}[${e}${t.label}]...`,decoder(n){return n.split(e).map((r,o)=>x(t,r,()=>new l(new s(t.label,y),new s(` at position ${o}`))))}}}function x(t,e,n){try{return t.decoder(e)}catch(r){throw new d(n(),r)}}function Ke(t){return{generateUsage(){return{description:t.description,long:t.long,short:t.short,label:void 0}},createGetter(e){let n=Q(e,{...t,valued:!1});return{getValue(){let r=e.getOptionValues(n);if(r.length>1)throw new d(new l(new s("Option value for: "),new s(`--${t.long}`,m),new s(": must not be set multiple times")));let o=r[0];if(o===void 0)try{return t.default?t.default():!1}catch(i){throw new d(new l(new s("Failed to compute default value for: "),new s(`--${t.long}`,m)),i)}return x(j,o,()=>new l(new s(`--${t.long}`,m),new s(": "),new s(j.label,y)))}}}}}function Fe(t){let e=t.label??t.type.label;return{generateUsage(){return{description:t.description,long:t.long,short:t.short,label:`<${e}>`}},createGetter(n){let r=Q(n,{...t,valued:!0});return{getValue(){let o=n.getOptionValues(r);if(o.length>1)throw new d(new l(new s("Option value for: "),new s(`--${t.long}`,m),new s(": must not be set multiple times")));let i=o[0];if(i===void 0)try{return t.default()}catch(a){throw new d(new l(new s("Failed to compute default value for: "),new s(`--${t.long}`,m)),a)}return x(t.type,i,()=>new l(new s(`--${t.long}`,m),new s(": "),new s(e,y)))}}}}}function Ne(t){let e=t.label??t.type.label;return{generateUsage(){return{description:t.description,long:t.long,short:t.short,label:`<${e}>`}},createGetter(n){let r=Q(n,{...t,valued:!0});return{getValue(){return n.getOptionValues(r).map(o=>x(t.type,o,()=>new l(new s(`--${t.long}`,m),new s(": "),new s(e,y))))}}}}}function Q(t,e){let{long:n,short:r,aliases:o,valued:i}=e,a=n?[n]:[];o?.longs&&a.push(...o?.longs);let p=r?[r]:[];return o?.shorts&&p.push(...o?.shorts),t.registerOption({longs:a,shorts:p,valued:i})}function je(t){let e=t.label??t.type.label;return{generateUsage(){return{description:t.description,label:`<${e}>`}},consumePositionals(n){let r=n.consumePositional();if(r===void 0)throw new d(new l(new s("Missing required positional argument: "),new s(e,y)));return x(t.type,r,()=>new l(new s(e,y)))}}}function Ye(t){let e=t.label??t.type.label;return{generateUsage(){return{description:t.description,label:`[${e}]`}},consumePositionals(n){let r=n.consumePositional();if(r===void 0)try{return t.default()}catch(o){throw new d(new l(new s("Failed to compute default value for: "),new s(e,y)),o)}return x(t.type,r,()=>new l(new s(e,y)))}}}function qe(t){let e=t.label??t.type.label;return{generateUsage(){return{description:t.description,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(x(t.type,o,()=>new l(new s(e,y))))}return r}}}var F,L,A,v,R,E,I,g,Y,le,X,ue,Z,U,K=class{constructor(e){f(this,g);f(this,F);f(this,L);f(this,A);f(this,v);f(this,R);f(this,E);f(this,I);h(this,F,e),h(this,L,0),h(this,A,!1),h(this,v,new Map),h(this,R,new Map),h(this,E,new Map),h(this,I,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,v).has(r))throw new Error(`Option already registered: --${r}`);c(this,v).set(r,n)}for(let r of e.shorts){if(c(this,R).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,R).has(i))throw new Error(`Option -${r} overlap with shorter option: -${i}`)}for(let o of c(this,R).keys())if(o.startsWith(r))throw new Error(`Option -${r} overlap with longer option: -${o}`);c(this,R).set(r,n)}return c(this,E).set(n,e.valued),c(this,I).set(n,new Array),n}getOptionValues(e){let n=c(this,I).get(e);if(n===void 0)throw new Error(`Unregistered option: ${e}`);return n}consumePositional(){for(;;){let e=w(this,g,Y).call(this);if(e===null)return;if(w(this,g,le).call(this,e))return e}}};F=new WeakMap,L=new WeakMap,A=new WeakMap,v=new WeakMap,R=new WeakMap,E=new WeakMap,I=new WeakMap,g=new WeakSet,Y=function(){let e=c(this,F)[c(this,L)];return e===void 0?null:(ie(this,L)._++,!c(this,A)&&e==="--"?(h(this,A,!0),w(this,g,Y).call(this)):e)},le=function(e){if(c(this,A))return!0;if(e.startsWith("--")){let n=e.indexOf("=");return n===-1?w(this,g,X).call(this,e.slice(2),null):w(this,g,X).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,g,ue).call(this,e.slice(n,r),e.slice(r));if(o===!0)return!1;o===!1&&(n=r),r++}throw new d(new l(new s("Unknown option: "),new s(`-${e.slice(n)}`,m)))}return!0},X=function(e,n){let r=`--${e}`,o=c(this,v).get(e);if(o!==void 0)return n!==null?w(this,g,U).call(this,o,n):c(this,E).get(o)?w(this,g,U).call(this,o,w(this,g,Z).call(this,r)):w(this,g,U).call(this,o,"true");throw new d(new l(new s("Unknown option: "),new s(r,m)))},ue=function(e,n){let r=c(this,R).get(e);return r!==void 0?n.startsWith("=")?(w(this,g,U).call(this,r,n.slice(1)),!0):c(this,E).get(r)?(n===""?w(this,g,U).call(this,r,w(this,g,Z).call(this,`-${e}`)):w(this,g,U).call(this,r,n),!0):(w(this,g,U).call(this,r,"true"),n===""):null},Z=function(e){let n=w(this,g,Y).call(this);if(n===null)throw new d(new l(new s("Option parsing: "),new s(e,m),new s(": requires a value, but got end of input")));if(c(this,A))throw new d(new l(new s("Option parsing: "),new s(e,m),new s(': requires a value before "--"')));if(n.startsWith("-"))throw new d(new l(new s("Option parsing: "),new s(e,m),new s(`: requires a value, but got: "${n}"`)));return n},U=function(e,n){this.getOptionValues(e).push(n)};function ne(t){let{cliName:e,commandUsage:n,typoSupport:r}=t,o=new Array;o.push(He(n.metadata.description).computeStyledString(r)),n.metadata.details&&o.push(ce(n.metadata.details).computeStyledString(r)),o.push("");let i=[Je("Usage:").computeStyledString(r),M(e).computeStyledString(r)].concat(n.breadcrumbs.map(a=>{if("positional"in a)return te(a.positional).computeStyledString(r);if("command"in a)return M(a.command).computeStyledString(r);throw new Error(`Unknown breadcrumb: ${JSON.stringify(a)}`)}));if(o.push(i.join(" ")),n.positionals.length>0){o.push(""),o.push(ee("Positionals:").computeStyledString(r));let a=new P;for(let p of n.positionals){let u=new Array;u.push(new l(k())),u.push(new l(te(p.label))),p.description&&(u.push(new l(k())),u.push(new l(_(p.description)))),a.pushRow(u)}o.push(...a.computeStyledGrid(r).map(p=>p.join("")))}if(n.subcommands.length>0){o.push(""),o.push(ee("Subcommands:").computeStyledString(r));let a=new P;for(let p of n.subcommands){let u=new Array;u.push(new l(k())),u.push(new l(M(p.name))),p.description&&(u.push(new l(k())),u.push(new l(_(p.description)))),a.pushRow(u)}o.push(...a.computeStyledGrid(r).map(p=>p.join("")))}if(n.options.length>0){o.push(""),o.push(ee("Options:").computeStyledString(r));let a=new P;for(let p of n.options){let u=new Array;u.push(new l(k())),p.short?u.push(new l(M(`-${p.short}`),k(", "))):u.push(new l),p.label?u.push(new l(M(`--${p.long}`),k(" "),te(p.label))):u.push(new l(M(`--${p.long}`),ce("[=no]"))),p.description&&(u.push(new l(k())),u.push(new l(_(p.description)))),a.pushRow(u)}o.push(...a.computeStyledGrid(r).map(p=>p.join("")))}return o.push(""),o}function He(t){return new s(t,{bold:!0})}function _(t){return new s(t)}function ce(t){return new s(t,{italic:!0,dim:!0})}function Je(t){return new s(t,{fgColor:"darkMagenta",bold:!0})}function ee(t){return new s(t,{fgColor:"darkGreen",bold:!0})}function M(t){return new s(t,m)}function te(t){return new s(t,y)}function k(t){return new s(t??" ")}async function ze(t,e,n,r,o){let i=new K(e),a=o?.buildVersion;a&&i.registerOption({shorts:[],longs:["version"],valued:!1});let p=o?.usageOnHelp??!0;p&&i.registerOption({shorts:[],longs:["help"],valued:!1});let u=r.createRunnerFromArgs(i);for(;i.consumePositional()!==void 0;);let b=o?.onLogStdOut??console.log,O=o?.onExit??process.exit;if(a&&i.getOptionValues("--version").length>0)return b([t,a].join(" ")),O(0);if(p&&i.getOptionValues("--help").length>0){let W=de(o?.useColors);return b(ge(t,u,W)),O(0)}try{return await u.executeWithContext(n),O(0)}catch(W){if(o?.onError)o.onError(W);else{let oe=o?.onLogStdErr??console.error,re=de(o?.useColors);(o?.usageOnError??!0)&&oe(ge(t,u,re)),oe(re.computeStyledErrorMessage(W))}return O(1)}}function ge(t,e,n){return ne({cliName:t,commandUsage:e.generateUsage(),typoSupport:n}).join(`
2
- `)}function de(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,typoStyleUserInput,usageToStyledLines});
1
+ "use strict";var J=Object.defineProperty;var me=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var ae=t=>{throw TypeError(t)};var we=(t,e)=>{for(var n in e)J(t,n,{get:e[n],enumerable:!0})},fe=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ye(e))!he.call(t,r)&&r!==n&&J(t,r,{get:()=>e[r],enumerable:!(o=me(e,r))||o.enumerable});return t};var be=t=>fe(J({},"__esModule",{value:!0}),t);var z=(t,e,n)=>e.has(t)||ae("Cannot "+n);var c=(t,e,n)=>(z(t,e,"read from private field"),n?n.call(t):e.get(t)),b=(t,e,n)=>e.has(t)?ae("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),w=(t,e,n,o)=>(z(t,e,"write to private field"),o?o.call(t,n):e.set(t,n),n),f=(t,e,n)=>(z(t,e,"access private method"),n);var ie=(t,e,n,o)=>({set _(r){w(t,e,r,n)},get _(){return c(t,e,o)}});var Xe={};we(Xe,{ReaderArgs:()=>W,TypoError:()=>d,TypoGrid:()=>I,TypoString:()=>a,TypoSupport:()=>P,TypoText:()=>l,command:()=>Ae,commandChained:()=>Ie,commandWithSubcommands:()=>$e,operation:()=>Pe,optionFlag:()=>We,optionRepeatable:()=>Ne,optionSingleValue:()=>Ke,positionalOptional:()=>Ye,positionalRequired:()=>je,positionalVariadics:()=>qe,runAsCliAndExit:()=>ze,typeBigInt:()=>Ge,typeBoolean:()=>Y,typeDate:()=>Ve,typeDecode:()=>x,typeList:()=>De,typeMapped:()=>Le,typeNumber:()=>Be,typeOneOf:()=>Fe,typeString:()=>Ee,typeTuple:()=>Me,typeUrl:()=>ve,typoStyleConstants:()=>m,typoStyleFailure:()=>pe,typoStyleUserInput:()=>y,usageToStyledLines:()=>re});module.exports=be(Xe);var m={fgColor:"darkCyan",bold:!0},y={fgColor:"darkBlue",bold:!0},pe={fgColor:"darkRed",bold:!0},E,D,a=class{constructor(e,n={}){b(this,E);b(this,D);w(this,E,e),w(this,D,n)}getRawString(){return c(this,E)}computeStyledString(e){return e.computeStyledString(c(this,E),c(this,D))}};E=new WeakMap,D=new WeakMap;var S,Q=class Q{constructor(...e){b(this,S);w(this,S,[]);for(let n of e)n instanceof Q?this.pushText(n):n instanceof a?this.pushString(n):typeof n=="string"&&this.pushString(new a(n))}pushString(e){c(this,S).push(e)}pushText(e){for(let n of c(e,S))c(this,S).push(n)}computeStyledString(e){return c(this,S).map(n=>n.computeStyledString(e)).join("")}computeRawString(){return c(this,S).map(e=>e.getRawString()).join("")}computeRawLength(){let e=0;for(let n of c(this,S))e+=n.getRawString().length;return e}};S=new WeakMap;var l=Q,$,I=class{constructor(){b(this,$);w(this,$,[])}pushRow(e){c(this,$).push(e)}computeStyledGrid(e){let n=new Array,o=new Array;for(let r of c(this,$))for(let s=0;s<r.length;s++){let p=r[s].computeRawLength();(n[s]===void 0||p>n[s])&&(n[s]=p)}for(let r of c(this,$)){let s=new Array;for(let i=0;i<r.length;i++){let p=r[i],u=p.computeStyledString(e);if(s.push(u),i<r.length-1){let h=p.computeRawLength(),O=" ".repeat(n[i]-h);s.push(O)}}o.push(s)}return o}};$=new WeakMap;var B,X=class X extends Error{constructor(n,o){let r=new l;r.pushText(n),o instanceof Error?r.pushString(new a(`: ${o.message}`)):o instanceof X?(r.pushString(new a(": ")),r.pushText(c(o,B))):o!==void 0&&r.pushString(new a(`: ${String(o)}`));super(r.computeRawString());b(this,B);w(this,B,r)}computeStyledString(n){return c(this,B).computeStyledString(n)}};B=new WeakMap;var d=X,U,C=class C{constructor(e){b(this,U);w(this,U,e)}static none(){return new C("none")}static tty(){return new C("tty")}static mock(){return new C("mock")}static inferFromProcess(){if(!process)return C.none();if(process.env){if(process.env.FORCE_COLOR==="0")return C.none();if(process.env.FORCE_COLOR)return C.tty();if("NO_COLOR"in process.env)return C.none()}return!process.stdout||!process.stdout.isTTY?C.none():C.tty()}computeStyledString(e,n){if(c(this,U)==="none")return e;if(c(this,U)==="tty"){let o=n.fgColor?Re[n.fgColor]:"",r=n.bgColor?ke[n.bgColor]:"",s=n.bold?Ce:"",i=n.dim?Se:"",p=n.italic?Te:"",u=n.underline?Oe:"",h=n.strikethrough?Ue:"";return`${o}${r}${s}${i}${p}${u}${h}${e}${xe}`}if(c(this,U)==="mock"){let o=n.fgColor?`{${e}}@${n.fgColor}`:e,r=n.bgColor?`{${o}}#${n.bgColor}`:o,s=n.bold?`{${r}}+`:r,i=n.dim?`{${s}}-`:s,p=n.italic?`{${i}}*`:i,u=n.underline?`{${p}}_`:p;return n.strikethrough?`{${u}}~`:u}throw new Error(`Unknown TypoSupport kind: ${c(this,U)}`)}computeStyledErrorMessage(e){return[this.computeStyledString("Error:",pe),e instanceof d?e.computeStyledString(this):e instanceof Error?e.message:String(e)].join(" ")}};U=new WeakMap;var P=C,xe="\x1B[0m",Ce="\x1B[1m",Se="\x1B[2m",Te="\x1B[3m",Oe="\x1B[4m",Ue="\x1B[9m",Re={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"},ke={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 Ae(t,e){return{getDescription(){return t.description},createFactory(n){function o(){let r=e.generateUsage();return{metadata:t,breadcrumbs:r.positionals.map(s=>j(s.label)),positionals:r.positionals,subcommands:[],options:r.options}}try{let r=e.createFactory(n),s=n.consumePositional();if(s!==void 0)throw Error(`Unexpected argument: "${s}"`);return{generateUsage:o,createInstance(){let i=r.createInstance();return{async executeWithContext(p){return await i.executeWithContext(p)}}}}}catch(r){return{generateUsage:o,createInstance(){throw r}}}}}}function $e(t,e,n){return{getDescription(){return t.description},createFactory(o){try{let r=e.createFactory(o),s=o.consumePositional();if(s===void 0)throw new d(new l(new a("<SUBCOMMAND>",m),new a(": Is required, but was not provided")));let i=n[s];if(i===void 0)throw new d(new l(new a("<SUBCOMMAND>",m),new a(`: Invalid value: "${s}"`)));let p=i.createFactory(o);return{generateUsage(){let u=e.generateUsage(),h=p.generateUsage();return{metadata:h.metadata,breadcrumbs:u.positionals.map(O=>j(O.label)).concat([le(s)]).concat(h.breadcrumbs),positionals:u.positionals.concat(h.positionals),subcommands:h.subcommands,options:u.options.concat(h.options)}},createInstance(){let u=r.createInstance(),h=p.createInstance();return{async executeWithContext(O){return await h.executeWithContext(await u.executeWithContext(O))}}}}}catch(r){return{generateUsage(){let s=e.generateUsage();return{metadata:t,breadcrumbs:s.positionals.map(i=>j(i.label)).concat([le("<SUBCOMMAND>")]),positionals:s.positionals,subcommands:Object.entries(n).map(([i,p])=>({name:i,description:p.getDescription()})),options:s.options}},createInstance(){throw r}}}}}}function Ie(t,e,n){return{getDescription(){return t.description},createFactory(o){let r=e.createFactory(o),s=n.createFactory(o);return{generateUsage(){let i=e.generateUsage(),p=s.generateUsage();return{metadata:p.metadata,breadcrumbs:i.positionals.map(u=>j(u.label)).concat(p.breadcrumbs),positionals:i.positionals.concat(p.positionals),subcommands:p.subcommands,options:i.options.concat(p.options)}},createInstance(){let i=r.createInstance(),p=s.createInstance();return{async executeWithContext(u){return await p.executeWithContext(await i.executeWithContext(u))}}}}}}}function j(t){return{positional:t}}function le(t){return{command:t}}function Pe(t,e){return{generateUsage(){let n=new Array;for(let r in t.options){let s=t.options[r];s&&n.push(s.generateUsage())}let o=new Array;for(let r of t.positionals)o.push(r.generateUsage());return{options:n,positionals:o}},createFactory(n){let o={};for(let s in t.options){let i=t.options[s];o[s]=i.createGetter(n)}let r=[];for(let s of t.positionals)r.push(s.consumePositionals(n));return{createInstance(){let s={};for(let i in o)s[i]=o[i].getValue();return{executeWithContext(i){return e(i,{options:s,positionals:r})}}}}}}}var Y={label:"BOOLEAN",decoder(t){let e=t.toLowerCase();if(e==="true"||e==="yes")return!0;if(e==="false"||e==="no")return!1;throw new Error(`Invalid value: "${t}"`)}},Ve={label:"DATE",decoder(t){let e=Date.parse(t);if(isNaN(e))throw new Error(`Invalid ISO_8601 value: "${t}"`);return new Date(e)}},ve={label:"URL",decoder(t){return new URL(t)}},Ee={label:"STRING",decoder(t){return t}},Be={label:"NUMBER",decoder(t){return Number(t)}},Ge={label:"BIGINT",decoder(t){return BigInt(t)}};function Le(t,e){return{label:e.label,decoder:n=>e.decoder(x(t,n,()=>new l(new a(t.label,y))))}}function Fe(t,e){let n=new Set(e);return{label:t.label,decoder(o){let r=x(t,o,()=>new l(new a(t.label,y)));if(n.has(r))return r;let s=e.map(i=>`"${i}"`).join("|");throw new Error(`Unexpected value: "${o}" (expected: ${s})`)}}}function Me(t,e=","){return{label:t.map(n=>n.label).join(e),decoder(n){let o=n.split(e,t.length);if(o.length!==t.length)throw new Error(`Invalid tuple parts: ${JSON.stringify(o)}`);return o.map((r,s)=>x(t[s],r,()=>new l(new a(t[s].label,y),new a(` at position ${s}`))))}}}function De(t,e=","){return{label:`${t.label}[${e}${t.label}]...`,decoder(n){return n.split(e).map((o,r)=>x(t,o,()=>new l(new a(t.label,y),new a(` at position ${r}`))))}}}function x(t,e,n){try{return t.decoder(e)}catch(o){throw new d(n(),o)}}function We(t){let e=`<${Y.label}>`;return{generateUsage(){return{description:t.description,long:t.long,short:t.short,label:void 0}},createGetter(n){let o=Z(n,{...t,valued:!1});return{getValue(){let r=n.getOptionValues(o);if(r.length>1)throw new d(new l(new a(`--${t.long}`,m),new a(": Must not be set multiple times")));let s=r[0];if(s===void 0)try{return t.default?t.default():!1}catch(i){throw new d(new l(new a(`--${t.long}`,m),new a(": Failed to compute default value")),i)}return x(Y,s,()=>new l(new a(`--${t.long}`,m),new a(": "),new a(e,y)))}}}}}function Ke(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,long:t.long,short:t.short,label:e}},createGetter(n){let o=Z(n,{...t,valued:!0});return{getValue(){let r=n.getOptionValues(o);if(r.length>1)throw new d(new l(new a(`--${t.long}`,m),new a(": Must not be set multiple times")));let s=r[0];if(s===void 0)try{return t.default()}catch(i){throw new d(new l(new a(`--${t.long}`,m),new a(": Failed to compute default value")),i)}return x(t.type,s,()=>new l(new a(`--${t.long}`,m),new a(": "),new a(e,y)))}}}}}function Ne(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,long:t.long,short:t.short,label:e}},createGetter(n){let o=Z(n,{...t,valued:!0});return{getValue(){return n.getOptionValues(o).map(r=>x(t.type,r,()=>new l(new a(`--${t.long}`,m),new a(": "),new a(e,y))))}}}}}function Z(t,e){let{long:n,short:o,aliases:r,valued:s}=e,i=n?[n]:[];r?.longs&&i.push(...r?.longs);let p=o?[o]:[];return r?.shorts&&p.push(...r?.shorts),t.registerOption({longs:i,shorts:p,valued:s})}function je(t){let e=`<${t.label??t.type.label}>`;return{generateUsage(){return{description:t.description,label:e}},consumePositionals(n){let o=n.consumePositional();if(o===void 0)throw new d(new l(new a(e,y),new a(": Is required, but was not provided")));return x(t.type,o,()=>new l(new a(e,y)))}}}function Ye(t){let e=`[${t.label??t.type.label}]`;return{generateUsage(){return{description:t.description,label:e}},consumePositionals(n){let o=n.consumePositional();if(o===void 0)try{return t.default()}catch(r){throw new d(new l(new a(e,y),new a(": Failed to compute default value")),r)}return x(t.type,o,()=>new l(new a(e,y)))}}}function qe(t){let e=t.label??t.type.label;return{generateUsage(){return{description:t.description,label:`[${e}]...`+(t.endDelimiter?`["${t.endDelimiter}"]`:"")}},consumePositionals(n){let o=[];for(;;){let r=n.consumePositional();if(r===void 0||r===t.endDelimiter)break;o.push(x(t.type,r,()=>new l(new a(e,y))))}return o}}}var K,G,k,V,T,v,L,g,q,ue,_,ce,ee,R,W=class{constructor(e){b(this,g);b(this,K);b(this,G);b(this,k);b(this,V);b(this,T);b(this,v);b(this,L);w(this,K,e),w(this,G,0),w(this,k,!1),w(this,V,new Map),w(this,T,new Map),w(this,v,new Map),w(this,L,new Map)}registerOption(e){let n=[...e.longs.map(o=>`--${o}`),...e.shorts.map(o=>`-${o}`)].join(", ");for(let o of e.longs){if(c(this,V).has(o))throw new Error(`Option already registered: --${o}`);c(this,V).set(o,n)}for(let o of e.shorts){if(c(this,T).has(o))throw new Error(`Option already registered: -${o}`);for(let r=0;r<o.length;r++){let s=o.slice(0,r);if(c(this,T).has(s))throw new Error(`Option -${o} overlap with shorter option: -${s}`)}for(let r of c(this,T).keys())if(r.startsWith(o))throw new Error(`Option -${o} overlap with longer option: -${r}`);c(this,T).set(o,n)}return c(this,v).set(n,e.valued),c(this,L).set(n,new Array),n}getOptionValues(e){let n=c(this,L).get(e);if(n===void 0)throw new Error(`Unregistered option: ${e}`);return n}consumePositional(){for(;;){let e=f(this,g,q).call(this);if(e===null)return;if(f(this,g,ue).call(this,e))return e}}};K=new WeakMap,G=new WeakMap,k=new WeakMap,V=new WeakMap,T=new WeakMap,v=new WeakMap,L=new WeakMap,g=new WeakSet,q=function(){let e=c(this,K)[c(this,G)];return e===void 0?null:(ie(this,G)._++,!c(this,k)&&e==="--"?(w(this,k,!0),f(this,g,q).call(this)):e)},ue=function(e){if(c(this,k))return!0;if(e.startsWith("--")){let n=e.indexOf("=");return n===-1?f(this,g,_).call(this,e.slice(2),null):f(this,g,_).call(this,e.slice(2,n),e.slice(n+1)),!1}if(e.startsWith("-")){let n=1,o=2;for(;o<=e.length;){let r=f(this,g,ce).call(this,e.slice(n,o),e.slice(o));if(r===!0)return!1;r===!1&&(n=o),o++}throw new d(new l(new a(`-${e.slice(n)}`,m),new a(": Unexpected unknown option")))}return!0},_=function(e,n){let o=`--${e}`,r=c(this,V).get(e);if(r!==void 0)return n!==null?f(this,g,R).call(this,r,n):c(this,v).get(r)?f(this,g,R).call(this,r,f(this,g,ee).call(this,o)):f(this,g,R).call(this,r,"true");throw new d(new l(new a(o,m),new a(": Unexpected unknown option")))},ce=function(e,n){let o=c(this,T).get(e);return o!==void 0?n.startsWith("=")?(f(this,g,R).call(this,o,n.slice(1)),!0):c(this,v).get(o)?(n===""?f(this,g,R).call(this,o,f(this,g,ee).call(this,`-${e}`)):f(this,g,R).call(this,o,n),!0):(f(this,g,R).call(this,o,"true"),n===""):null},ee=function(e){let n=f(this,g,q).call(this);if(n===null)throw new d(new l(new a(e,m),new a(": requires a value, but got end of input")));if(c(this,k))throw new d(new l(new a(e,m),new a(': requires a value before "--"')));if(n.startsWith("-"))throw new d(new l(new a(e,m),new a(`: requires a value, but got: "${n}"`)));return n},R=function(e,n){this.getOptionValues(e).push(n)};function re(t){let{cliName:e,commandUsage:n,typoSupport:o}=t,r=new Array;r.push(He(n.metadata.description).computeStyledString(o)),n.metadata.details&&r.push(ge(n.metadata.details).computeStyledString(o)),r.push("");let s=[Je("Usage:").computeStyledString(o),F(e).computeStyledString(o)].concat(n.breadcrumbs.map(i=>{if("positional"in i)return oe(i.positional).computeStyledString(o);if("command"in i)return F(i.command).computeStyledString(o);throw new Error(`Unknown breadcrumb: ${JSON.stringify(i)}`)}));if(r.push(s.join(" ")),n.positionals.length>0){r.push(""),r.push(ne("Positionals:").computeStyledString(o));let i=new I;for(let p of n.positionals){let u=new Array;u.push(new l(A())),u.push(new l(oe(p.label))),p.description&&(u.push(new l(A())),u.push(new l(te(p.description)))),i.pushRow(u)}r.push(...i.computeStyledGrid(o).map(p=>p.join("")))}if(n.subcommands.length>0){r.push(""),r.push(ne("Subcommands:").computeStyledString(o));let i=new I;for(let p of n.subcommands){let u=new Array;u.push(new l(A())),u.push(new l(F(p.name))),p.description&&(u.push(new l(A())),u.push(new l(te(p.description)))),i.pushRow(u)}r.push(...i.computeStyledGrid(o).map(p=>p.join("")))}if(n.options.length>0){r.push(""),r.push(ne("Options:").computeStyledString(o));let i=new I;for(let p of n.options){let u=new Array;u.push(new l(A())),p.short?u.push(new l(F(`-${p.short}`),A(", "))):u.push(new l),p.label?u.push(new l(F(`--${p.long}`),A(" "),oe(p.label))):u.push(new l(F(`--${p.long}`),ge("[=no]"))),p.description&&(u.push(new l(A())),u.push(new l(te(p.description)))),i.pushRow(u)}r.push(...i.computeStyledGrid(o).map(p=>p.join("")))}return r.push(""),r}function He(t){return new a(t,{bold:!0})}function te(t){return new a(t)}function ge(t){return new a(t,{italic:!0,dim:!0})}function Je(t){return new a(t,{fgColor:"darkMagenta",bold:!0})}function ne(t){return new a(t,{fgColor:"darkGreen",bold:!0})}function F(t){return new a(t,m)}function oe(t){return new a(t,y)}function A(t){return new a(t??" ")}async function ze(t,e,n,o,r){let s=new W(e),i=r?.buildVersion;i&&s.registerOption({shorts:[],longs:["version"],valued:!1});let p=r?.usageOnHelp??!0;p&&s.registerOption({shorts:[],longs:["help"],valued:!1});let u=o.createFactory(s);for(;s.consumePositional()!==void 0;);let h=Qe(r?.useColors),O=r?.onLogStdOut??console.log,H=r?.onLogStdErr??console.error,M=r?.onExit??process.exit;if(i&&s.getOptionValues("--version").length>0)return O([t,i].join(" ")),M(0);if(p&&s.getOptionValues("--help").length>0)return O(de(t,u,h)),M(0);try{let N=u.createInstance();try{return await N.executeWithContext(n),M(0)}catch(se){return r?.onExecutionError?r.onExecutionError(se):H(h.computeStyledErrorMessage(se)),M(1)}}catch(N){return H(de(t,u,h)),H(h.computeStyledErrorMessage(N)),M(1)}}function de(t,e,n){return re({cliName:t,commandUsage:e.generateUsage(),typoSupport:n}).join(`
2
+ `)}function Qe(t){return t===void 0?P.inferFromProcess():t?P.tty():P.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,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 typoStyleConstants: TypoStyle = {\n fgColor: \"darkCyan\",\n bold: true,\n};\nexport const typoStyleUserInput: TypoStyle = {\n fgColor: \"darkBlue\",\n bold: true,\n};\nexport const typoStyleFailure: TypoStyle = {\n fgColor: \"darkRed\",\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 { Operation } from \"./Operation\";\nimport { OptionUsage } from \"./Option\";\nimport { PositionalUsage } from \"./Positional\";\nimport { ReaderArgs } from \"./Reader\";\nimport { TypoError, TypoString, typoStyleConstants, TypoText } from \"./Typo\";\n\nexport type Command<Context, Result> = {\n getDescription(): string | undefined;\n createRunnerFromArgs(readerArgs: ReaderArgs): CommandRunner<Context, Result>;\n};\n\nexport type CommandRunner<Context, Result> = {\n generateUsage(): CommandUsage;\n executeWithContext(context: Context): Promise<Result>;\n};\n\nexport type CommandMetadata = {\n description: string;\n details?: string;\n // TODO - printable examples ?\n};\n\nexport type CommandUsage = {\n metadata: CommandMetadata;\n breadcrumbs: Array<CommandUsageBreadcrumb>;\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};\n\nexport function command<Context, Result>(\n metadata: CommandMetadata,\n operation: Operation<Context, Result>,\n): Command<Context, Result> {\n return {\n getDescription() {\n return metadata.description;\n },\n createRunnerFromArgs(readerArgs: ReaderArgs) {\n function generateUsage(): CommandUsage {\n const operationUsage = operation.generateUsage();\n return {\n metadata,\n breadcrumbs: operationUsage.positionals.map((positional) =>\n breadcrumbPositional(positional.label),\n ),\n positionals: operationUsage.positionals,\n subcommands: [],\n options: operationUsage.options,\n };\n }\n try {\n const operationRunner = operation.createRunnerFromArgs(readerArgs);\n const endPositional = readerArgs.consumePositional();\n if (endPositional !== undefined) {\n throw Error(`Unexpected argument: \"${endPositional}\"`);\n }\n return {\n generateUsage,\n async executeWithContext(context: Context) {\n return operationRunner.executeWithContext(context);\n },\n };\n } catch (error) {\n return {\n generateUsage,\n async executeWithContext() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nexport function commandWithSubcommands<Context, Payload, Result>(\n metadata: CommandMetadata,\n operation: Operation<Context, Payload>,\n subcommands: { [subcommand: Lowercase<string>]: Command<Payload, Result> },\n): Command<Context, Result> {\n return {\n getDescription() {\n return metadata.description;\n },\n createRunnerFromArgs(readerArgs: ReaderArgs) {\n try {\n const operationRunner = operation.createRunnerFromArgs(readerArgs);\n const subcommandName = readerArgs.consumePositional();\n if (subcommandName === undefined) {\n throw new TypoError(\n new TypoText(\n new TypoString(`Missing required positional argument: `),\n new TypoString(`SUBCOMMAND`, typoStyleConstants),\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(`Invalid value for positional argument: `),\n new TypoString(`SUBCOMMAND`, typoStyleConstants),\n new TypoString(`: \"${subcommandName}\"`),\n ),\n );\n }\n const subcommandRunner =\n subcommandInput.createRunnerFromArgs(readerArgs);\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n const subcommandUsage = subcommandRunner.generateUsage();\n return {\n metadata: subcommandUsage.metadata,\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbCommand(subcommandName)])\n .concat(subcommandUsage.breadcrumbs),\n positionals: operationUsage.positionals.concat(\n subcommandUsage.positionals,\n ),\n subcommands: subcommandUsage.subcommands,\n options: operationUsage.options.concat(subcommandUsage.options),\n };\n },\n async executeWithContext(context: Context) {\n return await subcommandRunner.executeWithContext(\n await operationRunner.executeWithContext(context),\n );\n },\n };\n } catch (error) {\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n return {\n metadata,\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbCommand(\"<SUBCOMMAND>\")]),\n positionals: operationUsage.positionals,\n subcommands: Object.entries(subcommands).map(\n ([name, subcommand]) => ({\n name,\n description: subcommand.getDescription(),\n }),\n ),\n options: operationUsage.options,\n };\n },\n async executeWithContext() {\n throw error;\n },\n };\n }\n },\n };\n}\n\nexport function commandChained<Context, Payload, Result>(\n metadata: CommandMetadata,\n operation: Operation<Context, Payload>,\n nextCommand: Command<Payload, Result>,\n): Command<Context, Result> {\n return {\n getDescription() {\n return metadata.description;\n },\n createRunnerFromArgs(readerArgs: ReaderArgs) {\n const operationRunner = operation.createRunnerFromArgs(readerArgs);\n const nextCommandRunner = nextCommand.createRunnerFromArgs(readerArgs);\n return {\n generateUsage() {\n const operationUsage = operation.generateUsage();\n const nextCommandUsage = nextCommandRunner.generateUsage();\n return {\n metadata: nextCommandUsage.metadata,\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat(nextCommandUsage.breadcrumbs),\n positionals: operationUsage.positionals.concat(\n nextCommandUsage.positionals,\n ),\n subcommands: nextCommandUsage.subcommands,\n options: operationUsage.options.concat(nextCommandUsage.options),\n };\n },\n async executeWithContext(context: Context) {\n return await nextCommandRunner.executeWithContext(\n await operationRunner.executeWithContext(context),\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 Operation<Input, Output> = {\n generateUsage(): OperationUsage;\n createRunnerFromArgs(readerArgs: ReaderArgs): OperationRunner<Input, Output>;\n};\n\nexport type OperationRunner<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): Operation<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 createRunnerFromArgs(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 executeWithContext(context: Context) {\n const optionsValues: any = {};\n for (const optionKey in optionsGetters) {\n optionsValues[optionKey] = optionsGetters[optionKey]!.getValue();\n }\n return handler(context, {\n options: optionsValues,\n positionals: positionalsValues,\n });\n },\n };\n },\n };\n}\n","import { TypoError, TypoString, typoStyleUserInput, TypoText } from \"./Typo\";\n\nexport type Type<Value> = {\n // TODO - maybe include an optional hint ??\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 Error(`Invalid value: \"${value}\"`);\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 Error(`Invalid ISO_8601 value: \"${value}\"`);\n }\n return new Date(timestamp);\n },\n};\n\nexport const typeUrl: Type<URL> = {\n label: \"URL\",\n decoder(value: string) {\n return new URL(value);\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 return Number(value);\n },\n};\n\nexport const typeBigInt: Type<bigint> = {\n label: \"BIGINT\",\n decoder(value: string) {\n return BigInt(value);\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 valuesDesc = values.map((v) => `\"${v}\"`).join(\"|\");\n throw new Error(`Unexpected value: \"${value}\" (expected: ${valuesDesc})`);\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 Error(`Invalid tuple parts: ${JSON.stringify(parts)}`);\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(` at position ${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(` at position ${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 long: Lowercase<string>; // TODO - better type for long option names ?\n short: string | undefined;\n label: Uppercase<string> | undefined;\n // TODO - default value for usage ? but it can be dynamic, so maybe not\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 aliases?: { longs?: Array<Lowercase<string>>; shorts?: Array<string> };\n default?: () => boolean;\n}): Option<boolean> {\n return {\n generateUsage() {\n return {\n description: definition.description,\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(`Option value for: `),\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 // TODO - scoped error util\n try {\n return definition.default ? definition.default() : false;\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(`Failed to compute default value for: `),\n new TypoString(`--${definition.long}`, typoStyleConstants),\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(typeBoolean.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 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 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(`Option value for: `),\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();\n } catch (error) {\n throw new TypoError(\n new TypoText(\n new TypoString(`Failed to compute default value for: `),\n new TypoString(`--${definition.long}`, typoStyleConstants),\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 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 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 label: Uppercase<string>;\n};\n\nexport function positionalRequired<Value>(definition: {\n description?: 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 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(`Missing required positional argument: `),\n new TypoString(label, typoStyleUserInput),\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 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 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(`Failed to compute default value for: `),\n new TypoString(label, typoStyleUserInput),\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 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 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 { TypoError, TypoString, typoStyleConstants, TypoText } 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(`Unknown option: `),\n new TypoString(`-${arg.slice(shortIndexStart)}`, typoStyleConstants),\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(`Unknown option: `),\n new TypoString(constant, typoStyleConstants),\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(`Option parsing: `),\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(`Option parsing: `),\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: requires a value before \"--\"`),\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(`Option parsing: `),\n new TypoString(constant, typoStyleConstants),\n new TypoString(`: requires a value, but got: \"${arg}\"`),\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 // TODO - description stacking for subcommands ?\n lines.push(\n textOverview(commandUsage.metadata.description).computeStyledString(\n typoSupport,\n ),\n );\n if (commandUsage.metadata.details) {\n lines.push(\n textSubtleInfo(commandUsage.metadata.details).computeStyledString(\n typoSupport,\n ),\n );\n }\n\n lines.push(\"\");\n const breadcrumbs = [\n textUsageTitle(\"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 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 if (positionalUsage.description) {\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(\n new TypoText(textUsefulInfo(positionalUsage.description)),\n );\n }\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 subcommand of commandUsage.subcommands) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(new TypoText(textConstants(subcommand.name)));\n if (subcommand.description) {\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(new TypoText(textUsefulInfo(subcommand.description)));\n }\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 if (optionUsage.description) {\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(new TypoText(textUsefulInfo(optionUsage.description)));\n }\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 textOverview(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 textSubtleInfo(value: string): TypoString {\n return new TypoString(value, { italic: true, dim: true });\n}\n\nfunction textUsageTitle(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkMagenta\", bold: true });\n}\n\nfunction textBlockTitle(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkGreen\", bold: 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 { Command, CommandRunner } 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: Command<Context, void>,\n application?: {\n usageOnError?: boolean | undefined;\n usageOnHelp?: boolean | undefined;\n buildVersion?: string | undefined;\n useColors?: boolean | undefined;\n onLogStdOut?: ((message: string) => void) | undefined; // TODO - this is a problem, deep commands use console\n onLogStdErr?: ((message: string) => void) | undefined;\n onExit?: ((code: number) => never) | undefined;\n onError?: ((error: unknown) => void) | undefined;\n },\n): Promise<never> {\n // TODO - can those flags could be implemented as a chained command ??\n const readerArgs = new ReaderArgs(cliArgs);\n const buildVersion = application?.buildVersion;\n if (buildVersion) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"version\"],\n valued: false,\n });\n }\n const usageOnHelp = application?.usageOnHelp ?? true;\n if (usageOnHelp) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"help\"],\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 commandRunner = command.createRunnerFromArgs(readerArgs);\n while (true) {\n const positional = readerArgs.consumePositional();\n if (positional === undefined) {\n break;\n }\n }\n const onLogStdOut = application?.onLogStdOut ?? console.log;\n const onExit = application?.onExit ?? process.exit;\n if (buildVersion) {\n if (readerArgs.getOptionValues(\"--version\" as any).length > 0) {\n onLogStdOut([cliName, buildVersion].join(\" \"));\n return onExit(0);\n }\n }\n if (usageOnHelp) {\n if (readerArgs.getOptionValues(\"--help\" as any).length > 0) {\n const typoSupport = chooseTypoSupport(application?.useColors);\n onLogStdOut(computeUsageString(cliName, commandRunner, typoSupport));\n return onExit(0);\n }\n }\n try {\n await commandRunner.executeWithContext(context);\n return onExit(0);\n } catch (error) {\n if (application?.onError) {\n application.onError(error);\n } else {\n const onLogStdErr = application?.onLogStdErr ?? console.error;\n const typoSupport = chooseTypoSupport(application?.useColors);\n if (application?.usageOnError ?? true) {\n onLogStdErr(computeUsageString(cliName, commandRunner, typoSupport));\n }\n onLogStdErr(typoSupport.computeStyledErrorMessage(error));\n }\n return onExit(1);\n }\n}\n\nfunction computeUsageString<Context, Result>(\n cliName: Lowercase<string>,\n commandRunner: CommandRunner<Context, Result>,\n typoSupport: TypoSupport,\n) {\n return usageToStyledLines({\n cliName,\n commandUsage: commandRunner.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","typoStyleUserInput","usageToStyledLines","__toCommonJS","typoStyleConstants","typoStyleUserInput","typoStyleFailure","_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","metadata","operation","readerArgs","generateUsage","operationUsage","positional","breadcrumbPositional","operationRunner","endPositional","context","error","commandWithSubcommands","subcommands","subcommandName","TypoError","TypoText","TypoString","typoStyleConstants","subcommandInput","subcommandRunner","subcommandUsage","breadcrumbCommand","name","subcommand","commandChained","nextCommand","nextCommandRunner","nextCommandUsage","value","operation","inputs","handler","optionsUsage","optionKey","optionInput","positionalsUsage","positionalInput","readerArgs","optionsGetters","positionalsValues","context","optionsValues","typeBoolean","value","lowerValue","typeDate","timestamp","typeUrl","typeString","typeNumber","typeBigInt","typeMapped","before","after","typeDecode","TypoText","TypoString","typoStyleUserInput","typeOneOf","type","values","valuesSet","decoded","valuesDesc","v","typeTuple","elementTypes","separator","elementType","parts","part","index","typeList","context","error","TypoError","optionFlag","definition","readerOptions","key","registerOption","optionValues","TypoError","TypoText","TypoString","typoStyleConstants","optionValue","error","typeDecode","typeBoolean","typoStyleUserInput","optionSingleValue","label","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","value","usageToStyledLines","params","cliName","commandUsage","typoSupport","lines","textOverview","textSubtleInfo","breadcrumbs","textUsageTitle","textConstants","breadcrumb","textUserInput","textBlockTitle","typoGrid","TypoGrid","positionalUsage","typoGridRow","TypoText","textDelimiter","textUsefulInfo","row","subcommand","optionUsage","value","TypoString","typoStyleConstants","typoStyleUserInput","runAsCliAndExit","cliName","cliArgs","context","command","application","readerArgs","ReaderArgs","buildVersion","usageOnHelp","commandRunner","onLogStdOut","onExit","typoSupport","chooseTypoSupport","computeUsageString","error","onLogStdErr","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 typoStyleConstants: TypoStyle = {\n fgColor: \"darkCyan\",\n bold: true,\n};\nexport const typoStyleUserInput: TypoStyle = {\n fgColor: \"darkBlue\",\n bold: true,\n};\nexport const typoStyleFailure: TypoStyle = {\n fgColor: \"darkRed\",\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 { Operation } from \"./Operation\";\nimport { OptionUsage } from \"./Option\";\nimport { PositionalUsage } from \"./Positional\";\nimport { ReaderArgs } from \"./Reader\";\nimport { TypoError, TypoString, typoStyleConstants, TypoText } from \"./Typo\";\n\nexport type Command<Context, Result> = {\n getDescription(): string | undefined;\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 CommandMetadata = {\n description: string;\n details?: string;\n // TODO - printable examples ?\n};\n\nexport type CommandUsage = {\n metadata: CommandMetadata;\n breadcrumbs: Array<CommandUsageBreadcrumb>;\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};\n\nexport function command<Context, Result>(\n metadata: CommandMetadata,\n operation: Operation<Context, Result>,\n): Command<Context, Result> {\n return {\n getDescription() {\n return metadata.description;\n },\n createFactory(readerArgs: ReaderArgs) {\n function generateUsage(): CommandUsage {\n const operationUsage = operation.generateUsage();\n return {\n metadata,\n breadcrumbs: operationUsage.positionals.map((positional) =>\n breadcrumbPositional(positional.label),\n ),\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 metadata: CommandMetadata,\n operation: Operation<Context, Payload>,\n subcommands: { [subcommand: Lowercase<string>]: Command<Payload, Result> },\n): Command<Context, Result> {\n return {\n getDescription() {\n return metadata.description;\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>`, typoStyleConstants),\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>`, typoStyleConstants),\n new TypoString(`: Invalid value: \"${subcommandName}\"`),\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 metadata: subcommandUsage.metadata,\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbCommand(subcommandName)])\n .concat(subcommandUsage.breadcrumbs),\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 metadata,\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat([breadcrumbCommand(\"<SUBCOMMAND>\")]),\n positionals: operationUsage.positionals,\n subcommands: Object.entries(subcommands).map(\n ([name, subcommand]) => ({\n name,\n description: subcommand.getDescription(),\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 metadata: CommandMetadata,\n operation: Operation<Context, Payload>,\n nextCommand: Command<Payload, Result>,\n): Command<Context, Result> {\n return {\n getDescription() {\n return metadata.description;\n },\n createFactory(readerArgs: ReaderArgs) {\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 metadata: nextCommandUsage.metadata,\n breadcrumbs: operationUsage.positionals\n .map((positional) => breadcrumbPositional(positional.label))\n .concat(nextCommandUsage.breadcrumbs),\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 },\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 Operation<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): Operation<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 { TypoError, TypoString, typoStyleUserInput, TypoText } from \"./Typo\";\n\nexport type Type<Value> = {\n // TODO - maybe include an optional hint ??\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 Error(`Invalid value: \"${value}\"`);\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 Error(`Invalid ISO_8601 value: \"${value}\"`);\n }\n return new Date(timestamp);\n },\n};\n\nexport const typeUrl: Type<URL> = {\n label: \"URL\",\n decoder(value: string) {\n return new URL(value);\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 return Number(value);\n },\n};\n\nexport const typeBigInt: Type<bigint> = {\n label: \"BIGINT\",\n decoder(value: string) {\n return BigInt(value);\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 valuesDesc = values.map((v) => `\"${v}\"`).join(\"|\");\n throw new Error(`Unexpected value: \"${value}\" (expected: ${valuesDesc})`);\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 Error(`Invalid tuple parts: ${JSON.stringify(parts)}`);\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(` at position ${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(` at position ${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 long: Lowercase<string>; // TODO - better type for long option names ?\n short: string | undefined;\n label: Uppercase<string> | undefined;\n // TODO - default value for usage ? but it can be dynamic, so maybe not\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 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 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 // TODO - scoped error util\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 compute 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 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 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(`: Must not be set multiple times`),\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 compute 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 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 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 label: Uppercase<string>;\n};\n\nexport function positionalRequired<Value>(definition: {\n description?: 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 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 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 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 compute 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 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 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 { TypoError, TypoString, typoStyleConstants, TypoText } 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 ),\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: \"${arg}\"`),\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 // TODO - description stacking for subcommands ?\n lines.push(\n textOverview(commandUsage.metadata.description).computeStyledString(\n typoSupport,\n ),\n );\n if (commandUsage.metadata.details) {\n lines.push(\n textSubtleInfo(commandUsage.metadata.details).computeStyledString(\n typoSupport,\n ),\n );\n }\n\n lines.push(\"\");\n const breadcrumbs = [\n textUsageTitle(\"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 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 if (positionalUsage.description) {\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(\n new TypoText(textUsefulInfo(positionalUsage.description)),\n );\n }\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 subcommand of commandUsage.subcommands) {\n const typoGridRow = new Array<TypoText>();\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(new TypoText(textConstants(subcommand.name)));\n if (subcommand.description) {\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(new TypoText(textUsefulInfo(subcommand.description)));\n }\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 if (optionUsage.description) {\n typoGridRow.push(new TypoText(textDelimiter()));\n typoGridRow.push(new TypoText(textUsefulInfo(optionUsage.description)));\n }\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 textOverview(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 textSubtleInfo(value: string): TypoString {\n return new TypoString(value, { italic: true, dim: true });\n}\n\nfunction textUsageTitle(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkMagenta\", bold: true });\n}\n\nfunction textBlockTitle(value: string): TypoString {\n return new TypoString(value, { fgColor: \"darkGreen\", bold: 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 { Command, 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: Command<Context, void>,\n application?: {\n usageOnHelp?: boolean | undefined;\n buildVersion?: string | undefined;\n useColors?: boolean | undefined;\n onLogStdOut?: ((message: string) => void) | undefined; // TODO - this is a problem, deep commands use console\n onLogStdErr?: ((message: string) => void) | undefined;\n onExit?: ((code: number) => never) | undefined;\n onExecutionError?: ((error: unknown) => void) | undefined;\n },\n): Promise<never> {\n // TODO - can those flags could be implemented as a chained command ??\n const readerArgs = new ReaderArgs(cliArgs);\n const buildVersion = application?.buildVersion;\n if (buildVersion) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"version\"],\n valued: false,\n });\n }\n const usageOnHelp = application?.usageOnHelp ?? true;\n if (usageOnHelp) {\n readerArgs.registerOption({\n shorts: [],\n longs: [\"help\"],\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 commandFactory = command.createFactory(readerArgs);\n while (true) {\n const positional = readerArgs.consumePositional();\n if (positional === undefined) {\n break;\n }\n }\n const typoSupport = chooseTypoSupport(application?.useColors);\n const onLogStdOut = application?.onLogStdOut ?? console.log;\n const onLogStdErr = application?.onLogStdErr ?? console.error;\n const onExit = application?.onExit ?? process.exit;\n if (buildVersion) {\n if (readerArgs.getOptionValues(\"--version\" as any).length > 0) {\n onLogStdOut([cliName, buildVersion].join(\" \"));\n return onExit(0);\n }\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 try {\n const commandInstance = commandFactory.createInstance();\n try {\n await commandInstance.executeWithContext(context);\n return onExit(0);\n } catch (error) {\n if (application?.onExecutionError) {\n application.onExecutionError(error);\n } else {\n onLogStdErr(typoSupport.computeStyledErrorMessage(error));\n }\n return onExit(1);\n }\n } catch (error) {\n onLogStdErr(computeUsageString(cliName, commandFactory, typoSupport));\n onLogStdErr(typoSupport.computeStyledErrorMessage(error));\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","typoStyleUserInput","usageToStyledLines","__toCommonJS","typoStyleConstants","typoStyleUserInput","typoStyleFailure","_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","metadata","operation","readerArgs","generateUsage","operationUsage","positional","breadcrumbPositional","operationFactory","endPositional","operationInstance","context","error","commandWithSubcommands","subcommands","subcommandName","TypoError","TypoText","TypoString","typoStyleConstants","subcommandInput","subcommandFactory","subcommandUsage","breadcrumbCommand","subcommandInstance","name","subcommand","commandChained","nextCommand","nextCommandFactory","nextCommandUsage","nextCommandInstance","value","operation","inputs","handler","optionsUsage","optionKey","optionInput","positionalsUsage","positionalInput","readerArgs","optionsGetters","positionalsValues","optionsValues","context","typeBoolean","value","lowerValue","typeDate","timestamp","typeUrl","typeString","typeNumber","typeBigInt","typeMapped","before","after","typeDecode","TypoText","TypoString","typoStyleUserInput","typeOneOf","type","values","valuesSet","decoded","valuesDesc","v","typeTuple","elementTypes","separator","elementType","parts","part","index","typeList","context","error","TypoError","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","value","usageToStyledLines","params","cliName","commandUsage","typoSupport","lines","textOverview","textSubtleInfo","breadcrumbs","textUsageTitle","textConstants","breadcrumb","textUserInput","textBlockTitle","typoGrid","TypoGrid","positionalUsage","typoGridRow","TypoText","textDelimiter","textUsefulInfo","row","subcommand","optionUsage","value","TypoString","typoStyleConstants","typoStyleUserInput","runAsCliAndExit","cliName","cliArgs","context","command","application","readerArgs","ReaderArgs","buildVersion","usageOnHelp","commandFactory","typoSupport","chooseTypoSupport","onLogStdOut","onLogStdErr","onExit","computeUsageString","commandInstance","error","usageToStyledLines","useColors","TypoSupport"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cli-kiss",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "devDependencies": {