1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.validate = void 0;
|
4 | const errors_1 = require("@oclif/errors");
|
5 | const errors_2 = require("./errors");
|
6 | function validate(parse) {
|
7 | function validateArgs() {
|
8 | const maxArgs = parse.input.args.length;
|
9 | if (parse.input.strict && parse.output.argv.length > maxArgs) {
|
10 | const extras = parse.output.argv.slice(maxArgs);
|
11 | throw new errors_2.UnexpectedArgsError({ parse, args: extras });
|
12 | }
|
13 | const missingRequiredArgs = [];
|
14 | let hasOptional = false;
|
15 | parse.input.args.forEach((arg, index) => {
|
16 | if (!arg.required) {
|
17 | hasOptional = true;
|
18 | }
|
19 | else if (hasOptional) {
|
20 |
|
21 |
|
22 | throw new errors_2.InvalidArgsSpecError({ parse, args: parse.input.args });
|
23 | }
|
24 | if (arg.required) {
|
25 | if (!parse.output.argv[index] && parse.output.argv[index] !== 0) {
|
26 | missingRequiredArgs.push(arg);
|
27 | }
|
28 | }
|
29 | });
|
30 | if (missingRequiredArgs.length > 0) {
|
31 | throw new errors_2.RequiredArgsError({ parse, args: missingRequiredArgs });
|
32 | }
|
33 | }
|
34 | function validateAcrossFlags(flag) {
|
35 | var _a;
|
36 | const intersection = Object.entries(parse.input.flags)
|
37 | .map(entry => entry[0])
|
38 | .filter(flagName => parse.output.flags[flagName] !== undefined)
|
39 | .filter(flagName => flag.exactlyOne && flag.exactlyOne.includes(flagName));
|
40 | if (intersection.length === 0) {
|
41 |
|
42 | throw new errors_1.CLIError(`Exactly one of the following must be provided: ${[
|
43 | ...new Set((_a = flag.exactlyOne) === null || _a === void 0 ? void 0 : _a.map(flag => `--${flag}`)),
|
44 | ].join(', ')}`);
|
45 | }
|
46 | }
|
47 | function validateFlags() {
|
48 | for (const [name, flag] of Object.entries(parse.input.flags)) {
|
49 | if (parse.output.flags[name] !== undefined) {
|
50 | for (const also of flag.dependsOn || []) {
|
51 | if (!parse.output.flags[also]) {
|
52 | throw new errors_1.CLIError(`--${also}= must also be provided when using --${name}=`);
|
53 | }
|
54 | }
|
55 | for (const also of flag.exclusive || []) {
|
56 |
|
57 | if (parse.output.metadata.flags[also] &&
|
58 | parse.output.metadata.flags[also].setFromDefault)
|
59 | continue;
|
60 | if (parse.output.metadata.flags[name] &&
|
61 | parse.output.metadata.flags[name].setFromDefault)
|
62 | continue;
|
63 | if (parse.output.flags[also]) {
|
64 | throw new errors_1.CLIError(`--${also}= cannot also be provided when using --${name}=`);
|
65 | }
|
66 | }
|
67 | for (const also of flag.exactlyOne || []) {
|
68 | if (also !== name && parse.output.flags[also]) {
|
69 | throw new errors_1.CLIError(`--${also}= cannot also be provided when using --${name}=`);
|
70 | }
|
71 | }
|
72 | }
|
73 | else if (flag.required) {
|
74 | throw new errors_2.RequiredFlagError({ parse, flag });
|
75 | }
|
76 | else if (flag.exactlyOne && flag.exactlyOne.length > 0) {
|
77 | validateAcrossFlags(flag);
|
78 | }
|
79 | }
|
80 | }
|
81 | validateArgs();
|
82 | validateFlags();
|
83 | }
|
84 | exports.validate = validate;
|