@rickosborne/clamp 2025.1.7

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.
Files changed (96) hide show
  1. package/README.md +216 -0
  2. package/cjs/index.js +27 -0
  3. package/cjs/index.js.map +1 -0
  4. package/cjs/package.json +6 -0
  5. package/cjs/ts/boolean-param.js +45 -0
  6. package/cjs/ts/boolean-param.js.map +1 -0
  7. package/cjs/ts/command-params.js +160 -0
  8. package/cjs/ts/command-params.js.map +1 -0
  9. package/cjs/ts/common.js +3 -0
  10. package/cjs/ts/common.js.map +1 -0
  11. package/cjs/ts/date-param.js +38 -0
  12. package/cjs/ts/date-param.js.map +1 -0
  13. package/cjs/ts/file-param.js +43 -0
  14. package/cjs/ts/file-param.js.map +1 -0
  15. package/cjs/ts/help-for-param.js +33 -0
  16. package/cjs/ts/help-for-param.js.map +1 -0
  17. package/cjs/ts/label-for-param.js +18 -0
  18. package/cjs/ts/label-for-param.js.map +1 -0
  19. package/cjs/ts/number-param.js +56 -0
  20. package/cjs/ts/number-param.js.map +1 -0
  21. package/cjs/ts/param-handler.js +28 -0
  22. package/cjs/ts/param-handler.js.map +1 -0
  23. package/cjs/ts/string-param.js +34 -0
  24. package/cjs/ts/string-param.js.map +1 -0
  25. package/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  26. package/esm/index.js +11 -0
  27. package/esm/index.js.map +1 -0
  28. package/esm/package.json +6 -0
  29. package/esm/ts/boolean-param.js +40 -0
  30. package/esm/ts/boolean-param.js.map +1 -0
  31. package/esm/ts/command-params.js +154 -0
  32. package/esm/ts/command-params.js.map +1 -0
  33. package/esm/ts/common.js +2 -0
  34. package/esm/ts/common.js.map +1 -0
  35. package/esm/ts/date-param.js +32 -0
  36. package/esm/ts/date-param.js.map +1 -0
  37. package/esm/ts/file-param.js +37 -0
  38. package/esm/ts/file-param.js.map +1 -0
  39. package/esm/ts/help-for-param.js +29 -0
  40. package/esm/ts/help-for-param.js.map +1 -0
  41. package/esm/ts/label-for-param.js +13 -0
  42. package/esm/ts/label-for-param.js.map +1 -0
  43. package/esm/ts/number-param.js +51 -0
  44. package/esm/ts/number-param.js.map +1 -0
  45. package/esm/ts/param-handler.js +23 -0
  46. package/esm/ts/param-handler.js.map +1 -0
  47. package/esm/ts/string-param.js +28 -0
  48. package/esm/ts/string-param.js.map +1 -0
  49. package/esm/tsconfig.module.tsbuildinfo +1 -0
  50. package/package.json +51 -0
  51. package/tsdoc-metadata.json +11 -0
  52. package/types/index.d.ts +11 -0
  53. package/types/index.d.ts.map +1 -0
  54. package/types/index.js +27 -0
  55. package/types/index.js.map +1 -0
  56. package/types/ts/boolean-param.d.ts +50 -0
  57. package/types/ts/boolean-param.d.ts.map +1 -0
  58. package/types/ts/boolean-param.js +44 -0
  59. package/types/ts/boolean-param.js.map +1 -0
  60. package/types/ts/command-params.d.ts +44 -0
  61. package/types/ts/command-params.d.ts.map +1 -0
  62. package/types/ts/command-params.js +158 -0
  63. package/types/ts/command-params.js.map +1 -0
  64. package/types/ts/common.d.ts +63 -0
  65. package/types/ts/common.d.ts.map +1 -0
  66. package/types/ts/common.js +3 -0
  67. package/types/ts/common.js.map +1 -0
  68. package/types/ts/date-param.d.ts +34 -0
  69. package/types/ts/date-param.d.ts.map +1 -0
  70. package/types/ts/date-param.js +37 -0
  71. package/types/ts/date-param.js.map +1 -0
  72. package/types/ts/file-param.d.ts +50 -0
  73. package/types/ts/file-param.d.ts.map +1 -0
  74. package/types/ts/file-param.js +42 -0
  75. package/types/ts/file-param.js.map +1 -0
  76. package/types/ts/help-for-param.d.ts +6 -0
  77. package/types/ts/help-for-param.d.ts.map +1 -0
  78. package/types/ts/help-for-param.js +33 -0
  79. package/types/ts/help-for-param.js.map +1 -0
  80. package/types/ts/label-for-param.d.ts +6 -0
  81. package/types/ts/label-for-param.d.ts.map +1 -0
  82. package/types/ts/label-for-param.js +17 -0
  83. package/types/ts/label-for-param.js.map +1 -0
  84. package/types/ts/number-param.d.ts +43 -0
  85. package/types/ts/number-param.d.ts.map +1 -0
  86. package/types/ts/number-param.js +56 -0
  87. package/types/ts/number-param.js.map +1 -0
  88. package/types/ts/param-handler.d.ts +6 -0
  89. package/types/ts/param-handler.d.ts.map +1 -0
  90. package/types/ts/param-handler.js +27 -0
  91. package/types/ts/param-handler.js.map +1 -0
  92. package/types/ts/string-param.d.ts +30 -0
  93. package/types/ts/string-param.d.ts.map +1 -0
  94. package/types/ts/string-param.js +33 -0
  95. package/types/ts/string-param.js.map +1 -0
  96. package/types/tsconfig.types.tsbuildinfo +1 -0
package/README.md ADDED
@@ -0,0 +1,216 @@
1
+ # @rickosborne/clamp
2
+
3
+ Yet another command-line parameter handling tool.
4
+
5
+ Built on:
6
+
7
+ - [@rickosborne/typical](https://www.npmjs.com/package/@rickosborne/typical) for types
8
+ - [@rickosborne/guard](https://www.npmjs.com/package/@rickosborne/guard) for guards
9
+ - [@rickosborne/foundation](https://www.npmjs.com/package/@rickosborne/foundation) for basic data structures and algorithms
10
+ - [@rickosborne/term](https://www.npmjs.com/package/@rickosborne/term) for console/terminal tools.
11
+
12
+ ***
13
+
14
+ ## API
15
+
16
+ ### Functions
17
+
18
+ #### commandParams
19
+
20
+ <a id="api-commandparams"></a>
21
+
22
+ ```typescript
23
+ commandParams: <Spec extends CommandParamsSpec>(spec: Spec, { args, ignoreUnknown, onError, }?: {
24
+ args?: string[];
25
+ ignoreUnknown?: boolean;
26
+ onError?: (error: Error) => void;
27
+ }) => CommandParamsReturn<Spec>
28
+ ```
29
+
30
+ Parse the (maybe-given) command-line arguments according to the given param specs and construct a return type of the converted values.
31
+
32
+
33
+ ### TypeAliases
34
+
35
+ #### BooleanCommandParam
36
+
37
+ <a id="api-booleancommandparam"></a>
38
+
39
+ ```typescript
40
+ type BooleanCommandParam = CommandParamBase & {
41
+ falses?: string[];
42
+ falseText?: string;
43
+ parse?: (this: void, text: string, param: BooleanCommandParam) => boolean;
44
+ placeholder?: undefined;
45
+ trues?: string[];
46
+ trueText?: string;
47
+ type: typeof Boolean;
48
+ };
49
+ ```
50
+
51
+ A command-line parameter which will be converted to a Boolean.
52
+
53
+
54
+ #### CommandParam
55
+
56
+ <a id="api-commandparam"></a>
57
+
58
+ ```typescript
59
+ type CommandParam = StringCommandParam | NumberCommandParam | BooleanCommandParam | FileCommandParam | DateCommandParam;
60
+ ```
61
+
62
+ One of the built-in param types.
63
+
64
+
65
+ #### CommandParamBase
66
+
67
+ <a id="api-commandparambase"></a>
68
+
69
+ ```typescript
70
+ type CommandParamBase = Either<CommandParamWithNames, PositionalCommandParam> & Partial<OptionalParam> & Partial<RepeatedParam> & DescribedParam;
71
+ ```
72
+
73
+ Mixin for any type of command-line parameter.
74
+
75
+
76
+ #### CommandParamParser
77
+
78
+ <a id="api-commandparamparser"></a>
79
+
80
+ ```typescript
81
+ type CommandParamParser<Param extends CommandParam, Return> = (text: string, param: Param) => Return;
82
+ ```
83
+
84
+ A parser function for a specific type of param.
85
+
86
+
87
+ #### CommandParamReturn
88
+
89
+ <a id="api-commandparamreturn"></a>
90
+
91
+ ```typescript
92
+ type CommandParamReturn<Param extends CommandParam> = Param extends HasCommandParamParser<Param, infer Return> ? IfRepeated<Param, Return> : Param["type"] extends typeof Boolean ? IfOptional<Param, IfRepeated<Param, boolean>> : Param["type"] extends typeof Date ? IfOptional<Param, IfRepeated<Param, Date>> : Param["type"] extends typeof Number ? IfOptional<Param, IfRepeated<Param, number>> : Param["type"] extends "file" ? IfOptional<Param, IfRepeated<Param, FileArg>> : Param["type"] extends typeof String ? IfOptional<Param, IfRepeated<Param, string>> : undefined extends Param["type"] ? IfOptional<Param, IfRepeated<Param, string>> : never;
93
+ ```
94
+
95
+ Computed return type for a param.
96
+
97
+
98
+ #### CommandParamsReturn
99
+
100
+ <a id="api-commandparamsreturn"></a>
101
+
102
+ ```typescript
103
+ type CommandParamsReturn<Params extends object> = {
104
+ [K in keyof Params]: Params[K] extends CommandParam ? CommandParamReturn<Params[K]> : never;
105
+ };
106
+ ```
107
+
108
+ Computed return (Record) type for a Record of params.
109
+
110
+
111
+ #### DateCommandParam
112
+
113
+ <a id="api-datecommandparam"></a>
114
+
115
+ ```typescript
116
+ type DateCommandParam = CommandParamBase & ParseLocalDateConfig & {
117
+ maximum?: Date;
118
+ minimum?: Date;
119
+ parse?: (this: void, text: string, param: DateCommandParam) => Date;
120
+ type: typeof Date;
121
+ };
122
+ ```
123
+
124
+ Command-line parameter which can accept a date (and optionally time) value.
125
+
126
+
127
+ #### DescribedParam
128
+
129
+ <a id="api-describedparam"></a>
130
+
131
+ ```typescript
132
+ type DescribedParam = {
133
+ help?: string;
134
+ placeholder?: string;
135
+ };
136
+ ```
137
+
138
+ Mixin of properties which can be used to build `--help` text.
139
+
140
+
141
+ #### FileArg
142
+
143
+ <a id="api-filearg"></a>
144
+
145
+ ```typescript
146
+ type FileArg = {
147
+ filePath: string;
148
+ stats: Stats | undefined;
149
+ };
150
+ ```
151
+
152
+ File argument resolved from a file command-line parameter.
153
+
154
+
155
+ #### FileCommandParam
156
+
157
+ <a id="api-filecommandparam"></a>
158
+
159
+ ```typescript
160
+ type FileCommandParam = CommandParamBase & {
161
+ existing?: boolean;
162
+ parse?: (this: void, text: string, param: FileCommandParam) => FileArg;
163
+ path?: string;
164
+ type: "file";
165
+ };
166
+ ```
167
+
168
+ A command-line parameter which references a file.
169
+
170
+
171
+ #### NumberCommandParam
172
+
173
+ <a id="api-numbercommandparam"></a>
174
+
175
+ ```typescript
176
+ type NumberCommandParam = CommandParamBase & {
177
+ integer?: boolean;
178
+ maximum?: number;
179
+ minimum?: number;
180
+ parse?: (this: void, text: string, param: NumberCommandParam) => number;
181
+ radix?: number;
182
+ type: typeof Number;
183
+ };
184
+ ```
185
+
186
+ A parameter which should be converted into a number.
187
+
188
+
189
+ #### PositionalCommandParam
190
+
191
+ <a id="api-positionalcommandparam"></a>
192
+
193
+ ```typescript
194
+ type PositionalCommandParam = {
195
+ positional: true;
196
+ };
197
+ ```
198
+
199
+ A parameter which accepts positional values.
200
+
201
+
202
+ #### StringCommandParam
203
+
204
+ <a id="api-stringcommandparam"></a>
205
+
206
+ ```typescript
207
+ type StringCommandParam = CommandParamBase & {
208
+ parse?: (this: void, text: string, param: StringCommandParam) => string;
209
+ trim?: boolean;
210
+ type?: typeof String;
211
+ };
212
+ ```
213
+
214
+ A parameter which accepts a text value.
215
+
216
+
package/cjs/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ts/boolean-param.js"), exports);
18
+ __exportStar(require("./ts/command-params.js"), exports);
19
+ __exportStar(require("./ts/common.js"), exports);
20
+ __exportStar(require("./ts/date-param.js"), exports);
21
+ __exportStar(require("./ts/file-param.js"), exports);
22
+ __exportStar(require("./ts/help-for-param.js"), exports);
23
+ __exportStar(require("./ts/label-for-param.js"), exports);
24
+ __exportStar(require("./ts/number-param.js"), exports);
25
+ __exportStar(require("./ts/param-handler.js"), exports);
26
+ __exportStar(require("./ts/string-param.js"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,yDAAuC;AACvC,iDAA+B;AAC/B,qDAAmC;AACnC,qDAAmC;AACnC,yDAAuC;AACvC,0DAAwC;AACxC,uDAAqC;AACrC,wDAAsC;AACtC,uDAAqC"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "engines": {
3
+ "node": ">=14"
4
+ },
5
+ "type": "commonjs"
6
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.booleanParamHandler = exports.parseBooleanArg = exports.FALSES = exports.TRUES = void 0;
4
+ const label_for_param_js_1 = require("./label-for-param.js");
5
+ /**
6
+ * Default possible values for true.
7
+ * @internal
8
+ */
9
+ exports.TRUES = Object.freeze(["t", "true", "1", "y", "yes"]);
10
+ // noinspection SpellCheckingInspection
11
+ /**
12
+ * Default possible values for false.
13
+ * @internal
14
+ */
15
+ exports.FALSES = Object.freeze(["f", "false", "0", "n", "no"]);
16
+ /**
17
+ * @internal
18
+ */
19
+ const parseBooleanArg = (text, param) => {
20
+ var _a, _b;
21
+ const lower = text.toLocaleLowerCase();
22
+ const trueValues = (_a = param.trues) !== null && _a !== void 0 ? _a : exports.TRUES;
23
+ if (trueValues.includes(lower)) {
24
+ return true;
25
+ }
26
+ const falseValues = (_b = param.falses) !== null && _b !== void 0 ? _b : exports.FALSES;
27
+ if (falseValues.includes(lower)) {
28
+ return false;
29
+ }
30
+ throw new RangeError(`${(0, label_for_param_js_1.labelForParam)(param)}: invalid value`);
31
+ };
32
+ exports.parseBooleanArg = parseBooleanArg;
33
+ /**
34
+ * @internal
35
+ */
36
+ exports.booleanParamHandler = {
37
+ matchesParam(param) {
38
+ return param.type === Boolean;
39
+ },
40
+ parseArg: exports.parseBooleanArg,
41
+ placeholderForParam() {
42
+ return undefined;
43
+ },
44
+ };
45
+ //# sourceMappingURL=boolean-param.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean-param.js","sourceRoot":"","sources":["../../../ts/boolean-param.ts"],"names":[],"mappings":";;;AACA,6DAAqD;AAErD;;;GAGG;AACU,QAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAE,CAAC,CAAC;AAErE,uCAAuC;AACvC;;;GAGG;AACU,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAE,CAAC,CAAC;AAkCtE;;GAEG;AACI,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,KAA0B,EAAW,EAAE;;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,MAAA,KAAK,CAAC,KAAK,mCAAI,aAAK,CAAC;IACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,WAAW,GAAG,MAAA,KAAK,CAAC,MAAM,mCAAI,cAAM,CAAC;IAC3C,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,IAAI,UAAU,CAAC,GAAI,IAAA,kCAAa,EAAC,KAAK,CAAE,iBAAiB,CAAC,CAAC;AAClE,CAAC,CAAC;AAXW,QAAA,eAAe,mBAW1B;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAA+C;IAC9E,YAAY,CAAC,KAAwB;QACpC,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;IAC/B,CAAC;IACD,QAAQ,EAAE,uBAAe;IACzB,mBAAmB;QAClB,OAAO,SAAS,CAAC;IAClB,CAAC;CACD,CAAC"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commandParams = void 0;
4
+ const guard_1 = require("@rickosborne/guard");
5
+ const boolean_param_js_1 = require("./boolean-param.js");
6
+ const label_for_param_js_1 = require("./label-for-param.js");
7
+ const param_handler_js_1 = require("./param-handler.js");
8
+ const toReturnType = (text, param) => {
9
+ var _a;
10
+ const paramHandler = (0, param_handler_js_1.findParamHandler)(param);
11
+ const parser = ((_a = param.parse) !== null && _a !== void 0 ? _a : paramHandler.parseArg);
12
+ if (parser != null) {
13
+ return parser(text, param);
14
+ }
15
+ throw new Error(`Unhandled param type: ${String(param.type)}`);
16
+ };
17
+ /**
18
+ * Parse the (maybe-given) command-line arguments according to the
19
+ * given param specs and construct a return type of the converted values.
20
+ */
21
+ const commandParams = (spec, { args = process.argv.slice(2), ignoreUnknown, onError, } = {}) => {
22
+ var _a, _b, _c, _d, _e, _f, _g;
23
+ const result = {};
24
+ const positionals = Object.entries(spec)
25
+ .filter(([, s]) => s.positional === true)
26
+ .map(([key, s]) => ({ key, spec: s }));
27
+ if (positionals.length > 1) {
28
+ throw new Error(`Too many positionals: ${positionals.map(({ key }) => key).join(" ")}`);
29
+ }
30
+ const positional = positionals.shift();
31
+ let onlyPositionalsRemain = false;
32
+ try {
33
+ while (args.length > 0) {
34
+ const arg = args.shift();
35
+ let param;
36
+ let resultKey;
37
+ let typedValue;
38
+ if (arg === "--" && !onlyPositionalsRemain) {
39
+ onlyPositionalsRemain = true;
40
+ continue;
41
+ }
42
+ if (onlyPositionalsRemain || !arg.startsWith("-")) {
43
+ if (positional == null) {
44
+ // noinspection ExceptionCaughtLocallyJS
45
+ throw new Error(`Unexpected positional: ${JSON.stringify(arg)}`);
46
+ }
47
+ param = positional.spec;
48
+ resultKey = positional.key;
49
+ typedValue = toReturnType(arg, positional.spec);
50
+ }
51
+ else {
52
+ let no = false;
53
+ let name;
54
+ if (arg.startsWith("--no-")) {
55
+ name = arg.substring(5);
56
+ no = true;
57
+ }
58
+ else if (arg.startsWith("--")) {
59
+ name = arg.substring(2);
60
+ }
61
+ else if (arg.startsWith("-no-")) {
62
+ name = arg.substring(4);
63
+ no = true;
64
+ }
65
+ else {
66
+ name = arg.substring(1);
67
+ }
68
+ let suffix;
69
+ if (name.includes("=")) {
70
+ [name, suffix] = name.split("=", 2);
71
+ }
72
+ const specs = Object.entries(spec)
73
+ .filter(([n, s]) => { var _a, _b; return "name" in s && s.name === name || ("names" in s && ((_b = (_a = s.names) === null || _a === void 0 ? void 0 : _a.includes(name)) !== null && _b !== void 0 ? _b : false)) || n === name; });
74
+ if (specs.length < 1) {
75
+ if (ignoreUnknown) {
76
+ continue;
77
+ }
78
+ // noinspection ExceptionCaughtLocallyJS
79
+ throw new Error(`Unexpected arg: ${JSON.stringify(name)}`);
80
+ }
81
+ if (specs.length > 1) {
82
+ // noinspection ExceptionCaughtLocallyJS
83
+ throw new Error(`More than one matching spec: ${name}`);
84
+ }
85
+ [resultKey, param] = specs[0];
86
+ (0, guard_1.assertDefined)(param, `param: ${name}`);
87
+ let stringValue;
88
+ if (param.type === Boolean) {
89
+ if (no) {
90
+ if (suffix != null) {
91
+ // noinspection ExceptionCaughtLocallyJS
92
+ throw new Error(`Combo of "no" plus "=" does not make any sense for ${(0, label_for_param_js_1.labelForParam)(param)}`);
93
+ }
94
+ stringValue = (_c = (_a = param.falseText) !== null && _a !== void 0 ? _a : (_b = param.falses) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : boolean_param_js_1.FALSES[0];
95
+ }
96
+ else {
97
+ stringValue = (_f = (_d = suffix !== null && suffix !== void 0 ? suffix : param.trueText) !== null && _d !== void 0 ? _d : (_e = param.trues) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : boolean_param_js_1.TRUES[0];
98
+ }
99
+ }
100
+ else if (no) {
101
+ // noinspection ExceptionCaughtLocallyJS
102
+ throw new Error(`"no" does not make sense for ${(0, label_for_param_js_1.labelForParam)(param)}`);
103
+ }
104
+ else {
105
+ stringValue = suffix !== null && suffix !== void 0 ? suffix : args.shift();
106
+ }
107
+ (0, guard_1.assertDefined)(stringValue, () => `value for ${(0, label_for_param_js_1.labelForParam)(param)}`);
108
+ typedValue = toReturnType(stringValue, param);
109
+ }
110
+ if (param == null || resultKey == null) {
111
+ if (ignoreUnknown) {
112
+ continue;
113
+ }
114
+ // noinspection ExceptionCaughtLocallyJS
115
+ throw new Error(`Unexpected arg: ${JSON.stringify(arg)}`);
116
+ }
117
+ (0, guard_1.assertDefined)(typedValue, `typedValue for ${resultKey}`);
118
+ const existing = result[resultKey];
119
+ if (param.multiple === true) {
120
+ const values = existing !== null && existing !== void 0 ? existing : [];
121
+ if (!Array.isArray(values)) {
122
+ // noinspection ExceptionCaughtLocallyJS
123
+ throw new Error(`Expected an array: ${resultKey}`);
124
+ }
125
+ (_g = result[resultKey]) !== null && _g !== void 0 ? _g : (result[resultKey] = values);
126
+ values.push(typedValue);
127
+ }
128
+ else {
129
+ if (existing != null) {
130
+ // noinspection ExceptionCaughtLocallyJS
131
+ throw new Error(`Too many ${(0, label_for_param_js_1.labelForParam)(param)}: ${JSON.stringify(existing)} ${JSON.stringify(arg)}`);
132
+ }
133
+ result[resultKey] = typedValue;
134
+ }
135
+ }
136
+ const requiredKeys = Object.entries(spec)
137
+ .filter(([, s]) => s.optional !== true)
138
+ .map(([key]) => key);
139
+ const missing = requiredKeys.filter((key) => !(key in result));
140
+ if (missing.length > 0) {
141
+ const message = missing.map((key) => (0, label_for_param_js_1.labelForParam)(spec[key])).join(" ");
142
+ // noinspection ExceptionCaughtLocallyJS
143
+ throw new Error(`Missing required params: ${message}`);
144
+ }
145
+ }
146
+ catch (err) {
147
+ const error = err instanceof Error ? err : new Error("Unknown error");
148
+ if (onError != null) {
149
+ onError(error);
150
+ return undefined;
151
+ }
152
+ else {
153
+ console.error(error.message);
154
+ process.exit(1);
155
+ }
156
+ }
157
+ return result;
158
+ };
159
+ exports.commandParams = commandParams;
160
+ //# sourceMappingURL=command-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-params.js","sourceRoot":"","sources":["../../../ts/command-params.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../ts/common.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dateParamHandler = exports.isDateParam = exports.parseDateArg = void 0;
4
+ const foundation_1 = require("@rickosborne/foundation");
5
+ const label_for_param_js_1 = require("./label-for-param.js");
6
+ /**
7
+ * @internal
8
+ */
9
+ const parseDateArg = (text, param) => {
10
+ const date = (0, foundation_1.parseLocalDate)(text, param);
11
+ if (param.minimum != null && date < param.minimum) {
12
+ throw new RangeError(`${(0, label_for_param_js_1.labelForParam)(param)}: minimum=${param.minimum.toISOString()}`);
13
+ }
14
+ if (param.maximum != null && date > param.maximum) {
15
+ throw new RangeError(`${(0, label_for_param_js_1.labelForParam)(param)}: maximum=${param.maximum.toISOString()}`);
16
+ }
17
+ return date;
18
+ };
19
+ exports.parseDateArg = parseDateArg;
20
+ /**
21
+ * @internal
22
+ */
23
+ const isDateParam = (param) => {
24
+ return param.type === Date;
25
+ };
26
+ exports.isDateParam = isDateParam;
27
+ /**
28
+ * @internal
29
+ */
30
+ exports.dateParamHandler = {
31
+ matchesParam: exports.isDateParam,
32
+ parseArg: exports.parseDateArg,
33
+ placeholderForParam(param) {
34
+ var _a;
35
+ return ((_a = param.placeholder) !== null && _a !== void 0 ? _a : param.time) ? "(datetime)" : "(date)";
36
+ },
37
+ };
38
+ //# sourceMappingURL=date-param.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-param.js","sourceRoot":"","sources":["../../../ts/date-param.ts"],"names":[],"mappings":";;;AAAA,wDAAoF;AAEpF,6DAAqD;AAsBrD;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAuB,EAAQ,EAAE;IAC3E,MAAM,IAAI,GAAG,IAAA,2BAAc,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QACnD,MAAM,IAAI,UAAU,CAAC,GAAI,IAAA,kCAAa,EAAC,KAAK,CAAE,aAAc,KAAK,CAAC,OAAO,CAAC,WAAW,EAAG,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QACnD,MAAM,IAAI,UAAU,CAAC,GAAI,IAAA,kCAAa,EAAC,KAAK,CAAE,aAAc,KAAK,CAAC,OAAO,CAAC,WAAW,EAAG,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AATW,QAAA,YAAY,gBASvB;AAEF;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,KAAwB,EAA6B,EAAE;IAClF,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC5B,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;AAEF;;GAEG;AACU,QAAA,gBAAgB,GAAyC;IACrE,YAAY,EAAE,mBAAW;IACzB,QAAQ,EAAE,oBAAY;IACtB,mBAAmB,CAAC,KAAuB;;QAC1C,OAAO,CAAA,MAAA,KAAK,CAAC,WAAW,mCAAI,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClE,CAAC;CACD,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fileParamHandler = exports.isFileParam = exports.parseFileArg = void 0;
4
+ const term_1 = require("@rickosborne/term");
5
+ const path = require("node:path");
6
+ /**
7
+ * Validate and transform the argument before it is returned.
8
+ * @internal
9
+ */
10
+ const parseFileArg = (text, param) => {
11
+ let filePath = text;
12
+ if (param.path != null && !filePath.startsWith(param.path)) {
13
+ filePath = path.join(param.path, filePath);
14
+ }
15
+ const stats = (0, term_1.statsForFile)(filePath);
16
+ const exists = stats != null;
17
+ if (param.existing !== undefined) {
18
+ if (exists !== param.existing) {
19
+ throw new Error(`File ${exists ? "exists" : "does not exist"}: ${filePath}`);
20
+ }
21
+ }
22
+ return { filePath, stats };
23
+ };
24
+ exports.parseFileArg = parseFileArg;
25
+ /**
26
+ * @internal
27
+ */
28
+ const isFileParam = (param) => {
29
+ return param.type === "file";
30
+ };
31
+ exports.isFileParam = isFileParam;
32
+ /**
33
+ * @internal
34
+ */
35
+ exports.fileParamHandler = {
36
+ matchesParam: exports.isFileParam,
37
+ parseArg: exports.parseFileArg,
38
+ placeholderForParam(param) {
39
+ var _a;
40
+ return (_a = param.placeholder) !== null && _a !== void 0 ? _a : "(path)";
41
+ },
42
+ };
43
+ //# sourceMappingURL=file-param.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-param.js","sourceRoot":"","sources":["../../../ts/file-param.ts"],"names":[],"mappings":";;;AAAA,4CAAiD;AAEjD,kCAAkC;AAuClC;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAuB,EAAW,EAAE;IAC9E,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,mBAAY,EAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC;IAC7B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,MAAM,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,QAAS,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAiB,KAAM,QAAS,EAAE,CAAC,CAAC;QAClF,CAAC;IACF,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC;AAbW,QAAA,YAAY,gBAavB;AAEF;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,KAAwB,EAA6B,EAAE;IAClF,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;AAEF;;GAEG;AACU,QAAA,gBAAgB,GAA4C;IACxE,YAAY,EAAE,mBAAW;IACzB,QAAQ,EAAE,oBAAY;IACtB,mBAAmB,CAAC,KAAuB;;QAC1C,OAAO,MAAA,KAAK,CAAC,WAAW,mCAAI,QAAQ,CAAC;IACtC,CAAC;CACD,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.helpForParam = void 0;
4
+ const param_handler_js_1 = require("./param-handler.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ const helpForParam = (names, param) => {
9
+ const { help } = param;
10
+ if (help == null) {
11
+ return undefined;
12
+ }
13
+ const handler = (0, param_handler_js_1.findParamHandler)(param);
14
+ const placeholder = handler.placeholderForParam(param);
15
+ const lines = [];
16
+ for (const name of names.slice().sort()) {
17
+ let line = " ";
18
+ if (name.length === 1) {
19
+ line = line.concat("-", name);
20
+ }
21
+ else {
22
+ line = line.concat("--", name);
23
+ }
24
+ if (placeholder != null) {
25
+ line = line.concat(" ", placeholder);
26
+ }
27
+ lines.push(line);
28
+ }
29
+ lines.push(" ".concat(help));
30
+ return lines.join("\n");
31
+ };
32
+ exports.helpForParam = helpForParam;
33
+ //# sourceMappingURL=help-for-param.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-for-param.js","sourceRoot":"","sources":["../../../ts/help-for-param.ts"],"names":[],"mappings":";;;AACA,yDAAsD;AAEtD;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,KAAe,EAAE,KAAmB,EAAsB,EAAE;IACxF,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACvB,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,mCAAgB,EAAC,KAAK,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC,CAAC;AAtBW,QAAA,YAAY,gBAsBvB"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.labelForParam = void 0;
4
+ /**
5
+ * @internal
6
+ */
7
+ const labelForParam = (param) => {
8
+ var _a;
9
+ if (param.positional === true) {
10
+ return "...";
11
+ }
12
+ const names = ((_a = param.names) !== null && _a !== void 0 ? _a : param.name == null) ? [] : [param.name];
13
+ return names
14
+ .map((name) => (name.length === 1 ? "-" : "--").concat(name))
15
+ .join("|");
16
+ };
17
+ exports.labelForParam = labelForParam;
18
+ //# sourceMappingURL=label-for-param.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-for-param.js","sourceRoot":"","sources":["../../../ts/label-for-param.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,MAAM,aAAa,GAAG,CAAC,KAAmB,EAAU,EAAE;;IAC5D,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,CAAA,MAAA,KAAK,CAAC,KAAK,mCAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,IAAI,CAAE,CAAC;IACtE,OAAO,KAAK;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC5D,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB"}