UNPKG

projen

Version:

CDK for software projects

178 lines • 19.8 kB
"use strict"; var _a, _b, _c, _d; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApprovalLevel = exports.CdkConfig = exports.CdkFeatureFlags = exports.CdkFeatureFlagsV2 = exports.CdkFeatureFlagsV1 = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const fast_json_patch_1 = require("fast-json-patch"); const component_1 = require("../component"); const json_1 = require("../json"); const util_1 = require("../util"); const internal_1 = require("./internal"); /** * CDK V1 feature flags configuration. * @deprecated CDK V1 is EOS. Upgrade to CDK V2. */ class CdkFeatureFlagsV1 { constructor(flags) { this.flags = flags; } } exports.CdkFeatureFlagsV1 = CdkFeatureFlagsV1; _a = JSII_RTTI_SYMBOL_1; CdkFeatureFlagsV1[_a] = { fqn: "projen.awscdk.CdkFeatureFlagsV1", version: "0.99.34" }; /** * Disable all feature flags. */ CdkFeatureFlagsV1.NONE = new CdkFeatureFlagsV1({}); /** * Enable all CDK V1 feature flags. */ CdkFeatureFlagsV1.ALL = new CdkFeatureFlagsV1(internal_1.FEATURE_FLAGS_V1); /** * CDK V2 feature flags configuration. */ class CdkFeatureFlagsV2 { /** * Attempt to load the feature flags from the `aws-cdk-lib/recommended-feature-flags.json` in a locally available npm package. * This file is typically only present in AWS CDK TypeScript projects, but can yield more accurate results. * * Falls back to all known feature flags if not found. */ static fromLocalAwsCdkLib() { try { const featureFlags = (0, util_1.tryReadFileSync)(require.resolve("aws-cdk-lib/recommended-feature-flags.json", { paths: [process.cwd()], })) || "{}"; return new CdkFeatureFlagsV2(JSON.parse(featureFlags)); } catch { return CdkFeatureFlags.V2.ALL; } } constructor(flags) { this.flags = flags; } } exports.CdkFeatureFlagsV2 = CdkFeatureFlagsV2; _b = JSII_RTTI_SYMBOL_1; CdkFeatureFlagsV2[_b] = { fqn: "projen.awscdk.CdkFeatureFlagsV2", version: "0.99.34" }; /** * Disable all feature flags. */ CdkFeatureFlagsV2.NONE = new CdkFeatureFlagsV2({}); /** * Enable all CDK V2 feature flags known to projen. * These might not include feature flags, if your version of projen isn't up-to-date. * * Make sure to double-check any changes to feature flags in `cdk.json` before deploying. * Unexpected changes may cause breaking changes in your CDK app. * You can overwrite any feature flag by passing it into the context field. */ CdkFeatureFlagsV2.ALL = new CdkFeatureFlagsV2(internal_1.FEATURE_FLAGS_V2); /** * CDK feature flags configuration. */ class CdkFeatureFlags { constructor(flags) { this.flags = flags; } } exports.CdkFeatureFlags = CdkFeatureFlags; _c = JSII_RTTI_SYMBOL_1; CdkFeatureFlags[_c] = { fqn: "projen.awscdk.CdkFeatureFlags", version: "0.99.34" }; /** * CDK V1 feature flags configuration. * @deprecated CDK V1 is EOS. Upgrade to CDK V2. */ CdkFeatureFlags.V1 = CdkFeatureFlagsV1; /** * CDK V2 feature flags configuration. */ CdkFeatureFlags.V2 = CdkFeatureFlagsV2; /** * Represents cdk.json file. */ class CdkConfig extends component_1.Component { constructor(project, options) { super(project); this.cdkout = options.cdkout ?? "cdk.out"; this._include = options.watchIncludes ?? []; this._exclude = options.watchExcludes ?? []; const flags = options.featureFlags?.flags ?? {}; this._context = { ...flags, // Customer context should take precedence over the default feature flags ...(options.context ?? {}), }; this.json = new json_1.JsonFile(project, "cdk.json", { omitEmpty: true, obj: { app: options.app, context: this._context, requireApproval: options.requireApproval, output: this.cdkout, build: options.buildCommand, watch: { include: () => this._include, exclude: () => this._exclude, }, }, }); project.gitignore.exclude(`/${this.cdkout}/`); project.gitignore.exclude(".cdk.staging/"); } /** * Add includes to `cdk.json`. * @param patterns The includes to add. */ addIncludes(...patterns) { this._include.push(...patterns); } /** * Add excludes to `cdk.json`. * @param patterns The excludes to add. */ addExcludes(...patterns) { this._exclude.push(...patterns); } /** * List of glob patterns to be included by CDK. */ get include() { return [...this._include]; } /** * List of glob patterns to be excluded by CDK. */ get exclude() { return [...this._exclude]; } /** * The context to write to cdk.json. */ get context() { return (0, fast_json_patch_1.deepClone)(this._context); } } exports.CdkConfig = CdkConfig; _d = JSII_RTTI_SYMBOL_1; CdkConfig[_d] = { fqn: "projen.awscdk.CdkConfig", version: "0.99.34" }; /** * Which approval is required when deploying CDK apps. */ var ApprovalLevel; (function (ApprovalLevel) { /** * Approval is never required */ ApprovalLevel["NEVER"] = "never"; /** * Requires approval on any IAM or security-group-related change */ ApprovalLevel["ANY_CHANGE"] = "any-change"; /** * Requires approval when IAM statements or traffic rules are added; removals don't require approval */ ApprovalLevel["BROADENING"] = "broadening"; })(ApprovalLevel || (exports.ApprovalLevel = ApprovalLevel = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvY2RrLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUE0QztBQUM1Qyw0Q0FBeUM7QUFDekMsa0NBQW1DO0FBRW5DLGtDQUEwQztBQUMxQyx5Q0FBZ0U7QUFFaEU7OztHQUdHO0FBQ0gsTUFBYSxpQkFBaUI7SUFhNUIsWUFBb0IsS0FBOEI7UUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQzs7QUFmSCw4Q0FnQkM7OztBQWZDOztHQUVHO0FBQ29CLHNCQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4RDs7R0FFRztBQUNvQixxQkFBRyxHQUFHLElBQUksaUJBQWlCLENBQUMsMkJBQWdCLENBQUMsQ0FBQztBQVN2RTs7R0FFRztBQUNILE1BQWEsaUJBQWlCO0lBZ0I1Qjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0I7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQ2hCLElBQUEsc0JBQWUsRUFDYixPQUFPLENBQUMsT0FBTyxDQUFDLDRDQUE0QyxFQUFFO2dCQUM1RCxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDdkIsQ0FBQyxDQUNILElBQUksSUFBSSxDQUFDO1lBRVosT0FBTyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxlQUFlLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUlELFlBQW9CLEtBQThCO1FBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7O0FBekNILDhDQTBDQzs7O0FBekNDOztHQUVHO0FB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RUc7SUFDSCxnQ0FBZSxDQUFBO0lBQ2Y7O09BRUc7SUFDSCwwQ0FBeUIsQ0FBQTtJQUN6Qjs7T0FFRztJQUNILDBDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFiVyxhQUFhLDZCQUFiLGFBQWEsUUFheEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tIFwiZmFzdC1qc29uLXBhdGNoXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuLi9qc29uXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IHRyeVJlYWRGaWxlU3luYyB9IGZyb20gXCIuLi91dGlsXCI7XG5pbXBvcnQgeyBGRUFUVVJFX0ZMQUdTX1YxLCBGRUFUVVJFX0ZMQUdTX1YyIH0gZnJvbSBcIi4vaW50ZXJuYWxcIjtcblxuLyoqXG4gKiBDREsgVjEgZmVhdHVyZSBmbGFncyBjb25maWd1cmF0aW9uLlxuICogQGRlcHJlY2F0ZWQgQ0RLIFYxIGlzIEVPUy4gVXBncmFkZSB0byBDREsgVjIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtGZWF0dXJlRmxhZ3NWMSBpbXBsZW1lbnRzIElDZGtGZWF0dXJlRmxhZ3Mge1xuICAvKipcbiAgICogRGlzYWJsZSBhbGwgZmVhdHVyZSBmbGFncy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ORSA9IG5ldyBDZGtGZWF0dXJlRmxhZ3NWMSh7fSk7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhbGwgQ0RLIFYxIGZlYXR1cmUgZmxhZ3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTCA9IG5ldyBDZGtGZWF0dXJlRmxhZ3NWMShGRUFUVVJFX0ZMQUdTX1YxKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG59XG5cbi8qKlxuICogQ0RLIFYyIGZlYXR1cmUgZmxhZ3MgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0ZlYXR1cmVGbGFnc1YyIGltcGxlbWVudHMgSUNka0ZlYXR1cmVGbGFncyB7XG4gIC8qKlxuICAgKiBEaXNhYmxlIGFsbCBmZWF0dXJlIGZsYWdzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT05FID0gbmV3IENka0ZlYXR1cmVGbGFnc1YyKHt9KTtcblxuICAvKipcbiAgICogRW5hYmxlIGFsbCBDREsgVjIgZmVhdHVyZSBmbGFncyBrbm93biB0byBwcm9qZW4uXG4gICAqIFRoZXNlIG1pZ2h0IG5vdCBpbmNsdWRlIGZlYXR1cmUgZmxhZ3MsIGlmIHlvdXIgdmVyc2lvbiBvZiBwcm9qZW4gaXNuJ3QgdXAtdG8tZGF0ZS5cbiAgICpcbiAgICogTWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayBhbnkgY2hhbmdlcyB0byBmZWF0dXJlIGZsYWdzIGluIGBjZGsuanNvbmAgYmVmb3JlIGRlcGxveWluZy5cbiAgICogVW5leHBlY3RlZCBjaGFuZ2VzIG1heSBjYXVzZSBicmVha2luZyBjaGFuZ2VzIGluIHlvdXIgQ0RLIGFwcC5cbiAgICogWW91IGNhbiBvdmVyd3JpdGUgYW55IGZlYXR1cmUgZmxhZyBieSBwYXNzaW5nIGl0IGludG8gdGhlIGNvbnRleHQgZmllbGQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTCA9IG5ldyBDZGtGZWF0dXJlRmxhZ3NWMihGRUFUVVJFX0ZMQUdTX1YyKTtcblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBsb2FkIHRoZSBmZWF0dXJlIGZsYWdzIGZyb20gdGhlIGBhd3MtY2RrLWxpYi9yZWNvbW1lbmRlZC1mZWF0dXJlLWZsYWdzLmpzb25gIGluIGEgbG9jYWxseSBhdmFpbGFibGUgbnBtIHBhY2thZ2UuXG4gICAqIFRoaXMgZmlsZSBpcyB0eXBpY2FsbHkgb25seSBwcmVzZW50IGluIEFXUyBDREsgVHlwZVNjcmlwdCBwcm9qZWN0cywgYnV0IGNhbiB5aWVsZCBtb3JlIGFjY3VyYXRlIHJlc3VsdHMuXG4gICAqXG4gICAqIEZhbGxzIGJhY2sgdG8gYWxsIGtub3duIGZlYXR1cmUgZmxhZ3MgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tTG9jYWxBd3NDZGtMaWIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9XG4gICAgICAgIHRyeVJlYWRGaWxlU3luYyhcbiAgICAgICAgICByZXF1aXJlLnJlc29sdmUoXCJhd3MtY2RrLWxpYi9yZWNvbW1lbmRlZC1mZWF0dXJlLWZsYWdzLmpzb25cIiwge1xuICAgICAgICAgICAgcGF0aHM6IFtwcm9jZXNzLmN3ZCgpXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSB8fCBcInt9XCI7XG5cbiAgICAgIHJldHVybiBuZXcgQ2RrRmVhdHVyZUZsYWdzVjIoSlNPTi5wYXJzZShmZWF0dXJlRmxhZ3MpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBDZGtGZWF0dXJlRmxhZ3MuVjIuQUxMO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHN1YmNsYXNzYWJsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDZGtGZWF0dXJlRmxhZ3Mge1xuICByZWFkb25seSBmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQ0RLIGZlYXR1cmUgZmxhZ3MgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0ZlYXR1cmVGbGFncyBpbXBsZW1lbnRzIElDZGtGZWF0dXJlRmxhZ3Mge1xuICAvKipcbiAgICogQ0RLIFYxIGZlYXR1cmUgZmxhZ3MgY29uZmlndXJhdGlvbi5cbiAgICogQGRlcHJlY2F0ZWQgQ0RLIFYxIGlzIEVPUy4gVXBncmFkZSB0byBDREsgVjIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYxID0gQ2RrRmVhdHVyZUZsYWdzVjE7XG5cbiAgLyoqXG4gICAqIENESyBWMiBmZWF0dXJlIGZsYWdzIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyID0gQ2RrRmVhdHVyZUZsYWdzVjI7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgfVxufVxuXG4vKipcbiAqIENvbW1vbiBvcHRpb25zIGZvciBgY2RrLmpzb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka0NvbmZpZ0NvbW1vbk9wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb250ZXh0IHRvIGluY2x1ZGUgaW4gYGNkay5qc29uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGNvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBGZWF0dXJlIGZsYWdzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgaW4gYGNkay5qc29uYC5cbiAgICpcbiAgICogTWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayBhbnkgY2hhbmdlcyB0byBmZWF0dXJlIGZsYWdzIGluIGBjZGsuanNvbmAgYmVmb3JlIGRlcGxveWluZy5cbiAgICogVW5leHBlY3RlZCBjaGFuZ2VzIG1heSBjYXVzZSBicmVha2luZyBjaGFuZ2VzIGluIHlvdXIgQ0RLIGFwcC5cbiAgICogWW91IGNhbiBvdmVyd3JpdGUgYW55IGZlYXR1cmUgZmxhZyBieSBwYXNzaW5nIGl0IGludG8gdGhlIGNvbnRleHQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZmVhdHVyZSBmbGFncyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlRmxhZ3M/OiBJQ2RrRmVhdHVyZUZsYWdzO1xuXG4gIC8qKlxuICAgKiBUbyBwcm90ZWN0IHlvdSBhZ2FpbnN0IHVuaW50ZW5kZWQgY2hhbmdlcyB0aGF0IGFmZmVjdCB5b3VyIHNlY3VyaXR5IHBvc3R1cmUsXG4gICAqIHRoZSBBV1MgQ0RLIFRvb2xraXQgcHJvbXB0cyB5b3UgdG8gYXBwcm92ZSBzZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMgYmVmb3JlIGRlcGxveWluZyB0aGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcHByb3ZhbExldmVsLkJST0FERU5JTkdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVBcHByb3ZhbD86IEFwcHJvdmFsTGV2ZWw7XG5cbiAgLyoqXG4gICAqIGNkay5vdXQgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImNkay5vdXRcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2Rrb3V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbW1hbmQgdG8gZXhlY3V0ZSBiZWZvcmUgc3ludGhlc2lzLiBUaGlzIGNvbW1hbmQgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAgKiBydW5uaW5nIGBjZGsgc3ludGhgIG9yIHdoZW4gYGNkayB3YXRjaGAgaWRlbnRpZmllcyBhIGNoYW5nZSBpbiB5b3VyIHNvdXJjZVxuICAgKiBjb2RlIGJlZm9yZSByZWRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYnVpbGQgY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHbG9iIHBhdHRlcm5zIHRvIGluY2x1ZGUgaW4gYGNkayB3YXRjaGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSB3YXRjaEluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdsb2IgcGF0dGVybnMgdG8gZXhjbHVkZSBmcm9tIGBjZGsgd2F0Y2hgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgd2F0Y2hFeGNsdWRlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBDZGtKc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtDb25maWdPcHRpb25zIGV4dGVuZHMgQ2RrQ29uZmlnQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgaW4gb3JkZXIgdG8gc3ludGhlc2l6ZSB0aGUgQ0RLIGFwcGxpY2F0aW9uXG4gICAqIChsYW5ndWFnZSBzcGVjaWZpYykuXG4gICAqL1xuICByZWFkb25seSBhcHA6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGNkay5qc29uIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtDb25maWcgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgSlNPTiBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGpzb246IEpzb25GaWxlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjZGsub3V0IGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjZGtvdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRvIGJlIGluY2x1ZGVkIGJ5IENESy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luY2x1ZGU6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGdsb2IgcGF0dGVybnMgdG8gYmUgZXhjbHVkZWQgYnkgQ0RLLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZXhjbHVkZTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0IHRvIHdyaXRlIHRvIGNkay5qc29uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogQ2RrQ29uZmlnT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5jZGtvdXQgPSBvcHRpb25zLmNka291dCA/PyBcImNkay5vdXRcIjtcbiAgICB0aGlzLl9pbmNsdWRlID0gb3B0aW9ucy53YXRjaEluY2x1ZGVzID8/IFtdO1xuICAgIHRoaXMuX2V4Y2x1ZGUgPSBvcHRpb25zLndhdGNoRXhjbHVkZXMgPz8gW107XG5cbiAgICBjb25zdCBmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBvcHRpb25zLmZlYXR1cmVGbGFncz8uZmxhZ3MgPz8ge307XG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLmZsYWdzLFxuICAgICAgLy8gQ3VzdG9tZXIgY29udGV4dCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIGRlZmF1bHQgZmVhdHVyZSBmbGFnc1xuICAgICAgLi4uKG9wdGlvbnMuY29udGV4dCA/PyB7fSksXG4gICAgfTtcblxuICAgIHRoaXMuanNvbiA9IG5ldyBKc29uRmlsZShwcm9qZWN0LCBcImNkay5qc29uXCIsIHtcbiAgICAgIG9taXRFbXB0eTogdHJ1ZSxcbiAgICAgIG9iajoge1xuICAgICAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgICAgICBjb250ZXh0OiB0aGlzLl9jb250ZXh0LFxuICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICBvdXRwdXQ6IHRoaXMuY2Rrb3V0LFxuICAgICAgICBidWlsZDogb3B0aW9ucy5idWlsZENvbW1hbmQsXG4gICAgICAgIHdhdGNoOiB7XG4gICAgICAgICAgaW5jbHVkZTogKCkgPT4gdGhpcy5faW5jbHVkZSxcbiAgICAgICAgICBleGNsdWRlOiAoKSA9PiB0aGlzLl9leGNsdWRlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHByb2plY3QuZ2l0aWdub3JlLmV4Y2x1ZGUoYC8ke3RoaXMuY2Rrb3V0fS9gKTtcbiAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKFwiLmNkay5zdGFnaW5nL1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaW5jbHVkZXMgdG8gYGNkay5qc29uYC5cbiAgICogQHBhcmFtIHBhdHRlcm5zIFRoZSBpbmNsdWRlcyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkSW5jbHVkZXMoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faW5jbHVkZS5wdXNoKC4uLnBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZXhjbHVkZXMgdG8gYGNkay5qc29uYC5cbiAgICogQHBhcmFtIHBhdHRlcm5zIFRoZSBleGNsdWRlcyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkRXhjbHVkZXMoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZXhjbHVkZS5wdXNoKC4uLnBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGdsb2IgcGF0dGVybnMgdG8gYmUgaW5jbHVkZWQgYnkgQ0RLLlxuICAgKi9cbiAgcHVibGljIGdldCBpbmNsdWRlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2luY2x1ZGVdO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZ2xvYiBwYXR0ZXJucyB0byBiZSBleGNsdWRlZCBieSBDREsuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4Y2x1ZGUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fZXhjbHVkZV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRleHQgdG8gd3JpdGUgdG8gY2RrLmpzb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbnRleHQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBkZWVwQ2xvbmUodGhpcy5fY29udGV4dCk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGljaCBhcHByb3ZhbCBpcyByZXF1aXJlZCB3aGVuIGRlcGxveWluZyBDREsgYXBwcy5cbiAqL1xuZXhwb3J0IGVudW0gQXBwcm92YWxMZXZlbCB7XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBpcyBuZXZlciByZXF1aXJlZFxuICAgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBhcHByb3ZhbCBvbiBhbnkgSUFNIG9yIHNlY3VyaXR5LWdyb3VwLXJlbGF0ZWQgY2hhbmdlXG4gICAqL1xuICBBTllfQ0hBTkdFID0gXCJhbnktY2hhbmdlXCIsXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBhcHByb3ZhbCB3aGVuIElBTSBzdGF0ZW1lbnRzIG9yIHRyYWZmaWMgcnVsZXMgYXJlIGFkZGVkOyByZW1vdmFscyBkb24ndCByZXF1aXJlIGFwcHJvdmFsXG4gICAqL1xuICBCUk9BREVOSU5HID0gXCJicm9hZGVuaW5nXCIsXG59XG4iXX0=