summaryrefslogtreecommitdiff
path: root/flags/mod.ts
diff options
context:
space:
mode:
Diffstat (limited to 'flags/mod.ts')
-rw-r--r--flags/mod.ts92
1 files changed, 47 insertions, 45 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);
-}