@oliversalzburg/js-utils 0.8.0 → 0.9.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/lib/cli/args.js +14 -7
- package/lib/cli/args.js.map +1 -1
- package/lib/cli/args.test.js +58 -0
- package/lib/cli/args.test.js.map +1 -1
- package/package.json +1 -1
package/lib/cli/args.js
CHANGED
|
@@ -4,12 +4,15 @@
|
|
|
4
4
|
* @param {boolean} expectUnlabeled - Is the command line expected to have
|
|
5
5
|
* at least one trailing argument that is not labeled?
|
|
6
6
|
*/
|
|
7
|
-
export const parseArgv = (argv, expectUnlabeled = false) => argv.slice(2).reduce((acc, _
|
|
7
|
+
export const parseArgv = (argv, expectUnlabeled = false) => argv.slice(2).reduce((acc, _) => {
|
|
8
8
|
let slot;
|
|
9
9
|
let value;
|
|
10
|
+
if (_ === "--") {
|
|
11
|
+
expectUnlabeled = true;
|
|
12
|
+
return acc;
|
|
13
|
+
}
|
|
10
14
|
if (!_.startsWith("--")) {
|
|
11
|
-
if (acc.prev === undefined ||
|
|
12
|
-
(expectUnlabeled && index === array.length - 1)) {
|
|
15
|
+
if (acc.prev === undefined || expectUnlabeled) {
|
|
13
16
|
slot = "";
|
|
14
17
|
}
|
|
15
18
|
else {
|
|
@@ -34,16 +37,20 @@ export const parseArgv = (argv, expectUnlabeled = false) => argv.slice(2).reduce
|
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
const argSlot = acc.args[slot];
|
|
40
|
+
if ((Array.isArray(argSlot) || typeof argSlot === "string") &&
|
|
41
|
+
value === true) {
|
|
42
|
+
return acc;
|
|
43
|
+
}
|
|
37
44
|
acc.args[slot] =
|
|
38
45
|
Array.isArray(argSlot) && typeof value === "string"
|
|
39
46
|
? [...argSlot, value]
|
|
40
47
|
: slot === "" && typeof value === "string"
|
|
41
48
|
? [value]
|
|
42
|
-
: typeof argSlot === "undefined" ||
|
|
43
|
-
typeof argSlot === "boolean" ||
|
|
44
|
-
typeof value === "boolean"
|
|
49
|
+
: typeof argSlot === "undefined" || typeof value === "boolean"
|
|
45
50
|
? value
|
|
46
|
-
:
|
|
51
|
+
: typeof argSlot === "boolean"
|
|
52
|
+
? value
|
|
53
|
+
: [...(Array.isArray(argSlot) ? argSlot : [argSlot]), value];
|
|
47
54
|
return acc;
|
|
48
55
|
}, { args: {} }).args;
|
|
49
56
|
//# sourceMappingURL=args.js.map
|
package/lib/cli/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../source/cli/args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,IAAmB,EACnB,eAAe,GAAG,KAAK,EAItB,EAAE,CACH,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../source/cli/args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,IAAmB,EACnB,eAAe,GAAG,KAAK,EAItB,EAAE,CACH,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;IACV,IAAI,IAAY,CAAC;IACjB,IAAI,KAAoB,CAAC;IAEzB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAChB,eAAe,GAAG,IAAI,CAAC;QACvB,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,eAAe,EAAE,CAAC;YAC/C,IAAI,GAAG,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACP,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YAChB,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,CAAC;QACD,KAAK,GAAG,CAAC,CAAC;IACX,CAAC;SAAM,CAAC;QACP,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/C,KAAK;YACJ,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;gBAClE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;gBACpB,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IACC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC;QACvD,KAAK,KAAK,IAAI,EACb,CAAC;QACF,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACb,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAClD,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;YACrB,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACzC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACT,CAAC,CAAC,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,SAAS;oBAC7D,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,OAAO,OAAO,KAAK,SAAS;wBAC7B,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAElE,OAAO,GAAG,CAAC;AACZ,CAAC,EACD,EAAE,IAAI,EAAE,EAAE,EAMT,CACD,CAAC,IAAI,CAAC"}
|
package/lib/cli/args.test.js
CHANGED
|
@@ -28,4 +28,62 @@ it("parses parameters using ' '", () => {
|
|
|
28
28
|
yes: "true",
|
|
29
29
|
});
|
|
30
30
|
});
|
|
31
|
+
it("aggregates multiple occurrences of the same parameter", () => {
|
|
32
|
+
assert.deepStrictEqual(parseArgv(["node", "script.js", "--lang", "de", "--lang", "en"]), {
|
|
33
|
+
lang: ["de", "en"],
|
|
34
|
+
});
|
|
35
|
+
assert.deepStrictEqual(parseArgv([
|
|
36
|
+
"node",
|
|
37
|
+
"script.js",
|
|
38
|
+
"--lang",
|
|
39
|
+
"de",
|
|
40
|
+
"--lang",
|
|
41
|
+
"en",
|
|
42
|
+
"filename.ext",
|
|
43
|
+
]), {
|
|
44
|
+
"": ["filename.ext"],
|
|
45
|
+
lang: ["de", "en"],
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
it("aggregates multiple unlabeled parameters", () => {
|
|
49
|
+
assert.deepStrictEqual(parseArgv(["node", "script.js", "filename.ext", "otherfile.ext"]), {
|
|
50
|
+
"": ["filename.ext", "otherfile.ext"],
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* Passing multiple unlabeled arguments requires a -- for separation in some cases.
|
|
55
|
+
* It's usually best to use it consistently to distinguish these types of arguments.
|
|
56
|
+
*/
|
|
57
|
+
it("parses multiple unlabeled trailing arguments", () => {
|
|
58
|
+
assert.deepStrictEqual(parseArgv(["node", "script.js", "--yes"]), {
|
|
59
|
+
yes: true,
|
|
60
|
+
});
|
|
61
|
+
assert.deepStrictEqual(parseArgv(["node", "script.js", "--yes", "--", "filename.ext"], true), {
|
|
62
|
+
"": ["filename.ext"],
|
|
63
|
+
yes: true,
|
|
64
|
+
});
|
|
65
|
+
assert.deepStrictEqual(parseArgv([
|
|
66
|
+
"node",
|
|
67
|
+
"script.js",
|
|
68
|
+
"--yes",
|
|
69
|
+
"--",
|
|
70
|
+
"filename.ext",
|
|
71
|
+
"otherfile.ext",
|
|
72
|
+
]), {
|
|
73
|
+
"": ["filename.ext", "otherfile.ext"],
|
|
74
|
+
yes: true,
|
|
75
|
+
});
|
|
76
|
+
assert.deepStrictEqual(parseArgv([
|
|
77
|
+
"node",
|
|
78
|
+
"script.js",
|
|
79
|
+
"--yes",
|
|
80
|
+
"--",
|
|
81
|
+
"filename.ext",
|
|
82
|
+
"otherfile.ext",
|
|
83
|
+
"directory",
|
|
84
|
+
]), {
|
|
85
|
+
"": ["filename.ext", "otherfile.ext", "directory"],
|
|
86
|
+
yes: true,
|
|
87
|
+
});
|
|
88
|
+
});
|
|
31
89
|
//# sourceMappingURL=args.test.js.map
|
package/lib/cli/args.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.test.js","sourceRoot":"","sources":["../../source/cli/args.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACpC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE;QACjE,GAAG,EAAE,IAAI;KACT,CAAC,CAAC;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,EAC/D;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,GAAG,EAAE,IAAI;KACT,CACD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACtC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,EAAE;QACtE,GAAG,EAAE,MAAM;KACX,CAAC,CAAC;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,EAC9D;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,GAAG,EAAE,MAAM;KACX,CACD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACtC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE;QACzE,GAAG,EAAE,MAAM;KACX,CAAC,CAAC;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,EACjE;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,GAAG,EAAE,MAAM;KACX,CACD,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"args.test.js","sourceRoot":"","sources":["../../source/cli/args.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACpC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE;QACjE,GAAG,EAAE,IAAI;KACT,CAAC,CAAC;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,EAC/D;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,GAAG,EAAE,IAAI;KACT,CACD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACtC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,EAAE;QACtE,GAAG,EAAE,MAAM;KACX,CAAC,CAAC;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,EAC9D;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,GAAG,EAAE,MAAM;KACX,CACD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACtC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE;QACzE,GAAG,EAAE,MAAM;KACX,CAAC,CAAC;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,EACjE;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,GAAG,EAAE,MAAM;KACX,CACD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;IAChE,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,EAChE;QACC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KAClB,CACD,CAAC;IACF,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC;QACT,MAAM;QACN,WAAW;QACX,QAAQ;QACR,IAAI;QACJ,QAAQ;QACR,IAAI;QACJ,cAAc;KACd,CAAC,EACF;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KAClB,CACD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACnD,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,EACjE;QACC,EAAE,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;KACrC,CACD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACvD,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE;QACjE,GAAG,EAAE,IAAI;KACT,CAAC,CAAC;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,EACrE;QACC,EAAE,EAAE,CAAC,cAAc,CAAC;QACpB,GAAG,EAAE,IAAI;KACT,CACD,CAAC;IACF,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC;QACT,MAAM;QACN,WAAW;QACX,OAAO;QACP,IAAI;QACJ,cAAc;QACd,eAAe;KACf,CAAC,EACF;QACC,EAAE,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;QACrC,GAAG,EAAE,IAAI;KACT,CACD,CAAC;IACF,MAAM,CAAC,eAAe,CACrB,SAAS,CAAC;QACT,MAAM;QACN,WAAW;QACX,OAAO;QACP,IAAI;QACJ,cAAc;QACd,eAAe;QACf,WAAW;KACX,CAAC,EACF;QACC,EAAE,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,WAAW,CAAC;QAClD,GAAG,EAAE,IAAI;KACT,CACD,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED