bob-core 2.0.0-beta.2 → 2.0.0-beta.21
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 +338 -173
- package/dist/cjs/package-Bxb7QZU4.cjs +1 -0
- package/dist/cjs/src/Cli.d.ts +12 -12
- package/dist/cjs/src/Command.d.ts +24 -24
- package/dist/cjs/src/CommandIO.d.ts +13 -2
- package/dist/cjs/src/CommandParser.d.ts +29 -5
- package/dist/cjs/src/CommandRegistry.d.ts +17 -7
- package/dist/cjs/src/CommandSignatureParser.d.ts +5 -50
- package/dist/cjs/src/CommandWithSignature.d.ts +4 -13
- package/dist/cjs/src/ExceptionHandler.d.ts +1 -1
- package/dist/cjs/src/Logger.d.ts +2 -3
- package/dist/cjs/src/StringSimilarity.d.ts +26 -0
- package/dist/cjs/src/commands/HelpCommand.d.ts +1 -1
- package/dist/cjs/src/contracts/CommandOption.d.ts +3 -3
- package/dist/cjs/src/contracts/LoggerContract.d.ts +1 -2
- package/dist/cjs/src/errors/BadCommandOption.d.ts +2 -1
- package/dist/cjs/src/errors/BadCommandParameter.d.ts +2 -1
- package/dist/cjs/src/errors/CommandNotFoundError.d.ts +2 -1
- package/dist/cjs/src/errors/InvalidOption.d.ts +2 -1
- package/dist/cjs/src/errors/MissingRequiredArgumentValue.d.ts +2 -1
- package/dist/cjs/src/errors/MissingRequiredOptionValue.d.ts +2 -1
- package/dist/cjs/src/errors/index.d.ts +0 -2
- package/dist/cjs/src/index.d.ts +2 -0
- package/dist/cjs/src/index.js +17 -0
- package/dist/cjs/src/lib/optionHelpers.d.ts +1 -1
- package/dist/cjs/src/lib/types.d.ts +2 -0
- package/dist/cjs/src/options/HelpOption.d.ts +1 -1
- package/dist/esm/package-DZqOZEXL.js +33 -0
- package/dist/esm/src/Cli.d.ts +12 -12
- package/dist/esm/src/Command.d.ts +24 -24
- package/dist/esm/src/CommandIO.d.ts +13 -2
- package/dist/esm/src/CommandParser.d.ts +29 -5
- package/dist/esm/src/CommandRegistry.d.ts +17 -7
- package/dist/esm/src/CommandSignatureParser.d.ts +5 -50
- package/dist/esm/src/CommandWithSignature.d.ts +4 -13
- package/dist/esm/src/ExceptionHandler.d.ts +1 -1
- package/dist/esm/src/Logger.d.ts +2 -3
- package/dist/esm/src/StringSimilarity.d.ts +26 -0
- package/dist/esm/src/commands/HelpCommand.d.ts +1 -1
- package/dist/esm/src/contracts/CommandOption.d.ts +3 -3
- package/dist/esm/src/contracts/LoggerContract.d.ts +1 -2
- package/dist/esm/src/errors/BadCommandOption.d.ts +2 -1
- package/dist/esm/src/errors/BadCommandParameter.d.ts +2 -1
- package/dist/esm/src/errors/CommandNotFoundError.d.ts +2 -1
- package/dist/esm/src/errors/InvalidOption.d.ts +2 -1
- package/dist/esm/src/errors/MissingRequiredArgumentValue.d.ts +2 -1
- package/dist/esm/src/errors/MissingRequiredOptionValue.d.ts +2 -1
- package/dist/esm/src/errors/index.d.ts +0 -2
- package/dist/esm/src/index.d.ts +2 -0
- package/dist/esm/src/index.js +1030 -0
- package/dist/esm/src/lib/optionHelpers.d.ts +1 -1
- package/dist/esm/src/lib/types.d.ts +2 -0
- package/dist/esm/src/options/HelpOption.d.ts +1 -1
- package/package.json +27 -20
- package/dist/cjs/index.d.ts +0 -2
- package/dist/cjs/index.js +0 -9
- package/dist/cjs/package-88kG_8yl.cjs +0 -1
- package/dist/cjs/src/errors/MissingSignatureArgument.d.ts +0 -8
- package/dist/cjs/src/errors/MissingSignatureOption.d.ts +0 -8
- package/dist/cjs/src/testFixtures.d.ts +0 -11
- package/dist/esm/index.d.ts +0 -2
- package/dist/esm/index.js +0 -1066
- package/dist/esm/package-COKp1myj.js +0 -31
- package/dist/esm/src/errors/MissingSignatureArgument.d.ts +0 -8
- package/dist/esm/src/errors/MissingSignatureOption.d.ts +0 -8
- package/dist/esm/src/testFixtures.d.ts +0 -11
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const t = "bob-core", s = "2.0.0-beta.21", e = "BOB Core", i = "module", n = "./dist/cjs/src/index.js", r = "./dist/esm/src/index.js", c = "./dist/esm/src/index.d.ts", o = ["dist"], d = { ".": { 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" } } }, p = { start: "node -r @swc-node/register debug/main.ts", build: "rimraf ./dist && vite build", typecheck: "tsc --noEmit", prepack: "npm run build", test: "vitest run", lint: "eslint .", "lint:fix": "eslint . --fix" }, l = "Léo Hubert", m = "ISC", a = { "@eslint/js": "^9.37.0", "@faker-js/faker": "^10.0.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/prompts": "^2.4.9", "@types/string-similarity": "^4.0.2", "@vitest/coverage-v8": "^3.2.4", eslint: "^9.37.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", prettier: "^3.6.2", rimraf: "^6.0.1", tsx: "^4.20.6", typescript: "^5.9.3", "typescript-eslint": "^8.46.0", vite: "^7.2.7", "vite-plugin-dts": "^4.5.4", vitest: "^3.2.4" }, u = { chalk: "^4.1.2", minimist: "^1.2.8", prompts: "^2.4.2" }, x = {
|
|
2
|
+
name: t,
|
|
3
|
+
version: s,
|
|
4
|
+
description: e,
|
|
5
|
+
type: i,
|
|
6
|
+
main: n,
|
|
7
|
+
module: r,
|
|
8
|
+
types: c,
|
|
9
|
+
files: o,
|
|
10
|
+
exports: d,
|
|
11
|
+
scripts: p,
|
|
12
|
+
author: l,
|
|
13
|
+
license: m,
|
|
14
|
+
devDependencies: a,
|
|
15
|
+
dependencies: u
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
l as author,
|
|
19
|
+
x as default,
|
|
20
|
+
u as dependencies,
|
|
21
|
+
e as description,
|
|
22
|
+
a as devDependencies,
|
|
23
|
+
d as exports,
|
|
24
|
+
o as files,
|
|
25
|
+
m as license,
|
|
26
|
+
n as main,
|
|
27
|
+
r as module,
|
|
28
|
+
t as name,
|
|
29
|
+
p as scripts,
|
|
30
|
+
i as type,
|
|
31
|
+
c as types,
|
|
32
|
+
s as version
|
|
33
|
+
};
|
package/dist/esm/src/Cli.d.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { CommandRegistry } from './CommandRegistry.js';
|
|
2
|
-
import { default as HelpCommand, HelpCommandOptions } from './commands/HelpCommand.js';
|
|
3
|
-
import { ExceptionHandler } from './ExceptionHandler.js';
|
|
4
1
|
import { Command } from './Command.js';
|
|
2
|
+
import { CommandRegistry, CommandRegistryOptions, CommandResolver, FileImporter } from './CommandRegistry.js';
|
|
3
|
+
import { ExceptionHandler } from './ExceptionHandler.js';
|
|
5
4
|
import { Logger } from './Logger.js';
|
|
6
|
-
|
|
5
|
+
import { default as HelpCommand, HelpCommandOptions } from './commands/HelpCommand.js';
|
|
6
|
+
import { ContextDefinition, OptionsSchema } from './lib/types.js';
|
|
7
|
+
export type CliOptions<C extends ContextDefinition = ContextDefinition> = {
|
|
7
8
|
ctx?: C;
|
|
8
9
|
name?: string;
|
|
9
10
|
version?: string;
|
|
10
11
|
logger?: Logger;
|
|
11
12
|
};
|
|
12
|
-
export declare class Cli<C =
|
|
13
|
+
export declare class Cli<C extends ContextDefinition = ContextDefinition> {
|
|
13
14
|
private readonly ctx?;
|
|
14
15
|
private readonly logger;
|
|
15
16
|
readonly commandRegistry: CommandRegistry;
|
|
16
17
|
private readonly exceptionHandler;
|
|
17
18
|
private readonly helpCommand;
|
|
18
|
-
protected newCommandRegistry(opts:
|
|
19
|
-
logger: Logger;
|
|
20
|
-
}): CommandRegistry;
|
|
19
|
+
protected newCommandRegistry(opts: CommandRegistryOptions): CommandRegistry;
|
|
21
20
|
protected newHelpCommand(opts: HelpCommandOptions): HelpCommand;
|
|
22
21
|
protected newExceptionHandler(opts: {
|
|
23
22
|
logger: Logger;
|
|
24
23
|
}): ExceptionHandler;
|
|
25
24
|
constructor(opts?: CliOptions<C>);
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
withCommandResolver(resolver: CommandResolver): this;
|
|
26
|
+
withFileImporter(importer: FileImporter): this;
|
|
27
|
+
withCommands(...commands: Array<Command<C, OptionsSchema, OptionsSchema> | {
|
|
28
28
|
new (): Command<C>;
|
|
29
29
|
} | string>): Promise<void>;
|
|
30
|
-
runCommand(command: string | Command | undefined, ...args:
|
|
30
|
+
runCommand(command: string | Command | undefined, ...args: string[]): Promise<number>;
|
|
31
31
|
runHelpCommand(): Promise<number>;
|
|
32
|
-
protected registerCommand(command: Command<C>): void;
|
|
32
|
+
protected registerCommand(command: Command<C, OptionsSchema, OptionsSchema>): void;
|
|
33
33
|
}
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CommandIO, CommandIOOptions } from './CommandIO.js';
|
|
2
2
|
import { CommandParser } from './CommandParser.js';
|
|
3
|
-
import { CommandSignatureParser } from './CommandSignatureParser.js';
|
|
4
|
-
import { CommandOption } from './contracts/index.js';
|
|
5
|
-
import { CommandIO } from './CommandIO.js';
|
|
6
3
|
import { Logger } from './Logger.js';
|
|
4
|
+
import { CommandOption } from './contracts/index.js';
|
|
5
|
+
import { ArgumentsObject, ArgumentsSchema, ContextDefinition, OptionsObject, OptionsSchema } from './lib/types.js';
|
|
7
6
|
export type CommandHandlerOptions<Options extends OptionsSchema, Arguments extends ArgumentsSchema> = {
|
|
8
7
|
options: OptionsObject<Options>;
|
|
9
8
|
arguments: ArgumentsObject<Arguments>;
|
|
10
9
|
};
|
|
11
|
-
export type CommandHandler<C, Options extends OptionsSchema, Arguments extends ArgumentsSchema> = (ctx: C, opts: CommandHandlerOptions<Options, Arguments>) => Promise<number | void> | number | void;
|
|
12
|
-
type
|
|
10
|
+
export type CommandHandler<C extends ContextDefinition, Options extends OptionsSchema, Arguments extends ArgumentsSchema> = (ctx: C, opts: CommandHandlerOptions<Options, Arguments>) => Promise<number | void> | number | void;
|
|
11
|
+
export type CommandRunOption<C, Options extends OptionsSchema, Arguments extends ArgumentsSchema> = {
|
|
13
12
|
logger: Logger;
|
|
14
13
|
ctx: C;
|
|
15
|
-
}
|
|
16
|
-
export type CommandRunArgsOption<C> = {
|
|
14
|
+
} & ({
|
|
17
15
|
args: string[];
|
|
18
|
-
}
|
|
19
|
-
export type CommandRunParsedOption<C, Options extends OptionsSchema, Arguments extends ArgumentsSchema> = {
|
|
16
|
+
} | {
|
|
20
17
|
options: OptionsObject<Options>;
|
|
21
18
|
arguments: ArgumentsObject<Arguments>;
|
|
22
|
-
}
|
|
23
|
-
export type CommandRunOption<C, Options extends OptionsSchema, Arguments extends ArgumentsSchema> = CommandRunArgsOption<C> | CommandRunParsedOption<C, Options, Arguments>;
|
|
19
|
+
});
|
|
24
20
|
export type CommandExample = {
|
|
25
21
|
description: string;
|
|
26
22
|
command: string;
|
|
27
23
|
};
|
|
28
|
-
export declare class Command<C =
|
|
24
|
+
export declare class Command<C extends ContextDefinition = ContextDefinition, Options extends OptionsSchema = OptionsSchema, Arguments extends ArgumentsSchema = ArgumentsSchema> {
|
|
29
25
|
readonly _command: string;
|
|
30
26
|
readonly description: string;
|
|
27
|
+
readonly group?: string;
|
|
31
28
|
protected commandsExamples: CommandExample[];
|
|
32
29
|
get command(): string;
|
|
33
30
|
protected ctx: C;
|
|
34
31
|
protected io: CommandIO;
|
|
35
|
-
protected logger: Logger;
|
|
36
|
-
protected _handler?: CommandHandler<C, Options, Arguments>;
|
|
37
32
|
protected parser: CommandParser<Options, Arguments>;
|
|
33
|
+
protected disablePromptingFlag: boolean;
|
|
34
|
+
protected preHandle?(): Promise<void | number>;
|
|
35
|
+
protected _preHandler?: CommandHandler<C, Options, Arguments>;
|
|
36
|
+
protected handle?(ctx: C, opts: CommandHandlerOptions<Options, Arguments>): Promise<number | void> | number | void;
|
|
37
|
+
protected _handler?: CommandHandler<C, Options, Arguments>;
|
|
38
38
|
private tmp?;
|
|
39
|
-
protected defaultOptions(): CommandOption<Command
|
|
39
|
+
protected defaultOptions(): CommandOption<Command>[];
|
|
40
40
|
protected newCommandParser(opts: {
|
|
41
41
|
io: CommandIO;
|
|
42
42
|
options: Options;
|
|
43
43
|
arguments: Arguments;
|
|
44
|
-
}): CommandParser<Options, Arguments
|
|
45
|
-
protected newCommandIO(opts:
|
|
46
|
-
logger: Logger;
|
|
47
|
-
}): CommandIO;
|
|
44
|
+
}): CommandParser<Options, Arguments>;
|
|
45
|
+
protected newCommandIO(opts: CommandIOOptions): CommandIO;
|
|
48
46
|
constructor(command: string, opts?: {
|
|
49
47
|
description?: string;
|
|
48
|
+
group?: string;
|
|
49
|
+
options?: Options;
|
|
50
|
+
arguments?: Arguments;
|
|
50
51
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
handler(handler: CommandHandler<C, Options, Arguments>):
|
|
52
|
+
disablePrompting(): this;
|
|
53
|
+
preHandler(handler: CommandHandler<C, Options, Arguments>): this;
|
|
54
|
+
handler(handler: CommandHandler<C, Options, Arguments>): this;
|
|
54
55
|
options<Opts extends OptionsSchema>(opts: Opts): Command<C, Options & Opts, Arguments>;
|
|
55
56
|
arguments<Args extends ArgumentsSchema>(args: Args): Command<C, Options, Arguments & Args>;
|
|
56
57
|
run(opts: CommandRunOption<C, Options, Arguments>): Promise<number | void>;
|
|
57
58
|
}
|
|
58
|
-
export {};
|
|
@@ -6,9 +6,12 @@ export type SelectOption = {
|
|
|
6
6
|
selected?: boolean | undefined;
|
|
7
7
|
description?: string | undefined;
|
|
8
8
|
};
|
|
9
|
+
export type CommandIOOptions = {
|
|
10
|
+
logger: Logger;
|
|
11
|
+
};
|
|
9
12
|
export declare class CommandIO {
|
|
10
13
|
private logger;
|
|
11
|
-
constructor(
|
|
14
|
+
constructor(opts: CommandIOOptions);
|
|
12
15
|
/**
|
|
13
16
|
* Logger methods
|
|
14
17
|
*/
|
|
@@ -17,7 +20,6 @@ export declare class CommandIO {
|
|
|
17
20
|
warn(...args: any[]): void;
|
|
18
21
|
error(...args: any[]): void;
|
|
19
22
|
debug(...args: any[]): void;
|
|
20
|
-
verbose(...args: any[]): void;
|
|
21
23
|
/**
|
|
22
24
|
* Prompt utils
|
|
23
25
|
*/
|
|
@@ -28,6 +30,15 @@ export declare class CommandIO {
|
|
|
28
30
|
min?: number;
|
|
29
31
|
max?: number;
|
|
30
32
|
}): Promise<string | null>;
|
|
33
|
+
askForDate(message: string, defaultValue?: Date, opts?: {
|
|
34
|
+
validate?: (value: Date) => boolean | string;
|
|
35
|
+
mask?: string;
|
|
36
|
+
}): Promise<Date | null>;
|
|
37
|
+
askForList(message: string, defaultValue?: string | number, opts?: {
|
|
38
|
+
validate?: (value: string) => boolean | string;
|
|
39
|
+
format?: (value: string) => string;
|
|
40
|
+
separator?: string;
|
|
41
|
+
}): Promise<string[] | null>;
|
|
31
42
|
askForToggle(message: string, defaultValue?: boolean, opts?: {
|
|
32
43
|
active?: string;
|
|
33
44
|
inactive?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { OptionsSchema, OptionReturnType, OptionsObject } from './lib/types.js';
|
|
2
|
-
import { OptionDetails } from './lib/optionHelpers.js';
|
|
3
1
|
import { CommandIO } from './CommandIO.js';
|
|
2
|
+
import { OptionDetails } from './lib/optionHelpers.js';
|
|
3
|
+
import { OptionDefinition, OptionReturnType, OptionsObject, OptionsSchema } from './lib/types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Parses command-line arguments into typed options and arguments
|
|
6
6
|
* Handles validation, type conversion, and default values
|
|
@@ -11,6 +11,7 @@ export declare class CommandParser<Options extends OptionsSchema, Arguments exte
|
|
|
11
11
|
protected arguments: Arguments;
|
|
12
12
|
protected parsedArguments: OptionsObject<Arguments> | null;
|
|
13
13
|
protected io: CommandIO;
|
|
14
|
+
protected shouldPromptForMissingOptions: boolean;
|
|
14
15
|
constructor(opts: {
|
|
15
16
|
io: CommandIO;
|
|
16
17
|
options: Options;
|
|
@@ -20,7 +21,7 @@ export declare class CommandParser<Options extends OptionsSchema, Arguments exte
|
|
|
20
21
|
* Parses raw command-line arguments into structured options and arguments
|
|
21
22
|
* @param args - Raw command line arguments (typically from process.argv.slice(2))
|
|
22
23
|
* @returns Object containing parsed options and arguments
|
|
23
|
-
* @throws {InvalidOption} If an
|
|
24
|
+
* @throws {InvalidOption} If an naan option is provided
|
|
24
25
|
* @throws {BadCommandOption} If a value cannot be converted to the expected type
|
|
25
26
|
*/
|
|
26
27
|
init(args: string[]): {
|
|
@@ -35,17 +36,27 @@ export declare class CommandParser<Options extends OptionsSchema, Arguments exte
|
|
|
35
36
|
/**
|
|
36
37
|
* Retrieves a parsed option value by name
|
|
37
38
|
* @param name - The option name
|
|
39
|
+
* @param defaultValue - Optional default value if option is not set
|
|
38
40
|
* @returns The typed option value
|
|
39
41
|
* @throws {Error} If init() has not been called yet
|
|
40
42
|
*/
|
|
41
|
-
option<OptsName extends keyof Options>(name: OptsName): OptionReturnType<Options[OptsName]>;
|
|
43
|
+
option<OptsName extends keyof Options>(name: OptsName, defaultValue?: OptionReturnType<Options[OptsName]>): OptionReturnType<Options[OptsName]>;
|
|
44
|
+
setOption<OptsName extends keyof Options>(name: OptsName, value: OptionReturnType<Options[OptsName]>): void;
|
|
42
45
|
/**
|
|
43
46
|
* Retrieves a parsed argument value by name
|
|
44
47
|
* @param name - The argument name
|
|
48
|
+
* @param defaultValue - Optional default value if argument is not set
|
|
45
49
|
* @returns The typed argument value
|
|
46
50
|
* @throws {Error} If init() has not been called yet
|
|
47
51
|
*/
|
|
48
|
-
argument<ArgName extends keyof Arguments>(name: ArgName): OptionReturnType<Arguments[ArgName]>;
|
|
52
|
+
argument<ArgName extends keyof Arguments>(name: ArgName, defaultValue?: OptionReturnType<Arguments[ArgName]>): OptionReturnType<Arguments[ArgName]>;
|
|
53
|
+
setArgument<ArgName extends keyof Arguments>(name: ArgName, value: OptionReturnType<Arguments[ArgName]>): void;
|
|
54
|
+
/**
|
|
55
|
+
* Checks if a value should be considered "empty" for default value purposes
|
|
56
|
+
* @param value - The value to check
|
|
57
|
+
* @returns true if the value is null, undefined, or an empty array
|
|
58
|
+
*/
|
|
59
|
+
private isEmptyValue;
|
|
49
60
|
/**
|
|
50
61
|
* Validates that all provided options are recognized
|
|
51
62
|
* @throws {InvalidOption} If an unknown option is found
|
|
@@ -77,4 +88,17 @@ export declare class CommandParser<Options extends OptionsSchema, Arguments exte
|
|
|
77
88
|
argumentDefinitions(): Record<string, OptionDetails>;
|
|
78
89
|
availableOptions(): string[];
|
|
79
90
|
availableArguments(): string[];
|
|
91
|
+
/**
|
|
92
|
+
* Disables prompting for missing argument values
|
|
93
|
+
* Useful for non-interactive environments
|
|
94
|
+
*/
|
|
95
|
+
disablePrompting(): this;
|
|
96
|
+
/**
|
|
97
|
+
* Prompts the user to provide a missing argument value via CommandIO
|
|
98
|
+
* Used by validate() when shouldPromptForMissingArgs is enabled
|
|
99
|
+
* @param argumentName - The name of the missing argument
|
|
100
|
+
* @param argDef - The argument's definition for type and description
|
|
101
|
+
* @returns The user-provided value, or null if none given
|
|
102
|
+
*/
|
|
103
|
+
protected promptForArgument(argumentName: string, argDef: OptionDefinition): Promise<string | number | string[] | null>;
|
|
80
104
|
}
|
|
@@ -1,20 +1,30 @@
|
|
|
1
|
-
import { CommandIO } from './CommandIO.js';
|
|
2
1
|
import { Command } from './Command.js';
|
|
2
|
+
import { CommandIO, CommandIOOptions } from './CommandIO.js';
|
|
3
3
|
import { Logger } from './Logger.js';
|
|
4
|
-
|
|
4
|
+
import { StringSimilarity } from './StringSimilarity.js';
|
|
5
|
+
import { ArgumentsSchema, ContextDefinition, OptionsSchema } from './lib/types.js';
|
|
6
|
+
export type CommandResolver = (path: string) => Promise<Command | null>;
|
|
7
|
+
export type FileImporter = (filePath: string) => Promise<unknown>;
|
|
8
|
+
export type CommandRegistryOptions = {
|
|
9
|
+
logger?: Logger;
|
|
10
|
+
stringSimilarity?: StringSimilarity;
|
|
11
|
+
};
|
|
5
12
|
export declare class CommandRegistry {
|
|
6
13
|
private readonly commands;
|
|
7
14
|
protected readonly io: CommandIO;
|
|
8
15
|
protected readonly logger: Logger;
|
|
9
|
-
|
|
10
|
-
|
|
16
|
+
private readonly stringSimilarity;
|
|
17
|
+
protected newCommandIO(opts: CommandIOOptions): CommandIO;
|
|
18
|
+
constructor(opts?: CommandRegistryOptions);
|
|
11
19
|
getAvailableCommands(): string[];
|
|
12
20
|
getCommands(): Array<Command>;
|
|
21
|
+
private importFile;
|
|
13
22
|
private commandResolver;
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
withCommandResolver(resolver: CommandResolver): this;
|
|
24
|
+
withFileImporter(importer: FileImporter): this;
|
|
25
|
+
registerCommand<C extends ContextDefinition = ContextDefinition, Opts extends OptionsSchema = OptionsSchema, Args extends ArgumentsSchema = ArgumentsSchema>(command: Command<C, Opts, Args>, force?: boolean): void;
|
|
16
26
|
loadCommandsPath(commandsPath: string): Promise<void>;
|
|
17
|
-
runCommand(ctx:
|
|
27
|
+
runCommand(ctx: ContextDefinition, command: string | Command, ...args: string[]): Promise<number>;
|
|
18
28
|
private suggestCommand;
|
|
19
29
|
private askRunSimilarCommand;
|
|
20
30
|
private listCommandsFiles;
|
|
@@ -1,60 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Command } from './Command.js';
|
|
2
2
|
import { CommandIO } from './CommandIO.js';
|
|
3
|
-
import { OptionsObject, OptionsSchema } from './lib/types.js';
|
|
4
3
|
import { CommandParser } from './CommandParser.js';
|
|
4
|
+
import { CommandOption } from './contracts/index.js';
|
|
5
|
+
import { OptionsSchema } from './lib/types.js';
|
|
5
6
|
/**
|
|
6
7
|
* Extends CommandParser to parse command signatures like "command {arg} {--option}"
|
|
7
8
|
* Handles interactive prompting for missing required arguments via CommandIO
|
|
8
9
|
*/
|
|
9
|
-
export declare class CommandSignatureParser<Opts extends OptionsSchema =
|
|
10
|
+
export declare class CommandSignatureParser<Opts extends OptionsSchema = OptionsSchema, Args extends OptionsSchema = OptionsSchema> extends CommandParser<Opts, Args> {
|
|
10
11
|
readonly command: string;
|
|
11
|
-
private readonly argumentsSchema;
|
|
12
|
-
private readonly optionsSchema;
|
|
13
12
|
constructor(opts: {
|
|
14
13
|
io: CommandIO;
|
|
15
14
|
signature: string;
|
|
16
15
|
helperDefinitions: {
|
|
17
16
|
[key: string]: string;
|
|
18
17
|
};
|
|
19
|
-
defaultOptions: CommandOption<
|
|
18
|
+
defaultOptions: CommandOption<Command>[];
|
|
20
19
|
});
|
|
21
20
|
/**
|
|
22
21
|
* Parses command signature string into command name and parameter schemas
|
|
23
22
|
* Example: "migrate {name} {--force}" -> { command: "migrate", arguments: {name: ...}, options: {force: ...} }
|
|
24
23
|
*/
|
|
25
24
|
private static parseSignature;
|
|
26
|
-
/**
|
|
27
|
-
* Retrieves an option value by name, with signature validation
|
|
28
|
-
*/
|
|
29
|
-
option(name: any): any;
|
|
30
|
-
/**
|
|
31
|
-
* Sets an option value programmatically
|
|
32
|
-
*/
|
|
33
|
-
setOption(name: string, value: any): void;
|
|
34
|
-
/**
|
|
35
|
-
* Retrieves the description/help text for an option
|
|
36
|
-
*/
|
|
37
|
-
optionHelp(name: string): string | undefined;
|
|
38
|
-
/**
|
|
39
|
-
* Retrieves the description/help text for an argument
|
|
40
|
-
*/
|
|
41
|
-
argumentHelp(name: string): string | undefined;
|
|
42
|
-
/**
|
|
43
|
-
* Retrieves an argument value by name, with signature validation
|
|
44
|
-
*/
|
|
45
|
-
argument(name: any): any;
|
|
46
|
-
/**
|
|
47
|
-
* Sets an argument value programmatically
|
|
48
|
-
*/
|
|
49
|
-
setArgument(name: string, value: any): void;
|
|
50
|
-
/**
|
|
51
|
-
* Returns all argument definitions from the signature
|
|
52
|
-
*/
|
|
53
|
-
getArgumentSignatures(): OptionsSchema;
|
|
54
|
-
/**
|
|
55
|
-
* Returns all option definitions from the signature
|
|
56
|
-
*/
|
|
57
|
-
getOptionSignatures(): OptionsSchema;
|
|
58
25
|
/**
|
|
59
26
|
* Parses a single parameter signature like "{name}" or "{--force}" or "{files*}"
|
|
60
27
|
* Extracts name, type, default value, aliases, description, etc.
|
|
@@ -70,16 +37,4 @@ export declare class CommandSignatureParser<Opts extends OptionsSchema = any, Ar
|
|
|
70
37
|
* - {--opt|o} -> option with alias
|
|
71
38
|
*/
|
|
72
39
|
private static parseParamSignature;
|
|
73
|
-
/**
|
|
74
|
-
* Validates that all required arguments are present
|
|
75
|
-
* If missing, prompts the user via CommandIO to provide them
|
|
76
|
-
* @throws {MissingRequiredArgumentValue} If a required argument cannot be obtained
|
|
77
|
-
*/
|
|
78
|
-
validate(): Promise<void>;
|
|
79
|
-
/**
|
|
80
|
-
* Prompts the user to provide a missing argument value via CommandIO
|
|
81
|
-
*/
|
|
82
|
-
private promptForArgument;
|
|
83
|
-
optionValues(): OptionsObject<Opts>;
|
|
84
|
-
argumentValues(): OptionsObject<Args>;
|
|
85
40
|
}
|
|
@@ -1,35 +1,26 @@
|
|
|
1
1
|
import { Command, CommandHandlerOptions } from './Command.js';
|
|
2
2
|
import { CommandIO } from './CommandIO.js';
|
|
3
3
|
import { CommandSignatureParser } from './CommandSignatureParser.js';
|
|
4
|
-
import { OptionsSchema } from './lib/types.js';
|
|
5
|
-
export declare abstract class CommandWithSignature<C =
|
|
4
|
+
import { ContextDefinition, OptionsSchema } from './lib/types.js';
|
|
5
|
+
export declare abstract class CommandWithSignature<C extends ContextDefinition = ContextDefinition, Opts extends OptionsSchema = OptionsSchema, Args extends OptionsSchema = OptionsSchema> extends Command<C, Opts, Args> {
|
|
6
6
|
abstract signature: string;
|
|
7
7
|
abstract description: string;
|
|
8
8
|
protected helperDefinitions: {
|
|
9
9
|
[key: string]: string;
|
|
10
10
|
};
|
|
11
|
+
protected parser: CommandSignatureParser<Opts, Args>;
|
|
11
12
|
get command(): string;
|
|
12
|
-
parser: CommandSignatureParser<Opts, Args>;
|
|
13
13
|
protected newCommandParser(opts: {
|
|
14
14
|
io: CommandIO;
|
|
15
15
|
options: Opts;
|
|
16
16
|
arguments: Args;
|
|
17
|
-
}): CommandSignatureParser
|
|
17
|
+
}): CommandSignatureParser<Opts, Args>;
|
|
18
18
|
constructor();
|
|
19
19
|
protected abstract handle(ctx: C, opts: CommandHandlerOptions<Opts, Args>): Promise<number | void>;
|
|
20
|
-
protected setOption(name: string, value: any): void;
|
|
21
|
-
protected setArgument(name: string, value: any): void;
|
|
22
20
|
protected option<T = string>(key: string): T | null;
|
|
23
21
|
protected option<T = string>(key: string, defaultValue: T): NoInfer<T>;
|
|
24
|
-
protected optionBoolean(key: string, defaultValue?: boolean): boolean;
|
|
25
|
-
protected optionArray<T = string>(key: string, defaultValue?: Array<T>): Array<NoInfer<T>>;
|
|
26
|
-
protected optionNumber(key: string): number | null;
|
|
27
|
-
protected optionNumber(key: string, defaultValue: number): number;
|
|
28
22
|
protected argument<T = string>(key: string): T | null;
|
|
29
23
|
protected argument<T = string>(key: string, defaultValue: T): NoInfer<T>;
|
|
30
|
-
protected argumentArray<T = string>(key: string, defaultValue?: Array<any>): Array<T>;
|
|
31
|
-
protected argumentBoolean(key: string, defaultValue?: boolean): boolean;
|
|
32
|
-
protected argumentNumber(key: string, defaultValue?: number | null): number | null;
|
|
33
24
|
askForConfirmation(...opts: Parameters<typeof this.io.askForConfirmation>): ReturnType<typeof this.io.askForConfirmation>;
|
|
34
25
|
askForInput(...opts: Parameters<typeof this.io.askForInput>): ReturnType<typeof this.io.askForInput>;
|
|
35
26
|
askForSelect(...opts: Parameters<typeof this.io.askForSelect>): ReturnType<typeof this.io.askForSelect>;
|
package/dist/esm/src/Logger.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { LogLevel, LoggerContract } from './contracts/index.js';
|
|
2
2
|
export type LoggerOptions = {
|
|
3
3
|
level?: LogLevel;
|
|
4
4
|
};
|
|
5
|
-
export declare class Logger {
|
|
5
|
+
export declare class Logger implements LoggerContract {
|
|
6
6
|
private level;
|
|
7
7
|
constructor(opts?: LoggerOptions);
|
|
8
8
|
private shouldLog;
|
|
@@ -13,5 +13,4 @@ export declare class Logger {
|
|
|
13
13
|
warn(...args: any[]): void;
|
|
14
14
|
error(...args: any[]): void;
|
|
15
15
|
debug(...args: any[]): void;
|
|
16
|
-
verbose(...args: any[]): void;
|
|
17
16
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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,6 +1,6 @@
|
|
|
1
|
-
import { OptionDefinition } from '../lib/types.js';
|
|
2
1
|
import { Command } from '../Command.js';
|
|
3
|
-
|
|
2
|
+
import { OptionDefinition } from '../lib/types.js';
|
|
3
|
+
export interface CommandOption<Cmd extends Command> extends OptionDefinition {
|
|
4
4
|
option: string;
|
|
5
|
-
handler(this:
|
|
5
|
+
handler(this: Cmd): Promise<number | void>;
|
|
6
6
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type LogLevel = 'debug' | 'info' | 'warn' | 'error'
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
2
|
/**
|
|
3
3
|
* Logger interface defining standard logging methods and level management
|
|
4
4
|
*/
|
|
@@ -8,7 +8,6 @@ export interface LoggerContract {
|
|
|
8
8
|
warn(message: string, ...args: any[]): void;
|
|
9
9
|
error(message: string, ...args: any[]): void;
|
|
10
10
|
debug(message: string, ...args: any[]): void;
|
|
11
|
-
verbose(message: string, ...args: any[]): void;
|
|
12
11
|
setLevel(level: LogLevel): void;
|
|
13
12
|
getLevel(): LogLevel;
|
|
14
13
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Logger } from '../Logger.js';
|
|
1
2
|
import { BobError } from './BobError.js';
|
|
2
3
|
export type OptionProps = {
|
|
3
4
|
option: string;
|
|
@@ -7,5 +8,5 @@ export type OptionProps = {
|
|
|
7
8
|
export declare class BadCommandOption extends BobError {
|
|
8
9
|
readonly param: OptionProps;
|
|
9
10
|
constructor(param: OptionProps);
|
|
10
|
-
pretty(
|
|
11
|
+
pretty(logger: Logger): void;
|
|
11
12
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Logger } from '../Logger.js';
|
|
1
2
|
import { BobError } from './BobError.js';
|
|
2
3
|
export type ParameterProps = {
|
|
3
4
|
param: string;
|
|
@@ -7,5 +8,5 @@ export type ParameterProps = {
|
|
|
7
8
|
export declare class BadCommandParameter extends BobError {
|
|
8
9
|
readonly param: ParameterProps;
|
|
9
10
|
constructor(param: ParameterProps);
|
|
10
|
-
pretty(
|
|
11
|
+
pretty(logger: Logger): void;
|
|
11
12
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { Logger } from '../Logger.js';
|
|
1
2
|
import { BobError } from './BobError.js';
|
|
2
3
|
export declare class CommandNotFoundError extends BobError {
|
|
3
4
|
readonly command: string;
|
|
4
5
|
constructor(command: string);
|
|
5
|
-
pretty(
|
|
6
|
+
pretty(logger: Logger): void;
|
|
6
7
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { Logger } from '../Logger.js';
|
|
1
2
|
import { BobError } from './BobError.js';
|
|
2
3
|
import { OptionsSchema } from '../lib/types.js';
|
|
3
4
|
export declare class InvalidOption extends BobError {
|
|
4
5
|
private option;
|
|
5
6
|
private optionsSchema;
|
|
6
7
|
constructor(option: string, optionsSchema?: OptionsSchema);
|
|
7
|
-
pretty(
|
|
8
|
+
pretty(logger: Logger): void;
|
|
8
9
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { Logger } from '../Logger.js';
|
|
1
2
|
import { BobError } from './BobError.js';
|
|
2
3
|
export declare class MissingRequiredArgumentValue extends BobError {
|
|
3
4
|
readonly argument: string;
|
|
4
5
|
constructor(argument: string);
|
|
5
|
-
pretty(
|
|
6
|
+
pretty(logger: Logger): void;
|
|
6
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { Logger } from '../Logger.js';
|
|
1
2
|
import { BobError } from './BobError.js';
|
|
2
3
|
export declare class MissingRequiredOptionValue extends BobError {
|
|
3
4
|
readonly option: string;
|
|
4
5
|
constructor(option: string);
|
|
5
|
-
pretty(
|
|
6
|
+
pretty(logger: Logger): void;
|
|
6
7
|
}
|
|
@@ -3,7 +3,5 @@ export * from './BadCommandParameter.js';
|
|
|
3
3
|
export * from './BadCommandOption.js';
|
|
4
4
|
export * from './InvalidOption.js';
|
|
5
5
|
export * from './CommandNotFoundError.js';
|
|
6
|
-
export * from './MissingSignatureArgument.js';
|
|
7
|
-
export * from './MissingSignatureOption.js';
|
|
8
6
|
export * from './MissingRequiredArgumentValue.js';
|
|
9
7
|
export * from './MissingRequiredOptionValue.js';
|
package/dist/esm/src/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export * from './CommandRegistry.js';
|
|
|
7
7
|
export * from './Cli.js';
|
|
8
8
|
export * from './Logger.js';
|
|
9
9
|
export * from './ExceptionHandler.js';
|
|
10
|
+
export * from './StringSimilarity.js';
|
|
10
11
|
export * from './lib/types.js';
|
|
11
12
|
export * from './errors/index.js';
|
|
12
13
|
export * from './options/index.js';
|
|
14
|
+
export * from './contracts/index.js';
|