argue-cli 2.0.0-1 → 2.0.0-2
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/args.d.ts +2 -2
- package/dist/index.cjs +26 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +26 -11
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/args.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AliasArgRef, ArgRef, PrimitiveConstructor, OptionsReaderState,
|
|
1
|
+
import { AliasArgRef, ArgRef, PrimitiveConstructor, OptionsReaderState, OptionsReaderRead, OptionResult } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Describe argument with aliases.
|
|
4
4
|
* @param name - Main name.
|
|
@@ -13,5 +13,5 @@ export declare function alias<T extends string>(name: T, alias: string, ...restA
|
|
|
13
13
|
* @param type - Value type.
|
|
14
14
|
* @returns Option reader.
|
|
15
15
|
*/
|
|
16
|
-
export declare function option<T extends string, K extends PrimitiveConstructor>(argRef: ArgRef<T>, type: K): (option: string,
|
|
16
|
+
export declare function option<T extends string, K extends PrimitiveConstructor>(argRef: ArgRef<T>, type: K): (option: string, read: OptionsReaderRead, options: OptionsReaderState) => OptionResult<T, K> | null;
|
|
17
17
|
//# sourceMappingURL=args.d.ts.map
|
package/dist/index.cjs
CHANGED
|
@@ -105,33 +105,33 @@ const ARGV_START_INDEX = 2;
|
|
|
105
105
|
* @returns Option reader.
|
|
106
106
|
*/ function option(argRef, type) {
|
|
107
107
|
if (type === String) {
|
|
108
|
-
return (option1,
|
|
108
|
+
return (option1, read)=>{
|
|
109
109
|
const argName = matchArgName(argRef, option1);
|
|
110
110
|
if (argName) {
|
|
111
111
|
return {
|
|
112
|
-
[argName]:
|
|
112
|
+
[argName]: read()
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
return null;
|
|
116
116
|
};
|
|
117
117
|
}
|
|
118
118
|
if (type === Number) {
|
|
119
|
-
return (option2,
|
|
119
|
+
return (option2, read)=>{
|
|
120
120
|
const argName = matchArgName(argRef, option2);
|
|
121
121
|
if (argName) {
|
|
122
122
|
return {
|
|
123
|
-
[argName]: parseFloat(
|
|
123
|
+
[argName]: parseFloat(read())
|
|
124
124
|
};
|
|
125
125
|
}
|
|
126
126
|
return null;
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
129
|
if (type === Array) {
|
|
130
|
-
return (option3,
|
|
130
|
+
return (option3, read, options)=>{
|
|
131
131
|
const argName = matchArgName(argRef, option3);
|
|
132
132
|
if (argName) {
|
|
133
133
|
const prevValues = options[argName];
|
|
134
|
-
const values =
|
|
134
|
+
const values = read().split(',');
|
|
135
135
|
return {
|
|
136
136
|
[argName]: Array.isArray(prevValues) ? prevValues.concat(values) : values
|
|
137
137
|
};
|
|
@@ -162,7 +162,7 @@ function createOptionReader(optionReaders) {
|
|
|
162
162
|
return readOption;
|
|
163
163
|
}
|
|
164
164
|
var ref;
|
|
165
|
-
return (option,
|
|
165
|
+
return (option, read, options)=>(ref = readOption(option, read, options)) !== null && ref !== void 0 ? ref : readNextOption(option, read, options)
|
|
166
166
|
;
|
|
167
167
|
}, null);
|
|
168
168
|
return optionReader;
|
|
@@ -172,16 +172,27 @@ function createOptionReader(optionReaders) {
|
|
|
172
172
|
* @param optionReaders
|
|
173
173
|
* @returns Options with values.
|
|
174
174
|
*/ function readOptions(...optionReaders) {
|
|
175
|
-
if (!argv.length
|
|
175
|
+
if (!argv.length) {
|
|
176
176
|
return {};
|
|
177
177
|
}
|
|
178
178
|
const readOption = createOptionReader(optionReaders);
|
|
179
|
+
if (!readOption) {
|
|
180
|
+
return {};
|
|
181
|
+
}
|
|
179
182
|
const options = {};
|
|
180
183
|
let i = 0;
|
|
181
184
|
let arg = argv[i];
|
|
182
|
-
|
|
185
|
+
let optionResult;
|
|
186
|
+
const next = ()=>{
|
|
183
187
|
arg = argv[++i];
|
|
184
|
-
|
|
188
|
+
};
|
|
189
|
+
const remove = ()=>{
|
|
190
|
+
argv.splice(i--, 1);
|
|
191
|
+
};
|
|
192
|
+
const read = ()=>{
|
|
193
|
+
next();
|
|
194
|
+
remove();
|
|
195
|
+
if (!arg) {
|
|
185
196
|
throw new Error('Unexpected end of arguments');
|
|
186
197
|
}
|
|
187
198
|
return arg;
|
|
@@ -189,7 +200,11 @@ function createOptionReader(optionReaders) {
|
|
|
189
200
|
// eslint-disable-next-line no-unmodified-loop-condition
|
|
190
201
|
while(arg){
|
|
191
202
|
if (isOption(arg)) {
|
|
192
|
-
|
|
203
|
+
optionResult = readOption(removePrefix(arg), read, options);
|
|
204
|
+
if (optionResult) {
|
|
205
|
+
remove();
|
|
206
|
+
Object.assign(options, optionResult);
|
|
207
|
+
}
|
|
193
208
|
}
|
|
194
209
|
next();
|
|
195
210
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","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 OptionsReaderRead,\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, read: OptionsReaderRead) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: read()\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Number) {\n return (option: string, read: OptionsReaderRead) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: parseFloat(read())\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Array) {\n return (option: string, read: OptionsReaderRead, options: OptionsReaderState) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n const prevValues = options[argName]\n const values = read().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, OptionResult } 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, read, options) => readOption(option, read, options) ?? readNextOption(option, read, 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) {\n return {}\n }\n\n const readOption = createOptionReader(optionReaders)\n\n if (!readOption) {\n return {}\n }\n\n const options = {}\n let i = 0\n let arg = argv[i]\n let optionResult: OptionResult | null\n const next = () => {\n arg = argv[++i]\n }\n const remove = () => {\n argv.splice(i--, 1)\n }\n const read = () => {\n next()\n remove()\n\n if (!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 optionResult = readOption(removePrefix(arg), read, options)\n\n if (optionResult) {\n remove()\n Object.assign(options, optionResult)\n }\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","Number","parseFloat","Array","options","prevValues","values","split","isArray","concat","isOption","test","removePrefix","replace","createOptionReader","optionReaders","optionReader","reduceRight","readNextOption","readOption","readOptions","i","optionResult","next","remove","Object","assign"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -101,33 +101,33 @@ const ARGV_START_INDEX = 2;
|
|
|
101
101
|
* @returns Option reader.
|
|
102
102
|
*/ function option(argRef, type) {
|
|
103
103
|
if (type === String) {
|
|
104
|
-
return (option1,
|
|
104
|
+
return (option1, read)=>{
|
|
105
105
|
const argName = matchArgName(argRef, option1);
|
|
106
106
|
if (argName) {
|
|
107
107
|
return {
|
|
108
|
-
[argName]:
|
|
108
|
+
[argName]: read()
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
111
|
return null;
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
if (type === Number) {
|
|
115
|
-
return (option2,
|
|
115
|
+
return (option2, read)=>{
|
|
116
116
|
const argName = matchArgName(argRef, option2);
|
|
117
117
|
if (argName) {
|
|
118
118
|
return {
|
|
119
|
-
[argName]: parseFloat(
|
|
119
|
+
[argName]: parseFloat(read())
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
return null;
|
|
123
123
|
};
|
|
124
124
|
}
|
|
125
125
|
if (type === Array) {
|
|
126
|
-
return (option3,
|
|
126
|
+
return (option3, read, options)=>{
|
|
127
127
|
const argName = matchArgName(argRef, option3);
|
|
128
128
|
if (argName) {
|
|
129
129
|
const prevValues = options[argName];
|
|
130
|
-
const values =
|
|
130
|
+
const values = read().split(',');
|
|
131
131
|
return {
|
|
132
132
|
[argName]: Array.isArray(prevValues) ? prevValues.concat(values) : values
|
|
133
133
|
};
|
|
@@ -157,7 +157,7 @@ function createOptionReader(optionReaders) {
|
|
|
157
157
|
if (!readNextOption) {
|
|
158
158
|
return readOption;
|
|
159
159
|
}
|
|
160
|
-
return (option,
|
|
160
|
+
return (option, read, options)=>readOption(option, read, options) ?? readNextOption(option, read, options)
|
|
161
161
|
;
|
|
162
162
|
}, null);
|
|
163
163
|
return optionReader;
|
|
@@ -167,16 +167,27 @@ function createOptionReader(optionReaders) {
|
|
|
167
167
|
* @param optionReaders
|
|
168
168
|
* @returns Options with values.
|
|
169
169
|
*/ function readOptions(...optionReaders) {
|
|
170
|
-
if (!argv.length
|
|
170
|
+
if (!argv.length) {
|
|
171
171
|
return {};
|
|
172
172
|
}
|
|
173
173
|
const readOption = createOptionReader(optionReaders);
|
|
174
|
+
if (!readOption) {
|
|
175
|
+
return {};
|
|
176
|
+
}
|
|
174
177
|
const options = {};
|
|
175
178
|
let i = 0;
|
|
176
179
|
let arg = argv[i];
|
|
177
|
-
|
|
180
|
+
let optionResult;
|
|
181
|
+
const next = ()=>{
|
|
178
182
|
arg = argv[++i];
|
|
179
|
-
|
|
183
|
+
};
|
|
184
|
+
const remove = ()=>{
|
|
185
|
+
argv.splice(i--, 1);
|
|
186
|
+
};
|
|
187
|
+
const read = ()=>{
|
|
188
|
+
next();
|
|
189
|
+
remove();
|
|
190
|
+
if (!arg) {
|
|
180
191
|
throw new Error('Unexpected end of arguments');
|
|
181
192
|
}
|
|
182
193
|
return arg;
|
|
@@ -184,7 +195,11 @@ function createOptionReader(optionReaders) {
|
|
|
184
195
|
// eslint-disable-next-line no-unmodified-loop-condition
|
|
185
196
|
while(arg){
|
|
186
197
|
if (isOption(arg)) {
|
|
187
|
-
|
|
198
|
+
optionResult = readOption(removePrefix(arg), read, options);
|
|
199
|
+
if (optionResult) {
|
|
200
|
+
remove();
|
|
201
|
+
Object.assign(options, optionResult);
|
|
202
|
+
}
|
|
188
203
|
}
|
|
189
204
|
next();
|
|
190
205
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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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"}
|
|
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 OptionsReaderRead,\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, read: OptionsReaderRead) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: read()\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Number) {\n return (option: string, read: OptionsReaderRead) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: parseFloat(read())\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Array) {\n return (option: string, read: OptionsReaderRead, options: OptionsReaderState) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n const prevValues = options[argName]\n const values = read().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, OptionResult } 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, read, options) => readOption(option, read, options) ?? readNextOption(option, read, 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) {\n return {}\n }\n\n const readOption = createOptionReader(optionReaders)\n\n if (!readOption) {\n return {}\n }\n\n const options = {}\n let i = 0\n let arg = argv[i]\n let optionResult: OptionResult | null\n const next = () => {\n arg = argv[++i]\n }\n const remove = () => {\n argv.splice(i--, 1)\n }\n const read = () => {\n next()\n remove()\n\n if (!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 optionResult = readOption(removePrefix(arg), read, options)\n\n if (optionResult) {\n remove()\n Object.assign(options, optionResult)\n }\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","Number","parseFloat","Array","options","prevValues","values","split","isArray","concat","isOption","test","removePrefix","replace","createOptionReader","optionReaders","optionReader","reduceRight","readNextOption","readOption","readOptions","i","optionResult","next","remove","Object","assign"],"mappings":"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"}
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAA;AACpD,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,CA+C9G"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,9 +6,9 @@ export interface AliasArgRef<T extends string> {
|
|
|
6
6
|
export declare type ArgRef<T extends string> = SimpleArgRef<T> | AliasArgRef<T>;
|
|
7
7
|
export declare type ArgRefName<T extends ArgRef<string>> = T extends AliasArgRef<string> ? T['name'] : T;
|
|
8
8
|
export declare type OptionsReaderState = Record<string, unknown>;
|
|
9
|
-
export declare type
|
|
9
|
+
export declare type OptionsReaderRead = () => string;
|
|
10
10
|
export declare type PrimitiveConstructor = StringConstructor | NumberConstructor | ArrayConstructor | BooleanConstructor;
|
|
11
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
|
|
12
|
+
export declare type OptionResult<T extends string = string, K extends PrimitiveConstructor = PrimitiveConstructor> = Record<T, OptionValueType<K>>;
|
|
13
|
+
export declare type OptionReader<T extends OptionResult = OptionResult> = (option: string, read: OptionsReaderRead, options: OptionsReaderState) => T | null;
|
|
14
14
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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,GAAG,MAAM,MAAM,CAAA;AAE5C,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,GAAG,MAAM,EAAE,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,IAAI,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1I,oBAAY,YAAY,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAC5D,CACE,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,kBAAkB,KACxB,CAAC,GAAG,IAAI,CAAA"}
|