UNPKG

projen

Version:

CDK for software projects

171 lines • 18.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApprovalLevel = exports.CdkConfig = exports.CdkFeatureFlags = exports.CdkFeatureFlagsV2 = 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 V2 feature flags configuration. */ class CdkFeatureFlagsV2 { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.awscdk.CdkFeatureFlagsV2", version: "0.103.12" }; /** * Disable all feature flags. */ static 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. */ static ALL = new CdkFeatureFlagsV2(internal_1.FEATURE_FLAGS_V2); /** * 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; } } flags; constructor(flags) { this.flags = flags; } } exports.CdkFeatureFlagsV2 = CdkFeatureFlagsV2; /** * CDK feature flags configuration. */ class CdkFeatureFlags { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.awscdk.CdkFeatureFlags", version: "0.103.12" }; /** * CDK V2 feature flags configuration. */ static V2 = CdkFeatureFlagsV2; flags; constructor(flags) { this.flags = flags; } } exports.CdkFeatureFlags = CdkFeatureFlags; /** * Represents cdk.json file. */ class CdkConfig extends component_1.Component { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.awscdk.CdkConfig", version: "0.103.12" }; /** * Represents the JSON file. */ json; /** * Name of the cdk.out directory. */ cdkout; /** * List of glob patterns to be included by CDK. */ _include; /** * List of glob patterns to be excluded by CDK. */ _exclude; /** * The context to write to cdk.json. */ _context; 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; /** * 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvY2RrLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEscURBQTRDO0FBQzVDLDRDQUF5QztBQUN6QyxrQ0FBbUM7QUFFbkMsa0NBQTBDO0FBQzFDLHlDQUE4QztBQUU5Qzs7R0FFRztBQUNILE1BQWEsaUJBQWlCOztJQUM1Qjs7T0FFRztJQUNJLE1BQU0sQ0FBVSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV4RDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFVLEdBQUcsR0FBRyxJQUFJLGlCQUFpQixDQUFDLDJCQUFnQixDQUFDLENBQUM7SUFFckU7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsa0JBQWtCO1FBQzlCLElBQUksQ0FBQztZQUNILE1BQU0sWUFBWSxHQUNoQixJQUFBLHNCQUFlLEVBQ2IsT0FBTyxDQUFDLE9BQU8sQ0FBQyw0Q0FBNEMsRUFBRTtnQkFDNUQsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3ZCLENBQUMsQ0FDSCxJQUFJLElBQUksQ0FBQztZQUVaLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFZSxLQUFLLENBQTBCO0lBRS9DLFlBQW9CLEtBQThCO1FBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7O0FBekNILDhDQTBDQztBQVVEOztHQUVHO0FBQ0gsTUFBYSxlQUFlOztJQUMxQjs7T0FFRztJQUNJLE1BQU0sQ0FBVSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7SUFFOUIsS0FBSyxD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YUFBYSw2QkFBYixhQUFhLFFBYXhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSBcImZhc3QtanNvbi1wYXRjaFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tIFwiLi4vanNvblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IHRyeVJlYWRGaWxlU3luYyB9IGZyb20gXCIuLi91dGlsXCI7XG5pbXBvcnQgeyBGRUFUVVJFX0ZMQUdTX1YyIH0gZnJvbSBcIi4vaW50ZXJuYWxcIjtcblxuLyoqXG4gKiBDREsgVjIgZmVhdHVyZSBmbGFncyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2RrRmVhdHVyZUZsYWdzVjIgaW1wbGVtZW50cyBJQ2RrRmVhdHVyZUZsYWdzIHtcbiAgLyoqXG4gICAqIERpc2FibGUgYWxsIGZlYXR1cmUgZmxhZ3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PTkUgPSBuZXcgQ2RrRmVhdHVyZUZsYWdzVjIoe30pO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgYWxsIENESyBWMiBmZWF0dXJlIGZsYWdzIGtub3duIHRvIHByb2plbi5cbiAgICogVGhlc2UgbWlnaHQgbm90IGluY2x1ZGUgZmVhdHVyZSBmbGFncywgaWYgeW91ciB2ZXJzaW9uIG9mIHByb2plbiBpc24ndCB1cC10by1kYXRlLlxuICAgKlxuICAgKiBNYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrIGFueSBjaGFuZ2VzIHRvIGZlYXR1cmUgZmxhZ3MgaW4gYGNkay5qc29uYCBiZWZvcmUgZGVwbG95aW5nLlxuICAgKiBVbmV4cGVjdGVkIGNoYW5nZXMgbWF5IGNhdXNlIGJyZWFraW5nIGNoYW5nZXMgaW4geW91ciBDREsgYXBwLlxuICAgKiBZb3UgY2FuIG92ZXJ3cml0ZSBhbnkgZmVhdHVyZSBmbGFnIGJ5IHBhc3NpbmcgaXQgaW50byB0aGUgY29udGV4dCBmaWVsZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxMID0gbmV3IENka0ZlYXR1cmVGbGFnc1YyKEZFQVRVUkVfRkxBR1NfVjIpO1xuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIGxvYWQgdGhlIGZlYXR1cmUgZmxhZ3MgZnJvbSB0aGUgYGF3cy1jZGstbGliL3JlY29tbWVuZGVkLWZlYXR1cmUtZmxhZ3MuanNvbmAgaW4gYSBsb2NhbGx5IGF2YWlsYWJsZSBucG0gcGFja2FnZS5cbiAgICogVGhpcyBmaWxlIGlzIHR5cGljYWxseSBvbmx5IHByZXNlbnQgaW4gQVdTIENESyBUeXBlU2NyaXB0IHByb2plY3RzLCBidXQgY2FuIHlpZWxkIG1vcmUgYWNjdXJhdGUgcmVzdWx0cy5cbiAgICpcbiAgICogRmFsbHMgYmFjayB0byBhbGwga25vd24gZmVhdHVyZSBmbGFncyBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Mb2NhbEF3c0Nka0xpYigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZUZsYWdzID1cbiAgICAgICAgdHJ5UmVhZEZpbGVTeW5jKFxuICAgICAgICAgIHJlcXVpcmUucmVzb2x2ZShcImF3cy1jZGstbGliL3JlY29tbWVuZGVkLWZlYXR1cmUtZmxhZ3MuanNvblwiLCB7XG4gICAgICAgICAgICBwYXRoczogW3Byb2Nlc3MuY3dkKCldLFxuICAgICAgICAgIH0pLFxuICAgICAgICApIHx8IFwie31cIjtcblxuICAgICAgcmV0dXJuIG5ldyBDZGtGZWF0dXJlRmxhZ3NWMihKU09OLnBhcnNlKGZlYXR1cmVGbGFncykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIENka0ZlYXR1cmVGbGFncy5WMi5BTEw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAc3ViY2xhc3NhYmxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNka0ZlYXR1cmVGbGFncyB7XG4gIHJlYWRvbmx5IGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBDREsgZmVhdHVyZSBmbGFncyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2RrRmVhdHVyZUZsYWdzIGltcGxlbWVudHMgSUNka0ZlYXR1cmVGbGFncyB7XG4gIC8qKlxuICAgKiBDREsgVjIgZmVhdHVyZSBmbGFncyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMiA9IENka0ZlYXR1cmVGbGFnc1YyO1xuXG4gIHB1YmxpYyByZWFkb25seSBmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21tb24gb3B0aW9ucyBmb3IgYGNkay5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtDb25maWdDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgY29udGV4dCB0byBpbmNsdWRlIGluIGBjZGsuanNvbmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogRmVhdHVyZSBmbGFncyB0aGF0IHNob3VsZCBiZSBlbmFibGVkIGluIGBjZGsuanNvbmAuXG4gICAqXG4gICAqIE1ha2Ugc3VyZSB0byBkb3VibGUtY2hlY2sgYW55IGNoYW5nZXMgdG8gZmVhdHVyZSBmbGFncyBpbiBgY2RrLmpzb25gIGJlZm9yZSBkZXBsb3lpbmcuXG4gICAqIFVuZXhwZWN0ZWQgY2hhbmdlcyBtYXkgY2F1c2UgYnJlYWtpbmcgY2hhbmdlcyBpbiB5b3VyIENESyBhcHAuXG4gICAqIFlvdSBjYW4gb3ZlcndyaXRlIGFueSBmZWF0dXJlIGZsYWcgYnkgcGFzc2luZyBpdCBpbnRvIHRoZSBjb250ZXh0IGZpZWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGZlYXR1cmUgZmxhZ3MgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZUZsYWdzPzogSUNka0ZlYXR1cmVGbGFncztcblxuICAvKipcbiAgICogVG8gcHJvdGVjdCB5b3UgYWdhaW5zdCB1bmludGVuZGVkIGNoYW5nZXMgdGhhdCBhZmZlY3QgeW91ciBzZWN1cml0eSBwb3N0dXJlLFxuICAgKiB0aGUgQVdTIENESyBUb29sa2l0IHByb21wdHMgeW91IHRvIGFwcHJvdmUgc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzIGJlZm9yZSBkZXBsb3lpbmcgdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXBwcm92YWxMZXZlbC5CUk9BREVOSU5HXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlQXBwcm92YWw/OiBBcHByb3ZhbExldmVsO1xuXG4gIC8qKlxuICAgKiBjZGsub3V0IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJjZGsub3V0XCJcbiAgICovXG4gIHJlYWRvbmx5IGNka291dD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb21tYW5kIHRvIGV4ZWN1dGUgYmVmb3JlIHN5bnRoZXNpcy4gVGhpcyBjb21tYW5kIHdpbGwgYmUgY2FsbGVkIHdoZW5cbiAgICogcnVubmluZyBgY2RrIHN5bnRoYCBvciB3aGVuIGBjZGsgd2F0Y2hgIGlkZW50aWZpZXMgYSBjaGFuZ2UgaW4geW91ciBzb3VyY2VcbiAgICogY29kZSBiZWZvcmUgcmVkZXBsb3ltZW50LlxuICAgKlxuICAgKiBUaGUgQ0RLIENMSSBydW5zIGl0IHRocm91Z2ggYSBzaGVsbCBvbiBldmVyeSBzeW50aGVzaXMsIG9uIHRoZSBtYWNoaW5lIG9mXG4gICAqIGFueW9uZSB3aG8gY2hlY2tzIG91dCB0aGUgcHJvamVjdCwgc28gc2hlbGwgc3ludGF4IGluIGl0IGlzIGludGVycHJldGVkIGFuZFxuICAgKiB0aGUgY29tbWFuZCBzaG91bGQgYmUgb25lIHlvdSB3b3VsZCBydW4geW91cnNlbGYuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYnVpbGQgY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHbG9iIHBhdHRlcm5zIHRvIGluY2x1ZGUgaW4gYGNkayB3YXRjaGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSB3YXRjaEluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdsb2IgcGF0dGVybnMgdG8gZXhjbHVkZSBmcm9tIGBjZGsgd2F0Y2hgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgd2F0Y2hFeGNsdWRlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBDZGtKc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtDb25maWdPcHRpb25zIGV4dGVuZHMgQ2RrQ29uZmlnQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgaW4gb3JkZXIgdG8gc3ludGhlc2l6ZSB0aGUgQ0RLIGFwcGxpY2F0aW9uXG4gICAqIChsYW5ndWFnZSBzcGVjaWZpYykuXG4gICAqL1xuICByZWFkb25seSBhcHA6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGNkay5qc29uIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtDb25maWcgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgSlNPTiBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGpzb246IEpzb25GaWxlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjZGsub3V0IGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjZGtvdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRvIGJlIGluY2x1ZGVkIGJ5IENESy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luY2x1ZGU6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGdsb2IgcGF0dGVybnMgdG8gYmUgZXhjbHVkZWQgYnkgQ0RLLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZXhjbHVkZTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0IHRvIHdyaXRlIHRvIGNkay5qc29uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogQ2RrQ29uZmlnT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5jZGtvdXQgPSBvcHRpb25zLmNka291dCA/PyBcImNkay5vdXRcIjtcbiAgICB0aGlzLl9pbmNsdWRlID0gb3B0aW9ucy53YXRjaEluY2x1ZGVzID8/IFtdO1xuICAgIHRoaXMuX2V4Y2x1ZGUgPSBvcHRpb25zLndhdGNoRXhjbHVkZXMgPz8gW107XG5cbiAgICBjb25zdCBmbGFnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBvcHRpb25zLmZlYXR1cmVGbGFncz8uZmxhZ3MgPz8ge307XG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLmZsYWdzLFxuICAgICAgLy8gQ3VzdG9tZXIgY29udGV4dCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIGRlZmF1bHQgZmVhdHVyZSBmbGFnc1xuICAgICAgLi4uKG9wdGlvbnMuY29udGV4dCA/PyB7fSksXG4gICAgfTtcblxuICAgIHRoaXMuanNvbiA9IG5ldyBKc29uRmlsZShwcm9qZWN0LCBcImNkay5qc29uXCIsIHtcbiAgICAgIG9taXRFbXB0eTogdHJ1ZSxcbiAgICAgIG9iajoge1xuICAgICAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgICAgICBjb250ZXh0OiB0aGlzLl9jb250ZXh0LFxuICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICBvdXRwdXQ6IHRoaXMuY2Rrb3V0LFxuICAgICAgICBidWlsZDogb3B0aW9ucy5idWlsZENvbW1hbmQsXG4gICAgICAgIHdhdGNoOiB7XG4gICAgICAgICAgaW5jbHVkZTogKCkgPT4gdGhpcy5faW5jbHVkZSxcbiAgICAgICAgICBleGNsdWRlOiAoKSA9PiB0aGlzLl9leGNsdWRlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHByb2plY3QuZ2l0aWdub3JlLmV4Y2x1ZGUoYC8ke3RoaXMuY2Rrb3V0fS9gKTtcbiAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKFwiLmNkay5zdGFnaW5nL1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaW5jbHVkZXMgdG8gYGNkay5qc29uYC5cbiAgICogQHBhcmFtIHBhdHRlcm5zIFRoZSBpbmNsdWRlcyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkSW5jbHVkZXMoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faW5jbHVkZS5wdXNoKC4uLnBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZXhjbHVkZXMgdG8gYGNkay5qc29uYC5cbiAgICogQHBhcmFtIHBhdHRlcm5zIFRoZSBleGNsdWRlcyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkRXhjbHVkZXMoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZXhjbHVkZS5wdXNoKC4uLnBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGdsb2IgcGF0dGVybnMgdG8gYmUgaW5jbHVkZWQgYnkgQ0RLLlxuICAgKi9cbiAgcHVibGljIGdldCBpbmNsdWRlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2luY2x1ZGVdO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZ2xvYiBwYXR0ZXJucyB0byBiZSBleGNsdWRlZCBieSBDREsuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4Y2x1ZGUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fZXhjbHVkZV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRleHQgdG8gd3JpdGUgdG8gY2RrLmpzb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbnRleHQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBkZWVwQ2xvbmUodGhpcy5fY29udGV4dCk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGljaCBhcHByb3ZhbCBpcyByZXF1aXJlZCB3aGVuIGRlcGxveWluZyBDREsgYXBwcy5cbiAqL1xuZXhwb3J0IGVudW0gQXBwcm92YWxMZXZlbCB7XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBpcyBuZXZlciByZXF1aXJlZFxuICAgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBhcHByb3ZhbCBvbiBhbnkgSUFNIG9yIHNlY3VyaXR5LWdyb3VwLXJlbGF0ZWQgY2hhbmdlXG4gICAqL1xuICBBTllfQ0hBTkdFID0gXCJhbnktY2hhbmdlXCIsXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBhcHByb3ZhbCB3aGVuIElBTSBzdGF0ZW1lbnRzIG9yIHRyYWZmaWMgcnVsZXMgYXJlIGFkZGVkOyByZW1vdmFscyBkb24ndCByZXF1aXJlIGFwcHJvdmFsXG4gICAqL1xuICBCUk9BREVOSU5HID0gXCJicm9hZGVuaW5nXCIsXG59XG4iXX0=