dkershner6-projen-awscdk-app
Version:
DKershner's preferred constructs for Projen AWS CDK Apps.
103 lines • 16.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Node20AwsCdkApp = void 0;
const clone_deep_1 = __importDefault(require("clone-deep"));
const dkershner6_projen_awscdk_core_1 = require("dkershner6-projen-awscdk-core");
const dkershner6_projen_typescript_1 = require("dkershner6-projen-typescript");
const projen_1 = require("projen");
const util_1 = require("projen/lib/util");
class Node20AwsCdkApp extends projen_1.awscdk.AwsCdkTypeScriptApp {
jestTransformer;
publishToAwsOptions;
constructor(options) {
const combinedOptions = (0, util_1.deepMerge)([
(0, clone_deep_1.default)(dkershner6_projen_typescript_1.RECOMMENDED_NODE_20_PROJECT_OPTIONS),
options,
]);
super(combinedOptions);
this.publishToAwsOptions = options.publishToAwsOptions;
new dkershner6_projen_typescript_1.DKBugFixes(this);
new dkershner6_projen_typescript_1.DKTasks(this);
new dkershner6_projen_typescript_1.DKEslintConfig(this);
this.jestTransformer = new dkershner6_projen_typescript_1.JestTransformer(this, options.jestOptions);
this.eslint?.allowDevDeps(`${this.srcdir}/main.ts`);
this.eslint?.allowDevDeps(`${this.srcdir}/*Stack.ts`);
this.eslint?.allowDevDeps(`${this.srcdir}/*Stack/index.ts`);
this.eslint?.allowDevDeps(`${this.srcdir}/stacks/**/*Stack.ts`);
this.eslint?.allowDevDeps(`${this.srcdir}/stacks/**/*Stack/index.ts`);
if (options.constructsVersionPinning) {
this.addDeps(`constructs@${options.constructsVersion}`);
}
this.makeDeployAndSynthTasksNotRequireApproval();
if (this.package) {
this.overridePackageTask();
}
if (this.release && options.publishToAws) {
const publishToAwsOptions = {
...(options.publishToAwsOptions ?? {}),
deployJobStepBuilder: (builderParams) => this.buildDeployToAwsJobStep(builderParams.deployTask),
defaultReleaseBranch: options.defaultReleaseBranch,
publishTasks: options.publishTasks,
jobConfiguration: {
runsOn: options.workflowRunsOn,
runsOnGroup: options.workflowRunsOnGroup,
...(options.publishToAwsOptions?.jobConfiguration ?? {}),
},
workflowBootstrapSteps: options.workflowBootstrapSteps,
workflowNodeVersion: options.workflowNodeVersion ??
options.maxNodeVersion ??
options.minNodeVersion ??
"20.10.0",
};
new dkershner6_projen_awscdk_core_1.AwsAppPublisher(this, publishToAwsOptions);
}
const cleanCompileTask = this.tasks.tryFind("clean-compile") ??
this.tasks.addTask("clean-compile", {
description: "Clean up the compiled output",
});
cleanCompileTask.exec(`rm -rf ${this.cdkConfig.cdkout}`);
}
makeDeployAndSynthTasksNotRequireApproval() {
const deployTask = this.tasks.tryFind("deploy");
if (deployTask) {
const { exec, ...restOfTaskStep } = deployTask.steps[0];
deployTask.reset(exec, {
...restOfTaskStep,
args: ["--all", "--require-approval never"],
});
}
const synthTask = this.tasks.tryFind("synth");
if (synthTask) {
const { exec, ...restOfTaskStep } = synthTask.steps[0];
synthTask.reset(exec, {
...restOfTaskStep,
args: ["--all", "--require-approval never"],
});
}
}
overridePackageTask() {
this.packageTask.reset(`mkdir -p ${this.artifactsDirectory}`);
this.packageTask.exec(`cp -r ${this.cdkConfig.cdkout} ${this.artifactsDirectory}`);
}
buildDeployToAwsJobStep(deployTask) {
const exec = deployTask.steps[0].exec;
const args = deployTask.steps[0].args;
return {
...(this.publishToAwsOptions?.deployJobStepConfiguration ?? {}),
name: this.publishToAwsOptions?.deployJobStepConfiguration?.name ??
"Deploy to AWS",
run: [
exec?.replace("cdk", `npx cdk@${this.cdkVersion}`),
...(args ?? []),
`--app ${this.artifactsDirectory}/${this.cdkConfig.cdkout}`,
]
.filter(Boolean)
.join(" "),
};
}
}
exports.Node20AwsCdkApp = Node20AwsCdkApp;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQW1DO0FBQ25DLGlGQUl1QztBQUN2QywrRUFPc0M7QUFDdEMsbUNBQXNDO0FBRXRDLDBDQUE0QztBQXVCNUMsTUFBYSxlQUFnQixTQUFRLGVBQU0sQ0FBQyxtQkFBbUI7SUFDM0MsZUFBZSxDQUFrQjtJQUVoQyxtQkFBbUIsQ0FBdUI7SUFFM0QsWUFBWSxPQUErQjtRQUN2QyxNQUFNLGVBQWUsR0FBRyxJQUFBLGdCQUFTLEVBQUM7WUFDOUIsSUFBQSxvQkFBUyxFQUFDLGtFQUFtQyxDQUFDO1lBQzlDLE9BQU87U0FDVixDQUFzQyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBRXZELElBQUkseUNBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLHNDQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSw2Q0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSw4Q0FBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sa0JBQWtCLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFN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O1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDakIsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FDOUQsQ0FBQztJQUNOLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxVQUFnQjtRQUM5QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0QyxPQUFPO1lBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSwwQkFBMEIsSUFBSSxFQUFFLENBQUM7WUFDL0QsSUFBSSxFQUNBLElBQUksQ0FBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxJQUFJO2dCQUMxRCxlQUFlO1lBQ25CLEdBQUcsRUFBRTtnQkFDRCxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEQsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7YUFDOUQ7aUJBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDZixJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUM7SUFDTixDQUFDO0NBQ0o7QUE3R0QsMENBNkdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwiY2xvbmUtZGVlcFwiO1xuaW1wb3J0IHtcbiAgICBBd3NBcHBQdWJsaXNoZXIsXG4gICAgQXdzQXBwUHVibGlzaGVyT3B0aW9ucyxcbiAgICBQdWJsaXNoVG9Bd3NPcHRpb25zLFxufSBmcm9tIFwiZGtlcnNobmVyNi1wcm9qZW4tYXdzY2RrLWNvcmVcIjtcbmltcG9ydCB7XG4gICAgUkVDT01NRU5ERURfTk9ERV8yMF9QUk9KRUNUX09QVElPTlMsXG4gICAgREtCdWdGaXhlcyxcbiAgICBES1Rhc2tzLFxuICAgIERLRXNsaW50Q29uZmlnLFxuICAgIE5vZGUyMFR5cGVTY3JpcHRQcm9qZWN0SmVzdE9wdGlvbnMsXG4gICAgSmVzdFRyYW5zZm9ybWVyLFxufSBmcm9tIFwiZGtlcnNobmVyNi1wcm9qZW4tdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgVGFzaywgYXdzY2RrIH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gXCJwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCJwcm9qZW4vbGliL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOb2RlMjBBd3NDZGtBcHBPcHRpb25zXG4gICAgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIHBpbiB0aGUgdmVyc2lvbiBvZiBjb25zdHJ1Y3RzIHRvIHRoZSB2ZXJzaW9uIHNwZWNpZmllZCBpbiB0aGVcbiAgICAgKiBgY29uc3RydWN0c1ZlcnNpb25gIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdHNWZXJzaW9uUGlubmluZz86IGJvb2xlYW47XG5cbiAgICBqZXN0T3B0aW9ucz86IE5vZGUyMFR5cGVTY3JpcHRQcm9qZWN0SmVzdE9wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHB1Ymxpc2ggdGhpcyBBcHAgdG8gQVdTLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHB1Ymxpc2hUb0F3cz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBQb3B1bGF0ZSBpbiBvcmRlciB0byBhZGQgYSBkZXBsb3kgdG8gQVdTIGpvYiB0byB0aGUgcmVsZWFzZSB3b3JrZmxvdy5cbiAgICAgKi9cbiAgICByZWFkb25seSBwdWJsaXNoVG9Bd3NPcHRpb25zPzogUHVibGlzaFRvQXdzT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE5vZGUyMEF3c0Nka0FwcCBleHRlbmRzIGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgamVzdFRyYW5zZm9ybWVyOiBKZXN0VHJhbnNmb3JtZXI7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHB1Ymxpc2hUb0F3c09wdGlvbnM/OiBQdWJsaXNoVG9Bd3NPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTm9kZTIwQXdzQ2RrQXBwT3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb21iaW5lZE9wdGlvbnMgPSBkZWVwTWVyZ2UoW1xuICAgICAgICAgICAgZGVlcENsb25lKFJFQ09NTUVOREVEX05PREVfMjBfUFJPSkVDVF9PUFRJT05TKSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIF0pIGFzIGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucztcbiAgICAgICAgc3VwZXIoY29tYmluZWRPcHRpb25zKTtcblxuICAgICAgICB0aGlzLnB1Ymxpc2hUb0F3c09wdGlvbnMgPSBvcHRpb25zLnB1Ymxpc2hUb0F3c09wdGlvbnM7XG5cbiAgICAgICAgbmV3IERLQnVnRml4ZXModGhpcyk7XG4gICAgICAgIG5ldyBES1Rhc2tzKHRoaXMpO1xuICAgICAgICBuZXcgREtFc2xpbnRDb25maWcodGhpcyk7XG4gICAgICAgIHRoaXMuamVzdFRyYW5zZm9ybWVyID0gbmV3IEplc3RUcmFuc2Zvcm1lcih0aGlzLCBvcHRpb25zLmplc3RPcHRpb25zKTtcblxuICAgICAgICB0aGlzLmVzbGludD8uYWxsb3dEZXZEZXBzKGAke3RoaXMuc3JjZGlyfS9tYWluLnRzYCk7XG4gICAgICAgIHRoaXMuZXNsaW50Py5hbGxvd0RldkRlcHMoYCR7dGhpcy5zcmNkaXJ9LypTdGFjay50c2ApO1xuICAgICAgICB0aGlzLmVzbGludD8uYWxsb3dEZXZEZXBzKGAke3RoaXMuc3JjZGlyfS8qU3RhY2svaW5kZXgudHNgKTtcbiAgICAgICAgdGhpcy5lc2xpbnQ/LmFsbG93RGV2RGVwcyhgJHt0aGlzLnNyY2Rpcn0vc3RhY2tzLyoqLypTdGFjay50c2ApO1xuICAgICAgICB0aGlzLmVzbGludD8uYWxsb3dEZXZEZXBzKGAke3RoaXMuc3JjZGlyfS9zdGFja3MvKiovKlN0YWNrL2luZGV4LnRzYCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc3RydWN0c1ZlcnNpb25QaW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFkZERlcHMoYGNvbnN0cnVjdHNAJHtvcHRpb25zLmNvbnN0cnVjdHNWZXJzaW9ufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYWtlRGVwbG95QW5kU3ludGhUYXNrc05vdFJlcXVpcmVBcHByb3ZhbCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnBhY2thZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVQYWNrYWdlVGFzaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVsZWFzZSAmJiBvcHRpb25zLnB1Ymxpc2hUb0F3cykge1xuICAgICAgICAgICAgY29uc3QgcHVibGlzaFRvQXdzT3B0aW9uczogQXdzQXBwUHVibGlzaGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi4ob3B0aW9ucy5wdWJsaXNoVG9Bd3NPcHRpb25zID8/IHt9KSxcbiAgICAgICAgICAgICAgICBkZXBsb3lKb2JTdGVwQnVpbGRlcjogKGJ1aWxkZXJQYXJhbXMpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGREZXBsb3lUb0F3c0pvYlN0ZXAoYnVpbGRlclBhcmFtcy5kZXBsb3lUYXNrKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogb3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaCxcbiAgICAgICAgICAgICAgICBwdWJsaXNoVGFza3M6IG9wdGlvbnMucHVibGlzaFRhc2tzLFxuICAgICAgICAgICAgICAgIGpvYkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuc09uOiBvcHRpb25zLndvcmtmbG93UnVuc09uLFxuICAgICAgICAgICAgICAgICAgICBydW5zT25Hcm91cDogb3B0aW9ucy53b3JrZmxvd1J1bnNPbkdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAuLi4ob3B0aW9ucy5wdWJsaXNoVG9Bd3NPcHRpb25zPy5qb2JDb25maWd1cmF0aW9uID8/IHt9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdvcmtmbG93Qm9vdHN0cmFwU3RlcHM6IG9wdGlvbnMud29ya2Zsb3dCb290c3RyYXBTdGVwcyxcbiAgICAgICAgICAgICAgICB3b3JrZmxvd05vZGVWZXJzaW9uOlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndvcmtmbG93Tm9kZVZlcnNpb24gPz9cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXhOb2RlVmVyc2lvbiA/P1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1pbk5vZGVWZXJzaW9uID8/XG4gICAgICAgICAgICAgICAgICAgIFwiMjAuMTAuMFwiLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbmV3IEF3c0FwcFB1Ymxpc2hlcih0aGlzLCBwdWJsaXNoVG9Bd3NPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsZWFuQ29tcGlsZVRhc2sgPVxuICAgICAgICAgICAgdGhpcy50YXNrcy50cnlGaW5kKFwiY2xlYW4tY29tcGlsZVwiKSA/P1xuICAgICAgICAgICAgdGhpcy50YXNrcy5hZGRUYXNrKFwiY2xlYW4tY29tcGlsZVwiLCB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ2xlYW4gdXAgdGhlIGNvbXBpbGVkIG91dHB1dFwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNsZWFuQ29tcGlsZVRhc2suZXhlYyhgcm0gLXJmICR7dGhpcy5jZGtDb25maWcuY2Rrb3V0fWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZURlcGxveUFuZFN5bnRoVGFza3NOb3RSZXF1aXJlQXBwcm92YWwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRlcGxveVRhc2sgPSB0aGlzLnRhc2tzLnRyeUZpbmQoXCJkZXBsb3lcIik7XG4gICAgICAgIGlmIChkZXBsb3lUYXNrKSB7XG4gICAgICAgICAgICBjb25zdCB7IGV4ZWMsIC4uLnJlc3RPZlRhc2tTdGVwIH0gPSBkZXBsb3lUYXNrLnN0ZXBzWzBdO1xuICAgICAgICAgICAgZGVwbG95VGFzay5yZXNldChleGVjLCB7XG4gICAgICAgICAgICAgICAgLi4ucmVzdE9mVGFza1N0ZXAsXG4gICAgICAgICAgICAgICAgYXJnczogW1wiLS1hbGxcIiwgXCItLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXJcIl0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzeW50aFRhc2sgPSB0aGlzLnRhc2tzLnRyeUZpbmQoXCJzeW50aFwiKTtcbiAgICAgICAgaWYgKHN5bnRoVGFzaykge1xuICAgICAgICAgICAgY29uc3QgeyBleGVjLCAuLi5yZXN0T2ZUYXNrU3RlcCB9ID0gc3ludGhUYXNrLnN0ZXBzWzBdO1xuICAgICAgICAgICAgc3ludGhUYXNrLnJlc2V0KGV4ZWMsIHtcbiAgICAgICAgICAgICAgICAuLi5yZXN0T2ZUYXNrU3RlcCxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXCItLWFsbFwiLCBcIi0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlclwiXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlUGFja2FnZVRhc2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFja2FnZVRhc2sucmVzZXQoYG1rZGlyIC1wICR7dGhpcy5hcnRpZmFjdHNEaXJlY3Rvcnl9YCk7XG4gICAgICAgIHRoaXMucGFja2FnZVRhc2suZXhlYyhcbiAgICAgICAgICAgIGBjcCAtciAke3RoaXMuY2RrQ29uZmlnLmNka291dH0gJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBidWlsZERlcGxveVRvQXdzSm9iU3RlcChkZXBsb3lUYXNrOiBUYXNrKTogSm9iU3RlcCB7XG4gICAgICAgIGNvbnN0IGV4ZWMgPSBkZXBsb3lUYXNrLnN0ZXBzWzBdLmV4ZWM7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBkZXBsb3lUYXNrLnN0ZXBzWzBdLmFyZ3M7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi4odGhpcy5wdWJsaXNoVG9Bd3NPcHRpb25zPy5kZXBsb3lKb2JTdGVwQ29uZmlndXJhdGlvbiA/PyB7fSksXG4gICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgIHRoaXMucHVibGlzaFRvQXdzT3B0aW9ucz8uZGVwbG95Sm9iU3RlcENvbmZpZ3VyYXRpb24/Lm5hbWUgPz9cbiAgICAgICAgICAgICAgICBcIkRlcGxveSB0byBBV1NcIixcbiAgICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgICAgIGV4ZWM/LnJlcGxhY2UoXCJjZGtcIiwgYG5weCBjZGtAJHt0aGlzLmNka1ZlcnNpb259YCksXG4gICAgICAgICAgICAgICAgLi4uKGFyZ3MgPz8gW10pLFxuICAgICAgICAgICAgICAgIGAtLWFwcCAke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fS8ke3RoaXMuY2RrQ29uZmlnLmNka291dH1gLFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuam9pbihcIiBcIiksXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19