bob-core 3.0.0-beta.4 → 3.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/cjs/{src/Cli.d.ts → Cli.d.ts} +20 -0
- package/dist/cjs/Command.d.ts +91 -0
- package/dist/cjs/CommandParser.d.ts +122 -0
- package/dist/cjs/{src/CommandRegistry.d.ts → CommandRegistry.d.ts} +12 -0
- package/dist/cjs/ExceptionHandler.d.ts +14 -0
- package/dist/cjs/HelpFlag.d.ts +27 -0
- package/dist/cjs/StringSimilarity.d.ts +31 -0
- package/dist/cjs/args/index.d.ts +131 -0
- package/dist/{esm/src → cjs}/errors/BadCommandArgument.d.ts +4 -2
- package/dist/cjs/{src/errors → errors}/BadCommandFlag.d.ts +4 -2
- package/dist/cjs/errors/BobError.d.ts +13 -0
- package/dist/cjs/errors/CommandNotFoundError.d.ts +9 -0
- package/dist/{esm/src → cjs}/errors/InvalidFlag.d.ts +4 -2
- package/dist/cjs/errors/MissingRequiredArgumentValue.d.ts +9 -0
- package/dist/cjs/errors/MissingRequiredFlagValue.d.ts +9 -0
- package/dist/cjs/errors/TooManyArguments.d.ts +10 -0
- package/dist/cjs/errors/ValidationError.d.ts +10 -0
- package/dist/{esm/src → cjs}/errors/renderError.d.ts +2 -2
- package/dist/cjs/flags/boolean.d.ts +20 -0
- package/dist/cjs/flags/custom.d.ts +12 -0
- package/dist/cjs/flags/directory.d.ts +27 -0
- package/dist/cjs/flags/file.d.ts +27 -0
- package/dist/cjs/flags/helpers.d.ts +9 -0
- package/dist/cjs/flags/index.d.ts +160 -0
- package/dist/cjs/flags/number.d.ts +32 -0
- package/dist/cjs/flags/option.d.ts +8 -0
- package/dist/cjs/flags/string.d.ts +19 -0
- package/dist/cjs/flags/url.d.ts +19 -0
- package/dist/cjs/index.js +10 -0
- package/dist/cjs/{src/lib → lib}/helpers.d.ts +1 -1
- package/dist/cjs/lib/types.d.ts +99 -0
- package/dist/cjs/shared/ask-helpers.d.ts +7 -0
- package/dist/cjs/shared/flagsUtils.d.ts +5 -0
- package/dist/cjs/ux/askForConfirmation.d.ts +10 -0
- package/dist/cjs/{src/ux → ux}/askForToggle.d.ts +5 -1
- package/dist/cjs/ux/helpers.d.ts +6 -0
- package/dist/{esm/src → cjs}/ux/index.d.ts +30 -2
- package/dist/esm/{src/Cli.d.ts → Cli.d.ts} +20 -0
- package/dist/esm/Command.d.ts +91 -0
- package/dist/esm/CommandParser.d.ts +122 -0
- package/dist/esm/{src/CommandRegistry.d.ts → CommandRegistry.d.ts} +12 -0
- package/dist/esm/ExceptionHandler.d.ts +14 -0
- package/dist/esm/HelpFlag.d.ts +27 -0
- package/dist/esm/StringSimilarity.d.ts +31 -0
- package/dist/esm/args/index.d.ts +131 -0
- package/dist/{cjs/src → esm}/errors/BadCommandArgument.d.ts +4 -2
- package/dist/esm/{src/errors → errors}/BadCommandFlag.d.ts +4 -2
- package/dist/esm/errors/BobError.d.ts +13 -0
- package/dist/esm/errors/CommandNotFoundError.d.ts +9 -0
- package/dist/{cjs/src → esm}/errors/InvalidFlag.d.ts +4 -2
- package/dist/esm/errors/MissingRequiredArgumentValue.d.ts +9 -0
- package/dist/esm/errors/MissingRequiredFlagValue.d.ts +9 -0
- package/dist/esm/errors/TooManyArguments.d.ts +10 -0
- package/dist/esm/errors/ValidationError.d.ts +10 -0
- package/dist/{cjs/src → esm}/errors/renderError.d.ts +2 -2
- package/dist/esm/flags/boolean.d.ts +20 -0
- package/dist/esm/flags/custom.d.ts +12 -0
- package/dist/esm/flags/directory.d.ts +27 -0
- package/dist/esm/flags/file.d.ts +27 -0
- package/dist/esm/flags/helpers.d.ts +9 -0
- package/dist/esm/flags/index.d.ts +160 -0
- package/dist/esm/flags/number.d.ts +32 -0
- package/dist/esm/flags/option.d.ts +8 -0
- package/dist/esm/flags/string.d.ts +19 -0
- package/dist/esm/flags/url.d.ts +19 -0
- package/dist/esm/{src/index.js → index.js} +346 -267
- package/dist/esm/{src/lib → lib}/helpers.d.ts +1 -1
- package/dist/esm/lib/types.d.ts +99 -0
- package/dist/esm/shared/ask-helpers.d.ts +7 -0
- package/dist/esm/shared/flagsUtils.d.ts +5 -0
- package/dist/esm/ux/askForConfirmation.d.ts +10 -0
- package/dist/esm/{src/ux → ux}/askForToggle.d.ts +5 -1
- package/dist/esm/ux/helpers.d.ts +6 -0
- package/dist/{cjs/src → esm}/ux/index.d.ts +30 -2
- package/package.json +1 -1
- package/dist/cjs/package-BYPkkzPN.cjs +0 -1
- package/dist/cjs/src/Command.d.ts +0 -48
- package/dist/cjs/src/CommandParser.d.ts +0 -110
- package/dist/cjs/src/ExceptionHandler.d.ts +0 -6
- package/dist/cjs/src/HelpFlag.d.ts +0 -12
- package/dist/cjs/src/StringSimilarity.d.ts +0 -26
- package/dist/cjs/src/args/index.d.ts +0 -67
- package/dist/cjs/src/errors/BobError.d.ts +0 -5
- package/dist/cjs/src/errors/CommandNotFoundError.d.ts +0 -7
- package/dist/cjs/src/errors/MissingRequiredArgumentValue.d.ts +0 -7
- package/dist/cjs/src/errors/MissingRequiredFlagValue.d.ts +0 -7
- package/dist/cjs/src/errors/TooManyArguments.d.ts +0 -8
- package/dist/cjs/src/errors/ValidationError.d.ts +0 -3
- package/dist/cjs/src/flags/boolean.d.ts +0 -9
- package/dist/cjs/src/flags/custom.d.ts +0 -9
- package/dist/cjs/src/flags/directory.d.ts +0 -14
- package/dist/cjs/src/flags/file.d.ts +0 -14
- package/dist/cjs/src/flags/helpers.d.ts +0 -3
- package/dist/cjs/src/flags/index.d.ts +0 -76
- package/dist/cjs/src/flags/number.d.ts +0 -17
- package/dist/cjs/src/flags/option.d.ts +0 -6
- package/dist/cjs/src/flags/string.d.ts +0 -8
- package/dist/cjs/src/flags/url.d.ts +0 -8
- package/dist/cjs/src/index.js +0 -10
- package/dist/cjs/src/lib/types.d.ts +0 -59
- package/dist/cjs/src/shared/ask-helpers.d.ts +0 -7
- package/dist/cjs/src/ux/askForConfirmation.d.ts +0 -5
- package/dist/cjs/src/ux/helpers.d.ts +0 -1
- package/dist/esm/package-LkysKcR6.js +0 -60
- package/dist/esm/src/Command.d.ts +0 -48
- package/dist/esm/src/CommandParser.d.ts +0 -110
- package/dist/esm/src/ExceptionHandler.d.ts +0 -6
- package/dist/esm/src/HelpFlag.d.ts +0 -12
- package/dist/esm/src/StringSimilarity.d.ts +0 -26
- package/dist/esm/src/args/index.d.ts +0 -67
- package/dist/esm/src/errors/BobError.d.ts +0 -5
- package/dist/esm/src/errors/CommandNotFoundError.d.ts +0 -7
- package/dist/esm/src/errors/MissingRequiredArgumentValue.d.ts +0 -7
- package/dist/esm/src/errors/MissingRequiredFlagValue.d.ts +0 -7
- package/dist/esm/src/errors/TooManyArguments.d.ts +0 -8
- package/dist/esm/src/errors/ValidationError.d.ts +0 -3
- package/dist/esm/src/flags/boolean.d.ts +0 -9
- package/dist/esm/src/flags/custom.d.ts +0 -9
- package/dist/esm/src/flags/directory.d.ts +0 -14
- package/dist/esm/src/flags/file.d.ts +0 -14
- package/dist/esm/src/flags/helpers.d.ts +0 -3
- package/dist/esm/src/flags/index.d.ts +0 -76
- package/dist/esm/src/flags/number.d.ts +0 -17
- package/dist/esm/src/flags/option.d.ts +0 -6
- package/dist/esm/src/flags/string.d.ts +0 -8
- package/dist/esm/src/flags/url.d.ts +0 -8
- package/dist/esm/src/lib/types.d.ts +0 -59
- package/dist/esm/src/shared/ask-helpers.d.ts +0 -7
- package/dist/esm/src/ux/askForConfirmation.d.ts +0 -5
- package/dist/esm/src/ux/helpers.d.ts +0 -1
- /package/dist/cjs/{src/CommandSignatureParser.d.ts → CommandSignatureParser.d.ts} +0 -0
- /package/dist/cjs/{src/CommandWithSignature.d.ts → CommandWithSignature.d.ts} +0 -0
- /package/dist/cjs/{src/Logger.d.ts → Logger.d.ts} +0 -0
- /package/dist/cjs/{src/commands → commands}/HelpCommand.d.ts +0 -0
- /package/dist/cjs/{src/contracts → contracts}/LoggerContract.d.ts +0 -0
- /package/dist/cjs/{src/contracts → contracts}/index.d.ts +0 -0
- /package/dist/cjs/{src/errors → errors}/index.d.ts +0 -0
- /package/dist/cjs/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/cjs/{src/lib → lib}/string.d.ts +0 -0
- /package/dist/cjs/{src/shared → shared}/parsers.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForCheckbox.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForEditor.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForExpand.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForFileSelector.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForInput.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForList.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForNumber.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForPassword.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForRawList.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForSearch.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/askForSelect.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/keyValue.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/loader.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/progressBar.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/table.d.ts +0 -0
- /package/dist/cjs/{src/ux → ux}/types.d.ts +0 -0
- /package/dist/esm/{src/CommandSignatureParser.d.ts → CommandSignatureParser.d.ts} +0 -0
- /package/dist/esm/{src/CommandWithSignature.d.ts → CommandWithSignature.d.ts} +0 -0
- /package/dist/esm/{src/Logger.d.ts → Logger.d.ts} +0 -0
- /package/dist/esm/{src/commands → commands}/HelpCommand.d.ts +0 -0
- /package/dist/esm/{src/contracts → contracts}/LoggerContract.d.ts +0 -0
- /package/dist/esm/{src/contracts → contracts}/index.d.ts +0 -0
- /package/dist/esm/{src/errors → errors}/index.d.ts +0 -0
- /package/dist/esm/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/esm/{src/lib → lib}/string.d.ts +0 -0
- /package/dist/esm/{src/shared → shared}/parsers.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForCheckbox.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForEditor.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForExpand.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForFileSelector.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForInput.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForList.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForNumber.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForPassword.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForRawList.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForSearch.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/askForSelect.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/keyValue.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/loader.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/progressBar.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/table.d.ts +0 -0
- /package/dist/esm/{src/ux → ux}/types.d.ts +0 -0
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { custom } from './custom.js';
|
|
2
|
-
import { optionFlag } from './option.js';
|
|
3
|
-
export declare const Flags: {
|
|
4
|
-
string: {
|
|
5
|
-
(): import('../index.js').FlagProps<string> & import('../index.js').CustomOptions & {
|
|
6
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
7
|
-
};
|
|
8
|
-
<const U extends import('../index.js').FlagProps<string> & Partial<import('../index.js').CustomOptions>>(overrides: U & Record<Exclude<keyof U, string>, never>): import('../index.js').FlagProps<string> & import('../index.js').CustomOptions & U & {
|
|
9
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
number: {
|
|
13
|
-
(): import('../index.js').FlagProps<number> & {
|
|
14
|
-
min?: number;
|
|
15
|
-
max?: number;
|
|
16
|
-
} & {
|
|
17
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): number;
|
|
18
|
-
};
|
|
19
|
-
<const U extends import('../index.js').FlagProps<number> & Partial<{
|
|
20
|
-
min?: number;
|
|
21
|
-
max?: number;
|
|
22
|
-
}>>(overrides: U & Record<Exclude<keyof U, keyof import('../index.js').FlagProps<T> | "min" | "max">, never>): import('../index.js').FlagProps<number> & {
|
|
23
|
-
min?: number;
|
|
24
|
-
max?: number;
|
|
25
|
-
} & U & {
|
|
26
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): number;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
boolean: {
|
|
30
|
-
(): import('../index.js').FlagProps<boolean> & import('../index.js').CustomOptions & {
|
|
31
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): boolean;
|
|
32
|
-
};
|
|
33
|
-
<const U extends import('../index.js').FlagProps<boolean> & Partial<import('../index.js').CustomOptions>>(overrides: U & Record<Exclude<keyof U, string>, never>): import('../index.js').FlagProps<boolean> & import('../index.js').CustomOptions & U & {
|
|
34
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): boolean;
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
option: typeof optionFlag;
|
|
38
|
-
file: {
|
|
39
|
-
(): import('../index.js').FlagProps<string> & {
|
|
40
|
-
exists?: boolean;
|
|
41
|
-
} & {
|
|
42
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
43
|
-
};
|
|
44
|
-
<const U extends import('../index.js').FlagProps<string> & Partial<{
|
|
45
|
-
exists?: boolean;
|
|
46
|
-
}>>(overrides: U & Record<Exclude<keyof U, keyof import('../index.js').FlagProps<T> | "exists">, never>): import('../index.js').FlagProps<string> & {
|
|
47
|
-
exists?: boolean;
|
|
48
|
-
} & U & {
|
|
49
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
directory: {
|
|
53
|
-
(): import('../index.js').FlagProps<string> & {
|
|
54
|
-
exists?: boolean;
|
|
55
|
-
} & {
|
|
56
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
57
|
-
};
|
|
58
|
-
<const U extends import('../index.js').FlagProps<string> & Partial<{
|
|
59
|
-
exists?: boolean;
|
|
60
|
-
}>>(overrides: U & Record<Exclude<keyof U, keyof import('../index.js').FlagProps<T> | "exists">, never>): import('../index.js').FlagProps<string> & {
|
|
61
|
-
exists?: boolean;
|
|
62
|
-
} & U & {
|
|
63
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
url: {
|
|
67
|
-
(): import('../index.js').FlagProps<URL> & import('../index.js').CustomOptions & {
|
|
68
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): URL;
|
|
69
|
-
};
|
|
70
|
-
<const U extends import('../index.js').FlagProps<URL> & Partial<import('../index.js').CustomOptions>>(overrides: U & Record<Exclude<keyof U, string>, never>): import('../index.js').FlagProps<URL> & import('../index.js').CustomOptions & U & {
|
|
71
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): URL;
|
|
72
|
-
};
|
|
73
|
-
};
|
|
74
|
-
custom: typeof custom;
|
|
75
|
-
};
|
|
76
|
-
export { Args } from '../args/index.js';
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare const numberFlag: {
|
|
2
|
-
(): import('../index.js').FlagProps<number> & {
|
|
3
|
-
min?: number;
|
|
4
|
-
max?: number;
|
|
5
|
-
} & {
|
|
6
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): number;
|
|
7
|
-
};
|
|
8
|
-
<const U extends import('../index.js').FlagProps<number> & Partial<{
|
|
9
|
-
min?: number;
|
|
10
|
-
max?: number;
|
|
11
|
-
}>>(overrides: U & Record<Exclude<keyof U, keyof import('../index.js').FlagProps<T> | "min" | "max">, never>): import('../index.js').FlagProps<number> & {
|
|
12
|
-
min?: number;
|
|
13
|
-
max?: number;
|
|
14
|
-
} & U & {
|
|
15
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): number;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { FlagProps, ParameterOpts } from '../lib/types.js';
|
|
2
|
-
export declare function optionFlag<const T extends readonly string[], const U extends Partial<FlagProps>>(opts: {
|
|
3
|
-
options: T;
|
|
4
|
-
} & U): U & FlagProps<T[number]> & {
|
|
5
|
-
parse(input: any, opts: ParameterOpts): T[number];
|
|
6
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare const stringFlag: {
|
|
2
|
-
(): import('../index.js').FlagProps<string> & import('../index.js').CustomOptions & {
|
|
3
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
4
|
-
};
|
|
5
|
-
<const U extends import('../index.js').FlagProps<string> & Partial<import('../index.js').CustomOptions>>(overrides: U & Record<Exclude<keyof U, string>, never>): import('../index.js').FlagProps<string> & import('../index.js').CustomOptions & U & {
|
|
6
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
7
|
-
};
|
|
8
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare const urlFlag: {
|
|
2
|
-
(): import('../index.js').FlagProps<URL> & import('../index.js').CustomOptions & {
|
|
3
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): URL;
|
|
4
|
-
};
|
|
5
|
-
<const U extends import('../index.js').FlagProps<URL> & Partial<import('../index.js').CustomOptions>>(overrides: U & Record<Exclude<keyof U, string>, never>): import('../index.js').FlagProps<URL> & import('../index.js').CustomOptions & U & {
|
|
6
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): URL;
|
|
7
|
-
};
|
|
8
|
-
};
|
package/dist/cjs/src/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
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
|
-
`,{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 _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
|
-
|
|
6
|
-
${c.default.yellow(`Usage`)}:
|
|
7
|
-
command [options] [arguments]
|
|
8
|
-
|
|
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.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,59 +0,0 @@
|
|
|
1
|
-
import { Command } from '../Command.js';
|
|
2
|
-
import { UX } from '../ux/index.js';
|
|
3
|
-
export type ContextDefinition = any;
|
|
4
|
-
export type CustomOptions = Record<string, unknown>;
|
|
5
|
-
export type ParameterOpts<C extends ContextDefinition = ContextDefinition> = {
|
|
6
|
-
name: string;
|
|
7
|
-
ux: UX;
|
|
8
|
-
ctx: C;
|
|
9
|
-
definition: FlagDefinition & Record<string, any>;
|
|
10
|
-
cmd: typeof Command;
|
|
11
|
-
};
|
|
12
|
-
export type FlagProps<T = any> = {
|
|
13
|
-
type?: 'string' | 'number' | 'boolean' | 'option' | 'file' | 'directory' | 'url' | 'custom';
|
|
14
|
-
parse?: (input: any, opts: ParameterOpts) => T;
|
|
15
|
-
ask?: (opts: ParameterOpts) => Promise<any>;
|
|
16
|
-
description?: string;
|
|
17
|
-
required?: boolean;
|
|
18
|
-
default?: T | T[] | null | (() => Promise<T | T[] | null>);
|
|
19
|
-
multiple?: boolean;
|
|
20
|
-
help?: string;
|
|
21
|
-
alias?: string | readonly string[];
|
|
22
|
-
handler?: (value: T, opts: ParameterOpts) => {
|
|
23
|
-
shouldStop: boolean;
|
|
24
|
-
} | void;
|
|
25
|
-
};
|
|
26
|
-
export type FlagDefinition = FlagProps & {
|
|
27
|
-
parse(input: any, opts: ParameterOpts): any;
|
|
28
|
-
};
|
|
29
|
-
export type FlagType<O> = O extends {
|
|
30
|
-
parse: (...args: any[]) => infer R;
|
|
31
|
-
} ? O extends {
|
|
32
|
-
multiple: true;
|
|
33
|
-
} ? [R] extends [Array<unknown>] ? R : R[] : R : never;
|
|
34
|
-
type IsGuaranteed<O> = O extends {
|
|
35
|
-
required: true;
|
|
36
|
-
} ? true : O extends {
|
|
37
|
-
multiple: true;
|
|
38
|
-
} ? true : O extends {
|
|
39
|
-
default: infer D;
|
|
40
|
-
} ? undefined extends D ? false : null extends D ? false : true : false;
|
|
41
|
-
export type FlagReturnType<O> = IsGuaranteed<O> extends true ? FlagType<O> : FlagType<O> | null;
|
|
42
|
-
export type FlagsSchema = {
|
|
43
|
-
[key: string]: FlagDefinition;
|
|
44
|
-
};
|
|
45
|
-
export type FlagsObject<Options extends FlagsSchema> = {
|
|
46
|
-
[Key in keyof Options]: FlagReturnType<Options[Key]>;
|
|
47
|
-
};
|
|
48
|
-
export type ArgsSchema = FlagsSchema;
|
|
49
|
-
export type InferFlags<T> = T extends {
|
|
50
|
-
flags: infer O extends FlagsSchema;
|
|
51
|
-
} ? O : FlagsSchema;
|
|
52
|
-
export type InferArgs<T> = T extends {
|
|
53
|
-
args: infer A extends ArgsSchema;
|
|
54
|
-
} ? A : ArgsSchema;
|
|
55
|
-
export type Parsed<T> = {
|
|
56
|
-
flags: FlagsObject<InferFlags<T>>;
|
|
57
|
-
args: FlagsObject<InferArgs<T>>;
|
|
58
|
-
};
|
|
59
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ParameterOpts } from '../lib/types.js';
|
|
2
|
-
export declare function buildStringAsk(builderOpts: ParameterOpts): Promise<any>;
|
|
3
|
-
export declare function buildNumberAsk(builderOpts: ParameterOpts): Promise<any>;
|
|
4
|
-
export declare function buildOptionAsk(builderOpts: ParameterOpts): Promise<any>;
|
|
5
|
-
export declare function buildFileAsk(builderOpts: ParameterOpts): Promise<any>;
|
|
6
|
-
export declare function buildDirectoryAsk(builderOpts: ParameterOpts): Promise<any>;
|
|
7
|
-
export declare function buildUrlAsk(builderOpts: ParameterOpts): Promise<any>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function withCancelHandling<T>(fn: () => Promise<T>, fallback: T): Promise<T>;
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
var e = {
|
|
2
|
-
name: "bob-core",
|
|
3
|
-
version: "3.0.0-beta.4",
|
|
4
|
-
description: "BOB Core",
|
|
5
|
-
type: "module",
|
|
6
|
-
main: "./dist/cjs/src/index.js",
|
|
7
|
-
module: "./dist/esm/src/index.js",
|
|
8
|
-
types: "./dist/esm/src/index.d.ts",
|
|
9
|
-
files: ["dist"],
|
|
10
|
-
exports: { ".": {
|
|
11
|
-
import: {
|
|
12
|
-
types: "./dist/esm/src/index.d.ts",
|
|
13
|
-
default: "./dist/esm/src/index.js"
|
|
14
|
-
},
|
|
15
|
-
require: {
|
|
16
|
-
types: "./dist/cjs/src/index.d.ts",
|
|
17
|
-
default: "./dist/cjs/src/index.js"
|
|
18
|
-
}
|
|
19
|
-
} },
|
|
20
|
-
scripts: {
|
|
21
|
-
start: "node -r @swc-node/register debug/main.ts",
|
|
22
|
-
build: "rm -rf ./dist && vite build",
|
|
23
|
-
typecheck: "tsc --noEmit",
|
|
24
|
-
prepack: "npm run build",
|
|
25
|
-
test: "vitest run",
|
|
26
|
-
lint: "eslint .",
|
|
27
|
-
"lint:fix": "eslint . --fix"
|
|
28
|
-
},
|
|
29
|
-
author: "Léo Hubert",
|
|
30
|
-
license: "ISC",
|
|
31
|
-
devDependencies: {
|
|
32
|
-
"@eslint/js": "^9.39.4",
|
|
33
|
-
"@faker-js/faker": "^10.3.0",
|
|
34
|
-
"@swc-node/register": "^1.11.1",
|
|
35
|
-
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
|
|
36
|
-
"@types/minimist": "^1.2.5",
|
|
37
|
-
"@types/node": "^20.14.5",
|
|
38
|
-
"@types/string-similarity": "^4.0.2",
|
|
39
|
-
"@vitest/coverage-v8": "^4.1.0",
|
|
40
|
-
eslint: "^9.39.4",
|
|
41
|
-
"eslint-config-prettier": "^10.1.8",
|
|
42
|
-
"eslint-plugin-prettier": "^5.5.5",
|
|
43
|
-
prettier: "^3.6.2",
|
|
44
|
-
tsx: "^4.21.0",
|
|
45
|
-
typescript: "^5.9.3",
|
|
46
|
-
"typescript-eslint": "^8.57.0",
|
|
47
|
-
vite: "^8.0.0",
|
|
48
|
-
"vite-plugin-dts": "^4.5.4",
|
|
49
|
-
vitest: "^4.1.0"
|
|
50
|
-
},
|
|
51
|
-
dependencies: {
|
|
52
|
-
"@inquirer/core": "^11.1.8",
|
|
53
|
-
"@inquirer/prompts": "^8.4.1",
|
|
54
|
-
chalk: "^5.6.2",
|
|
55
|
-
"inquirer-file-selector": "^1.0.1",
|
|
56
|
-
minimist: "^1.2.8"
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
//#endregion
|
|
60
|
-
export { e as default };
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { CommandParser } from './CommandParser.js';
|
|
2
|
-
import { Logger } from './Logger.js';
|
|
3
|
-
import { ArgsSchema, ContextDefinition, FlagsSchema, Parsed } from './lib/types.js';
|
|
4
|
-
import { UX } from './ux/index.js';
|
|
5
|
-
export type CommandRunExample = {
|
|
6
|
-
description: string;
|
|
7
|
-
command: string;
|
|
8
|
-
};
|
|
9
|
-
export type CommandRunOption<C = ContextDefinition> = {
|
|
10
|
-
logger: Logger;
|
|
11
|
-
ctx: C;
|
|
12
|
-
} & ({
|
|
13
|
-
args: string[];
|
|
14
|
-
} | {
|
|
15
|
-
args: Record<string, any>;
|
|
16
|
-
flags: Record<string, any>;
|
|
17
|
-
});
|
|
18
|
-
export declare abstract class Command<C extends ContextDefinition = ContextDefinition> {
|
|
19
|
-
static $type: "BobCommand";
|
|
20
|
-
static command: string;
|
|
21
|
-
static description: string;
|
|
22
|
-
static group?: string;
|
|
23
|
-
static args: ArgsSchema;
|
|
24
|
-
static flags: FlagsSchema;
|
|
25
|
-
static examples: CommandRunExample[];
|
|
26
|
-
static hidden: boolean;
|
|
27
|
-
static aliases: string[];
|
|
28
|
-
static disableDefaultOptions: boolean;
|
|
29
|
-
static disablePrompting: boolean;
|
|
30
|
-
static allowUnknownFlags: boolean;
|
|
31
|
-
static strictMode: boolean;
|
|
32
|
-
protected ctx: C;
|
|
33
|
-
protected logger: Logger;
|
|
34
|
-
protected ux: UX;
|
|
35
|
-
protected parser: CommandParser<FlagsSchema, ArgsSchema>;
|
|
36
|
-
protected preHandle?(): Promise<void | number>;
|
|
37
|
-
protected abstract handle(ctx: C, parsed: Parsed<any>): Promise<number | void> | number | void;
|
|
38
|
-
static baseFlags: FlagsSchema;
|
|
39
|
-
protected newCommandParser(opts: {
|
|
40
|
-
flags: FlagsSchema;
|
|
41
|
-
args: ArgsSchema;
|
|
42
|
-
ctx: ContextDefinition;
|
|
43
|
-
ux: UX;
|
|
44
|
-
cmd: typeof Command;
|
|
45
|
-
}): CommandParser<FlagsSchema, ArgsSchema>;
|
|
46
|
-
protected newUX(): UX;
|
|
47
|
-
run(runOpts: CommandRunOption<C>): Promise<number | void>;
|
|
48
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { Command } from './Command.js';
|
|
2
|
-
import { ArgsSchema, ContextDefinition, FlagDefinition, FlagReturnType, FlagsObject, FlagsSchema } from './lib/types.js';
|
|
3
|
-
import { UX } from './ux/index.js';
|
|
4
|
-
/**
|
|
5
|
-
* Parses command-line arguments into typed flags and arguments
|
|
6
|
-
* Handles validation, type conversion, and default values
|
|
7
|
-
*/
|
|
8
|
-
export declare class CommandParser<Flags extends FlagsSchema, Arguments extends ArgsSchema> {
|
|
9
|
-
protected opts: {
|
|
10
|
-
flags: Flags;
|
|
11
|
-
args: Arguments;
|
|
12
|
-
ctx?: ContextDefinition;
|
|
13
|
-
ux: UX;
|
|
14
|
-
cmd?: typeof Command;
|
|
15
|
-
};
|
|
16
|
-
protected flags: FlagsSchema;
|
|
17
|
-
protected parsedFlags: FlagsObject<Flags> | null;
|
|
18
|
-
protected args: ArgsSchema;
|
|
19
|
-
protected parsedArgs: FlagsObject<Arguments> | null;
|
|
20
|
-
protected ux: UX;
|
|
21
|
-
protected shouldPromptForMissingFlags: boolean;
|
|
22
|
-
protected shouldValidateUnknownFlags: boolean;
|
|
23
|
-
protected shouldRejectExtraArguments: boolean;
|
|
24
|
-
constructor(opts: {
|
|
25
|
-
flags: Flags;
|
|
26
|
-
args: Arguments;
|
|
27
|
-
ctx?: ContextDefinition;
|
|
28
|
-
ux: UX;
|
|
29
|
-
cmd?: typeof Command;
|
|
30
|
-
});
|
|
31
|
-
/**
|
|
32
|
-
* Parses raw command-line arguments into structured flags and arguments
|
|
33
|
-
* @param args - Raw command line arguments (typically from process.argv.slice(2))
|
|
34
|
-
* @returns Object containing parsed flags and arguments
|
|
35
|
-
* @throws {InvalidFlag} If an unknown flag is provided
|
|
36
|
-
* @throws {BadCommandFlag} If a value cannot be converted to the expected type
|
|
37
|
-
*/
|
|
38
|
-
init(args: string[]): Promise<{
|
|
39
|
-
flags: FlagsObject<Flags>;
|
|
40
|
-
args: FlagsObject<Arguments>;
|
|
41
|
-
}>;
|
|
42
|
-
/**
|
|
43
|
-
* Validates the parsed flags and arguments
|
|
44
|
-
* @throws {Error} If validation fails
|
|
45
|
-
*/
|
|
46
|
-
validate(): Promise<void>;
|
|
47
|
-
/**
|
|
48
|
-
* Retrieves a parsed flag value by name
|
|
49
|
-
* @param name - The flag name
|
|
50
|
-
* @param defaultValue - Optional default value if flag is not set
|
|
51
|
-
* @returns The typed flag value
|
|
52
|
-
* @throws {Error} If init() has not been called yet
|
|
53
|
-
*/
|
|
54
|
-
flag<FlagName extends keyof Flags>(name: FlagName, defaultValue?: FlagReturnType<Flags[FlagName]>): FlagReturnType<Flags[FlagName]>;
|
|
55
|
-
setFlag<FlagName extends keyof Flags>(name: FlagName, value: FlagReturnType<Flags[FlagName]>): Promise<void>;
|
|
56
|
-
/**
|
|
57
|
-
* Retrieves a parsed argument value by name
|
|
58
|
-
* @param name - The argument name
|
|
59
|
-
* @param defaultValue - Optional default value if argument is not set
|
|
60
|
-
* @returns The typed argument value
|
|
61
|
-
* @throws {Error} If init() has not been called yet
|
|
62
|
-
*/
|
|
63
|
-
argument<ArgName extends keyof Arguments>(name: ArgName, defaultValue?: FlagReturnType<Arguments[ArgName]>): FlagReturnType<Arguments[ArgName]>;
|
|
64
|
-
setArgument<ArgName extends keyof Arguments>(name: ArgName, value: FlagReturnType<Arguments[ArgName]>): Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
* Checks if a value should be considered "empty" for default value purposes
|
|
67
|
-
* @param value - The value to check
|
|
68
|
-
* @returns true if the value is null, undefined, or an empty array
|
|
69
|
-
*/
|
|
70
|
-
private isEmptyValue;
|
|
71
|
-
/**
|
|
72
|
-
* Validates that all provided flags are recognized
|
|
73
|
-
* @throws {InvalidFlag} If an unknown flag is found
|
|
74
|
-
*/
|
|
75
|
-
private validateUnknownFlags;
|
|
76
|
-
/**
|
|
77
|
-
* Processes named flags from minimist output
|
|
78
|
-
*/
|
|
79
|
-
private handleOptions;
|
|
80
|
-
/**
|
|
81
|
-
* Processes positional arguments from minimist output
|
|
82
|
-
*/
|
|
83
|
-
private handleArguments;
|
|
84
|
-
/**
|
|
85
|
-
* Resolves a flag value from the parsed flag values object
|
|
86
|
-
* Handles alias resolution, defaults, and type conversion
|
|
87
|
-
*/
|
|
88
|
-
private resolveFlagValue;
|
|
89
|
-
/**
|
|
90
|
-
* Parses a raw value using the definition's parse function
|
|
91
|
-
*/
|
|
92
|
-
private parseValue;
|
|
93
|
-
private buildOpts;
|
|
94
|
-
private safeParse;
|
|
95
|
-
/**
|
|
96
|
-
* Validates a schema (flags or args) and prompts for missing required values
|
|
97
|
-
*/
|
|
98
|
-
private validateSchema;
|
|
99
|
-
/**
|
|
100
|
-
* Disables prompting for missing argument values
|
|
101
|
-
* Useful for non-interactive environments
|
|
102
|
-
*/
|
|
103
|
-
disablePrompting(): this;
|
|
104
|
-
allowUnknownFlags(): this;
|
|
105
|
-
strictMode(): this;
|
|
106
|
-
/**
|
|
107
|
-
* Prompts the user to provide a missing value via its `ask` method
|
|
108
|
-
*/
|
|
109
|
-
protected promptFor(name: string, definition: FlagDefinition): Promise<string | number | string[] | boolean | null>;
|
|
110
|
-
}
|
|
@@ -1,12 +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 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
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface SimilarityResult {
|
|
2
|
-
rating: number;
|
|
3
|
-
target: string;
|
|
4
|
-
}
|
|
5
|
-
export interface BestMatchResult {
|
|
6
|
-
bestMatch: SimilarityResult;
|
|
7
|
-
bestMatchIndex: number;
|
|
8
|
-
ratings: SimilarityResult[];
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* String similarity calculator using Dice's Coefficient algorithm
|
|
12
|
-
*/
|
|
13
|
-
export declare class StringSimilarity {
|
|
14
|
-
/**
|
|
15
|
-
* Generate bigrams (character pairs) from a string
|
|
16
|
-
*/
|
|
17
|
-
private getBigrams;
|
|
18
|
-
/**
|
|
19
|
-
* Calculate Dice's Coefficient similarity between two strings (0-1 scale)
|
|
20
|
-
*/
|
|
21
|
-
calculateSimilarity(str1: string, str2: string): number;
|
|
22
|
-
/**
|
|
23
|
-
* Find best matching string and ratings for all candidates
|
|
24
|
-
*/
|
|
25
|
-
findBestMatch(target: string, candidates: string[]): BestMatchResult;
|
|
26
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { custom } from '../flags/custom.js';
|
|
2
|
-
import { optionFlag } from '../flags/option.js';
|
|
3
|
-
export declare const Args: {
|
|
4
|
-
string: {
|
|
5
|
-
(): import('../index.js').FlagProps<string> & import('../index.js').CustomOptions & {
|
|
6
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
7
|
-
};
|
|
8
|
-
<const U extends import('../index.js').FlagProps<string> & Partial<import('../index.js').CustomOptions>>(overrides: U & Record<Exclude<keyof U, string>, never>): import('../index.js').FlagProps<string> & import('../index.js').CustomOptions & U & {
|
|
9
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
number: {
|
|
13
|
-
(): import('../index.js').FlagProps<number> & {
|
|
14
|
-
min?: number;
|
|
15
|
-
max?: number;
|
|
16
|
-
} & {
|
|
17
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): number;
|
|
18
|
-
};
|
|
19
|
-
<const U extends import('../index.js').FlagProps<number> & Partial<{
|
|
20
|
-
min?: number;
|
|
21
|
-
max?: number;
|
|
22
|
-
}>>(overrides: U & Record<Exclude<keyof U, keyof import('../index.js').FlagProps<T> | "min" | "max">, never>): import('../index.js').FlagProps<number> & {
|
|
23
|
-
min?: number;
|
|
24
|
-
max?: number;
|
|
25
|
-
} & U & {
|
|
26
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): number;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
option: typeof optionFlag;
|
|
30
|
-
file: {
|
|
31
|
-
(): import('../index.js').FlagProps<string> & {
|
|
32
|
-
exists?: boolean;
|
|
33
|
-
} & {
|
|
34
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
35
|
-
};
|
|
36
|
-
<const U extends import('../index.js').FlagProps<string> & Partial<{
|
|
37
|
-
exists?: boolean;
|
|
38
|
-
}>>(overrides: U & Record<Exclude<keyof U, keyof import('../index.js').FlagProps<T> | "exists">, never>): import('../index.js').FlagProps<string> & {
|
|
39
|
-
exists?: boolean;
|
|
40
|
-
} & U & {
|
|
41
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
directory: {
|
|
45
|
-
(): import('../index.js').FlagProps<string> & {
|
|
46
|
-
exists?: boolean;
|
|
47
|
-
} & {
|
|
48
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
49
|
-
};
|
|
50
|
-
<const U extends import('../index.js').FlagProps<string> & Partial<{
|
|
51
|
-
exists?: boolean;
|
|
52
|
-
}>>(overrides: U & Record<Exclude<keyof U, keyof import('../index.js').FlagProps<T> | "exists">, never>): import('../index.js').FlagProps<string> & {
|
|
53
|
-
exists?: boolean;
|
|
54
|
-
} & U & {
|
|
55
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): string;
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
url: {
|
|
59
|
-
(): import('../index.js').FlagProps<URL> & import('../index.js').CustomOptions & {
|
|
60
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): URL;
|
|
61
|
-
};
|
|
62
|
-
<const U extends import('../index.js').FlagProps<URL> & Partial<import('../index.js').CustomOptions>>(overrides: U & Record<Exclude<keyof U, string>, never>): import('../index.js').FlagProps<URL> & import('../index.js').CustomOptions & U & {
|
|
63
|
-
parse(input: any, opts: import('../index.js').ParameterOpts): URL;
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
custom: typeof custom;
|
|
67
|
-
};
|