@boneskull/bargs 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +305 -299
- package/dist/bargs.cjs +465 -135
- package/dist/bargs.cjs.map +1 -1
- package/dist/bargs.d.cts +35 -17
- package/dist/bargs.d.cts.map +1 -1
- package/dist/bargs.d.ts +35 -17
- package/dist/bargs.d.ts.map +1 -1
- package/dist/bargs.js +463 -135
- package/dist/bargs.js.map +1 -1
- package/dist/help.cjs +1 -2
- package/dist/help.cjs.map +1 -1
- package/dist/help.d.cts +20 -3
- package/dist/help.d.cts.map +1 -1
- package/dist/help.d.ts +20 -3
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +1 -2
- package/dist/help.js.map +1 -1
- package/dist/index.cjs +27 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -79
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +15 -79
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -30
- package/dist/index.js.map +1 -1
- package/dist/opt.cjs +148 -122
- package/dist/opt.cjs.map +1 -1
- package/dist/opt.d.cts +87 -113
- package/dist/opt.d.cts.map +1 -1
- package/dist/opt.d.ts +87 -113
- package/dist/opt.d.ts.map +1 -1
- package/dist/opt.js +147 -121
- package/dist/opt.js.map +1 -1
- package/dist/parser.cjs +3 -230
- package/dist/parser.cjs.map +1 -1
- package/dist/parser.d.cts +3 -51
- package/dist/parser.d.cts.map +1 -1
- package/dist/parser.d.ts +3 -51
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +2 -223
- package/dist/parser.js.map +1 -1
- package/dist/types.cjs +1 -3
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +111 -233
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +111 -233
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/validate.cjs +0 -463
- package/dist/validate.cjs.map +0 -1
- package/dist/validate.d.cts +0 -28
- package/dist/validate.d.cts.map +0 -1
- package/dist/validate.d.ts +0 -28
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js +0 -459
- package/dist/validate.js.map +0 -1
package/dist/validate.js
DELETED
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration validation for bargs.
|
|
3
|
-
*
|
|
4
|
-
* Validates bargs configuration objects at runtime before parsing, ensuring:
|
|
5
|
-
*
|
|
6
|
-
* - Required properties are present and correctly typed
|
|
7
|
-
* - Option definitions have valid type discriminators and defaults
|
|
8
|
-
* - Aliases are single characters with no conflicts
|
|
9
|
-
* - Positional schemas have variadic args last and required args before optional
|
|
10
|
-
* - Command handlers are properly defined
|
|
11
|
-
* - Command-based CLIs don't have top-level positionals or handlers
|
|
12
|
-
*
|
|
13
|
-
* Throws {@link ValidationError} with detailed path information when invalid.
|
|
14
|
-
*
|
|
15
|
-
* @packageDocumentation
|
|
16
|
-
*/
|
|
17
|
-
import { ValidationError } from "./errors.js";
|
|
18
|
-
/** Valid option type discriminators */
|
|
19
|
-
const VALID_OPTION_TYPES = [
|
|
20
|
-
'string',
|
|
21
|
-
'boolean',
|
|
22
|
-
'number',
|
|
23
|
-
'enum',
|
|
24
|
-
'array',
|
|
25
|
-
'count',
|
|
26
|
-
];
|
|
27
|
-
/** Valid positional type discriminators */
|
|
28
|
-
const VALID_POSITIONAL_TYPES = [
|
|
29
|
-
'string',
|
|
30
|
-
'number',
|
|
31
|
-
'enum',
|
|
32
|
-
'variadic',
|
|
33
|
-
];
|
|
34
|
-
/** Valid array/variadic item types */
|
|
35
|
-
const VALID_ITEM_TYPES = ['string', 'number'];
|
|
36
|
-
// ─── Primitive Helpers ──────────────────────────────────────────────────────
|
|
37
|
-
const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
38
|
-
const isFunction = (value) => typeof value === 'function';
|
|
39
|
-
const isStringArray = (value) => Array.isArray(value) && value.every((v) => typeof v === 'string');
|
|
40
|
-
const isNumberArray = (value) => Array.isArray(value) && value.every((v) => typeof v === 'number');
|
|
41
|
-
// ─── Option Validation ──────────────────────────────────────────────────────
|
|
42
|
-
/**
|
|
43
|
-
* Validate a single option definition.
|
|
44
|
-
*/
|
|
45
|
-
const validateOption = (name, opt, path, allAliases) => {
|
|
46
|
-
if (!isObject(opt)) {
|
|
47
|
-
throw new ValidationError(path, 'option must be an object');
|
|
48
|
-
}
|
|
49
|
-
// Validate type discriminator
|
|
50
|
-
const type = opt['type'];
|
|
51
|
-
if (typeof type !== 'string') {
|
|
52
|
-
throw new ValidationError(`${path}.type`, 'must be a string');
|
|
53
|
-
}
|
|
54
|
-
if (!VALID_OPTION_TYPES.includes(type)) {
|
|
55
|
-
throw new ValidationError(`${path}.type`, `must be one of: ${VALID_OPTION_TYPES.join(', ')}`);
|
|
56
|
-
}
|
|
57
|
-
// Validate optional description
|
|
58
|
-
if (opt['description'] !== undefined &&
|
|
59
|
-
typeof opt['description'] !== 'string') {
|
|
60
|
-
throw new ValidationError(`${path}.description`, 'must be a string');
|
|
61
|
-
}
|
|
62
|
-
// Validate optional group
|
|
63
|
-
if (opt['group'] !== undefined && typeof opt['group'] !== 'string') {
|
|
64
|
-
throw new ValidationError(`${path}.group`, 'must be a string');
|
|
65
|
-
}
|
|
66
|
-
// Validate optional hidden
|
|
67
|
-
if (opt['hidden'] !== undefined && typeof opt['hidden'] !== 'boolean') {
|
|
68
|
-
throw new ValidationError(`${path}.hidden`, 'must be a boolean');
|
|
69
|
-
}
|
|
70
|
-
// Validate optional required
|
|
71
|
-
if (opt['required'] !== undefined && typeof opt['required'] !== 'boolean') {
|
|
72
|
-
throw new ValidationError(`${path}.required`, 'must be a boolean');
|
|
73
|
-
}
|
|
74
|
-
// Validate aliases
|
|
75
|
-
if (opt['aliases'] !== undefined) {
|
|
76
|
-
if (!isStringArray(opt['aliases'])) {
|
|
77
|
-
throw new ValidationError(`${path}.aliases`, 'must be an array of strings');
|
|
78
|
-
}
|
|
79
|
-
for (let i = 0; i < opt['aliases'].length; i++) {
|
|
80
|
-
const alias = opt['aliases'][i];
|
|
81
|
-
if (alias.length !== 1) {
|
|
82
|
-
throw new ValidationError(`${path}.aliases[${i}]`, `alias must be a single character, got "${alias}"`);
|
|
83
|
-
}
|
|
84
|
-
// Check for duplicates
|
|
85
|
-
const existingOption = allAliases.get(alias);
|
|
86
|
-
if (existingOption !== undefined) {
|
|
87
|
-
throw new ValidationError(`${path}.aliases[${i}]`, `alias "${alias}" is already used by option "${existingOption}"`);
|
|
88
|
-
}
|
|
89
|
-
allAliases.set(alias, name);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Type-specific validation
|
|
93
|
-
switch (type) {
|
|
94
|
-
case 'array': {
|
|
95
|
-
const items = opt['items'];
|
|
96
|
-
if (typeof items !== 'string') {
|
|
97
|
-
throw new ValidationError(`${path}.items`, 'must be "string" or "number"');
|
|
98
|
-
}
|
|
99
|
-
if (!VALID_ITEM_TYPES.includes(items)) {
|
|
100
|
-
throw new ValidationError(`${path}.items`, 'must be "string" or "number"');
|
|
101
|
-
}
|
|
102
|
-
if (opt['default'] !== undefined) {
|
|
103
|
-
if (items === 'string') {
|
|
104
|
-
if (!isStringArray(opt['default'])) {
|
|
105
|
-
throw new ValidationError(`${path}.default`, 'must be an array of strings');
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
if (!isNumberArray(opt['default'])) {
|
|
110
|
-
throw new ValidationError(`${path}.default`, 'must be an array of numbers');
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
case 'boolean':
|
|
117
|
-
if (opt['default'] !== undefined && typeof opt['default'] !== 'boolean') {
|
|
118
|
-
throw new ValidationError(`${path}.default`, 'must be a boolean');
|
|
119
|
-
}
|
|
120
|
-
break;
|
|
121
|
-
case 'count':
|
|
122
|
-
if (opt['default'] !== undefined && typeof opt['default'] !== 'number') {
|
|
123
|
-
throw new ValidationError(`${path}.default`, 'must be a number');
|
|
124
|
-
}
|
|
125
|
-
break;
|
|
126
|
-
case 'enum': {
|
|
127
|
-
const choices = opt['choices'];
|
|
128
|
-
if (!isStringArray(choices)) {
|
|
129
|
-
throw new ValidationError(`${path}.choices`, 'must be a non-empty array of strings');
|
|
130
|
-
}
|
|
131
|
-
if (choices.length === 0) {
|
|
132
|
-
throw new ValidationError(`${path}.choices`, 'must not be empty');
|
|
133
|
-
}
|
|
134
|
-
if (opt['default'] !== undefined) {
|
|
135
|
-
if (typeof opt['default'] !== 'string') {
|
|
136
|
-
throw new ValidationError(`${path}.default`, 'must be a string');
|
|
137
|
-
}
|
|
138
|
-
if (!choices.includes(opt['default'])) {
|
|
139
|
-
throw new ValidationError(`${path}.default`, `must be one of the choices: ${choices.join(', ')}`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
case 'number':
|
|
145
|
-
if (opt['default'] !== undefined && typeof opt['default'] !== 'number') {
|
|
146
|
-
throw new ValidationError(`${path}.default`, 'must be a number');
|
|
147
|
-
}
|
|
148
|
-
break;
|
|
149
|
-
case 'string':
|
|
150
|
-
if (opt['default'] !== undefined && typeof opt['default'] !== 'string') {
|
|
151
|
-
throw new ValidationError(`${path}.default`, 'must be a string');
|
|
152
|
-
}
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
/**
|
|
157
|
-
* Validate an options schema.
|
|
158
|
-
*/
|
|
159
|
-
const validateOptionsSchema = (schema, path, allAliases = new Map()) => {
|
|
160
|
-
if (schema === undefined) {
|
|
161
|
-
return; // optional
|
|
162
|
-
}
|
|
163
|
-
if (!isObject(schema)) {
|
|
164
|
-
throw new ValidationError(path, 'must be an object');
|
|
165
|
-
}
|
|
166
|
-
for (const [name, opt] of Object.entries(schema)) {
|
|
167
|
-
validateOption(name, opt, `${path}.${name}`, allAliases);
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
// ─── Positional Validation ──────────────────────────────────────────────────
|
|
171
|
-
/**
|
|
172
|
-
* Validate a single positional definition.
|
|
173
|
-
*/
|
|
174
|
-
const validatePositional = (index, pos, path) => {
|
|
175
|
-
if (!isObject(pos)) {
|
|
176
|
-
throw new ValidationError(path, 'positional must be an object');
|
|
177
|
-
}
|
|
178
|
-
// Validate type discriminator
|
|
179
|
-
const type = pos['type'];
|
|
180
|
-
if (typeof type !== 'string') {
|
|
181
|
-
throw new ValidationError(`${path}.type`, 'must be a string');
|
|
182
|
-
}
|
|
183
|
-
if (!VALID_POSITIONAL_TYPES.includes(type)) {
|
|
184
|
-
throw new ValidationError(`${path}.type`, `must be one of: ${VALID_POSITIONAL_TYPES.join(', ')}`);
|
|
185
|
-
}
|
|
186
|
-
// Validate optional description
|
|
187
|
-
if (pos['description'] !== undefined &&
|
|
188
|
-
typeof pos['description'] !== 'string') {
|
|
189
|
-
throw new ValidationError(`${path}.description`, 'must be a string');
|
|
190
|
-
}
|
|
191
|
-
// Validate optional name
|
|
192
|
-
if (pos['name'] !== undefined && typeof pos['name'] !== 'string') {
|
|
193
|
-
throw new ValidationError(`${path}.name`, 'must be a string');
|
|
194
|
-
}
|
|
195
|
-
// Validate optional required
|
|
196
|
-
if (pos['required'] !== undefined && typeof pos['required'] !== 'boolean') {
|
|
197
|
-
throw new ValidationError(`${path}.required`, 'must be a boolean');
|
|
198
|
-
}
|
|
199
|
-
// Type-specific validation
|
|
200
|
-
switch (type) {
|
|
201
|
-
case 'enum': {
|
|
202
|
-
const choices = pos['choices'];
|
|
203
|
-
if (!isStringArray(choices)) {
|
|
204
|
-
throw new ValidationError(`${path}.choices`, 'must be a non-empty array of strings');
|
|
205
|
-
}
|
|
206
|
-
if (choices.length === 0) {
|
|
207
|
-
throw new ValidationError(`${path}.choices`, 'must not be empty');
|
|
208
|
-
}
|
|
209
|
-
if (pos['default'] !== undefined) {
|
|
210
|
-
if (typeof pos['default'] !== 'string') {
|
|
211
|
-
throw new ValidationError(`${path}.default`, 'must be a string');
|
|
212
|
-
}
|
|
213
|
-
if (!choices.includes(pos['default'])) {
|
|
214
|
-
throw new ValidationError(`${path}.default`, `must be one of the choices: ${choices.join(', ')}`);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
case 'number':
|
|
220
|
-
if (pos['default'] !== undefined && typeof pos['default'] !== 'number') {
|
|
221
|
-
throw new ValidationError(`${path}.default`, 'must be a number');
|
|
222
|
-
}
|
|
223
|
-
break;
|
|
224
|
-
case 'string':
|
|
225
|
-
if (pos['default'] !== undefined && typeof pos['default'] !== 'string') {
|
|
226
|
-
throw new ValidationError(`${path}.default`, 'must be a string');
|
|
227
|
-
}
|
|
228
|
-
break;
|
|
229
|
-
case 'variadic': {
|
|
230
|
-
const items = pos['items'];
|
|
231
|
-
if (typeof items !== 'string') {
|
|
232
|
-
throw new ValidationError(`${path}.items`, 'must be "string" or "number"');
|
|
233
|
-
}
|
|
234
|
-
if (!VALID_ITEM_TYPES.includes(items)) {
|
|
235
|
-
throw new ValidationError(`${path}.items`, 'must be "string" or "number"');
|
|
236
|
-
}
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
/**
|
|
242
|
-
* Validate a positionals schema. Checks:
|
|
243
|
-
*
|
|
244
|
-
* - Each positional has valid structure
|
|
245
|
-
* - Variadic positional (if present) is last
|
|
246
|
-
* - Required positionals don't follow optional ones
|
|
247
|
-
*/
|
|
248
|
-
const validatePositionalsSchema = (schema, path) => {
|
|
249
|
-
if (schema === undefined) {
|
|
250
|
-
return; // optional
|
|
251
|
-
}
|
|
252
|
-
if (!Array.isArray(schema)) {
|
|
253
|
-
throw new ValidationError(path, 'must be an array');
|
|
254
|
-
}
|
|
255
|
-
// Validate each positional
|
|
256
|
-
for (let i = 0; i < schema.length; i++) {
|
|
257
|
-
validatePositional(i, schema[i], `${path}[${i}]`);
|
|
258
|
-
}
|
|
259
|
-
// Check variadic is last
|
|
260
|
-
const variadicIndex = schema.findIndex((p) => isObject(p) && p['type'] === 'variadic');
|
|
261
|
-
if (variadicIndex !== -1 && variadicIndex !== schema.length - 1) {
|
|
262
|
-
throw new ValidationError(`${path}[${variadicIndex}]`, 'variadic positional must be the last positional argument');
|
|
263
|
-
}
|
|
264
|
-
// Check required doesn't follow optional
|
|
265
|
-
let seenOptional = false;
|
|
266
|
-
for (let i = 0; i < schema.length; i++) {
|
|
267
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
268
|
-
const pos = schema[i];
|
|
269
|
-
if (!isObject(pos)) {
|
|
270
|
-
continue;
|
|
271
|
-
}
|
|
272
|
-
const isOptional = pos['required'] !== true &&
|
|
273
|
-
!('default' in pos && pos['default'] !== undefined);
|
|
274
|
-
const isVariadic = pos['type'] === 'variadic';
|
|
275
|
-
if (isOptional) {
|
|
276
|
-
seenOptional = true;
|
|
277
|
-
}
|
|
278
|
-
else if (seenOptional && !isVariadic) {
|
|
279
|
-
throw new ValidationError(`${path}[${i}]`, 'required positional cannot follow an optional positional');
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
// ─── Handler Validation ─────────────────────────────────────────────────────
|
|
284
|
-
/**
|
|
285
|
-
* Validate a handler function.
|
|
286
|
-
*/
|
|
287
|
-
const validateHandler = (handler, path) => {
|
|
288
|
-
if (handler === undefined) {
|
|
289
|
-
return; // handlers are optional in some contexts
|
|
290
|
-
}
|
|
291
|
-
if (!isFunction(handler)) {
|
|
292
|
-
throw new ValidationError(path, 'must be a function');
|
|
293
|
-
}
|
|
294
|
-
};
|
|
295
|
-
// ─── Transforms Validation ──────────────────────────────────────────────────
|
|
296
|
-
/**
|
|
297
|
-
* Validate a transforms configuration object.
|
|
298
|
-
*/
|
|
299
|
-
const validateTransforms = (transforms, path) => {
|
|
300
|
-
if (transforms === undefined) {
|
|
301
|
-
return; // transforms are optional
|
|
302
|
-
}
|
|
303
|
-
if (!isObject(transforms)) {
|
|
304
|
-
throw new ValidationError(path, 'must be an object');
|
|
305
|
-
}
|
|
306
|
-
if (transforms['values'] !== undefined && !isFunction(transforms['values'])) {
|
|
307
|
-
throw new ValidationError(`${path}.values`, 'must be a function');
|
|
308
|
-
}
|
|
309
|
-
if (transforms['positionals'] !== undefined &&
|
|
310
|
-
!isFunction(transforms['positionals'])) {
|
|
311
|
-
throw new ValidationError(`${path}.positionals`, 'must be a function');
|
|
312
|
-
}
|
|
313
|
-
};
|
|
314
|
-
// ─── Command Validation ─────────────────────────────────────────────────────
|
|
315
|
-
/**
|
|
316
|
-
* Validate a single command configuration.
|
|
317
|
-
*/
|
|
318
|
-
const validateCommand = (name, cmd, path, globalAliases) => {
|
|
319
|
-
if (!isObject(cmd)) {
|
|
320
|
-
throw new ValidationError(path, 'command must be an object');
|
|
321
|
-
}
|
|
322
|
-
// description is required
|
|
323
|
-
if (typeof cmd['description'] !== 'string') {
|
|
324
|
-
throw new ValidationError(`${path}.description`, 'must be a string');
|
|
325
|
-
}
|
|
326
|
-
// handler is required for commands
|
|
327
|
-
if (cmd['handler'] === undefined) {
|
|
328
|
-
throw new ValidationError(`${path}.handler`, 'is required');
|
|
329
|
-
}
|
|
330
|
-
validateHandler(cmd['handler'], `${path}.handler`);
|
|
331
|
-
// Validate options (command-local aliases only, no collision with globals)
|
|
332
|
-
// Create a new alias map that includes global aliases for collision detection
|
|
333
|
-
const commandAliases = new Map(globalAliases);
|
|
334
|
-
validateOptionsSchema(cmd['options'], `${path}.options`, commandAliases);
|
|
335
|
-
// Validate positionals
|
|
336
|
-
validatePositionalsSchema(cmd['positionals'], `${path}.positionals`);
|
|
337
|
-
// Validate transforms (optional)
|
|
338
|
-
validateTransforms(cmd['transforms'], `${path}.transforms`);
|
|
339
|
-
};
|
|
340
|
-
/**
|
|
341
|
-
* Validate commands record.
|
|
342
|
-
*/
|
|
343
|
-
const validateCommands = (commands, path, globalAliases) => {
|
|
344
|
-
if (!isObject(commands)) {
|
|
345
|
-
throw new ValidationError(path, 'must be an object');
|
|
346
|
-
}
|
|
347
|
-
const commandNames = Object.keys(commands);
|
|
348
|
-
if (commandNames.length === 0) {
|
|
349
|
-
throw new ValidationError(path, 'must have at least one command');
|
|
350
|
-
}
|
|
351
|
-
for (const [name, cmd] of Object.entries(commands)) {
|
|
352
|
-
validateCommand(name, cmd, `${path}.${name}`, globalAliases);
|
|
353
|
-
}
|
|
354
|
-
return new Set(commandNames);
|
|
355
|
-
};
|
|
356
|
-
// ─── Main Config Validation ─────────────────────────────────────────────────
|
|
357
|
-
/**
|
|
358
|
-
* Validate base config properties common to both simple and command-based CLIs.
|
|
359
|
-
*/
|
|
360
|
-
const validateBaseConfig = (config, path) => {
|
|
361
|
-
if (!isObject(config)) {
|
|
362
|
-
throw new ValidationError(path, 'config must be an object');
|
|
363
|
-
}
|
|
364
|
-
// name is required
|
|
365
|
-
if (typeof config['name'] !== 'string') {
|
|
366
|
-
throw new ValidationError(`${path}.name`, 'must be a string');
|
|
367
|
-
}
|
|
368
|
-
if (config['name'].length === 0) {
|
|
369
|
-
throw new ValidationError(`${path}.name`, 'must not be empty');
|
|
370
|
-
}
|
|
371
|
-
// description is optional
|
|
372
|
-
if (config['description'] !== undefined &&
|
|
373
|
-
typeof config['description'] !== 'string') {
|
|
374
|
-
throw new ValidationError(`${path}.description`, 'must be a string');
|
|
375
|
-
}
|
|
376
|
-
// version is optional
|
|
377
|
-
if (config['version'] !== undefined &&
|
|
378
|
-
typeof config['version'] !== 'string') {
|
|
379
|
-
throw new ValidationError(`${path}.version`, 'must be a string');
|
|
380
|
-
}
|
|
381
|
-
// args is optional
|
|
382
|
-
if (config['args'] !== undefined && !isStringArray(config['args'])) {
|
|
383
|
-
throw new ValidationError(`${path}.args`, 'must be an array of strings');
|
|
384
|
-
}
|
|
385
|
-
// Validate options
|
|
386
|
-
const aliases = new Map();
|
|
387
|
-
validateOptionsSchema(config['options'], `${path}.options`, aliases);
|
|
388
|
-
return { aliases, configObj: config };
|
|
389
|
-
};
|
|
390
|
-
/**
|
|
391
|
-
* Check if config appears to be a command-based CLI. Returns true if commands
|
|
392
|
-
* property exists (even if empty - validation will catch that).
|
|
393
|
-
*/
|
|
394
|
-
const isCommandConfig = (config) => {
|
|
395
|
-
return config['commands'] !== undefined;
|
|
396
|
-
};
|
|
397
|
-
/**
|
|
398
|
-
* Validate a simple CLI config (no commands).
|
|
399
|
-
*/
|
|
400
|
-
const validateSimpleConfig = (config, path, _aliases) => {
|
|
401
|
-
// Validate positionals
|
|
402
|
-
validatePositionalsSchema(config['positionals'], `${path}.positionals`);
|
|
403
|
-
// Validate handler (optional for simple CLI)
|
|
404
|
-
validateHandler(config['handler'], `${path}.handler`);
|
|
405
|
-
// Validate transforms (optional)
|
|
406
|
-
validateTransforms(config['transforms'], `${path}.transforms`);
|
|
407
|
-
};
|
|
408
|
-
/**
|
|
409
|
-
* Validate a command-based CLI config.
|
|
410
|
-
*/
|
|
411
|
-
const validateCommandConfig = (config, path, aliases) => {
|
|
412
|
-
// Commands must exist and have entries
|
|
413
|
-
const commandNames = validateCommands(config['commands'], `${path}.commands`, aliases);
|
|
414
|
-
// Positionals should not be present at top level
|
|
415
|
-
if (config['positionals'] !== undefined) {
|
|
416
|
-
const positionals = config['positionals'];
|
|
417
|
-
if (Array.isArray(positionals) && positionals.length > 0) {
|
|
418
|
-
throw new ValidationError(`${path}.positionals`, 'top-level positionals are not allowed in command-based CLIs (define them per-command)');
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
// handler should not be present (use defaultHandler instead)
|
|
422
|
-
if (config['handler'] !== undefined) {
|
|
423
|
-
throw new ValidationError(`${path}.handler`, 'use defaultHandler for command-based CLIs');
|
|
424
|
-
}
|
|
425
|
-
// Validate defaultHandler
|
|
426
|
-
const defaultHandler = config['defaultHandler'];
|
|
427
|
-
if (defaultHandler !== undefined) {
|
|
428
|
-
if (typeof defaultHandler === 'string') {
|
|
429
|
-
// Must reference an existing command
|
|
430
|
-
if (!commandNames.has(defaultHandler)) {
|
|
431
|
-
throw new ValidationError(`${path}.defaultHandler`, `must reference an existing command, got "${defaultHandler}"`);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
else if (!isFunction(defaultHandler)) {
|
|
435
|
-
throw new ValidationError(`${path}.defaultHandler`, 'must be a function or command name string');
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
// Validate top-level transforms (optional, run before command-level transforms)
|
|
439
|
-
validateTransforms(config['transforms'], `${path}.transforms`);
|
|
440
|
-
};
|
|
441
|
-
/**
|
|
442
|
-
* Validate a bargs configuration object. Throws ValidationError if invalid.
|
|
443
|
-
*
|
|
444
|
-
* This validates both simple CLI configs (BargsConfig) and command-based CLI
|
|
445
|
-
* configs (BargsConfigWithCommands).
|
|
446
|
-
*
|
|
447
|
-
* @param config - The configuration to validate
|
|
448
|
-
* @throws ValidationError if the config is invalid
|
|
449
|
-
*/
|
|
450
|
-
export const validateConfig = (config) => {
|
|
451
|
-
const { aliases, configObj } = validateBaseConfig(config, 'config');
|
|
452
|
-
if (isCommandConfig(configObj)) {
|
|
453
|
-
validateCommandConfig(configObj, 'config', aliases);
|
|
454
|
-
}
|
|
455
|
-
else {
|
|
456
|
-
validateSimpleConfig(configObj, 'config', aliases);
|
|
457
|
-
}
|
|
458
|
-
};
|
|
459
|
-
//# sourceMappingURL=validate.js.map
|
package/dist/validate.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|