argue-cli 1.2.1 → 2.0.0-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/LICENSE +5 -5
- package/README.md +133 -68
- package/dist/args.d.ts +17 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/argv.d.ts +14 -0
- package/dist/argv.d.ts.map +1 -0
- package/dist/core.d.ts +19 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/index.cjs +208 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +195 -0
- package/dist/index.js.map +1 -0
- package/dist/options.d.ts +9 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +24 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +26 -46
- package/CHANGELOG.md +0 -10
- package/lib/index.d.ts +0 -98
- package/lib/index.es.js +0 -391
- package/lib/index.es.js.map +0 -1
- package/lib/index.js +0 -403
- package/lib/index.js.map +0 -1
package/dist/index.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
const ARGV_START_INDEX = 2;
|
|
2
|
+
/**
|
|
3
|
+
* Internal state of arguments.
|
|
4
|
+
*/ const argv = process.argv.slice(ARGV_START_INDEX);
|
|
5
|
+
/**
|
|
6
|
+
* Reset arguments state.
|
|
7
|
+
*/ function resetArgs() {
|
|
8
|
+
argv.splice(0, argv.length);
|
|
9
|
+
argv.push(...process.argv.slice(ARGV_START_INDEX));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Set arguments state.
|
|
13
|
+
* @param args
|
|
14
|
+
*/ function setArgs(...args) {
|
|
15
|
+
argv.splice(0, argv.length);
|
|
16
|
+
argv.push(...args);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Match reference with argument.
|
|
21
|
+
* @param argRef
|
|
22
|
+
* @param arg
|
|
23
|
+
* @returns Full name or null.
|
|
24
|
+
*/ function matchArgName(argRef, arg) {
|
|
25
|
+
if (typeof argRef === 'string') {
|
|
26
|
+
return argRef === arg ? argRef : null;
|
|
27
|
+
}
|
|
28
|
+
if (argRef.name === arg) {
|
|
29
|
+
return argRef.name;
|
|
30
|
+
}
|
|
31
|
+
return argRef.aliases.includes(arg) ? argRef.name : null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Find full argument name in references.
|
|
35
|
+
* @param argRefs
|
|
36
|
+
* @param arg
|
|
37
|
+
* @returns Found argument's full name or null.
|
|
38
|
+
*/ function findArgName(argRefs, arg) {
|
|
39
|
+
let argRef;
|
|
40
|
+
let argName;
|
|
41
|
+
for (argRef of argRefs){
|
|
42
|
+
argName = matchArgName(argRef, arg);
|
|
43
|
+
if (argName) {
|
|
44
|
+
return argName;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Read next argument.
|
|
52
|
+
* Throws error if no next argument.
|
|
53
|
+
* @returns Next argument.
|
|
54
|
+
*/ function read() {
|
|
55
|
+
const value = argv.shift();
|
|
56
|
+
if (!value) {
|
|
57
|
+
throw new Error('Unexpected end of arguments');
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Expectation of the end.
|
|
63
|
+
* Throws an error if there are more arguments left.
|
|
64
|
+
*/ function end() {
|
|
65
|
+
if (argv.length) {
|
|
66
|
+
throw new Error(`Unexpected argument "${argv[0]}"`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Expect one of the given arguments.
|
|
71
|
+
* @param argRefs
|
|
72
|
+
* @returns Expected full argument name.
|
|
73
|
+
*/ function expect(...argRefs) {
|
|
74
|
+
const arg = read();
|
|
75
|
+
const argName = findArgName(argRefs, arg);
|
|
76
|
+
if (!argName) {
|
|
77
|
+
throw new Error(`Unexpected argument "${arg}"`);
|
|
78
|
+
}
|
|
79
|
+
return argName;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Describe argument with aliases.
|
|
84
|
+
* @param name - Main name.
|
|
85
|
+
* @param alias - Alias name.
|
|
86
|
+
* @param restAliases - Rest aliases.
|
|
87
|
+
* @returns Description of argument with aliases..
|
|
88
|
+
*/ function alias(name, alias1, ...restAliases) {
|
|
89
|
+
return {
|
|
90
|
+
name,
|
|
91
|
+
aliases: [
|
|
92
|
+
alias1,
|
|
93
|
+
...restAliases
|
|
94
|
+
]
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Describe option with value.
|
|
99
|
+
* @param argRef - Option name.
|
|
100
|
+
* @param type - Value type.
|
|
101
|
+
* @returns Option reader.
|
|
102
|
+
*/ function option(argRef, type) {
|
|
103
|
+
if (type === String) {
|
|
104
|
+
return (option1, next)=>{
|
|
105
|
+
const argName = matchArgName(argRef, option1);
|
|
106
|
+
if (argName) {
|
|
107
|
+
return {
|
|
108
|
+
[argName]: next(true)
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (type === Number) {
|
|
115
|
+
return (option2, next)=>{
|
|
116
|
+
const argName = matchArgName(argRef, option2);
|
|
117
|
+
if (argName) {
|
|
118
|
+
return {
|
|
119
|
+
[argName]: parseFloat(next(true))
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (type === Array) {
|
|
126
|
+
return (option3, next, options)=>{
|
|
127
|
+
const argName = matchArgName(argRef, option3);
|
|
128
|
+
if (argName) {
|
|
129
|
+
const prevValues = options[argName];
|
|
130
|
+
const values = next(true).split(',');
|
|
131
|
+
return {
|
|
132
|
+
[argName]: Array.isArray(prevValues) ? prevValues.concat(values) : values
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return (option4)=>{
|
|
139
|
+
const argName = matchArgName(argRef, option4);
|
|
140
|
+
if (argName) {
|
|
141
|
+
return {
|
|
142
|
+
[argName]: true
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function isOption(arg) {
|
|
150
|
+
return /^--?[^-].*/.test(arg);
|
|
151
|
+
}
|
|
152
|
+
function removePrefix(arg) {
|
|
153
|
+
return arg.replace(/^--?/, '');
|
|
154
|
+
}
|
|
155
|
+
function createOptionReader(optionReaders) {
|
|
156
|
+
const optionReader = optionReaders.reduceRight((readNextOption, readOption)=>{
|
|
157
|
+
if (!readNextOption) {
|
|
158
|
+
return readOption;
|
|
159
|
+
}
|
|
160
|
+
return (option, next, options)=>readOption(option, next, options) ?? readNextOption(option, next, options)
|
|
161
|
+
;
|
|
162
|
+
}, null);
|
|
163
|
+
return optionReader;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Read options from arguments.
|
|
167
|
+
* @param optionReaders
|
|
168
|
+
* @returns Options with values.
|
|
169
|
+
*/ function readOptions(...optionReaders) {
|
|
170
|
+
if (!argv.length || !optionReaders.length) {
|
|
171
|
+
return {};
|
|
172
|
+
}
|
|
173
|
+
const readOption = createOptionReader(optionReaders);
|
|
174
|
+
const options = {};
|
|
175
|
+
let i = 0;
|
|
176
|
+
let arg = argv[i];
|
|
177
|
+
const next = (required = false)=>{
|
|
178
|
+
arg = argv[++i];
|
|
179
|
+
if (required && !arg) {
|
|
180
|
+
throw new Error('Unexpected end of arguments');
|
|
181
|
+
}
|
|
182
|
+
return arg;
|
|
183
|
+
};
|
|
184
|
+
// eslint-disable-next-line no-unmodified-loop-condition
|
|
185
|
+
while(arg){
|
|
186
|
+
if (isOption(arg)) {
|
|
187
|
+
Object.assign(options, readOption === null || readOption === void 0 ? void 0 : readOption(removePrefix(arg), next, options));
|
|
188
|
+
}
|
|
189
|
+
next();
|
|
190
|
+
}
|
|
191
|
+
return options;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export { alias, argv, end, expect, option, read, readOptions, resetArgs, setArgs };
|
|
195
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/argv.ts","../src/utils.ts","../src/core.ts","../src/args.ts","../src/options.ts"],"sourcesContent":["\nconst ARGV_START_INDEX = 2\n\n/**\n * Internal state of arguments.\n */\nexport const argv = process.argv.slice(ARGV_START_INDEX)\n\n/**\n * Reset arguments state.\n */\nexport function resetArgs() {\n argv.splice(0, argv.length)\n argv.push(...process.argv.slice(ARGV_START_INDEX))\n}\n\n/**\n * Set arguments state.\n * @param args\n */\nexport function setArgs(...args: string[]) {\n argv.splice(0, argv.length)\n argv.push(...args)\n}\n","\nimport { ArgRef } from './types'\n\ntype FlatMerge<T> = T extends infer U ? { [K in keyof U]: U[K] } : never\n\nexport type Merge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R]\n ? FlatMerge<NonNullable<L> & Merge<R>>\n : unknown\n\nexport type UnionMerge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R]\n ? L | Merge<R>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : any\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any\n\nexport type ReturnTypes<T extends readonly [...AnyFunction[]]> = T extends [infer L, ...infer R]\n ? L extends AnyFunction\n ? R extends AnyFunction[]\n ? [ReturnType<L>, ...ReturnTypes<R>]\n : []\n : []\n : []\n\n/**\n * Match reference with argument.\n * @param argRef\n * @param arg\n * @returns Full name or null.\n */\nexport function matchArgName<T extends string>(argRef: ArgRef<T>, arg: string) {\n if (typeof argRef === 'string') {\n return argRef === arg\n ? argRef\n : null\n }\n\n if (argRef.name === arg) {\n return argRef.name\n }\n\n return argRef.aliases.includes(arg)\n ? argRef.name\n : null\n}\n\n/**\n * Find full argument name in references.\n * @param argRefs\n * @param arg\n * @returns Found argument's full name or null.\n */\nexport function findArgName<T extends string>(argRefs: [...ArgRef<T>[]], arg: string) {\n let argRef: ArgRef<T>\n let argName: T | null\n\n for (argRef of argRefs) {\n argName = matchArgName(argRef, arg)\n\n if (argName) {\n return argName\n }\n }\n\n return null\n}\n","import { argv } from './argv'\nimport { ArgRef } from './types'\nimport { findArgName } from './utils'\n\n/**\n * Read next argument.\n * Throws error if no next argument.\n * @returns Next argument.\n */\nexport function read() {\n const value = argv.shift()\n\n if (!value) {\n throw new Error('Unexpected end of arguments')\n }\n\n return value\n}\n\n/**\n * Expectation of the end.\n * Throws an error if there are more arguments left.\n */\nexport function end() {\n if (argv.length) {\n throw new Error(`Unexpected argument \"${argv[0]}\"`)\n }\n}\n\n/**\n * Expect one of the given arguments.\n * @param argRefs\n * @returns Expected full argument name.\n */\nexport function expect<T extends string>(...argRefs: [...ArgRef<T>[]]) {\n const arg = read()\n const argName = findArgName(argRefs, arg)\n\n if (!argName) {\n throw new Error(`Unexpected argument \"${arg}\"`)\n }\n\n return argName\n}\n","import {\n AliasArgRef,\n ArgRef,\n PrimitiveConstructor,\n OptionsReaderState,\n OptionsReaderNext,\n OptionResult\n} from './types'\nimport { matchArgName } from './utils'\n\n/**\n * Describe argument with aliases.\n * @param name - Main name.\n * @param alias - Alias name.\n * @param restAliases - Rest aliases.\n * @returns Description of argument with aliases..\n */\nexport function alias<T extends string>(name: T, alias: string, ...restAliases: string[]): AliasArgRef<T> {\n return {\n name,\n aliases: [alias, ...restAliases]\n }\n}\n\n/**\n * Describe option with value.\n * @param argRef - Option name.\n * @param type - Value type.\n * @returns Option reader.\n */\nexport function option<T extends string, K extends PrimitiveConstructor>(argRef: ArgRef<T>, type: K) {\n if (type === String) {\n return (option: string, next: OptionsReaderNext) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: next(true)\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Number) {\n return (option: string, next: OptionsReaderNext) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: parseFloat(next(true))\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Array) {\n return (option: string, next: OptionsReaderNext, options: OptionsReaderState) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n const prevValues = options[argName]\n const values = next(true).split(',')\n\n return {\n [argName]: Array.isArray(prevValues)\n ? prevValues.concat(values)\n : values\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n return (option: string) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: true\n } as OptionResult<T, K>\n }\n\n return null\n }\n}\n","import { argv } from './argv'\nimport { OptionReader } from './types'\nimport { Merge, ReturnTypes, UnionMerge } from './utils'\n\nfunction isOption(arg: string) {\n return /^--?[^-].*/.test(arg)\n}\n\nfunction removePrefix(arg: string) {\n return arg.replace(/^--?/, '')\n}\n\nfunction createOptionReader<T extends OptionReader[]>(optionReaders: [...T]) {\n const optionReader = optionReaders.reduceRight<OptionReader | null>(\n (readNextOption, readOption) => {\n if (!readNextOption) {\n return readOption\n }\n\n return (option, next, options) => readOption(option, next, options) ?? readNextOption(option, next, options)\n },\n null\n )\n\n return optionReader as OptionReader<UnionMerge<ReturnTypes<T>>> | null\n}\n\n/**\n * Read options from arguments.\n * @param optionReaders\n * @returns Options with values.\n */\nexport function readOptions<T extends OptionReader[]>(...optionReaders: [...T]): Partial<Merge<ReturnTypes<T>>> {\n if (!argv.length || !optionReaders.length) {\n return {}\n }\n\n const readOption = createOptionReader(optionReaders)\n const options = {}\n let i = 0\n let arg = argv[i]\n const next = (required = false) => {\n arg = argv[++i]\n\n if (required && !arg) {\n throw new Error('Unexpected end of arguments')\n }\n\n return arg\n }\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (arg) {\n if (isOption(arg)) {\n Object.assign(options, readOption?.(removePrefix(arg), next, options))\n }\n\n next()\n }\n\n return options\n}\n"],"names":["ARGV_START_INDEX","argv","process","slice","resetArgs","splice","length","push","setArgs","args","matchArgName","argRef","arg","name","aliases","includes","findArgName","argRefs","argName","read","value","shift","Error","end","expect","alias","restAliases","option","type","String","next","Number","parseFloat","Array","options","prevValues","values","split","isArray","concat","isOption","test","removePrefix","replace","createOptionReader","optionReaders","optionReader","reduceRight","readNextOption","readOption","readOptions","i","required","Object","assign"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OptionReader } from './types';
|
|
2
|
+
import { Merge, ReturnTypes } from './utils';
|
|
3
|
+
/**
|
|
4
|
+
* Read options from arguments.
|
|
5
|
+
* @param optionReaders
|
|
6
|
+
* @returns Options with values.
|
|
7
|
+
*/
|
|
8
|
+
export declare function readOptions<T extends OptionReader[]>(...optionReaders: [...T]): Partial<Merge<ReturnTypes<T>>>;
|
|
9
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAA;AAyBxD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,YAAY,EAAE,EAAE,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CA6B9G"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare type SimpleArgRef<T extends string> = T;
|
|
2
|
+
export interface AliasArgRef<T extends string> {
|
|
3
|
+
name: T;
|
|
4
|
+
aliases: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare type ArgRef<T extends string> = SimpleArgRef<T> | AliasArgRef<T>;
|
|
7
|
+
export declare type ArgRefName<T extends ArgRef<string>> = T extends AliasArgRef<string> ? T['name'] : T;
|
|
8
|
+
export declare type OptionsReaderState = Record<string, unknown>;
|
|
9
|
+
export declare type OptionsReaderNext = <T extends boolean>(required?: T) => (T extends true ? string : string | undefined);
|
|
10
|
+
export declare type PrimitiveConstructor = StringConstructor | NumberConstructor | ArrayConstructor | BooleanConstructor;
|
|
11
|
+
export declare type OptionValueType<T extends PrimitiveConstructor> = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends ArrayConstructor ? string[] : boolean;
|
|
12
|
+
export declare type OptionResult<T extends string, K extends PrimitiveConstructor> = Record<T, OptionValueType<K>>;
|
|
13
|
+
export declare type OptionReader<T extends OptionResult<string, PrimitiveConstructor> = OptionResult<string, PrimitiveConstructor>> = (option: string, next: OptionsReaderNext, options: OptionsReaderState) => T | null;
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAA;AAE9C,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAEvE,oBAAY,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,IAC7C,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,GACzB,CAAC,CAAC,MAAM,CAAC,GACT,CAAC,CAAA;AAEP,oBAAY,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAExD,oBAAY,iBAAiB,GAC3B,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CACnC,CAAC,SAAS,IAAI,GACV,MAAM,GACN,MAAM,GAAG,SAAS,CACvB,CAAA;AAEH,oBAAY,oBAAoB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,CAAA;AAEhH,oBAAY,eAAe,CAAC,CAAC,SAAS,oBAAoB,IACxD,CAAC,SAAS,iBAAiB,GACvB,MAAM,GACN,CAAC,SAAS,iBAAiB,GACzB,MAAM,GACN,CAAC,SAAS,gBAAgB,GACxB,MAAM,EAAE,GACR,OAAO,CAAA;AAEjB,oBAAY,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,oBAAoB,IAAI,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1G,oBAAY,YAAY,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,IACxH,CACE,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,kBAAkB,KACxB,CAAC,GAAG,IAAI,CAAA"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ArgRef } from './types';
|
|
2
|
+
declare type FlatMerge<T> = T extends infer U ? {
|
|
3
|
+
[K in keyof U]: U[K];
|
|
4
|
+
} : never;
|
|
5
|
+
export declare type Merge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R] ? FlatMerge<NonNullable<L> & Merge<R>> : unknown;
|
|
6
|
+
export declare type UnionMerge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R] ? L | Merge<R> : any;
|
|
7
|
+
declare type AnyFunction = (...args: any[]) => any;
|
|
8
|
+
export declare type ReturnTypes<T extends readonly [...AnyFunction[]]> = T extends [infer L, ...infer R] ? L extends AnyFunction ? R extends AnyFunction[] ? [ReturnType<L>, ...ReturnTypes<R>] : [] : [] : [];
|
|
9
|
+
/**
|
|
10
|
+
* Match reference with argument.
|
|
11
|
+
* @param argRef
|
|
12
|
+
* @param arg
|
|
13
|
+
* @returns Full name or null.
|
|
14
|
+
*/
|
|
15
|
+
export declare function matchArgName<T extends string>(argRef: ArgRef<T>, arg: string): T | null;
|
|
16
|
+
/**
|
|
17
|
+
* Find full argument name in references.
|
|
18
|
+
* @param argRefs
|
|
19
|
+
* @param arg
|
|
20
|
+
* @returns Found argument's full name or null.
|
|
21
|
+
*/
|
|
22
|
+
export declare function findArgName<T extends string>(argRefs: [...ArgRef<T>[]], arg: string): T | null;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC,aAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAA;AAExE,oBAAY,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAClF,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GACpC,OAAO,CAAA;AAEX,oBAAY,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GACvF,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAEZ,GAAG,CAAA;AAGP,aAAK,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;AAE1C,oBAAY,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAC5F,CAAC,SAAS,WAAW,GACnB,CAAC,SAAS,WAAW,EAAE,GACrB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAClC,EAAE,GACJ,EAAE,GACJ,EAAE,CAAA;AAEN;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,YAc5E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,YAanF"}
|
package/package.json
CHANGED
|
@@ -1,67 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "argue-cli",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "2.0.0-0",
|
|
5
|
+
"description": "A thin and strongly typed CLI argument parser for Node.js.",
|
|
5
6
|
"author": "dangreen",
|
|
6
7
|
"license": "MIT",
|
|
7
8
|
"repository": {
|
|
8
9
|
"type": "git",
|
|
9
|
-
"url": "
|
|
10
|
+
"url": "https://github.com/TrigenSoftware/Argue.git"
|
|
10
11
|
},
|
|
11
12
|
"bugs": {
|
|
12
13
|
"url": "https://github.com/TrigenSoftware/Argue/issues"
|
|
13
14
|
},
|
|
14
|
-
"main": "
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
15
|
+
"main": "./src/index.ts",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"main": "./dist/index.cjs",
|
|
19
|
+
"module": "./dist/index.js",
|
|
20
|
+
"exports": {
|
|
21
|
+
"import": {
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"require": {
|
|
25
|
+
"default": "./dist/index.cjs"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"directory": "package"
|
|
18
29
|
},
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"test": "npm run lint && nyc mocha -b",
|
|
22
|
-
"build": "rollup -c",
|
|
23
|
-
"watch": "rollup -c -w",
|
|
24
|
-
"coverage": "nyc report --reporter=text-lcov | coveralls",
|
|
25
|
-
"prepublishOnly": "npm run build"
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=14.0.0"
|
|
26
32
|
},
|
|
27
33
|
"keywords": [
|
|
28
|
-
"strict",
|
|
29
34
|
"cli",
|
|
30
35
|
"arguments",
|
|
31
36
|
"parser",
|
|
32
37
|
"console",
|
|
33
38
|
"terminal"
|
|
34
39
|
],
|
|
35
|
-
"devDependencies": {
|
|
36
|
-
"babel-core": "^6.26.0",
|
|
37
|
-
"babel-preset-env": "^1.6.1",
|
|
38
|
-
"babel-preset-stage-0": "^6.24.1",
|
|
39
|
-
"babel-register": "^6.26.0",
|
|
40
|
-
"coveralls": "^3.0.0",
|
|
41
|
-
"escope": "^3.6.0",
|
|
42
|
-
"eslint": "^6.1.0",
|
|
43
|
-
"eslint-config-trigen": "^2.3.1",
|
|
44
|
-
"mocha": "^4.0.1",
|
|
45
|
-
"nyc": "^11.4.1",
|
|
46
|
-
"rollup": "^0.53.0",
|
|
47
|
-
"rollup-plugin-babel": "^3.0.3",
|
|
48
|
-
"rollup-plugin-eslint": "^4.0.0",
|
|
49
|
-
"should": "^13.1.3"
|
|
50
|
-
},
|
|
51
|
-
"babel": {
|
|
52
|
-
"presets": [
|
|
53
|
-
[
|
|
54
|
-
"env",
|
|
55
|
-
{
|
|
56
|
-
"targets": {
|
|
57
|
-
"node": "6"
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
],
|
|
61
|
-
"stage-0"
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
40
|
"files": [
|
|
65
|
-
"
|
|
66
|
-
]
|
|
41
|
+
"dist"
|
|
42
|
+
],
|
|
43
|
+
"readme": "",
|
|
44
|
+
"scripts": {
|
|
45
|
+
"postpublish": "del ./package"
|
|
46
|
+
}
|
|
67
47
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
6
|
-
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [1.2.0] - 2017-12-26
|
|
9
|
-
### Changed
|
|
10
|
-
- `babel-cli` -> `Rollup`
|
package/lib/index.d.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
export declare const argv: string[];
|
|
2
|
-
export declare function setArguments(...newArguments: any[]): void;
|
|
3
|
-
/**
|
|
4
|
-
* Strict expectation one of given commands.
|
|
5
|
-
*
|
|
6
|
-
* command-line-app install
|
|
7
|
-
*
|
|
8
|
-
* expect(
|
|
9
|
-
* {"install": "i"}, - fullname and shirtname
|
|
10
|
-
* ["update", "u"], - also fullname and shirtname
|
|
11
|
-
* "info" - only one variant of name
|
|
12
|
-
* )
|
|
13
|
-
*
|
|
14
|
-
* @param {...Object} names array of expected tokens
|
|
15
|
-
* @return {String} fullname
|
|
16
|
-
*/
|
|
17
|
-
export declare function expect(...names: any[]): string;
|
|
18
|
-
/**
|
|
19
|
-
* Strict reading of argument.
|
|
20
|
-
*
|
|
21
|
-
* command-line-app some-value
|
|
22
|
-
*
|
|
23
|
-
* @return {String} argument
|
|
24
|
-
*/
|
|
25
|
-
export declare function read(): string;
|
|
26
|
-
/**
|
|
27
|
-
* Strict expectation of end.
|
|
28
|
-
* @returns {void}
|
|
29
|
-
*/
|
|
30
|
-
export declare function end(): void;
|
|
31
|
-
/**
|
|
32
|
-
* Strict reading of flags and options.
|
|
33
|
-
*
|
|
34
|
-
* command-line-app --output test -p es2015,react --verbose
|
|
35
|
-
*
|
|
36
|
-
* strictOptions([
|
|
37
|
-
* ["another"] - for flags array is same as object notation
|
|
38
|
-
* "verbose" - only one variant of name
|
|
39
|
-
* ], [
|
|
40
|
-
* {"output": "o"}, - fullname and shirtname
|
|
41
|
-
* ["plugins", "p"] - fullname and shirtname for array
|
|
42
|
-
* ])
|
|
43
|
-
*
|
|
44
|
-
* @param {...Object} flagsNames array of tokens
|
|
45
|
-
* @param {...Object} optionsNames array of tokens
|
|
46
|
-
* @return {Object} fullname-value pairs
|
|
47
|
-
*/
|
|
48
|
-
export declare function strictOptions(flagsNames: any, optionsNames: any): {};
|
|
49
|
-
/**
|
|
50
|
-
* Strict reading of options with equal sign.
|
|
51
|
-
* If option is provided without value it will interpreted as `true`.
|
|
52
|
-
*
|
|
53
|
-
* command-line-app --output=test -p=es2015,react --verbose
|
|
54
|
-
*
|
|
55
|
-
* strictOptionsEqual(
|
|
56
|
-
* {"output": "o"}, - fullname and shirtname
|
|
57
|
-
* ["plugins", "p"], - fullname and shirtname for array
|
|
58
|
-
* "verbose" - only one variant of name
|
|
59
|
-
* )
|
|
60
|
-
*
|
|
61
|
-
* @param {...Object} names array of tokens
|
|
62
|
-
* @return {Object} fullname-value pairs
|
|
63
|
-
*/
|
|
64
|
-
export declare function strictOptionsEqual(...names: any[]): {};
|
|
65
|
-
/**
|
|
66
|
-
* Unlimited reading of flags and options.
|
|
67
|
-
*
|
|
68
|
-
* command-line-app --output test install -p es2015,react babel --verbose
|
|
69
|
-
*
|
|
70
|
-
* options([
|
|
71
|
-
* ["another"] - for flags array is same as object notation
|
|
72
|
-
* "verbose" - only one variant of name
|
|
73
|
-
* ], [
|
|
74
|
-
* {"output": "o"}, - fullname and shirtname
|
|
75
|
-
* ["plugins", "p"] - fullname and shirtname for array
|
|
76
|
-
* ])
|
|
77
|
-
*
|
|
78
|
-
* @param {...Object} flagsNames array of tokens
|
|
79
|
-
* @param {...Object} optionsNames array of tokens
|
|
80
|
-
* @return {Object} fullname-value pairs
|
|
81
|
-
*/
|
|
82
|
-
export declare function options(flagsNames: any, optionsNames: any): {};
|
|
83
|
-
/**
|
|
84
|
-
* Unlimited reading of with equal sign.
|
|
85
|
-
* If option is provided without value it will interpreted as `true`.
|
|
86
|
-
*
|
|
87
|
-
* command-line-app --output=test install -p=es2015,react babel --verbose
|
|
88
|
-
*
|
|
89
|
-
* optionsEqual(
|
|
90
|
-
* {"output": "o"}, - fullname and shirtname
|
|
91
|
-
* ["plugins", "p"], - fullname and shirtname for array
|
|
92
|
-
* "verbose" - only one variant of name
|
|
93
|
-
* )
|
|
94
|
-
*
|
|
95
|
-
* @param {...Object} names array of tokens
|
|
96
|
-
* @return {Object} fullname-value pairs
|
|
97
|
-
*/
|
|
98
|
-
export declare function optionsEqual(...names: any[]): {};
|