breadc 0.1.0 → 0.3.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/index.d.ts CHANGED
@@ -1,7 +1,254 @@
1
- import { ParsedArgs } from 'minimist';
2
- export { default as minimist } from 'minimist';
3
1
  export { default as kolorist } from 'kolorist';
4
- export { default as createDebug } from 'debug';
2
+
3
+ var minimist = function (args, opts) {
4
+ if (!opts) opts = {};
5
+
6
+ var flags = { bools : {}, strings : {}, unknownFn: null };
7
+
8
+ if (typeof opts['unknown'] === 'function') {
9
+ flags.unknownFn = opts['unknown'];
10
+ }
11
+
12
+ if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {
13
+ flags.allBools = true;
14
+ } else {
15
+ [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
16
+ flags.bools[key] = true;
17
+ });
18
+ }
19
+
20
+ var aliases = {};
21
+ Object.keys(opts.alias || {}).forEach(function (key) {
22
+ aliases[key] = [].concat(opts.alias[key]);
23
+ aliases[key].forEach(function (x) {
24
+ aliases[x] = [key].concat(aliases[key].filter(function (y) {
25
+ return x !== y;
26
+ }));
27
+ });
28
+ });
29
+
30
+ [].concat(opts.string).filter(Boolean).forEach(function (key) {
31
+ flags.strings[key] = true;
32
+ if (aliases[key]) {
33
+ flags.strings[aliases[key]] = true;
34
+ }
35
+ });
36
+
37
+ var defaults = opts['default'] || {};
38
+
39
+ var argv = { _ : [] };
40
+ Object.keys(flags.bools).forEach(function (key) {
41
+ setArg(key, defaults[key] === undefined ? false : defaults[key]);
42
+ });
43
+
44
+ var notFlags = [];
45
+
46
+ if (args.indexOf('--') !== -1) {
47
+ notFlags = args.slice(args.indexOf('--')+1);
48
+ args = args.slice(0, args.indexOf('--'));
49
+ }
50
+
51
+ function argDefined(key, arg) {
52
+ return (flags.allBools && /^--[^=]+$/.test(arg)) ||
53
+ flags.strings[key] || flags.bools[key] || aliases[key];
54
+ }
55
+
56
+ function setArg (key, val, arg) {
57
+ if (arg && flags.unknownFn && !argDefined(key, arg)) {
58
+ if (flags.unknownFn(arg) === false) return;
59
+ }
60
+
61
+ var value = !flags.strings[key] && isNumber(val)
62
+ ? Number(val) : val
63
+ ;
64
+ setKey(argv, key.split('.'), value);
65
+
66
+ (aliases[key] || []).forEach(function (x) {
67
+ setKey(argv, x.split('.'), value);
68
+ });
69
+ }
70
+
71
+ function setKey (obj, keys, value) {
72
+ var o = obj;
73
+ for (var i = 0; i < keys.length-1; i++) {
74
+ var key = keys[i];
75
+ if (isConstructorOrProto(o, key)) return;
76
+ if (o[key] === undefined) o[key] = {};
77
+ if (o[key] === Object.prototype || o[key] === Number.prototype
78
+ || o[key] === String.prototype) o[key] = {};
79
+ if (o[key] === Array.prototype) o[key] = [];
80
+ o = o[key];
81
+ }
82
+
83
+ var key = keys[keys.length - 1];
84
+ if (isConstructorOrProto(o, key)) return;
85
+ if (o === Object.prototype || o === Number.prototype
86
+ || o === String.prototype) o = {};
87
+ if (o === Array.prototype) o = [];
88
+ if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {
89
+ o[key] = value;
90
+ }
91
+ else if (Array.isArray(o[key])) {
92
+ o[key].push(value);
93
+ }
94
+ else {
95
+ o[key] = [ o[key], value ];
96
+ }
97
+ }
98
+
99
+ function aliasIsBoolean(key) {
100
+ return aliases[key].some(function (x) {
101
+ return flags.bools[x];
102
+ });
103
+ }
104
+
105
+ for (var i = 0; i < args.length; i++) {
106
+ var arg = args[i];
107
+
108
+ if (/^--.+=/.test(arg)) {
109
+ // Using [\s\S] instead of . because js doesn't support the
110
+ // 'dotall' regex modifier. See:
111
+ // http://stackoverflow.com/a/1068308/13216
112
+ var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
113
+ var key = m[1];
114
+ var value = m[2];
115
+ if (flags.bools[key]) {
116
+ value = value !== 'false';
117
+ }
118
+ setArg(key, value, arg);
119
+ }
120
+ else if (/^--no-.+/.test(arg)) {
121
+ var key = arg.match(/^--no-(.+)/)[1];
122
+ setArg(key, false, arg);
123
+ }
124
+ else if (/^--.+/.test(arg)) {
125
+ var key = arg.match(/^--(.+)/)[1];
126
+ var next = args[i + 1];
127
+ if (next !== undefined && !/^-/.test(next)
128
+ && !flags.bools[key]
129
+ && !flags.allBools
130
+ && (aliases[key] ? !aliasIsBoolean(key) : true)) {
131
+ setArg(key, next, arg);
132
+ i++;
133
+ }
134
+ else if (/^(true|false)$/.test(next)) {
135
+ setArg(key, next === 'true', arg);
136
+ i++;
137
+ }
138
+ else {
139
+ setArg(key, flags.strings[key] ? '' : true, arg);
140
+ }
141
+ }
142
+ else if (/^-[^-]+/.test(arg)) {
143
+ var letters = arg.slice(1,-1).split('');
144
+
145
+ var broken = false;
146
+ for (var j = 0; j < letters.length; j++) {
147
+ var next = arg.slice(j+2);
148
+
149
+ if (next === '-') {
150
+ setArg(letters[j], next, arg);
151
+ continue;
152
+ }
153
+
154
+ if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {
155
+ setArg(letters[j], next.split('=')[1], arg);
156
+ broken = true;
157
+ break;
158
+ }
159
+
160
+ if (/[A-Za-z]/.test(letters[j])
161
+ && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
162
+ setArg(letters[j], next, arg);
163
+ broken = true;
164
+ break;
165
+ }
166
+
167
+ if (letters[j+1] && letters[j+1].match(/\W/)) {
168
+ setArg(letters[j], arg.slice(j+2), arg);
169
+ broken = true;
170
+ break;
171
+ }
172
+ else {
173
+ setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);
174
+ }
175
+ }
176
+
177
+ var key = arg.slice(-1)[0];
178
+ if (!broken && key !== '-') {
179
+ if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
180
+ && !flags.bools[key]
181
+ && (aliases[key] ? !aliasIsBoolean(key) : true)) {
182
+ setArg(key, args[i+1], arg);
183
+ i++;
184
+ }
185
+ else if (args[i+1] && /^(true|false)$/.test(args[i+1])) {
186
+ setArg(key, args[i+1] === 'true', arg);
187
+ i++;
188
+ }
189
+ else {
190
+ setArg(key, flags.strings[key] ? '' : true, arg);
191
+ }
192
+ }
193
+ }
194
+ else {
195
+ if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
196
+ argv._.push(
197
+ flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
198
+ );
199
+ }
200
+ if (opts.stopEarly) {
201
+ argv._.push.apply(argv._, args.slice(i + 1));
202
+ break;
203
+ }
204
+ }
205
+ }
206
+
207
+ Object.keys(defaults).forEach(function (key) {
208
+ if (!hasKey(argv, key.split('.'))) {
209
+ setKey(argv, key.split('.'), defaults[key]);
210
+
211
+ (aliases[key] || []).forEach(function (x) {
212
+ setKey(argv, x.split('.'), defaults[key]);
213
+ });
214
+ }
215
+ });
216
+
217
+ if (opts['--']) {
218
+ argv['--'] = new Array();
219
+ notFlags.forEach(function(key) {
220
+ argv['--'].push(key);
221
+ });
222
+ }
223
+ else {
224
+ notFlags.forEach(function(key) {
225
+ argv._.push(key);
226
+ });
227
+ }
228
+
229
+ return argv;
230
+ };
231
+
232
+ function hasKey (obj, keys) {
233
+ var o = obj;
234
+ keys.slice(0,-1).forEach(function (key) {
235
+ o = (o[key] || {});
236
+ });
237
+
238
+ var key = keys[keys.length - 1];
239
+ return key in o;
240
+ }
241
+
242
+ function isNumber (x) {
243
+ if (typeof x === 'number') return true;
244
+ if (/^0x[0-9a-f]+$/i.test(x)) return true;
245
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
246
+ }
247
+
248
+
249
+ function isConstructorOrProto (obj, key) {
250
+ return key === 'constructor' && typeof obj[key] === 'function' || key === '__proto__';
251
+ }
5
252
 
6
253
  interface OptionConfig<T = string> {
7
254
  description?: string;
@@ -17,25 +264,29 @@ interface OptionConfig<T = string> {
17
264
  * + --option <arg>
18
265
  * + --option [arg]
19
266
  */
20
- declare class Option<T extends string = string, U = ExtractOption<T>> {
267
+ declare class Option<T extends string = string, F = string> {
21
268
  private static OptionRE;
22
269
  readonly name: string;
23
270
  readonly shortcut?: string;
271
+ readonly default?: F;
272
+ readonly format: string;
24
273
  readonly description: string;
25
274
  readonly type: 'string' | 'boolean';
275
+ readonly required: boolean;
26
276
  readonly construct: (rawText: string | undefined) => any;
27
- constructor(format: T, config?: OptionConfig);
277
+ constructor(format: T, config?: OptionConfig<F>);
28
278
  }
29
279
 
30
- declare type ConditionFn = (args: ParsedArgs) => boolean;
280
+ declare type ConditionFn = (args: minimist.ParsedArgs) => boolean;
31
281
  interface CommandConfig {
32
282
  description?: string;
33
283
  }
34
- declare class Command<F extends string = string, GlobalOption extends string | never = never, CommandOption extends string | never = never> {
284
+ declare class Command<F extends string = string, CommandOption extends object = {}> {
35
285
  private static MaxDep;
36
286
  private readonly conditionFn?;
37
287
  private readonly logger;
38
288
  readonly format: string[];
289
+ readonly default: boolean;
39
290
  readonly description: string;
40
291
  readonly options: Option[];
41
292
  private actionFn?;
@@ -43,34 +294,37 @@ declare class Command<F extends string = string, GlobalOption extends string | n
43
294
  condition?: ConditionFn;
44
295
  logger: Logger;
45
296
  });
46
- option<OF extends string>(format: OF, description: string, config?: Omit<OptionConfig, 'description'>): Command<F, GlobalOption, CommandOption | ExtractOption<OF>>;
47
- option<OF extends string>(format: OF, config?: OptionConfig): Command<F, GlobalOption, CommandOption | ExtractOption<OF>>;
48
- shouldRun(args: ParsedArgs): boolean;
49
- parseArgs(args: ParsedArgs): ParseResult;
50
- action(fn: ActionFn<ExtractCommand<F>, GlobalOption | CommandOption>): this;
297
+ option<OF extends string, T = string>(format: OF, description: string, config?: Omit<OptionConfig<T>, 'description'>): Command<F, CommandOption & ExtractOption<OF>>;
298
+ option<OF extends string, T = string>(format: OF, config?: OptionConfig<T>): Command<F, CommandOption & ExtractOption<OF>>;
299
+ get hasConditionFn(): boolean;
300
+ shouldRun(args: minimist.ParsedArgs): boolean;
301
+ parseArgs(args: minimist.ParsedArgs, globalOptions: Option[]): ParseResult;
302
+ action(fn: ActionFn<ExtractCommand<F>, CommandOption>): this;
51
303
  run(...args: any[]): Promise<void>;
52
304
  }
53
305
 
54
306
  interface AppOption {
55
307
  version?: string;
308
+ description?: string | string[];
56
309
  help?: string | string[] | (() => string | string[]);
57
- logger?: Logger;
310
+ logger?: Partial<Logger> | LoggerFn;
58
311
  }
312
+ declare type LoggerFn = (message: string, ...args: any[]) => void;
59
313
  interface Logger {
60
- println: (message: string) => void;
61
- info: (message: string, ...args: any[]) => void;
62
- warn: (message: string, ...args: any[]) => void;
63
- error: (message: string, ...args: any[]) => void;
64
- debug: (message: string, ...args: any[]) => void;
314
+ println: LoggerFn;
315
+ info: LoggerFn;
316
+ warn: LoggerFn;
317
+ error: LoggerFn;
318
+ debug: LoggerFn;
65
319
  }
66
320
  interface ParseResult {
67
321
  command: Command | undefined;
68
322
  arguments: any[];
69
323
  options: Record<string, string>;
70
324
  }
71
- declare type Lowercase = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z';
72
- declare type Uppercase = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z';
73
- declare type Letter = Lowercase | Uppercase;
325
+ declare type ExtractOption<T extends string> = {
326
+ [k in ExtractOptionName<T>]: ExtractOptionType<T>;
327
+ };
74
328
  /**
75
329
  * Extract option name type
76
330
  *
@@ -78,30 +332,39 @@ declare type Letter = Lowercase | Uppercase;
78
332
  * + const t1: ExtractOption<'--option' | '--hello'> = 'hello'
79
333
  * + const t2: ExtractOption<'-r, --root'> = 'root'
80
334
  */
81
- declare type ExtractOption<T extends string> = T extends `-${Letter}, --${infer R} [${infer U}]` ? R : T extends `-${Letter}, --${infer R} <${infer U}>` ? R : T extends `-${Letter}, --${infer R}` ? R : T extends `--${infer R} [${infer U}]` ? R : T extends `--${infer R} <${infer U}>` ? R : T extends `--${infer R}` ? R : never;
335
+ declare type ExtractOptionName<T extends string> = T extends `-${Letter}, --${infer R} [${infer U}]` ? R : T extends `-${Letter}, --${infer R} <${infer U}>` ? R : T extends `-${Letter}, --${infer R}` ? R : T extends `--${infer R} [${infer U}]` ? R : T extends `--${infer R} <${infer U}>` ? R : T extends `--${infer R}` ? R : never;
336
+ declare type ExtractOptionType<T extends string> = T extends `-${Letter}, --${infer R} [${infer U}]` ? string | undefined : T extends `-${Letter}, --${infer R} <${infer U}>` ? string | boolean : T extends `-${Letter}, --${infer R}` ? boolean : T extends `--${infer R} [${infer U}]` ? string | undefined : T extends `--${infer R} <${infer U}>` ? string | boolean : T extends `--${infer R}` ? boolean : never;
337
+ declare type Lowercase = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z';
338
+ declare type Uppercase = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z';
339
+ declare type Letter = Lowercase | Uppercase;
82
340
  declare type Push<T extends any[], U> = [...T, U];
83
- declare type ActionFn<T extends any[], Option extends string = never> = (...arg: Push<T, Record<Option, string>>) => void;
341
+ declare type ActionFn<T extends any[], Option extends object = {}> = (...arg: Push<T, Option>) => void;
84
342
  /**
85
- * Max Dep: 4
343
+ * Max Dep: 5
86
344
  *
87
- * Generated by: npx tsx scripts/genType.ts 4
345
+ * Generated by: npx tsx scripts/genType.ts 5
88
346
  */
89
- declare type ExtractCommand<T extends string> = T extends `[${infer P1}] [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string | undefined, string | undefined, string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}] [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string, string | undefined, string | undefined, string[]] : T extends `<${infer P1}> [${infer P2}] [${infer P3}] [${infer P4}]` ? [string, string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> [${infer P3}] [...${infer P4}]` ? [string, string, string | undefined, string[]] : T extends `<${infer P1}> <${infer P2}> [${infer P3}] [${infer P4}]` ? [string, string, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string, string[]] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string, string] : T extends `${infer P1} [${infer P2}] [${infer P3}] [...${infer P4}]` ? [string | undefined, string | undefined, string[]] : T extends `${infer P1} [${infer P2}] [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> [${infer P3}] [...${infer P4}]` ? [string, string | undefined, string[]] : T extends `${infer P1} <${infer P2}> [${infer P3}] [${infer P4}]` ? [string, string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string[]] : T extends `${infer P1} <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string] : T extends `${infer P1} ${infer P2} [${infer P3}] [...${infer P4}]` ? [string | undefined, string[]] : T extends `${infer P1} ${infer P2} [${infer P3}] [${infer P4}]` ? [string | undefined, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> [...${infer P4}]` ? [string, string[]] : T extends `${infer P1} ${infer P2} <${infer P3}> [${infer P4}]` ? [string, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> <${infer P4}>` ? [string, string] : T extends `${infer P1} ${infer P2} ${infer P3} [...${infer P4}]` ? [string[]] : T extends `${infer P1} ${infer P2} ${infer P3} [${infer P4}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} ${infer P3} <${infer P4}>` ? [string] : T extends `[${infer P1}] [${infer P2}] [...${infer P3}]` ? [string | undefined, string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}] [${infer P3}]` ? [string | undefined, string | undefined, string | undefined] : T extends `<${infer P1}> [${infer P2}] [...${infer P3}]` ? [string, string | undefined, string[]] : T extends `<${infer P1}> [${infer P2}] [${infer P3}]` ? [string, string | undefined, string | undefined] : T extends `<${infer P1}> <${infer P2}> [...${infer P3}]` ? [string, string, string[]] : T extends `<${infer P1}> <${infer P2}> [${infer P3}]` ? [string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}>` ? [string, string, string] : T extends `${infer P1} [${infer P2}] [...${infer P3}]` ? [string | undefined, string[]] : T extends `${infer P1} [${infer P2}] [${infer P3}]` ? [string | undefined, string | undefined] : T extends `${infer P1} <${infer P2}> [...${infer P3}]` ? [string, string[]] : T extends `${infer P1} <${infer P2}> [${infer P3}]` ? [string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}>` ? [string, string] : T extends `${infer P1} ${infer P2} [...${infer P3}]` ? [string[]] : T extends `${infer P1} ${infer P2} [${infer P3}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}>` ? [string] : T extends `${infer P1} ${infer P2} ${infer P3}` ? [] : T extends `[${infer P1}] [...${infer P2}]` ? [string | undefined, string[]] : T extends `[${infer P1}] [${infer P2}]` ? [string | undefined, string | undefined] : T extends `<${infer P1}> [...${infer P2}]` ? [string, string[]] : T extends `<${infer P1}> [${infer P2}]` ? [string, string | undefined] : T extends `<${infer P1}> <${infer P2}>` ? [string, string] : T extends `${infer P1} [...${infer P2}]` ? [string[]] : T extends `${infer P1} [${infer P2}]` ? [string | undefined] : T extends `${infer P1} <${infer P2}>` ? [string] : T extends `${infer P1} ${infer P2}` ? [] : T extends `[...${infer P1}]` ? [string[]] : T extends `[${infer P1}]` ? [string | undefined] : T extends `<${infer P1}>` ? [string] : T extends `${infer P1}` ? [] : never;
347
+ declare type ExtractCommand<T extends string> = T extends `<${infer P1}> <${infer P2}> <${infer P3}> <${infer P4}> [...${infer P5}]` ? [string, string, string, string, string[]] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> <${infer P4}> [${infer P5}]` ? [string, string, string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> <${infer P4}> <${infer P5}>` ? [string, string, string, string, string] : T extends `${infer P1} <${infer P2}> <${infer P3}> <${infer P4}> [...${infer P5}]` ? [string, string, string, string[]] : T extends `${infer P1} <${infer P2}> <${infer P3}> <${infer P4}> [${infer P5}]` ? [string, string, string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> <${infer P4}> <${infer P5}>` ? [string, string, string, string] : T extends `${infer P1} ${infer P2} <${infer P3}> <${infer P4}> [...${infer P5}]` ? [string, string, string[]] : T extends `${infer P1} ${infer P2} <${infer P3}> <${infer P4}> [${infer P5}]` ? [string, string, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> <${infer P4}> <${infer P5}>` ? [string, string, string] : T extends `${infer P1} ${infer P2} ${infer P3} <${infer P4}> [...${infer P5}]` ? [string, string[]] : T extends `${infer P1} ${infer P2} ${infer P3} <${infer P4}> [${infer P5}]` ? [string, string | undefined] : T extends `${infer P1} ${infer P2} ${infer P3} <${infer P4}> <${infer P5}>` ? [string, string] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string, string[]] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string, string] : T extends `${infer P1} <${infer P2}> <${infer P3}> [...${infer P4}]` ? [string, string, string[]] : T extends `${infer P1} <${infer P2}> <${infer P3}> [${infer P4}]` ? [string, string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}> <${infer P4}>` ? [string, string, string] : T extends `${infer P1} ${infer P2} <${infer P3}> [...${infer P4}]` ? [string, string[]] : T extends `${infer P1} ${infer P2} <${infer P3}> [${infer P4}]` ? [string, string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}> <${infer P4}>` ? [string, string] : T extends `${infer P1} ${infer P2} ${infer P3} [...${infer P4}]` ? [string[]] : T extends `${infer P1} ${infer P2} ${infer P3} [${infer P4}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} ${infer P3} <${infer P4}>` ? [string] : T extends `<${infer P1}> <${infer P2}> [...${infer P3}]` ? [string, string, string[]] : T extends `<${infer P1}> <${infer P2}> [${infer P3}]` ? [string, string, string | undefined] : T extends `<${infer P1}> <${infer P2}> <${infer P3}>` ? [string, string, string] : T extends `${infer P1} <${infer P2}> [...${infer P3}]` ? [string, string[]] : T extends `${infer P1} <${infer P2}> [${infer P3}]` ? [string, string | undefined] : T extends `${infer P1} <${infer P2}> <${infer P3}>` ? [string, string] : T extends `${infer P1} ${infer P2} [...${infer P3}]` ? [string[]] : T extends `${infer P1} ${infer P2} [${infer P3}]` ? [string | undefined] : T extends `${infer P1} ${infer P2} <${infer P3}>` ? [string] : T extends `${infer P1} ${infer P2} ${infer P3}` ? [] : T extends `<${infer P1}> [...${infer P2}]` ? [string, string[]] : T extends `<${infer P1}> [${infer P2}]` ? [string, string | undefined] : T extends `<${infer P1}> <${infer P2}>` ? [string, string] : T extends `${infer P1} [...${infer P2}]` ? [string[]] : T extends `${infer P1} [${infer P2}]` ? [string | undefined] : T extends `${infer P1} <${infer P2}>` ? [string] : T extends `${infer P1} ${infer P2}` ? [] : T extends `[...${infer P1}]` ? [string[]] : T extends `[${infer P1}]` ? [string | undefined] : T extends `<${infer P1}>` ? [string] : T extends `${infer P1}` ? [] : T extends `` ? [] : never;
90
348
 
91
- declare class Breadc<GlobalOption extends string | never = never> {
349
+ declare class Breadc<GlobalOption extends object = {}> {
92
350
  private readonly name;
93
- private readonly version;
351
+ private readonly _version;
352
+ private readonly description?;
94
353
  private readonly options;
95
354
  private readonly commands;
355
+ private defaultCommand?;
96
356
  readonly logger: Logger;
97
357
  constructor(name: string, option: AppOption);
98
- option<F extends string>(format: F, description: string, config?: Omit<OptionConfig, 'description'>): Breadc<GlobalOption | ExtractOption<F>>;
99
- option<F extends string>(format: F, config?: OptionConfig): Breadc<GlobalOption | ExtractOption<F>>;
358
+ version(): string;
359
+ help(command?: Command): string[];
360
+ option<F extends string, T = string>(format: F, description: string, config?: Omit<OptionConfig<T>, 'description'>): Breadc<GlobalOption & ExtractOption<F>>;
361
+ option<F extends string, T = string>(format: F, config?: OptionConfig<T>): Breadc<GlobalOption & ExtractOption<F>>;
362
+ command<F extends string>(format: F, description: string, config?: Omit<CommandConfig, 'description'>): Command<F, GlobalOption>;
100
363
  command<F extends string>(format: F, config?: CommandConfig): Command<F, GlobalOption>;
101
364
  parse(args: string[]): ParseResult;
102
365
  run(args: string[]): Promise<void>;
103
366
  }
104
367
 
105
- declare function breadc(name: string, option?: AppOption): Breadc<never>;
368
+ declare function breadc(name: string, option?: AppOption): Breadc<{}>;
106
369
 
107
- export { breadc as default };
370
+ export { breadc as default, minimist };