@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.
- package/README.md +216 -0
- package/cjs/index.js +27 -0
- package/cjs/index.js.map +1 -0
- package/cjs/package.json +6 -0
- package/cjs/ts/boolean-param.js +45 -0
- package/cjs/ts/boolean-param.js.map +1 -0
- package/cjs/ts/command-params.js +160 -0
- package/cjs/ts/command-params.js.map +1 -0
- package/cjs/ts/common.js +3 -0
- package/cjs/ts/common.js.map +1 -0
- package/cjs/ts/date-param.js +38 -0
- package/cjs/ts/date-param.js.map +1 -0
- package/cjs/ts/file-param.js +43 -0
- package/cjs/ts/file-param.js.map +1 -0
- package/cjs/ts/help-for-param.js +33 -0
- package/cjs/ts/help-for-param.js.map +1 -0
- package/cjs/ts/label-for-param.js +18 -0
- package/cjs/ts/label-for-param.js.map +1 -0
- package/cjs/ts/number-param.js +56 -0
- package/cjs/ts/number-param.js.map +1 -0
- package/cjs/ts/param-handler.js +28 -0
- package/cjs/ts/param-handler.js.map +1 -0
- package/cjs/ts/string-param.js +34 -0
- package/cjs/ts/string-param.js.map +1 -0
- package/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/esm/index.js +11 -0
- package/esm/index.js.map +1 -0
- package/esm/package.json +6 -0
- package/esm/ts/boolean-param.js +40 -0
- package/esm/ts/boolean-param.js.map +1 -0
- package/esm/ts/command-params.js +154 -0
- package/esm/ts/command-params.js.map +1 -0
- package/esm/ts/common.js +2 -0
- package/esm/ts/common.js.map +1 -0
- package/esm/ts/date-param.js +32 -0
- package/esm/ts/date-param.js.map +1 -0
- package/esm/ts/file-param.js +37 -0
- package/esm/ts/file-param.js.map +1 -0
- package/esm/ts/help-for-param.js +29 -0
- package/esm/ts/help-for-param.js.map +1 -0
- package/esm/ts/label-for-param.js +13 -0
- package/esm/ts/label-for-param.js.map +1 -0
- package/esm/ts/number-param.js +51 -0
- package/esm/ts/number-param.js.map +1 -0
- package/esm/ts/param-handler.js +23 -0
- package/esm/ts/param-handler.js.map +1 -0
- package/esm/ts/string-param.js +28 -0
- package/esm/ts/string-param.js.map +1 -0
- package/esm/tsconfig.module.tsbuildinfo +1 -0
- package/package.json +51 -0
- package/tsdoc-metadata.json +11 -0
- package/types/index.d.ts +11 -0
- package/types/index.d.ts.map +1 -0
- package/types/index.js +27 -0
- package/types/index.js.map +1 -0
- package/types/ts/boolean-param.d.ts +50 -0
- package/types/ts/boolean-param.d.ts.map +1 -0
- package/types/ts/boolean-param.js +44 -0
- package/types/ts/boolean-param.js.map +1 -0
- package/types/ts/command-params.d.ts +44 -0
- package/types/ts/command-params.d.ts.map +1 -0
- package/types/ts/command-params.js +158 -0
- package/types/ts/command-params.js.map +1 -0
- package/types/ts/common.d.ts +63 -0
- package/types/ts/common.d.ts.map +1 -0
- package/types/ts/common.js +3 -0
- package/types/ts/common.js.map +1 -0
- package/types/ts/date-param.d.ts +34 -0
- package/types/ts/date-param.d.ts.map +1 -0
- package/types/ts/date-param.js +37 -0
- package/types/ts/date-param.js.map +1 -0
- package/types/ts/file-param.d.ts +50 -0
- package/types/ts/file-param.d.ts.map +1 -0
- package/types/ts/file-param.js +42 -0
- package/types/ts/file-param.js.map +1 -0
- package/types/ts/help-for-param.d.ts +6 -0
- package/types/ts/help-for-param.d.ts.map +1 -0
- package/types/ts/help-for-param.js +33 -0
- package/types/ts/help-for-param.js.map +1 -0
- package/types/ts/label-for-param.d.ts +6 -0
- package/types/ts/label-for-param.d.ts.map +1 -0
- package/types/ts/label-for-param.js +17 -0
- package/types/ts/label-for-param.js.map +1 -0
- package/types/ts/number-param.d.ts +43 -0
- package/types/ts/number-param.d.ts.map +1 -0
- package/types/ts/number-param.js +56 -0
- package/types/ts/number-param.js.map +1 -0
- package/types/ts/param-handler.d.ts +6 -0
- package/types/ts/param-handler.d.ts.map +1 -0
- package/types/ts/param-handler.js +27 -0
- package/types/ts/param-handler.js.map +1 -0
- package/types/ts/string-param.d.ts +30 -0
- package/types/ts/string-param.d.ts.map +1 -0
- package/types/ts/string-param.js +33 -0
- package/types/ts/string-param.js.map +1 -0
- 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
|
package/cjs/index.js.map
ADDED
|
@@ -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"}
|
package/cjs/package.json
ADDED
|
@@ -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":";;;AAAA,8CAAmD;AACnD,yDAA6E;AAI7E,6DAAqD;AAErD,yDAAsD;AA0CtD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAmB,EAAW,EAAE;;IACnE,MAAM,YAAY,GAAG,IAAA,mCAAgB,EAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,CAAC,MAAA,KAAK,CAAC,KAAK,mCAAI,YAAY,CAAC,QAAQ,CAA0D,CAAC;IAC/G,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yBAA0B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAE,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,aAAa,GAAG,CAC5B,IAAU,EACV,EACC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAC5B,aAAa,EACb,OAAO,MAKJ,EAAE,EACsB,EAAE;;IAC9B,MAAM,MAAM,GAAG,EAA6B,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACtC,MAAM,CAAC,CAAC,CAAE,AAAD,EAAG,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,yBAA0B,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;IACvC,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAG,CAAC;YAC1B,IAAI,KAA+B,CAAC;YACpC,IAAI,SAA6B,CAAC;YAClC,IAAI,UAAmB,CAAC;YACxB,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC5C,qBAAqB,GAAG,IAAI,CAAC;gBAC7B,SAAS;YACV,CAAC;YACD,IAAI,qBAAqB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;oBACxB,wCAAwC;oBACxC,MAAM,IAAI,KAAK,CAAC,0BAA2B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC;gBACpE,CAAC;gBACD,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;gBACxB,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;gBAC3B,UAAU,GAAG,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACP,IAAI,EAAE,GAAG,KAAK,CAAC;gBACf,IAAI,IAAwB,CAAC;gBAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7B,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACxB,EAAE,GAAG,IAAI,CAAC;gBACX,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACxB,EAAE,GAAG,IAAI,CAAC;gBACX,CAAC;qBAAM,CAAC;oBACP,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;gBACD,IAAI,MAA0B,CAAC;gBAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,CAAE,IAAI,EAAE,MAAM,CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACvC,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;qBAChC,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,EAAE,eAAC,OAAA,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAA,MAAA,CAAC,CAAC,KAAK,0CAAE,QAAQ,CAAC,IAAI,CAAC,mCAAI,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA,EAAA,CAAC,CAAC;gBAC7H,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,aAAa,EAAE,CAAC;wBACnB,SAAS;oBACV,CAAC;oBACD,wCAAwC;oBACxC,MAAM,IAAI,KAAK,CAAC,mBAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,wCAAwC;oBACxC,MAAM,IAAI,KAAK,CAAC,gCAAiC,IAAK,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,CAAE,SAAS,EAAE,KAAK,CAAE,GAAG,KAAK,CAAE,CAAC,CAAE,CAAC;gBAClC,IAAA,qBAAa,EAAC,KAAK,EAAE,UAAW,IAAK,EAAE,CAAC,CAAC;gBACzC,IAAI,WAA+B,CAAC;gBACpC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC5B,IAAI,EAAE,EAAE,CAAC;wBACR,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;4BACpB,wCAAwC;4BACxC,MAAM,IAAI,KAAK,CAAC,sDAAuD,IAAA,kCAAa,EAAC,KAAK,CAAE,EAAE,CAAC,CAAC;wBACjG,CAAC;wBACD,WAAW,GAAG,MAAA,MAAA,KAAK,CAAC,SAAS,mCAAI,MAAA,KAAK,CAAC,MAAM,0CAAI,CAAC,CAAE,mCAAI,yBAAM,CAAE,CAAC,CAAE,CAAC;oBACrE,CAAC;yBAAM,CAAC;wBACP,WAAW,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,KAAK,CAAC,QAAQ,mCAAI,MAAA,KAAK,CAAC,KAAK,0CAAI,CAAC,CAAE,mCAAI,wBAAK,CAAE,CAAC,CAAE,CAAC;oBAC5E,CAAC;gBACF,CAAC;qBAAM,IAAI,EAAE,EAAE,CAAC;oBACf,wCAAwC;oBACxC,MAAM,IAAI,KAAK,CAAC,gCAAiC,IAAA,kCAAa,EAAC,KAAK,CAAE,EAAE,CAAC,CAAC;gBAC3E,CAAC;qBAAM,CAAC;oBACP,WAAW,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtC,CAAC;gBACD,IAAA,qBAAa,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,aAAc,IAAA,kCAAa,EAAC,KAAM,CAAE,EAAE,CAAC,CAAC;gBACzE,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,KAAK,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACxC,IAAI,aAAa,EAAE,CAAC;oBACnB,SAAS;gBACV,CAAC;gBACD,wCAAwC;gBACxC,MAAM,IAAI,KAAK,CAAC,mBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,IAAA,qBAAa,EAAC,UAAU,EAAE,kBAAmB,SAAU,EAAE,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAE,SAAS,CAAE,CAAC;YACrC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,wCAAwC;oBACxC,MAAM,IAAI,KAAK,CAAC,sBAAuB,SAAU,EAAE,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAA,MAAM,CAAE,SAAS,qCAAjB,MAAM,CAAE,SAAS,IAAO,MAAM,EAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACP,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACtB,wCAAwC;oBACxC,MAAM,IAAI,KAAK,CAAC,YAAa,IAAA,kCAAa,EAAC,KAAK,CAAE,KAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAE,IAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC;gBAC/G,CAAC;gBACD,MAAM,CAAE,SAAS,CAAE,GAAG,UAAU,CAAC;YAClC,CAAC;QACF,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aACvC,MAAM,CAAC,CAAC,CAAE,AAAD,EAAG,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;aACxC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,kCAAa,EAAC,IAAI,CAAE,GAAG,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3E,wCAAwC;YACxC,MAAM,IAAI,KAAK,CAAC,4BAA6B,OAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACtE,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO,SAAiD,CAAC;QAC1D,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,OAAO,MAAmC,CAAC;AAC5C,CAAC,CAAC;AAzIW,QAAA,aAAa,iBAyIxB"}
|
package/cjs/ts/common.js
ADDED
|
@@ -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"}
|