bob-core 0.6.3 → 0.8.0
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/Command.d.ts +1 -1
- package/dist/Command.js +1 -1
- package/dist/CommandHelper.js +19 -2
- package/dist/Parser.d.ts +4 -2
- package/dist/Parser.js +47 -6
- package/package.json +1 -1
package/dist/Command.d.ts
CHANGED
|
@@ -17,5 +17,5 @@ export declare abstract class Command<C = undefined> extends CommandHelper {
|
|
|
17
17
|
protected abstract handle(): Promise<void | number>;
|
|
18
18
|
run(ctx: C, ...args: any[]): Promise<number>;
|
|
19
19
|
protected option(key: string, defaultValue?: any): string | null;
|
|
20
|
-
protected argument(key: string, defaultValue?: any): string | null;
|
|
20
|
+
protected argument(key: string, defaultValue?: any): string | Array<string> | null;
|
|
21
21
|
}
|
package/dist/Command.js
CHANGED
|
@@ -26,7 +26,7 @@ class Command extends CommandHelper_1.CommandHelper {
|
|
|
26
26
|
option(key, defaultValue = null) {
|
|
27
27
|
return this.parser.option(key) ?? defaultValue;
|
|
28
28
|
}
|
|
29
|
-
argument(key, defaultValue) {
|
|
29
|
+
argument(key, defaultValue = null) {
|
|
30
30
|
return this.parser.argument(key) ?? defaultValue;
|
|
31
31
|
}
|
|
32
32
|
}
|
package/dist/CommandHelper.js
CHANGED
|
@@ -13,6 +13,7 @@ class CommandHelper {
|
|
|
13
13
|
{
|
|
14
14
|
name: 'help',
|
|
15
15
|
optional: true,
|
|
16
|
+
type: 'boolean',
|
|
16
17
|
help: (0, chalk_1.default) `Display help for the given command. When no command is given display help for the {green list} command`,
|
|
17
18
|
alias: ['h']
|
|
18
19
|
}
|
|
@@ -38,14 +39,30 @@ class CommandHelper {
|
|
|
38
39
|
log((0, chalk_1.default) `\n{yellow Arguments}:`);
|
|
39
40
|
for (const signature of availableArguments) {
|
|
40
41
|
const spaces = (0, string_1.generateSpace)(maxLength - signature.name.length);
|
|
41
|
-
|
|
42
|
+
let message = (0, chalk_1.default) ` {green ${signature.name}} ${spaces} ${signature.help ?? '\b'}`;
|
|
43
|
+
if (signature.defaultValue !== undefined && signature.optional) {
|
|
44
|
+
const defaultValue = signature.type === 'array' ? JSON.stringify(signature.defaultValue) : signature.defaultValue;
|
|
45
|
+
message += (0, chalk_1.default) ` {yellow [default: ${defaultValue}]}`;
|
|
46
|
+
}
|
|
47
|
+
if (signature.variadic) {
|
|
48
|
+
message += (0, chalk_1.default) ` {white (variadic)}`;
|
|
49
|
+
}
|
|
50
|
+
log(message);
|
|
42
51
|
}
|
|
43
52
|
}
|
|
44
53
|
if (availableOptions.length > 0) {
|
|
45
54
|
log((0, chalk_1.default) `\n{yellow Options}:`);
|
|
46
55
|
for (const signature of availableOptions) {
|
|
47
56
|
const spaces = (0, string_1.generateSpace)(maxLength - signature.optionWithAlias.length);
|
|
48
|
-
|
|
57
|
+
let message = (0, chalk_1.default) `{green ${signature.optionWithAlias}} ${spaces} ${signature.help ?? '\b'}`;
|
|
58
|
+
if (signature.type) {
|
|
59
|
+
message += (0, chalk_1.default) ` {white (${signature.type})}`;
|
|
60
|
+
}
|
|
61
|
+
if (signature.defaultValue !== undefined && signature.optional) {
|
|
62
|
+
const defaultValue = signature.type === 'array' ? JSON.stringify(signature.defaultValue) : signature.defaultValue;
|
|
63
|
+
message += (0, chalk_1.default) ` {yellow [default: ${defaultValue}]}`;
|
|
64
|
+
}
|
|
65
|
+
log(message);
|
|
49
66
|
}
|
|
50
67
|
}
|
|
51
68
|
if (this.commandsExamples.length > 0) {
|
package/dist/Parser.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export type ArgSignature = {
|
|
2
2
|
name: string;
|
|
3
|
-
|
|
3
|
+
type: string;
|
|
4
|
+
optional?: boolean;
|
|
5
|
+
variadic?: boolean;
|
|
4
6
|
alias?: string[];
|
|
5
7
|
help?: string;
|
|
6
|
-
defaultValue?: string | boolean | null;
|
|
8
|
+
defaultValue?: string | boolean | Array<string> | null;
|
|
7
9
|
isOption?: boolean;
|
|
8
10
|
};
|
|
9
11
|
export declare class Parser {
|
package/dist/Parser.js
CHANGED
|
@@ -15,6 +15,25 @@ class Parser {
|
|
|
15
15
|
argumentsSignature = {};
|
|
16
16
|
optionsSignature = {};
|
|
17
17
|
option(name) {
|
|
18
|
+
if (!this.optionsSignature[name]) {
|
|
19
|
+
throw new Error(`Option ${name} not found`);
|
|
20
|
+
}
|
|
21
|
+
const signature = this.optionsSignature[name];
|
|
22
|
+
if (signature.type === 'boolean') {
|
|
23
|
+
if (this.options[name] === 'true' || this.options[name] === '1') {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
else if (this.options[name] === 'false' || this.options[name] === '0') {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return Boolean(this.options[name]);
|
|
30
|
+
}
|
|
31
|
+
if (signature.type === 'array') {
|
|
32
|
+
if (!this.options[name]) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
return Array.isArray(this.options[name]) ? this.options[name] : [this.options[name]];
|
|
36
|
+
}
|
|
18
37
|
return this.options[name];
|
|
19
38
|
}
|
|
20
39
|
argument(name) {
|
|
@@ -49,8 +68,14 @@ class Parser {
|
|
|
49
68
|
}
|
|
50
69
|
}
|
|
51
70
|
else {
|
|
52
|
-
|
|
53
|
-
|
|
71
|
+
if (param.variadic) {
|
|
72
|
+
const paramValue = paramValues.splice(0, paramValues.length);
|
|
73
|
+
this.arguments[param.name] = paramValue ?? [];
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const paramValue = paramValues.shift();
|
|
77
|
+
this.arguments[param.name] = paramValue ?? param.defaultValue ?? null;
|
|
78
|
+
}
|
|
54
79
|
this.argumentsSignature[param.name] = param;
|
|
55
80
|
}
|
|
56
81
|
}
|
|
@@ -58,15 +83,22 @@ class Parser {
|
|
|
58
83
|
parseParamSignature(argument) {
|
|
59
84
|
let cleanedArgs = argument;
|
|
60
85
|
let isOptional = false;
|
|
61
|
-
|
|
86
|
+
let isVariadic = false;
|
|
87
|
+
if (cleanedArgs.endsWith('?')) {
|
|
62
88
|
cleanedArgs = cleanedArgs.slice(0, -1);
|
|
63
89
|
isOptional = true;
|
|
64
90
|
}
|
|
91
|
+
if (cleanedArgs.endsWith('*')) {
|
|
92
|
+
cleanedArgs = cleanedArgs.slice(0, -1);
|
|
93
|
+
isVariadic = true;
|
|
94
|
+
}
|
|
65
95
|
const arg = {
|
|
66
96
|
name: cleanedArgs,
|
|
67
97
|
optional: isOptional,
|
|
98
|
+
type: isVariadic ? 'array' : 'string',
|
|
68
99
|
help: undefined,
|
|
69
|
-
defaultValue: null,
|
|
100
|
+
defaultValue: isVariadic ? [] : null,
|
|
101
|
+
variadic: isVariadic,
|
|
70
102
|
isOption: false
|
|
71
103
|
};
|
|
72
104
|
if (arg.name.includes(':')) {
|
|
@@ -84,14 +116,18 @@ class Parser {
|
|
|
84
116
|
}
|
|
85
117
|
else if (arg.defaultValue === 'true') {
|
|
86
118
|
arg.defaultValue = true;
|
|
119
|
+
arg.type = 'boolean';
|
|
87
120
|
}
|
|
88
121
|
else if (arg.defaultValue === 'false') {
|
|
89
122
|
arg.defaultValue = false;
|
|
123
|
+
arg.type = 'boolean';
|
|
90
124
|
}
|
|
91
125
|
}
|
|
92
126
|
else {
|
|
93
127
|
if (arg.name.startsWith('--')) {
|
|
128
|
+
arg.optional = true;
|
|
94
129
|
arg.defaultValue = false;
|
|
130
|
+
arg.type = 'boolean';
|
|
95
131
|
}
|
|
96
132
|
}
|
|
97
133
|
if (arg.name.includes('|')) {
|
|
@@ -103,9 +139,11 @@ class Parser {
|
|
|
103
139
|
arg.isOption = true;
|
|
104
140
|
arg.name = arg.name.slice(2);
|
|
105
141
|
}
|
|
106
|
-
if (
|
|
107
|
-
arg.
|
|
142
|
+
if (arg.defaultValue === '*') {
|
|
143
|
+
arg.defaultValue = [];
|
|
144
|
+
arg.type = 'array';
|
|
108
145
|
}
|
|
146
|
+
arg.help = arg.help ?? this.helperDefinitions[arg.name] ?? this.helperDefinitions[`--${arg.name}`];
|
|
109
147
|
return arg;
|
|
110
148
|
}
|
|
111
149
|
validate() {
|
|
@@ -115,6 +153,9 @@ class Parser {
|
|
|
115
153
|
if (!value && !argSignature.optional) {
|
|
116
154
|
throw new MissingRequiredArgumentValue_1.MissingRequiredArgumentValue(argSignature);
|
|
117
155
|
}
|
|
156
|
+
if (!value?.length && argSignature.variadic && !argSignature.optional) {
|
|
157
|
+
throw new MissingRequiredArgumentValue_1.MissingRequiredArgumentValue(argSignature);
|
|
158
|
+
}
|
|
118
159
|
}
|
|
119
160
|
}
|
|
120
161
|
}
|