@macedon-technologies/batman 1.8.0 → 1.9.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.
- package/.jsii +146 -2
- package/API.md +5281 -844
- package/lib/BatmanProject.js +1 -1
- package/lib/BootcampApplication.d.ts +21 -0
- package/lib/BootcampApplication.js +75 -0
- package/lib/BootcampApplicationStackFile.d.ts +5 -0
- package/lib/BootcampApplicationStackFile.js +105 -0
- package/lib/BootcampProject.d.ts +29 -0
- package/lib/BootcampProject.js +249 -0
- package/lib/CodeOwnersFile.js +1 -1
- package/lib/ProductionDeployWorkflow.js +1 -1
- package/lib/StagingDeployWorkflow.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -1
- package/package.json +1 -1
package/lib/BatmanProject.js
CHANGED
|
@@ -245,5 +245,5 @@ class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
|
|
|
245
245
|
}
|
|
246
246
|
exports.BatmanProject = BatmanProject;
|
|
247
247
|
_a = JSII_RTTI_SYMBOL_1;
|
|
248
|
-
BatmanProject[_a] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.
|
|
248
|
+
BatmanProject[_a] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.9.0" };
|
|
249
249
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0bWFuUHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXRtYW5Qcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQW9GO0FBQ3BGLDhDQUFzRDtBQUN0RCwrQ0FBMEU7QUFDMUUscURBQWtEO0FBQ2xELDJEQUF3RDtBQUN4RCx1REFBb0Q7QUFDcEQseURBQXNEO0FBb0N0RCxNQUFhLGFBQWMsU0FBUSw0QkFBbUI7SUFDcEQsWUFBWSxPQUE2QjtRQUN2QyxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTO1lBQzNDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxNQUFNO1lBQzVELElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsS0FBSztZQUNwQixJQUFJLEVBQUU7Z0JBQ0osbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLFdBQVc7Z0JBQ1gsSUFBSTtnQkFDSixxQkFBcUI7Z0JBQ3JCLHNCQUFzQjtnQkFDdEIsMkJBQTJCO2dCQUMzQiwwQkFBMEI7Z0JBQzFCLG1DQUFtQztnQkFDbkMsY0FBYztnQkFDZCxpQ0FBaUM7Z0JBQ2pDLFNBQVM7Z0JBQ1QsaUJBQWlCO2dCQUNqQixHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRTthQUN0QjtZQUNELE9BQU8sRUFBRTtnQkFDUCxxQkFBcUI7Z0JBQ3JCLFNBQVM7Z0JBQ1QsY0FBYztnQkFDZCxxQ0FBcUM7Z0JBQ3JDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFO2FBQ3pCO1lBQ0QsU0FBUyxFQUFFO2dCQUNULG1EQUFtRDtnQkFDbkQsY0FBYztnQkFDZCxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTthQUMzQjtZQUNELFFBQVEsRUFBRTtnQkFDUixHQUFHLE9BQU8sQ0FBQyxR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LEVBQUUsTUFBTTtZQUM1QixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXO1NBQzFCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXBELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFjLEVBQUUsRUFBRTtZQUN6QyxPQUFPLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2xCLElBQUksRUFBRSxZQUFZLENBQ2hCLGdGQUFnRixFQUNoRixTQUFTLENBQUMsVUFBVSxDQUNyQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLElBQUksRUFBRSxnRkFBZ0Y7WUFDdEYsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO0lBR0wsQ0FBQzs7QUF0UEgsc0NBdVBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCwgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5pbXBvcnQgeyBHaXRodWJDcmVkZW50aWFscyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uLCBBcHBsaWNhdGlvbkVudmlyb25tZW50Q29uZmlnIH0gZnJvbSAnLi9BcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBDb2RlT3duZXJzRmlsZSB9IGZyb20gJy4vQ29kZU93bmVyc0ZpbGUnO1xuaW1wb3J0IHsgRGF0YURvZ0FzcGVjdEZpbGUgfSBmcm9tICcuL0RhdGFEb2dBc3BlY3RGaWxlJztcbmltcG9ydCB7IEdpdEh1YlJvbGVzRmlsZSB9IGZyb20gJy4vR2l0SHViUm9sZXNGaWxlJztcbmltcG9ydCB7IFZpdGVSZWFjdFByb2plY3QgfSBmcm9tICcuL1ZpdGVSZWFjdFByb2plY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhdG1hblByb2plY3RPcHRpb25zIGV4dGVuZHMgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBEZXZlbG9wbWVudCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXY6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIERldmVsb3BtZW50IGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdpbmc6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIFByb2R1Y3Rpb24gZW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIGFsbCBzdGFja3NcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBjb2RlIG93bmVycyB0byBhZGQgdG8gdGhlIENPREVPV05FUlMgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbENvZGVPd25lcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2Vic2l0ZSBkZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IHdlYnNpdGVEZXBzPzogc3RyaW5nW107XG59XG5cblxuZXhwb3J0IGNsYXNzIEJhdG1hblByb2plY3QgZXh0ZW5kcyBBd3NDZGtUeXBlU2NyaXB0QXBwIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQmF0bWFuUHJvamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgY2RrVmVyc2lvbjogb3B0aW9ucy5jZGtWZXJzaW9uIHx8ICcyLjIyNC4wJyxcbiAgICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoIHx8ICdtYWluJyxcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgICBidWlsZFdvcmtmbG93OiBmYWxzZSxcbiAgICAgIGRlcHM6IFtcbiAgICAgICAgJ0B0eXBlcy9hd3MtbGFtYmRhJyxcbiAgICAgICAgJ0B0eXBlcy9leHByZXNzJyxcbiAgICAgICAgJ0B0eXBlcy9wZycsXG4gICAgICAgICdwZycsXG4gICAgICAgICdAYXdzLXNkay9yZHMtc2lnbmVyJyxcbiAgICAgICAgJ0BtYXR0aGV3Ym9uaWcvc2VjcmV0JyxcbiAgICAgICAgJ2RhdGFkb2ctY2RrLWNvbnN0cnVjdHMtdjInLFxuICAgICAgICAnQGNka2xhYnMvYXdzLWxhbWJkYS1ydXN0JyxcbiAgICAgICAgJ0Bhd3MtbGFtYmRhLXBvd2VydG9vbHMvcGFyYW1ldGVycycsXG4gICAgICAgICdqc29ud2VidG9rZW4nLFxuICAgICAgICAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcicsXG4gICAgICAgICdleHByZXNzJyxcbiAgICAgICAgJ3NlcnZlcmxlc3MtaHR0cCcsXG4gICAgICAgIC4uLm9wdGlvbnMuZGVwcyB8fCBbXSxcbiAgICAgIF0sXG4gICAgICBkZXZEZXBzOiBbXG4gICAgICAgICdAdHlwZXMvanNvbndlYnRva2VuJyxcbiAgICAgICAgJ25vZGVtb24nLFxuICAgICAgICAnY29uY3VycmVudGx5JyxcbiAgICAgICAgJ0BtYWNlZG9uLXRlY2hub2xvZ2llcy9iYXRtYW5AXjEuMC4wJyxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXZEZXBzIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIGdpdGlnbm9yZTogW1xuICAgICAgICAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9jbGVyay1hdXRob3JpemVyL3RhcmdldC8qKicsXG4gICAgICAgICcqKi8uRFNfU3RvcmUnLFxuICAgICAgICAuLi5vcHRpb25zLmdpdGlnbm9yZSB8fCBbXSxcbiAgICAgIF0sXG4gICAgICB0c2NvbmZpZzoge1xuICAgICAgICAuLi5vcHRpb25zLnRzY29uZmlnLFxuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLnRzY29uZmlnPy5jb21waWxlck9wdGlvbnMsXG4gICAgICAgICAgaXNvbGF0ZWRNb2R1bGVzOiB0cnVlLFxuICAgICAgICAgIGFsbG93SW1wb3J0aW5nVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNhbXBsZUNvZGU6IGZhbHNlLFxuICAgICAgbWluTm9kZVZlcnNpb246IG9wdGlvbnMubWluTm9kZVZlcnNpb24gfHwgJzIyJyxcbiAgICAgIGRlcHNVcGdyYWRlT3B0aW9uczoge1xuICAgICAgICB3b3JrZmxvd09wdGlvbnM6IHtcbiAgICAgICAgICBwcm9qZW5DcmVkZW50aWFsczogR2l0aHViQ3JlZGVudGlhbHMuZnJvbVBlcnNvbmFsQWNjZXNzVG9rZW4oe1xuICAgICAgICAgICAgc2VjcmV0OiAnR0lUSFVCX1RPS0VOJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByZWFkbWU6IHtcbiAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICBgIyAke29wdGlvbnMubmFtZX1gLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdUaGlzIHByb2plY3Qgd2FzIGJvb3RzdHJhcHBlZCB3aXRoIFtCYXRtYW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9tYWNlZG9uLXRlY2hub2xvZ2llcy9wbGF0Zm9ybS1jb21tb24pLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIFdoYXQgQmF0bWFuIENyZWF0ZWQnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyMgQ0RLIEluZnJhc3RydWN0dXJlIChgc3JjL2ApJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnfCBGaWxlIHwgRGVzY3JpcHRpb24gfCcsXG4gICAgICAgICAgJ3wtLS0tLS18LS0tLS0tLS0tLS0tLXwnLFxuICAgICAgICAgICd8IGBzcmMvbWFpbi50c2AgfCBDREsgYXBwIGVudHJ5IHBvaW50IOKAlCBpbnN0YW50aWF0ZXMgZGV2LCBzdGFnaW5nLCBhbmQgcHJvZCBgQXBwbGljYXRpb25TdGFja2BzIHwnLFxuICAgICAgICAgICd8IGBzcmMvTG9jYWxEZXZBcHAudHNgIHwgTG9jYWwgZGV2ZWxvcG1lbnQgQ0RLIGFwcCDigJQgdXNlZCBieSBgeWFybiBjZGs6ZGV2YCB8JyxcbiAgICAgICAgICAnfCBgc3JjL0dpdEh1YlJvbGVzLnRzYCB8IENESyBhcHAgZm9yIGRlcGxveWluZyB0aGUgR2l0SHViIE9JREMgSUFNIHJvbGUgKG9uZS10aW1lIGJvb3RzdHJhcCkgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9zdGFja3MvQXBwbGljYXRpb25TdGFjay50c2AgfCBZb3VyIHByaW1hcnkgc3RhY2sg4oCUIGV4dGVuZCBpdCB0byBhZGQgcmVzb3VyY2VzIHwnLFxuICAgICAgICAgICd8IGBzcmMvc3RhY2tzL0Jhc2VBcHBsaWNhdGlvblN0YWNrLnRzYCB8IEJhc2Ugc3RhY2sgd2l0aCBWUEMsIEFQSSwgc3RhdGljIHdlYnNpdGUsIERhdGFkb2csIGFuZCBSb3V0ZSA1MyB3aXJlZCB1cCB8JyxcbiAgICAgICAgICAnfCBgc3JjL3N0YWNrcy9HaXRIdWJSb2xlc1N0YWNrLnRzYCB8IElBTSByb2xlIHN0YWNrIGZvciBHaXRIdWIgQWN0aW9ucyBPSURDIGF1dGhlbnRpY2F0aW9uIHwnLFxuICAgICAgICAgICd8IGBzcmMvY29uc3RydWN0cy9BcGkudHNgIHwgQVBJIEdhdGV3YXkgKyBMYW1iZGEgY29uc3RydWN0IHdpdGggQ2xlcmsgSldUIGF1dGhvcml6ZXIgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL1N0YXRpY1dlYnNpdGUudHNgIHwgQ2xvdWRGcm9udCArIFMzICsgQUNNICsgUm91dGUgNTMgY29uc3RydWN0IHwnLFxuICAgICAgICAgICd8IGBzcmMvY29uc3RydWN0cy9oYW5kbGVyL0FwaS5GdW5jdGlvbi50c2AgfCBMYW1iZGEgaGFuZGxlciBlbnRyeSBwb2ludCB8JyxcbiAgICAgICAgICAnfCBgc3JjL2FzcGVjdHMvRGF0YURvZ0FzcGVjdC50c2AgfCBDREsgYXNwZWN0IHRoYXQgd2lyZXMgYWxsIExhbWJkYSBmdW5jdGlvbnMgdG8gRGF0YWRvZyB8JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMjIEZyb250ZW5kIChgd2ViL2ApJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnfCBGaWxlIHwgRGVzY3JpcHRpb24gfCcsXG4gICAgICAgICAgJ3wtLS0tLS18LS0tLS0tLS0tLS0tLXwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL21haW4udHN4YCB8IFJlYWN0IGFwcCBlbnRyeSBwb2ludCB3aXRoIENsZXJrIGFuZCBSZWFjdCBRdWVyeSBwcm92aWRlcnMgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvQXBwLnRzeGAgfCBSb290IGFwcGxpY2F0aW9uIGNvbXBvbmVudCB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9BcHAuY3NzYCAvIGB3ZWIvc3JjL2luZGV4LmNzc2AgfCBCYXNlIHN0eWxlc2hlZXRzIChUYWlsd2luZCBDU1MgdjQpIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL2NvbmZpZy50c2AgfCBgdXNlQ29uZmlnKClgIGhvb2sg4oCUIGxvYWRzIHJ1bnRpbWUgY29uZmlnIGZyb20gYGNvbmZpZy5qc29uYCB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9zZXJ2aWNlcy9CYXNlU2VydmljZS50c2AgfCBgdXNlQmFzZVF1ZXJ5KClgIOKAlCBhdXRoZW50aWNhdGVkIEFQSSBmZXRjaCBob29rIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL3NlcnZpY2VzL1Jvb3RTZXJ2aWNlLnRzYCB8IEV4YW1wbGUgc2VydmljZSB1c2luZyBgdXNlQmFzZVF1ZXJ5YCB8JyxcbiAgICAgICAgICAnfCBgd2ViL3B1YmxpYy9jb25maWcuanNvbmAgfCBSdW50aW1lIGNvbmZpZyAoQVBJIGJhc2UgVVJMLCBDbGVyayBwdWJsaXNoYWJsZSBrZXkpIHwnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyMgR2l0SHViIEFjdGlvbnMgV29ya2Zsb3dzIChgLmdpdGh1Yi93b3JrZmxvd3MvYCknLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICd8IEZpbGUgfCBUcmlnZ2VyIHwnLFxuICAgICAgICAgICd8LS0tLS0tfC0tLS0tLS0tLXwnLFxuICAgICAgICAgICd8IGBwci1kZXBsb3kueW1sYCB8IE9uIHB1bGwgcmVxdWVzdCBvcGVuL3VwZGF0ZSDigJQgZGVwbG95cyBhIHBlci1QUiBkZXYgc3RhY2sgfCcsXG4gICAgICAgICAgJ3wgYHByLWNsZWFudXAueW1sYCB8IE9uIHB1bGwgcmVxdWVzdCBjbG9zZSDigJQgdGVhcnMgZG93biB0aGUgcGVyLVBSIGRldiBzdGFjayB8JyxcbiAgICAgICAgICAnfCBgc3RhZ2luZy1kZXBsb3kueW1sYCB8IE9uIHB1c2ggdG8gYG1haW5gIOKAlCBkZXBsb3lzIHRvIHN0YWdpbmcgfCcsXG4gICAgICAgICAgJ3wgYHByb2R1Y3Rpb24tZGVwbG95LnltbGAgfCBNYW51YWxseSB0cmlnZ2VyZWQg4oCUIGRlcGxveXMgdG8gcHJvZHVjdGlvbiB8JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnLS0tJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgRmlsZXMgWW91IENhbiBFZGl0JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnVGhlc2UgZmlsZXMgYXJlIGdlbmVyYXRlZCBvbmNlIGFuZCBuZXZlciBvdmVyd3JpdHRlbiBieSBCYXRtYW4uIE1vZGlmeSB0aGVtIGZyZWVseS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICd8IEZpbGUgfCBXaGF0IHRvIGRvIHdpdGggaXQgfCcsXG4gICAgICAgICAgJ3wtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18JyxcbiAgICAgICAgICAnfCBgc3JjL3N0YWNrcy9BcHBsaWNhdGlvblN0YWNrLnRzYCB8ICoqU3RhcnQgaGVyZS4qKiBBZGQgQ0RLIGNvbnN0cnVjdHMgdG8gYnVpbGQgeW91ciBpbmZyYXN0cnVjdHVyZSB8JyxcbiAgICAgICAgICAnfCBgc3JjL2NvbnN0cnVjdHMvQXBpLnRzYCB8IEV4dGVuZCB0aGUgQVBJIOKAlCBhZGQgTGFtYmRhIGludGVncmF0aW9ucywgcm91dGVzLCBvciBvdmVycmlkZSBtZXRob2RzIHwnLFxuICAgICAgICAgICd8IGBzcmMvY29uc3RydWN0cy9TdGF0aWNXZWJzaXRlLnRzYCB8IEN1c3RvbWl6ZSBDbG91ZEZyb250IGJlaGF2aW9ycywgUzMgc2V0dGluZ3MsIG9yIGRlcGxveW1lbnQgb3B0aW9ucyB8JyxcbiAgICAgICAgICAnfCBgc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9BcGkuRnVuY3Rpb24udHNgIHwgSW1wbGVtZW50IHlvdXIgTGFtYmRhIGhhbmRsZXIgbG9naWMgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9zdGFja3MvR2l0SHViUm9sZXNTdGFjay50c2AgfCBBZGQgSUFNIHBlcm1pc3Npb25zIG5lZWRlZCBieSBHaXRIdWIgQWN0aW9ucyB8JyxcbiAgICAgICAgICAnfCBgc3JjL21haW4udHNgIHwgQWRqdXN0IHN0YWNrIGluc3RhbnRpYXRpb24gb3IgYWRkIGFkZGl0aW9uYWwgc3RhY2tzIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL0FwcC50c3hgIHwgQnVpbGQgeW91ciBVSSBoZXJlIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL0FwcC5jc3NgIC8gYHdlYi9zcmMvaW5kZXguY3NzYCB8IFN0eWxlIHlvdXIgYXBwbGljYXRpb24gfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvbWFpbi50c3hgIHwgQWRqdXN0IHRvcC1sZXZlbCBwcm92aWRlcnMgb3Igcm91dGluZyB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9zZXJ2aWNlcy9Sb290U2VydmljZS50c2AgfCBBZGQgb3IgcmVwbGFjZSBBUEkgc2VydmljZSBob29rcyB8JyxcbiAgICAgICAgICAnfCBgd2ViL3B1YmxpYy9jb25maWcuanNvbmAgfCBVcGRhdGUgZm9yIGxvY2FsIGRldmVsb3BtZW50IChBUEkgVVJMLCBDbGVyayBrZXkpIHwnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBGaWxlcyBZb3UgQ2Fubm90IEVkaXQnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdUaGVzZSBmaWxlcyBhcmUgKiptYW5hZ2VkIGJ5IEJhdG1hbioqIGFuZCB3aWxsIGJlIG92ZXJ3cml0dGVuIGV2ZXJ5IHRpbWUgYG5weCBwcm9qZW5gIHJ1bnMuIERvIG5vdCBlZGl0IHRoZW0gZGlyZWN0bHkg4oCUIG1ha2UgY2hhbmdlcyBpbiBgLnByb2plbnJjLnRzYCBpbnN0ZWFkLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJz4gWyFJTVBPUlRBTlRdJyxcbiAgICAgICAgICAnPiBJZiB5b3UgaGF2ZSBBTlkgY2hhbmdlcyB5b3Ugd2FudCB0byBtYWtlIHRvIHRoZXNlIGZpbGVzLCBub3RpZnkgI3RlYW0tYmF0bWFuIG9uIFNsYWNrLiAnLFxuICAgICAgICAgICc+IFdlIG1haW50YWluIHRoZXNlIGZpbGVzIGFzIHBhcnQgb2YgdGhlIGNvcmUgQmF0bWFuIGV4cGVyaWVuY2UsIGFuZCB5b3VyIGZlZWRiYWNrIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoZXkgbWVldCB5b3VyIG5lZWRzLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ3wgRmlsZSB8IFdoeSBpdFxcJ3MgbWFuYWdlZCB8JyxcbiAgICAgICAgICAnfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwnLFxuICAgICAgICAgICd8IGBzcmMvc3RhY2tzL0Jhc2VBcHBsaWNhdGlvblN0YWNrLnRzYCB8IENvcmUgc3RhY2sgd2lyaW5nIOKAlCB1cGRhdGVkIHdpdGggQmF0bWFuIHJlbGVhc2VzIHwnLFxuICAgICAgICAgICd8IGBzcmMvYXNwZWN0cy9EYXRhRG9nQXNwZWN0LnRzYCB8IERhdGFkb2cgQ0RLIGFzcGVjdCB8JyxcbiAgICAgICAgICAnfCBgd2ViL3ZpdGUuY29uZmlnLnRzYCB8IFZpdGUgY29uZmlndXJhdGlvbiB8JyxcbiAgICAgICAgICAnfCBgd2ViL2VzbGludC5jb25maWcuanNgIHwgRVNMaW50IGNvbmZpZ3VyYXRpb24gfCcsXG4gICAgICAgICAgJ3wgYHdlYi9wb3N0Y3NzLmNvbmZpZy5qc2AgfCBQb3N0Q1NTIC8gVGFpbHdpbmQgY29uZmlndXJhdGlvbiB8JyxcbiAgICAgICAgICAnfCBgd2ViL2luZGV4Lmh0bWxgIHwgSFRNTCBlbnRyeSBwb2ludCB8JyxcbiAgICAgICAgICAnfCBgd2ViL3RzY29uZmlnLmpzb25gIC8gYHdlYi90c2NvbmZpZy5hcHAuanNvbmAgLyBgd2ViL3RzY29uZmlnLm5vZGUuanNvbmAgfCBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvdml0ZS1lbnYuZC50c2AgfCBWaXRlIHR5cGUgZGVjbGFyYXRpb25zIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL2NvbmZpZy50c2AgfCBSdW50aW1lIGNvbmZpZyBob29rIOKAlCBzaGFwZSBkcml2ZW4gYnkgYC5wcm9qZW5yYy50c2AgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvc2VydmljZXMvQmFzZVNlcnZpY2UudHNgIHwgQmFzZSBhdXRoZW50aWNhdGVkIGZldGNoIGhvb2sgfCcsXG4gICAgICAgICAgJ3wgYC5naXRodWIvQ09ERU9XTkVSU2AgfCBDb2RlIG93bmVyc2hpcCBwb2xpY3kgfCcsXG4gICAgICAgICAgJ3wgYC5naXRodWIvd29ya2Zsb3dzLyoueW1sYCB8IEFsbCBDSS9DRCB3b3JrZmxvd3MgfCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJz4gKipUaXA6KiogRmlsZXMgd2l0aCBhIGB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJucHggcHJvamVuXCIuIH5+YCBoZWFkZXIgYXJlIG1hbmFnZWQgZmlsZXMuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnLS0tJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgV2hlcmUgdG8gU3RhcnQnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcxLiAqKmBzcmMvc3RhY2tzL0FwcGxpY2F0aW9uU3RhY2sudHNgKiog4oCUIEFkZCB5b3VyIENESyBjb25zdHJ1Y3RzIGhlcmUuIFRoZSBiYXNlIHN0YWNrIGFscmVhZHkgcHJvdmlkZXMgYHRoaXMuYXBpYCwgYHRoaXMudnBjYCwgYHRoaXMuaG9zdGVkWm9uZWAsIGFuZCBgdGhpcy5kYXRhZG9nYCBhcyBwcm90ZWN0ZWQgcHJvcGVydGllcy4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcyLiAqKmB3ZWIvYCoqIOKAlCBCdWlsZCB5b3VyIGZyb250ZW5kLiBTdGFydCB3aXRoIGB3ZWIvc3JjL0FwcC50c3hgIGFuZCBhZGQgc2VydmljZXMgYWxvbmdzaWRlIGB3ZWIvc3JjL3NlcnZpY2VzL1Jvb3RTZXJ2aWNlLnRzYC4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICczLiAqKmBzcmMvY29uc3RydWN0cy9oYW5kbGVyL0FwaS5GdW5jdGlvbi50c2AqKiDigJQgSW1wbGVtZW50IHlvdXIgYmFja2VuZCBMYW1iZGEgaGFuZGxlciBsb2dpYyBoZXJlLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJy0tLScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIERldmVsb3BtZW50IFdvcmtmbG93JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnYGBgYmFzaCcsXG4gICAgICAgICAgJyMgSW5zdGFsbCBkZXBlbmRlbmNpZXMnLFxuICAgICAgICAgICd5YXJuIGluc3RhbGwnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIFN0YXJ0IGxvY2FsIGRldiBzZXJ2ZXIgKGJhY2tlbmQgTGFtYmRhICsgVml0ZSBmcm9udGVuZCBpbiBwYXJhbGxlbCknLFxuICAgICAgICAgICd5YXJuIGRldicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMgRGVwbG95IGEgcGVyc29uYWwgZGV2IHN0YWNrIHRvIEFXUycsXG4gICAgICAgICAgJ3lhcm4gY2RrOmRldiAtLWNvbnRleHQgbG9jYWwtZGV2LXByZWZpeD15b3VyLWhhbmRsZSBkZXBsb3knLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIFJ1biB0ZXN0cycsXG4gICAgICAgICAgJ3lhcm4gdGVzdCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMgUmUtc3ludGhlc2l6ZSBwcm9qZWN0IGZpbGVzIGFmdGVyIGVkaXRpbmcgLnByb2plbnJjLnRzJyxcbiAgICAgICAgICAnbnB4IHByb2plbicsXG4gICAgICAgICAgJ2BgYCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJy0tLScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIFVwZ3JhZGluZyBCYXRtYW4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdgYGBiYXNoJyxcbiAgICAgICAgICAneWFybiBhZGQgQG1hY2Vkb24tdGVjaG5vbG9naWVzL2JhdG1hbkBsYXRlc3QnLFxuICAgICAgICAgICducHggcHJvamVuJyxcbiAgICAgICAgICAnYGBgJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnVGhpcyB1cGRhdGVzIGFsbCBtYW5hZ2VkIGZpbGVzIHRvIHRoZSBsYXRlc3QgQmF0bWFuIHN0YW5kYXJkcy4gWW91ciBlZGl0YWJsZSBzYW1wbGUgZmlsZXMgYXJlIG5ldmVyIHRvdWNoZWQuJyxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cblxuICAgIC8vIENyZWF0ZSBzdGFuZGFyZCBwcm9qZWN0IGZpbGVzXG4gICAgY29uc3QgUFJJTUFSWV9BQ0NPVU5UID0gJzAxNTk1NTgxNzI2Myc7XG4gICAgY29uc3QgUFJJTUFSWV9SRUdJT04gPSAndXMtZWFzdC0xJztcblxuICAgIG5ldyBBcHBsaWNhdGlvbih0aGlzLCB7XG4gICAgICBnaXRodWJSZXBvc2l0b3J5OiBgbWFjZWRvbi10ZWNobm9sb2dpZXMvJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgIGNsZXJrUHVibGlzaGFibGVLZXk6ICdwa190ZXN0X2FXNTBaVzV6WlMxc1pXVmphQzB5TWk1amJHVnlheTVoWTJOdmRXNTBjeTVrWlhZaycsXG4gICAgICBkZXY6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5kZXYsXG4gICAgICB9LFxuICAgICAgc3RhZ2luZzoge1xuICAgICAgICAuLi5vcHRpb25zLnN0YWdpbmcsXG4gICAgICB9LFxuICAgICAgcHJvZDoge1xuICAgICAgICAuLi5vcHRpb25zLmRldixcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsVGFnczogb3B0aW9ucy5hZGRpdGlvbmFsVGFncyxcbiAgICB9KTtcblxuICAgIG5ldyBHaXRIdWJSb2xlc0ZpbGUodGhpcywge1xuICAgICAgYWNjb3VudDogUFJJTUFSWV9BQ0NPVU5ULFxuICAgICAgcHJpbWFyeVJlZ2lvbjogUFJJTUFSWV9SRUdJT04sXG4gICAgfSk7XG5cbiAgICBuZXcgQ29kZU93bmVyc0ZpbGUodGhpcywge1xuICAgICAgYWRkaXRpb25hbE93bmVyczogb3B0aW9ucy5hZGRpdGlvbmFsQ29kZU93bmVycyxcbiAgICB9KTtcblxuICAgIG5ldyBEYXRhRG9nQXNwZWN0RmlsZSh0aGlzKTtcblxuICAgIGNvbnN0IHZpdGVSZWFjdCA9IG5ldyBWaXRlUmVhY3RQcm9qZWN0KHtcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnbWFpbicsXG4gICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICBvdXRkaXI6ICd3ZWInLFxuICAgICAgZGVwczogb3B0aW9ucy53ZWJzaXRlRGVwcyxcbiAgICB9KTtcbiAgICB2aXRlUmVhY3QuYWRkQ29uZmlnRmllbGQoJ3NvbWV0aGluZycsICdudW1iZXInKTtcbiAgICB2aXRlUmVhY3QuYWRkQ29uZmlnRmllbGQoJ3NvbWV0aGluZ0Vsc2UnLCAnc3RyaW5nJyk7XG5cbiAgICBjb25zdCBjb25jdXJyZW50bHkgPSAoLi4uYXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIHJldHVybiBgY29uY3VycmVudGx5ICR7YXJncy5tYXAoYSA9PiBgXCIke2F9XCJgKS5qb2luKCcgJyl9YDtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGRUYXNrKCdkZXYnLCB7XG4gICAgICBleGVjOiBjb25jdXJyZW50bHkoXG4gICAgICAgICdub2RlbW9uIC0td2F0Y2ggLi9zcmMvY29uc3RydWN0cy9oYW5kbGVyIC0td2F0Y2ggLi9sb2NhbC9kZXYudHMgLi9sb2NhbC9kZXYudHMnLFxuICAgICAgICB2aXRlUmVhY3QuZGV2Q29tbWFuZCxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFRhc2soJ2NkazpkZXYnLCB7XG4gICAgICBleGVjOiAneWFybiBjZGsgLWEgXCJucHggdHMtbm9kZSAtUCB0c2NvbmZpZy5qc29uIC0tcHJlZmVyLXRzLWV4dHMgc3JjL0xvY2FsRGV2QXBwLnRzXCInLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cblxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AwsCdkTypeScriptApp } from 'projen/lib/awscdk';
|
|
2
|
+
import { EnvironmentConfig } from './MainFile';
|
|
3
|
+
export interface ApplicationEnvironmentConfig extends EnvironmentConfig {
|
|
4
|
+
readonly githubActionRoleArn: `arn:aws:iam::${string}:role/${string}`;
|
|
5
|
+
}
|
|
6
|
+
export interface ApplicationOptions {
|
|
7
|
+
readonly githubRepository: string;
|
|
8
|
+
readonly dev: ApplicationEnvironmentConfig;
|
|
9
|
+
readonly staging: ApplicationEnvironmentConfig;
|
|
10
|
+
readonly prod: ApplicationEnvironmentConfig;
|
|
11
|
+
readonly clerkPublishableKey: string;
|
|
12
|
+
readonly additionalTags?: {
|
|
13
|
+
[key: string]: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Application construct that creates all standard project files
|
|
18
|
+
*/
|
|
19
|
+
export declare class BootcampApplication {
|
|
20
|
+
constructor(project: AwsCdkTypeScriptApp, options: ApplicationOptions);
|
|
21
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BootcampApplication = void 0;
|
|
4
|
+
const ApiConstructFile_1 = require("./ApiConstructFile");
|
|
5
|
+
const ApiFunctionFile_1 = require("./ApiFunctionFile");
|
|
6
|
+
const BaseApplicationStackFile_1 = require("./BaseApplicationStackFile");
|
|
7
|
+
const BootcampApplicationStackFile_1 = require("./BootcampApplicationStackFile");
|
|
8
|
+
const CodeRabbitFile_1 = require("./CodeRabbitFile");
|
|
9
|
+
const GitHubRolesStackFile_1 = require("./GitHubRolesStackFile");
|
|
10
|
+
const LocalDevAppFile_1 = require("./LocalDevAppFile");
|
|
11
|
+
const MainFile_1 = require("./MainFile");
|
|
12
|
+
const MainTestFile_1 = require("./MainTestFile");
|
|
13
|
+
const PrCleanupWorkflow_1 = require("./PrCleanupWorkflow");
|
|
14
|
+
const PrDeployWorkflow_1 = require("./PrDeployWorkflow");
|
|
15
|
+
const ProductionDeployWorkflow_1 = require("./ProductionDeployWorkflow");
|
|
16
|
+
const StagingDeployWorkflow_1 = require("./StagingDeployWorkflow");
|
|
17
|
+
const StaticWebsiteConstructFile_1 = require("./StaticWebsiteConstructFile");
|
|
18
|
+
/**
|
|
19
|
+
* Application construct that creates all standard project files
|
|
20
|
+
*/
|
|
21
|
+
class BootcampApplication {
|
|
22
|
+
constructor(project, options) {
|
|
23
|
+
// Create main entry point files
|
|
24
|
+
new MainFile_1.MainFile(project, {
|
|
25
|
+
projectName: project.name,
|
|
26
|
+
dev: options.dev,
|
|
27
|
+
staging: options.staging,
|
|
28
|
+
prod: options.prod,
|
|
29
|
+
additionalTags: options.additionalTags,
|
|
30
|
+
});
|
|
31
|
+
new LocalDevAppFile_1.LocalDevAppFile(project, {
|
|
32
|
+
projectName: project.name,
|
|
33
|
+
dev: options.dev,
|
|
34
|
+
});
|
|
35
|
+
// Create stack files
|
|
36
|
+
new GitHubRolesStackFile_1.GitHubRolesStackFile(project, {
|
|
37
|
+
githubRepository: options.githubRepository,
|
|
38
|
+
});
|
|
39
|
+
new BaseApplicationStackFile_1.BaseApplicationStackFile(project);
|
|
40
|
+
new BootcampApplicationStackFile_1.BootcampApplicationStackFile(project);
|
|
41
|
+
// Create construct files
|
|
42
|
+
new ApiConstructFile_1.ApiConstructFile(project);
|
|
43
|
+
new StaticWebsiteConstructFile_1.StaticWebsiteConstructFile(project);
|
|
44
|
+
// Create handler files
|
|
45
|
+
new ApiFunctionFile_1.ApiFunctionFile(project);
|
|
46
|
+
// Create test files
|
|
47
|
+
new MainTestFile_1.MainTestFile(project);
|
|
48
|
+
// Create config files
|
|
49
|
+
new CodeRabbitFile_1.CodeRabbitFile(project);
|
|
50
|
+
// Create GitHub Actions workflows
|
|
51
|
+
new PrDeployWorkflow_1.PrDeployWorkflow(project, {
|
|
52
|
+
roleArn: options.dev.githubActionRoleArn,
|
|
53
|
+
awsRegion: options.dev.region,
|
|
54
|
+
clerkPublishableKey: options.clerkPublishableKey,
|
|
55
|
+
});
|
|
56
|
+
new PrCleanupWorkflow_1.PrCleanupWorkflow(project, {
|
|
57
|
+
roleArn: options.dev.githubActionRoleArn,
|
|
58
|
+
awsRegion: options.dev.region,
|
|
59
|
+
});
|
|
60
|
+
new StagingDeployWorkflow_1.StagingDeployWorkflow(project, {
|
|
61
|
+
roleArn: options.staging.githubActionRoleArn,
|
|
62
|
+
awsRegion: options.staging.region,
|
|
63
|
+
projectName: project.name,
|
|
64
|
+
clerkPublishableKey: options.staging.clerkPublishableKey,
|
|
65
|
+
});
|
|
66
|
+
new ProductionDeployWorkflow_1.ProductionDeployWorkflow(project, {
|
|
67
|
+
roleArn: options.prod.githubActionRoleArn,
|
|
68
|
+
awsRegion: options.prod.region,
|
|
69
|
+
projectName: project.name,
|
|
70
|
+
clerkPublishableKey: options.prod.clerkPublishableKey,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.BootcampApplication = BootcampApplication;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBBcHBsaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb290Y2FtcEFwcGxpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlEQUFzRDtBQUN0RCx1REFBb0Q7QUFDcEQseUVBQXNFO0FBQ3RFLGlGQUE4RTtBQUM5RSxxREFBa0Q7QUFDbEQsaUVBQThEO0FBQzlELHVEQUFvRDtBQUNwRCx5Q0FBeUQ7QUFDekQsaURBQThDO0FBQzlDLDJEQUF3RDtBQUN4RCx5REFBc0Q7QUFDdEQseUVBQXNFO0FBQ3RFLG1FQUFnRTtBQUNoRSw2RUFBMEU7QUFlMUU7O0dBRUc7QUFDSCxNQUFhLG1CQUFtQjtJQUM5QixZQUFZLE9BQTRCLEVBQUUsT0FBMkI7UUFDbkUsZ0NBQWdDO1FBRWhDLElBQUksbUJBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDcEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3pCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztTQUN2QyxDQUFDLENBQUM7UUFFSCxJQUFJLGlDQUFlLENBQUMsT0FBTyxFQUFFO1lBQzNCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtZQUN6QixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7U0FDakIsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLElBQUksMkNBQW9CLENBQUMsT0FBTyxFQUFFO1lBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxtREFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLDJEQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLHlCQUF5QjtRQUN6QixJQUFJLG1DQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksdURBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEMsdUJBQXVCO1FBQ3ZCLElBQUksaUNBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QixvQkFBb0I7UUFDcEIsSUFBSSwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFCLHNCQUFzQjtRQUN0QixJQUFJLCtCQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUIsa0NBQWtDO1FBQ2xDLElBQUksbUNBQWdCLENBQUMsT0FBTyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtZQUN4QyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQzdCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7U0FDakQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxxQ0FBaUIsQ0FBQyxPQUFPLEVBQUU7WUFDN0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1lBQ3hDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSw2Q0FBcUIsQ0FBQyxPQUFPLEVBQUU7WUFDakMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1lBQzVDLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDakMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3pCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1NBQ3pELENBQUMsQ0FBQztRQUVILElBQUksbURBQXdCLENBQUMsT0FBTyxFQUFFO1lBQ3BDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtZQUN6QyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQzlCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtZQUN6QixtQkFBbUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtTQUN0RCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFoRUQsa0RBZ0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IEFwaUNvbnN0cnVjdEZpbGUgfSBmcm9tICcuL0FwaUNvbnN0cnVjdEZpbGUnO1xuaW1wb3J0IHsgQXBpRnVuY3Rpb25GaWxlIH0gZnJvbSAnLi9BcGlGdW5jdGlvbkZpbGUnO1xuaW1wb3J0IHsgQmFzZUFwcGxpY2F0aW9uU3RhY2tGaWxlIH0gZnJvbSAnLi9CYXNlQXBwbGljYXRpb25TdGFja0ZpbGUnO1xuaW1wb3J0IHsgQm9vdGNhbXBBcHBsaWNhdGlvblN0YWNrRmlsZSB9IGZyb20gJy4vQm9vdGNhbXBBcHBsaWNhdGlvblN0YWNrRmlsZSc7XG5pbXBvcnQgeyBDb2RlUmFiYml0RmlsZSB9IGZyb20gJy4vQ29kZVJhYmJpdEZpbGUnO1xuaW1wb3J0IHsgR2l0SHViUm9sZXNTdGFja0ZpbGUgfSBmcm9tICcuL0dpdEh1YlJvbGVzU3RhY2tGaWxlJztcbmltcG9ydCB7IExvY2FsRGV2QXBwRmlsZSB9IGZyb20gJy4vTG9jYWxEZXZBcHBGaWxlJztcbmltcG9ydCB7IEVudmlyb25tZW50Q29uZmlnLCBNYWluRmlsZSB9IGZyb20gJy4vTWFpbkZpbGUnO1xuaW1wb3J0IHsgTWFpblRlc3RGaWxlIH0gZnJvbSAnLi9NYWluVGVzdEZpbGUnO1xuaW1wb3J0IHsgUHJDbGVhbnVwV29ya2Zsb3cgfSBmcm9tICcuL1ByQ2xlYW51cFdvcmtmbG93JztcbmltcG9ydCB7IFByRGVwbG95V29ya2Zsb3cgfSBmcm9tICcuL1ByRGVwbG95V29ya2Zsb3cnO1xuaW1wb3J0IHsgUHJvZHVjdGlvbkRlcGxveVdvcmtmbG93IH0gZnJvbSAnLi9Qcm9kdWN0aW9uRGVwbG95V29ya2Zsb3cnO1xuaW1wb3J0IHsgU3RhZ2luZ0RlcGxveVdvcmtmbG93IH0gZnJvbSAnLi9TdGFnaW5nRGVwbG95V29ya2Zsb3cnO1xuaW1wb3J0IHsgU3RhdGljV2Vic2l0ZUNvbnN0cnVjdEZpbGUgfSBmcm9tICcuL1N0YXRpY1dlYnNpdGVDb25zdHJ1Y3RGaWxlJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkVudmlyb25tZW50Q29uZmlnIGV4dGVuZHMgRW52aXJvbm1lbnRDb25maWcge1xuICByZWFkb25seSBnaXRodWJBY3Rpb25Sb2xlQXJuOiBgYXJuOmF3czppYW06OiR7c3RyaW5nfTpyb2xlLyR7c3RyaW5nfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgZ2l0aHViUmVwb3NpdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBkZXY6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG4gIHJlYWRvbmx5IHN0YWdpbmc6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG4gIHJlYWRvbmx5IHByb2Q6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG4gIHJlYWRvbmx5IGNsZXJrUHVibGlzaGFibGVLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEFwcGxpY2F0aW9uIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYWxsIHN0YW5kYXJkIHByb2plY3QgZmlsZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEJvb3RjYW1wQXBwbGljYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwLCBvcHRpb25zOiBBcHBsaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAvLyBDcmVhdGUgbWFpbiBlbnRyeSBwb2ludCBmaWxlc1xuXG4gICAgbmV3IE1haW5GaWxlKHByb2plY3QsIHtcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBkZXY6IG9wdGlvbnMuZGV2LFxuICAgICAgc3RhZ2luZzogb3B0aW9ucy5zdGFnaW5nLFxuICAgICAgcHJvZDogb3B0aW9ucy5wcm9kLFxuICAgICAgYWRkaXRpb25hbFRhZ3M6IG9wdGlvbnMuYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG5cbiAgICBuZXcgTG9jYWxEZXZBcHBGaWxlKHByb2plY3QsIHtcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBkZXY6IG9wdGlvbnMuZGV2LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHN0YWNrIGZpbGVzXG4gICAgbmV3IEdpdEh1YlJvbGVzU3RhY2tGaWxlKHByb2plY3QsIHtcbiAgICAgIGdpdGh1YlJlcG9zaXRvcnk6IG9wdGlvbnMuZ2l0aHViUmVwb3NpdG9yeSxcbiAgICB9KTtcblxuICAgIG5ldyBCYXNlQXBwbGljYXRpb25TdGFja0ZpbGUocHJvamVjdCk7XG4gICAgbmV3IEJvb3RjYW1wQXBwbGljYXRpb25TdGFja0ZpbGUocHJvamVjdCk7XG5cbiAgICAvLyBDcmVhdGUgY29uc3RydWN0IGZpbGVzXG4gICAgbmV3IEFwaUNvbnN0cnVjdEZpbGUocHJvamVjdCk7XG4gICAgbmV3IFN0YXRpY1dlYnNpdGVDb25zdHJ1Y3RGaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIGhhbmRsZXIgZmlsZXNcbiAgICBuZXcgQXBpRnVuY3Rpb25GaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIHRlc3QgZmlsZXNcbiAgICBuZXcgTWFpblRlc3RGaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQ3JlYXRlIGNvbmZpZyBmaWxlc1xuICAgIG5ldyBDb2RlUmFiYml0RmlsZShwcm9qZWN0KTtcblxuICAgIC8vIENyZWF0ZSBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd3NcbiAgICBuZXcgUHJEZXBsb3lXb3JrZmxvdyhwcm9qZWN0LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLmRldi5naXRodWJBY3Rpb25Sb2xlQXJuLFxuICAgICAgYXdzUmVnaW9uOiBvcHRpb25zLmRldi5yZWdpb24sXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiBvcHRpb25zLmNsZXJrUHVibGlzaGFibGVLZXksXG4gICAgfSk7XG5cbiAgICBuZXcgUHJDbGVhbnVwV29ya2Zsb3cocHJvamVjdCwge1xuICAgICAgcm9sZUFybjogb3B0aW9ucy5kZXYuZ2l0aHViQWN0aW9uUm9sZUFybixcbiAgICAgIGF3c1JlZ2lvbjogb3B0aW9ucy5kZXYucmVnaW9uLFxuICAgIH0pO1xuXG4gICAgbmV3IFN0YWdpbmdEZXBsb3lXb3JrZmxvdyhwcm9qZWN0LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLnN0YWdpbmcuZ2l0aHViQWN0aW9uUm9sZUFybixcbiAgICAgIGF3c1JlZ2lvbjogb3B0aW9ucy5zdGFnaW5nLnJlZ2lvbixcbiAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiBvcHRpb25zLnN0YWdpbmcuY2xlcmtQdWJsaXNoYWJsZUtleSxcbiAgICB9KTtcblxuICAgIG5ldyBQcm9kdWN0aW9uRGVwbG95V29ya2Zsb3cocHJvamVjdCwge1xuICAgICAgcm9sZUFybjogb3B0aW9ucy5wcm9kLmdpdGh1YkFjdGlvblJvbGVBcm4sXG4gICAgICBhd3NSZWdpb246IG9wdGlvbnMucHJvZC5yZWdpb24sXG4gICAgICBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lLFxuICAgICAgY2xlcmtQdWJsaXNoYWJsZUtleTogb3B0aW9ucy5wcm9kLmNsZXJrUHVibGlzaGFibGVLZXksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BootcampApplicationStackFile = void 0;
|
|
4
|
+
const projen_1 = require("projen");
|
|
5
|
+
class BootcampApplicationStackFile extends projen_1.SampleFile {
|
|
6
|
+
constructor(project) {
|
|
7
|
+
super(project, 'src/stacks/ApplicationStack.ts', {
|
|
8
|
+
contents: `import { Arn, ArnFormat, Fn, Stack } from 'aws-cdk-lib';
|
|
9
|
+
import { SecurityGroup, SubnetType, Vpc } from 'aws-cdk-lib/aws-ec2';
|
|
10
|
+
import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam';
|
|
11
|
+
import { DatabaseInstance } from 'aws-cdk-lib/aws-rds';
|
|
12
|
+
import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
|
|
13
|
+
import { Database, Provider, Role } from 'cdk-rds-sql';
|
|
14
|
+
import { Construct } from 'constructs';
|
|
15
|
+
import { BaseApplicationStack, BaseApplicationStackProps } from './BaseApplicationStack';
|
|
16
|
+
|
|
17
|
+
export interface ApplicationStackProps extends BaseApplicationStackProps {
|
|
18
|
+
readonly database: {
|
|
19
|
+
proxyEndpoint: string;
|
|
20
|
+
rootSecretArn: \`arn:aws:secretsmanager:\${string}:\${string}:secret:\${string}-\${string}-\${string}\`;
|
|
21
|
+
instanceIdentifier: string;
|
|
22
|
+
port: number;
|
|
23
|
+
databaseEndpointAddress: string;
|
|
24
|
+
securityGroup: \`sg-\${string}\`;
|
|
25
|
+
};
|
|
26
|
+
readonly vpcId: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class ApplicationStack extends BaseApplicationStack<ApplicationStackProps> {
|
|
30
|
+
constructor(scope: Construct, id: string, props: ApplicationStackProps) {
|
|
31
|
+
super(scope, id, props);
|
|
32
|
+
// extend the stack by adding constructs here
|
|
33
|
+
this.createDatabase();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected createVpc() {
|
|
37
|
+
this.vpc = Vpc.fromLookup(this, 'Vpc', {
|
|
38
|
+
vpcId: this.props.vpcId,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
protected createDatabase() {
|
|
42
|
+
|
|
43
|
+
const databaseSecurityGroup = SecurityGroup.fromSecurityGroupId(this, 'DatabaseSecurityGroup', this.props.database.securityGroup);
|
|
44
|
+
|
|
45
|
+
const database = DatabaseInstance.fromDatabaseInstanceAttributes(this, 'Database', {
|
|
46
|
+
instanceEndpointAddress: this.props.database.databaseEndpointAddress,
|
|
47
|
+
port: this.props.database.port,
|
|
48
|
+
securityGroups: [databaseSecurityGroup],
|
|
49
|
+
instanceIdentifier: this.props.database.instanceIdentifier,
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const secret = Secret.fromSecretCompleteArn(this, 'DatabaseRootSecret', this.props.database.rootSecretArn);
|
|
54
|
+
|
|
55
|
+
const provider = new Provider(this, 'Provider', {
|
|
56
|
+
vpc: this.vpc,
|
|
57
|
+
cluster: database,
|
|
58
|
+
secret: secret,
|
|
59
|
+
vpcSubnets: {
|
|
60
|
+
subnetType: SubnetType.PRIVATE_WITH_EGRESS,
|
|
61
|
+
},
|
|
62
|
+
logger: true,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const sqlDatabase = new Database(this, '${project.name}-db', {
|
|
66
|
+
databaseName: '${project.name}',
|
|
67
|
+
provider: provider,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const role = new Role(this, 'Role', {
|
|
71
|
+
provider: provider,
|
|
72
|
+
roleName: '${project.name}',
|
|
73
|
+
databaseName: '${project.name}',
|
|
74
|
+
enableIamAuth: true,
|
|
75
|
+
});
|
|
76
|
+
role.node.addDependency(sqlDatabase);
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
// Add environment variables pointing to the proxy endpoint
|
|
80
|
+
this.api.lambdaFunction.addEnvironment('DB_ENDPOINT', this.props.database.proxyEndpoint);
|
|
81
|
+
this.api.lambdaFunction.addEnvironment('DB_USER', '${project.name}');
|
|
82
|
+
this.api.lambdaFunction.addEnvironment('DB_PORT', this.props.database.port.toString());
|
|
83
|
+
|
|
84
|
+
// Grant Lambda IAM auth to connect through the proxy
|
|
85
|
+
this.api.lambdaFunction.addToRolePolicy(new PolicyStatement({
|
|
86
|
+
actions: ['rds-db:connect'],
|
|
87
|
+
resources: [Arn.format({
|
|
88
|
+
account: Stack.of(this).account,
|
|
89
|
+
region: Stack.of(this).region,
|
|
90
|
+
service: 'rds-db',
|
|
91
|
+
resource: 'dbuser',
|
|
92
|
+
partition: 'aws',
|
|
93
|
+
arnFormat: ArnFormat.COLON_RESOURCE_NAME,
|
|
94
|
+
resourceName: \`\${Fn.importValue('BootcampDbProxyId')}/${project.name}\`,
|
|
95
|
+
})],
|
|
96
|
+
effect: Effect.ALLOW,
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.BootcampApplicationStackFile = BootcampApplicationStackFile;
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBBcHBsaWNhdGlvblN0YWNrRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb290Y2FtcEFwcGxpY2F0aW9uU3RhY2tGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUdwQyxNQUFhLDRCQUE2QixTQUFRLG1CQUFVO0lBQzFELFlBQVksT0FBNEI7UUFDdEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRTtZQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0F5RDhCLE9BQU8sQ0FBQyxJQUFJO3VCQUNuQyxPQUFPLENBQUMsSUFBSTs7Ozs7O21CQU1oQixPQUFPLENBQUMsSUFBSTt1QkFDUixPQUFPLENBQUMsSUFBSTs7Ozs7Ozs7eURBUXNCLE9BQU8sQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7O2tFQWFILE9BQU8sQ0FBQyxJQUFJOzs7Ozs7Q0FNN0U7U0FDSSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFsR0Qsb0VBa0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSAncHJvamVuL2xpYi9hd3NjZGsnO1xuXG5leHBvcnQgY2xhc3MgQm9vdGNhbXBBcHBsaWNhdGlvblN0YWNrRmlsZSBleHRlbmRzIFNhbXBsZUZpbGUge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwKSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ3NyYy9zdGFja3MvQXBwbGljYXRpb25TdGFjay50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgaW1wb3J0IHsgQXJuLCBBcm5Gb3JtYXQsIEZuLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAsIFN1Ym5ldFR5cGUsIFZwYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IERhdGFiYXNlSW5zdGFuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtcmRzJztcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBEYXRhYmFzZSwgUHJvdmlkZXIsIFJvbGUgfSBmcm9tICdjZGstcmRzLXNxbCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VBcHBsaWNhdGlvblN0YWNrLCBCYXNlQXBwbGljYXRpb25TdGFja1Byb3BzIH0gZnJvbSAnLi9CYXNlQXBwbGljYXRpb25TdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25TdGFja1Byb3BzIGV4dGVuZHMgQmFzZUFwcGxpY2F0aW9uU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IGRhdGFiYXNlOiB7XG4gICAgcHJveHlFbmRwb2ludDogc3RyaW5nO1xuICAgIHJvb3RTZWNyZXRBcm46IFxcYGFybjphd3M6c2VjcmV0c21hbmFnZXI6XFwke3N0cmluZ306XFwke3N0cmluZ306c2VjcmV0OlxcJHtzdHJpbmd9LVxcJHtzdHJpbmd9LVxcJHtzdHJpbmd9XFxgO1xuICAgIGluc3RhbmNlSWRlbnRpZmllcjogc3RyaW5nO1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBkYXRhYmFzZUVuZHBvaW50QWRkcmVzczogc3RyaW5nO1xuICAgIHNlY3VyaXR5R3JvdXA6IFxcYHNnLVxcJHtzdHJpbmd9XFxgO1xuICB9O1xuICByZWFkb25seSB2cGNJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25TdGFjayBleHRlbmRzIEJhc2VBcHBsaWNhdGlvblN0YWNrPEFwcGxpY2F0aW9uU3RhY2tQcm9wcz4ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXBwbGljYXRpb25TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgLy8gZXh0ZW5kIHRoZSBzdGFjayBieSBhZGRpbmcgY29uc3RydWN0cyBoZXJlXG4gICAgdGhpcy5jcmVhdGVEYXRhYmFzZSgpO1xuICB9XG4gIFxuICBwcm90ZWN0ZWQgY3JlYXRlVnBjKCkge1xuICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAodGhpcywgJ1ZwYycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnByb3BzLnZwY0lkLFxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVEYXRhYmFzZSgpIHtcblxuICAgIGNvbnN0IGRhdGFiYXNlU2VjdXJpdHlHcm91cCA9IFNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZCh0aGlzLCAnRGF0YWJhc2VTZWN1cml0eUdyb3VwJywgdGhpcy5wcm9wcy5kYXRhYmFzZS5zZWN1cml0eUdyb3VwKTtcblxuICAgIGNvbnN0IGRhdGFiYXNlID0gRGF0YWJhc2VJbnN0YW5jZS5mcm9tRGF0YWJhc2VJbnN0YW5jZUF0dHJpYnV0ZXModGhpcywgJ0RhdGFiYXNlJywge1xuICAgICAgaW5zdGFuY2VFbmRwb2ludEFkZHJlc3M6IHRoaXMucHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VFbmRwb2ludEFkZHJlc3MsXG4gICAgICBwb3J0OiB0aGlzLnByb3BzLmRhdGFiYXNlLnBvcnQsXG4gICAgICBzZWN1cml0eUdyb3VwczogW2RhdGFiYXNlU2VjdXJpdHlHcm91cF0sXG4gICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IHRoaXMucHJvcHMuZGF0YWJhc2UuaW5zdGFuY2VJZGVudGlmaWVyLFxuXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldENvbXBsZXRlQXJuKHRoaXMsICdEYXRhYmFzZVJvb3RTZWNyZXQnLCB0aGlzLnByb3BzLmRhdGFiYXNlLnJvb3RTZWNyZXRBcm4pO1xuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgJ1Byb3ZpZGVyJywge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGNsdXN0ZXI6IGRhdGFiYXNlLFxuICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgIH0sXG4gICAgICBsb2dnZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzcWxEYXRhYmFzZSA9IG5ldyBEYXRhYmFzZSh0aGlzLCAnJHtwcm9qZWN0Lm5hbWV9LWRiJywge1xuICAgICAgZGF0YWJhc2VOYW1lOiAnJHtwcm9qZWN0Lm5hbWV9JyxcbiAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnUm9sZScsIHtcbiAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgIHJvbGVOYW1lOiAnJHtwcm9qZWN0Lm5hbWV9JyxcbiAgICAgIGRhdGFiYXNlTmFtZTogJyR7cHJvamVjdC5uYW1lfScsXG4gICAgICBlbmFibGVJYW1BdXRoOiB0cnVlLFxuICAgIH0pO1xuICAgIHJvbGUubm9kZS5hZGREZXBlbmRlbmN5KHNxbERhdGFiYXNlKTtcblxuXG4gICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlcyBwb2ludGluZyB0byB0aGUgcHJveHkgZW5kcG9pbnRcbiAgICB0aGlzLmFwaS5sYW1iZGFGdW5jdGlvbi5hZGRFbnZpcm9ubWVudCgnREJfRU5EUE9JTlQnLCB0aGlzLnByb3BzLmRhdGFiYXNlLnByb3h5RW5kcG9pbnQpO1xuICAgIHRoaXMuYXBpLmxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdEQl9VU0VSJywgJyR7cHJvamVjdC5uYW1lfScpO1xuICAgIHRoaXMuYXBpLmxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdEQl9QT1JUJywgdGhpcy5wcm9wcy5kYXRhYmFzZS5wb3J0LnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gR3JhbnQgTGFtYmRhIElBTSBhdXRoIHRvIGNvbm5lY3QgdGhyb3VnaCB0aGUgcHJveHlcbiAgICB0aGlzLmFwaS5sYW1iZGFGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ3Jkcy1kYjpjb25uZWN0J10sXG4gICAgICByZXNvdXJjZXM6IFtBcm4uZm9ybWF0KHtcbiAgICAgICAgYWNjb3VudDogU3RhY2sub2YodGhpcykuYWNjb3VudCxcbiAgICAgICAgcmVnaW9uOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICAgIHNlcnZpY2U6ICdyZHMtZGInLFxuICAgICAgICByZXNvdXJjZTogJ2RidXNlcicsXG4gICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogXFxgXFwke0ZuLmltcG9ydFZhbHVlKCdCb290Y2FtcERiUHJveHlJZCcpfS8ke3Byb2plY3QubmFtZX1cXGAsXG4gICAgICB9KV0sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICB9KSk7XG4gIH1cbn1cbmAsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
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[];
|
|
26
|
+
}
|
|
27
|
+
export declare class BootcampProject extends AwsCdkTypeScriptApp {
|
|
28
|
+
constructor(options: BootcampProjectOptions);
|
|
29
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BootcampProject = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const awscdk_1 = require("projen/lib/awscdk");
|
|
7
|
+
const github_1 = require("projen/lib/github");
|
|
8
|
+
const BootcampApplication_1 = require("./BootcampApplication");
|
|
9
|
+
const CodeOwnersFile_1 = require("./CodeOwnersFile");
|
|
10
|
+
const DataDogAspectFile_1 = require("./DataDogAspectFile");
|
|
11
|
+
const GitHubRolesFile_1 = require("./GitHubRolesFile");
|
|
12
|
+
const ViteReactProject_1 = require("./ViteReactProject");
|
|
13
|
+
class BootcampProject extends awscdk_1.AwsCdkTypeScriptApp {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super({
|
|
16
|
+
...options,
|
|
17
|
+
cdkVersion: options.cdkVersion || '2.224.0',
|
|
18
|
+
defaultReleaseBranch: options.defaultReleaseBranch || 'main',
|
|
19
|
+
name: options.name,
|
|
20
|
+
projenrcTs: true,
|
|
21
|
+
buildWorkflow: false,
|
|
22
|
+
deps: [
|
|
23
|
+
'@types/aws-lambda',
|
|
24
|
+
'@types/express',
|
|
25
|
+
'@types/pg',
|
|
26
|
+
'pg',
|
|
27
|
+
'@aws-sdk/rds-signer',
|
|
28
|
+
'@matthewbonig/secret',
|
|
29
|
+
'datadog-cdk-constructs-v2',
|
|
30
|
+
'@cdklabs/aws-lambda-rust',
|
|
31
|
+
'@aws-lambda-powertools/parameters',
|
|
32
|
+
'jsonwebtoken',
|
|
33
|
+
'@aws-sdk/client-secrets-manager',
|
|
34
|
+
'express',
|
|
35
|
+
'serverless-http',
|
|
36
|
+
'cdk-rds-sql',
|
|
37
|
+
...options.deps || [],
|
|
38
|
+
],
|
|
39
|
+
devDeps: [
|
|
40
|
+
'@types/jsonwebtoken',
|
|
41
|
+
'nodemon',
|
|
42
|
+
'concurrently',
|
|
43
|
+
'@macedon-technologies/batman@^1.0.0',
|
|
44
|
+
...options.devDeps || [],
|
|
45
|
+
],
|
|
46
|
+
gitignore: [
|
|
47
|
+
'src/constructs/handler/clerk-authorizer/target/**',
|
|
48
|
+
'**/.DS_Store',
|
|
49
|
+
...options.gitignore || [],
|
|
50
|
+
],
|
|
51
|
+
tsconfig: {
|
|
52
|
+
...options.tsconfig,
|
|
53
|
+
compilerOptions: {
|
|
54
|
+
...options.tsconfig?.compilerOptions,
|
|
55
|
+
isolatedModules: true,
|
|
56
|
+
allowImportingTsExtensions: true,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
sampleCode: false,
|
|
60
|
+
minNodeVersion: options.minNodeVersion || '22',
|
|
61
|
+
depsUpgradeOptions: {
|
|
62
|
+
workflowOptions: {
|
|
63
|
+
projenCredentials: github_1.GithubCredentials.fromPersonalAccessToken({
|
|
64
|
+
secret: 'GITHUB_TOKEN',
|
|
65
|
+
}),
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
readme: {
|
|
69
|
+
contents: [
|
|
70
|
+
`# ${options.name}`,
|
|
71
|
+
'',
|
|
72
|
+
'This project was bootstrapped with [Batman](https://github.com/macedon-technologies/platform-common).',
|
|
73
|
+
'',
|
|
74
|
+
'## What Batman Created',
|
|
75
|
+
'',
|
|
76
|
+
'### CDK Infrastructure (`src/`)',
|
|
77
|
+
'',
|
|
78
|
+
'| File | Description |',
|
|
79
|
+
'|------|-------------|',
|
|
80
|
+
'| `src/main.ts` | CDK app entry point — instantiates dev, staging, and prod `ApplicationStack`s |',
|
|
81
|
+
'| `src/LocalDevApp.ts` | Local development CDK app — used by `yarn cdk:dev` |',
|
|
82
|
+
'| `src/GitHubRoles.ts` | CDK app for deploying the GitHub OIDC IAM role (one-time bootstrap) |',
|
|
83
|
+
'| `src/stacks/ApplicationStack.ts` | Your primary stack — extend it to add resources |',
|
|
84
|
+
'| `src/stacks/BaseApplicationStack.ts` | Base stack with VPC, API, static website, Datadog, and Route 53 wired up |',
|
|
85
|
+
'| `src/stacks/GitHubRolesStack.ts` | IAM role stack for GitHub Actions OIDC authentication |',
|
|
86
|
+
'| `src/constructs/Api.ts` | API Gateway + Lambda construct with Clerk JWT authorizer |',
|
|
87
|
+
'| `src/constructs/StaticWebsite.ts` | CloudFront + S3 + ACM + Route 53 construct |',
|
|
88
|
+
'| `src/constructs/handler/Api.Function.ts` | Lambda handler entry point |',
|
|
89
|
+
'| `src/aspects/DataDogAspect.ts` | CDK aspect that wires all Lambda functions to Datadog |',
|
|
90
|
+
'',
|
|
91
|
+
'### Frontend (`web/`)',
|
|
92
|
+
'',
|
|
93
|
+
'| File | Description |',
|
|
94
|
+
'|------|-------------|',
|
|
95
|
+
'| `web/src/main.tsx` | React app entry point with Clerk and React Query providers |',
|
|
96
|
+
'| `web/src/App.tsx` | Root application component |',
|
|
97
|
+
'| `web/src/App.css` / `web/src/index.css` | Base stylesheets (Tailwind CSS v4) |',
|
|
98
|
+
'| `web/src/config.ts` | `useConfig()` hook — loads runtime config from `config.json` |',
|
|
99
|
+
'| `web/src/services/BaseService.ts` | `useBaseQuery()` — authenticated API fetch hook |',
|
|
100
|
+
'| `web/src/services/RootService.ts` | Example service using `useBaseQuery` |',
|
|
101
|
+
'| `web/public/config.json` | Runtime config (API base URL, Clerk publishable key) |',
|
|
102
|
+
'',
|
|
103
|
+
'### GitHub Actions Workflows (`.github/workflows/`)',
|
|
104
|
+
'',
|
|
105
|
+
'| File | Trigger |',
|
|
106
|
+
'|------|---------|',
|
|
107
|
+
'| `pr-deploy.yml` | On pull request open/update — deploys a per-PR dev stack |',
|
|
108
|
+
'| `pr-cleanup.yml` | On pull request close — tears down the per-PR dev stack |',
|
|
109
|
+
'| `staging-deploy.yml` | On push to `main` — deploys to staging |',
|
|
110
|
+
'| `production-deploy.yml` | Manually triggered — deploys to production |',
|
|
111
|
+
'',
|
|
112
|
+
'---',
|
|
113
|
+
'',
|
|
114
|
+
'## Files You Can Edit',
|
|
115
|
+
'',
|
|
116
|
+
'These files are generated once and never overwritten by Batman. Modify them freely.',
|
|
117
|
+
'',
|
|
118
|
+
'| File | What to do with it |',
|
|
119
|
+
'|------|--------------------|',
|
|
120
|
+
'| `src/stacks/ApplicationStack.ts` | **Start here.** Add CDK constructs to build your infrastructure |',
|
|
121
|
+
'| `src/constructs/Api.ts` | Extend the API — add Lambda integrations, routes, or override methods |',
|
|
122
|
+
'| `src/constructs/StaticWebsite.ts` | Customize CloudFront behaviors, S3 settings, or deployment options |',
|
|
123
|
+
'| `src/constructs/handler/Api.Function.ts` | Implement your Lambda handler logic |',
|
|
124
|
+
'| `src/stacks/GitHubRolesStack.ts` | Add IAM permissions needed by GitHub Actions |',
|
|
125
|
+
'| `src/main.ts` | Adjust stack instantiation or add additional stacks |',
|
|
126
|
+
'| `web/src/App.tsx` | Build your UI here |',
|
|
127
|
+
'| `web/src/App.css` / `web/src/index.css` | Style your application |',
|
|
128
|
+
'| `web/src/main.tsx` | Adjust top-level providers or routing |',
|
|
129
|
+
'| `web/src/services/RootService.ts` | Add or replace API service hooks |',
|
|
130
|
+
'| `web/public/config.json` | Update for local development (API URL, Clerk key) |',
|
|
131
|
+
'',
|
|
132
|
+
'## Files You Cannot Edit',
|
|
133
|
+
'',
|
|
134
|
+
'These files are **managed by Batman** and will be overwritten every time `npx projen` runs. Do not edit them directly — make changes in `.projenrc.ts` instead.',
|
|
135
|
+
'',
|
|
136
|
+
'> [!IMPORTANT]',
|
|
137
|
+
'> If you have ANY changes you want to make to these files, notify #team-batman on Slack. ',
|
|
138
|
+
'> We maintain these files as part of the core Batman experience, and your feedback is crucial to ensure they meet your needs.',
|
|
139
|
+
'',
|
|
140
|
+
'| File | Why it\'s managed |',
|
|
141
|
+
'|------|-----------------|',
|
|
142
|
+
'| `src/stacks/BaseApplicationStack.ts` | Core stack wiring — updated with Batman releases |',
|
|
143
|
+
'| `src/aspects/DataDogAspect.ts` | Datadog CDK aspect |',
|
|
144
|
+
'| `web/vite.config.ts` | Vite configuration |',
|
|
145
|
+
'| `web/eslint.config.js` | ESLint configuration |',
|
|
146
|
+
'| `web/postcss.config.js` | PostCSS / Tailwind configuration |',
|
|
147
|
+
'| `web/index.html` | HTML entry point |',
|
|
148
|
+
'| `web/tsconfig.json` / `web/tsconfig.app.json` / `web/tsconfig.node.json` | TypeScript configuration |',
|
|
149
|
+
'| `web/src/vite-env.d.ts` | Vite type declarations |',
|
|
150
|
+
'| `web/src/config.ts` | Runtime config hook — shape driven by `.projenrc.ts` |',
|
|
151
|
+
'| `web/src/services/BaseService.ts` | Base authenticated fetch hook |',
|
|
152
|
+
'| `.github/CODEOWNERS` | Code ownership policy |',
|
|
153
|
+
'| `.github/workflows/*.yml` | All CI/CD workflows |',
|
|
154
|
+
'',
|
|
155
|
+
'> **Tip:** Files with a `~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". ~~` header are managed files.',
|
|
156
|
+
'',
|
|
157
|
+
'---',
|
|
158
|
+
'',
|
|
159
|
+
'## Where to Start',
|
|
160
|
+
'',
|
|
161
|
+
'1. **`src/stacks/ApplicationStack.ts`** — Add your CDK constructs here. The base stack already provides `this.api`, `this.vpc`, `this.hostedZone`, and `this.datadog` as protected properties.',
|
|
162
|
+
'',
|
|
163
|
+
'2. **`web/`** — Build your frontend. Start with `web/src/App.tsx` and add services alongside `web/src/services/RootService.ts`.',
|
|
164
|
+
'',
|
|
165
|
+
'3. **`src/constructs/handler/Api.Function.ts`** — Implement your backend Lambda handler logic here.',
|
|
166
|
+
'',
|
|
167
|
+
'---',
|
|
168
|
+
'',
|
|
169
|
+
'## Development Workflow',
|
|
170
|
+
'',
|
|
171
|
+
'```bash',
|
|
172
|
+
'# Install dependencies',
|
|
173
|
+
'yarn install',
|
|
174
|
+
'',
|
|
175
|
+
'# Start local dev server (backend Lambda + Vite frontend in parallel)',
|
|
176
|
+
'yarn dev',
|
|
177
|
+
'',
|
|
178
|
+
'# Deploy a personal dev stack to AWS',
|
|
179
|
+
'yarn cdk:dev --context local-dev-prefix=your-handle deploy',
|
|
180
|
+
'',
|
|
181
|
+
'# Run tests',
|
|
182
|
+
'yarn test',
|
|
183
|
+
'',
|
|
184
|
+
'# Re-synthesize project files after editing .projenrc.ts',
|
|
185
|
+
'npx projen',
|
|
186
|
+
'```',
|
|
187
|
+
'',
|
|
188
|
+
'---',
|
|
189
|
+
'',
|
|
190
|
+
'## Upgrading Batman',
|
|
191
|
+
'',
|
|
192
|
+
'```bash',
|
|
193
|
+
'yarn add @macedon-technologies/batman@latest',
|
|
194
|
+
'npx projen',
|
|
195
|
+
'```',
|
|
196
|
+
'',
|
|
197
|
+
'This updates all managed files to the latest Batman standards. Your editable sample files are never touched.',
|
|
198
|
+
].join('\n'),
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
// Create standard project files
|
|
202
|
+
const PRIMARY_ACCOUNT = '015955817263';
|
|
203
|
+
const PRIMARY_REGION = 'us-east-1';
|
|
204
|
+
new BootcampApplication_1.BootcampApplication(this, {
|
|
205
|
+
githubRepository: `macedon-technologies/${options.name}`,
|
|
206
|
+
clerkPublishableKey: 'pk_test_aW50ZW5zZS1sZWVjaC0yMi5jbGVyay5hY2NvdW50cy5kZXYk',
|
|
207
|
+
dev: {
|
|
208
|
+
...options.dev,
|
|
209
|
+
},
|
|
210
|
+
staging: {
|
|
211
|
+
...options.staging,
|
|
212
|
+
},
|
|
213
|
+
prod: {
|
|
214
|
+
...options.dev,
|
|
215
|
+
},
|
|
216
|
+
additionalTags: options.additionalTags,
|
|
217
|
+
});
|
|
218
|
+
new GitHubRolesFile_1.GitHubRolesFile(this, {
|
|
219
|
+
account: PRIMARY_ACCOUNT,
|
|
220
|
+
primaryRegion: PRIMARY_REGION,
|
|
221
|
+
});
|
|
222
|
+
new CodeOwnersFile_1.CodeOwnersFile(this, {
|
|
223
|
+
additionalOwners: options.additionalCodeOwners,
|
|
224
|
+
});
|
|
225
|
+
new DataDogAspectFile_1.DataDogAspectFile(this);
|
|
226
|
+
const viteReact = new ViteReactProject_1.ViteReactProject({
|
|
227
|
+
name: 'web',
|
|
228
|
+
defaultReleaseBranch: 'main',
|
|
229
|
+
parent: this,
|
|
230
|
+
outdir: 'web',
|
|
231
|
+
});
|
|
232
|
+
viteReact.addConfigField('something', 'number');
|
|
233
|
+
viteReact.addConfigField('somethingElse', 'string');
|
|
234
|
+
const concurrently = (...args) => {
|
|
235
|
+
return `concurrently ${args.map(a => `"${a}"`).join(' ')}`;
|
|
236
|
+
};
|
|
237
|
+
this.addTask('dev', {
|
|
238
|
+
exec: concurrently('nodemon --watch ./src/constructs/handler --watch ./local/dev.ts ./local/dev.ts', viteReact.devCommand),
|
|
239
|
+
});
|
|
240
|
+
this.addTask('cdk:dev', {
|
|
241
|
+
exec: 'yarn cdk -a "npx ts-node -P tsconfig.json --prefer-ts-exts src/LocalDevApp.ts"',
|
|
242
|
+
receiveArgs: true,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
exports.BootcampProject = BootcampProject;
|
|
247
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
248
|
+
BootcampProject[_a] = { fqn: "@macedon-technologies/batman.BootcampProject", version: "1.9.0" };
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBQcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Jvb3RjYW1wUHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUFvRjtBQUNwRiw4Q0FBc0Q7QUFFdEQsK0RBQTREO0FBQzVELHFEQUFrRDtBQUNsRCwyREFBd0Q7QUFDeEQsdURBQW9EO0FBQ3BELHlEQUFzRDtBQStCdEQsTUFBYSxlQUFnQixTQUFRLDRCQUFtQjtJQUN0RCxZQUFZLE9BQStCO1FBQ3pDLEtBQUssQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDM0Msb0JBQW9CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixJQUFJLE1BQU07WUFDNUQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLElBQUksRUFBRTtnQkFDSixtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsV0FBVztnQkFDWCxJQUFJO2dCQUNKLHFCQUFxQjtnQkFDckIsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLDBCQUEwQjtnQkFDMUIsbUNBQW1DO2dCQUNuQyxjQUFjO2dCQUNkLGlDQUFpQztnQkFDakMsU0FBUztnQkFDVCxpQkFBaUI7Z0JBQ2pCLGFBQWE7Z0JBQ2IsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AscUJBQXFCO2dCQUNyQixTQUFTO2dCQUNULGNBQWM7Z0JBQ2QscUNBQXFDO2dCQUNyQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRTthQUN6QjtZQUNELFNBQVMsRUFBRTtnQkFDVCxtREFBbUQ7Z0JBQ25ELGNBQWM7Z0JBQ2QsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUU7YUFDM0I7WUFDRCxRQUFRLEVBQUU7Z0JBQ1Is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b0JBQW9CLEVBQUUsTUFBTTtZQUM1QixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFcEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQWMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0QsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDbEIsSUFBSSxFQUFFLFlBQVksQ0FDaEIsZ0ZBQWdGLEVBQ2hGLFNBQVMsQ0FBQyxVQUFVLENBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsSUFBSSxFQUFFLGdGQUFnRjtZQUN0RixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7SUFHTCxDQUFDOztBQXRQSCwwQ0F1UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwLCBBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZyB9IGZyb20gJy4vQXBwbGljYXRpb24nO1xuaW1wb3J0IHsgQm9vdGNhbXBBcHBsaWNhdGlvbiB9IGZyb20gJy4vQm9vdGNhbXBBcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBDb2RlT3duZXJzRmlsZSB9IGZyb20gJy4vQ29kZU93bmVyc0ZpbGUnO1xuaW1wb3J0IHsgRGF0YURvZ0FzcGVjdEZpbGUgfSBmcm9tICcuL0RhdGFEb2dBc3BlY3RGaWxlJztcbmltcG9ydCB7IEdpdEh1YlJvbGVzRmlsZSB9IGZyb20gJy4vR2l0SHViUm9sZXNGaWxlJztcbmltcG9ydCB7IFZpdGVSZWFjdFByb2plY3QgfSBmcm9tICcuL1ZpdGVSZWFjdFByb2plY3QnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdGNhbXBQcm9qZWN0T3B0aW9ucyBleHRlbmRzIEF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zIHtcblxuICAvKipcbiAgICogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGV2OiBBcHBsaWNhdGlvbkVudmlyb25tZW50Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBEZXZlbG9wbWVudCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nOiBBcHBsaWNhdGlvbkVudmlyb25tZW50Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBQcm9kdWN0aW9uIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byBhbGwgc3RhY2tzXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsVGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgY29kZSBvd25lcnMgdG8gYWRkIHRvIHRoZSBDT0RFT1dORVJTIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxDb2RlT3duZXJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBCb290Y2FtcFByb2plY3QgZXh0ZW5kcyBBd3NDZGtUeXBlU2NyaXB0QXBwIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQm9vdGNhbXBQcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjZGtWZXJzaW9uOiBvcHRpb25zLmNka1ZlcnNpb24gfHwgJzIuMjI0LjAnLFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggfHwgJ21haW4nLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAgIGJ1aWxkV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgZGVwczogW1xuICAgICAgICAnQHR5cGVzL2F3cy1sYW1iZGEnLFxuICAgICAgICAnQHR5cGVzL2V4cHJlc3MnLFxuICAgICAgICAnQHR5cGVzL3BnJyxcbiAgICAgICAgJ3BnJyxcbiAgICAgICAgJ0Bhd3Mtc2RrL3Jkcy1zaWduZXInLFxuICAgICAgICAnQG1hdHRoZXdib25pZy9zZWNyZXQnLFxuICAgICAgICAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12MicsXG4gICAgICAgICdAY2RrbGFicy9hd3MtbGFtYmRhLXJ1c3QnLFxuICAgICAgICAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9wYXJhbWV0ZXJzJyxcbiAgICAgICAgJ2pzb253ZWJ0b2tlbicsXG4gICAgICAgICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJyxcbiAgICAgICAgJ2V4cHJlc3MnLFxuICAgICAgICAnc2VydmVybGVzcy1odHRwJyxcbiAgICAgICAgJ2Nkay1yZHMtc3FsJyxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXBzIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B0eXBlcy9qc29ud2VidG9rZW4nLFxuICAgICAgICAnbm9kZW1vbicsXG4gICAgICAgICdjb25jdXJyZW50bHknLFxuICAgICAgICAnQG1hY2Vkb24tdGVjaG5vbG9naWVzL2JhdG1hbkBeMS4wLjAnLFxuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgfHwgW10sXG4gICAgICBdLFxuICAgICAgZ2l0aWdub3JlOiBbXG4gICAgICAgICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL2NsZXJrLWF1dGhvcml6ZXIvdGFyZ2V0LyoqJyxcbiAgICAgICAgJyoqLy5EU19TdG9yZScsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aWdub3JlIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIHRzY29uZmlnOiB7XG4gICAgICAgIC4uLm9wdGlvbnMudHNjb25maWcsXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMudHNjb25maWc/LmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICBpc29sYXRlZE1vZHVsZXM6IHRydWUsXG4gICAgICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiB8fCAnMjInLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgICAgICBzZWNyZXQ6ICdHSVRIVUJfVE9LRU4nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRtZToge1xuICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgIGAjICR7b3B0aW9ucy5uYW1lfWAsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1RoaXMgcHJvamVjdCB3YXMgYm9vdHN0cmFwcGVkIHdpdGggW0JhdG1hbl0oaHR0cHM6Ly9naXRodWIuY29tL21hY2Vkb24tdGVjaG5vbG9naWVzL3BsYXRmb3JtLWNvbW1vbikuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgV2hhdCBCYXRtYW4gQ3JlYXRlZCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIyBDREsgSW5mcmFzdHJ1Y3R1cmUgKGBzcmMvYCknLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICd8IEZpbGUgfCBEZXNjcmlwdGlvbiB8JyxcbiAgICAgICAgICAnfC0tLS0tLXwtLS0tLS0tLS0tLS0tfCcsXG4gICAgICAgICAgJ3wgYHNyYy9tYWluLnRzYCB8IENESyBhcHAgZW50cnkgcG9pbnQg4oCUIGluc3RhbnRpYXRlcyBkZXYsIHN0YWdpbmcsIGFuZCBwcm9kIGBBcHBsaWNhdGlvblN0YWNrYHMgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9Mb2NhbERldkFwcC50c2AgfCBMb2NhbCBkZXZlbG9wbWVudCBDREsgYXBwIOKAlCB1c2VkIGJ5IGB5YXJuIGNkazpkZXZgIHwnLFxuICAgICAgICAgICd8IGBzcmMvR2l0SHViUm9sZXMudHNgIHwgQ0RLIGFwcCBmb3IgZGVwbG95aW5nIHRoZSBHaXRIdWIgT0lEQyBJQU0gcm9sZSAob25lLXRpbWUgYm9vdHN0cmFwKSB8JyxcbiAgICAgICAgICAnfCBgc3JjL3N0YWNrcy9BcHBsaWNhdGlvblN0YWNrLnRzYCB8IFlvdXIgcHJpbWFyeSBzdGFjayDigJQgZXh0ZW5kIGl0IHRvIGFkZCByZXNvdXJjZXMgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9zdGFja3MvQmFzZUFwcGxpY2F0aW9uU3RhY2sudHNgIHwgQmFzZSBzdGFjayB3aXRoIFZQQywgQVBJLCBzdGF0aWMgd2Vic2l0ZSwgRGF0YWRvZywgYW5kIFJvdXRlIDUzIHdpcmVkIHVwIHwnLFxuICAgICAgICAgICd8IGBzcmMvc3RhY2tzL0dpdEh1YlJvbGVzU3RhY2sudHNgIHwgSUFNIHJvbGUgc3RhY2sgZm9yIEdpdEh1YiBBY3Rpb25zIE9JREMgYXV0aGVudGljYXRpb24gfCcsXG4gICAgICAgICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL0FwaS50c2AgfCBBUEkgR2F0ZXdheSArIExhbWJkYSBjb25zdHJ1Y3Qgd2l0aCBDbGVyayBKV1QgYXV0aG9yaXplciB8JyxcbiAgICAgICAgICAnfCBgc3JjL2NvbnN0cnVjdHMvU3RhdGljV2Vic2l0ZS50c2AgfCBDbG91ZEZyb250ICsgUzMgKyBBQ00gKyBSb3V0ZSA1MyBjb25zdHJ1Y3QgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvQXBpLkZ1bmN0aW9uLnRzYCB8IExhbWJkYSBoYW5kbGVyIGVudHJ5IHBvaW50IHwnLFxuICAgICAgICAgICd8IGBzcmMvYXNwZWN0cy9EYXRhRG9nQXNwZWN0LnRzYCB8IENESyBhc3BlY3QgdGhhdCB3aXJlcyBhbGwgTGFtYmRhIGZ1bmN0aW9ucyB0byBEYXRhZG9nIHwnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyMgRnJvbnRlbmQgKGB3ZWIvYCknLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICd8IEZpbGUgfCBEZXNjcmlwdGlvbiB8JyxcbiAgICAgICAgICAnfC0tLS0tLXwtLS0tLS0tLS0tLS0tfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvbWFpbi50c3hgIHwgUmVhY3QgYXBwIGVudHJ5IHBvaW50IHdpdGggQ2xlcmsgYW5kIFJlYWN0IFF1ZXJ5IHByb3ZpZGVycyB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9BcHAudHN4YCB8IFJvb3QgYXBwbGljYXRpb24gY29tcG9uZW50IHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL0FwcC5jc3NgIC8gYHdlYi9zcmMvaW5kZXguY3NzYCB8IEJhc2Ugc3R5bGVzaGVldHMgKFRhaWx3aW5kIENTUyB2NCkgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvY29uZmlnLnRzYCB8IGB1c2VDb25maWcoKWAgaG9vayDigJQgbG9hZHMgcnVudGltZSBjb25maWcgZnJvbSBgY29uZmlnLmpzb25gIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL3NlcnZpY2VzL0Jhc2VTZXJ2aWNlLnRzYCB8IGB1c2VCYXNlUXVlcnkoKWAg4oCUIGF1dGhlbnRpY2F0ZWQgQVBJIGZldGNoIGhvb2sgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvc2VydmljZXMvUm9vdFNlcnZpY2UudHNgIHwgRXhhbXBsZSBzZXJ2aWNlIHVzaW5nIGB1c2VCYXNlUXVlcnlgIHwnLFxuICAgICAgICAgICd8IGB3ZWIvcHVibGljL2NvbmZpZy5qc29uYCB8IFJ1bnRpbWUgY29uZmlnIChBUEkgYmFzZSBVUkwsIENsZXJrIHB1Ymxpc2hhYmxlIGtleSkgfCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIyBHaXRIdWIgQWN0aW9ucyBXb3JrZmxvd3MgKGAuZ2l0aHViL3dvcmtmbG93cy9gKScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ3wgRmlsZSB8IFRyaWdnZXIgfCcsXG4gICAgICAgICAgJ3wtLS0tLS18LS0tLS0tLS0tfCcsXG4gICAgICAgICAgJ3wgYHByLWRlcGxveS55bWxgIHwgT24gcHVsbCByZXF1ZXN0IG9wZW4vdXBkYXRlIOKAlCBkZXBsb3lzIGEgcGVyLVBSIGRldiBzdGFjayB8JyxcbiAgICAgICAgICAnfCBgcHItY2xlYW51cC55bWxgIHwgT24gcHVsbCByZXF1ZXN0IGNsb3NlIOKAlCB0ZWFycyBkb3duIHRoZSBwZXItUFIgZGV2IHN0YWNrIHwnLFxuICAgICAgICAgICd8IGBzdGFnaW5nLWRlcGxveS55bWxgIHwgT24gcHVzaCB0byBgbWFpbmAg4oCUIGRlcGxveXMgdG8gc3RhZ2luZyB8JyxcbiAgICAgICAgICAnfCBgcHJvZHVjdGlvbi1kZXBsb3kueW1sYCB8IE1hbnVhbGx5IHRyaWdnZXJlZCDigJQgZGVwbG95cyB0byBwcm9kdWN0aW9uIHwnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICctLS0nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBGaWxlcyBZb3UgQ2FuIEVkaXQnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdUaGVzZSBmaWxlcyBhcmUgZ2VuZXJhdGVkIG9uY2UgYW5kIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IEJhdG1hbi4gTW9kaWZ5IHRoZW0gZnJlZWx5LicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ3wgRmlsZSB8IFdoYXQgdG8gZG8gd2l0aCBpdCB8JyxcbiAgICAgICAgICAnfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwnLFxuICAgICAgICAgICd8IGBzcmMvc3RhY2tzL0FwcGxpY2F0aW9uU3RhY2sudHNgIHwgKipTdGFydCBoZXJlLioqIEFkZCBDREsgY29uc3RydWN0cyB0byBidWlsZCB5b3VyIGluZnJhc3RydWN0dXJlIHwnLFxuICAgICAgICAgICd8IGBzcmMvY29uc3RydWN0cy9BcGkudHNgIHwgRXh0ZW5kIHRoZSBBUEkg4oCUIGFkZCBMYW1iZGEgaW50ZWdyYXRpb25zLCByb3V0ZXMsIG9yIG92ZXJyaWRlIG1ldGhvZHMgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL1N0YXRpY1dlYnNpdGUudHNgIHwgQ3VzdG9taXplIENsb3VkRnJvbnQgYmVoYXZpb3JzLCBTMyBzZXR0aW5ncywgb3IgZGVwbG95bWVudCBvcHRpb25zIHwnLFxuICAgICAgICAgICd8IGBzcmMvY29uc3RydWN0cy9oYW5kbGVyL0FwaS5GdW5jdGlvbi50c2AgfCBJbXBsZW1lbnQgeW91ciBMYW1iZGEgaGFuZGxlciBsb2dpYyB8JyxcbiAgICAgICAgICAnfCBgc3JjL3N0YWNrcy9HaXRIdWJSb2xlc1N0YWNrLnRzYCB8IEFkZCBJQU0gcGVybWlzc2lvbnMgbmVlZGVkIGJ5IEdpdEh1YiBBY3Rpb25zIHwnLFxuICAgICAgICAgICd8IGBzcmMvbWFpbi50c2AgfCBBZGp1c3Qgc3RhY2sgaW5zdGFudGlhdGlvbiBvciBhZGQgYWRkaXRpb25hbCBzdGFja3MgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvQXBwLnRzeGAgfCBCdWlsZCB5b3VyIFVJIGhlcmUgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvQXBwLmNzc2AgLyBgd2ViL3NyYy9pbmRleC5jc3NgIHwgU3R5bGUgeW91ciBhcHBsaWNhdGlvbiB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9tYWluLnRzeGAgfCBBZGp1c3QgdG9wLWxldmVsIHByb3ZpZGVycyBvciByb3V0aW5nIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL3NlcnZpY2VzL1Jvb3RTZXJ2aWNlLnRzYCB8IEFkZCBvciByZXBsYWNlIEFQSSBzZXJ2aWNlIGhvb2tzIHwnLFxuICAgICAgICAgICd8IGB3ZWIvcHVibGljL2NvbmZpZy5qc29uYCB8IFVwZGF0ZSBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQgKEFQSSBVUkwsIENsZXJrIGtleSkgfCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIEZpbGVzIFlvdSBDYW5ub3QgRWRpdCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1RoZXNlIGZpbGVzIGFyZSAqKm1hbmFnZWQgYnkgQmF0bWFuKiogYW5kIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZXZlcnkgdGltZSBgbnB4IHByb2plbmAgcnVucy4gRG8gbm90IGVkaXQgdGhlbSBkaXJlY3RseSDigJQgbWFrZSBjaGFuZ2VzIGluIGAucHJvamVucmMudHNgIGluc3RlYWQuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnPiBbIUlNUE9SVEFOVF0nLFxuICAgICAgICAgICc+IElmIHlvdSBoYXZlIEFOWSBjaGFuZ2VzIHlvdSB3YW50IHRvIG1ha2UgdG8gdGhlc2UgZmlsZXMsIG5vdGlmeSAjdGVhbS1iYXRtYW4gb24gU2xhY2suICcsXG4gICAgICAgICAgJz4gV2UgbWFpbnRhaW4gdGhlc2UgZmlsZXMgYXMgcGFydCBvZiB0aGUgY29yZSBCYXRtYW4gZXhwZXJpZW5jZSwgYW5kIHlvdXIgZmVlZGJhY2sgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhleSBtZWV0IHlvdXIgbmVlZHMuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnfCBGaWxlIHwgV2h5IGl0XFwncyBtYW5hZ2VkIHwnLFxuICAgICAgICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfCcsXG4gICAgICAgICAgJ3wgYHNyYy9zdGFja3MvQmFzZUFwcGxpY2F0aW9uU3RhY2sudHNgIHwgQ29yZSBzdGFjayB3aXJpbmcg4oCUIHVwZGF0ZWQgd2l0aCBCYXRtYW4gcmVsZWFzZXMgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9hc3BlY3RzL0RhdGFEb2dBc3BlY3QudHNgIHwgRGF0YWRvZyBDREsgYXNwZWN0IHwnLFxuICAgICAgICAgICd8IGB3ZWIvdml0ZS5jb25maWcudHNgIHwgVml0ZSBjb25maWd1cmF0aW9uIHwnLFxuICAgICAgICAgICd8IGB3ZWIvZXNsaW50LmNvbmZpZy5qc2AgfCBFU0xpbnQgY29uZmlndXJhdGlvbiB8JyxcbiAgICAgICAgICAnfCBgd2ViL3Bvc3Rjc3MuY29uZmlnLmpzYCB8IFBvc3RDU1MgLyBUYWlsd2luZCBjb25maWd1cmF0aW9uIHwnLFxuICAgICAgICAgICd8IGB3ZWIvaW5kZXguaHRtbGAgfCBIVE1MIGVudHJ5IHBvaW50IHwnLFxuICAgICAgICAgICd8IGB3ZWIvdHNjb25maWcuanNvbmAgLyBgd2ViL3RzY29uZmlnLmFwcC5qc29uYCAvIGB3ZWIvdHNjb25maWcubm9kZS5qc29uYCB8IFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy92aXRlLWVudi5kLnRzYCB8IFZpdGUgdHlwZSBkZWNsYXJhdGlvbnMgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvY29uZmlnLnRzYCB8IFJ1bnRpbWUgY29uZmlnIGhvb2sg4oCUIHNoYXBlIGRyaXZlbiBieSBgLnByb2plbnJjLnRzYCB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9zZXJ2aWNlcy9CYXNlU2VydmljZS50c2AgfCBCYXNlIGF1dGhlbnRpY2F0ZWQgZmV0Y2ggaG9vayB8JyxcbiAgICAgICAgICAnfCBgLmdpdGh1Yi9DT0RFT1dORVJTYCB8IENvZGUgb3duZXJzaGlwIHBvbGljeSB8JyxcbiAgICAgICAgICAnfCBgLmdpdGh1Yi93b3JrZmxvd3MvKi55bWxgIHwgQWxsIENJL0NEIHdvcmtmbG93cyB8JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnPiAqKlRpcDoqKiBGaWxlcyB3aXRoIGEgYH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5weCBwcm9qZW5cIi4gfn5gIGhlYWRlciBhcmUgbWFuYWdlZCBmaWxlcy4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICctLS0nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBXaGVyZSB0byBTdGFydCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJzEuICoqYHNyYy9zdGFja3MvQXBwbGljYXRpb25TdGFjay50c2AqKiDigJQgQWRkIHlvdXIgQ0RLIGNvbnN0cnVjdHMgaGVyZS4gVGhlIGJhc2Ugc3RhY2sgYWxyZWFkeSBwcm92aWRlcyBgdGhpcy5hcGlgLCBgdGhpcy52cGNgLCBgdGhpcy5ob3N0ZWRab25lYCwgYW5kIGB0aGlzLmRhdGFkb2dgIGFzIHByb3RlY3RlZCBwcm9wZXJ0aWVzLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJzIuICoqYHdlYi9gKiog4oCUIEJ1aWxkIHlvdXIgZnJvbnRlbmQuIFN0YXJ0IHdpdGggYHdlYi9zcmMvQXBwLnRzeGAgYW5kIGFkZCBzZXJ2aWNlcyBhbG9uZ3NpZGUgYHdlYi9zcmMvc2VydmljZXMvUm9vdFNlcnZpY2UudHNgLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJzMuICoqYHNyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvQXBpLkZ1bmN0aW9uLnRzYCoqIOKAlCBJbXBsZW1lbnQgeW91ciBiYWNrZW5kIExhbWJkYSBoYW5kbGVyIGxvZ2ljIGhlcmUuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnLS0tJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgRGV2ZWxvcG1lbnQgV29ya2Zsb3cnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdgYGBiYXNoJyxcbiAgICAgICAgICAnIyBJbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgICAgICAgJ3lhcm4gaW5zdGFsbCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMgU3RhcnQgbG9jYWwgZGV2IHNlcnZlciAoYmFja2VuZCBMYW1iZGEgKyBWaXRlIGZyb250ZW5kIGluIHBhcmFsbGVsKScsXG4gICAgICAgICAgJ3lhcm4gZGV2JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyBEZXBsb3kgYSBwZXJzb25hbCBkZXYgc3RhY2sgdG8gQVdTJyxcbiAgICAgICAgICAneWFybiBjZGs6ZGV2IC0tY29udGV4dCBsb2NhbC1kZXYtcHJlZml4PXlvdXItaGFuZGxlIGRlcGxveScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMgUnVuIHRlc3RzJyxcbiAgICAgICAgICAneWFybiB0ZXN0JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyBSZS1zeW50aGVzaXplIHByb2plY3QgZmlsZXMgYWZ0ZXIgZWRpdGluZyAucHJvamVucmMudHMnLFxuICAgICAgICAgICducHggcHJvamVuJyxcbiAgICAgICAgICAnYGBgJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnLS0tJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgVXBncmFkaW5nIEJhdG1hbicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ2BgYGJhc2gnLFxuICAgICAgICAgICd5YXJuIGFkZCBAbWFjZWRvbi10ZWNobm9sb2dpZXMvYmF0bWFuQGxhdGVzdCcsXG4gICAgICAgICAgJ25weCBwcm9qZW4nLFxuICAgICAgICAgICdgYGAnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdUaGlzIHVwZGF0ZXMgYWxsIG1hbmFnZWQgZmlsZXMgdG8gdGhlIGxhdGVzdCBCYXRtYW4gc3RhbmRhcmRzLiBZb3VyIGVkaXRhYmxlIHNhbXBsZSBmaWxlcyBhcmUgbmV2ZXIgdG91Y2hlZC4nLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfSxcbiAgICB9KTtcblxuXG4gICAgLy8gQ3JlYXRlIHN0YW5kYXJkIHByb2plY3QgZmlsZXNcbiAgICBjb25zdCBQUklNQVJZX0FDQ09VTlQgPSAnMDE1OTU1ODE3MjYzJztcbiAgICBjb25zdCBQUklNQVJZX1JFR0lPTiA9ICd1cy1lYXN0LTEnO1xuXG4gICAgbmV3IEJvb3RjYW1wQXBwbGljYXRpb24odGhpcywge1xuICAgICAgZ2l0aHViUmVwb3NpdG9yeTogYG1hY2Vkb24tdGVjaG5vbG9naWVzLyR7b3B0aW9ucy5uYW1lfWAsXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiAncGtfdGVzdF9hVzUwWlc1elpTMXNaV1ZqYUMweU1pNWpiR1Z5YXk1aFkyTnZkVzUwY3k1a1pYWWsnLFxuICAgICAgZGV2OiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZGV2LFxuICAgICAgfSxcbiAgICAgIHN0YWdpbmc6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5zdGFnaW5nLFxuICAgICAgfSxcbiAgICAgIHByb2Q6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5kZXYsXG4gICAgICB9LFxuICAgICAgYWRkaXRpb25hbFRhZ3M6IG9wdGlvbnMuYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG5cbiAgICBuZXcgR2l0SHViUm9sZXNGaWxlKHRoaXMsIHtcbiAgICAgIGFjY291bnQ6IFBSSU1BUllfQUNDT1VOVCxcbiAgICAgIHByaW1hcnlSZWdpb246IFBSSU1BUllfUkVHSU9OLFxuICAgIH0pO1xuXG4gICAgbmV3IENvZGVPd25lcnNGaWxlKHRoaXMsIHtcbiAgICAgIGFkZGl0aW9uYWxPd25lcnM6IG9wdGlvbnMuYWRkaXRpb25hbENvZGVPd25lcnMsXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YURvZ0FzcGVjdEZpbGUodGhpcyk7XG5cbiAgICBjb25zdCB2aXRlUmVhY3QgPSBuZXcgVml0ZVJlYWN0UHJvamVjdCh7XG4gICAgICBuYW1lOiAnd2ViJyxcbiAgICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnbWFpbicsXG4gICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICBvdXRkaXI6ICd3ZWInLFxuICAgIH0pO1xuICAgIHZpdGVSZWFjdC5hZGRDb25maWdGaWVsZCgnc29tZXRoaW5nJywgJ251bWJlcicpO1xuICAgIHZpdGVSZWFjdC5hZGRDb25maWdGaWVsZCgnc29tZXRoaW5nRWxzZScsICdzdHJpbmcnKTtcblxuICAgIGNvbnN0IGNvbmN1cnJlbnRseSA9ICguLi5hcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgcmV0dXJuIGBjb25jdXJyZW50bHkgJHthcmdzLm1hcChhID0+IGBcIiR7YX1cImApLmpvaW4oJyAnKX1gO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZFRhc2soJ2RldicsIHtcbiAgICAgIGV4ZWM6IGNvbmN1cnJlbnRseShcbiAgICAgICAgJ25vZGVtb24gLS13YXRjaCAuL3NyYy9jb25zdHJ1Y3RzL2hhbmRsZXIgLS13YXRjaCAuL2xvY2FsL2Rldi50cyAuL2xvY2FsL2Rldi50cycsXG4gICAgICAgIHZpdGVSZWFjdC5kZXZDb21tYW5kLFxuICAgICAgKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkVGFzaygnY2RrOmRldicsIHtcbiAgICAgIGV4ZWM6ICd5YXJuIGNkayAtYSBcIm5weCB0cy1ub2RlIC1QIHRzY29uZmlnLmpzb24gLS1wcmVmZXItdHMtZXh0cyBzcmMvTG9jYWxEZXZBcHAudHNcIicsXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuXG4gIH1cbn1cbiJdfQ==
|
package/lib/CodeOwnersFile.js
CHANGED
|
@@ -16,5 +16,5 @@ class CodeOwnersFile extends projen_1.TextFile {
|
|
|
16
16
|
}
|
|
17
17
|
exports.CodeOwnersFile = CodeOwnersFile;
|
|
18
18
|
_a = JSII_RTTI_SYMBOL_1;
|
|
19
|
-
CodeOwnersFile[_a] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.
|
|
19
|
+
CodeOwnersFile[_a] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.9.0" };
|
|
20
20
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZU93bmVyc0ZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29kZU93bmVyc0ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBa0M7QUFPbEMsTUFBYSxjQUFlLFNBQVEsaUJBQVE7SUFDMUMsWUFBWSxPQUE0QixFQUFFLFVBQWlDLEVBQUU7UUFDM0UsTUFBTSxhQUFhLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzNELE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUU7WUFDbkMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDOztBQVRILHdDQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlT3duZXJzRmlsZU9wdGlvbnMge1xuICByZWFkb25seSBhZGRpdGlvbmFsT3duZXJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlT3duZXJzRmlsZSBleHRlbmRzIFRleHRGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCwgb3B0aW9uczogQ29kZU93bmVyc0ZpbGVPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBkZWZhdWx0T3duZXJzID0gWycqIEBtYWNlZG9uLXRlY2hub2xvZ2llcy9wbGF0Zm9ybSddO1xuICAgIGNvbnN0IGFsbE93bmVycyA9IFsuLi5kZWZhdWx0T3duZXJzLCAuLi4ob3B0aW9ucy5hZGRpdGlvbmFsT3duZXJzIHx8IFtdKV07XG5cbiAgICBzdXBlcihwcm9qZWN0LCAnLmdpdGh1Yi9DT0RFT1dORVJTJywge1xuICAgICAgbGluZXM6IGFsbE93bmVycyxcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|