bob-core 3.0.0-beta.3 → 3.0.0-beta.4

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.
@@ -1 +1 @@
1
- var e={name:`bob-core`,version:`3.0.0-beta.3`,description:`BOB Core`,type:`module`,main:`./dist/cjs/src/index.js`,module:`./dist/esm/src/index.js`,types:`./dist/esm/src/index.d.ts`,files:[`dist`],exports:{".":{import:{types:`./dist/esm/src/index.d.ts`,default:`./dist/esm/src/index.js`},require:{types:`./dist/cjs/src/index.d.ts`,default:`./dist/cjs/src/index.js`}}},scripts:{start:`node -r @swc-node/register debug/main.ts`,build:`rm -rf ./dist && vite build`,typecheck:`tsc --noEmit`,prepack:`npm run build`,test:`vitest run`,lint:`eslint .`,"lint:fix":`eslint . --fix`},author:`Léo Hubert`,license:`ISC`,devDependencies:{"@eslint/js":`^9.39.4`,"@faker-js/faker":`^10.3.0`,"@swc-node/register":`^1.11.1`,"@trivago/prettier-plugin-sort-imports":`^5.2.2`,"@types/minimist":`^1.2.5`,"@types/node":`^20.14.5`,"@types/string-similarity":`^4.0.2`,"@vitest/coverage-v8":`^4.1.0`,eslint:`^9.39.4`,"eslint-config-prettier":`^10.1.8`,"eslint-plugin-prettier":`^5.5.5`,prettier:`^3.6.2`,tsx:`^4.21.0`,typescript:`^5.9.3`,"typescript-eslint":`^8.57.0`,vite:`^8.0.0`,"vite-plugin-dts":`^4.5.4`,vitest:`^4.1.0`},dependencies:{"@inquirer/core":`^11.1.8`,"@inquirer/prompts":`^8.4.1`,chalk:`^5.6.2`,"inquirer-file-selector":`^1.0.1`,minimist:`^1.2.8`}};exports.default=e;
1
+ var e={name:`bob-core`,version:`3.0.0-beta.4`,description:`BOB Core`,type:`module`,main:`./dist/cjs/src/index.js`,module:`./dist/esm/src/index.js`,types:`./dist/esm/src/index.d.ts`,files:[`dist`],exports:{".":{import:{types:`./dist/esm/src/index.d.ts`,default:`./dist/esm/src/index.js`},require:{types:`./dist/cjs/src/index.d.ts`,default:`./dist/cjs/src/index.js`}}},scripts:{start:`node -r @swc-node/register debug/main.ts`,build:`rm -rf ./dist && vite build`,typecheck:`tsc --noEmit`,prepack:`npm run build`,test:`vitest run`,lint:`eslint .`,"lint:fix":`eslint . --fix`},author:`Léo Hubert`,license:`ISC`,devDependencies:{"@eslint/js":`^9.39.4`,"@faker-js/faker":`^10.3.0`,"@swc-node/register":`^1.11.1`,"@trivago/prettier-plugin-sort-imports":`^5.2.2`,"@types/minimist":`^1.2.5`,"@types/node":`^20.14.5`,"@types/string-similarity":`^4.0.2`,"@vitest/coverage-v8":`^4.1.0`,eslint:`^9.39.4`,"eslint-config-prettier":`^10.1.8`,"eslint-plugin-prettier":`^5.5.5`,prettier:`^3.6.2`,tsx:`^4.21.0`,typescript:`^5.9.3`,"typescript-eslint":`^8.57.0`,vite:`^8.0.0`,"vite-plugin-dts":`^4.5.4`,vitest:`^4.1.0`},dependencies:{"@inquirer/core":`^11.1.8`,"@inquirer/prompts":`^8.4.1`,chalk:`^5.6.2`,"inquirer-file-selector":`^1.0.1`,minimist:`^1.2.8`}};exports.default=e;
@@ -0,0 +1,12 @@
1
+ import { ParameterOpts } from './lib/types.js';
2
+ export declare const HelpCommandFlag: import('./lib/types.js').FlagProps<boolean> & import('./lib/types.js').CustomOptions & {
3
+ readonly alias: readonly ["h"];
4
+ readonly description: "Displays help information about the command";
5
+ readonly handler: (value: boolean, opts: ParameterOpts) => {
6
+ shouldStop: false;
7
+ } | {
8
+ shouldStop: true;
9
+ };
10
+ } & {
11
+ parse(input: any, opts: ParameterOpts): boolean;
12
+ };
@@ -12,5 +12,4 @@ export * from './errors/index.js';
12
12
  export * from './args/index.js';
13
13
  export * from './flags/index.js';
14
14
  export * from './lib/types.js';
15
- export * from './options/index.js';
16
15
  export * from './ux/index.js';
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`chalk`);c=s(c,1);let l=require(`node:fs`);l=s(l,1);let u=require(`node:path`);u=s(u,1);let d=require(`minimist`);d=s(d,1);let f=require(`@inquirer/prompts`),p=require(`inquirer-file-selector`);var m=class{level;constructor(e={}){this.level=e.level??`info`}shouldLog(e){let t=[`debug`,`info`,`warn`,`error`],n=t.indexOf(this.level);return t.indexOf(e)>=n}setLevel(e){this.level=e}getLevel(){return this.level}log(...e){console.log(...e)}info(...e){this.shouldLog(`info`)&&console.log(...e)}warn(...e){this.shouldLog(`warn`)&&console.warn(...e)}error(...e){this.shouldLog(`error`)&&console.error(...e)}debug(...e){this.shouldLog(`debug`)&&console.log(...e)}},h=class{getBigrams(e){let t=[],n=e.toLowerCase();for(let e=0;e<n.length-1;e++)t.push(n.slice(e,e+2));return t}calculateSimilarity(e,t){if(e===t)return 1;if(e.length<2||t.length<2)return 0;let n=this.getBigrams(e),r=this.getBigrams(t),i=new Set(r),a=0;for(let e of n)i.has(e)&&(a++,i.delete(e));return 2*a/(n.length+r.length)}findBestMatch(e,t){let n=t.map(t=>({target:t,rating:this.calculateSimilarity(e,t)})),r=0,i=n[0]?.rating??0;for(let e=1;e<n.length;e++)n[e].rating>i&&(i=n[e].rating,r=e);return{ratings:n,bestMatch:n[r],bestMatchIndex:r}}},g=class extends Error{$type=`BobError`};function _(e){return c.default.bold.yellow(`'${e}'`)}var ee=/\x1b\[[0-9;]*m/g;function te(e){return e.replace(ee,``).length}function v(e,t){let{title:n,details:r,hint:i}=t,a=r&&r.length>0||i!=null,o=c.default.dim(`│`),s=c.default.dim(`└─`);if(e.log(``),e.log(` ${c.default.red(`error:`)} ${n}`),a){if(e.log(` ${o}`),r&&r.length>0){let t=r.map(([e])=>te(e)),n=Math.max(...t);for(let i=0;i<r.length;i++){let[a,s]=r[i],c=` `.repeat(n-t[i]);e.log(` ${o} ${a}${c} ${s}`)}}i==null?e.log(` ${o}`):(e.log(` ${o}`),e.log(` ${s} try: ${i}`))}e.log(``)}var y=class extends g{constructor(e){super(`Command "${e}" not found.`),this.command=e}pretty(e){v(e,{title:`command ${_(this.command)} not found`})}};function b(e,t){let n=`multiple`in t&&t.multiple,r=`${c.default.yellow.bold(e)} is required`;return t.description&&(r+=`: ${c.default.gray(`(${t.description})`)}`),r+=` ${c.default.green(`(${t.type}${n?`[]`:``})`)}\n`,r}function x(e){return e==null?[]:typeof e==`string`?[e]:e}var S=class extends g{constructor(e,t={}){super(`Flag ${e} is not recognized`),this.flag=e,this.flagsSchema=t}pretty(e){let t=Object.entries(this.flagsSchema).map(([e,t])=>{let n=x(t.alias),r=`--${e}${n.length>0?n.map(e=>`, -${e}`).join(``):``}`,i=t.type===`option`&&`options`in t&&t.options?t.options.join(` | `):t.type,a=t.description??``,o=a?`${a} ${c.default.dim(`(${i})`)}`:c.default.dim(`(${i})`);return[c.default.cyan(r),o]});v(e,{title:`flag ${_(this.flag)} is not recognized`,details:t})}},C=class extends g{constructor(e){super(`Argument "${e}" is required.`),this.argument=e}pretty(e){v(e,{title:`argument ${_(this.argument)} is required`})}},w=class extends g{constructor(e){super(`Flag "${e}" is required.`),this.flag=e}pretty(e){v(e,{title:`flag ${_(this.flag)} is required`})}},T=class extends g{constructor(e,t){let n=`Argument "${e.arg}" value is invalid.`;e.reason?n+=` Reason: ${e.reason}`:n+=` Value: "${e.value}"`,super(n),this.detail=e,this.argDefinition=t}pretty(e){let t=[];this.detail.value!=null&&t.push([c.default.dim(`value`),c.default.yellow(`"${this.detail.value}"`)]),this.detail.reason!=null&&t.push([c.default.dim(`reason`),this.detail.reason]),this.argDefinition?.help!=null&&t.push([c.default.dim(`help`),c.default.green(this.argDefinition.help)]),v(e,{title:`argument ${_(this.detail.arg)} is invalid`,details:t})}},E=class extends g{constructor(e,t){let n=`Flag "${e.flag}" value is invalid.`;e.reason?n+=` Reason: ${e.reason}`:n+=` Value: "${e.value}"`,super(n),this.param=e,this.flagDefinition=t}pretty(e){let t=[];this.param.value!=null&&t.push([c.default.dim(`value`),c.default.yellow(`"${this.param.value}"`)]),this.param.reason!=null&&t.push([c.default.dim(`reason`),this.param.reason]),this.flagDefinition?.help!=null&&t.push([c.default.dim(`help`),c.default.green(this.flagDefinition.help)]),v(e,{title:`flag ${_(this.param.flag)} is invalid`,details:t})}},D=class extends g{constructor(e,t){super(`Too many arguments provided. Expected ${e}, got ${t}.`),this.expected=e,this.received=t}pretty(e){v(e,{title:`too many arguments`,details:[[c.default.dim(`expected`),c.default.green(String(this.expected))],[c.default.dim(`received`),c.default.bold.yellow(String(this.received))]]})}},O=class extends Error{constructor(e){super(e)}},k=class{flags;parsedFlags=null;args;parsedArgs=null;ux;shouldPromptForMissingFlags=!0;shouldValidateUnknownFlags=!0;shouldRejectExtraArguments=!1;constructor(e){this.opts=e,this.ux=e.ux,this.flags=e.flags,this.args=e.args}async init(e){let{_:t,...n}=(0,d.default)(e);return this.shouldValidateUnknownFlags&&this.validateUnknownFlags(n),this.parsedFlags=await this.handleOptions(n),this.parsedArgs=await this.handleArguments(t),{flags:this.parsedFlags,args:this.parsedArgs}}async validate(){await this.validateSchema(this.flags,this.parsedFlags,`flag`),await this.validateSchema(this.args,this.parsedArgs,`arg`)}flag(e,t){if(!this.parsedFlags)throw Error(`Flags have not been parsed yet. Call init() first.`);return this.isEmptyValue(this.parsedFlags[e])&&t!==void 0?t:this.parsedFlags[e]}async setFlag(e,t){if(!this.parsedFlags)throw Error(`Flags have not been parsed yet. Call init() first.`);if(!(e in this.flags))throw new S(e,this.flags);this.parsedFlags[e]=t}argument(e,t){if(!this.parsedArgs)throw Error(`Arguments have not been parsed yet. Call init() first.`);return this.isEmptyValue(this.parsedArgs[e])&&t!==void 0?t:this.parsedArgs[e]}async setArgument(e,t){if(!this.parsedArgs)throw Error(`Arguments have not been parsed yet. Call init() first.`);if(!(e in this.args))throw new T({arg:e,reason:`Argument "${e}" is not recognized`});this.parsedArgs[e]=t}isEmptyValue(e){return e==null||typeof e==`string`&&e.trim()===``||Array.isArray(e)&&e.length===0}validateUnknownFlags(e){let t=new Set;for(let e in this.flags){t.add(e);let n=this.flags[e],r=Array.isArray(n.alias)?n.alias:n.alias?[n.alias]:[];for(let e of r)t.add(e)}for(let n in e)if(!t.has(n))throw new S(n,this.flags)}async handleOptions(e){let t={};for(let n in this.flags)t[n]=await this.resolveFlagValue(n,this.flags[n],e);return t}async handleArguments(e){let t={},n=[...e],r=Object.keys(this.args).length;for(let e in this.args){let r=this.args[e];if(`multiple`in r&&r.multiple){t[e]=await this.parseValue(n,r,`arg`,{name:e}),n.length=0;continue}t[e]=await this.parseValue(n.shift(),r,`arg`,{name:e})}if(this.shouldRejectExtraArguments&&n.length>0)throw new D(r,r+n.length);return t}async resolveFlagValue(e,t,n){let r,i=[e];t.alias&&i.push(...Array.isArray(t.alias)?t.alias:[t.alias]);for(let e of i)if(e in n){r=n[e];break}return this.parseValue(r,t,`flag`,{name:e})}async parseValue(e,t,n,r){if(this.isEmptyValue(e))return typeof t.default==`function`?await t.default():t.default;if(`multiple`in t&&t.multiple){Array.isArray(e)||(e=[e]);let i=[];for(let a of e)i.push(await this.safeParse(a,t,n,r));return i}return this.safeParse(e,t,n,r)}buildOpts(e,t){return{name:e,ux:this.ux,ctx:this.opts.ctx,definition:t,cmd:this.opts.cmd??Z}}async safeParse(e,t,n,r){try{return t.parse(e,this.buildOpts(r?.name??``,t))}catch(t){if(t instanceof E||t instanceof T||!r)throw t;let i=t instanceof Error?t.message:String(t);throw n===`flag`?new E({flag:r.name,value:e,reason:i}):new T({arg:r.name,value:e,reason:i})}}async validateSchema(e,t,n){for(let r in e){let i=e[r],a=t?.[r],o=this.isEmptyValue(a);if(i.required&&o){if(!this.shouldPromptForMissingFlags)throw n===`flag`?new w(r):new C(r);let e=await this.promptFor(r,i);if(e!=null&&t)a=await this.parseValue(e,i,n,{name:r}),t[r]=a;else throw n===`flag`?new w(r):new C(r)}}}disablePrompting(){return this.shouldPromptForMissingFlags=!1,this}allowUnknownFlags(){return this.shouldValidateUnknownFlags=!1,this}strictMode(){return this.shouldRejectExtraArguments=!0,this}async promptFor(e,t){return t.ask?t.ask(this.buildOpts(e,t)):null}};function A(e){function t(t){return{type:`custom`,default:e?.multiple||t?.multiple?[]:null,...e,...t}}return t}function ne(e){if(typeof e==`boolean`)throw Error(`Expected a string, got boolean "${e}"`);return String(e)}function re(e,t){let n=typeof e==`number`?e:Number(e);if(isNaN(n))throw new O(`must be a valid number`);if(t?.min!==void 0&&n<t.min)throw new O(`is below minimum ${t.min}`);if(t?.max!==void 0&&n>t.max)throw new O(`exceeds maximum ${t.max}`);return n}function ie(e){if(typeof e==`boolean`)return e;let t=String(e).toLowerCase();if(t===`true`||t===`1`)return!0;if(t===`false`||t===`0`)return!1;throw new O(`Invalid boolean value: "${e}". Expected true, false, 1, or 0.`)}function ae(e,t){let n=String(e);if(!t.includes(n))throw new O(`must be one of: ${t.map(e=>`"${e}"`).join(`, `)}`);return n}function oe(e,t){let n=String(e);if(t?.exists&&!l.default.existsSync(n))throw new O(`file does not exist`);return n}function se(e,t){let n=String(e);if(t?.exists)try{if(!l.default.lstatSync(n).isDirectory())throw new O(`directory does not exist`)}catch(e){throw e instanceof O?e:new O(`directory does not exist`)}return n}function ce(e){try{return new URL(String(e))}catch{throw new O(`Invalid URL: "${e}"`)}}var le=A({default:!1,parse:e=>ie(e),ask:async e=>{let t=b(e.name,e.definition);return await e.ux.askForToggle(t)},type:`boolean`});function j(e,t){return n=>{if((n==null||typeof n==`string`&&n.trim()===``)&&e.required)return`This value is required`;try{e.parse(n,t)}catch(e){return e instanceof O?e.message:`Invalid value`}return!0}}function M(e,t){return n=>{if((n==null||n.trim()===``)&&e.required)return`Please enter at least one value`;for(let r of n.split(`,`)){let n=r.trim();if(n!==``)try{e.parse(n,t)}catch(e){return e instanceof O?`"${n}": ${e.message}`:`"${n}": Invalid value`}}return!0}}async function ue(e){let t=e.definition,n=`multiple`in t&&t.multiple,r=b(e.name,t);return n?await e.ux.askForList(r+`Please provide one or more values, separated by commas:
2
2
  `,{separator:`,`,validate:M(t,e)}):`secret`in t&&t.secret?e.ux.askForPassword(r,{validate:j(t,e)}):await e.ux.askForInput(r,{validate:j(t,e)})}async function de(e){let t=e.definition,n=`multiple`in t&&t.multiple,r=b(e.name,t);return n?await e.ux.askForList(r+`Please provide one or more values, separated by commas:
3
- `,{separator:`,`,validate:M(t,e)}):await e.ux.askForNumber(r,{validate:n=>{if(n===void 0&&t.required)return`This value is required`;if(n!==void 0)try{t.parse(String(n),e)}catch(e){return e instanceof O?e.message:`Invalid value`}return!0}})}async function fe(e){let t=e.definition,n=`multiple`in t&&t.multiple,r=b(e.name,t);if(t.type!==`option`)return null;let i=t.options.map(e=>({name:e,value:e}));return n?await e.ux.askForCheckbox(r,i):await e.ux.askForSelect(r,i)}async function pe(e){let t=b(e.name,e.definition);return e.ux.askForFile(t,{basePath:process.cwd()})}async function me(e){let t=b(e.name,e.definition);return e.ux.askForDirectory(t,{basePath:process.cwd()})}async function he(e){let t=b(e.name,e.definition);return await e.ux.askForInput(t,{validate:j(e.definition,e)})}var N=A({parse:(e,t)=>se(e,{exists:t.definition.exists}),ask:me,type:`directory`}),P=A({parse:(e,t)=>oe(e,{exists:t.definition.exists}),ask:pe,type:`file`}),F=A({parse:(e,t)=>re(e,{min:t.definition.min,max:t.definition.max}),ask:de,type:`number`});function I(e){return A({parse:(e,t)=>ae(e,t.definition.options),ask:fe,...e,type:`option`})()}var L=A({parse:e=>ne(e),ask:ue,type:`string`}),R=A({parse:e=>ce(e),ask:he,type:`url`}),z={string:L,number:F,option:I,file:P,directory:N,url:R,custom:A},B={string:L,number:F,boolean:le,option:I,file:P,directory:N,url:R,custom:A};function V(e){return Array(e+5).join(` `)}function ge(e){let t=e.type;return t===`option`&&`options`in e&&e.options?`enum: ${e.options.join(`|`)}`:t??`custom`}var H=B.boolean({alias:[`h`],handler:(e,t)=>{if(!e)return{shouldStop:!1};let n=t.cmd,r=n.args,i={...n.baseFlags,...n.flags},a=Object.entries(r),o=Object.entries(i),s=o.map(([e,t])=>{let n=x(t.alias);return{name:e,...t,flagWithAlias:`--${e}${n.map(e=>`, -${e}`).join(``)}`}}),l=a.filter(([,e])=>e.required);console.log(c.default.yellow(`Description:`)),console.log(` ${n.description}\n`),n.aliases.length>0&&(console.log(c.default.yellow(`Aliases:`)),console.log(` ${n.aliases.join(`, `)}\n`)),console.log(c.default.yellow(`Usage:`)),console.log(` ${n.command} ${l.length>0?l.map(([e])=>`<${e}>`).join(` `):`\b`} [options]`);let u=Math.max(...s.map(e=>e.flagWithAlias.length),0),d=Math.max(...a.map(([e])=>e.length),0),f=d>u?d:u;if(a.length>0){console.log(`\n${c.default.yellow(`Arguments`)}:`);for(let[e,t]of a){let n=V(f-e.length),r=` ${c.default.green(e)} ${n} ${t.description??`\b`}`;if(t.default!==void 0&&!t.required){let e=typeof t.default==`function`?`[function]`:t.multiple?JSON.stringify(t.default):t.default;r+=` ${c.default.yellow(`[default: ${e}]`)}`}`multiple`in t&&t.multiple&&(r+=` ${c.default.white(`(variadic)`)}`),console.log(r)}}if(o.length>0){console.log(`\n${c.default.yellow(`Options`)}:`);for(let e of s){let t=V(f-e.flagWithAlias.length),n=` ${c.default.green(e.flagWithAlias)} ${t} ${e.description??`\b`}`;if(e.type&&(n+=` ${c.default.white(`(${ge(e)})`)}`),e.default!==void 0&&!e.required){let t=typeof e.default==`function`?`(function)`:e.default;n+=` ${c.default.yellow(`[default: ${t}]`)}`}console.log(n)}}let p=n.examples??[];if(p.length>0){console.log(`\n${c.default.yellow(`Examples`)}:`);let e=process.argv[0].split(`/`).pop();e===`node`&&(e+=` `+process.argv[1].split(`/`).pop());for(let[t,n]of p.entries())t>0&&console.log(``),console.log(` ${n.description}\n`),console.log(` ${c.default.green(`${e} ${n.command}`)}`)}return{shouldStop:!0}}}),_e=class extends Error{name=`ExitPromptError`};async function U(e,t){try{return await e()}catch(e){if(e instanceof _e||e instanceof Error&&e.name===`ExitPromptError`)return t;throw e}}async function W(e,t,n){if(t.length===0)throw Error(`No options provided`);let r=t.map(e=>typeof e==`string`?{name:e,value:e}:{name:e.name,value:e.value,disabled:e.disabled,checked:e.checked,description:e.description});return U(()=>(0,f.checkbox)({message:e,choices:r,required:n?.required,pageSize:n?.pageSize,loop:n?.loop,validate:n?.validate,shortcuts:n?.shortcuts}),null)}async function G(e=`Do you want to continue?`,t){return U(()=>(0,f.confirm)({message:e,default:t?.default??!1,transformer:t?.transformer}),!1)}async function K(e,t){return U(()=>(0,f.editor)({message:e,default:t?.default,postfix:t?.postfix,waitForUserInput:t?.waitForUserInput,validate:t?.validate}),null)}async function q(e,t,n){return U(()=>(0,f.expand)({message:e,choices:t,default:n?.default}),null)}async function J(e,t){return U(async()=>{let n=await(0,p.fileSelector)({message:e,basePath:t?.basePath,type:t?.type===`file+directory`?void 0:t?.type,filter:t?.filter,allowCancel:!0,pageSize:t?.pageSize,loop:t?.loop});return n===null?null:n.path},null)}async function ve(e,t){return U(()=>(0,f.input)({message:e,default:t?.default,required:t?.required,validate:t?.validate,transformer:t?.transformer}),null)}async function ye(e,t){let n=t?.separator??`,`;return U(async()=>(await(0,f.input)({message:e,default:t?.default,validate:t?.validate})).split(n).map(e=>e.trim()).filter(e=>e.length>0),null)}async function be(e,t){return U(async()=>await(0,f.number)({message:e,default:t?.default,required:t?.required,min:t?.min,max:t?.max,step:t?.step,validate:t?.validate})??null,null)}async function xe(e,t){return U(()=>(0,f.password)({message:e,mask:t?.mask,validate:t?.validate}),null)}async function Se(e,t,n){return U(()=>(0,f.rawlist)({message:e,choices:t,loop:n?.loop}),null)}async function Ce(e,t,n){return U(()=>(0,f.search)({message:e,source:t,pageSize:n?.pageSize,validate:n?.validate}),null)}async function we(e,t,n){if(t.length===0)throw Error(`No options provided`);let r=t.map(e=>typeof e==`string`?{name:e,value:e}:e);return U(()=>(0,f.select)({message:e,choices:r,default:n?.default,pageSize:n?.pageSize,loop:n?.loop}),null)}async function Te(e,t){let n=t?.active??`Yes`,r=t?.inactive??`No`;return U(()=>(0,f.confirm)({message:e,default:t?.default??!1,transformer:e=>e?n:r}),!1)}function Ee(e,t){let n=t?.separator??`: `,r=t?.keyStyle??c.default.bold,i=Array.isArray(e)?e:Object.entries(e);if(i.length===0)return;let a=Math.max(...i.map(([e])=>e.length));for(let[e,t]of i)console.log(r(e.padEnd(a))+n+String(t??``))}function De(e=``,t=[`⠙`,`⠘`,`⠰`,`⠴`,`⠤`,`⠦`,`⠆`,`⠃`,`⠋`,`⠉`],n=100){let r=e,i=null,a=e.length,o=0,s=e=>{let t=process.stdout.columns||80,n=e+2,r=Math.max(1,Math.ceil(n/t));if(process.stdout.isTTY&&process.stdout.clearLine&&process.stdout.moveCursor){r>1&&process.stdout.moveCursor(0,-(r-1));for(let e=0;e<r;e++)process.stdout.cursorTo(0),process.stdout.clearLine(1),e<r-1&&process.stdout.moveCursor(0,1);r>1&&process.stdout.moveCursor(0,-(r-1)),process.stdout.cursorTo(0)}else process.stdout.write(`\r`+` `.repeat(e+5)+`\r`)},c=setInterval(function(){i!==null&&(s(Math.max(i.length,r.length)),i=null),process.stdout.write(`\r`+t[o++]+` `+r),o%=t.length},n),l=()=>{clearInterval(c),s(a)};return{[Symbol.dispose]:l,[Symbol.asyncDispose]:l,updateText:e=>{i=r,r=e,a=Math.max(a,e.length)},stop:l}}function Y(e,t){let n=t?.width??30,r=t?.completeChar??`█`,i=t?.incompleteChar??`░`,a=0,o=!1,s=()=>{if(o)return;let t=e<=0?1:Math.min(a/e,1),s=Math.round(t*n),c=`${r.repeat(s)+i.repeat(n-s)} ${Math.round(t*100)}% ${a}/${e}`;process.stdout.write(`\r`+c)},c=()=>{o||(o=!0,process.stdout.write(`
4
- `))};return s(),{increment:(t=1)=>{o||(a=Math.min(a+t,e),s())},update:t=>{o||(a=Math.max(0,Math.min(t,e)),s())},stop:c,[Symbol.dispose]:c,[Symbol.asyncDispose]:c}}function Oe(e,t){if(e.length===0)return;let n=t??Object.keys(e[0]).map(e=>({key:e})),r=n.map(e=>e.header??e.key.toUpperCase()),i=n.map((t,n)=>{let i=Math.max(r[n].length,...e.map(e=>(t.format?t.format(e[t.key]):String(e[t.key]??``)).length));return t.width?Math.min(i,t.width):i}),a=(e,t,n=`left`)=>{if(e.length>t)return e.slice(0,t-1)+`…`;switch(n){case`right`:return e.padStart(t);case`center`:{let n=Math.floor((t-e.length)/2);return` `.repeat(n)+e+` `.repeat(t-e.length-n)}default:return e.padEnd(t)}},o=n.map((e,t)=>a(r[t],i[t],e.alignment)).join(` `);console.log(c.default.bold(o));let s=i.map(e=>`-`.repeat(e)).join(` `);console.log(c.default.dim(s));for(let t of e){let e=n.map((e,n)=>a(e.format?e.format(t[e.key]):String(t[e.key]??``),i[n],e.alignment)).join(` `);console.log(e)}}var X=class{askForConfirmation(e,t){return G(e,t)}askForInput(e,t){return ve(e,t)}askForPassword(e,t){return xe(e,t)}askForNumber(e,t){return be(e,t)}askForSelect(e,t,n){return we(e,t,n)}askForCheckbox(e,t,n){return W(e,t,n)}askForSearch(e,t,n){return Ce(e,t,n)}askForList(e,t){return ye(e,t)}askForToggle(e,t){return Te(e,t)}askForEditor(e,t){return K(e,t)}askForRawList(e,t,n){return Se(e,t,n)}askForExpand(e,t,n){return q(e,t,n)}askForFile(e,t){return J(e,{...t,type:`file`})}askForDirectory(e,t){return J(e,{...t,type:`directory`})}askForFileSelector(e,t){return J(e,t)}keyValue(e,t){return Ee(e,t)}table(e,t){return Oe(e,t)}newProgressBar(e,t){return Y(e,t)}newLoader(e,t,n){return De(e,t,n)}},Z=class{static $type=`BobCommand`;static command=``;static description=``;static group;static args={};static flags={};static examples=[];static hidden=!1;static aliases=[];static disableDefaultOptions=!1;static disablePrompting=!1;static allowUnknownFlags=!1;static strictMode=!1;ctx;logger;ux;parser;static baseFlags={help:H};newCommandParser(e){return new k({ux:e.ux,ctx:e.ctx,flags:e.flags,args:e.args,cmd:e.cmd})}newUX(){return new X}async run(e){let t=this.constructor;this.ctx=e.ctx,this.logger=e.logger,this.ux=this.newUX();let n;if(`flags`in e)n={flags:e.flags,args:e.args};else{this.parser=this.newCommandParser({ctx:this.ctx,ux:this.ux,flags:t.disableDefaultOptions?t.flags:{...t.baseFlags,...t.flags},args:t.args,cmd:t}),t.allowUnknownFlags&&this.parser.allowUnknownFlags(),t.strictMode&&this.parser.strictMode(),t.disablePrompting&&this.parser.disablePrompting();let r=await this.parser.init(e.args);for(let n in r.flags){let i=r.flags[n],a=t.flags[n]||t.baseFlags[n];if(a&&a.handler){let r={name:n,ux:this.ux,ctx:e.ctx,definition:a,cmd:t},o=a.handler(i,r);if(o&&o.shouldStop)return-1}}await this.parser.validate(),n={flags:r.flags,args:r.args}}if(this.preHandle){let e=await this.preHandle();if(e&&e!==0)return e}return await this.handle(this.ctx,n)??0}};function ke(e){return typeof e==`object`&&!!e&&`$type`in e&&e.$type===`BobError`}function Q(e){return typeof e==`function`?e.prototype instanceof Z||e.$type===`BobCommand`:!1}var Ae=class{commands={};aliases={};ux;logger;stringSimilarity;constructor(e){this.logger=e?.logger??new m,this.ux=e?.ux??new X,this.stringSimilarity=e?.stringSimilarity??new h}getAvailableCommands(){return[...Object.keys(this.commands),...Object.keys(this.aliases)]}getCommands(){return Object.values(this.commands)}importFile=async e=>(await import(e)).default;commandResolver=async e=>{let t=await this.importFile(e);return t?(t&&typeof t==`object`&&`default`in t&&(t=t.default),typeof t==`function`&&Q(t)?t:null):null};withCommandResolver(e){return this.commandResolver=e,this}withFileImporter(e){return this.importFile=e,this}registerCommand(e,t=!1){if(!Q(e))throw Error(`Invalid command, it must extend the Command class.`);let n=e.command;if(!n)throw Error(`Cannot register a command with no name. ${e.name} `);if(!t&&this.commands[n])throw Error(`Command ${n} already registered.`);if(!t&&this.aliases[n])throw Error(`Command name ${n} conflicts with an existing alias.`);this.commands[n]=e;for(let r of e.aliases){if(!t&&this.commands[r])throw Error(`Alias ${r} conflicts with an existing command name.`);if(!t&&this.aliases[r])throw Error(`Alias ${r} already registered.`);this.aliases[r]=n}}async loadCommandsPath(e){for await(let t of this.listCommandsFiles(e))try{let e=await this.commandResolver(t);Q(e)&&this.registerCommand(e)}catch(e){throw Error(`Command ${t} failed to load. ${e}`,{cause:e})}}async runCommand(e,t,...n){let r;if(typeof t==`string`){let i=this.commands[t]??this.commands[this.aliases[t]];if(!i){let r=await this.suggestCommand(t);if(r)return await this.runCommand(e,r,...n);throw new y(t)}r=new i}else r=Q(t)?new t:t;return await r.run({ctx:e,logger:this.logger,args:n})??0}async suggestCommand(e){let t=this.getAvailableCommands(),{bestMatch:n,bestMatchIndex:r,ratings:i}=this.stringSimilarity.findBestMatch(e,t),a=i.filter(e=>e.rating>.3).map(e=>e.target);if(n&&(n.rating>0&&a.length<=1||n.rating>.7&&a.length>1)){let n=t[r];return await this.askRunSimilarCommand(e,n)?n:null}if(a.length)return await this.ux.askForSelect(`${c.default.red(`unknown command`)} ${c.default.bold.yellow(`'${e}'`)} ${c.default.dim(`—`)} did you mean one of these?`,a)||null;throw new y(e)}async askRunSimilarCommand(e,t){return this.ux.askForConfirmation(`${c.default.red(`unknown command`)} ${c.default.bold.yellow(`'${e}'`)} ${c.default.dim(`—`)} did you mean ${c.default.bold.green(`'${t}'`)}?`)}async*listCommandsFiles(e){let t=await l.default.promises.readdir(e,{withFileTypes:!0});for(let n of t){let t=u.default.resolve(e,n.name);if(n.isDirectory())yield*this.listCommandsFiles(u.default.resolve(e,n.name));else{if(!t.endsWith(`.ts`)&&!t.endsWith(`.js`)&&!t.endsWith(`.mjs`)&&!t.endsWith(`.cjs`))continue;yield t}}}},je=class{logger;constructor(e){this.logger=e}handle(e){if(ke(e))return e.pretty(this.logger),-1;throw e}},Me,Ne=class extends Z{static command=`help`;static description=c.default.bold(`Show help information about the CLI and its commands`);constructor(e){super(),this.opts=e}async handle(){let e=this.opts.commandRegistry.getCommands().filter(e=>!e.hidden),t=this.opts.cliName??`Bob CLI`,n=this.opts.cliVersion??`0.0.0`;Me??=(await Promise.resolve().then(()=>require(`../package-Chbq4tyH.cjs`)))?.default?.version??`0.0.0`;let r=Me;this.logger.log(`${t} ${c.default.green(n)} (core: ${c.default.yellow(r)})
3
+ `,{separator:`,`,validate:M(t,e)}):await e.ux.askForNumber(r,{validate:n=>{if(n===void 0&&t.required)return`This value is required`;if(n!==void 0)try{t.parse(String(n),e)}catch(e){return e instanceof O?e.message:`Invalid value`}return!0}})}async function fe(e){let t=e.definition,n=`multiple`in t&&t.multiple,r=b(e.name,t);if(t.type!==`option`)return null;let i=t.options.map(e=>({name:e,value:e}));return n?await e.ux.askForCheckbox(r,i):await e.ux.askForSelect(r,i)}async function pe(e){let t=b(e.name,e.definition);return e.ux.askForFile(t,{basePath:process.cwd()})}async function me(e){let t=b(e.name,e.definition);return e.ux.askForDirectory(t,{basePath:process.cwd()})}async function he(e){let t=b(e.name,e.definition);return await e.ux.askForInput(t,{validate:j(e.definition,e)})}var N=A({parse:(e,t)=>se(e,{exists:t.definition.exists}),ask:me,type:`directory`}),P=A({parse:(e,t)=>oe(e,{exists:t.definition.exists}),ask:pe,type:`file`}),F=A({parse:(e,t)=>re(e,{min:t.definition.min,max:t.definition.max}),ask:de,type:`number`});function I(e){return A({parse:(e,t)=>ae(e,t.definition.options),ask:fe,...e,type:`option`})()}var L=A({parse:e=>ne(e),ask:ue,type:`string`}),R=A({parse:e=>ce(e),ask:he,type:`url`}),z={string:L,number:F,option:I,file:P,directory:N,url:R,custom:A},B={string:L,number:F,boolean:le,option:I,file:P,directory:N,url:R,custom:A};function V(e){return Array(e+5).join(` `)}function ge(e){let t=e.type;return t===`option`&&`options`in e&&e.options?`enum: ${e.options.join(`|`)}`:t??`custom`}var _e=B.boolean({alias:[`h`],description:`Displays help information about the command`,handler:(e,t)=>{if(!e)return{shouldStop:!1};let n=t.cmd,r=n.args,i={...n.baseFlags,...n.flags},a=Object.entries(r),o=Object.entries(i),s=o.map(([e,t])=>{let n=x(t.alias);return{name:e,...t,flagWithAlias:`--${e}${n.map(e=>`, -${e}`).join(``)}`}}),l=a.filter(([,e])=>e.required);console.log(c.default.yellow(`Description:`)),console.log(` ${n.description}\n`),n.aliases.length>0&&(console.log(c.default.yellow(`Aliases:`)),console.log(` ${n.aliases.join(`, `)}\n`)),console.log(c.default.yellow(`Usage:`)),console.log(` ${n.command} ${l.length>0?l.map(([e])=>`<${e}>`).join(` `):`\b`} [options]`);let u=Math.max(...s.map(e=>e.flagWithAlias.length),0),d=Math.max(...a.map(([e])=>e.length),0),f=d>u?d:u;if(a.length>0){console.log(`\n${c.default.yellow(`Arguments`)}:`);for(let[e,t]of a){let n=V(f-e.length),r=` ${c.default.green(e)} ${n} ${t.description??`\b`}`;if(t.default!==void 0&&!t.required){let e=typeof t.default==`function`?`[function]`:t.multiple?JSON.stringify(t.default):t.default;r+=` ${c.default.yellow(`[default: ${e}]`)}`}`multiple`in t&&t.multiple&&(r+=` ${c.default.white(`(variadic)`)}`),console.log(r)}}if(o.length>0){console.log(`\n${c.default.yellow(`Options`)}:`);for(let e of s){let t=V(f-e.flagWithAlias.length),n=` ${c.default.green(e.flagWithAlias)} ${t} ${e.description??`\b`}`;if(e.type&&(n+=` ${c.default.white(`(${ge(e)})`)}`),e.default!==void 0&&!e.required){let t=typeof e.default==`function`?`(function)`:e.default;n+=` ${c.default.yellow(`[default: ${t}]`)}`}console.log(n)}}let p=n.examples??[];if(p.length>0){console.log(`\n${c.default.yellow(`Examples`)}:`);let e=process.argv[0].split(`/`).pop();e===`node`&&(e+=` `+process.argv[1].split(`/`).pop());for(let[t,n]of p.entries())t>0&&console.log(``),console.log(` ${n.description}\n`),console.log(` ${c.default.green(`${e} ${n.command}`)}`)}return{shouldStop:!0}}}),ve=class extends Error{name=`ExitPromptError`};async function H(e,t){try{return await e()}catch(e){if(e instanceof ve||e instanceof Error&&e.name===`ExitPromptError`)return t;throw e}}async function U(e,t,n){if(t.length===0)throw Error(`No options provided`);let r=t.map(e=>typeof e==`string`?{name:e,value:e}:{name:e.name,value:e.value,disabled:e.disabled,checked:e.checked,description:e.description});return H(()=>(0,f.checkbox)({message:e,choices:r,required:n?.required,pageSize:n?.pageSize,loop:n?.loop,validate:n?.validate,shortcuts:n?.shortcuts}),null)}async function W(e=`Do you want to continue?`,t){return H(()=>(0,f.confirm)({message:e,default:t?.default??!1,transformer:t?.transformer}),!1)}async function G(e,t){return H(()=>(0,f.editor)({message:e,default:t?.default,postfix:t?.postfix,waitForUserInput:t?.waitForUserInput,validate:t?.validate}),null)}async function K(e,t,n){return H(()=>(0,f.expand)({message:e,choices:t,default:n?.default}),null)}async function q(e,t){return H(async()=>{let n=await(0,p.fileSelector)({message:e,basePath:t?.basePath,type:t?.type===`file+directory`?void 0:t?.type,filter:t?.filter,allowCancel:!0,pageSize:t?.pageSize,loop:t?.loop});return n===null?null:n.path},null)}async function J(e,t){return H(()=>(0,f.input)({message:e,default:t?.default,required:t?.required,validate:t?.validate,transformer:t?.transformer}),null)}async function ye(e,t){let n=t?.separator??`,`;return H(async()=>(await(0,f.input)({message:e,default:t?.default,validate:t?.validate})).split(n).map(e=>e.trim()).filter(e=>e.length>0),null)}async function be(e,t){return H(async()=>await(0,f.number)({message:e,default:t?.default,required:t?.required,min:t?.min,max:t?.max,step:t?.step,validate:t?.validate})??null,null)}async function xe(e,t){return H(()=>(0,f.password)({message:e,mask:t?.mask,validate:t?.validate}),null)}async function Se(e,t,n){return H(()=>(0,f.rawlist)({message:e,choices:t,loop:n?.loop}),null)}async function Ce(e,t,n){return H(()=>(0,f.search)({message:e,source:t,pageSize:n?.pageSize,validate:n?.validate}),null)}async function we(e,t,n){if(t.length===0)throw Error(`No options provided`);let r=t.map(e=>typeof e==`string`?{name:e,value:e}:e);return H(()=>(0,f.select)({message:e,choices:r,default:n?.default,pageSize:n?.pageSize,loop:n?.loop}),null)}async function Te(e,t){let n=t?.active??`Yes`,r=t?.inactive??`No`;return H(()=>(0,f.confirm)({message:e,default:t?.default??!1,transformer:e=>e?n:r}),!1)}function Ee(e,t){let n=t?.separator??`: `,r=t?.keyStyle??c.default.bold,i=Array.isArray(e)?e:Object.entries(e);if(i.length===0)return;let a=Math.max(...i.map(([e])=>e.length));for(let[e,t]of i)console.log(r(e.padEnd(a))+n+String(t??``))}function De(e=``,t=[`⠙`,`⠘`,`⠰`,`⠴`,`⠤`,`⠦`,`⠆`,`⠃`,`⠋`,`⠉`],n=100){let r=e,i=null,a=e.length,o=0,s=e=>{let t=process.stdout.columns||80,n=e+2,r=Math.max(1,Math.ceil(n/t));if(process.stdout.isTTY&&process.stdout.clearLine&&process.stdout.moveCursor){r>1&&process.stdout.moveCursor(0,-(r-1));for(let e=0;e<r;e++)process.stdout.cursorTo(0),process.stdout.clearLine(1),e<r-1&&process.stdout.moveCursor(0,1);r>1&&process.stdout.moveCursor(0,-(r-1)),process.stdout.cursorTo(0)}else process.stdout.write(`\r`+` `.repeat(e+5)+`\r`)},c=setInterval(function(){i!==null&&(s(Math.max(i.length,r.length)),i=null),process.stdout.write(`\r`+t[o++]+` `+r),o%=t.length},n),l=()=>{clearInterval(c),s(a)};return{[Symbol.dispose]:l,[Symbol.asyncDispose]:l,updateText:e=>{i=r,r=e,a=Math.max(a,e.length)},stop:l}}function Y(e,t){let n=t?.width??30,r=t?.completeChar??`█`,i=t?.incompleteChar??`░`,a=0,o=!1,s=()=>{if(o)return;let t=e<=0?1:Math.min(a/e,1),s=Math.round(t*n),c=`${r.repeat(s)+i.repeat(n-s)} ${Math.round(t*100)}% ${a}/${e}`;process.stdout.write(`\r`+c)},c=()=>{o||(o=!0,process.stdout.write(`
4
+ `))};return s(),{increment:(t=1)=>{o||(a=Math.min(a+t,e),s())},update:t=>{o||(a=Math.max(0,Math.min(t,e)),s())},stop:c,[Symbol.dispose]:c,[Symbol.asyncDispose]:c}}function Oe(e,t){if(e.length===0)return;let n=t??Object.keys(e[0]).map(e=>({key:e})),r=n.map(e=>e.header??e.key.toUpperCase()),i=n.map((t,n)=>{let i=Math.max(r[n].length,...e.map(e=>(t.format?t.format(e[t.key]):String(e[t.key]??``)).length));return t.width?Math.min(i,t.width):i}),a=(e,t,n=`left`)=>{if(e.length>t)return e.slice(0,t-1)+`…`;switch(n){case`right`:return e.padStart(t);case`center`:{let n=Math.floor((t-e.length)/2);return` `.repeat(n)+e+` `.repeat(t-e.length-n)}default:return e.padEnd(t)}},o=n.map((e,t)=>a(r[t],i[t],e.alignment)).join(` `);console.log(c.default.bold(o));let s=i.map(e=>`-`.repeat(e)).join(` `);console.log(c.default.dim(s));for(let t of e){let e=n.map((e,n)=>a(e.format?e.format(t[e.key]):String(t[e.key]??``),i[n],e.alignment)).join(` `);console.log(e)}}var X=class{askForConfirmation(e,t){return W(e,t)}askForInput(e,t){return J(e,t)}askForPassword(e,t){return xe(e,t)}askForNumber(e,t){return be(e,t)}askForSelect(e,t,n){return we(e,t,n)}askForCheckbox(e,t,n){return U(e,t,n)}askForSearch(e,t,n){return Ce(e,t,n)}askForList(e,t){return ye(e,t)}askForToggle(e,t){return Te(e,t)}askForEditor(e,t){return G(e,t)}askForRawList(e,t,n){return Se(e,t,n)}askForExpand(e,t,n){return K(e,t,n)}askForFile(e,t){return q(e,{...t,type:`file`})}askForDirectory(e,t){return q(e,{...t,type:`directory`})}askForFileSelector(e,t){return q(e,t)}keyValue(e,t){return Ee(e,t)}table(e,t){return Oe(e,t)}newProgressBar(e,t){return Y(e,t)}newLoader(e,t,n){return De(e,t,n)}},Z=class{static $type=`BobCommand`;static command=``;static description=``;static group;static args={};static flags={};static examples=[];static hidden=!1;static aliases=[];static disableDefaultOptions=!1;static disablePrompting=!1;static allowUnknownFlags=!1;static strictMode=!1;ctx;logger;ux;parser;static baseFlags={help:_e};newCommandParser(e){return new k({ux:e.ux,ctx:e.ctx,flags:e.flags,args:e.args,cmd:e.cmd})}newUX(){return new X}async run(e){let t=this.constructor;this.ctx=e.ctx,this.logger=e.logger,this.ux=this.newUX();let n;if(`flags`in e)n={flags:e.flags,args:e.args};else{this.parser=this.newCommandParser({ctx:this.ctx,ux:this.ux,flags:t.disableDefaultOptions?t.flags:{...t.baseFlags,...t.flags},args:t.args,cmd:t}),t.allowUnknownFlags&&this.parser.allowUnknownFlags(),t.strictMode&&this.parser.strictMode(),t.disablePrompting&&this.parser.disablePrompting();let r=await this.parser.init(e.args);for(let n in r.flags){let i=r.flags[n],a=t.flags[n]||t.baseFlags[n];if(a&&a.handler){let r={name:n,ux:this.ux,ctx:e.ctx,definition:a,cmd:t},o=a.handler(i,r);if(o&&o.shouldStop)return-1}}await this.parser.validate(),n={flags:r.flags,args:r.args}}if(this.preHandle){let e=await this.preHandle();if(e&&e!==0)return e}return await this.handle(this.ctx,n)??0}};function ke(e){return typeof e==`object`&&!!e&&`$type`in e&&e.$type===`BobError`}function Q(e){return typeof e==`function`?e.prototype instanceof Z||e.$type===`BobCommand`:!1}var Ae=class{commands={};aliases={};ux;logger;stringSimilarity;constructor(e){this.logger=e?.logger??new m,this.ux=e?.ux??new X,this.stringSimilarity=e?.stringSimilarity??new h}getAvailableCommands(){return[...Object.keys(this.commands),...Object.keys(this.aliases)]}getCommands(){return Object.values(this.commands)}importFile=async e=>(await import(e)).default;commandResolver=async e=>{let t=await this.importFile(e);return t?(t&&typeof t==`object`&&`default`in t&&(t=t.default),typeof t==`function`&&Q(t)?t:null):null};withCommandResolver(e){return this.commandResolver=e,this}withFileImporter(e){return this.importFile=e,this}registerCommand(e,t=!1){if(!Q(e))throw Error(`Invalid command, it must extend the Command class.`);let n=e.command;if(!n)throw Error(`Cannot register a command with no name. ${e.name} `);if(!t&&this.commands[n])throw Error(`Command ${n} already registered.`);if(!t&&this.aliases[n])throw Error(`Command name ${n} conflicts with an existing alias.`);this.commands[n]=e;for(let r of e.aliases){if(!t&&this.commands[r])throw Error(`Alias ${r} conflicts with an existing command name.`);if(!t&&this.aliases[r])throw Error(`Alias ${r} already registered.`);this.aliases[r]=n}}async loadCommandsPath(e){for await(let t of this.listCommandsFiles(e))try{let e=await this.commandResolver(t);Q(e)&&this.registerCommand(e)}catch(e){throw Error(`Command ${t} failed to load. ${e}`,{cause:e})}}async runCommand(e,t,...n){let r;if(typeof t==`string`){let i=this.commands[t]??this.commands[this.aliases[t]];if(!i){let r=await this.suggestCommand(t);if(r)return await this.runCommand(e,r,...n);throw new y(t)}r=new i}else r=Q(t)?new t:t;return await r.run({ctx:e,logger:this.logger,args:n})??0}async suggestCommand(e){let t=this.getAvailableCommands(),{bestMatch:n,bestMatchIndex:r,ratings:i}=this.stringSimilarity.findBestMatch(e,t),a=i.filter(e=>e.rating>.3).map(e=>e.target);if(n&&(n.rating>0&&a.length<=1||n.rating>.7&&a.length>1)){let n=t[r];return await this.askRunSimilarCommand(e,n)?n:null}if(a.length)return await this.ux.askForSelect(`${c.default.red(`unknown command`)} ${c.default.bold.yellow(`'${e}'`)} ${c.default.dim(`—`)} did you mean one of these?`,a)||null;throw new y(e)}async askRunSimilarCommand(e,t){return this.ux.askForConfirmation(`${c.default.red(`unknown command`)} ${c.default.bold.yellow(`'${e}'`)} ${c.default.dim(`—`)} did you mean ${c.default.bold.green(`'${t}'`)}?`)}async*listCommandsFiles(e){let t=await l.default.promises.readdir(e,{withFileTypes:!0});for(let n of t){let t=u.default.resolve(e,n.name);if(n.isDirectory())yield*this.listCommandsFiles(u.default.resolve(e,n.name));else{if(!t.endsWith(`.ts`)&&!t.endsWith(`.js`)&&!t.endsWith(`.mjs`)&&!t.endsWith(`.cjs`))continue;yield t}}}},je=class{logger;constructor(e){this.logger=e}handle(e){if(ke(e))return e.pretty(this.logger),-1;throw e}},Me,Ne=class extends Z{static command=`help`;static description=c.default.bold(`Show help information about the CLI and its commands`);constructor(e){super(),this.opts=e}async handle(){let e=this.opts.commandRegistry.getCommands().filter(e=>!e.hidden),t=this.opts.cliName??`Bob CLI`,n=this.opts.cliVersion??`0.0.0`;Me??=(await Promise.resolve().then(()=>require(`../package-BYPkkzPN.cjs`)))?.default?.version??`0.0.0`;let r=Me;this.logger.log(`${t} ${c.default.green(n)} (core: ${c.default.yellow(r)})
5
5
 
6
6
  ${c.default.yellow(`Usage`)}:
7
7
  command [options] [arguments]
8
8
 
9
9
  ${c.default.yellow(`Available commands`)}:
10
- `);let i=Math.max(...e.map(e=>{let t=e.aliases.length>0?` (${e.aliases.join(`, `)})`:``;return e.command.length+t.length}))??0,a={};for(let t of e){let e=t.group??t.command.split(`:`)[0];a[e]||(a[e]=[]),a[e].push(t)}let o=Object.entries(a).sort(([e],[t])=>e.toLowerCase().localeCompare(t.toLowerCase())).sort(([,e],[,t])=>e.length-t.length);for(let[e,t]of o){let n=t.length>1;n&&this.logger.log(c.default.yellow(`${e}:`));let r=t.sort((e,t)=>e.command.toLowerCase().localeCompare(t.command.toLowerCase()));for(let e of r){let t=e.aliases.length>0?c.default.gray(` (${e.aliases.join(`, `)})`):``,r=V(i-(e.command.length+(e.aliases.length>0?` (${e.aliases.join(`, `)})`.length:0)));n&&(r=r.slice(2)),this.logger.log(`${n?` `:``}${c.default.green(e.command)}${t} ${r} ${e.description}`)}}}},Pe=class{ctx;logger;commandRegistry;exceptionHandler;helpCommand;newCommandRegistry(e){return new Ae(e)}newHelpCommand(e){return new Ne(e)}newExceptionHandler(e){return new je(e.logger)}constructor(e={}){this.ctx=e.ctx,this.logger=e.logger??new m,this.commandRegistry=this.newCommandRegistry({logger:this.logger}),this.exceptionHandler=this.newExceptionHandler({logger:this.logger}),this.helpCommand=this.newHelpCommand({cliName:e.name,cliVersion:e.version,commandRegistry:this.commandRegistry})}withCommandResolver(e){return this.commandRegistry.withCommandResolver(e),this}withFileImporter(e){return this.commandRegistry.withFileImporter(e),this}async withCommands(...e){for(let t of e)typeof t==`string`?await this.commandRegistry.loadCommandsPath(t):typeof t==`function`?this.registerCommand(t):this.registerCommand(t.constructor)}async runCommand(e,...t){return e?await this.commandRegistry.runCommand(this.ctx??{},e,...t).catch(this.exceptionHandler.handle.bind(this.exceptionHandler)):await this.runHelpCommand()}async runHelpCommand(){return await this.runCommand(this.helpCommand)}registerCommand(e){this.commandRegistry.registerCommand(e)}},$=class e{static parse(t,n={}){let[r,...i]=t.split(/\{(.*?)\}/g).map(e=>e.trim()).filter(Boolean),a={},o={};for(let t of i){let r=e.parseParamSignature(t,n);r.isFlag?a[r.name]=r.definition:o[r.name]=r.definition}return{command:r,flags:a,args:o}}static parseParamSignature(e,t){let n=e,r=!1,i,a,o,s=!1,c=!1,l=!0;if(n.includes(`:`)){let[e,t]=n.split(`:`);n=e.trim(),i=t.trim()}if(n.includes(`=`)){let[e,t]=n.split(`=`);n=e.trim();let r=t.trim();l=!1,r.length?r===`*`?(c=!0,a=[]):r===`true`?(s=!0,a=!0):r===`false`?(s=!0,a=!1):a=r:a=null}else n.startsWith(`--`)&&(s=!0,l=!1,a=!1);if(n.includes(`|`)){let[e,...t]=n.split(`|`);n=e.trim(),o=t.map(e=>e.trim())}n.startsWith(`--`)&&(r=!0,n=n.slice(2)),n.endsWith(`?`)&&(l=!1,n=n.slice(0,-1)),n.endsWith(`*`)&&(c=!0,a=[],n=n.slice(0,-1)),i=i??t[n]??t[`--${n}`];let u;return u=r?s?B.boolean({description:i,alias:o,...a===void 0?{}:{default:a}}):c?B.string({description:i,alias:o,multiple:!0,...l?{required:!0}:{},default:a??[]}):B.string({description:i,alias:o,...l?{required:!0}:{},...a===void 0?{}:{default:a}}):c?z.string({description:i,multiple:!0,...l?{required:!0}:{},default:a??[]}):z.string({description:i,...l?{required:!0}:{},...a===void 0?{}:{default:a}}),{name:n,isFlag:r,definition:u}}},Fe=class extends Z{static signature=``;static helperDefinitions={};static get command(){return this.signature.split(/\s/)[0]||``}async run(e){let t=this.constructor;if(t.signature&&!Object.prototype.hasOwnProperty.call(t,`_signatureParsed`)){let e=$.parse(t.signature,t.helperDefinitions),n=Object.prototype.hasOwnProperty.call(t,`flags`)?t.flags:{},r=Object.prototype.hasOwnProperty.call(t,`args`)?t.args:{};t.flags={...e.flags,...n},t.args={...e.args,...r},Object.defineProperty(t,`_signatureParsed`,{value:!0})}return super.run(e)}option(e,t=null){return this.parser.flag(e,t)}argument(e,t=null){return this.parser.argument(e,t)}};exports.Args=z,exports.BadCommandArgument=T,exports.BadCommandFlag=E,exports.BobError=g,exports.Cli=Pe,exports.Command=Z,exports.CommandNotFoundError=y,exports.CommandParser=k,exports.CommandRegistry=Ae,exports.CommandSignatureParser=$,exports.CommandWithSignature=Fe,exports.ExceptionHandler=je,exports.Flags=B,exports.HelpCommandFlag=H,exports.InvalidFlag=S,exports.Logger=m,exports.MissingRequiredArgumentValue=C,exports.MissingRequiredFlagValue=w,exports.StringSimilarity=h,exports.TooManyArguments=D,exports.UX=X,exports.ValidationError=O,exports.askForCheckbox=W,exports.askForConfirmation=G,exports.askForEditor=K,exports.askForExpand=q,exports.askForFileSelector=J,exports.askForInput=ve,exports.askForList=ye,exports.askForNumber=be,exports.askForPassword=xe,exports.askForRawList=Se,exports.askForSearch=Ce,exports.askForSelect=we,exports.askForToggle=Te,exports.keyValue=Ee,exports.newLoader=De,exports.newProgressBar=Y,exports.table=Oe,exports.withCancelHandling=U;
10
+ `);let i=Math.max(...e.map(e=>{let t=e.aliases.length>0?` (${e.aliases.join(`, `)})`:``;return e.command.length+t.length}))??0,a={};for(let t of e){let e=t.group??t.command.split(`:`)[0];a[e]||(a[e]=[]),a[e].push(t)}let o=Object.entries(a).sort(([e],[t])=>e.toLowerCase().localeCompare(t.toLowerCase())).sort(([,e],[,t])=>e.length-t.length);for(let[e,t]of o){let n=t.length>1;n&&this.logger.log(c.default.yellow(`${e}:`));let r=t.sort((e,t)=>e.command.toLowerCase().localeCompare(t.command.toLowerCase()));for(let e of r){let t=e.aliases.length>0?c.default.gray(` (${e.aliases.join(`, `)})`):``,r=V(i-(e.command.length+(e.aliases.length>0?` (${e.aliases.join(`, `)})`.length:0)));n&&(r=r.slice(2)),this.logger.log(`${n?` `:``}${c.default.green(e.command)}${t} ${r} ${e.description}`)}}}},Pe=class{ctx;logger;commandRegistry;exceptionHandler;helpCommand;newCommandRegistry(e){return new Ae(e)}newHelpCommand(e){return new Ne(e)}newExceptionHandler(e){return new je(e.logger)}constructor(e={}){this.ctx=e.ctx,this.logger=e.logger??new m,this.commandRegistry=this.newCommandRegistry({logger:this.logger}),this.exceptionHandler=this.newExceptionHandler({logger:this.logger}),this.helpCommand=this.newHelpCommand({cliName:e.name,cliVersion:e.version,commandRegistry:this.commandRegistry})}withCommandResolver(e){return this.commandRegistry.withCommandResolver(e),this}withFileImporter(e){return this.commandRegistry.withFileImporter(e),this}async withCommands(...e){for(let t of e)typeof t==`string`?await this.commandRegistry.loadCommandsPath(t):typeof t==`function`?this.registerCommand(t):this.registerCommand(t.constructor)}async runCommand(e,...t){return e?await this.commandRegistry.runCommand(this.ctx??{},e,...t).catch(this.exceptionHandler.handle.bind(this.exceptionHandler)):await this.runHelpCommand()}async runHelpCommand(){return await this.runCommand(this.helpCommand)}registerCommand(e){this.commandRegistry.registerCommand(e)}},$=class e{static parse(t,n={}){let[r,...i]=t.split(/\{(.*?)\}/g).map(e=>e.trim()).filter(Boolean),a={},o={};for(let t of i){let r=e.parseParamSignature(t,n);r.isFlag?a[r.name]=r.definition:o[r.name]=r.definition}return{command:r,flags:a,args:o}}static parseParamSignature(e,t){let n=e,r=!1,i,a,o,s=!1,c=!1,l=!0;if(n.includes(`:`)){let[e,t]=n.split(`:`);n=e.trim(),i=t.trim()}if(n.includes(`=`)){let[e,t]=n.split(`=`);n=e.trim();let r=t.trim();l=!1,r.length?r===`*`?(c=!0,a=[]):r===`true`?(s=!0,a=!0):r===`false`?(s=!0,a=!1):a=r:a=null}else n.startsWith(`--`)&&(s=!0,l=!1,a=!1);if(n.includes(`|`)){let[e,...t]=n.split(`|`);n=e.trim(),o=t.map(e=>e.trim())}n.startsWith(`--`)&&(r=!0,n=n.slice(2)),n.endsWith(`?`)&&(l=!1,n=n.slice(0,-1)),n.endsWith(`*`)&&(c=!0,a=[],n=n.slice(0,-1)),i=i??t[n]??t[`--${n}`];let u;return u=r?s?B.boolean({description:i,alias:o,...a===void 0?{}:{default:a}}):c?B.string({description:i,alias:o,multiple:!0,...l?{required:!0}:{},default:a??[]}):B.string({description:i,alias:o,...l?{required:!0}:{},...a===void 0?{}:{default:a}}):c?z.string({description:i,multiple:!0,...l?{required:!0}:{},default:a??[]}):z.string({description:i,...l?{required:!0}:{},...a===void 0?{}:{default:a}}),{name:n,isFlag:r,definition:u}}},Fe=class extends Z{static signature=``;static helperDefinitions={};static get command(){return this.signature.split(/\s/)[0]||``}async run(e){let t=this.constructor;if(t.signature&&!Object.prototype.hasOwnProperty.call(t,`_signatureParsed`)){let e=$.parse(t.signature,t.helperDefinitions),n=Object.prototype.hasOwnProperty.call(t,`flags`)?t.flags:{},r=Object.prototype.hasOwnProperty.call(t,`args`)?t.args:{};t.flags={...e.flags,...n},t.args={...e.args,...r},Object.defineProperty(t,`_signatureParsed`,{value:!0})}return super.run(e)}option(e,t=null){return this.parser.flag(e,t)}argument(e,t=null){return this.parser.argument(e,t)}};exports.Args=z,exports.BadCommandArgument=T,exports.BadCommandFlag=E,exports.BobError=g,exports.Cli=Pe,exports.Command=Z,exports.CommandNotFoundError=y,exports.CommandParser=k,exports.CommandRegistry=Ae,exports.CommandSignatureParser=$,exports.CommandWithSignature=Fe,exports.ExceptionHandler=je,exports.Flags=B,exports.InvalidFlag=S,exports.Logger=m,exports.MissingRequiredArgumentValue=C,exports.MissingRequiredFlagValue=w,exports.StringSimilarity=h,exports.TooManyArguments=D,exports.UX=X,exports.ValidationError=O,exports.askForCheckbox=U,exports.askForConfirmation=W,exports.askForEditor=G,exports.askForExpand=K,exports.askForFileSelector=q,exports.askForInput=J,exports.askForList=ye,exports.askForNumber=be,exports.askForPassword=xe,exports.askForRawList=Se,exports.askForSearch=Ce,exports.askForSelect=we,exports.askForToggle=Te,exports.keyValue=Ee,exports.newLoader=De,exports.newProgressBar=Y,exports.table=Oe,exports.withCancelHandling=H;
@@ -1,6 +1,6 @@
1
1
  var e = {
2
2
  name: "bob-core",
3
- version: "3.0.0-beta.3",
3
+ version: "3.0.0-beta.4",
4
4
  description: "BOB Core",
5
5
  type: "module",
6
6
  main: "./dist/cjs/src/index.js",
@@ -0,0 +1,12 @@
1
+ import { ParameterOpts } from './lib/types.js';
2
+ export declare const HelpCommandFlag: import('./lib/types.js').FlagProps<boolean> & import('./lib/types.js').CustomOptions & {
3
+ readonly alias: readonly ["h"];
4
+ readonly description: "Displays help information about the command";
5
+ readonly handler: (value: boolean, opts: ParameterOpts) => {
6
+ shouldStop: false;
7
+ } | {
8
+ shouldStop: true;
9
+ };
10
+ } & {
11
+ parse(input: any, opts: ParameterOpts): boolean;
12
+ };
@@ -12,5 +12,4 @@ export * from './errors/index.js';
12
12
  export * from './args/index.js';
13
13
  export * from './flags/index.js';
14
14
  export * from './lib/types.js';
15
- export * from './options/index.js';
16
15
  export * from './ux/index.js';
@@ -522,13 +522,14 @@ function V(e) {
522
522
  return Array(e + 5).join(" ");
523
523
  }
524
524
  //#endregion
525
- //#region src/options/HelpOption.ts
525
+ //#region src/HelpFlag.ts
526
526
  function _e(e) {
527
527
  let t = e.type;
528
528
  return t === "option" && "options" in e && e.options ? `enum: ${e.options.join("|")}` : t ?? "custom";
529
529
  }
530
- var H = B.boolean({
530
+ var ve = B.boolean({
531
531
  alias: ["h"],
532
+ description: "Displays help information about the command",
532
533
  handler: (t, n) => {
533
534
  if (!t) return { shouldStop: !1 };
534
535
  let r = n.cmd, i = r.args, a = {
@@ -575,22 +576,22 @@ var H = B.boolean({
575
576
  }
576
577
  return { shouldStop: !0 };
577
578
  }
578
- }), ve = class extends Error {
579
+ }), ye = class extends Error {
579
580
  name = "ExitPromptError";
580
581
  };
581
582
  //#endregion
582
583
  //#region src/ux/helpers.ts
583
- async function U(e, t) {
584
+ async function H(e, t) {
584
585
  try {
585
586
  return await e();
586
587
  } catch (e) {
587
- if (e instanceof ve || e instanceof Error && e.name === "ExitPromptError") return t;
588
+ if (e instanceof ye || e instanceof Error && e.name === "ExitPromptError") return t;
588
589
  throw e;
589
590
  }
590
591
  }
591
592
  //#endregion
592
593
  //#region src/ux/askForCheckbox.ts
593
- async function W(e, t, n) {
594
+ async function U(e, t, n) {
594
595
  if (t.length === 0) throw Error("No options provided");
595
596
  let r = t.map((e) => typeof e == "string" ? {
596
597
  name: e,
@@ -602,7 +603,7 @@ async function W(e, t, n) {
602
603
  checked: e.checked,
603
604
  description: e.description
604
605
  });
605
- return U(() => i({
606
+ return H(() => i({
606
607
  message: e,
607
608
  choices: r,
608
609
  required: n?.required,
@@ -614,8 +615,8 @@ async function W(e, t, n) {
614
615
  }
615
616
  //#endregion
616
617
  //#region src/ux/askForConfirmation.ts
617
- async function G(e = "Do you want to continue?", t) {
618
- return U(() => a({
618
+ async function W(e = "Do you want to continue?", t) {
619
+ return H(() => a({
619
620
  message: e,
620
621
  default: t?.default ?? !1,
621
622
  transformer: t?.transformer
@@ -623,8 +624,8 @@ async function G(e = "Do you want to continue?", t) {
623
624
  }
624
625
  //#endregion
625
626
  //#region src/ux/askForEditor.ts
626
- async function K(e, t) {
627
- return U(() => o({
627
+ async function G(e, t) {
628
+ return H(() => o({
628
629
  message: e,
629
630
  default: t?.default,
630
631
  postfix: t?.postfix,
@@ -634,8 +635,8 @@ async function K(e, t) {
634
635
  }
635
636
  //#endregion
636
637
  //#region src/ux/askForExpand.ts
637
- async function q(e, t, n) {
638
- return U(() => s({
638
+ async function K(e, t, n) {
639
+ return H(() => s({
639
640
  message: e,
640
641
  choices: t,
641
642
  default: n?.default
@@ -643,8 +644,8 @@ async function q(e, t, n) {
643
644
  }
644
645
  //#endregion
645
646
  //#region src/ux/askForFileSelector.ts
646
- async function J(e, t) {
647
- return U(async () => {
647
+ async function q(e, t) {
648
+ return H(async () => {
648
649
  let n = await ee({
649
650
  message: e,
650
651
  basePath: t?.basePath,
@@ -659,8 +660,8 @@ async function J(e, t) {
659
660
  }
660
661
  //#endregion
661
662
  //#region src/ux/askForInput.ts
662
- async function ye(e, t) {
663
- return U(() => c({
663
+ async function J(e, t) {
664
+ return H(() => c({
664
665
  message: e,
665
666
  default: t?.default,
666
667
  required: t?.required,
@@ -672,7 +673,7 @@ async function ye(e, t) {
672
673
  //#region src/ux/askForList.ts
673
674
  async function be(e, t) {
674
675
  let n = t?.separator ?? ",";
675
- return U(async () => (await c({
676
+ return H(async () => (await c({
676
677
  message: e,
677
678
  default: t?.default,
678
679
  validate: t?.validate
@@ -681,7 +682,7 @@ async function be(e, t) {
681
682
  //#endregion
682
683
  //#region src/ux/askForNumber.ts
683
684
  async function xe(e, t) {
684
- return U(async () => await l({
685
+ return H(async () => await l({
685
686
  message: e,
686
687
  default: t?.default,
687
688
  required: t?.required,
@@ -694,7 +695,7 @@ async function xe(e, t) {
694
695
  //#endregion
695
696
  //#region src/ux/askForPassword.ts
696
697
  async function Se(e, t) {
697
- return U(() => u({
698
+ return H(() => u({
698
699
  message: e,
699
700
  mask: t?.mask,
700
701
  validate: t?.validate
@@ -703,7 +704,7 @@ async function Se(e, t) {
703
704
  //#endregion
704
705
  //#region src/ux/askForRawList.ts
705
706
  async function Ce(e, t, n) {
706
- return U(() => d({
707
+ return H(() => d({
707
708
  message: e,
708
709
  choices: t,
709
710
  loop: n?.loop
@@ -712,7 +713,7 @@ async function Ce(e, t, n) {
712
713
  //#endregion
713
714
  //#region src/ux/askForSearch.ts
714
715
  async function we(e, t, n) {
715
- return U(() => f({
716
+ return H(() => f({
716
717
  message: e,
717
718
  source: t,
718
719
  pageSize: n?.pageSize,
@@ -727,7 +728,7 @@ async function Te(e, t, n) {
727
728
  name: e,
728
729
  value: e
729
730
  } : e);
730
- return U(() => p({
731
+ return H(() => p({
731
732
  message: e,
732
733
  choices: r,
733
734
  default: n?.default,
@@ -739,7 +740,7 @@ async function Te(e, t, n) {
739
740
  //#region src/ux/askForToggle.ts
740
741
  async function Ee(e, t) {
741
742
  let n = t?.active ?? "Yes", r = t?.inactive ?? "No";
742
- return U(() => a({
743
+ return H(() => a({
743
744
  message: e,
744
745
  default: t?.default ?? !1,
745
746
  transformer: (e) => e ? n : r
@@ -840,10 +841,10 @@ function Ae(t, n) {
840
841
  //#region src/ux/index.ts
841
842
  var Y = class {
842
843
  askForConfirmation(e, t) {
843
- return G(e, t);
844
+ return W(e, t);
844
845
  }
845
846
  askForInput(e, t) {
846
- return ye(e, t);
847
+ return J(e, t);
847
848
  }
848
849
  askForPassword(e, t) {
849
850
  return Se(e, t);
@@ -855,7 +856,7 @@ var Y = class {
855
856
  return Te(e, t, n);
856
857
  }
857
858
  askForCheckbox(e, t, n) {
858
- return W(e, t, n);
859
+ return U(e, t, n);
859
860
  }
860
861
  askForSearch(e, t, n) {
861
862
  return we(e, t, n);
@@ -867,28 +868,28 @@ var Y = class {
867
868
  return Ee(e, t);
868
869
  }
869
870
  askForEditor(e, t) {
870
- return K(e, t);
871
+ return G(e, t);
871
872
  }
872
873
  askForRawList(e, t, n) {
873
874
  return Ce(e, t, n);
874
875
  }
875
876
  askForExpand(e, t, n) {
876
- return q(e, t, n);
877
+ return K(e, t, n);
877
878
  }
878
879
  askForFile(e, t) {
879
- return J(e, {
880
+ return q(e, {
880
881
  ...t,
881
882
  type: "file"
882
883
  });
883
884
  }
884
885
  askForDirectory(e, t) {
885
- return J(e, {
886
+ return q(e, {
886
887
  ...t,
887
888
  type: "directory"
888
889
  });
889
890
  }
890
891
  askForFileSelector(e, t) {
891
- return J(e, t);
892
+ return q(e, t);
892
893
  }
893
894
  keyValue(e, t) {
894
895
  return De(e, t);
@@ -920,7 +921,7 @@ var Y = class {
920
921
  logger;
921
922
  ux;
922
923
  parser;
923
- static baseFlags = { help: H };
924
+ static baseFlags = { help: ve };
924
925
  newCommandParser(e) {
925
926
  return new k({
926
927
  ux: e.ux,
@@ -1092,7 +1093,7 @@ var Q = class {
1092
1093
  }
1093
1094
  async handle() {
1094
1095
  let t = this.opts.commandRegistry.getCommands().filter((e) => !e.hidden), n = this.opts.cliName ?? "Bob CLI", r = this.opts.cliVersion ?? "0.0.0";
1095
- Ne ??= (await import("../package-DtqoIUbm.js"))?.default?.version ?? "0.0.0";
1096
+ Ne ??= (await import("../package-LkysKcR6.js"))?.default?.version ?? "0.0.0";
1096
1097
  let i = Ne;
1097
1098
  this.logger.log(`${n} ${e.green(r)} (core: ${e.yellow(i)})
1098
1099
 
@@ -1249,4 +1250,4 @@ ${e.yellow("Available commands")}:
1249
1250
  }
1250
1251
  };
1251
1252
  //#endregion
1252
- export { z as Args, T as BadCommandArgument, E as BadCommandFlag, g as BobError, Fe as Cli, X as Command, y as CommandNotFoundError, k as CommandParser, Q as CommandRegistry, $ as CommandSignatureParser, Ie as CommandWithSignature, Me as ExceptionHandler, B as Flags, H as HelpCommandFlag, S as InvalidFlag, m as Logger, C as MissingRequiredArgumentValue, w as MissingRequiredFlagValue, h as StringSimilarity, D as TooManyArguments, Y as UX, O as ValidationError, W as askForCheckbox, G as askForConfirmation, K as askForEditor, q as askForExpand, J as askForFileSelector, ye as askForInput, be as askForList, xe as askForNumber, Se as askForPassword, Ce as askForRawList, we as askForSearch, Te as askForSelect, Ee as askForToggle, De as keyValue, Oe as newLoader, ke as newProgressBar, Ae as table, U as withCancelHandling };
1253
+ export { z as Args, T as BadCommandArgument, E as BadCommandFlag, g as BobError, Fe as Cli, X as Command, y as CommandNotFoundError, k as CommandParser, Q as CommandRegistry, $ as CommandSignatureParser, Ie as CommandWithSignature, Me as ExceptionHandler, B as Flags, S as InvalidFlag, m as Logger, C as MissingRequiredArgumentValue, w as MissingRequiredFlagValue, h as StringSimilarity, D as TooManyArguments, Y as UX, O as ValidationError, U as askForCheckbox, W as askForConfirmation, G as askForEditor, K as askForExpand, q as askForFileSelector, J as askForInput, be as askForList, xe as askForNumber, Se as askForPassword, Ce as askForRawList, we as askForSearch, Te as askForSelect, Ee as askForToggle, De as keyValue, Oe as newLoader, ke as newProgressBar, Ae as table, H as withCancelHandling };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bob-core",
3
- "version": "3.0.0-beta.3",
3
+ "version": "3.0.0-beta.4",
4
4
  "description": "BOB Core",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/src/index.js",
@@ -1,11 +0,0 @@
1
- import { ParameterOpts } from '../lib/types.js';
2
- export declare const HelpCommandFlag: import('../lib/types.js').FlagProps<boolean> & import('../lib/types.js').CustomOptions & {
3
- readonly alias: readonly ["h"];
4
- readonly handler: (value: boolean, opts: ParameterOpts) => {
5
- shouldStop: false;
6
- } | {
7
- shouldStop: true;
8
- };
9
- } & {
10
- parse(input: any, opts: ParameterOpts): boolean;
11
- };
@@ -1 +0,0 @@
1
- export * from './HelpOption.js';
@@ -1,11 +0,0 @@
1
- import { ParameterOpts } from '../lib/types.js';
2
- export declare const HelpCommandFlag: import('../lib/types.js').FlagProps<boolean> & import('../lib/types.js').CustomOptions & {
3
- readonly alias: readonly ["h"];
4
- readonly handler: (value: boolean, opts: ParameterOpts) => {
5
- shouldStop: false;
6
- } | {
7
- shouldStop: true;
8
- };
9
- } & {
10
- parse(input: any, opts: ParameterOpts): boolean;
11
- };
@@ -1 +0,0 @@
1
- export * from './HelpOption.js';