summaryrefslogtreecommitdiff
path: root/flags
diff options
context:
space:
mode:
Diffstat (limited to 'flags')
-rw-r--r--flags/mod.ts92
-rwxr-xr-xflags/tests/bool.ts3
-rwxr-xr-xflags/tests/parse.ts4
-rwxr-xr-xflags/tests/unknown.ts22
4 files changed, 60 insertions, 61 deletions
diff --git a/flags/mod.ts b/flags/mod.ts
index 2b91c2775..0c0702e8b 100644
--- a/flags/mod.ts
+++ b/flags/mod.ts
@@ -1,12 +1,12 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
export interface ArgParsingOptions {
unknown?: Function;
- boolean?: Boolean | string | string[];
+ boolean?: boolean | string | string[];
alias?: { [key: string]: string | string[] };
string?: string | string[];
- default?: { [key: string]: any };
- "--"?: Boolean;
- stopEarly?: Boolean;
+ default?: { [key: string]: any }; // eslint-disable-line @typescript-eslint/no-explicit-any
+ "--"?: boolean;
+ stopEarly?: boolean;
}
const DEFAULT_OPTIONS = {
@@ -19,10 +19,27 @@ const DEFAULT_OPTIONS = {
stopEarly: false
};
+function isNumber(x: unknown): boolean {
+ if (typeof x === "number") return true;
+ if (/^0x[0-9a-f]+$/i.test(String(x))) return true;
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(String(x));
+}
+
+function hasKey(obj, keys): boolean {
+ let o = obj;
+ keys.slice(0, -1).forEach(function(key) {
+ o = o[key] || {};
+ });
+
+ const key = keys[keys.length - 1];
+ return key in o;
+}
+
export function parse(
args,
initialOptions?: ArgParsingOptions
): { [key: string]: any } {
+ // eslint-disable-line @typescript-eslint/no-explicit-any
const options: ArgParsingOptions = {
...DEFAULT_OPTIONS,
...(initialOptions || {})
@@ -72,18 +89,8 @@ export function parse(
const defaults = options.default!;
const argv = { _: [] };
- Object.keys(flags.bools).forEach(function(key) {
- setArg(key, defaults[key] === undefined ? false : defaults[key]);
- });
-
- let notFlags = [];
-
- if (args.indexOf("--") !== -1) {
- notFlags = args.slice(args.indexOf("--") + 1);
- args = args.slice(0, args.indexOf("--"));
- }
- function argDefined(key, arg) {
+ function argDefined(key, arg): boolean {
return (
(flags.allBools && /^--[^=]+$/.test(arg)) ||
flags.strings[key] ||
@@ -92,19 +99,6 @@ export function parse(
);
}
- function setArg(key, val, arg = null): void {
- if (arg && flags.unknownFn && !argDefined(key, arg)) {
- if (flags.unknownFn(arg) === false) return;
- }
-
- const value = !flags.strings[key] && isNumber(val) ? Number(val) : val;
- setKey(argv, key.split("."), value);
-
- (aliases[key] || []).forEach(function(x) {
- setKey(argv, x.split("."), value);
- });
- }
-
function setKey(obj, keys, value): void {
let o = obj;
keys.slice(0, -1).forEach(function(key) {
@@ -126,12 +120,36 @@ export function parse(
}
}
+ function setArg(key, val, arg = null): void {
+ if (arg && flags.unknownFn && !argDefined(key, arg)) {
+ if (flags.unknownFn(arg) === false) return;
+ }
+
+ const value = !flags.strings[key] && isNumber(val) ? Number(val) : val;
+ setKey(argv, key.split("."), value);
+
+ (aliases[key] || []).forEach(function(x) {
+ setKey(argv, x.split("."), value);
+ });
+ }
+
function aliasIsBoolean(key): boolean {
return aliases[key].some(function(x) {
return flags.bools[x];
});
}
+ Object.keys(flags.bools).forEach(function(key) {
+ setArg(key, defaults[key] === undefined ? false : defaults[key]);
+ });
+
+ let notFlags = [];
+
+ if (args.indexOf("--") !== -1) {
+ notFlags = args.slice(args.indexOf("--") + 1);
+ args = args.slice(0, args.indexOf("--"));
+ }
+
for (let i = 0; i < args.length; i++) {
const arg = args[i];
@@ -242,7 +260,7 @@ export function parse(
});
if (options["--"]) {
- argv["--"] = new Array();
+ argv["--"] = [];
notFlags.forEach(function(key) {
argv["--"].push(key);
});
@@ -254,19 +272,3 @@ export function parse(
return argv;
}
-
-function hasKey(obj, keys) {
- let o = obj;
- keys.slice(0, -1).forEach(function(key) {
- o = o[key] || {};
- });
-
- const key = keys[keys.length - 1];
- return key in o;
-}
-
-function isNumber(x: any): boolean {
- if (typeof x === "number") return true;
- if (/^0x[0-9a-f]+$/i.test(x)) return true;
- return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
-}
diff --git a/flags/tests/bool.ts b/flags/tests/bool.ts
index 321dbb1e9..bffb1fd34 100755
--- a/flags/tests/bool.ts
+++ b/flags/tests/bool.ts
@@ -39,9 +39,6 @@ test(function booleanGroups() {
test(function booleanAndAliasWithChainableApi() {
const aliased = ["-h", "derp"];
const regular = ["--herp", "derp"];
- const opts = {
- herp: { alias: "h", boolean: true }
- };
const aliasedArgv = parse(aliased, {
boolean: "herp",
alias: { h: "herp" }
diff --git a/flags/tests/parse.ts b/flags/tests/parse.ts
index 73bdb7c3b..a37cd4c63 100755
--- a/flags/tests/parse.ts
+++ b/flags/tests/parse.ts
@@ -178,7 +178,7 @@ test(function nestedDottedObjects() {
"4",
"--foo.quux.quibble",
"5",
- "--foo.quux.o_O",
+ "--foo.quux.oO",
"--beep.boop"
]);
@@ -187,7 +187,7 @@ test(function nestedDottedObjects() {
baz: 4,
quux: {
quibble: 5,
- o_O: true
+ oO: true
}
});
assertEquals(argv.beep, { boop: true });
diff --git a/flags/tests/unknown.ts b/flags/tests/unknown.ts
index 986bc29d8..cd944746f 100755
--- a/flags/tests/unknown.ts
+++ b/flags/tests/unknown.ts
@@ -5,7 +5,7 @@ import { parse } from "../mod.ts";
test(function booleanAndAliasIsNotUnknown() {
const unknown = [];
- function unknownFn(arg) {
+ function unknownFn(arg): boolean {
unknown.push(arg);
return false;
}
@@ -16,15 +16,15 @@ test(function booleanAndAliasIsNotUnknown() {
boolean: "h",
unknown: unknownFn
};
- const aliasedArgv = parse(aliased, opts);
- const propertyArgv = parse(regular, opts);
+ parse(aliased, opts);
+ parse(regular, opts);
assertEquals(unknown, ["--derp", "-d"]);
});
test(function flagBooleanTrueAnyDoubleHyphenArgumentIsNotUnknown() {
const unknown = [];
- function unknownFn(arg) {
+ function unknownFn(arg): boolean {
unknown.push(arg);
return false;
}
@@ -41,7 +41,7 @@ test(function flagBooleanTrueAnyDoubleHyphenArgumentIsNotUnknown() {
test(function stringAndAliasIsNotUnkown() {
const unknown = [];
- function unknownFn(arg) {
+ function unknownFn(arg): boolean {
unknown.push(arg);
return false;
}
@@ -52,15 +52,15 @@ test(function stringAndAliasIsNotUnkown() {
string: "h",
unknown: unknownFn
};
- const aliasedArgv = parse(aliased, opts);
- const propertyArgv = parse(regular, opts);
+ parse(aliased, opts);
+ parse(regular, opts);
assertEquals(unknown, ["--derp", "-d"]);
});
test(function defaultAndAliasIsNotUnknown() {
const unknown = [];
- function unknownFn(arg) {
+ function unknownFn(arg): boolean {
unknown.push(arg);
return false;
}
@@ -71,15 +71,15 @@ test(function defaultAndAliasIsNotUnknown() {
alias: { h: "herp" },
unknown: unknownFn
};
- const aliasedArgv = parse(aliased, opts);
- const propertyArgv = parse(regular, opts);
+ parse(aliased, opts);
+ parse(regular, opts);
assertEquals(unknown, []);
});
test(function valueFollowingDoubleHyphenIsNotUnknown() {
const unknown = [];
- function unknownFn(arg) {
+ function unknownFn(arg): boolean {
unknown.push(arg);
return false;
}