bob-core 1.0.1 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/package.json +1 -0
- package/dist/{Cli.d.ts → cjs/src/Cli.d.ts} +4 -4
- package/dist/{Cli.js → cjs/src/Cli.js} +6 -6
- package/dist/{Command.d.ts → cjs/src/Command.d.ts} +2 -2
- package/dist/{Command.js → cjs/src/Command.js} +4 -4
- package/dist/{Command.test.js → cjs/src/Command.test.js} +4 -4
- package/dist/{CommandParser.d.ts → cjs/src/CommandParser.d.ts} +1 -1
- package/dist/{CommandParser.js → cjs/src/CommandParser.js} +13 -13
- package/dist/{CommandParser.test.js → cjs/src/CommandParser.test.js} +5 -5
- package/dist/{CommandRegistry.d.ts → cjs/src/CommandRegistry.d.ts} +1 -1
- package/dist/{CommandRegistry.js → cjs/src/CommandRegistry.js} +21 -11
- package/dist/{ExceptionHandler.d.ts → cjs/src/ExceptionHandler.d.ts} +1 -1
- package/dist/{ExceptionHandler.js → cjs/src/ExceptionHandler.js} +2 -2
- package/dist/{commands → cjs/src/commands}/HelpCommand.d.ts +2 -2
- package/dist/cjs/src/commands/HelpCommand.js +90 -0
- package/dist/cjs/src/contracts/index.d.ts +1 -0
- package/dist/{contracts → cjs/src/contracts}/index.js +1 -1
- package/dist/{errors → cjs/src/errors}/BadCommandOption.d.ts +1 -1
- package/dist/{errors → cjs/src/errors}/BadCommandOption.js +2 -2
- package/dist/{errors → cjs/src/errors}/BadCommandParameter.d.ts +1 -1
- package/dist/{errors → cjs/src/errors}/BadCommandParameter.js +2 -2
- package/dist/{errors → cjs/src/errors}/CommandNotFoundError.d.ts +1 -1
- package/dist/{errors → cjs/src/errors}/CommandNotFoundError.js +2 -2
- package/dist/{errors → cjs/src/errors}/InvalidOption.d.ts +2 -2
- package/dist/{errors → cjs/src/errors}/InvalidOption.js +2 -2
- package/dist/{errors → cjs/src/errors}/MissingRequiredArgumentValue.d.ts +2 -2
- package/dist/{errors → cjs/src/errors}/MissingRequiredArgumentValue.js +2 -2
- package/dist/{errors → cjs/src/errors}/MissingSignatureArgument.d.ts +2 -2
- package/dist/{errors → cjs/src/errors}/MissingSignatureArgument.js +2 -2
- package/dist/{errors → cjs/src/errors}/MissingSignatureOption.d.ts +2 -2
- package/dist/{errors → cjs/src/errors}/MissingSignatureOption.js +2 -2
- package/dist/cjs/src/errors/index.d.ts +3 -0
- package/dist/{errors → cjs/src/errors}/index.js +3 -3
- package/dist/cjs/src/index.d.ts +5 -0
- package/dist/{index.js → cjs/src/index.js} +5 -5
- package/dist/{lib → cjs/src/lib}/string.js +1 -2
- package/dist/{options → cjs/src/options}/HelpOption.d.ts +2 -2
- package/dist/{options → cjs/src/options}/HelpOption.js +5 -6
- package/dist/cjs/src/options/index.d.ts +1 -0
- package/dist/{options → cjs/src/options}/index.js +1 -1
- package/dist/esm/package.json +50 -0
- package/dist/esm/src/Cli.d.ts +26 -0
- package/dist/esm/src/Cli.js +59 -0
- package/dist/esm/src/Command.d.ts +34 -0
- package/dist/esm/src/Command.js +93 -0
- package/dist/esm/src/Command.test.d.ts +1 -0
- package/dist/esm/src/Command.test.js +50 -0
- package/dist/esm/src/CommandParser.d.ts +46 -0
- package/dist/esm/src/CommandParser.js +232 -0
- package/dist/esm/src/CommandParser.test.d.ts +1 -0
- package/dist/esm/src/CommandParser.test.js +175 -0
- package/dist/esm/src/CommandRegistry.d.ts +17 -0
- package/dist/esm/src/CommandRegistry.js +109 -0
- package/dist/esm/src/ExceptionHandler.d.ts +4 -0
- package/dist/esm/src/ExceptionHandler.js +10 -0
- package/dist/esm/src/commands/HelpCommand.d.ts +14 -0
- package/dist/esm/src/commands/HelpCommand.js +51 -0
- package/dist/esm/src/contracts/CommandOption.d.ts +7 -0
- package/dist/esm/src/contracts/CommandOption.js +1 -0
- package/dist/esm/src/contracts/index.d.ts +1 -0
- package/dist/esm/src/contracts/index.js +1 -0
- package/dist/esm/src/errors/BadCommandOption.d.ts +11 -0
- package/dist/esm/src/errors/BadCommandOption.js +29 -0
- package/dist/esm/src/errors/BadCommandParameter.d.ts +11 -0
- package/dist/esm/src/errors/BadCommandParameter.js +29 -0
- package/dist/esm/src/errors/BobError.d.ts +3 -0
- package/dist/esm/src/errors/BobError.js +2 -0
- package/dist/esm/src/errors/CommandNotFoundError.d.ts +7 -0
- package/dist/esm/src/errors/CommandNotFoundError.js +23 -0
- package/dist/esm/src/errors/InvalidOption.d.ts +8 -0
- package/dist/esm/src/errors/InvalidOption.js +25 -0
- package/dist/esm/src/errors/MissingRequiredArgumentValue.d.ts +7 -0
- package/dist/esm/src/errors/MissingRequiredArgumentValue.js +16 -0
- package/dist/esm/src/errors/MissingSignatureArgument.d.ts +8 -0
- package/dist/esm/src/errors/MissingSignatureArgument.js +24 -0
- package/dist/esm/src/errors/MissingSignatureOption.d.ts +8 -0
- package/dist/esm/src/errors/MissingSignatureOption.js +24 -0
- package/dist/esm/src/errors/index.d.ts +3 -0
- package/dist/esm/src/errors/index.js +3 -0
- package/dist/esm/src/index.d.ts +5 -0
- package/dist/esm/src/index.js +5 -0
- package/dist/esm/src/lib/string.d.ts +1 -0
- package/dist/esm/src/lib/string.js +3 -0
- package/dist/esm/src/options/HelpOption.d.ts +9 -0
- package/dist/esm/src/options/HelpOption.js +70 -0
- package/dist/esm/src/options/index.d.ts +1 -0
- package/dist/esm/src/options/index.js +1 -0
- package/package.json +22 -7
- package/dist/CommandHelper.d.ts +0 -4
- package/dist/CommandHelper.js +0 -74
- package/dist/commands/HelpCommand.js +0 -56
- package/dist/contracts/index.d.ts +0 -1
- package/dist/errors/index.d.ts +0 -3
- package/dist/index.d.ts +0 -5
- package/dist/options/index.d.ts +0 -1
- /package/dist/{Command.test.d.ts → cjs/src/Command.test.d.ts} +0 -0
- /package/dist/{CommandParser.test.d.ts → cjs/src/CommandParser.test.d.ts} +0 -0
- /package/dist/{contracts → cjs/src/contracts}/CommandOption.d.ts +0 -0
- /package/dist/{contracts → cjs/src/contracts}/CommandOption.js +0 -0
- /package/dist/{errors → cjs/src/errors}/BobError.d.ts +0 -0
- /package/dist/{errors → cjs/src/errors}/BobError.js +0 -0
- /package/dist/{lib → cjs/src/lib}/string.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CommandRegistry } from "./CommandRegistry";
|
|
2
|
-
import { Command } from "./Command";
|
|
3
|
-
import HelpCommand from "./commands/HelpCommand";
|
|
4
|
-
import { ExceptionHandler } from "./ExceptionHandler";
|
|
1
|
+
import { CommandRegistry } from "./CommandRegistry.js";
|
|
2
|
+
import { Command } from "./Command.js";
|
|
3
|
+
import HelpCommand from "./commands/HelpCommand.js";
|
|
4
|
+
import { ExceptionHandler } from "./ExceptionHandler.js";
|
|
5
5
|
export type CliOptions<C> = {
|
|
6
6
|
ctx?: C;
|
|
7
7
|
name?: string;
|
|
@@ -4,22 +4,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Cli = void 0;
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
7
|
+
const CommandRegistry_js_1 = require("./CommandRegistry.js");
|
|
8
|
+
const HelpCommand_js_1 = __importDefault(require("./commands/HelpCommand.js"));
|
|
9
|
+
const ExceptionHandler_js_1 = require("./ExceptionHandler.js");
|
|
10
10
|
class Cli {
|
|
11
11
|
commandRegistry;
|
|
12
12
|
exceptionHandler;
|
|
13
13
|
ctx;
|
|
14
14
|
helpCommand;
|
|
15
15
|
get CommandRegistryClass() {
|
|
16
|
-
return
|
|
16
|
+
return CommandRegistry_js_1.CommandRegistry;
|
|
17
17
|
}
|
|
18
18
|
get HelpCommandClass() {
|
|
19
|
-
return
|
|
19
|
+
return HelpCommand_js_1.default;
|
|
20
20
|
}
|
|
21
21
|
get ExceptionHandlerClass() {
|
|
22
|
-
return
|
|
22
|
+
return ExceptionHandler_js_1.ExceptionHandler;
|
|
23
23
|
}
|
|
24
24
|
constructor(opts = {}) {
|
|
25
25
|
this.ctx = opts.ctx;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CommandParser } from "./CommandParser";
|
|
2
|
-
import { CommandOption } from "./contracts/
|
|
1
|
+
import { CommandParser } from "./CommandParser.js";
|
|
2
|
+
import { CommandOption } from "./contracts/index.js";
|
|
3
3
|
export type CommandExample = {
|
|
4
4
|
description: string;
|
|
5
5
|
command: string;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Command = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const CommandParser_js_1 = require("./CommandParser.js");
|
|
5
|
+
const index_js_1 = require("./options/index.js");
|
|
6
6
|
class Command {
|
|
7
7
|
ctx;
|
|
8
8
|
helperDefinitions = {};
|
|
9
9
|
commandsExamples = [];
|
|
10
10
|
parser;
|
|
11
11
|
get CommandParserClass() {
|
|
12
|
-
return
|
|
12
|
+
return CommandParser_js_1.CommandParser;
|
|
13
13
|
}
|
|
14
14
|
defaultOptions() {
|
|
15
|
-
return [new
|
|
15
|
+
return [new index_js_1.HelpOption];
|
|
16
16
|
}
|
|
17
17
|
get command() {
|
|
18
18
|
if (this.parser) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
class MockCommand extends
|
|
3
|
+
const Command_js_1 = require("./Command.js");
|
|
4
|
+
const MissingRequiredArgumentValue_js_1 = require("./errors/MissingRequiredArgumentValue.js");
|
|
5
|
+
class MockCommand extends Command_js_1.Command {
|
|
6
6
|
signature = 'mockCommand {argument} {--option}';
|
|
7
7
|
description = 'This is a mock command for testing';
|
|
8
8
|
handle() {
|
|
@@ -43,7 +43,7 @@ describe('Command', () => {
|
|
|
43
43
|
expect(result).toBe(-1);
|
|
44
44
|
});
|
|
45
45
|
it('should throw error if argument is missing', async () => {
|
|
46
|
-
await expect(command.run(undefined)).rejects.toThrowError(
|
|
46
|
+
await expect(command.run(undefined)).rejects.toThrowError(MissingRequiredArgumentValue_js_1.MissingRequiredArgumentValue);
|
|
47
47
|
});
|
|
48
48
|
it('should handle command with option', async () => {
|
|
49
49
|
const result = await command.run(undefined, 'value', '--option');
|
|
@@ -5,10 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.CommandParser = void 0;
|
|
7
7
|
const minimist_1 = __importDefault(require("minimist"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
8
|
+
const MissingRequiredArgumentValue_js_1 = require("./errors/MissingRequiredArgumentValue.js");
|
|
9
|
+
const MissingSignatureOption_js_1 = require("./errors/MissingSignatureOption.js");
|
|
10
|
+
const MissingSignatureArgument_js_1 = require("./errors/MissingSignatureArgument.js");
|
|
11
|
+
const InvalidOption_js_1 = require("./errors/InvalidOption.js");
|
|
12
12
|
class CommandParser {
|
|
13
13
|
signature;
|
|
14
14
|
helperDefinitions;
|
|
@@ -33,39 +33,39 @@ class CommandParser {
|
|
|
33
33
|
}
|
|
34
34
|
option(name) {
|
|
35
35
|
if (!this.optionSignatures[name]) {
|
|
36
|
-
throw new
|
|
36
|
+
throw new MissingSignatureOption_js_1.MissingSignatureOption(name, Object.values(this.optionSignatures));
|
|
37
37
|
}
|
|
38
38
|
return this.options[name];
|
|
39
39
|
}
|
|
40
40
|
setOption(name, value) {
|
|
41
41
|
if (!this.optionSignatures[name]) {
|
|
42
|
-
throw new
|
|
42
|
+
throw new MissingSignatureOption_js_1.MissingSignatureOption(name, Object.values(this.optionSignatures));
|
|
43
43
|
}
|
|
44
44
|
this.options[name] = value;
|
|
45
45
|
}
|
|
46
46
|
optionHelp(name) {
|
|
47
47
|
const optionSignature = this.optionSignatures[name];
|
|
48
48
|
if (!optionSignature) {
|
|
49
|
-
throw new
|
|
49
|
+
throw new MissingSignatureOption_js_1.MissingSignatureOption(name, Object.values(this.optionSignatures));
|
|
50
50
|
}
|
|
51
51
|
return this.optionSignatures[name].help;
|
|
52
52
|
}
|
|
53
53
|
argument(name) {
|
|
54
54
|
if (!this.argumentsSignature[name]) {
|
|
55
|
-
throw new
|
|
55
|
+
throw new MissingSignatureArgument_js_1.MissingSignatureArgument(name, Object.values(this.argumentsSignature));
|
|
56
56
|
}
|
|
57
57
|
return this.arguments[name];
|
|
58
58
|
}
|
|
59
59
|
setArgument(name, value) {
|
|
60
60
|
if (!this.argumentsSignature[name]) {
|
|
61
|
-
throw new
|
|
61
|
+
throw new MissingSignatureArgument_js_1.MissingSignatureArgument(name, Object.values(this.argumentsSignature));
|
|
62
62
|
}
|
|
63
63
|
this.arguments[name] = value;
|
|
64
64
|
}
|
|
65
65
|
argumentHelp(name) {
|
|
66
66
|
const argumentSignature = this.argumentsSignature[name];
|
|
67
67
|
if (!argumentSignature) {
|
|
68
|
-
throw new
|
|
68
|
+
throw new MissingSignatureArgument_js_1.MissingSignatureArgument(name, Object.values(this.argumentsSignature));
|
|
69
69
|
}
|
|
70
70
|
return this.argumentsSignature[name].help;
|
|
71
71
|
}
|
|
@@ -110,7 +110,7 @@ class CommandParser {
|
|
|
110
110
|
const optionAlias = this.optionAliases[option];
|
|
111
111
|
const optionSignature = this.optionSignatures[option] ?? this.optionSignatures[optionAlias];
|
|
112
112
|
if (!optionSignature) {
|
|
113
|
-
throw new
|
|
113
|
+
throw new InvalidOption_js_1.InvalidOption(option, Object.values(this.optionSignatures));
|
|
114
114
|
}
|
|
115
115
|
this.options[option] = this.getParamValue(value, optionSignature);
|
|
116
116
|
for (const alias of optionSignature.alias ?? []) {
|
|
@@ -228,10 +228,10 @@ class CommandParser {
|
|
|
228
228
|
for (const [argument, value] of Object.entries(this.arguments)) {
|
|
229
229
|
const argSignature = this.argumentsSignature[argument];
|
|
230
230
|
if (!value && !argSignature.optional) {
|
|
231
|
-
throw new
|
|
231
|
+
throw new MissingRequiredArgumentValue_js_1.MissingRequiredArgumentValue(argSignature);
|
|
232
232
|
}
|
|
233
233
|
if (!value?.length && argSignature.variadic && !argSignature.optional) {
|
|
234
|
-
throw new
|
|
234
|
+
throw new MissingRequiredArgumentValue_js_1.MissingRequiredArgumentValue(argSignature);
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
3
|
+
const CommandParser_js_1 = require("./CommandParser.js");
|
|
4
|
+
const MissingRequiredArgumentValue_js_1 = require("./errors/MissingRequiredArgumentValue.js");
|
|
5
5
|
class TestCommandOptions {
|
|
6
6
|
option = 'testOption';
|
|
7
7
|
description = 'Test option';
|
|
@@ -14,7 +14,7 @@ class TestCommandOptions {
|
|
|
14
14
|
describe('CommandParser', () => {
|
|
15
15
|
let commandParser;
|
|
16
16
|
const parseCommand = (signature, args, helperDefinition = {}, defaultCommandOptions = []) => {
|
|
17
|
-
return new
|
|
17
|
+
return new CommandParser_js_1.CommandParser(signature, helperDefinition, defaultCommandOptions, ...args);
|
|
18
18
|
};
|
|
19
19
|
it('should parse signature without arguments & options', () => {
|
|
20
20
|
commandParser = parseCommand('test', []);
|
|
@@ -59,11 +59,11 @@ describe('CommandParser', () => {
|
|
|
59
59
|
});
|
|
60
60
|
it('calling validate method should throw error when argument is missing', () => {
|
|
61
61
|
commandParser = parseCommand('test {arg1}', []);
|
|
62
|
-
expect(() => commandParser.validate()).toThrowError(
|
|
62
|
+
expect(() => commandParser.validate()).toThrowError(MissingRequiredArgumentValue_js_1.MissingRequiredArgumentValue);
|
|
63
63
|
});
|
|
64
64
|
it('calling validate should throw with variadic argument is missing', () => {
|
|
65
65
|
commandParser = parseCommand('test {arg1*}', []);
|
|
66
|
-
expect(() => commandParser.validate()).toThrowError(
|
|
66
|
+
expect(() => commandParser.validate()).toThrowError(MissingRequiredArgumentValue_js_1.MissingRequiredArgumentValue);
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
69
|
describe('Options', () => {
|
|
@@ -15,23 +15,33 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
28
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
39
|
exports.CommandRegistry = void 0;
|
|
30
|
-
const path_1 = __importDefault(require("path"));
|
|
31
40
|
const fs = __importStar(require("node:fs"));
|
|
32
|
-
const
|
|
41
|
+
const path_1 = __importDefault(require("path"));
|
|
33
42
|
const SS = __importStar(require("string-similarity"));
|
|
34
43
|
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const CommandNotFoundError_js_1 = require("./errors/CommandNotFoundError.js");
|
|
35
45
|
class CommandRegistry {
|
|
36
46
|
commands = {};
|
|
37
47
|
get commandSuffix() {
|
|
@@ -45,7 +55,7 @@ class CommandRegistry {
|
|
|
45
55
|
return Object.values(this.commands);
|
|
46
56
|
}
|
|
47
57
|
commandResolver = async (path) => {
|
|
48
|
-
const CommandClass = (await
|
|
58
|
+
const CommandClass = (await Promise.resolve(`${path}`).then(s => __importStar(require(s)))).default;
|
|
49
59
|
let command;
|
|
50
60
|
if (CommandClass?.default) {
|
|
51
61
|
command = new CommandClass.default();
|
|
@@ -105,7 +115,7 @@ class CommandRegistry {
|
|
|
105
115
|
return null;
|
|
106
116
|
}
|
|
107
117
|
}
|
|
108
|
-
throw new
|
|
118
|
+
throw new CommandNotFoundError_js_1.CommandNotFoundError(command, similarCommands);
|
|
109
119
|
}
|
|
110
120
|
async askRunSimilarCommand(command, commandToAsk) {
|
|
111
121
|
const readline = require('readline').createInterface({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExceptionHandler = void 0;
|
|
4
|
-
const
|
|
4
|
+
const index_js_1 = require("./errors/index.js");
|
|
5
5
|
class ExceptionHandler {
|
|
6
6
|
handle(err) {
|
|
7
|
-
if (err instanceof
|
|
7
|
+
if (err instanceof index_js_1.BobError) {
|
|
8
8
|
err.pretty();
|
|
9
9
|
return -1;
|
|
10
10
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Command } from "../Command";
|
|
2
|
-
import { CommandRegistry } from "../CommandRegistry";
|
|
1
|
+
import { Command } from "../Command.js";
|
|
2
|
+
import { CommandRegistry } from "../CommandRegistry.js";
|
|
3
3
|
export type HelpCommandOptions = {
|
|
4
4
|
commandRegistry: CommandRegistry;
|
|
5
5
|
cliName?: string;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
40
|
+
const Command_js_1 = require("../Command.js");
|
|
41
|
+
const string_js_1 = require("../lib/string.js");
|
|
42
|
+
class HelpCommand extends Command_js_1.Command {
|
|
43
|
+
opts;
|
|
44
|
+
signature = 'help';
|
|
45
|
+
description = 'Show help';
|
|
46
|
+
constructor(opts) {
|
|
47
|
+
super();
|
|
48
|
+
this.opts = opts;
|
|
49
|
+
}
|
|
50
|
+
async handle() {
|
|
51
|
+
const commands = this.opts.commandRegistry.getCommands();
|
|
52
|
+
const cliName = this.opts.cliName ?? 'Bob CLI';
|
|
53
|
+
const version = this.opts.cliVersion ?? '0.0.0';
|
|
54
|
+
const coreVersion = (await Promise.resolve().then(() => __importStar(require('../../package.json'))))?.default?.version ?? '0.0.0';
|
|
55
|
+
console.log((0, chalk_1.default) `${cliName} {green ${version}} (core: {yellow ${coreVersion}})
|
|
56
|
+
|
|
57
|
+
{yellow Usage}:
|
|
58
|
+
command [options] [arguments]
|
|
59
|
+
|
|
60
|
+
{yellow Available commands}:
|
|
61
|
+
`);
|
|
62
|
+
const maxCommandLength = Math.max(...commands.map(command => command.command.length)) ?? 0;
|
|
63
|
+
const commandByGroups = {};
|
|
64
|
+
for (const command of commands) {
|
|
65
|
+
const commandGroup = command.command.split(':')[0];
|
|
66
|
+
if (!commandByGroups[commandGroup]) {
|
|
67
|
+
commandByGroups[commandGroup] = [];
|
|
68
|
+
}
|
|
69
|
+
commandByGroups[commandGroup].push(command);
|
|
70
|
+
}
|
|
71
|
+
const sortedCommandsByGroups = Object.entries(commandByGroups)
|
|
72
|
+
.sort(([groupA], [groupB]) => groupA.toLowerCase().localeCompare(groupB.toLowerCase()))
|
|
73
|
+
.sort(([, commandsA], [, commandsB]) => commandsA.length - commandsB.length);
|
|
74
|
+
for (const [group, groupCommands] of sortedCommandsByGroups) {
|
|
75
|
+
const isGrouped = groupCommands.length > 1;
|
|
76
|
+
if (isGrouped) {
|
|
77
|
+
console.log((0, chalk_1.default) `{yellow ${group}}:`);
|
|
78
|
+
}
|
|
79
|
+
const sortedGroupCommands = groupCommands.sort((a, b) => a.command.toLowerCase().localeCompare(b.command.toLowerCase()));
|
|
80
|
+
for (const command of sortedGroupCommands) {
|
|
81
|
+
let spaces = (0, string_js_1.generateSpace)(maxCommandLength - command.command.length);
|
|
82
|
+
if (isGrouped) {
|
|
83
|
+
spaces = spaces.slice(2);
|
|
84
|
+
}
|
|
85
|
+
console.log((0, chalk_1.default) `${isGrouped ? ' ' : ''}{green ${command.command}} ${spaces} ${command.description}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.default = HelpCommand;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CommandOption.js';
|
|
@@ -14,4 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./CommandOption"), exports);
|
|
17
|
+
__exportStar(require("./CommandOption.js"), exports);
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BadCommandOption = void 0;
|
|
7
|
-
const BobError_1 = require("./BobError");
|
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
|
|
8
|
+
const BobError_js_1 = require("../errors/BobError.js");
|
|
9
|
+
class BadCommandOption extends BobError_js_1.BobError {
|
|
10
10
|
param;
|
|
11
11
|
constructor(param) {
|
|
12
12
|
let message = `Option "${param.option}" value is invalid.`;
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BadCommandParameter = void 0;
|
|
7
|
-
const BobError_1 = require("./BobError");
|
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
|
|
8
|
+
const BobError_js_1 = require("../errors/BobError.js");
|
|
9
|
+
class BadCommandParameter extends BobError_js_1.BobError {
|
|
10
10
|
param;
|
|
11
11
|
constructor(param) {
|
|
12
12
|
let message = `Argument "${param.param}" value is invalid.`;
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.CommandNotFoundError = void 0;
|
|
7
|
-
const BobError_1 = require("./BobError");
|
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
|
|
8
|
+
const BobError_js_1 = require("../errors/BobError.js");
|
|
9
|
+
class CommandNotFoundError extends BobError_js_1.BobError {
|
|
10
10
|
command;
|
|
11
11
|
similarCommands;
|
|
12
12
|
constructor(command, similarCommands) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BobError } from "
|
|
2
|
-
import { ArgSignature } from "../CommandParser";
|
|
1
|
+
import { BobError } from "../errors/BobError.js";
|
|
2
|
+
import { ArgSignature } from "../CommandParser.js";
|
|
3
3
|
export declare class InvalidOption extends BobError {
|
|
4
4
|
private option;
|
|
5
5
|
private optionsSignature;
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.InvalidOption = void 0;
|
|
7
|
-
const BobError_1 = require("./BobError");
|
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
|
|
8
|
+
const BobError_js_1 = require("../errors/BobError.js");
|
|
9
|
+
class InvalidOption extends BobError_js_1.BobError {
|
|
10
10
|
option;
|
|
11
11
|
optionsSignature;
|
|
12
12
|
constructor(option, optionsSignature) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BobError } from "
|
|
2
|
-
import { ArgSignature } from "../CommandParser";
|
|
1
|
+
import { BobError } from "../errors/BobError.js";
|
|
2
|
+
import { ArgSignature } from "../CommandParser.js";
|
|
3
3
|
export declare class MissingRequiredArgumentValue extends BobError {
|
|
4
4
|
readonly paramSignature: ArgSignature;
|
|
5
5
|
constructor(paramSignature: ArgSignature);
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MissingRequiredArgumentValue = void 0;
|
|
7
|
-
const BobError_1 = require("./BobError");
|
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
|
|
8
|
+
const BobError_js_1 = require("../errors/BobError.js");
|
|
9
|
+
class MissingRequiredArgumentValue extends BobError_js_1.BobError {
|
|
10
10
|
paramSignature;
|
|
11
11
|
constructor(paramSignature) {
|
|
12
12
|
super(`Argument "${paramSignature.name}" is required.`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BobError } from "
|
|
2
|
-
import { ArgSignature } from "../CommandParser";
|
|
1
|
+
import { BobError } from "../errors/BobError.js";
|
|
2
|
+
import { ArgSignature } from "../CommandParser.js";
|
|
3
3
|
export declare class MissingSignatureArgument extends BobError {
|
|
4
4
|
private argument;
|
|
5
5
|
private argumentSignatures;
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MissingSignatureArgument = void 0;
|
|
7
|
-
const BobError_1 = require("./BobError");
|
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
|
|
8
|
+
const BobError_js_1 = require("../errors/BobError.js");
|
|
9
|
+
class MissingSignatureArgument extends BobError_js_1.BobError {
|
|
10
10
|
argument;
|
|
11
11
|
argumentSignatures;
|
|
12
12
|
constructor(argument, argumentSignatures) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BobError } from "
|
|
2
|
-
import { ArgSignature } from "../CommandParser";
|
|
1
|
+
import { BobError } from "../errors/BobError.js";
|
|
2
|
+
import { ArgSignature } from "../CommandParser.js";
|
|
3
3
|
export declare class MissingSignatureOption extends BobError {
|
|
4
4
|
private option;
|
|
5
5
|
private optionsSignature;
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MissingSignatureOption = void 0;
|
|
7
|
-
const BobError_1 = require("./BobError");
|
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
|
|
8
|
+
const BobError_js_1 = require("../errors/BobError.js");
|
|
9
|
+
class MissingSignatureOption extends BobError_js_1.BobError {
|
|
10
10
|
option;
|
|
11
11
|
optionsSignature;
|
|
12
12
|
constructor(option, optionsSignature) {
|
|
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./BobError"), exports);
|
|
18
|
-
__exportStar(require("./BadCommandParameter"), exports);
|
|
19
|
-
__exportStar(require("./BadCommandOption"), exports);
|
|
17
|
+
__exportStar(require("./BobError.js"), exports);
|
|
18
|
+
__exportStar(require("./BadCommandParameter.js"), exports);
|
|
19
|
+
__exportStar(require("./BadCommandOption.js"), exports);
|
|
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./Command"), exports);
|
|
18
|
-
__exportStar(require("./Cli"), exports);
|
|
19
|
-
__exportStar(require("./errors"), exports);
|
|
20
|
-
__exportStar(require("./contracts"), exports);
|
|
21
|
-
__exportStar(require("./options"), exports);
|
|
17
|
+
__exportStar(require("./Command.js"), exports);
|
|
18
|
+
__exportStar(require("./Cli.js"), exports);
|
|
19
|
+
__exportStar(require("./errors/index.js"), exports);
|
|
20
|
+
__exportStar(require("./contracts/index.js"), exports);
|
|
21
|
+
__exportStar(require("./options/index.js"), exports);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateSpace =
|
|
3
|
+
exports.generateSpace = generateSpace;
|
|
4
4
|
function generateSpace(nb) {
|
|
5
5
|
return new Array(nb + 5).join(' ');
|
|
6
6
|
}
|
|
7
|
-
exports.generateSpace = generateSpace;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Command } from "../Command";
|
|
2
|
-
import { CommandOption } from "../contracts/
|
|
1
|
+
import { Command } from "../Command.js";
|
|
2
|
+
import { CommandOption } from "../contracts/index.js";
|
|
3
3
|
export declare class HelpOption implements CommandOption<Command> {
|
|
4
4
|
option: string;
|
|
5
5
|
alias: string[];
|