UNPKG

aws-cdk

Version:

AWS CDK CLI, the command line tool for CDK apps

96 lines 14.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FlagValidator = void 0; class FlagValidator { ioHelper; constructor(ioHelper) { this.ioHelper = ioHelper; } /** Shows error message when CDK version is incompatible with flags command */ async showIncompatibleVersionError() { await this.ioHelper.defaults.error('The \'cdk flags\' command is not compatible with the AWS CDK library used by your application. Please upgrade to 2.212.0 or above.'); } /** Validates all parameters and returns true if valid, false if any validation fails */ async validateParams(params) { const validations = [ () => this.validateFlagNameAndAll(params), () => this.validateSetRequirement(params), () => this.validateValueRequirement(params), () => this.validateMutuallyExclusive(params), () => this.validateUnconfiguredUsage(params), () => this.validateSetWithFlags(params), ]; for (const validation of validations) { const isValid = await validation(); if (!isValid) return false; } return true; } /** Validates that --all and specific flag names are not used together */ async validateFlagNameAndAll(params) { if (params.FLAGNAME && params.all) { await this.ioHelper.defaults.error('Error: Cannot use both --all and a specific flag name. Please use either --all to show all flags or specify a single flag name.'); return false; } return true; } /** Validates that modification options require --set flag */ async validateSetRequirement(params) { if ((params.value || params.recommended || params.default || params.unconfigured) && !params.set) { await this.ioHelper.defaults.error('Error: This option can only be used with --set.'); return false; } return true; } /** Validates that --value requires a specific flag name */ async validateValueRequirement(params) { if (params.value && !params.FLAGNAME) { await this.ioHelper.defaults.error('Error: --value requires a specific flag name. Please specify a flag name when providing a value.'); return false; } return true; } /** Validates that mutually exclusive options are not used together */ async validateMutuallyExclusive(params) { if (params.recommended && params.default) { await this.ioHelper.defaults.error('Error: Cannot use both --recommended and --default. Please choose one option.'); return false; } if (params.unconfigured && params.all) { await this.ioHelper.defaults.error('Error: Cannot use both --unconfigured and --all. Please choose one option.'); return false; } return true; } /** Validates that --unconfigured is not used with specific flag names */ async validateUnconfiguredUsage(params) { if (params.unconfigured && params.FLAGNAME) { await this.ioHelper.defaults.error('Error: Cannot use --unconfigured with a specific flag name. --unconfigured works with multiple flags.'); return false; } return true; } /** Validates that --set operations have required accompanying options */ async validateSetWithFlags(params) { if (params.set && params.FLAGNAME && !params.value) { await this.ioHelper.defaults.error('Error: When setting a specific flag, you must provide a --value.'); return false; } if (params.set && params.all && !params.recommended && !params.default) { await this.ioHelper.defaults.error('Error: When using --set with --all, you must specify either --recommended or --default.'); return false; } if (params.set && params.unconfigured && !params.recommended && !params.default) { await this.ioHelper.defaults.error('Error: When using --set with --unconfigured, you must specify either --recommended or --default.'); return false; } if (params.set && !params.all && !params.unconfigured && !params.FLAGNAME) { await this.ioHelper.defaults.error('Error: When using --set, you must specify either --all, --unconfigured, or provide a specific flag name.'); return false; } return true; } } exports.FlagValidator = FlagValidator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLE1BQWEsYUFBYTtJQUNLO0lBQTdCLFlBQTZCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDL0MsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxLQUFLLENBQUMsNEJBQTRCO1FBQ2hDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLG9JQUFvSSxDQUFDLENBQUM7SUFDM0ssQ0FBQztJQUVELHdGQUF3RjtJQUN4RixLQUFLLENBQUMsY0FBYyxDQUFDLE1BQTRCO1FBQy9DLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUM7WUFDekMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztZQUN6QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO1lBQzNDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUM7WUFDNUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztZQUM1QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO1NBQ3hDLENBQUM7UUFFRixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHlFQUF5RTtJQUNqRSxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBNEI7UUFD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TUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0dBQWtHLENBQUMsQ0FBQztZQUN2SSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxRSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQywwR0FBMEcsQ0FBQyxDQUFDO1lBQy9JLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBaEdELHNDQWdHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxhZ09wZXJhdGlvbnNQYXJhbXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9hcGktcHJpdmF0ZSc7XG5cbmV4cG9ydCBjbGFzcyBGbGFnVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgfVxuXG4gIC8qKiBTaG93cyBlcnJvciBtZXNzYWdlIHdoZW4gQ0RLIHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggZmxhZ3MgY29tbWFuZCAqL1xuICBhc3luYyBzaG93SW5jb21wYXRpYmxlVmVyc2lvbkVycm9yKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZXJyb3IoJ1RoZSBcXCdjZGsgZmxhZ3NcXCcgY29tbWFuZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBBV1MgQ0RLIGxpYnJhcnkgdXNlZCBieSB5b3VyIGFwcGxpY2F0aW9uLiBQbGVhc2UgdXBncmFkZSB0byAyLjIxMi4wIG9yIGFib3ZlLicpO1xuICB9XG5cbiAgLyoqIFZhbGlkYXRlcyBhbGwgcGFyYW1ldGVycyBhbmQgcmV0dXJucyB0cnVlIGlmIHZhbGlkLCBmYWxzZSBpZiBhbnkgdmFsaWRhdGlvbiBmYWlscyAqL1xuICBhc3luYyB2YWxpZGF0ZVBhcmFtcyhwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdmFsaWRhdGlvbnMgPSBbXG4gICAgICAoKSA9PiB0aGlzLnZhbGlkYXRlRmxhZ05hbWVBbmRBbGwocGFyYW1zKSxcbiAgICAgICgpID0+IHRoaXMudmFsaWRhdGVTZXRSZXF1aXJlbWVudChwYXJhbXMpLFxuICAgICAgKCkgPT4gdGhpcy52YWxpZGF0ZVZhbHVlUmVxdWlyZW1lbnQocGFyYW1zKSxcbiAgICAgICgpID0+IHRoaXMudmFsaWRhdGVNdXR1YWxseUV4Y2x1c2l2ZShwYXJhbXMpLFxuICAgICAgKCkgPT4gdGhpcy52YWxpZGF0ZVVuY29uZmlndXJlZFVzYWdlKHBhcmFtcyksXG4gICAgICAoKSA9PiB0aGlzLnZhbGlkYXRlU2V0V2l0aEZsYWdzKHBhcmFtcyksXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiB2YWxpZGF0aW9ucykge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHZhbGlkYXRpb24oKTtcbiAgICAgIGlmICghaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhhdCAtLWFsbCBhbmQgc3BlY2lmaWMgZmxhZyBuYW1lcyBhcmUgbm90IHVzZWQgdG9nZXRoZXIgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUZsYWdOYW1lQW5kQWxsKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAocGFyYW1zLkZMQUdOQU1FICYmIHBhcmFtcy5hbGwpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZXJyb3IoJ0Vycm9yOiBDYW5ub3QgdXNlIGJvdGggLS1hbGwgYW5kIGEgc3BlY2lmaWMgZmxhZyBuYW1lLiBQbGVhc2UgdXNlIGVpdGhlciAtLWFsbCB0byBzaG93IGFsbCBmbGFncyBvciBzcGVjaWZ5IGEgc2luZ2xlIGZsYWcgbmFtZS4nKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogVmFsaWRhdGVzIHRoYXQgbW9kaWZpY2F0aW9uIG9wdGlvbnMgcmVxdWlyZSAtLXNldCBmbGFnICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVTZXRSZXF1aXJlbWVudChwYXJhbXM6IEZsYWdPcGVyYXRpb25zUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKChwYXJhbXMudmFsdWUgfHwgcGFyYW1zLnJlY29tbWVuZGVkIHx8IHBhcmFtcy5kZWZhdWx0IHx8IHBhcmFtcy51bmNvbmZpZ3VyZWQpICYmICFwYXJhbXMuc2V0KSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdFcnJvcjogVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tc2V0LicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhhdCAtLXZhbHVlIHJlcXVpcmVzIGEgc3BlY2lmaWMgZmxhZyBuYW1lICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVWYWx1ZVJlcXVpcmVtZW50KHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAocGFyYW1zLnZhbHVlICYmICFwYXJhbXMuRkxBR05BTUUpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZXJyb3IoJ0Vycm9yOiAtLXZhbHVlIHJlcXVpcmVzIGEgc3BlY2lmaWMgZmxhZyBuYW1lLiBQbGVhc2Ugc3BlY2lmeSBhIGZsYWcgbmFtZSB3aGVuIHByb3ZpZGluZyBhIHZhbHVlLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhhdCBtdXR1YWxseSBleGNsdXNpdmUgb3B0aW9ucyBhcmUgbm90IHVzZWQgdG9nZXRoZXIgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZU11dHVhbGx5RXhjbHVzaXZlKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAocGFyYW1zLnJlY29tbWVuZGVkICYmIHBhcmFtcy5kZWZhdWx0KSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdFcnJvcjogQ2Fubm90IHVzZSBib3RoIC0tcmVjb21tZW5kZWQgYW5kIC0tZGVmYXVsdC4gUGxlYXNlIGNob29zZSBvbmUgb3B0aW9uLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnVuY29uZmlndXJlZCAmJiBwYXJhbXMuYWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdFcnJvcjogQ2Fubm90IHVzZSBib3RoIC0tdW5jb25maWd1cmVkIGFuZCAtLWFsbC4gUGxlYXNlIGNob29zZSBvbmUgb3B0aW9uLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhhdCAtLXVuY29uZmlndXJlZCBpcyBub3QgdXNlZCB3aXRoIHNwZWNpZmljIGZsYWcgbmFtZXMgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVVuY29uZmlndXJlZFVzYWdlKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAocGFyYW1zLnVuY29uZmlndXJlZCAmJiBwYXJhbXMuRkxBR05BTUUpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZXJyb3IoJ0Vycm9yOiBDYW5ub3QgdXNlIC0tdW5jb25maWd1cmVkIHdpdGggYSBzcGVjaWZpYyBmbGFnIG5hbWUuIC0tdW5jb25maWd1cmVkIHdvcmtzIHdpdGggbXVsdGlwbGUgZmxhZ3MuJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIFZhbGlkYXRlcyB0aGF0IC0tc2V0IG9wZXJhdGlvbnMgaGF2ZSByZXF1aXJlZCBhY2NvbXBhbnlpbmcgb3B0aW9ucyAqL1xuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlU2V0V2l0aEZsYWdzKHBhcmFtczogRmxhZ09wZXJhdGlvbnNQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAocGFyYW1zLnNldCAmJiBwYXJhbXMuRkxBR05BTUUgJiYgIXBhcmFtcy52YWx1ZSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5lcnJvcignRXJyb3I6IFdoZW4gc2V0dGluZyBhIHNwZWNpZmljIGZsYWcsIHlvdSBtdXN0IHByb3ZpZGUgYSAtLXZhbHVlLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNldCAmJiBwYXJhbXMuYWxsICYmICFwYXJhbXMucmVjb21tZW5kZWQgJiYgIXBhcmFtcy5kZWZhdWx0KSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmVycm9yKCdFcnJvcjogV2hlbiB1c2luZyAtLXNldCB3aXRoIC0tYWxsLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciAtLXJlY29tbWVuZGVkIG9yIC0tZGVmYXVsdC4nKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zZXQgJiYgcGFyYW1zLnVuY29uZmlndXJlZCAmJiAhcGFyYW1zLnJlY29tbWVuZGVkICYmICFwYXJhbXMuZGVmYXVsdCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5lcnJvcignRXJyb3I6IFdoZW4gdXNpbmcgLS1zZXQgd2l0aCAtLXVuY29uZmlndXJlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgLS1yZWNvbW1lbmRlZCBvciAtLWRlZmF1bHQuJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2V0ICYmICFwYXJhbXMuYWxsICYmICFwYXJhbXMudW5jb25maWd1cmVkICYmICFwYXJhbXMuRkxBR05BTUUpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZXJyb3IoJ0Vycm9yOiBXaGVuIHVzaW5nIC0tc2V0LCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciAtLWFsbCwgLS11bmNvbmZpZ3VyZWQsIG9yIHByb3ZpZGUgYSBzcGVjaWZpYyBmbGFnIG5hbWUuJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=