@macedon-technologies/batman 1.9.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BootcampApplication = void 0;
4
4
  const ApiConstructFile_1 = require("./ApiConstructFile");
5
5
  const ApiFunctionFile_1 = require("./ApiFunctionFile");
6
- const BaseApplicationStackFile_1 = require("./BaseApplicationStackFile");
7
6
  const BootcampApplicationStackFile_1 = require("./BootcampApplicationStackFile");
7
+ const BootcampBaseApplicationStackFile_1 = require("./BootcampBaseApplicationStackFile");
8
8
  const CodeRabbitFile_1 = require("./CodeRabbitFile");
9
9
  const GitHubRolesStackFile_1 = require("./GitHubRolesStackFile");
10
10
  const LocalDevAppFile_1 = require("./LocalDevAppFile");
@@ -36,7 +36,7 @@ class BootcampApplication {
36
36
  new GitHubRolesStackFile_1.GitHubRolesStackFile(project, {
37
37
  githubRepository: options.githubRepository,
38
38
  });
39
- new BaseApplicationStackFile_1.BaseApplicationStackFile(project);
39
+ new BootcampBaseApplicationStackFile_1.BootcampBaseApplicationStackFile(project);
40
40
  new BootcampApplicationStackFile_1.BootcampApplicationStackFile(project);
41
41
  // Create construct files
42
42
  new ApiConstructFile_1.ApiConstructFile(project);
@@ -73,4 +73,4 @@ class BootcampApplication {
73
73
  }
74
74
  }
75
75
  exports.BootcampApplication = BootcampApplication;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBBcHBsaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb290Y2FtcEFwcGxpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlEQUFzRDtBQUN0RCx1REFBb0Q7QUFDcEQseUVBQXNFO0FBQ3RFLGlGQUE4RTtBQUM5RSxxREFBa0Q7QUFDbEQsaUVBQThEO0FBQzlELHVEQUFvRDtBQUNwRCx5Q0FBeUQ7QUFDekQsaURBQThDO0FBQzlDLDJEQUF3RDtBQUN4RCx5REFBc0Q7QUFDdEQseUVBQXNFO0FBQ3RFLG1FQUFnRTtBQUNoRSw2RUFBMEU7QUFjMUU7O0dBRUc7QUFDSCxNQUFhLG1CQUFtQjtJQUM5QixZQUFZLE9BQTRCLEVBQUUsT0FBMkI7UUFDbkUsZ0NBQWdDO1FBRWhDLElBQUksbUJBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDcEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3pCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztTQUN2QyxDQUFDLENBQUM7UUFFSCxJQUFJLGlDQUFlLENBQUMsT0FBTyxFQUFFO1lBQzNCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtZQUN6QixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7U0FDakIsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLElBQUksMkNBQW9CLENBQUMsT0FBTyxFQUFFO1lBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxtREFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLDJEQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLHlCQUF5QjtRQUN6QixJQUFJLG1DQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksdURBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEMsdUJBQXVCO1FBQ3ZCLElBQUksaUNBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QixvQkFBb0I7UUFDcEIsSUFBSSwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFCLHNCQUFzQjtRQUN0QixJQUFJLCtCQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUIsa0NBQWtDO1FBQ2xDLElBQUksbUNBQWdCLENBQUMsT0FBTyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtZQUN4QyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQzdCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUkscUNBQWlCLENBQUMsT0FBTyxFQUFFO1lBQzdCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtZQUN4QyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQzdCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtTQUMxQixDQUFDLENBQUM7UUFFSCxJQUFJLDZDQUFxQixDQUFDLE9BQU8sRUFBRTtZQUNqQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUI7WUFDNUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNqQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDekIsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUI7U0FDekQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxtREFBd0IsQ0FBQyxPQUFPLEVBQUU7WUFDcEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQ3pDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3pCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1NBQ3RELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpFRCxrREFpRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSAncHJvamVuL2xpYi9hd3NjZGsnO1xuaW1wb3J0IHsgQXBpQ29uc3RydWN0RmlsZSB9IGZyb20gJy4vQXBpQ29uc3RydWN0RmlsZSc7XG5pbXBvcnQgeyBBcGlGdW5jdGlvbkZpbGUgfSBmcm9tICcuL0FwaUZ1bmN0aW9uRmlsZSc7XG5pbXBvcnQgeyBCYXNlQXBwbGljYXRpb25TdGFja0ZpbGUgfSBmcm9tICcuL0Jhc2VBcHBsaWNhdGlvblN0YWNrRmlsZSc7XG5pbXBvcnQgeyBCb290Y2FtcEFwcGxpY2F0aW9uU3RhY2tGaWxlIH0gZnJvbSAnLi9Cb290Y2FtcEFwcGxpY2F0aW9uU3RhY2tGaWxlJztcbmltcG9ydCB7IENvZGVSYWJiaXRGaWxlIH0gZnJvbSAnLi9Db2RlUmFiYml0RmlsZSc7XG5pbXBvcnQgeyBHaXRIdWJSb2xlc1N0YWNrRmlsZSB9IGZyb20gJy4vR2l0SHViUm9sZXNTdGFja0ZpbGUnO1xuaW1wb3J0IHsgTG9jYWxEZXZBcHBGaWxlIH0gZnJvbSAnLi9Mb2NhbERldkFwcEZpbGUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRDb25maWcsIE1haW5GaWxlIH0gZnJvbSAnLi9NYWluRmlsZSc7XG5pbXBvcnQgeyBNYWluVGVzdEZpbGUgfSBmcm9tICcuL01haW5UZXN0RmlsZSc7XG5pbXBvcnQgeyBQckNsZWFudXBXb3JrZmxvdyB9IGZyb20gJy4vUHJDbGVhbnVwV29ya2Zsb3cnO1xuaW1wb3J0IHsgUHJEZXBsb3lXb3JrZmxvdyB9IGZyb20gJy4vUHJEZXBsb3lXb3JrZmxvdyc7XG5pbXBvcnQgeyBQcm9kdWN0aW9uRGVwbG95V29ya2Zsb3cgfSBmcm9tICcuL1Byb2R1Y3Rpb25EZXBsb3lXb3JrZmxvdyc7XG5pbXBvcnQgeyBTdGFnaW5nRGVwbG95V29ya2Zsb3cgfSBmcm9tICcuL1N0YWdpbmdEZXBsb3lXb3JrZmxvdyc7XG5pbXBvcnQgeyBTdGF0aWNXZWJzaXRlQ29uc3RydWN0RmlsZSB9IGZyb20gJy4vU3RhdGljV2Vic2l0ZUNvbnN0cnVjdEZpbGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWcgZXh0ZW5kcyBFbnZpcm9ubWVudENvbmZpZyB7XG4gIHJlYWRvbmx5IGdpdGh1YkFjdGlvblJvbGVBcm46IGBhcm46YXdzOmlhbTo6JHtzdHJpbmd9OnJvbGUvJHtzdHJpbmd9YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbk9wdGlvbnMge1xuICByZWFkb25seSBnaXRodWJSZXBvc2l0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRldjogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcbiAgcmVhZG9ubHkgc3RhZ2luZzogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcbiAgcmVhZG9ubHkgcHJvZDogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEFwcGxpY2F0aW9uIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYWxsIHN0YW5kYXJkIHByb2plY3QgZmlsZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEJvb3RjYW1wQXBwbGljYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwLCBvcHRpb25zOiBBcHBsaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAvLyBDcmVhdGUgbWFpbiBlbnRyeSBwb2ludCBmaWxlc1xuXG4gICAgbmV3IE1haW5GaWxlKHByb2plY3QsIHtcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBkZXY6IG9wdGlvbnMuZGV2LFxuICAgICAgc3RhZ2luZzogb3B0aW9ucy5zdGFnaW5nLFxuICAgICAgcHJvZDogb3B0aW9ucy5wcm9kLFxuICAgICAgYWRkaXRpb25hbFRhZ3M6IG9wdGlvbnMuYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG5cbiAgICBuZXcgTG9jYWxEZXZBcHBGaWxlKHByb2plY3QsIHtcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBkZXY6IG9wdGlvbnMuZGV2LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHN0YWNrIGZpbGVzXG4gICAgbmV3IEdpdEh1YlJvbGVzU3RhY2tGaWxlKHByb2plY3QsIHtcbiAgICAgIGdpdGh1YlJlcG9zaXRvcnk6IG9wdGlvbnMuZ2l0aHViUmVwb3NpdG9yeSxcbiAgICB9KTtcblxuICAgIG5ldyBCYXNlQXBwbGljYXRpb25TdGFja0ZpbGUocHJvamVjdCk7XG4gICAgbmV3IEJvb3RjYW1wQXBwbGljYXRpb25TdGFja0ZpbGUocHJvamVjdCk7XG5cbiAgICAvLyBDcmVhdGUgY29uc3RydWN0IGZpbGVzXG4gICAgbmV3IEFwaUNvbnN0cnVjdEZpbGUocHJvamVjdCk7XG4gICAgbmV3IFN0YXRpY1dlYnNpdGVDb25zdHJ1Y3RGaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIGhhbmRsZXIgZmlsZXNcbiAgICBuZXcgQXBpRnVuY3Rpb25GaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIHRlc3QgZmlsZXNcbiAgICBuZXcgTWFpblRlc3RGaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIGNvbmZpZyBmaWxlc1xuICAgIG5ldyBDb2RlUmFiYml0RmlsZShwcm9qZWN0KTtcblxuICAgIC8vIENyZWF0ZSBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd3NcbiAgICBuZXcgUHJEZXBsb3lXb3JrZmxvdyhwcm9qZWN0LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLmRldi5naXRodWJBY3Rpb25Sb2xlQXJuLFxuICAgICAgYXdzUmVnaW9uOiBvcHRpb25zLmRldi5yZWdpb24sXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiBvcHRpb25zLmRldi5jbGVya1B1Ymxpc2hhYmxlS2V5LFxuICAgIH0pO1xuXG4gICAgbmV3IFByQ2xlYW51cFdvcmtmbG93KHByb2plY3QsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMuZGV2LmdpdGh1YkFjdGlvblJvbGVBcm4sXG4gICAgICBhd3NSZWdpb246IG9wdGlvbnMuZGV2LnJlZ2lvbixcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgfSk7XG5cbiAgICBuZXcgU3RhZ2luZ0RlcGxveVdvcmtmbG93KHByb2plY3QsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMuc3RhZ2luZy5naXRodWJBY3Rpb25Sb2xlQXJuLFxuICAgICAgYXdzUmVnaW9uOiBvcHRpb25zLnN0YWdpbmcucmVnaW9uLFxuICAgICAgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcbiAgICAgIGNsZXJrUHVibGlzaGFibGVLZXk6IG9wdGlvbnMuc3RhZ2luZy5jbGVya1B1Ymxpc2hhYmxlS2V5LFxuICAgIH0pO1xuXG4gICAgbmV3IFByb2R1Y3Rpb25EZXBsb3lXb3JrZmxvdyhwcm9qZWN0LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLnByb2QuZ2l0aHViQWN0aW9uUm9sZUFybixcbiAgICAgIGF3c1JlZ2lvbjogb3B0aW9ucy5wcm9kLnJlZ2lvbixcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiBvcHRpb25zLnByb2QuY2xlcmtQdWJsaXNoYWJsZUtleSxcbiAgICB9KTtcbiAgfVxufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBBcHBsaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb290Y2FtcEFwcGxpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlEQUFzRDtBQUN0RCx1REFBb0Q7QUFDcEQsaUZBQThFO0FBQzlFLHlGQUFzRjtBQUN0RixxREFBa0Q7QUFDbEQsaUVBQThEO0FBQzlELHVEQUFvRDtBQUNwRCx5Q0FBeUQ7QUFDekQsaURBQThDO0FBQzlDLDJEQUF3RDtBQUN4RCx5REFBc0Q7QUFDdEQseUVBQXNFO0FBQ3RFLG1FQUFnRTtBQUNoRSw2RUFBMEU7QUFjMUU7O0dBRUc7QUFDSCxNQUFhLG1CQUFtQjtJQUM5QixZQUFZLE9BQTRCLEVBQUUsT0FBMkI7UUFDbkUsZ0NBQWdDO1FBRWhDLElBQUksbUJBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDcEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3pCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztTQUN2QyxDQUFDLENBQUM7UUFFSCxJQUFJLGlDQUFlLENBQUMsT0FBTyxFQUFFO1lBQzNCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtZQUN6QixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7U0FDakIsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLElBQUksMkNBQW9CLENBQUMsT0FBTyxFQUFFO1lBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxtRUFBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxJQUFJLDJEQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLHlCQUF5QjtRQUN6QixJQUFJLG1DQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksdURBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEMsdUJBQXVCO1FBQ3ZCLElBQUksaUNBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QixvQkFBb0I7UUFDcEIsSUFBSSwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFCLHNCQUFzQjtRQUN0QixJQUFJLCtCQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUIsa0NBQWtDO1FBQ2xDLElBQUksbUNBQWdCLENBQUMsT0FBTyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtZQUN4QyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQzdCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUkscUNBQWlCLENBQUMsT0FBTyxFQUFFO1lBQzdCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtZQUN4QyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQzdCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtTQUMxQixDQUFDLENBQUM7UUFFSCxJQUFJLDZDQUFxQixDQUFDLE9BQU8sRUFBRTtZQUNqQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUI7WUFDNUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNqQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDekIsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUI7U0FDekQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxtREFBd0IsQ0FBQyxPQUFPLEVBQUU7WUFDcEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQ3pDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3pCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1NBQ3RELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpFRCxrREFpRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSAncHJvamVuL2xpYi9hd3NjZGsnO1xuaW1wb3J0IHsgQXBpQ29uc3RydWN0RmlsZSB9IGZyb20gJy4vQXBpQ29uc3RydWN0RmlsZSc7XG5pbXBvcnQgeyBBcGlGdW5jdGlvbkZpbGUgfSBmcm9tICcuL0FwaUZ1bmN0aW9uRmlsZSc7XG5pbXBvcnQgeyBCb290Y2FtcEFwcGxpY2F0aW9uU3RhY2tGaWxlIH0gZnJvbSAnLi9Cb290Y2FtcEFwcGxpY2F0aW9uU3RhY2tGaWxlJztcbmltcG9ydCB7IEJvb3RjYW1wQmFzZUFwcGxpY2F0aW9uU3RhY2tGaWxlIH0gZnJvbSAnLi9Cb290Y2FtcEJhc2VBcHBsaWNhdGlvblN0YWNrRmlsZSc7XG5pbXBvcnQgeyBDb2RlUmFiYml0RmlsZSB9IGZyb20gJy4vQ29kZVJhYmJpdEZpbGUnO1xuaW1wb3J0IHsgR2l0SHViUm9sZXNTdGFja0ZpbGUgfSBmcm9tICcuL0dpdEh1YlJvbGVzU3RhY2tGaWxlJztcbmltcG9ydCB7IExvY2FsRGV2QXBwRmlsZSB9IGZyb20gJy4vTG9jYWxEZXZBcHBGaWxlJztcbmltcG9ydCB7IEVudmlyb25tZW50Q29uZmlnLCBNYWluRmlsZSB9IGZyb20gJy4vTWFpbkZpbGUnO1xuaW1wb3J0IHsgTWFpblRlc3RGaWxlIH0gZnJvbSAnLi9NYWluVGVzdEZpbGUnO1xuaW1wb3J0IHsgUHJDbGVhbnVwV29ya2Zsb3cgfSBmcm9tICcuL1ByQ2xlYW51cFdvcmtmbG93JztcbmltcG9ydCB7IFByRGVwbG95V29ya2Zsb3cgfSBmcm9tICcuL1ByRGVwbG95V29ya2Zsb3cnO1xuaW1wb3J0IHsgUHJvZHVjdGlvbkRlcGxveVdvcmtmbG93IH0gZnJvbSAnLi9Qcm9kdWN0aW9uRGVwbG95V29ya2Zsb3cnO1xuaW1wb3J0IHsgU3RhZ2luZ0RlcGxveVdvcmtmbG93IH0gZnJvbSAnLi9TdGFnaW5nRGVwbG95V29ya2Zsb3cnO1xuaW1wb3J0IHsgU3RhdGljV2Vic2l0ZUNvbnN0cnVjdEZpbGUgfSBmcm9tICcuL1N0YXRpY1dlYnNpdGVDb25zdHJ1Y3RGaWxlJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkVudmlyb25tZW50Q29uZmlnIGV4dGVuZHMgRW52aXJvbm1lbnRDb25maWcge1xuICByZWFkb25seSBnaXRodWJBY3Rpb25Sb2xlQXJuOiBgYXJuOmF3czppYW06OiR7c3RyaW5nfTpyb2xlLyR7c3RyaW5nfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgZ2l0aHViUmVwb3NpdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBkZXY6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG4gIHJlYWRvbmx5IHN0YWdpbmc6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG4gIHJlYWRvbmx5IHByb2Q6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBBcHBsaWNhdGlvbiBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFsbCBzdGFuZGFyZCBwcm9qZWN0IGZpbGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBCb290Y2FtcEFwcGxpY2F0aW9uIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCwgb3B0aW9uczogQXBwbGljYXRpb25PcHRpb25zKSB7XG4gICAgLy8gQ3JlYXRlIG1haW4gZW50cnkgcG9pbnQgZmlsZXNcblxuICAgIG5ldyBNYWluRmlsZShwcm9qZWN0LCB7XG4gICAgICBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lLFxuICAgICAgZGV2OiBvcHRpb25zLmRldixcbiAgICAgIHN0YWdpbmc6IG9wdGlvbnMuc3RhZ2luZyxcbiAgICAgIHByb2Q6IG9wdGlvbnMucHJvZCxcbiAgICAgIGFkZGl0aW9uYWxUYWdzOiBvcHRpb25zLmFkZGl0aW9uYWxUYWdzLFxuICAgIH0pO1xuXG4gICAgbmV3IExvY2FsRGV2QXBwRmlsZShwcm9qZWN0LCB7XG4gICAgICBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lLFxuICAgICAgZGV2OiBvcHRpb25zLmRldixcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBzdGFjayBmaWxlc1xuICAgIG5ldyBHaXRIdWJSb2xlc1N0YWNrRmlsZShwcm9qZWN0LCB7XG4gICAgICBnaXRodWJSZXBvc2l0b3J5OiBvcHRpb25zLmdpdGh1YlJlcG9zaXRvcnksXG4gICAgfSk7XG5cbiAgICBuZXcgQm9vdGNhbXBCYXNlQXBwbGljYXRpb25TdGFja0ZpbGUocHJvamVjdCk7XG4gICAgbmV3IEJvb3RjYW1wQXBwbGljYXRpb25TdGFja0ZpbGUocHJvamVjdCk7XG5cbiAgICAvLyBDcmVhdGUgY29uc3RydWN0IGZpbGVzXG4gICAgbmV3IEFwaUNvbnN0cnVjdEZpbGUocHJvamVjdCk7XG4gICAgbmV3IFN0YXRpY1dlYnNpdGVDb25zdHJ1Y3RGaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIGhhbmRsZXIgZmlsZXNcbiAgICBuZXcgQXBpRnVuY3Rpb25GaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIHRlc3QgZmlsZXNcbiAgICBuZXcgTWFpblRlc3RGaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIGNvbmZpZyBmaWxlc1xuICAgIG5ldyBDb2RlUmFiYml0RmlsZShwcm9qZWN0KTtcblxuICAgIC8vIENyZWF0ZSBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd3NcbiAgICBuZXcgUHJEZXBsb3lXb3JrZmxvdyhwcm9qZWN0LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLmRldi5naXRodWJBY3Rpb25Sb2xlQXJuLFxuICAgICAgYXdzUmVnaW9uOiBvcHRpb25zLmRldi5yZWdpb24sXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiBvcHRpb25zLmRldi5jbGVya1B1Ymxpc2hhYmxlS2V5LFxuICAgIH0pO1xuXG4gICAgbmV3IFByQ2xlYW51cFdvcmtmbG93KHByb2plY3QsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMuZGV2LmdpdGh1YkFjdGlvblJvbGVBcm4sXG4gICAgICBhd3NSZWdpb246IG9wdGlvbnMuZGV2LnJlZ2lvbixcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgfSk7XG5cbiAgICBuZXcgU3RhZ2luZ0RlcGxveVdvcmtmbG93KHByb2plY3QsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMuc3RhZ2luZy5naXRodWJBY3Rpb25Sb2xlQXJuLFxuICAgICAgYXdzUmVnaW9uOiBvcHRpb25zLnN0YWdpbmcucmVnaW9uLFxuICAgICAgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSxcbiAgICAgIGNsZXJrUHVibGlzaGFibGVLZXk6IG9wdGlvbnMuc3RhZ2luZy5jbGVya1B1Ymxpc2hhYmxlS2V5LFxuICAgIH0pO1xuXG4gICAgbmV3IFByb2R1Y3Rpb25EZXBsb3lXb3JrZmxvdyhwcm9qZWN0LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLnByb2QuZ2l0aHViQWN0aW9uUm9sZUFybixcbiAgICAgIGF3c1JlZ2lvbjogb3B0aW9ucy5wcm9kLnJlZ2lvbixcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiBvcHRpb25zLnByb2QuY2xlcmtQdWJsaXNoYWJsZUtleSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -27,6 +27,9 @@ export interface ApplicationStackProps extends BaseApplicationStackProps {
27
27
  }
28
28
 
29
29
  export class ApplicationStack extends BaseApplicationStack<ApplicationStackProps> {
30
+ private databaseName: string;
31
+ private username: string;
32
+
30
33
  constructor(scope: Construct, id: string, props: ApplicationStackProps) {
31
34
  super(scope, id, props);
32
35
  // extend the stack by adding constructs here
@@ -62,15 +65,18 @@ export class ApplicationStack extends BaseApplicationStack<ApplicationStackProps
62
65
  logger: true,
63
66
  });
64
67
 
68
+ this.databaseName = this.getDatabaseName('${project.name}');
69
+ this.username = this.getUsername('${project.name}');
70
+
65
71
  const sqlDatabase = new Database(this, '${project.name}-db', {
66
- databaseName: '${project.name}',
72
+ databaseName: this.databaseName,
67
73
  provider: provider,
68
74
  });
69
75
 
70
76
  const role = new Role(this, 'Role', {
71
77
  provider: provider,
72
- roleName: '${project.name}',
73
- databaseName: '${project.name}',
78
+ roleName: this.username,
79
+ databaseName: this.databaseName,
74
80
  enableIamAuth: true,
75
81
  });
76
82
  role.node.addDependency(sqlDatabase);
@@ -78,8 +84,10 @@ export class ApplicationStack extends BaseApplicationStack<ApplicationStackProps
78
84
 
79
85
  // Add environment variables pointing to the proxy endpoint
80
86
  this.api.lambdaFunction.addEnvironment('DB_ENDPOINT', this.props.database.proxyEndpoint);
81
- this.api.lambdaFunction.addEnvironment('DB_USER', '${project.name}');
87
+ this.api.lambdaFunction.addEnvironment('DB_USER', this.username);
82
88
  this.api.lambdaFunction.addEnvironment('DB_PORT', this.props.database.port.toString());
89
+ this.api.lambdaFunction.addEnvironment('DB_DATABASE_NAME', this.databaseName);
90
+
83
91
 
84
92
  // Grant Lambda IAM auth to connect through the proxy
85
93
  this.api.lambdaFunction.addToRolePolicy(new PolicyStatement({
@@ -91,7 +99,7 @@ export class ApplicationStack extends BaseApplicationStack<ApplicationStackProps
91
99
  resource: 'dbuser',
92
100
  partition: 'aws',
93
101
  arnFormat: ArnFormat.COLON_RESOURCE_NAME,
94
- resourceName: \`\${Fn.importValue('BootcampDbProxyId')}/${project.name}\`,
102
+ resourceName: \`\${Fn.importValue('BootcampDbProxyId')}/\${this.username}\`,
95
103
  })],
96
104
  effect: Effect.ALLOW,
97
105
  }));
@@ -102,4 +110,4 @@ export class ApplicationStack extends BaseApplicationStack<ApplicationStackProps
102
110
  }
103
111
  }
104
112
  exports.BootcampApplicationStackFile = BootcampApplicationStackFile;
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBBcHBsaWNhdGlvblN0YWNrRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb290Y2FtcEFwcGxpY2F0aW9uU3RhY2tGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUdwQyxNQUFhLDRCQUE2QixTQUFRLG1CQUFVO0lBQzFELFlBQVksT0FBNEI7UUFDdEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRTtZQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0F5RDhCLE9BQU8sQ0FBQyxJQUFJO3VCQUNuQyxPQUFPLENBQUMsSUFBSTs7Ozs7O21CQU1oQixPQUFPLENBQUMsSUFBSTt1QkFDUixPQUFPLENBQUMsSUFBSTs7Ozs7Ozs7eURBUXNCLE9BQU8sQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7O2tFQWFILE9BQU8sQ0FBQyxJQUFJOzs7Ozs7Q0FNN0U7U0FDSSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFsR0Qsb0VBa0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSAncHJvamVuL2xpYi9hd3NjZGsnO1xuXG5leHBvcnQgY2xhc3MgQm9vdGNhbXBBcHBsaWNhdGlvblN0YWNrRmlsZSBleHRlbmRzIFNhbXBsZUZpbGUge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwKSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ3NyYy9zdGFja3MvQXBwbGljYXRpb25TdGFjay50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgaW1wb3J0IHsgQXJuLCBBcm5Gb3JtYXQsIEZuLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAsIFN1Ym5ldFR5cGUsIFZwYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IERhdGFiYXNlSW5zdGFuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtcmRzJztcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBEYXRhYmFzZSwgUHJvdmlkZXIsIFJvbGUgfSBmcm9tICdjZGstcmRzLXNxbCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VBcHBsaWNhdGlvblN0YWNrLCBCYXNlQXBwbGljYXRpb25TdGFja1Byb3BzIH0gZnJvbSAnLi9CYXNlQXBwbGljYXRpb25TdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25TdGFja1Byb3BzIGV4dGVuZHMgQmFzZUFwcGxpY2F0aW9uU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IGRhdGFiYXNlOiB7XG4gICAgcHJveHlFbmRwb2ludDogc3RyaW5nO1xuICAgIHJvb3RTZWNyZXRBcm46IFxcYGFybjphd3M6c2VjcmV0c21hbmFnZXI6XFwke3N0cmluZ306XFwke3N0cmluZ306c2VjcmV0OlxcJHtzdHJpbmd9LVxcJHtzdHJpbmd9LVxcJHtzdHJpbmd9XFxgO1xuICAgIGluc3RhbmNlSWRlbnRpZmllcjogc3RyaW5nO1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBkYXRhYmFzZUVuZHBvaW50QWRkcmVzczogc3RyaW5nO1xuICAgIHNlY3VyaXR5R3JvdXA6IFxcYHNnLVxcJHtzdHJpbmd9XFxgO1xuICB9O1xuICByZWFkb25seSB2cGNJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25TdGFjayBleHRlbmRzIEJhc2VBcHBsaWNhdGlvblN0YWNrPEFwcGxpY2F0aW9uU3RhY2tQcm9wcz4ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXBwbGljYXRpb25TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgLy8gZXh0ZW5kIHRoZSBzdGFjayBieSBhZGRpbmcgY29uc3RydWN0cyBoZXJlXG4gICAgdGhpcy5jcmVhdGVEYXRhYmFzZSgpO1xuICB9XG4gIFxuICBwcm90ZWN0ZWQgY3JlYXRlVnBjKCkge1xuICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAodGhpcywgJ1ZwYycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnByb3BzLnZwY0lkLFxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVEYXRhYmFzZSgpIHtcblxuICAgIGNvbnN0IGRhdGFiYXNlU2VjdXJpdHlHcm91cCA9IFNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZCh0aGlzLCAnRGF0YWJhc2VTZWN1cml0eUdyb3VwJywgdGhpcy5wcm9wcy5kYXRhYmFzZS5zZWN1cml0eUdyb3VwKTtcblxuICAgIGNvbnN0IGRhdGFiYXNlID0gRGF0YWJhc2VJbnN0YW5jZS5mcm9tRGF0YWJhc2VJbnN0YW5jZUF0dHJpYnV0ZXModGhpcywgJ0RhdGFiYXNlJywge1xuICAgICAgaW5zdGFuY2VFbmRwb2ludEFkZHJlc3M6IHRoaXMucHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VFbmRwb2ludEFkZHJlc3MsXG4gICAgICBwb3J0OiB0aGlzLnByb3BzLmRhdGFiYXNlLnBvcnQsXG4gICAgICBzZWN1cml0eUdyb3VwczogW2RhdGFiYXNlU2VjdXJpdHlHcm91cF0sXG4gICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IHRoaXMucHJvcHMuZGF0YWJhc2UuaW5zdGFuY2VJZGVudGlmaWVyLFxuXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldENvbXBsZXRlQXJuKHRoaXMsICdEYXRhYmFzZVJvb3RTZWNyZXQnLCB0aGlzLnByb3BzLmRhdGFiYXNlLnJvb3RTZWNyZXRBcm4pO1xuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgJ1Byb3ZpZGVyJywge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGNsdXN0ZXI6IGRhdGFiYXNlLFxuICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgIH0sXG4gICAgICBsb2dnZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzcWxEYXRhYmFzZSA9IG5ldyBEYXRhYmFzZSh0aGlzLCAnJHtwcm9qZWN0Lm5hbWV9LWRiJywge1xuICAgICAgZGF0YWJhc2VOYW1lOiAnJHtwcm9qZWN0Lm5hbWV9JyxcbiAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnUm9sZScsIHtcbiAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgIHJvbGVOYW1lOiAnJHtwcm9qZWN0Lm5hbWV9JyxcbiAgICAgIGRhdGFiYXNlTmFtZTogJyR7cHJvamVjdC5uYW1lfScsXG4gICAgICBlbmFibGVJYW1BdXRoOiB0cnVlLFxuICAgIH0pO1xuICAgIHJvbGUubm9kZS5hZGREZXBlbmRlbmN5KHNxbERhdGFiYXNlKTtcblxuXG4gICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlcyBwb2ludGluZyB0byB0aGUgcHJveHkgZW5kcG9pbnRcbiAgICB0aGlzLmFwaS5sYW1iZGFGdW5jdGlvbi5hZGRFbnZpcm9ubWVudCgnREJfRU5EUE9JTlQnLCB0aGlzLnByb3BzLmRhdGFiYXNlLnByb3h5RW5kcG9pbnQpO1xuICAgIHRoaXMuYXBpLmxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdEQl9VU0VSJywgJyR7cHJvamVjdC5uYW1lfScpO1xuICAgIHRoaXMuYXBpLmxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdEQl9QT1JUJywgdGhpcy5wcm9wcy5kYXRhYmFzZS5wb3J0LnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gR3JhbnQgTGFtYmRhIElBTSBhdXRoIHRvIGNvbm5lY3QgdGhyb3VnaCB0aGUgcHJveHlcbiAgICB0aGlzLmFwaS5sYW1iZGFGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ3Jkcy1kYjpjb25uZWN0J10sXG4gICAgICByZXNvdXJjZXM6IFtBcm4uZm9ybWF0KHtcbiAgICAgICAgYWNjb3VudDogU3RhY2sub2YodGhpcykuYWNjb3VudCxcbiAgICAgICAgcmVnaW9uOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICAgIHNlcnZpY2U6ICdyZHMtZGInLFxuICAgICAgICByZXNvdXJjZTogJ2RidXNlcicsXG4gICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogXFxgXFwke0ZuLmltcG9ydFZhbHVlKCdCb290Y2FtcERiUHJveHlJZCcpfS8ke3Byb2plY3QubmFtZX1cXGAsXG4gICAgICB9KV0sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICB9KSk7XG4gIH1cbn1cbmAsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBBcHBsaWNhdGlvblN0YWNrRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb290Y2FtcEFwcGxpY2F0aW9uU3RhY2tGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUdwQyxNQUFhLDRCQUE2QixTQUFRLG1CQUFVO0lBQzFELFlBQVksT0FBNEI7UUFDdEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRTtZQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnREE0RGdDLE9BQU8sQ0FBQyxJQUFJO3dDQUNwQixPQUFPLENBQUMsSUFBSTs7OENBRU4sT0FBTyxDQUFDLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxQ3pEO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBMUdELG9FQTBHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhbXBsZUZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcblxuZXhwb3J0IGNsYXNzIEJvb3RjYW1wQXBwbGljYXRpb25TdGFja0ZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCkge1xuICAgIHN1cGVyKHByb2plY3QsICdzcmMvc3RhY2tzL0FwcGxpY2F0aW9uU3RhY2sudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBGbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwLCBTdWJuZXRUeXBlLCBWcGMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBEYXRhYmFzZUluc3RhbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXJkcyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgRGF0YWJhc2UsIFByb3ZpZGVyLCBSb2xlIH0gZnJvbSAnY2RrLXJkcy1zcWwnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCYXNlQXBwbGljYXRpb25TdGFjaywgQmFzZUFwcGxpY2F0aW9uU3RhY2tQcm9wcyB9IGZyb20gJy4vQmFzZUFwcGxpY2F0aW9uU3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uU3RhY2tQcm9wcyBleHRlbmRzIEJhc2VBcHBsaWNhdGlvblN0YWNrUHJvcHMge1xuICByZWFkb25seSBkYXRhYmFzZToge1xuICAgIHByb3h5RW5kcG9pbnQ6IHN0cmluZztcbiAgICByb290U2VjcmV0QXJuOiBcXGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOlxcJHtzdHJpbmd9OlxcJHtzdHJpbmd9OnNlY3JldDpcXCR7c3RyaW5nfS1cXCR7c3RyaW5nfS1cXCR7c3RyaW5nfVxcYDtcbiAgICBpbnN0YW5jZUlkZW50aWZpZXI6IHN0cmluZztcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgZGF0YWJhc2VFbmRwb2ludEFkZHJlc3M6IHN0cmluZztcbiAgICBzZWN1cml0eUdyb3VwOiBcXGBzZy1cXCR7c3RyaW5nfVxcYDtcbiAgfTtcbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uU3RhY2sgZXh0ZW5kcyBCYXNlQXBwbGljYXRpb25TdGFjazxBcHBsaWNhdGlvblN0YWNrUHJvcHM+IHtcbiAgcHJpdmF0ZSBkYXRhYmFzZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSB1c2VybmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBcHBsaWNhdGlvblN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICAvLyBleHRlbmQgdGhlIHN0YWNrIGJ5IGFkZGluZyBjb25zdHJ1Y3RzIGhlcmVcbiAgICB0aGlzLmNyZWF0ZURhdGFiYXNlKCk7XG4gIH1cbiAgXG4gIHByb3RlY3RlZCBjcmVhdGVWcGMoKSB7XG4gICAgdGhpcy52cGMgPSBWcGMuZnJvbUxvb2t1cCh0aGlzLCAnVnBjJywge1xuICAgICAgdnBjSWQ6IHRoaXMucHJvcHMudnBjSWQsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZURhdGFiYXNlKCkge1xuXG4gICAgY29uc3QgZGF0YWJhc2VTZWN1cml0eUdyb3VwID0gU2VjdXJpdHlHcm91cC5mcm9tU2VjdXJpdHlHcm91cElkKHRoaXMsICdEYXRhYmFzZVNlY3VyaXR5R3JvdXAnLCB0aGlzLnByb3BzLmRhdGFiYXNlLnNlY3VyaXR5R3JvdXApO1xuXG4gICAgY29uc3QgZGF0YWJhc2UgPSBEYXRhYmFzZUluc3RhbmNlLmZyb21EYXRhYmFzZUluc3RhbmNlQXR0cmlidXRlcyh0aGlzLCAnRGF0YWJhc2UnLCB7XG4gICAgICBpbnN0YW5jZUVuZHBvaW50QWRkcmVzczogdGhpcy5wcm9wcy5kYXRhYmFzZS5kYXRhYmFzZUVuZHBvaW50QWRkcmVzcyxcbiAgICAgIHBvcnQ6IHRoaXMucHJvcHMuZGF0YWJhc2UucG9ydCxcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbZGF0YWJhc2VTZWN1cml0eUdyb3VwXSxcbiAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogdGhpcy5wcm9wcy5kYXRhYmFzZS5pbnN0YW5jZUlkZW50aWZpZXIsXG5cbiAgICB9KTtcblxuICAgIGNvbnN0IHNlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0Q29tcGxldGVBcm4odGhpcywgJ0RhdGFiYXNlUm9vdFNlY3JldCcsIHRoaXMucHJvcHMuZGF0YWJhc2Uucm9vdFNlY3JldEFybik7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCAnUHJvdmlkZXInLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgY2x1c3RlcjogZGF0YWJhc2UsXG4gICAgICBzZWNyZXQ6IHNlY3JldCxcbiAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTLFxuICAgICAgfSxcbiAgICAgIGxvZ2dlcjogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gdGhpcy5nZXREYXRhYmFzZU5hbWUoJyR7cHJvamVjdC5uYW1lfScpO1xuICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLmdldFVzZXJuYW1lKCcke3Byb2plY3QubmFtZX0nKTtcblxuICAgIGNvbnN0IHNxbERhdGFiYXNlID0gbmV3IERhdGFiYXNlKHRoaXMsICcke3Byb2plY3QubmFtZX0tZGInLCB7XG4gICAgICBkYXRhYmFzZU5hbWU6IHRoaXMuZGF0YWJhc2VOYW1lLFxuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBSb2xlKHRoaXMsICdSb2xlJywge1xuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyLFxuICAgICAgcm9sZU5hbWU6IHRoaXMudXNlcm5hbWUsXG4gICAgICBkYXRhYmFzZU5hbWU6IHRoaXMuZGF0YWJhc2VOYW1lLFxuICAgICAgZW5hYmxlSWFtQXV0aDogdHJ1ZSxcbiAgICB9KTtcbiAgICByb2xlLm5vZGUuYWRkRGVwZW5kZW5jeShzcWxEYXRhYmFzZSk7XG5cblxuICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcG9pbnRpbmcgdG8gdGhlIHByb3h5IGVuZHBvaW50XG4gICAgdGhpcy5hcGkubGFtYmRhRnVuY3Rpb24uYWRkRW52aXJvbm1lbnQoJ0RCX0VORFBPSU5UJywgdGhpcy5wcm9wcy5kYXRhYmFzZS5wcm94eUVuZHBvaW50KTtcbiAgICB0aGlzLmFwaS5sYW1iZGFGdW5jdGlvbi5hZGRFbnZpcm9ubWVudCgnREJfVVNFUicsIHRoaXMudXNlcm5hbWUpO1xuICAgIHRoaXMuYXBpLmxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdEQl9QT1JUJywgdGhpcy5wcm9wcy5kYXRhYmFzZS5wb3J0LnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuYXBpLmxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdEQl9EQVRBQkFTRV9OQU1FJywgdGhpcy5kYXRhYmFzZU5hbWUpO1xuICAgIFxuXG4gICAgLy8gR3JhbnQgTGFtYmRhIElBTSBhdXRoIHRvIGNvbm5lY3QgdGhyb3VnaCB0aGUgcHJveHlcbiAgICB0aGlzLmFwaS5sYW1iZGFGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ3Jkcy1kYjpjb25uZWN0J10sXG4gICAgICByZXNvdXJjZXM6IFtBcm4uZm9ybWF0KHtcbiAgICAgICAgYWNjb3VudDogU3RhY2sub2YodGhpcykuYWNjb3VudCxcbiAgICAgICAgcmVnaW9uOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICAgIHNlcnZpY2U6ICdyZHMtZGInLFxuICAgICAgICByZXNvdXJjZTogJ2RidXNlcicsXG4gICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogXFxgXFwke0ZuLmltcG9ydFZhbHVlKCdCb290Y2FtcERiUHJveHlJZCcpfS9cXCR7dGhpcy51c2VybmFtZX1cXGAsXG4gICAgICB9KV0sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICB9KSk7XG4gIH1cbn1cbmAsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import { TextFile } from 'projen';
2
+ import { AwsCdkTypeScriptApp } from 'projen/lib/awscdk';
3
+ export declare class BootcampBaseApplicationStackFile extends TextFile {
4
+ constructor(project: AwsCdkTypeScriptApp);
5
+ }
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BootcampBaseApplicationStackFile = void 0;
4
+ const projen_1 = require("projen");
5
+ class BootcampBaseApplicationStackFile extends projen_1.TextFile {
6
+ constructor(project) {
7
+ super(project, 'src/stacks/BaseApplicationStack.ts', {
8
+ marker: true,
9
+ readonly: true,
10
+ lines: [
11
+ 'import fs from \'fs\';',
12
+ 'import path from \'path\';',
13
+ 'import { Aspects, CfnOutput, Stack, StackProps } from \'aws-cdk-lib\';',
14
+ 'import { IVpc, Vpc } from \'aws-cdk-lib/aws-ec2\';',
15
+ 'import { HostedZone, IHostedZone } from \'aws-cdk-lib/aws-route53\';',
16
+ 'import { Secret } from \'aws-cdk-lib/aws-secretsmanager\';',
17
+ 'import { Construct } from \'constructs\';',
18
+ 'import { DatadogLambda } from \'datadog-cdk-constructs-v2\';',
19
+ 'import { DataDogAspect } from \'../aspects/DataDogAspect\';',
20
+ 'import { Api } from \'../constructs/Api\';',
21
+ 'import { StaticWebsite } from \'../constructs/StaticWebsite\';',
22
+ '',
23
+ 'export interface BaseApplicationStackProps extends StackProps {',
24
+ '',
25
+ ' readonly datadog?: {',
26
+ ' /**',
27
+ ' * The version of the Datadog Node.js Lambda layer to use.',
28
+ ' *',
29
+ ' * @default 128',
30
+ ' */',
31
+ ' readonly nodeLayerVersion?: number;',
32
+ '',
33
+ ' /**',
34
+ ' * The name of the project/service for Datadog tagging purposes.',
35
+ ' *',
36
+ ' * @default - uses the stack ID',
37
+ ' */',
38
+ ' readonly projectName?: string;',
39
+ ' };',
40
+ ' /**',
41
+ ' * The domain name of the Route 53 hosted zone to use.',
42
+ ' *',
43
+ ' * @example \'macedon.sandbox.defiance.ai\'',
44
+ ' */',
45
+ ' readonly hostedZoneDomainName: string;',
46
+ '',
47
+ ' /**',
48
+ ' * The ARN of the Secrets Manager secret that contains the Datadog API key.',
49
+ ' */',
50
+ ' readonly datadogSecretArn: `arn:aws:secretsmanager:${string}:${string}:secret:${string}`;',
51
+ '',
52
+ ' /**',
53
+ ' * The Clerk JWT verification key or URL.',
54
+ ' */',
55
+ ' readonly clerkJwtVerificationKey: `https://${string}/.well-known/jwks.json`;',
56
+ '',
57
+ ' /**',
58
+ ' * The N8N endpoint base URL.',
59
+ ' *',
60
+ ' * @example \'https://workflow.sandbox.defiance.ai/\'',
61
+ ' */',
62
+ ' readonly n8nEndpoint: string;',
63
+ '',
64
+ ' /**',
65
+ ' * The name of the VPC to create.',
66
+ ' *',
67
+ ' * @default \'${id}-vpc\'',
68
+ ' */',
69
+ ' readonly vpcName?: string;',
70
+ '',
71
+ ' /**',
72
+ ' * The hostname for the static website. This will be added to the hostedzone.',
73
+ ' *',
74
+ ' * @example \'myboi\'',
75
+ ' * @default \'mvp\'',
76
+ ' */',
77
+ ' readonly hostname: string;',
78
+ '}',
79
+ '',
80
+ 'export class BaseApplicationStack<TProps extends BaseApplicationStackProps> extends Stack {',
81
+ ' protected datadog: DatadogLambda;',
82
+ ' protected hostedZone: IHostedZone;',
83
+ ' protected vpc: IVpc;',
84
+ ' protected api: Api;',
85
+ '',
86
+ ' constructor(scope: Construct, private id: string, protected props: TProps) {',
87
+ ' super(scope, id, props);',
88
+ '',
89
+ ' if (!this.props.clerkJwtVerificationKey) {',
90
+ ' throw new Error(\'clerkJwtVerificationKey is required\');',
91
+ ' }',
92
+ '',
93
+ ' this.createDatadogExtension();',
94
+ ' if (!this.datadog) {',
95
+ ' throw new Error(\'Datadog extension creation failed\');',
96
+ ' }',
97
+ '',
98
+ ' this.createHostedZone();',
99
+ ' if (!this.hostedZone) {',
100
+ ' throw new Error(\'HostedZone creation failed\');',
101
+ ' }',
102
+ '',
103
+ ' this.createVpc();',
104
+ '',
105
+ ' this.createApi();',
106
+ ' if (!this.api) {',
107
+ ' throw new Error(\'API creation failed\');',
108
+ ' }',
109
+ '',
110
+ ' this.createStaticWebsite();',
111
+ '',
112
+ ' this.createOutputs();',
113
+ ' Aspects.of(this).add(new DataDogAspect({ datadog: this.datadog }));',
114
+ ' }',
115
+ '',
116
+ ' protected createStaticWebsite() {',
117
+ ' new StaticWebsite(this, \'StaticWebsite\', {',
118
+ ' hostedZone: this.hostedZone,',
119
+ ' api: this.api.restApi,',
120
+ ' hostname: this.props.hostname,',
121
+ ' });',
122
+ ' }',
123
+ '',
124
+ ' protected createApi() {',
125
+ ' this.api = new Api(this, \'Api\', {',
126
+ ' vpc: this.vpc,',
127
+ ' clerkJwtVerificationKey: this.props.clerkJwtVerificationKey,',
128
+ ' n8nEndpoint: this.props.n8nEndpoint,',
129
+ ' });',
130
+ ' }',
131
+ '',
132
+ ' protected createVpc() {',
133
+ ' this.vpc = new Vpc(this, \'VPC\', {',
134
+ ' vpcName: this.props.vpcName || `${this.id}-vpc`,',
135
+ ' maxAzs: 3,',
136
+ ' natGateways: 1,',
137
+ ' });',
138
+ ' }',
139
+ '',
140
+ ' protected createHostedZone() {',
141
+ ' this.hostedZone = HostedZone.fromLookup(this, \'HostedZone\', {',
142
+ ' domainName: this.props.hostedZoneDomainName,',
143
+ ' });',
144
+ ' }',
145
+ '',
146
+ ' protected createOutputs() {',
147
+ ' new CfnOutput(this, \'WebsiteUrl\', {',
148
+ ' value: `https://${this.props.hostname}.${this.hostedZone.zoneName}`,',
149
+ ' description: \'The URL of the static website\',',
150
+ ' exportName: `${this.id.replace(/\\//, \'-\')}-WebsiteUrl`,',
151
+ ' });',
152
+ ' }',
153
+ '',
154
+ ' protected createDatadogExtension() {',
155
+ ' const datadogApiSecret = Secret.fromSecretCompleteArn(this, \'DatadogApiKey\', this.props.datadogSecretArn);',
156
+ ' this.datadog = new DatadogLambda(this, \'Datadog\', {',
157
+ ' apiKeySecret: datadogApiSecret,',
158
+ ' service: this.props.datadog?.projectName || this.id,',
159
+ ' nodeLayerVersion: this.props.datadog?.nodeLayerVersion || 128,',
160
+ ' extensionLayerVersion: 86,',
161
+ ' });',
162
+ ' }',
163
+ '',
164
+ ' /**',
165
+ ' * Adds the current branch name (cleaned with \'/\' -> \'-\') if not on the main branch',
166
+ ' * @param prefix',
167
+ ' * @private',
168
+ ' */',
169
+ ' private addBranchName(prefix: string) {',
170
+ ' const dbOverride = process.env.DB_OVERRIDE;',
171
+ ' if (dbOverride) {',
172
+ ' return `${prefix}-${dbOverride}`;',
173
+ ' }',
174
+ ' ',
175
+ ' const head = fs.readFileSync(path.join(process.cwd(), \'.git\', \'HEAD\'), \'utf8\').trim();',
176
+ ' const branch = head.startsWith(\'ref: \') ? head.replace(\'ref: refs/heads/\', \'\') : head; // detached HEAD returns a SHA',
177
+ ' ',
178
+ ' if (branch !== \'main\') {',
179
+ ' console.log(\'branch: \', branch);',
180
+ ' const cleanBranchName = branch.replace(/\\//gi, \'-\');',
181
+ ' return `${prefix}-${cleanBranchName}`;',
182
+ ' }',
183
+ ' ',
184
+ ' return prefix;',
185
+ ' }',
186
+ ' ',
187
+ ' protected getDatabaseName(databaseName: string) {',
188
+ ' return this.addBranchName(databaseName);',
189
+ ' }',
190
+ ' ',
191
+ ' protected getUsername(username: string) {',
192
+ ' return this.addBranchName(username);',
193
+ ' }',
194
+ '}',
195
+ ],
196
+ });
197
+ }
198
+ }
199
+ exports.BootcampBaseApplicationStackFile = BootcampBaseApplicationStackFile;
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBCYXNlQXBwbGljYXRpb25TdGFja0ZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQm9vdGNhbXBCYXNlQXBwbGljYXRpb25TdGFja0ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBR2xDLE1BQWEsZ0NBQWlDLFNBQVEsaUJBQVE7SUFDNUQsWUFBWSxPQUE0QjtRQUN0QyxLQUFLLENBQUMsT0FBTyxFQUFFLG9DQUFvQyxFQUFFO1lBQ25ELE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUU7Z0JBQ0wsd0JBQXdCO2dCQUN4Qiw0QkFBNEI7Z0JBQzVCLHdFQUF3RTtnQkFDeEUsb0RBQW9EO2dCQUNwRCxzRUFBc0U7Z0JBQ3RFLDREQUE0RDtnQkFDNUQsMkNBQTJDO2dCQUMzQyw4REFBOEQ7Z0JBQzlELDZEQUE2RDtnQkFDN0QsNENBQTRDO2dCQUM1QyxnRUFBZ0U7Z0JBQ2hFLEVBQUU7Z0JBQ0YsaUVBQWlFO2dCQUNqRSxFQUFFO2dCQUNGLHdCQUF3QjtnQkFDeEIsU0FBUztnQkFDVCxnRUFBZ0U7Z0JBQ2hFLFFBQVE7Z0JBQ1IscUJBQXFCO2dCQUNyQixTQUFTO2dCQUNULHlDQUF5QztnQkFDekMsRUFBRTtnQkFDRixTQUFTO2dCQUNULHNFQUFzRTtnQkFDdEUsUUFBUTtnQkFDUixxQ0FBcUM7Z0JBQ3JDLFNBQVM7Z0JBQ1Qsb0NBQW9DO2dCQUNwQyxNQUFNO2dCQUNOLE9BQU87Z0JBQ1AsMERBQTBEO2dCQUMxRCxNQUFNO2dCQUNOLCtDQUErQztnQkFDL0MsT0FBTztnQkFDUCwwQ0FBMEM7Z0JBQzFDLEVBQUU7Z0JBQ0YsT0FBTztnQkFDUCwrRUFBK0U7Z0JBQy9FLE9BQU87Z0JBQ1AsNkZBQTZGO2dCQUM3RixFQUFFO2dCQUNGLE9BQU87Z0JBQ1AsNkNBQTZDO2dCQUM3QyxPQUFPO2dCQUNQLGdGQUFnRjtnQkFDaEYsRUFBRTtnQkFDRixP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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5cbmV4cG9ydCBjbGFzcyBCb290Y2FtcEJhc2VBcHBsaWNhdGlvblN0YWNrRmlsZSBleHRlbmRzIFRleHRGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCkge1xuICAgIHN1cGVyKHByb2plY3QsICdzcmMvc3RhY2tzL0Jhc2VBcHBsaWNhdGlvblN0YWNrLnRzJywge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBsaW5lczogW1xuICAgICAgICAnaW1wb3J0IGZzIGZyb20gXFwnZnNcXCc7JyxcbiAgICAgICAgJ2ltcG9ydCBwYXRoIGZyb20gXFwncGF0aFxcJzsnLFxuICAgICAgICAnaW1wb3J0IHsgQXNwZWN0cywgQ2ZuT3V0cHV0LCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gXFwnYXdzLWNkay1saWJcXCc7JyxcbiAgICAgICAgJ2ltcG9ydCB7IElWcGMsIFZwYyB9IGZyb20gXFwnYXdzLWNkay1saWIvYXdzLWVjMlxcJzsnLFxuICAgICAgICAnaW1wb3J0IHsgSG9zdGVkWm9uZSwgSUhvc3RlZFpvbmUgfSBmcm9tIFxcJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzXFwnOycsXG4gICAgICAgICdpbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFxcJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclxcJzsnLFxuICAgICAgICAnaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcXCdjb25zdHJ1Y3RzXFwnOycsXG4gICAgICAgICdpbXBvcnQgeyBEYXRhZG9nTGFtYmRhIH0gZnJvbSBcXCdkYXRhZG9nLWNkay1jb25zdHJ1Y3RzLXYyXFwnOycsXG4gICAgICAgICdpbXBvcnQgeyBEYXRhRG9nQXNwZWN0IH0gZnJvbSBcXCcuLi9hc3BlY3RzL0RhdGFEb2dBc3BlY3RcXCc7JyxcbiAgICAgICAgJ2ltcG9ydCB7IEFwaSB9IGZyb20gXFwnLi4vY29uc3RydWN0cy9BcGlcXCc7JyxcbiAgICAgICAgJ2ltcG9ydCB7IFN0YXRpY1dlYnNpdGUgfSBmcm9tIFxcJy4uL2NvbnN0cnVjdHMvU3RhdGljV2Vic2l0ZVxcJzsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2V4cG9ydCBpbnRlcmZhY2UgQmFzZUFwcGxpY2F0aW9uU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMgeycsXG4gICAgICAgICcnLFxuICAgICAgICAnICByZWFkb25seSBkYXRhZG9nPzogeycsXG4gICAgICAgICcgICAgLyoqJyxcbiAgICAgICAgJyAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgRGF0YWRvZyBOb2RlLmpzIExhbWJkYSBsYXllciB0byB1c2UuJyxcbiAgICAgICAgJyAgICAgKicsXG4gICAgICAgICcgICAgICogQGRlZmF1bHQgMTI4JyxcbiAgICAgICAgJyAgICAgKi8nLFxuICAgICAgICAnICAgIHJlYWRvbmx5IG5vZGVMYXllclZlcnNpb24/OiBudW1iZXI7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgLyoqJyxcbiAgICAgICAgJyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdC9zZXJ2aWNlIGZvciBEYXRhZG9nIHRhZ2dpbmcgcHVycG9zZXMuJyxcbiAgICAgICAgJyAgICAgKicsXG4gICAgICAgICcgICAgICogQGRlZmF1bHQgLSB1c2VzIHRoZSBzdGFjayBJRCcsXG4gICAgICAgICcgICAgICovJyxcbiAgICAgICAgJyAgICByZWFkb25seSBwcm9qZWN0TmFtZT86IHN0cmluZzsnLFxuICAgICAgICAnICB9OycsXG4gICAgICAgICcgIC8qKicsXG4gICAgICAgICcgICAqIFRoZSBkb21haW4gbmFtZSBvZiB0aGUgUm91dGUgNTMgaG9zdGVkIHpvbmUgdG8gdXNlLicsXG4gICAgICAgICcgICAqJyxcbiAgICAgICAgJyAgICogQGV4YW1wbGUgXFwnbWFjZWRvbi5zYW5kYm94LmRlZmlhbmNlLmFpXFwnJyxcbiAgICAgICAgJyAgICovJyxcbiAgICAgICAgJyAgcmVhZG9ubHkgaG9zdGVkWm9uZURvbWFpbk5hbWU6IHN0cmluZzsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLyoqJyxcbiAgICAgICAgJyAgICogVGhlIEFSTiBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBEYXRhZG9nIEFQSSBrZXkuJyxcbiAgICAgICAgJyAgICovJyxcbiAgICAgICAgJyAgcmVhZG9ubHkgZGF0YWRvZ1NlY3JldEFybjogYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtzdHJpbmd9OiR7c3RyaW5nfTpzZWNyZXQ6JHtzdHJpbmd9YDsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLyoqJyxcbiAgICAgICAgJyAgICogVGhlIENsZXJrIEpXVCB2ZXJpZmljYXRpb24ga2V5IG9yIFVSTC4nLFxuICAgICAgICAnICAgKi8nLFxuICAgICAgICAnICByZWFkb25seSBjbGVya0p3dFZlcmlmaWNhdGlvbktleTogYGh0dHBzOi8vJHtzdHJpbmd9Ly53ZWxsLWtub3duL2p3a3MuanNvbmA7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIC8qKicsXG4gICAgICAgICcgICAqIFRoZSBOOE4gZW5kcG9pbnQgYmFzZSBVUkwuJyxcbiAgICAgICAgJyAgIConLFxuICAgICAgICAnICAgKiBAZXhhbXBsZSBcXCdodHRwczovL3dvcmtmbG93LnNhbmRib3guZGVmaWFuY2UuYWkvXFwnJyxcbiAgICAgICAgJyAgICovJyxcbiAgICAgICAgJyAgcmVhZG9ubHkgbjhuRW5kcG9pbnQ6IHN0cmluZzsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLyoqJyxcbiAgICAgICAgJyAgICogVGhlIG5hbWUgb2YgdGhlIFZQQyB0byBjcmVhdGUuJyxcbiAgICAgICAgJyAgIConLFxuICAgICAgICAnICAgKiBAZGVmYXVsdCBcXCcke2lkfS12cGNcXCcnLFxuICAgICAgICAnICAgKi8nLFxuICAgICAgICAnICByZWFkb25seSB2cGNOYW1lPzogc3RyaW5nOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICAvKionLFxuICAgICAgICAnICAgKiBUaGUgaG9zdG5hbWUgZm9yIHRoZSBzdGF0aWMgd2Vic2l0ZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBob3N0ZWR6b25lLicsXG4gICAgICAgICcgICAqJyxcbiAgICAgICAgJyAgICogQGV4YW1wbGUgXFwnbXlib2lcXCcnLFxuICAgICAgICAnICAgKiBAZGVmYXVsdCBcXCdtdnBcXCcnLFxuICAgICAgICAnICAgKi8nLFxuICAgICAgICAnICByZWFkb25seSBob3N0bmFtZTogc3RyaW5nOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdleHBvcnQgY2xhc3MgQmFzZUFwcGxpY2F0aW9uU3RhY2s8VFByb3BzIGV4dGVuZHMgQmFzZUFwcGxpY2F0aW9uU3RhY2tQcm9wcz4gZXh0ZW5kcyBTdGFjayB7JyxcbiAgICAgICAgJyAgcHJvdGVjdGVkIGRhdGFkb2c6IERhdGFkb2dMYW1iZGE7JyxcbiAgICAgICAgJyAgcHJvdGVjdGVkIGhvc3RlZFpvbmU6IElIb3N0ZWRab25lOycsXG4gICAgICAgICcgIHByb3RlY3RlZCB2cGM6IElWcGM7JyxcbiAgICAgICAgJyAgcHJvdGVjdGVkIGFwaTogQXBpOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBwcml2YXRlIGlkOiBzdHJpbmcsIHByb3RlY3RlZCBwcm9wczogVFByb3BzKSB7JyxcbiAgICAgICAgJyAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgICBpZiAoIXRoaXMucHJvcHMuY2xlcmtKd3RWZXJpZmljYXRpb25LZXkpIHsnLFxuICAgICAgICAnICAgICAgdGhyb3cgbmV3IEVycm9yKFxcJ2NsZXJrSnd0VmVyaWZpY2F0aW9uS2V5IGlzIHJlcXVpcmVkXFwnKTsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgICB0aGlzLmNyZWF0ZURhdGFkb2dFeHRlbnNpb24oKTsnLFxuICAgICAgICAnICAgIGlmICghdGhpcy5kYXRhZG9nKSB7JyxcbiAgICAgICAgJyAgICAgIHRocm93IG5ldyBFcnJvcihcXCdEYXRhZG9nIGV4dGVuc2lvbiBjcmVhdGlvbiBmYWlsZWRcXCcpOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgIHRoaXMuY3JlYXRlSG9zdGVkWm9uZSgpOycsXG4gICAgICAgICcgICAgaWYgKCF0aGlzLmhvc3RlZFpvbmUpIHsnLFxuICAgICAgICAnICAgICAgdGhyb3cgbmV3IEVycm9yKFxcJ0hvc3RlZFpvbmUgY3JlYXRpb24gZmFpbGVkXFwnKTsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgICB0aGlzLmNyZWF0ZVZwYygpOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgIHRoaXMuY3JlYXRlQXBpKCk7JyxcbiAgICAgICAgJyAgICBpZiAoIXRoaXMuYXBpKSB7JyxcbiAgICAgICAgJyAgICAgIHRocm93IG5ldyBFcnJvcihcXCdBUEkgY3JlYXRpb24gZmFpbGVkXFwnKTsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgICB0aGlzLmNyZWF0ZVN0YXRpY1dlYnNpdGUoKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgICB0aGlzLmNyZWF0ZU91dHB1dHMoKTsnLFxuICAgICAgICAnICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBEYXRhRG9nQXNwZWN0KHsgZGF0YWRvZzogdGhpcy5kYXRhZG9nIH0pKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIHByb3RlY3RlZCBjcmVhdGVTdGF0aWNXZWJzaXRlKCkgeycsXG4gICAgICAgICcgICAgbmV3IFN0YXRpY1dlYnNpdGUodGhpcywgXFwnU3RhdGljV2Vic2l0ZVxcJywgeycsXG4gICAgICAgICcgICAgICBob3N0ZWRab25lOiB0aGlzLmhvc3RlZFpvbmUsJyxcbiAgICAgICAgJyAgICAgIGFwaTogdGhpcy5hcGkucmVzdEFwaSwnLFxuICAgICAgICAnICAgICAgaG9zdG5hbWU6IHRoaXMucHJvcHMuaG9zdG5hbWUsJyxcbiAgICAgICAgJyAgICB9KTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIHByb3RlY3RlZCBjcmVhdGVBcGkoKSB7JyxcbiAgICAgICAgJyAgICB0aGlzLmFwaSA9IG5ldyBBcGkodGhpcywgXFwnQXBpXFwnLCB7JyxcbiAgICAgICAgJyAgICAgIHZwYzogdGhpcy52cGMsJyxcbiAgICAgICAgJyAgICAgIGNsZXJrSnd0VmVyaWZpY2F0aW9uS2V5OiB0aGlzLnByb3BzLmNsZXJrSnd0VmVyaWZpY2F0aW9uS2V5LCcsXG4gICAgICAgICcgICAgICBuOG5FbmRwb2ludDogdGhpcy5wcm9wcy5uOG5FbmRwb2ludCwnLFxuICAgICAgICAnICAgIH0pOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgcHJvdGVjdGVkIGNyZWF0ZVZwYygpIHsnLFxuICAgICAgICAnICAgIHRoaXMudnBjID0gbmV3IFZwYyh0aGlzLCBcXCdWUENcXCcsIHsnLFxuICAgICAgICAnICAgICAgdnBjTmFtZTogdGhpcy5wcm9wcy52cGNOYW1lIHx8IGAke3RoaXMuaWR9LXZwY2AsJyxcbiAgICAgICAgJyAgICAgIG1heEF6czogMywnLFxuICAgICAgICAnICAgICAgbmF0R2F0ZXdheXM6IDEsJyxcbiAgICAgICAgJyAgICB9KTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIHByb3RlY3RlZCBjcmVhdGVIb3N0ZWRab25lKCkgeycsXG4gICAgICAgICcgICAgdGhpcy5ob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tTG9va3VwKHRoaXMsIFxcJ0hvc3RlZFpvbmVcXCcsIHsnLFxuICAgICAgICAnICAgICAgZG9tYWluTmFtZTogdGhpcy5wcm9wcy5ob3N0ZWRab25lRG9tYWluTmFtZSwnLFxuICAgICAgICAnICAgIH0pOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgcHJvdGVjdGVkIGNyZWF0ZU91dHB1dHMoKSB7JyxcbiAgICAgICAgJyAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFxcJ1dlYnNpdGVVcmxcXCcsIHsnLFxuICAgICAgICAnICAgICAgdmFsdWU6IGBodHRwczovLyR7dGhpcy5wcm9wcy5ob3N0bmFtZX0uJHt0aGlzLmhvc3RlZFpvbmUuem9uZU5hbWV9YCwnLFxuICAgICAgICAnICAgICAgZGVzY3JpcHRpb246IFxcJ1RoZSBVUkwgb2YgdGhlIHN0YXRpYyB3ZWJzaXRlXFwnLCcsXG4gICAgICAgICcgICAgICBleHBvcnROYW1lOiBgJHt0aGlzLmlkLnJlcGxhY2UoL1xcXFwvLywgXFwnLVxcJyl9LVdlYnNpdGVVcmxgLCcsXG4gICAgICAgICcgICAgfSk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICBwcm90ZWN0ZWQgY3JlYXRlRGF0YWRvZ0V4dGVuc2lvbigpIHsnLFxuICAgICAgICAnICAgIGNvbnN0IGRhdGFkb2dBcGlTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldENvbXBsZXRlQXJuKHRoaXMsIFxcJ0RhdGFkb2dBcGlLZXlcXCcsIHRoaXMucHJvcHMuZGF0YWRvZ1NlY3JldEFybik7JyxcbiAgICAgICAgJyAgICB0aGlzLmRhdGFkb2cgPSBuZXcgRGF0YWRvZ0xhbWJkYSh0aGlzLCBcXCdEYXRhZG9nXFwnLCB7JyxcbiAgICAgICAgJyAgICAgIGFwaUtleVNlY3JldDogZGF0YWRvZ0FwaVNlY3JldCwnLFxuICAgICAgICAnICAgICAgc2VydmljZTogdGhpcy5wcm9wcy5kYXRhZG9nPy5wcm9qZWN0TmFtZSB8fCB0aGlzLmlkLCcsXG4gICAgICAgICcgICAgICBub2RlTGF5ZXJWZXJzaW9uOiB0aGlzLnByb3BzLmRhdGFkb2c/Lm5vZGVMYXllclZlcnNpb24gfHwgMTI4LCcsXG4gICAgICAgICcgICAgICBleHRlbnNpb25MYXllclZlcnNpb246IDg2LCcsXG4gICAgICAgICcgICAgfSk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAvKionLFxuICAgICAgICAnICAgKiBBZGRzIHRoZSBjdXJyZW50IGJyYW5jaCBuYW1lIChjbGVhbmVkIHdpdGggXFwnL1xcJyAtPiBcXCctXFwnKSBpZiBub3Qgb24gdGhlIG1haW4gYnJhbmNoJyxcbiAgICAgICAgJyAgICogQHBhcmFtIHByZWZpeCcsXG4gICAgICAgICcgICAqIEBwcml2YXRlJyxcbiAgICAgICAgJyAgKi8nLFxuICAgICAgICAnICBwcml2YXRlIGFkZEJyYW5jaE5hbWUocHJlZml4OiBzdHJpbmcpIHsnLFxuICAgICAgICAnICAgIGNvbnN0IGRiT3ZlcnJpZGUgPSBwcm9jZXNzLmVudi5EQl9PVkVSUklERTsnLFxuICAgICAgICAnICAgIGlmIChkYk92ZXJyaWRlKSB7JyxcbiAgICAgICAgJyAgICAgIHJldHVybiBgJHtwcmVmaXh9LSR7ZGJPdmVycmlkZX1gOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgICcsXG4gICAgICAgICcgICAgY29uc3QgaGVhZCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXFwnLmdpdFxcJywgXFwnSEVBRFxcJyksIFxcJ3V0ZjhcXCcpLnRyaW0oKTsnLFxuICAgICAgICAnICAgIGNvbnN0IGJyYW5jaCA9IGhlYWQuc3RhcnRzV2l0aChcXCdyZWY6IFxcJykgPyBoZWFkLnJlcGxhY2UoXFwncmVmOiByZWZzL2hlYWRzL1xcJywgXFwnXFwnKSA6IGhlYWQ7IC8vIGRldGFjaGVkIEhFQUQgcmV0dXJucyBhIFNIQScsXG4gICAgICAgICcgICcsXG4gICAgICAgICcgICAgaWYgKGJyYW5jaCAhPT0gXFwnbWFpblxcJykgeycsXG4gICAgICAgICcgICAgICBjb25zb2xlLmxvZyhcXCdicmFuY2g6IFxcJywgYnJhbmNoKTsnLFxuICAgICAgICAnICAgICAgY29uc3QgY2xlYW5CcmFuY2hOYW1lID0gYnJhbmNoLnJlcGxhY2UoL1xcXFwvL2dpLCBcXCctXFwnKTsnLFxuICAgICAgICAnICAgICAgcmV0dXJuIGAke3ByZWZpeH0tJHtjbGVhbkJyYW5jaE5hbWV9YDsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICAnLFxuICAgICAgICAnICAgIHJldHVybiBwcmVmaXg7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgICcsXG4gICAgICAgICcgIHByb3RlY3RlZCBnZXREYXRhYmFzZU5hbWUoZGF0YWJhc2VOYW1lOiBzdHJpbmcpIHsnLFxuICAgICAgICAnICAgIHJldHVybiB0aGlzLmFkZEJyYW5jaE5hbWUoZGF0YWJhc2VOYW1lKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgJyxcbiAgICAgICAgJyAgcHJvdGVjdGVkIGdldFVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpIHsnLFxuICAgICAgICAnICAgIHJldHVybiB0aGlzLmFkZEJyYW5jaE5hbWUodXNlcm5hbWUpOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnfScsXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,28 +1,6 @@
1
- import { AwsCdkTypeScriptApp, AwsCdkTypeScriptAppOptions } from 'projen/lib/awscdk';
2
- import { ApplicationEnvironmentConfig } from './Application';
3
- export interface BootcampProjectOptions extends AwsCdkTypeScriptAppOptions {
4
- /**
5
- * Development environment configuration
6
- */
7
- readonly dev: ApplicationEnvironmentConfig;
8
- /**
9
- * Development environment configuration
10
- */
11
- readonly staging: ApplicationEnvironmentConfig;
12
- /**
13
- * Production environment configuration
14
- */
15
- readonly prod: ApplicationEnvironmentConfig;
16
- /**
17
- * Additional tags to apply to all stacks
18
- */
19
- readonly additionalTags?: {
20
- [key: string]: string;
21
- };
22
- /**
23
- * Additional code owners to add to the CODEOWNERS file
24
- */
25
- readonly additionalCodeOwners?: string[];
1
+ import { AwsCdkTypeScriptApp } from 'projen/lib/awscdk';
2
+ import { BatmanProjectOptions } from './BatmanProject';
3
+ export interface BootcampProjectOptions extends BatmanProjectOptions {
26
4
  }
27
5
  export declare class BootcampProject extends AwsCdkTypeScriptApp {
28
6
  constructor(options: BootcampProjectOptions);