jackspeak 2.3.6 → 3.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/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +92 -83
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/package.json +3 -1
- package/dist/commonjs/parse-args-cjs.cjs.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +92 -83
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/package.json +3 -1
- package/dist/esm/parse-args.js.map +1 -1
- package/package.json +5 -4
- package/dist/commonjs/parse-args.d.ts.map +0 -1
- package/dist/commonjs/parse-args.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;AAExD;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAmB,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;AAExD;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAmB,MAAM,WAAW,CAAA;AA2DpE;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,IAC5D;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,GACxC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,GAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,OAAO,EAAE,GAC5C,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,GACzC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,GACzC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,OAAO,GAC3C,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,GACtD,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,EAAE,GACzD,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,GACtD,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAC9D,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,GACnE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAA;AAE/D;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,IAAI;IACtE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAA;IACtE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,CAAC,EAAE,CAAC,CAAA;CACT,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,GAC5D,CAAC,CAAC,SAAS,KAAK,GAAG,EAAE,GACnB;IAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAAA;AAE7D;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,IAAI;IACnE,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAC7C,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,IAC3B;KACD,UAAU,IAAI,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;CAChD,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,OAAO,IACrC,CAAC,SAAS,IAAI,GACZ;IACE,QAAQ,EAAE,IAAI,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,GACD,CAAC,SAAS,KAAK,GACf;IACE,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GACD;IACE,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAA;AAEL;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,IAAI;IACtE,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAC7C,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;AAEhB,eAAO,MAAM,YAAY,MAAO,MAAM,oBAEiB,CAAA;AAyCvD,eAAO,MAAM,cAAc,+CACtB,GAAG,QACA,CAAC,SACA,CAAC,gCAWc,CAAA;AAExB;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;CAC5D,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,IAAI;KAC/C,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,GACtE,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,GACxD,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,GACvD,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,GACxD,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,OAAO,GACzD,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,OAAO,EAAE,GAC1D,KAAK;CACR,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,SAAS,IAAI;IACxC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;IACzB,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAsLD;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAQ,SAAQ,GAAG;IAClC,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,EAAE,CAAA;IACT,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAID;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,IAAI,EAAE,aAAa,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,EAAE,CAAA;IACT,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAKD;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,WAAW,CAAA;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,OAAO,GACP;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;CAC7C,CAAA;AAEL;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IAEzC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;;GAGG;AACH,qBAAa,IAAI,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE;;gBAW5B,OAAO,GAAE,WAAgB;IAarC;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,SAAK;IA6BtD;;;;;;;;;;OAUG;IACH,KAAK,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,MAAM,CAAC,CAAC,CAAC;IAoK/C;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IA+ClD;;OAEG;IACH,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAC7B,EAAE,GAAW,EAAE,GAAE;QAAE,GAAG,CAAC,EAAE,OAAO,CAAA;KAAO,GACtC,IAAI,CAAC,CAAC,CAAC;IAQV;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAE;QAAE,GAAG,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAKnE;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAC1C,MAAM,EAAE,CAAC,GACR,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAIrD;;OAEG;IACH,OAAO,CAAC,CAAC,SAAS,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC7C,MAAM,EAAE,CAAC,GACR,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAIpD;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAC1C,MAAM,EAAE,CAAC,GACR,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAIrD;;OAEG;IACH,OAAO,CAAC,CAAC,SAAS,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC7C,MAAM,EAAE,CAAC,GACR,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAIpD;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,MAAM,EAAE,CAAC,GACR,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAItD;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,EAC/C,MAAM,EAAE,CAAC,GACR,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAIrD;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IA4EtD;;OAEG;IACH,KAAK,IAAI,MAAM;IAgGf;;OAEG;IACH,aAAa,IAAI,MAAM;IAyHvB;;OAEG;IACH,MAAM;;;;;;;;;;;IAmBN;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;CAGpD;AAuCD;;GAEG;AACH,eAAO,MAAM,IAAI,aAAa,WAAW,aAA2B,CAAA"}
|
package/dist/commonjs/index.js
CHANGED
|
@@ -21,51 +21,39 @@ const toEnvKey = (pref, key) => {
|
|
|
21
21
|
.replace(/ /g, '_');
|
|
22
22
|
};
|
|
23
23
|
const toEnvVal = (value, delim = '\n') => {
|
|
24
|
-
const str = typeof value === 'string'
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
? value
|
|
28
|
-
? '1'
|
|
24
|
+
const str = typeof value === 'string' ? value
|
|
25
|
+
: typeof value === 'boolean' ?
|
|
26
|
+
value ? '1'
|
|
29
27
|
: '0'
|
|
30
|
-
: typeof value === 'number'
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
.map((v) => toEnvVal(v))
|
|
35
|
-
.join(delim)
|
|
36
|
-
: /* c8 ignore start */
|
|
37
|
-
undefined;
|
|
28
|
+
: typeof value === 'number' ? String(value)
|
|
29
|
+
: Array.isArray(value) ?
|
|
30
|
+
value.map((v) => toEnvVal(v)).join(delim)
|
|
31
|
+
: /* c8 ignore start */ undefined;
|
|
38
32
|
if (typeof str !== 'string') {
|
|
39
33
|
throw new Error(`could not serialize value to environment: ${JSON.stringify(value)}`);
|
|
40
34
|
}
|
|
41
35
|
/* c8 ignore stop */
|
|
42
36
|
return str;
|
|
43
37
|
};
|
|
44
|
-
const fromEnvVal = (env, type, multiple, delim = '\n') => (multiple
|
|
45
|
-
? env
|
|
46
|
-
? env.split(delim).map(v => fromEnvVal(v, type, false))
|
|
38
|
+
const fromEnvVal = (env, type, multiple, delim = '\n') => (multiple ?
|
|
39
|
+
env ? env.split(delim).map(v => fromEnvVal(v, type, false))
|
|
47
40
|
: []
|
|
48
|
-
: type === 'string'
|
|
49
|
-
? env
|
|
50
|
-
: type === 'boolean'
|
|
51
|
-
? env === '1'
|
|
41
|
+
: type === 'string' ? env
|
|
42
|
+
: type === 'boolean' ? env === '1'
|
|
52
43
|
: +env.trim());
|
|
53
44
|
const isConfigType = (t) => typeof t === 'string' &&
|
|
54
45
|
(t === 'string' || t === 'number' || t === 'boolean');
|
|
55
46
|
exports.isConfigType = isConfigType;
|
|
56
47
|
const undefOrType = (v, t) => v === undefined || typeof v === t;
|
|
57
48
|
// print the value type, for error message reporting
|
|
58
|
-
const valueType = (v) => typeof v === 'string'
|
|
59
|
-
? '
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
? 'number'
|
|
64
|
-
: Array.isArray(v)
|
|
65
|
-
? joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'
|
|
49
|
+
const valueType = (v) => typeof v === 'string' ? 'string'
|
|
50
|
+
: typeof v === 'boolean' ? 'boolean'
|
|
51
|
+
: typeof v === 'number' ? 'number'
|
|
52
|
+
: Array.isArray(v) ?
|
|
53
|
+
joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'
|
|
66
54
|
: `${v.type}${v.multiple ? '[]' : ''}`;
|
|
67
|
-
const joinTypes = (types) => types.length === 1 && typeof types[0] === 'string'
|
|
68
|
-
|
|
55
|
+
const joinTypes = (types) => types.length === 1 && typeof types[0] === 'string' ?
|
|
56
|
+
types[0]
|
|
69
57
|
: `(${types.join('|')})`;
|
|
70
58
|
const isValidValue = (v, type, multi) => {
|
|
71
59
|
if (multi) {
|
|
@@ -93,9 +81,7 @@ function num(o = {}) {
|
|
|
93
81
|
if (def !== undefined && !isValidValue(def, 'number', false)) {
|
|
94
82
|
throw new TypeError('invalid default value');
|
|
95
83
|
}
|
|
96
|
-
const validate = val
|
|
97
|
-
? val
|
|
98
|
-
: undefined;
|
|
84
|
+
const validate = val ? val : undefined;
|
|
99
85
|
return {
|
|
100
86
|
...rest,
|
|
101
87
|
default: def,
|
|
@@ -109,9 +95,7 @@ function numList(o = {}) {
|
|
|
109
95
|
if (def !== undefined && !isValidValue(def, 'number', true)) {
|
|
110
96
|
throw new TypeError('invalid default value');
|
|
111
97
|
}
|
|
112
|
-
const validate = val
|
|
113
|
-
? val
|
|
114
|
-
: undefined;
|
|
98
|
+
const validate = val ? val : undefined;
|
|
115
99
|
return {
|
|
116
100
|
...rest,
|
|
117
101
|
default: def,
|
|
@@ -125,9 +109,7 @@ function opt(o = {}) {
|
|
|
125
109
|
if (def !== undefined && !isValidValue(def, 'string', false)) {
|
|
126
110
|
throw new TypeError('invalid default value');
|
|
127
111
|
}
|
|
128
|
-
const validate = val
|
|
129
|
-
? val
|
|
130
|
-
: undefined;
|
|
112
|
+
const validate = val ? val : undefined;
|
|
131
113
|
return {
|
|
132
114
|
...rest,
|
|
133
115
|
default: def,
|
|
@@ -141,9 +123,7 @@ function optList(o = {}) {
|
|
|
141
123
|
if (def !== undefined && !isValidValue(def, 'string', true)) {
|
|
142
124
|
throw new TypeError('invalid default value');
|
|
143
125
|
}
|
|
144
|
-
const validate = val
|
|
145
|
-
? val
|
|
146
|
-
: undefined;
|
|
126
|
+
const validate = val ? val : undefined;
|
|
147
127
|
return {
|
|
148
128
|
...rest,
|
|
149
129
|
default: def,
|
|
@@ -157,8 +137,8 @@ function flag(o = {}) {
|
|
|
157
137
|
if (def !== undefined && !isValidValue(def, 'boolean', false)) {
|
|
158
138
|
throw new TypeError('invalid default value');
|
|
159
139
|
}
|
|
160
|
-
const validate = val
|
|
161
|
-
|
|
140
|
+
const validate = val ?
|
|
141
|
+
val
|
|
162
142
|
: undefined;
|
|
163
143
|
if (hint !== undefined) {
|
|
164
144
|
throw new TypeError('cannot provide hint for flag');
|
|
@@ -176,9 +156,7 @@ function flagList(o = {}) {
|
|
|
176
156
|
if (def !== undefined && !isValidValue(def, 'boolean', true)) {
|
|
177
157
|
throw new TypeError('invalid default value');
|
|
178
158
|
}
|
|
179
|
-
const validate = val
|
|
180
|
-
? val
|
|
181
|
-
: undefined;
|
|
159
|
+
const validate = val ? val : undefined;
|
|
182
160
|
if (hint !== undefined) {
|
|
183
161
|
throw new TypeError('cannot provide hint for flag list');
|
|
184
162
|
}
|
|
@@ -210,8 +188,8 @@ const toParseArgsOptionsConfig = (options) => {
|
|
|
210
188
|
c[longOption] = {
|
|
211
189
|
type: 'string',
|
|
212
190
|
multiple: false,
|
|
213
|
-
default: config.default === undefined
|
|
214
|
-
|
|
191
|
+
default: config.default === undefined ?
|
|
192
|
+
undefined
|
|
215
193
|
: String(config.default),
|
|
216
194
|
};
|
|
217
195
|
}
|
|
@@ -277,14 +255,25 @@ class Jack {
|
|
|
277
255
|
this.validate(values);
|
|
278
256
|
}
|
|
279
257
|
catch (er) {
|
|
280
|
-
|
|
258
|
+
const e = er;
|
|
259
|
+
if (source && e && typeof e === 'object') {
|
|
260
|
+
if (e.cause && typeof e.cause === 'object') {
|
|
261
|
+
Object.assign(e.cause, { path: source });
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
e.cause = { path: source };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
throw e;
|
|
281
268
|
}
|
|
282
269
|
for (const [field, value] of Object.entries(values)) {
|
|
283
270
|
const my = this.#configSet[field];
|
|
284
271
|
// already validated, just for TS's benefit
|
|
285
272
|
/* c8 ignore start */
|
|
286
273
|
if (!my) {
|
|
287
|
-
throw new Error('unexpected field in config set: ' + field
|
|
274
|
+
throw new Error('unexpected field in config set: ' + field, {
|
|
275
|
+
cause: { found: field },
|
|
276
|
+
});
|
|
288
277
|
}
|
|
289
278
|
/* c8 ignore stop */
|
|
290
279
|
my.default = value;
|
|
@@ -355,18 +344,27 @@ class Jack {
|
|
|
355
344
|
throw new Error(`Unknown option '${token.rawName}'. ` +
|
|
356
345
|
`To specify a positional argument starting with a '-', ` +
|
|
357
346
|
`place it at the end of the command after '--', as in ` +
|
|
358
|
-
`'-- ${token.rawName}'
|
|
347
|
+
`'-- ${token.rawName}'`, {
|
|
348
|
+
cause: {
|
|
349
|
+
found: token.rawName + (token.value ? `=${token.value}` : ''),
|
|
350
|
+
},
|
|
351
|
+
});
|
|
359
352
|
}
|
|
360
353
|
if (value === undefined) {
|
|
361
354
|
if (token.value === undefined) {
|
|
362
355
|
if (my.type !== 'boolean') {
|
|
363
|
-
throw new Error(`No value provided for ${token.rawName}, expected ${my.type}
|
|
356
|
+
throw new Error(`No value provided for ${token.rawName}, expected ${my.type}`, {
|
|
357
|
+
cause: {
|
|
358
|
+
name: token.rawName,
|
|
359
|
+
wanted: valueType(my),
|
|
360
|
+
},
|
|
361
|
+
});
|
|
364
362
|
}
|
|
365
363
|
value = true;
|
|
366
364
|
}
|
|
367
365
|
else {
|
|
368
366
|
if (my.type === 'boolean') {
|
|
369
|
-
throw new Error(`Flag ${token.rawName} does not take a value, received '${token.value}'
|
|
367
|
+
throw new Error(`Flag ${token.rawName} does not take a value, received '${token.value}'`, { cause: { found: token } });
|
|
370
368
|
}
|
|
371
369
|
if (my.type === 'string') {
|
|
372
370
|
value = token.value;
|
|
@@ -375,7 +373,13 @@ class Jack {
|
|
|
375
373
|
value = +token.value;
|
|
376
374
|
if (value !== value) {
|
|
377
375
|
throw new Error(`Invalid value '${token.value}' provided for ` +
|
|
378
|
-
`'${token.rawName}' option, expected number
|
|
376
|
+
`'${token.rawName}' option, expected number`, {
|
|
377
|
+
cause: {
|
|
378
|
+
name: token.rawName,
|
|
379
|
+
found: token.value,
|
|
380
|
+
wanted: 'number',
|
|
381
|
+
},
|
|
382
|
+
});
|
|
379
383
|
}
|
|
380
384
|
}
|
|
381
385
|
}
|
|
@@ -401,7 +405,7 @@ class Jack {
|
|
|
401
405
|
for (const [field, value] of Object.entries(p.values)) {
|
|
402
406
|
const valid = this.#configSet[field]?.validate;
|
|
403
407
|
if (valid && !valid(value)) {
|
|
404
|
-
throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}
|
|
408
|
+
throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}`, { cause: { name: field, found: value } });
|
|
405
409
|
}
|
|
406
410
|
}
|
|
407
411
|
this.#writeEnv(p);
|
|
@@ -418,7 +422,7 @@ class Jack {
|
|
|
418
422
|
// recurse so we get the core config key we care about.
|
|
419
423
|
this.#noNoFields(yes, val, s);
|
|
420
424
|
if (this.#configSet[yes]?.type === 'boolean') {
|
|
421
|
-
throw new Error(`do not set '${s}', instead set '${yes}' as desired
|
|
425
|
+
throw new Error(`do not set '${s}', instead set '${yes}' as desired.`, { cause: { found: s, wanted: yes } });
|
|
422
426
|
}
|
|
423
427
|
}
|
|
424
428
|
/**
|
|
@@ -427,22 +431,31 @@ class Jack {
|
|
|
427
431
|
*/
|
|
428
432
|
validate(o) {
|
|
429
433
|
if (!o || typeof o !== 'object') {
|
|
430
|
-
throw new Error('Invalid config: not an object'
|
|
434
|
+
throw new Error('Invalid config: not an object', {
|
|
435
|
+
cause: { found: o },
|
|
436
|
+
});
|
|
431
437
|
}
|
|
432
438
|
for (const field in o) {
|
|
433
439
|
this.#noNoFields(field, o[field]);
|
|
434
440
|
const config = this.#configSet[field];
|
|
435
441
|
if (!config) {
|
|
436
|
-
throw new Error(`Unknown config option: ${field}
|
|
442
|
+
throw new Error(`Unknown config option: ${field}`, {
|
|
443
|
+
cause: { found: field },
|
|
444
|
+
});
|
|
437
445
|
}
|
|
438
446
|
if (!isValidValue(o[field], config.type, !!config.multiple)) {
|
|
439
|
-
throw
|
|
440
|
-
|
|
441
|
-
|
|
447
|
+
throw new Error(`Invalid value ${valueType(o[field])} for ${field}, expected ${valueType(config)}`, {
|
|
448
|
+
cause: {
|
|
449
|
+
name: field,
|
|
450
|
+
found: o[field],
|
|
451
|
+
wanted: valueType(config),
|
|
452
|
+
},
|
|
442
453
|
});
|
|
443
454
|
}
|
|
444
455
|
if (config.validate && !config.validate(o[field])) {
|
|
445
|
-
throw new Error(`Invalid config value for ${field}: ${o[field]}
|
|
456
|
+
throw new Error(`Invalid config value for ${field}: ${o[field]}`, {
|
|
457
|
+
cause: { name: field, found: o[field] },
|
|
458
|
+
});
|
|
446
459
|
}
|
|
447
460
|
}
|
|
448
461
|
}
|
|
@@ -756,18 +769,14 @@ class Jack {
|
|
|
756
769
|
const dmDelim = mult && (desc.includes('\n') ? '\n\n' : '\n');
|
|
757
770
|
const text = normalize(desc + dmDelim + mult);
|
|
758
771
|
const hint = value.hint ||
|
|
759
|
-
(value.type === 'number'
|
|
760
|
-
|
|
761
|
-
: value.type === 'string'
|
|
762
|
-
? field.name
|
|
772
|
+
(value.type === 'number' ? 'n'
|
|
773
|
+
: value.type === 'string' ? field.name
|
|
763
774
|
: undefined);
|
|
764
|
-
const short = !value.short
|
|
765
|
-
|
|
766
|
-
: value.type === 'boolean'
|
|
767
|
-
? `-${value.short} `
|
|
775
|
+
const short = !value.short ? ''
|
|
776
|
+
: value.type === 'boolean' ? `-${value.short} `
|
|
768
777
|
: `-${value.short}<${hint}> `;
|
|
769
|
-
const left = value.type === 'boolean'
|
|
770
|
-
|
|
778
|
+
const left = value.type === 'boolean' ?
|
|
779
|
+
`${short}--${field.name}`
|
|
771
780
|
: `${short}--${field.name}=<${hint}>`;
|
|
772
781
|
const row = { text, left, type: 'config' };
|
|
773
782
|
if (text.length > width - maxMax) {
|
|
@@ -795,8 +804,8 @@ class Jack {
|
|
|
795
804
|
...(def.multiple ? { multiple: true } : {}),
|
|
796
805
|
...(def.delim ? { delim: def.delim } : {}),
|
|
797
806
|
...(def.short ? { short: def.short } : {}),
|
|
798
|
-
...(def.description
|
|
799
|
-
|
|
807
|
+
...(def.description ?
|
|
808
|
+
{ description: normalize(def.description) }
|
|
800
809
|
: {}),
|
|
801
810
|
...(def.validate ? { validate: def.validate } : {}),
|
|
802
811
|
...(def.default !== undefined ? { default: def.default } : {}),
|
|
@@ -813,12 +822,12 @@ class Jack {
|
|
|
813
822
|
exports.Jack = Jack;
|
|
814
823
|
// Unwrap and un-indent, so we can wrap description
|
|
815
824
|
// strings however makes them look nice in the code.
|
|
816
|
-
const normalize = (s, pre = false) => pre
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
825
|
+
const normalize = (s, pre = false) => pre ?
|
|
826
|
+
// prepend a ZWSP to each line so cliui doesn't strip it.
|
|
827
|
+
s
|
|
828
|
+
.split('\n')
|
|
829
|
+
.map(l => `\u200b${l}`)
|
|
830
|
+
.join('\n')
|
|
822
831
|
: s
|
|
823
832
|
// remove single line breaks, except for lists
|
|
824
833
|
.replace(/([^\n])\n[ \t]*([^\n])/g, (_, $1, $2) => !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\n${$2}`)
|
|
@@ -832,8 +841,8 @@ const normalize = (s, pre = false) => pre
|
|
|
832
841
|
// normalize for markdown printing, remove leading spaces on lines
|
|
833
842
|
const normalizeMarkdown = (s, pre = false) => {
|
|
834
843
|
const n = normalize(s, pre).replace(/\\/g, '\\\\');
|
|
835
|
-
return pre
|
|
836
|
-
|
|
844
|
+
return pre ?
|
|
845
|
+
`\`\`\`\n${n.replace(/\u200b/g, '')}\n\`\`\``
|
|
837
846
|
: n.replace(/\n +/g, '\n').trim();
|
|
838
847
|
};
|
|
839
848
|
const normalizeOneLine = (s, pre = false) => {
|