@thi.ng/args 1.1.0 → 2.0.3

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/CHANGELOG.md CHANGED
@@ -3,18 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- # [1.1.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@1.0.4...@thi.ng/args@1.1.0) (2021-08-19)
7
-
8
-
9
- ### Features
10
-
11
- * **args:** capitalize usage section headings ([eaa0f23](https://github.com/thi-ng/umbrella/commit/eaa0f23a88cfb98da05b245b720a6fbb260ea7da))
12
-
13
-
14
-
15
-
16
-
17
- ## [1.0.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@1.0.3...@thi.ng/args@1.0.4) (2021-08-17)
6
+ ## [2.0.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@2.0.2...@thi.ng/args@2.0.3) (2021-10-15)
18
7
 
19
8
  **Note:** Version bump only for package @thi.ng/args
20
9
 
@@ -22,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
22
11
 
23
12
 
24
13
 
25
- ## [1.0.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@1.0.2...@thi.ng/args@1.0.3) (2021-08-08)
14
+ ## [2.0.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@2.0.1...@thi.ng/args@2.0.2) (2021-10-15)
26
15
 
27
16
  **Note:** Version bump only for package @thi.ng/args
28
17
 
@@ -30,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
30
19
 
31
20
 
32
21
 
33
- ## [1.0.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@1.0.1...@thi.ng/args@1.0.2) (2021-08-08)
22
+ ## [2.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@2.0.0...@thi.ng/args@2.0.1) (2021-10-13)
34
23
 
35
24
  **Note:** Version bump only for package @thi.ng/args
36
25
 
@@ -38,120 +27,98 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
38
27
 
39
28
 
40
29
 
41
- ## [1.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.7.2...@thi.ng/args@1.0.1) (2021-08-08)
42
-
43
- **Note:** Version bump only for package @thi.ng/args
44
-
45
-
46
-
47
-
48
-
49
- ## [0.7.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.7.1...@thi.ng/args@0.7.2) (2021-08-04)
50
-
51
- **Note:** Version bump only for package @thi.ng/args
52
-
53
-
54
-
55
-
56
-
57
- ## [0.7.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.7.0...@thi.ng/args@0.7.1) (2021-07-29)
58
-
59
-
60
- ### Bug Fixes
61
-
62
- * **args:** omit empty groups from usage() ([a66c19a](https://github.com/thi-ng/umbrella/commit/a66c19aa8d682a7f4b6ae5b3de51a26e806a02dc))
63
-
64
-
65
-
66
-
67
-
68
- # [0.7.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.6.0...@thi.ng/args@0.7.0) (2021-07-01)
69
-
70
-
71
- ### Features
72
-
73
- * **args:** add showGroupNames option ([6917111](https://github.com/thi-ng/umbrella/commit/6917111aa6f019cbc4622a30be65c7f43cf995f9))
74
-
75
-
76
-
77
-
78
-
79
- # [0.6.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.5.1...@thi.ng/args@0.6.0) (2021-06-08)
80
-
81
-
82
- ### Features
83
-
84
- * **args:** add kvPairsMulti(), update coerceKV() ([fd12f80](https://github.com/thi-ng/umbrella/commit/fd12f807dba2546133278a607c4b79dcf9a12b07))
85
-
86
-
87
-
88
-
89
-
90
- # [0.5.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.4.2...@thi.ng/args@0.5.0) (2021-03-28)
30
+ # [2.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@1.1.1...@thi.ng/args@2.0.0) (2021-10-12)
91
31
 
92
32
 
93
- ### Features
33
+ ### Build System
94
34
 
95
- * **args:** add vec() arg type ([f05cb2a](https://github.com/thi-ng/umbrella/commit/f05cb2a6d0798ef0558775a81dba2d834308747c))
96
- * **args:** wordwrap usage prefix/suffix, defaults ([325b558](https://github.com/thi-ng/umbrella/commit/325b558f74f8dbfaa2c7de72c6800cdbc8c54acd))
35
+ * major update of ALL pkgs (export maps, ESM only) ([0d1d6ea](https://github.com/thi-ng/umbrella/commit/0d1d6ea9fab2a645d6c5f2bf2591459b939c09b6))
97
36
 
98
37
 
38
+ ### BREAKING CHANGES
99
39
 
40
+ * discontinue CommonJS & UMD versions
100
41
 
42
+ - only ESM modules will be published from now on
43
+ - CJS obsolete due to ESM support in recent versions of node:
44
+ - i.e. launch NodeJS via:
45
+ - `node --experimental-specifier-resolution=node --experimental-repl-await`
46
+ - in the node REPL use `await import(...)` instead of `require()`
47
+ - UMD obsolete due to widespread browser support for ESM
101
48
 
102
- # [0.4.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.3.1...@thi.ng/args@0.4.0) (2021-03-22)
49
+ Also:
50
+ - normalize/restructure/reorg all package.json files
51
+ - cleanup all build scripts, remove obsolete
52
+ - switch from mocha to @thi.ng/testament for all tests
103
53
 
104
54
 
105
- ### Features
106
55
 
107
- * **args:** add arg groups, segment usage output ([ebf5197](https://github.com/thi-ng/umbrella/commit/ebf51974e4e1e1d5288af9ad420d4211addd95ad))
108
- * **args:** support arbitrary length aliases ([1cfdf49](https://github.com/thi-ng/umbrella/commit/1cfdf49a53cca2f80836caf428e220e90f687ad1))
109
56
 
110
57
 
111
58
 
59
+ # [1.1.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@1.0.4...@thi.ng/args@1.1.0) (2021-08-19)
112
60
 
61
+ ### Features
113
62
 
114
- ## [0.3.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.3.0...@thi.ng/args@0.3.1) (2021-03-21)
63
+ - **args:** capitalize usage section headings ([eaa0f23](https://github.com/thi-ng/umbrella/commit/eaa0f23a88cfb98da05b245b720a6fbb260ea7da))
115
64
 
65
+ ## [0.7.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.7.0...@thi.ng/args@0.7.1) (2021-07-29)
116
66
 
117
- ### Bug Fixes
67
+ ### Bug Fixes
118
68
 
119
- * **args:** fix usage() show defaults logic ([ae31158](https://github.com/thi-ng/umbrella/commit/ae31158c9496d7c116ee2b4a22ca843888d2bddd))
69
+ - **args:** omit empty groups from usage() ([a66c19a](https://github.com/thi-ng/umbrella/commit/a66c19aa8d682a7f4b6ae5b3de51a26e806a02dc))
120
70
 
71
+ # [0.7.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.6.0...@thi.ng/args@0.7.0) (2021-07-01)
121
72
 
73
+ ### Features
122
74
 
75
+ - **args:** add showGroupNames option ([6917111](https://github.com/thi-ng/umbrella/commit/6917111aa6f019cbc4622a30be65c7f43cf995f9))
123
76
 
77
+ # [0.6.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.5.1...@thi.ng/args@0.6.0) (2021-06-08)
124
78
 
125
- # [0.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.2.7...@thi.ng/args@0.3.0) (2021-03-20)
79
+ ### Features
126
80
 
81
+ - **args:** add kvPairsMulti(), update coerceKV() ([fd12f80](https://github.com/thi-ng/umbrella/commit/fd12f807dba2546133278a607c4b79dcf9a12b07))
127
82
 
128
- ### Features
83
+ # [0.5.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.4.2...@thi.ng/args@0.5.0) (2021-03-28)
129
84
 
130
- * **args:** update ParseOpts, UsageOpts ([6577c80](https://github.com/thi-ng/umbrella/commit/6577c806e246ecf8244b1af6a2cefc400a7eb365))
85
+ ### Features
131
86
 
87
+ - **args:** add vec() arg type ([f05cb2a](https://github.com/thi-ng/umbrella/commit/f05cb2a6d0798ef0558775a81dba2d834308747c))
88
+ - **args:** wordwrap usage prefix/suffix, defaults ([325b558](https://github.com/thi-ng/umbrella/commit/325b558f74f8dbfaa2c7de72c6800cdbc8c54acd))
132
89
 
90
+ # [0.4.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.3.1...@thi.ng/args@0.4.0) (2021-03-22)
133
91
 
92
+ ### Features
134
93
 
94
+ - **args:** add arg groups, segment usage output ([ebf5197](https://github.com/thi-ng/umbrella/commit/ebf51974e4e1e1d5288af9ad420d4211addd95ad))
95
+ - **args:** support arbitrary length aliases ([1cfdf49](https://github.com/thi-ng/umbrella/commit/1cfdf49a53cca2f80836caf428e220e90f687ad1))
135
96
 
136
- # [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.1.0...@thi.ng/args@0.2.0) (2021-01-13)
97
+ ## [0.3.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.3.0...@thi.ng/args@0.3.1) (2021-03-21)
137
98
 
99
+ ### Bug Fixes
138
100
 
139
- ### Features
101
+ - **args:** fix usage() show defaults logic ([ae31158](https://github.com/thi-ng/umbrella/commit/ae31158c9496d7c116ee2b4a22ca843888d2bddd))
140
102
 
141
- * **args:** add defaultHint opt, update usage() ([f8a4146](https://github.com/thi-ng/umbrella/commit/f8a414605a0d5c93fcef83ab931911c6c2f39f7d))
103
+ # [0.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.2.7...@thi.ng/args@0.3.0) (2021-03-20)
142
104
 
105
+ ### Features
143
106
 
107
+ - **args:** update ParseOpts, UsageOpts ([6577c80](https://github.com/thi-ng/umbrella/commit/6577c806e246ecf8244b1af6a2cefc400a7eb365))
144
108
 
109
+ # [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.1.0...@thi.ng/args@0.2.0) (2021-01-13)
145
110
 
111
+ ### Features
146
112
 
147
- # 0.1.0 (2021-01-10)
113
+ - **args:** add defaultHint opt, update usage() ([f8a4146](https://github.com/thi-ng/umbrella/commit/f8a414605a0d5c93fcef83ab931911c6c2f39f7d))
148
114
 
115
+ # 0.1.0 (2021-01-10)
149
116
 
150
- ### Features
117
+ ### Features
151
118
 
152
- * **args:** add kv args, callbacks, usage opts ([c306aba](https://github.com/thi-ng/umbrella/commit/c306abac31dc03bb15a19c36192ee5c07afa1063))
153
- * **args:** add strict mode kvArgs()/coerceKV(), add docs ([b76c4f1](https://github.com/thi-ng/umbrella/commit/b76c4f11ddbe3b7c1a195a93ceed3a953666ef5d))
154
- * **args:** add tuple arg type support ([a05dde9](https://github.com/thi-ng/umbrella/commit/a05dde957be54ae7ed6aeab8233bff0d8573c675))
155
- * **args:** import as new package ([af5d943](https://github.com/thi-ng/umbrella/commit/af5d943153b3012be04ed0e9a044ee944465d035))
156
- * **args:** major general package update ([26ec49a](https://github.com/thi-ng/umbrella/commit/26ec49afc0fa389b7a2551b116a85d95df4aaeee))
157
- * **args:** update multi arg specs, parse ([dbdf913](https://github.com/thi-ng/umbrella/commit/dbdf913b4ed730c2c07246c24ecbafb32d9dc37e))
119
+ - **args:** add kv args, callbacks, usage opts ([c306aba](https://github.com/thi-ng/umbrella/commit/c306abac31dc03bb15a19c36192ee5c07afa1063))
120
+ - **args:** add strict mode kvArgs()/coerceKV(), add docs ([b76c4f1](https://github.com/thi-ng/umbrella/commit/b76c4f11ddbe3b7c1a195a93ceed3a953666ef5d))
121
+ - **args:** add tuple arg type support ([a05dde9](https://github.com/thi-ng/umbrella/commit/a05dde957be54ae7ed6aeab8233bff0d8573c675))
122
+ - **args:** import as new package ([af5d943](https://github.com/thi-ng/umbrella/commit/af5d943153b3012be04ed0e9a044ee944465d035))
123
+ - **args:** major general package update ([26ec49a](https://github.com/thi-ng/umbrella/commit/26ec49afc0fa389b7a2551b116a85d95df4aaeee))
124
+ - **args:** update multi arg specs, parse ([dbdf913](https://github.com/thi-ng/umbrella/commit/dbdf913b4ed730c2c07246c24ecbafb32d9dc37e))
package/README.md CHANGED
@@ -54,15 +54,24 @@ individual values, e.g. `-a 1,2,3` equals `-a 1 -a 2 -a 3`
54
54
  yarn add @thi.ng/args
55
55
  ```
56
56
 
57
+ ES module import:
58
+
57
59
  ```html
58
- // ES module
59
- <script type="module" src="https://unpkg.com/@thi.ng/args?module" crossorigin></script>
60
+ <script type="module" src="https://cdn.skypack.dev/@thi.ng/args"></script>
61
+ ```
62
+
63
+ [Skypack documentation](https://docs.skypack.dev/)
64
+
65
+ For Node.js REPL:
66
+
67
+ ```text
68
+ # with flag only for < v16
69
+ node --experimental-repl-await
60
70
 
61
- // UMD
62
- <script src="https://unpkg.com/@thi.ng/args/lib/index.umd.js" crossorigin></script>
71
+ > const args = await import("@thi.ng/args");
63
72
  ```
64
73
 
65
- Package sizes (gzipped, pre-treeshake): ESM: 2.38 KB / CJS: 2.52 KB / UMD: 2.43 KB
74
+ Package sizes (gzipped, pre-treeshake): ESM: 2.44 KB
66
75
 
67
76
  ## Dependencies
68
77
 
package/args.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Fn } from "@thi.ng/api";
2
- import type { ArgSpec, KVDict, KVMultiDict, Tuple } from "./api";
2
+ import type { ArgSpec, KVDict, KVMultiDict, Tuple } from "./api.js";
3
3
  /**
4
4
  * Returns a full {@link ArgSpec} for a boolean flag. The mere presence of this
5
5
  * arg will enable the flag.
package/args.js CHANGED
@@ -1,8 +1,18 @@
1
- import { repeat } from "@thi.ng/strings";
2
- import { coerceFloat, coerceFloats, coerceHexInt, coerceHexInts, coerceInt, coerceInts, coerceJson, coerceKV, coerceOneOf, coerceTuple, } from "./coerce";
3
- const $single = (coerce, hint) => (spec) => (Object.assign({ coerce,
4
- hint, group: "main" }, spec));
5
- const $multi = (coerce, hint) => (spec) => (Object.assign({ hint: $hint(hint, spec.delim), multi: true, coerce, group: "main" }, spec));
1
+ import { repeat } from "@thi.ng/strings/repeat";
2
+ import { coerceFloat, coerceFloats, coerceHexInt, coerceHexInts, coerceInt, coerceInts, coerceJson, coerceKV, coerceOneOf, coerceTuple, } from "./coerce.js";
3
+ const $single = (coerce, hint) => (spec) => ({
4
+ coerce,
5
+ hint,
6
+ group: "main",
7
+ ...spec,
8
+ });
9
+ const $multi = (coerce, hint) => (spec) => ({
10
+ hint: $hint(hint, spec.delim),
11
+ multi: true,
12
+ coerce,
13
+ group: "main",
14
+ ...spec,
15
+ });
6
16
  const $hint = (hint, delim) => hint + (delim ? `[${delim}..]` : "");
7
17
  /**
8
18
  * Returns a full {@link ArgSpec} for a boolean flag. The mere presence of this
@@ -10,7 +20,12 @@ const $hint = (hint, delim) => hint + (delim ? `[${delim}..]` : "");
10
20
  *
11
21
  * @param spec
12
22
  */
13
- export const flag = (spec) => (Object.assign({ flag: true, default: false, group: "flags" }, spec));
23
+ export const flag = (spec) => ({
24
+ flag: true,
25
+ default: false,
26
+ group: "flags",
27
+ ...spec,
28
+ });
14
29
  /**
15
30
  * Returns a full {@link ArgSpec} for a string value arg.
16
31
  *
@@ -76,7 +91,12 @@ export const ints = $multi(coerceInts, "INT");
76
91
  *
77
92
  * @param spec
78
93
  */
79
- export const json = (spec) => (Object.assign({ coerce: coerceJson, hint: "JSON", group: "main" }, spec));
94
+ export const json = (spec) => ({
95
+ coerce: coerceJson,
96
+ hint: "JSON",
97
+ group: "main",
98
+ ...spec,
99
+ });
80
100
  const $desc = (opts, prefix) => `${prefix ? prefix + ": " : ""}${opts.map((x) => `"${x}"`).join(", ")}`;
81
101
  /**
82
102
  * Returns full {@link ArgSpec} for an enum-like string value arg. The raw CLI
@@ -85,7 +105,13 @@ const $desc = (opts, prefix) => `${prefix ? prefix + ": " : ""}${opts.map((x) =>
85
105
  * @param opts
86
106
  * @param spec
87
107
  */
88
- export const oneOf = (opts, spec) => (Object.assign(Object.assign({ coerce: coerceOneOf(opts), hint: "ID", group: "main" }, spec), { desc: $desc(opts, spec.desc) }));
108
+ export const oneOf = (opts, spec) => ({
109
+ coerce: coerceOneOf(opts),
110
+ hint: "ID",
111
+ group: "main",
112
+ ...spec,
113
+ desc: $desc(opts, spec.desc),
114
+ });
89
115
  /**
90
116
  * Multi-arg version of {@link oneOf}. Returns full {@link ArgSpec} for multiple
91
117
  * enum-like string value args. The raw CLI value strings will be automcatically
@@ -94,7 +120,14 @@ export const oneOf = (opts, spec) => (Object.assign(Object.assign({ coerce: coer
94
120
  * @param opts
95
121
  * @param spec
96
122
  */
97
- export const oneOfMulti = (opts, spec) => (Object.assign(Object.assign({ coerce: (xs) => xs.map(coerceOneOf(opts)), hint: $hint("ID", spec.delim), multi: true, group: "main" }, spec), { desc: $desc(opts, spec.desc) }));
123
+ export const oneOfMulti = (opts, spec) => ({
124
+ coerce: (xs) => xs.map(coerceOneOf(opts)),
125
+ hint: $hint("ID", spec.delim),
126
+ multi: true,
127
+ group: "main",
128
+ ...spec,
129
+ desc: $desc(opts, spec.desc),
130
+ });
98
131
  /**
99
132
  * Returns a full {@link ArgSpec} for multiple `key=value` pair args, coerced
100
133
  * into a result object.
@@ -107,7 +140,13 @@ export const oneOfMulti = (opts, spec) => (Object.assign(Object.assign({ coerce:
107
140
  * @param spec
108
141
  * @param delim
109
142
  */
110
- export const kvPairs = (spec, delim = "=", strict) => (Object.assign({ coerce: coerceKV(delim, strict), hint: `key${delim}val`, multi: true, group: "main" }, spec));
143
+ export const kvPairs = (spec, delim = "=", strict) => ({
144
+ coerce: coerceKV(delim, strict),
145
+ hint: `key${delim}val`,
146
+ multi: true,
147
+ group: "main",
148
+ ...spec,
149
+ });
111
150
  /**
112
151
  * Like {@link kvPairs}, but coerces KV pairs into a result {@link KVMultiDict}
113
152
  * which supports multiple values per given key (each key's values are collected
@@ -117,7 +156,13 @@ export const kvPairs = (spec, delim = "=", strict) => (Object.assign({ coerce: c
117
156
  * @param delim
118
157
  * @param strict
119
158
  */
120
- export const kvPairsMulti = (spec, delim = "=", strict) => (Object.assign({ coerce: coerceKV(delim, strict, true), hint: `key${delim}val(s)`, multi: true, group: "main" }, spec));
159
+ export const kvPairsMulti = (spec, delim = "=", strict) => ({
160
+ coerce: coerceKV(delim, strict, true),
161
+ hint: `key${delim}val(s)`,
162
+ multi: true,
163
+ group: "main",
164
+ ...spec,
165
+ });
121
166
  /**
122
167
  * Returns a full {@link ArgSpec} for a fixed `size` tuple extracted from a
123
168
  * single value string. The individual values are delimited by `delim` and will
@@ -144,7 +189,12 @@ export const kvPairsMulti = (spec, delim = "=", strict) => (Object.assign({ coer
144
189
  * @param spec
145
190
  * @param delim
146
191
  */
147
- export const tuple = (coerce, size, spec, delim = ",") => (Object.assign({ coerce: coerceTuple(coerce, size, delim), hint: [...repeat("N", size)].join(delim), group: "main" }, spec));
192
+ export const tuple = (coerce, size, spec, delim = ",") => ({
193
+ coerce: coerceTuple(coerce, size, delim),
194
+ hint: [...repeat("N", size)].join(delim),
195
+ group: "main",
196
+ ...spec,
197
+ });
148
198
  /**
149
199
  * Syntax sugar for `tuple(coerceInt, size, {...}, delim)`.
150
200
  *
package/coerce.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Fn } from "@thi.ng/api";
2
- import { KVDict, KVMultiDict, Tuple } from "./api";
2
+ import { KVDict, KVMultiDict, Tuple } from "./api.js";
3
3
  export declare const coerceString: (x: string) => string;
4
4
  export declare const coerceFloat: (x: string) => number;
5
5
  export declare const coerceFloats: (xs: string[]) => number[];
package/coerce.js CHANGED
@@ -1,6 +1,7 @@
1
- import { isHex, isNumericFloat, isNumericInt } from "@thi.ng/checks";
2
- import { illegalArgs } from "@thi.ng/errors";
3
- import { Tuple } from "./api";
1
+ import { isHex } from "@thi.ng/checks/is-hex";
2
+ import { isNumericFloat, isNumericInt } from "@thi.ng/checks/is-numeric";
3
+ import { illegalArgs } from "@thi.ng/errors/illegal-arguments";
4
+ import { Tuple } from "./api.js";
4
5
  export const coerceString = (x) => x;
5
6
  export const coerceFloat = (x) => isNumericFloat(x)
6
7
  ? parseFloat(x)
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export * from "./api";
2
- export * from "./args";
3
- export * from "./coerce";
4
- export * from "./parse";
5
- export * from "./usage";
1
+ export * from "./api.js";
2
+ export * from "./args.js";
3
+ export * from "./coerce.js";
4
+ export * from "./parse.js";
5
+ export * from "./usage.js";
6
6
  //# sourceMappingURL=index.d.ts.map
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
- export * from "./api";
2
- export * from "./args";
3
- export * from "./coerce";
4
- export * from "./parse";
5
- export * from "./usage";
1
+ export * from "./api.js";
2
+ export * from "./args.js";
3
+ export * from "./coerce.js";
4
+ export * from "./parse.js";
5
+ export * from "./usage.js";
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@thi.ng/args",
3
- "version": "1.1.0",
3
+ "version": "2.0.3",
4
4
  "description": "Declarative, functional & typechecked CLI argument/options parser, value coercions etc.",
5
+ "type": "module",
5
6
  "module": "./index.js",
6
- "main": "./lib/index.js",
7
- "umd:main": "./lib/index.umd.js",
8
7
  "typings": "./index.d.ts",
8
+ "sideEffects": false,
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "https://github.com/thi-ng/umbrella.git"
@@ -24,30 +24,24 @@
24
24
  "author": "Karsten Schmidt <k+npm@thi.ng>",
25
25
  "license": "Apache-2.0",
26
26
  "scripts": {
27
- "build": "yarn clean && yarn build:es6 && node ../../scripts/bundle-module",
28
- "build:release": "yarn clean && yarn build:es6 && node ../../scripts/bundle-module all",
29
- "build:es6": "tsc --declaration",
30
- "build:test": "rimraf build && tsc -p test/tsconfig.json",
31
- "build:check": "tsc --isolatedModules --noEmit",
32
- "test": "mocha test",
33
- "cover": "nyc mocha test && nyc report --reporter=lcov",
34
- "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib",
35
- "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts",
27
+ "build": "yarn clean && tsc --declaration",
28
+ "clean": "rimraf *.js *.d.ts *.map doc",
29
+ "doc": "typedoc --excludePrivate --excludeInternal --out doc src/index.ts",
36
30
  "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose",
37
- "doc": "typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts",
38
- "pub": "yarn build:release && yarn publish --access public"
31
+ "doc:readme": "yarn doc:stats && ../../scripts/node-esm ../../tools/src/readme.ts",
32
+ "doc:stats": "../../scripts/node-esm ../../tools/src/module-stats.ts",
33
+ "pub": "yarn build && yarn publish --access public",
34
+ "test": "testament test"
39
35
  },
40
36
  "dependencies": {
41
- "@thi.ng/api": "^7.1.9",
42
- "@thi.ng/checks": "^2.9.10",
43
- "@thi.ng/errors": "^1.3.4",
44
- "@thi.ng/strings": "^2.1.6"
37
+ "@thi.ng/api": "^8.0.3",
38
+ "@thi.ng/checks": "^3.0.3",
39
+ "@thi.ng/errors": "^2.0.3",
40
+ "@thi.ng/strings": "^3.0.3"
41
+ },
42
+ "devDependencies": {
43
+ "@thi.ng/testament": "^0.1.3"
45
44
  },
46
- "files": [
47
- "*.js",
48
- "*.d.ts",
49
- "lib"
50
- ],
51
45
  "keywords": [
52
46
  "argument",
53
47
  "ansi",
@@ -67,9 +61,35 @@
67
61
  "publishConfig": {
68
62
  "access": "public"
69
63
  },
70
- "sideEffects": false,
64
+ "engines": {
65
+ "node": ">=12.7"
66
+ },
67
+ "files": [
68
+ "*.js",
69
+ "*.d.ts"
70
+ ],
71
+ "exports": {
72
+ ".": {
73
+ "import": "./index.js"
74
+ },
75
+ "./api": {
76
+ "import": "./api.js"
77
+ },
78
+ "./args": {
79
+ "import": "./args.js"
80
+ },
81
+ "./coerce": {
82
+ "import": "./coerce.js"
83
+ },
84
+ "./parse": {
85
+ "import": "./parse.js"
86
+ },
87
+ "./usage": {
88
+ "import": "./usage.js"
89
+ }
90
+ },
71
91
  "thi.ng": {
72
92
  "year": 2018
73
93
  },
74
- "gitHead": "2c2f921759dc30055f86795231fa1289ddb14a6e"
94
+ "gitHead": "1fb38cac74d6c009d96855c28784a267a81badf1"
75
95
  }
package/parse.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { IObjectOf } from "@thi.ng/api";
2
- import type { Args, ParseOpts, ParseResult } from "./api";
2
+ import type { Args, ParseOpts, ParseResult } from "./api.js";
3
3
  export declare const parse: <T extends IObjectOf<any>>(specs: Args<T>, argv: string[], opts?: Partial<ParseOpts> | undefined) => ParseResult<T> | undefined;
4
4
  //# sourceMappingURL=parse.d.ts.map
package/parse.js CHANGED
@@ -1,9 +1,9 @@
1
- import { isArray } from "@thi.ng/checks";
2
- import { illegalArgs } from "@thi.ng/errors";
3
- import { camel } from "@thi.ng/strings";
4
- import { usage } from "./usage";
1
+ import { isArray } from "@thi.ng/checks/is-array";
2
+ import { illegalArgs } from "@thi.ng/errors/illegal-arguments";
3
+ import { camel } from "@thi.ng/strings/case";
4
+ import { usage } from "./usage.js";
5
5
  export const parse = (specs, argv, opts) => {
6
- opts = Object.assign({ start: 2, showUsage: true, help: ["--help", "-h"] }, opts);
6
+ opts = { start: 2, showUsage: true, help: ["--help", "-h"], ...opts };
7
7
  try {
8
8
  return parseOpts(specs, argv, opts);
9
9
  }
package/usage.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { IObjectOf } from "@thi.ng/api";
2
- import { Args, UsageOpts } from "./api";
2
+ import { Args, UsageOpts } from "./api.js";
3
3
  export declare const usage: <T extends IObjectOf<any>>(specs: Args<T>, opts?: Partial<UsageOpts>) => string;
4
4
  //# sourceMappingURL=usage.d.ts.map
package/usage.js CHANGED
@@ -1,9 +1,23 @@
1
- import { capitalize, kebab, lengthAnsi, padRight, repeat, SPLIT_ANSI, stringify, wordWrapLines, } from "@thi.ng/strings";
2
- import { DEFAULT_THEME } from "./api";
1
+ import { lengthAnsi } from "@thi.ng/strings/ansi";
2
+ import { capitalize, kebab } from "@thi.ng/strings/case";
3
+ import { padRight } from "@thi.ng/strings/pad-right";
4
+ import { repeat } from "@thi.ng/strings/repeat";
5
+ import { stringify } from "@thi.ng/strings/stringify";
6
+ import { SPLIT_ANSI, wordWrapLines } from "@thi.ng/strings/word-wrap";
7
+ import { DEFAULT_THEME, } from "./api.js";
3
8
  export const usage = (specs, opts = {}) => {
4
- opts = Object.assign({ lineWidth: 80, paramWidth: 32, showDefaults: true, prefix: "", suffix: "", groups: ["flags", "main"] }, opts);
9
+ opts = {
10
+ lineWidth: 80,
11
+ paramWidth: 32,
12
+ showDefaults: true,
13
+ prefix: "",
14
+ suffix: "",
15
+ groups: ["flags", "main"],
16
+ ...opts,
17
+ };
5
18
  const theme = opts.color !== false
6
- ? Object.assign(Object.assign({}, DEFAULT_THEME), opts.color) : {};
19
+ ? { ...DEFAULT_THEME, ...opts.color }
20
+ : {};
7
21
  const indent = repeat(" ", opts.paramWidth);
8
22
  const format = (ids) => ids.map((id) => argUsage(id, specs[id], opts, theme, indent));
9
23
  const sortedIDs = Object.keys(specs).sort();
package/lib/index.js DELETED
@@ -1,292 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var strings$1 = require('@thi.ng/strings');
6
- var checks = require('@thi.ng/checks');
7
- var errors = require('@thi.ng/errors');
8
-
9
- const DEFAULT_THEME = {
10
- default: 95,
11
- hint: 90,
12
- multi: 90,
13
- param: 96,
14
- required: 33,
15
- };
16
- class Tuple {
17
- constructor(value) {
18
- this.value = value;
19
- }
20
- deref() {
21
- return this.value;
22
- }
23
- }
24
-
25
- const coerceString = (x) => x;
26
- const coerceFloat = (x) => checks.isNumericFloat(x)
27
- ? parseFloat(x)
28
- : errors.illegalArgs(`not a numeric value: ${x}`);
29
- const coerceFloats = (xs) => xs.map(coerceFloat);
30
- const coerceHexInt = (x) => checks.isHex(x) ? parseInt(x, 16) : errors.illegalArgs(`not a hex value: ${x}`);
31
- const coerceHexInts = (xs) => xs.map(coerceHexInt);
32
- const coerceInt = (x) => checks.isNumericInt(x) ? parseInt(x) : errors.illegalArgs(`not an integer: ${x}`);
33
- const coerceInts = (xs) => xs.map(coerceInt);
34
- const coerceJson = (x) => JSON.parse(x);
35
- const coerceOneOf = (xs) => (x) => xs.includes(x) ? x : errors.illegalArgs(`invalid option: ${x}`);
36
- function coerceKV(delim = "=", strict = false, multi = false) {
37
- return (pairs) => pairs.reduce((acc, x) => {
38
- const idx = x.indexOf(delim);
39
- strict &&
40
- idx < 1 &&
41
- errors.illegalArgs(`got '${x}', but expected a 'key${delim}value' pair`);
42
- if (idx > 0) {
43
- const id = x.substr(0, idx);
44
- const val = x.substr(idx + 1);
45
- if (multi) {
46
- acc[id] ? acc[id].push(val) : (acc[id] = [val]);
47
- }
48
- else {
49
- acc[id] = val;
50
- }
51
- }
52
- else {
53
- acc[x] = multi ? ["true"] : "true";
54
- }
55
- return acc;
56
- }, {});
57
- }
58
- const coerceTuple = (coerce, size, delim = ",") => (src) => {
59
- const parts = src.split(delim);
60
- parts.length !== size &&
61
- errors.illegalArgs(`got '${src}', but expected a tuple of ${size} values`);
62
- return new Tuple(parts.map(coerce));
63
- };
64
-
65
- const $single = (coerce, hint) => (spec) => (Object.assign({ coerce,
66
- hint, group: "main" }, spec));
67
- const $multi = (coerce, hint) => (spec) => (Object.assign({ hint: $hint(hint, spec.delim), multi: true, coerce, group: "main" }, spec));
68
- const $hint = (hint, delim) => hint + (delim ? `[${delim}..]` : "");
69
- const flag = (spec) => (Object.assign({ flag: true, default: false, group: "flags" }, spec));
70
- const string = $single((x) => x, "STR");
71
- const strings = $multi((x) => x, "STR");
72
- const float = $single(coerceFloat, "NUM");
73
- const hex = $single(coerceHexInt, "HEX");
74
- const int = $single(coerceInt, "INT");
75
- const floats = $multi(coerceFloats, "NUM");
76
- const hexes = $multi(coerceHexInts, "HEX");
77
- const ints = $multi(coerceInts, "INT");
78
- const json = (spec) => (Object.assign({ coerce: coerceJson, hint: "JSON", group: "main" }, spec));
79
- const $desc = (opts, prefix) => `${prefix ? prefix + ": " : ""}${opts.map((x) => `"${x}"`).join(", ")}`;
80
- const oneOf = (opts, spec) => (Object.assign(Object.assign({ coerce: coerceOneOf(opts), hint: "ID", group: "main" }, spec), { desc: $desc(opts, spec.desc) }));
81
- const oneOfMulti = (opts, spec) => (Object.assign(Object.assign({ coerce: (xs) => xs.map(coerceOneOf(opts)), hint: $hint("ID", spec.delim), multi: true, group: "main" }, spec), { desc: $desc(opts, spec.desc) }));
82
- const kvPairs = (spec, delim = "=", strict) => (Object.assign({ coerce: coerceKV(delim, strict), hint: `key${delim}val`, multi: true, group: "main" }, spec));
83
- const kvPairsMulti = (spec, delim = "=", strict) => (Object.assign({ coerce: coerceKV(delim, strict, true), hint: `key${delim}val(s)`, multi: true, group: "main" }, spec));
84
- const tuple = (coerce, size, spec, delim = ",") => (Object.assign({ coerce: coerceTuple(coerce, size, delim), hint: [...strings$1.repeat("N", size)].join(delim), group: "main" }, spec));
85
- const size = (size, spec, delim = "x") => tuple(coerceInt, size, spec, delim);
86
- const vec = (size, spec, delim = ",") => tuple(coerceFloat, size, spec, delim);
87
-
88
- const usage = (specs, opts = {}) => {
89
- opts = Object.assign({ lineWidth: 80, paramWidth: 32, showDefaults: true, prefix: "", suffix: "", groups: ["flags", "main"] }, opts);
90
- const theme = opts.color !== false
91
- ? Object.assign(Object.assign({}, DEFAULT_THEME), opts.color) : {};
92
- const indent = strings$1.repeat(" ", opts.paramWidth);
93
- const format = (ids) => ids.map((id) => argUsage(id, specs[id], opts, theme, indent));
94
- const sortedIDs = Object.keys(specs).sort();
95
- const groups = opts.groups
96
- ? opts.groups
97
- .map((gid) => [
98
- gid,
99
- sortedIDs.filter((id) => specs[id].group === gid),
100
- ])
101
- .filter((g) => !!g[1].length)
102
- : [["options", sortedIDs]];
103
- return [
104
- ...wrap(opts.prefix, opts.lineWidth),
105
- ...groups.map(([gid, ids]) => [
106
- ...(opts.showGroupNames ? [`${strings$1.capitalize(gid)}:\n`] : []),
107
- ...format(ids),
108
- "",
109
- ].join("\n")),
110
- ...wrap(opts.suffix, opts.lineWidth),
111
- ].join("\n");
112
- };
113
- const argUsage = (id, spec, opts, theme, indent) => {
114
- const hint = argHint(spec, theme);
115
- const alias = argAlias(spec, theme, hint);
116
- const name = ansi(`--${strings$1.kebab(id)}`, theme.param);
117
- const params = `${alias}${name}${hint}`;
118
- const isRequired = spec.optional === false && spec.default === undefined;
119
- const prefixes = [];
120
- isRequired && prefixes.push("required");
121
- spec.multi && prefixes.push("multiple");
122
- const body = argPrefix(prefixes, theme, isRequired) +
123
- (spec.desc || "") +
124
- argDefault(spec, opts, theme);
125
- return (strings$1.padRight(opts.paramWidth)(params, strings$1.lengthAnsi(params)) +
126
- wrap(body, opts.lineWidth - opts.paramWidth)
127
- .map((l, i) => (i > 0 ? indent + l : l))
128
- .join("\n"));
129
- };
130
- const argHint = (spec, theme) => spec.hint ? ansi(" " + spec.hint, theme.hint) : "";
131
- const argAlias = (spec, theme, hint) => spec.alias ? `${ansi("-" + spec.alias, theme.param)}${hint}, ` : "";
132
- const argPrefix = (prefixes, theme, isRequired) => prefixes.length
133
- ? ansi(`[${prefixes.join(", ")}] `, isRequired ? theme.required : theme.multi)
134
- : "";
135
- const argDefault = (spec, opts, theme) => opts.showDefaults && spec.default != null && spec.default !== false
136
- ? ansi(` (default: ${strings$1.stringify(true)(spec.defaultHint != undefined
137
- ? spec.defaultHint
138
- : spec.default)})`, theme.default)
139
- : "";
140
- const ansi = (x, col) => col != null ? `\x1b[${col}m${x}\x1b[0m` : x;
141
- const wrap = (str, width) => str
142
- ? strings$1.wordWrapLines(str, {
143
- width,
144
- splitter: strings$1.SPLIT_ANSI,
145
- hard: true,
146
- })
147
- : [];
148
-
149
- const parse = (specs, argv, opts) => {
150
- opts = Object.assign({ start: 2, showUsage: true, help: ["--help", "-h"] }, opts);
151
- try {
152
- return parseOpts(specs, argv, opts);
153
- }
154
- catch (e) {
155
- if (opts.showUsage) {
156
- console.log(e.message + "\n\n" + usage(specs, opts.usageOpts));
157
- }
158
- throw e;
159
- }
160
- };
161
- const parseOpts = (specs, argv, opts) => {
162
- const aliases = aliasIndex(specs);
163
- const acc = {};
164
- let id;
165
- let spec;
166
- let i = opts.start;
167
- for (; i < argv.length;) {
168
- const a = argv[i];
169
- if (!id) {
170
- if (opts.help.includes(a)) {
171
- console.log(usage(specs, opts.usageOpts));
172
- return;
173
- }
174
- const state = parseKey(specs, aliases, acc, a);
175
- id = state.id;
176
- spec = state.spec;
177
- i = i + ~~(state.state < 2);
178
- if (state.state)
179
- break;
180
- }
181
- else {
182
- if (parseValue(spec, acc, id, a))
183
- break;
184
- id = null;
185
- i++;
186
- }
187
- }
188
- id && errors.illegalArgs(`missing value for: --${id}`);
189
- return {
190
- result: processResults(specs, acc),
191
- index: i,
192
- rest: argv.slice(i),
193
- done: i >= argv.length,
194
- };
195
- };
196
- const aliasIndex = (specs) => Object.entries(specs).reduce((acc, [k, v]) => (v.alias ? ((acc[v.alias] = k), acc) : acc), {});
197
- const parseKey = (specs, aliases, acc, a) => {
198
- if (a[0] === "-") {
199
- let id;
200
- if (a[1] === "-") {
201
- if (a === "--")
202
- return { state: 1 };
203
- id = strings$1.camel(a.substr(2));
204
- }
205
- else {
206
- id = aliases[a.substr(1)];
207
- !id && errors.illegalArgs(`unknown option: ${a}`);
208
- }
209
- const spec = specs[id];
210
- !spec && errors.illegalArgs(id);
211
- if (spec.flag) {
212
- acc[id] = true;
213
- id = undefined;
214
- if (spec.fn && !spec.fn("true"))
215
- return { state: 1, spec };
216
- }
217
- return { state: 0, id, spec };
218
- }
219
- return { state: 2 };
220
- };
221
- const parseValue = (spec, acc, id, a) => {
222
- /^-[a-z]/i.test(a) && errors.illegalArgs(`missing value for: --${id}`);
223
- if (spec.multi) {
224
- checks.isArray(acc[id]) ? acc[id].push(a) : (acc[id] = [a]);
225
- }
226
- else {
227
- acc[id] = a;
228
- }
229
- return spec.fn && !spec.fn(a);
230
- };
231
- const processResults = (specs, acc) => {
232
- let spec;
233
- for (let id in specs) {
234
- spec = specs[id];
235
- if (acc[id] === undefined) {
236
- if (spec.default !== undefined) {
237
- acc[id] = spec.default;
238
- }
239
- else if (spec.optional === false) {
240
- errors.illegalArgs(`missing arg: --${id}`);
241
- }
242
- }
243
- else if (spec.coerce) {
244
- coerceValue(spec, acc, id);
245
- }
246
- }
247
- return acc;
248
- };
249
- const coerceValue = (spec, acc, id) => {
250
- try {
251
- if (spec.multi && spec.delim) {
252
- acc[id] = acc[id].reduce((acc, x) => (acc.push(...x.split(spec.delim)), acc), []);
253
- }
254
- acc[id] = spec.coerce(acc[id]);
255
- }
256
- catch (e) {
257
- throw new Error(`arg --${id}: ${e.message}`);
258
- }
259
- };
260
-
261
- exports.DEFAULT_THEME = DEFAULT_THEME;
262
- exports.Tuple = Tuple;
263
- exports.coerceFloat = coerceFloat;
264
- exports.coerceFloats = coerceFloats;
265
- exports.coerceHexInt = coerceHexInt;
266
- exports.coerceHexInts = coerceHexInts;
267
- exports.coerceInt = coerceInt;
268
- exports.coerceInts = coerceInts;
269
- exports.coerceJson = coerceJson;
270
- exports.coerceKV = coerceKV;
271
- exports.coerceOneOf = coerceOneOf;
272
- exports.coerceString = coerceString;
273
- exports.coerceTuple = coerceTuple;
274
- exports.flag = flag;
275
- exports.float = float;
276
- exports.floats = floats;
277
- exports.hex = hex;
278
- exports.hexes = hexes;
279
- exports.int = int;
280
- exports.ints = ints;
281
- exports.json = json;
282
- exports.kvPairs = kvPairs;
283
- exports.kvPairsMulti = kvPairsMulti;
284
- exports.oneOf = oneOf;
285
- exports.oneOfMulti = oneOfMulti;
286
- exports.parse = parse;
287
- exports.size = size;
288
- exports.string = string;
289
- exports.strings = strings;
290
- exports.tuple = tuple;
291
- exports.usage = usage;
292
- exports.vec = vec;
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../api.js","../coerce.js","../args.js","../usage.js","../parse.js"],"sourcesContent":null,"names":["isNumericFloat","illegalArgs","isHex","isNumericInt","repeat","capitalize","kebab","padRight","lengthAnsi","stringify","wordWrapLines","SPLIT_ANSI","camel","isArray"],"mappings":"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"}
package/lib/index.umd.js DELETED
@@ -1 +0,0 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@thi.ng/strings"),require("@thi.ng/checks"),require("@thi.ng/errors")):"function"==typeof define&&define.amd?define(["exports","@thi.ng/strings","@thi.ng/checks","@thi.ng/errors"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).thi=e.thi||{},e.thi.ng=e.thi.ng||{},e.thi.ng.args={}),e.thi.ng.strings,e.thi.ng.checks,e.thi.ng.errors)}(this,(function(e,t,i,s){"use strict";const n={default:95,hint:90,multi:90,param:96,required:33};class r{constructor(e){this.value=e}deref(){return this.value}}const a=e=>i.isNumericFloat(e)?parseFloat(e):s.illegalArgs(`not a numeric value: ${e}`),l=e=>e.map(a),o=e=>i.isHex(e)?parseInt(e,16):s.illegalArgs(`not a hex value: ${e}`),c=e=>e.map(o),u=e=>i.isNumericInt(e)?parseInt(e):s.illegalArgs(`not an integer: ${e}`),g=e=>e.map(u),p=e=>JSON.parse(e),h=e=>t=>e.includes(t)?t:s.illegalArgs(`invalid option: ${t}`);function f(e="=",t=!1,i=!1){return n=>n.reduce(((n,r)=>{const a=r.indexOf(e);if(t&&a<1&&s.illegalArgs(`got '${r}', but expected a 'key${e}value' pair`),a>0){const e=r.substr(0,a),t=r.substr(a+1);i?n[e]?n[e].push(t):n[e]=[t]:n[e]=t}else n[r]=i?["true"]:"true";return n}),{})}const d=(e,t,i=",")=>n=>{const a=n.split(i);return a.length!==t&&s.illegalArgs(`got '${n}', but expected a tuple of ${t} values`),new r(a.map(e))},m=(e,t)=>i=>Object.assign({coerce:e,hint:t,group:"main"},i),b=(e,t)=>i=>Object.assign({hint:$(t,i.delim),multi:!0,coerce:e,group:"main"},i),$=(e,t)=>e+(t?`[${t}..]`:""),O=m((e=>e),"STR"),j=b((e=>e),"STR"),v=m(a,"NUM"),x=m(o,"HEX"),A=m(u,"INT"),k=b(l,"NUM"),y=b(c,"HEX"),I=b(g,"INT"),w=(e,t)=>`${t?t+": ":""}${e.map((e=>`"${e}"`)).join(", ")}`,N=(e,i,s,n=",")=>Object.assign({coerce:d(e,i,n),hint:[...t.repeat("N",i)].join(n),group:"main"},s),T=(e,i={})=>{const s=!1!==(i=Object.assign({lineWidth:80,paramWidth:32,showDefaults:!0,prefix:"",suffix:"",groups:["flags","main"]},i)).color?Object.assign(Object.assign({},n),i.color):{},r=t.repeat(" ",i.paramWidth),a=t=>t.map((t=>W(t,e[t],i,s,r))),l=Object.keys(e).sort(),o=i.groups?i.groups.map((t=>[t,l.filter((i=>e[i].group===t))])).filter((e=>!!e[1].length)):[["options",l]];return[...D(i.prefix,i.lineWidth),...o.map((([e,s])=>[...i.showGroupNames?[`${t.capitalize(e)}:\n`]:[],...a(s),""].join("\n"))),...D(i.suffix,i.lineWidth)].join("\n")},W=(e,i,s,n,r)=>{const a=H(i,n),l=`${S(i,n,a)}${M(`--${t.kebab(e)}`,n.param)}${a}`,o=!1===i.optional&&void 0===i.default,c=[];o&&c.push("required"),i.multi&&c.push("multiple");const u=q(c,n,o)+(i.desc||"")+E(i,s,n);return t.padRight(s.paramWidth)(l,t.lengthAnsi(l))+D(u,s.lineWidth-s.paramWidth).map(((e,t)=>t>0?r+e:e)).join("\n")},H=(e,t)=>e.hint?M(" "+e.hint,t.hint):"",S=(e,t,i)=>e.alias?`${M("-"+e.alias,t.param)}${i}, `:"",q=(e,t,i)=>e.length?M(`[${e.join(", ")}] `,i?t.required:t.multi):"",E=(e,i,s)=>i.showDefaults&&null!=e.default&&!1!==e.default?M(` (default: ${t.stringify(!0)(null!=e.defaultHint?e.defaultHint:e.default)})`,s.default):"",M=(e,t)=>null!=t?`[${t}m${e}`:e,D=(e,i)=>e?t.wordWrapLines(e,{width:i,splitter:t.SPLIT_ANSI,hard:!0}):[],F=(e,t,i)=>{const n=U(e),r={};let a,l,o=i.start;for(;o<t.length;){const s=t[o];if(a){if(_(l,r,a,s))break;a=null,o++}else{if(i.help.includes(s))return void console.log(T(e,i.usageOpts));const t=P(e,n,r,s);if(a=t.id,l=t.spec,o+=~~(t.state<2),t.state)break}}return a&&s.illegalArgs(`missing value for: --${a}`),{result:z(e,r),index:o,rest:t.slice(o),done:o>=t.length}},U=e=>Object.entries(e).reduce(((e,[t,i])=>i.alias?(e[i.alias]=t,e):e),{}),P=(e,i,n,r)=>{if("-"===r[0]){let a;if("-"===r[1]){if("--"===r)return{state:1};a=t.camel(r.substr(2))}else a=i[r.substr(1)],!a&&s.illegalArgs(`unknown option: ${r}`);const l=e[a];return!l&&s.illegalArgs(a),l.flag&&(n[a]=!0,a=void 0,l.fn&&!l.fn("true"))?{state:1,spec:l}:{state:0,id:a,spec:l}}return{state:2}},_=(e,t,n,r)=>(/^-[a-z]/i.test(r)&&s.illegalArgs(`missing value for: --${n}`),e.multi?i.isArray(t[n])?t[n].push(r):t[n]=[r]:t[n]=r,e.fn&&!e.fn(r)),z=(e,t)=>{let i;for(let n in e)i=e[n],void 0===t[n]?void 0!==i.default?t[n]=i.default:!1===i.optional&&s.illegalArgs(`missing arg: --${n}`):i.coerce&&J(i,t,n);return t},J=(e,t,i)=>{try{e.multi&&e.delim&&(t[i]=t[i].reduce(((t,i)=>(t.push(...i.split(e.delim)),t)),[])),t[i]=e.coerce(t[i])}catch(e){throw new Error(`arg --${i}: ${e.message}`)}};e.DEFAULT_THEME=n,e.Tuple=r,e.coerceFloat=a,e.coerceFloats=l,e.coerceHexInt=o,e.coerceHexInts=c,e.coerceInt=u,e.coerceInts=g,e.coerceJson=p,e.coerceKV=f,e.coerceOneOf=h,e.coerceString=e=>e,e.coerceTuple=d,e.flag=e=>Object.assign({flag:!0,default:!1,group:"flags"},e),e.float=v,e.floats=k,e.hex=x,e.hexes=y,e.int=A,e.ints=I,e.json=e=>Object.assign({coerce:p,hint:"JSON",group:"main"},e),e.kvPairs=(e,t="=",i)=>Object.assign({coerce:f(t,i),hint:`key${t}val`,multi:!0,group:"main"},e),e.kvPairsMulti=(e,t="=",i)=>Object.assign({coerce:f(t,i,!0),hint:`key${t}val(s)`,multi:!0,group:"main"},e),e.oneOf=(e,t)=>Object.assign(Object.assign({coerce:h(e),hint:"ID",group:"main"},t),{desc:w(e,t.desc)}),e.oneOfMulti=(e,t)=>Object.assign(Object.assign({coerce:t=>t.map(h(e)),hint:$("ID",t.delim),multi:!0,group:"main"},t),{desc:w(e,t.desc)}),e.parse=(e,t,i)=>{i=Object.assign({start:2,showUsage:!0,help:["--help","-h"]},i);try{return F(e,t,i)}catch(t){throw i.showUsage&&console.log(t.message+"\n\n"+T(e,i.usageOpts)),t}},e.size=(e,t,i="x")=>N(u,e,t,i),e.string=O,e.strings=j,e.tuple=N,e.usage=T,e.vec=(e,t,i=",")=>N(a,e,t,i),Object.defineProperty(e,"__esModule",{value:!0})}));
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.umd.js","sources":["../api.js","../coerce.js","../args.js","../usage.js","../parse.js"],"sourcesContent":null,"names":["isNumericFloat","illegalArgs","isHex","isNumericInt","repeat","capitalize","kebab","padRight","lengthAnsi","stringify","wordWrapLines","SPLIT_ANSI","camel","isArray"],"mappings":"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"}