@macedon-technologies/batman 1.7.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.
@@ -23,6 +23,10 @@ export interface BatmanProjectOptions extends AwsCdkTypeScriptAppOptions {
23
23
  * Additional code owners to add to the CODEOWNERS file
24
24
  */
25
25
  readonly additionalCodeOwners?: string[];
26
+ /**
27
+ * Website dependencies
28
+ */
29
+ readonly websiteDeps?: string[];
26
30
  }
27
31
  export declare class BatmanProject extends AwsCdkTypeScriptApp {
28
32
  constructor(options: BatmanProjectOptions);
@@ -227,6 +227,7 @@ class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
227
227
  defaultReleaseBranch: 'main',
228
228
  parent: this,
229
229
  outdir: 'web',
230
+ deps: options.websiteDeps,
230
231
  });
231
232
  viteReact.addConfigField('something', 'number');
232
233
  viteReact.addConfigField('somethingElse', 'string');
@@ -244,5 +245,5 @@ class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
244
245
  }
245
246
  exports.BatmanProject = BatmanProject;
246
247
  _a = JSII_RTTI_SYMBOL_1;
247
- BatmanProject[_a] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.7.0" };
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0bWFuUHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXRtYW5Qcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQW9GO0FBQ3BGLDhDQUFzRDtBQUN0RCwrQ0FBMEU7QUFDMUUscURBQWtEO0FBQ2xELDJEQUF3RDtBQUN4RCx1REFBb0Q7QUFDcEQseURBQXNEO0FBK0J0RCxNQUFhLGFBQWMsU0FBUSw0QkFBbUI7SUFDcEQsWUFBWSxPQUE2QjtRQUN2QyxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTO1lBQzNDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxNQUFNO1lBQzVELElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsS0FBSztZQUNwQixJQUFJLEVBQUU7Z0JBQ0osbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLFdBQVc7Z0JBQ1gsSUFBSTtnQkFDSixxQkFBcUI7Z0JBQ3JCLHNCQUFzQjtnQkFDdEIsMkJBQTJCO2dCQUMzQiwwQkFBMEI7Z0JBQzFCLG1DQUFtQztnQkFDbkMsY0FBYztnQkFDZCxpQ0FBaUM7Z0JBQ2pDLFNBQVM7Z0JBQ1QsaUJBQWlCO2dCQUNqQixHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRTthQUN0QjtZQUNELE9BQU8sRUFBRTtnQkFDUCxxQkFBcUI7Z0JBQ3JCLFNBQVM7Z0JBQ1QsY0FBYztnQkFDZCxxQ0FBcUM7Z0JBQ3JDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFO2FBQ3pCO1lBQ0QsU0FBUyxFQUFFO2dCQUNULG1EQUFtRDtnQkFDbkQsY0FBYztnQkFDZCxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTthQUMzQjtZQUNELFFBQVEsRUFBRTtnQkFDUixHQUFHLE9BQU8sQ0FBQyxR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LEVBQUUsTUFBTTtZQUM1QixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFcEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQWMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0QsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDbEIsSUFBSSxFQUFFLFlBQVksQ0FDaEIsZ0ZBQWdGLEVBQ2hGLFNBQVMsQ0FBQyxVQUFVLENBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsSUFBSSxFQUFFLGdGQUFnRjtZQUN0RixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7SUFHTCxDQUFDOztBQXJQSCxzQ0FzUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwLCBBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgQXBwbGljYXRpb24sIEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWcgfSBmcm9tICcuL0FwcGxpY2F0aW9uJztcbmltcG9ydCB7IENvZGVPd25lcnNGaWxlIH0gZnJvbSAnLi9Db2RlT3duZXJzRmlsZSc7XG5pbXBvcnQgeyBEYXRhRG9nQXNwZWN0RmlsZSB9IGZyb20gJy4vRGF0YURvZ0FzcGVjdEZpbGUnO1xuaW1wb3J0IHsgR2l0SHViUm9sZXNGaWxlIH0gZnJvbSAnLi9HaXRIdWJSb2xlc0ZpbGUnO1xuaW1wb3J0IHsgVml0ZVJlYWN0UHJvamVjdCB9IGZyb20gJy4vVml0ZVJlYWN0UHJvamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmF0bWFuUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIERldmVsb3BtZW50IGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRldjogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcblxuICAvKipcbiAgICogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2luZzogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcblxuICAvKipcbiAgICogUHJvZHVjdGlvbiBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBBcHBsaWNhdGlvbkVudmlyb25tZW50Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHRhZ3MgdG8gYXBwbHkgdG8gYWxsIHN0YWNrc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvZGUgb3duZXJzIHRvIGFkZCB0byB0aGUgQ09ERU9XTkVSUyBmaWxlXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQ29kZU93bmVycz86IHN0cmluZ1tdO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBCYXRtYW5Qcm9qZWN0IGV4dGVuZHMgQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJhdG1hblByb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNka1ZlcnNpb246IG9wdGlvbnMuY2RrVmVyc2lvbiB8fCAnMi4yMjQuMCcsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogb3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaCB8fCAnbWFpbicsXG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBwcm9qZW5yY1RzOiB0cnVlLFxuICAgICAgYnVpbGRXb3JrZmxvdzogZmFsc2UsXG4gICAgICBkZXBzOiBbXG4gICAgICAgICdAdHlwZXMvYXdzLWxhbWJkYScsXG4gICAgICAgICdAdHlwZXMvZXhwcmVzcycsXG4gICAgICAgICdAdHlwZXMvcGcnLFxuICAgICAgICAncGcnLFxuICAgICAgICAnQGF3cy1zZGsvcmRzLXNpZ25lcicsXG4gICAgICAgICdAbWF0dGhld2JvbmlnL3NlY3JldCcsXG4gICAgICAgICdkYXRhZG9nLWNkay1jb25zdHJ1Y3RzLXYyJyxcbiAgICAgICAgJ0BjZGtsYWJzL2F3cy1sYW1iZGEtcnVzdCcsXG4gICAgICAgICdAYXdzLWxhbWJkYS1wb3dlcnRvb2xzL3BhcmFtZXRlcnMnLFxuICAgICAgICAnanNvbndlYnRva2VuJyxcbiAgICAgICAgJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInLFxuICAgICAgICAnZXhwcmVzcycsXG4gICAgICAgICdzZXJ2ZXJsZXNzLWh0dHAnLFxuICAgICAgICAuLi5vcHRpb25zLmRlcHMgfHwgW10sXG4gICAgICBdLFxuICAgICAgZGV2RGVwczogW1xuICAgICAgICAnQHR5cGVzL2pzb253ZWJ0b2tlbicsXG4gICAgICAgICdub2RlbW9uJyxcbiAgICAgICAgJ2NvbmN1cnJlbnRseScsXG4gICAgICAgICdAbWFjZWRvbi10ZWNobm9sb2dpZXMvYmF0bWFuQF4xLjAuMCcsXG4gICAgICAgIC4uLm9wdGlvbnMuZGV2RGVwcyB8fCBbXSxcbiAgICAgIF0sXG4gICAgICBnaXRpZ25vcmU6IFtcbiAgICAgICAgJ3NyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvY2xlcmstYXV0aG9yaXplci90YXJnZXQvKionLFxuICAgICAgICAnKiovLkRTX1N0b3JlJyxcbiAgICAgICAgLi4ub3B0aW9ucy5naXRpZ25vcmUgfHwgW10sXG4gICAgICBdLFxuICAgICAgdHNjb25maWc6IHtcbiAgICAgICAgLi4ub3B0aW9ucy50c2NvbmZpZyxcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgLi4ub3B0aW9ucy50c2NvbmZpZz8uY29tcGlsZXJPcHRpb25zLFxuICAgICAgICAgIGlzb2xhdGVkTW9kdWxlczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIG1pbk5vZGVWZXJzaW9uOiBvcHRpb25zLm1pbk5vZGVWZXJzaW9uIHx8ICcyMicsXG4gICAgICBkZXBzVXBncmFkZU9wdGlvbnM6IHtcbiAgICAgICAgd29ya2Zsb3dPcHRpb25zOiB7XG4gICAgICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IEdpdGh1YkNyZWRlbnRpYWxzLmZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKHtcbiAgICAgICAgICAgIHNlY3JldDogJ0dJVEhVQl9UT0tFTicsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVhZG1lOiB7XG4gICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgYCMgJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnVGhpcyBwcm9qZWN0IHdhcyBib290c3RyYXBwZWQgd2l0aCBbQmF0bWFuXShodHRwczovL2dpdGh1Yi5jb20vbWFjZWRvbi10ZWNobm9sb2dpZXMvcGxhdGZvcm0tY29tbW9uKS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBXaGF0IEJhdG1hbiBDcmVhdGVkJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMjIENESyBJbmZyYXN0cnVjdHVyZSAoYHNyYy9gKScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ3wgRmlsZSB8IERlc2NyaXB0aW9uIHwnLFxuICAgICAgICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS18JyxcbiAgICAgICAgICAnfCBgc3JjL21haW4udHNgIHwgQ0RLIGFwcCBlbnRyeSBwb2ludCDigJQgaW5zdGFudGlhdGVzIGRldiwgc3RhZ2luZywgYW5kIHByb2QgYEFwcGxpY2F0aW9uU3RhY2tgcyB8JyxcbiAgICAgICAgICAnfCBgc3JjL0xvY2FsRGV2QXBwLnRzYCB8IExvY2FsIGRldmVsb3BtZW50IENESyBhcHAg4oCUIHVzZWQgYnkgYHlhcm4gY2RrOmRldmAgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9HaXRIdWJSb2xlcy50c2AgfCBDREsgYXBwIGZvciBkZXBsb3lpbmcgdGhlIEdpdEh1YiBPSURDIElBTSByb2xlIChvbmUtdGltZSBib290c3RyYXApIHwnLFxuICAgICAgICAgICd8IGBzcmMvc3RhY2tzL0FwcGxpY2F0aW9uU3RhY2sudHNgIHwgWW91ciBwcmltYXJ5IHN0YWNrIOKAlCBleHRlbmQgaXQgdG8gYWRkIHJlc291cmNlcyB8JyxcbiAgICAgICAgICAnfCBgc3JjL3N0YWNrcy9CYXNlQXBwbGljYXRpb25TdGFjay50c2AgfCBCYXNlIHN0YWNrIHdpdGggVlBDLCBBUEksIHN0YXRpYyB3ZWJzaXRlLCBEYXRhZG9nLCBhbmQgUm91dGUgNTMgd2lyZWQgdXAgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9zdGFja3MvR2l0SHViUm9sZXNTdGFjay50c2AgfCBJQU0gcm9sZSBzdGFjayBmb3IgR2l0SHViIEFjdGlvbnMgT0lEQyBhdXRoZW50aWNhdGlvbiB8JyxcbiAgICAgICAgICAnfCBgc3JjL2NvbnN0cnVjdHMvQXBpLnRzYCB8IEFQSSBHYXRld2F5ICsgTGFtYmRhIGNvbnN0cnVjdCB3aXRoIENsZXJrIEpXVCBhdXRob3JpemVyIHwnLFxuICAgICAgICAgICd8IGBzcmMvY29uc3RydWN0cy9TdGF0aWNXZWJzaXRlLnRzYCB8IENsb3VkRnJvbnQgKyBTMyArIEFDTSArIFJvdXRlIDUzIGNvbnN0cnVjdCB8JyxcbiAgICAgICAgICAnfCBgc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9BcGkuRnVuY3Rpb24udHNgIHwgTGFtYmRhIGhhbmRsZXIgZW50cnkgcG9pbnQgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9hc3BlY3RzL0RhdGFEb2dBc3BlY3QudHNgIHwgQ0RLIGFzcGVjdCB0aGF0IHdpcmVzIGFsbCBMYW1iZGEgZnVuY3Rpb25zIHRvIERhdGFkb2cgfCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIyBGcm9udGVuZCAoYHdlYi9gKScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ3wgRmlsZSB8IERlc2NyaXB0aW9uIHwnLFxuICAgICAgICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS18JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9tYWluLnRzeGAgfCBSZWFjdCBhcHAgZW50cnkgcG9pbnQgd2l0aCBDbGVyayBhbmQgUmVhY3QgUXVlcnkgcHJvdmlkZXJzIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL0FwcC50c3hgIHwgUm9vdCBhcHBsaWNhdGlvbiBjb21wb25lbnQgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvQXBwLmNzc2AgLyBgd2ViL3NyYy9pbmRleC5jc3NgIHwgQmFzZSBzdHlsZXNoZWV0cyAoVGFpbHdpbmQgQ1NTIHY0KSB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9jb25maWcudHNgIHwgYHVzZUNvbmZpZygpYCBob29rIOKAlCBsb2FkcyBydW50aW1lIGNvbmZpZyBmcm9tIGBjb25maWcuanNvbmAgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvc2VydmljZXMvQmFzZVNlcnZpY2UudHNgIHwgYHVzZUJhc2VRdWVyeSgpYCDigJQgYXV0aGVudGljYXRlZCBBUEkgZmV0Y2ggaG9vayB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9zZXJ2aWNlcy9Sb290U2VydmljZS50c2AgfCBFeGFtcGxlIHNlcnZpY2UgdXNpbmcgYHVzZUJhc2VRdWVyeWAgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9wdWJsaWMvY29uZmlnLmpzb25gIHwgUnVudGltZSBjb25maWcgKEFQSSBiYXNlIFVSTCwgQ2xlcmsgcHVibGlzaGFibGUga2V5KSB8JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMjIEdpdEh1YiBBY3Rpb25zIFdvcmtmbG93cyAoYC5naXRodWIvd29ya2Zsb3dzL2ApJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnfCBGaWxlIHwgVHJpZ2dlciB8JyxcbiAgICAgICAgICAnfC0tLS0tLXwtLS0tLS0tLS18JyxcbiAgICAgICAgICAnfCBgcHItZGVwbG95LnltbGAgfCBPbiBwdWxsIHJlcXVlc3Qgb3Blbi91cGRhdGUg4oCUIGRlcGxveXMgYSBwZXItUFIgZGV2IHN0YWNrIHwnLFxuICAgICAgICAgICd8IGBwci1jbGVhbnVwLnltbGAgfCBPbiBwdWxsIHJlcXVlc3QgY2xvc2Ug4oCUIHRlYXJzIGRvd24gdGhlIHBlci1QUiBkZXYgc3RhY2sgfCcsXG4gICAgICAgICAgJ3wgYHN0YWdpbmctZGVwbG95LnltbGAgfCBPbiBwdXNoIHRvIGBtYWluYCDigJQgZGVwbG95cyB0byBzdGFnaW5nIHwnLFxuICAgICAgICAgICd8IGBwcm9kdWN0aW9uLWRlcGxveS55bWxgIHwgTWFudWFsbHkgdHJpZ2dlcmVkIOKAlCBkZXBsb3lzIHRvIHByb2R1Y3Rpb24gfCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJy0tLScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIEZpbGVzIFlvdSBDYW4gRWRpdCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1RoZXNlIGZpbGVzIGFyZSBnZW5lcmF0ZWQgb25jZSBhbmQgbmV2ZXIgb3ZlcndyaXR0ZW4gYnkgQmF0bWFuLiBNb2RpZnkgdGhlbSBmcmVlbHkuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnfCBGaWxlIHwgV2hhdCB0byBkbyB3aXRoIGl0IHwnLFxuICAgICAgICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfCcsXG4gICAgICAgICAgJ3wgYHNyYy9zdGFja3MvQXBwbGljYXRpb25TdGFjay50c2AgfCAqKlN0YXJ0IGhlcmUuKiogQWRkIENESyBjb25zdHJ1Y3RzIHRvIGJ1aWxkIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL0FwaS50c2AgfCBFeHRlbmQgdGhlIEFQSSDigJQgYWRkIExhbWJkYSBpbnRlZ3JhdGlvbnMsIHJvdXRlcywgb3Igb3ZlcnJpZGUgbWV0aG9kcyB8JyxcbiAgICAgICAgICAnfCBgc3JjL2NvbnN0cnVjdHMvU3RhdGljV2Vic2l0ZS50c2AgfCBDdXN0b21pemUgQ2xvdWRGcm9udCBiZWhhdmlvcnMsIFMzIHNldHRpbmdzLCBvciBkZXBsb3ltZW50IG9wdGlvbnMgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvQXBpLkZ1bmN0aW9uLnRzYCB8IEltcGxlbWVudCB5b3VyIExhbWJkYSBoYW5kbGVyIGxvZ2ljIHwnLFxuICAgICAgICAgICd8IGBzcmMvc3RhY2tzL0dpdEh1YlJvbGVzU3RhY2sudHNgIHwgQWRkIElBTSBwZXJtaXNzaW9ucyBuZWVkZWQgYnkgR2l0SHViIEFjdGlvbnMgfCcsXG4gICAgICAgICAgJ3wgYHNyYy9tYWluLnRzYCB8IEFkanVzdCBzdGFjayBpbnN0YW50aWF0aW9uIG9yIGFkZCBhZGRpdGlvbmFsIHN0YWNrcyB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9BcHAudHN4YCB8IEJ1aWxkIHlvdXIgVUkgaGVyZSB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9BcHAuY3NzYCAvIGB3ZWIvc3JjL2luZGV4LmNzc2AgfCBTdHlsZSB5b3VyIGFwcGxpY2F0aW9uIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL21haW4udHN4YCB8IEFkanVzdCB0b3AtbGV2ZWwgcHJvdmlkZXJzIG9yIHJvdXRpbmcgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9zcmMvc2VydmljZXMvUm9vdFNlcnZpY2UudHNgIHwgQWRkIG9yIHJlcGxhY2UgQVBJIHNlcnZpY2UgaG9va3MgfCcsXG4gICAgICAgICAgJ3wgYHdlYi9wdWJsaWMvY29uZmlnLmpzb25gIHwgVXBkYXRlIGZvciBsb2NhbCBkZXZlbG9wbWVudCAoQVBJIFVSTCwgQ2xlcmsga2V5KSB8JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgRmlsZXMgWW91IENhbm5vdCBFZGl0JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnVGhlc2UgZmlsZXMgYXJlICoqbWFuYWdlZCBieSBCYXRtYW4qKiBhbmQgd2lsbCBiZSBvdmVyd3JpdHRlbiBldmVyeSB0aW1lIGBucHggcHJvamVuYCBydW5zLiBEbyBub3QgZWRpdCB0aGVtIGRpcmVjdGx5IOKAlCBtYWtlIGNoYW5nZXMgaW4gYC5wcm9qZW5yYy50c2AgaW5zdGVhZC4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICc+IFshSU1QT1JUQU5UXScsXG4gICAgICAgICAgJz4gSWYgeW91IGhhdmUgQU5ZIGNoYW5nZXMgeW91IHdhbnQgdG8gbWFrZSB0byB0aGVzZSBmaWxlcywgbm90aWZ5ICN0ZWFtLWJhdG1hbiBvbiBTbGFjay4gJyxcbiAgICAgICAgICAnPiBXZSBtYWludGFpbiB0aGVzZSBmaWxlcyBhcyBwYXJ0IG9mIHRoZSBjb3JlIEJhdG1hbiBleHBlcmllbmNlLCBhbmQgeW91ciBmZWVkYmFjayBpcyBjcnVjaWFsIHRvIGVuc3VyZSB0aGV5IG1lZXQgeW91ciBuZWVkcy4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICd8IEZpbGUgfCBXaHkgaXRcXCdzIG1hbmFnZWQgfCcsXG4gICAgICAgICAgJ3wtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18JyxcbiAgICAgICAgICAnfCBgc3JjL3N0YWNrcy9CYXNlQXBwbGljYXRpb25TdGFjay50c2AgfCBDb3JlIHN0YWNrIHdpcmluZyDigJQgdXBkYXRlZCB3aXRoIEJhdG1hbiByZWxlYXNlcyB8JyxcbiAgICAgICAgICAnfCBgc3JjL2FzcGVjdHMvRGF0YURvZ0FzcGVjdC50c2AgfCBEYXRhZG9nIENESyBhc3BlY3QgfCcsXG4gICAgICAgICAgJ3wgYHdlYi92aXRlLmNvbmZpZy50c2AgfCBWaXRlIGNvbmZpZ3VyYXRpb24gfCcsXG4gICAgICAgICAgJ3wgYHdlYi9lc2xpbnQuY29uZmlnLmpzYCB8IEVTTGludCBjb25maWd1cmF0aW9uIHwnLFxuICAgICAgICAgICd8IGB3ZWIvcG9zdGNzcy5jb25maWcuanNgIHwgUG9zdENTUyAvIFRhaWx3aW5kIGNvbmZpZ3VyYXRpb24gfCcsXG4gICAgICAgICAgJ3wgYHdlYi9pbmRleC5odG1sYCB8IEhUTUwgZW50cnkgcG9pbnQgfCcsXG4gICAgICAgICAgJ3wgYHdlYi90c2NvbmZpZy5qc29uYCAvIGB3ZWIvdHNjb25maWcuYXBwLmpzb25gIC8gYHdlYi90c2NvbmZpZy5ub2RlLmpzb25gIHwgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL3ZpdGUtZW52LmQudHNgIHwgVml0ZSB0eXBlIGRlY2xhcmF0aW9ucyB8JyxcbiAgICAgICAgICAnfCBgd2ViL3NyYy9jb25maWcudHNgIHwgUnVudGltZSBjb25maWcgaG9vayDigJQgc2hhcGUgZHJpdmVuIGJ5IGAucHJvamVucmMudHNgIHwnLFxuICAgICAgICAgICd8IGB3ZWIvc3JjL3NlcnZpY2VzL0Jhc2VTZXJ2aWNlLnRzYCB8IEJhc2UgYXV0aGVudGljYXRlZCBmZXRjaCBob29rIHwnLFxuICAgICAgICAgICd8IGAuZ2l0aHViL0NPREVPV05FUlNgIHwgQ29kZSBvd25lcnNoaXAgcG9saWN5IHwnLFxuICAgICAgICAgICd8IGAuZ2l0aHViL3dvcmtmbG93cy8qLnltbGAgfCBBbGwgQ0kvQ0Qgd29ya2Zsb3dzIHwnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICc+ICoqVGlwOioqIEZpbGVzIHdpdGggYSBgfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLiB+fmAgaGVhZGVyIGFyZSBtYW5hZ2VkIGZpbGVzLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJy0tLScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIFdoZXJlIHRvIFN0YXJ0JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnMS4gKipgc3JjL3N0YWNrcy9BcHBsaWNhdGlvblN0YWNrLnRzYCoqIOKAlCBBZGQgeW91ciBDREsgY29uc3RydWN0cyBoZXJlLiBUaGUgYmFzZSBzdGFjayBhbHJlYWR5IHByb3ZpZGVzIGB0aGlzLmFwaWAsIGB0aGlzLnZwY2AsIGB0aGlzLmhvc3RlZFpvbmVgLCBhbmQgYHRoaXMuZGF0YWRvZ2AgYXMgcHJvdGVjdGVkIHByb3BlcnRpZXMuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnMi4gKipgd2ViL2AqKiDigJQgQnVpbGQgeW91ciBmcm9udGVuZC4gU3RhcnQgd2l0aCBgd2ViL3NyYy9BcHAudHN4YCBhbmQgYWRkIHNlcnZpY2VzIGFsb25nc2lkZSBgd2ViL3NyYy9zZXJ2aWNlcy9Sb290U2VydmljZS50c2AuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnMy4gKipgc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9BcGkuRnVuY3Rpb24udHNgKiog4oCUIEltcGxlbWVudCB5b3VyIGJhY2tlbmQgTGFtYmRhIGhhbmRsZXIgbG9naWMgaGVyZS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICctLS0nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBEZXZlbG9wbWVudCBXb3JrZmxvdycsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ2BgYGJhc2gnLFxuICAgICAgICAgICcjIEluc3RhbGwgZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgICAneWFybiBpbnN0YWxsJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyBTdGFydCBsb2NhbCBkZXYgc2VydmVyIChiYWNrZW5kIExhbWJkYSArIFZpdGUgZnJvbnRlbmQgaW4gcGFyYWxsZWwpJyxcbiAgICAgICAgICAneWFybiBkZXYnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIERlcGxveSBhIHBlcnNvbmFsIGRldiBzdGFjayB0byBBV1MnLFxuICAgICAgICAgICd5YXJuIGNkazpkZXYgLS1jb250ZXh0IGxvY2FsLWRldi1wcmVmaXg9eW91ci1oYW5kbGUgZGVwbG95JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyBSdW4gdGVzdHMnLFxuICAgICAgICAgICd5YXJuIHRlc3QnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIFJlLXN5bnRoZXNpemUgcHJvamVjdCBmaWxlcyBhZnRlciBlZGl0aW5nIC5wcm9qZW5yYy50cycsXG4gICAgICAgICAgJ25weCBwcm9qZW4nLFxuICAgICAgICAgICdgYGAnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICctLS0nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBVcGdyYWRpbmcgQmF0bWFuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnYGBgYmFzaCcsXG4gICAgICAgICAgJ3lhcm4gYWRkIEBtYWNlZG9uLXRlY2hub2xvZ2llcy9iYXRtYW5AbGF0ZXN0JyxcbiAgICAgICAgICAnbnB4IHByb2plbicsXG4gICAgICAgICAgJ2BgYCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1RoaXMgdXBkYXRlcyBhbGwgbWFuYWdlZCBmaWxlcyB0byB0aGUgbGF0ZXN0IEJhdG1hbiBzdGFuZGFyZHMuIFlvdXIgZWRpdGFibGUgc2FtcGxlIGZpbGVzIGFyZSBuZXZlciB0b3VjaGVkLicsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG5cbiAgICAvLyBDcmVhdGUgc3RhbmRhcmQgcHJvamVjdCBmaWxlc1xuICAgIGNvbnN0IFBSSU1BUllfQUNDT1VOVCA9ICcwMTU5NTU4MTcyNjMnO1xuICAgIGNvbnN0IFBSSU1BUllfUkVHSU9OID0gJ3VzLWVhc3QtMSc7XG5cbiAgICBuZXcgQXBwbGljYXRpb24odGhpcywge1xuICAgICAgZ2l0aHViUmVwb3NpdG9yeTogYG1hY2Vkb24tdGVjaG5vbG9naWVzLyR7b3B0aW9ucy5uYW1lfWAsXG4gICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiAncGtfdGVzdF9hVzUwWlc1elpTMXNaV1ZqYUMweU1pNWpiR1Z5YXk1aFkyTnZkVzUwY3k1a1pYWWsnLFxuICAgICAgZGV2OiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZGV2LFxuICAgICAgfSxcbiAgICAgIHN0YWdpbmc6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5zdGFnaW5nLFxuICAgICAgfSxcbiAgICAgIHByb2Q6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5kZXYsXG4gICAgICB9LFxuICAgICAgYWRkaXRpb25hbFRhZ3M6IG9wdGlvbnMuYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG5cbiAgICBuZXcgR2l0SHViUm9sZXNGaWxlKHRoaXMsIHtcbiAgICAgIGFjY291bnQ6IFBSSU1BUllfQUNDT1VOVCxcbiAgICAgIHByaW1hcnlSZWdpb246IFBSSU1BUllfUkVHSU9OLFxuICAgIH0pO1xuXG4gICAgbmV3IENvZGVPd25lcnNGaWxlKHRoaXMsIHtcbiAgICAgIGFkZGl0aW9uYWxPd25lcnM6IG9wdGlvbnMuYWRkaXRpb25hbENvZGVPd25lcnMsXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YURvZ0FzcGVjdEZpbGUodGhpcyk7XG5cbiAgICBjb25zdCB2aXRlUmVhY3QgPSBuZXcgVml0ZVJlYWN0UHJvamVjdCh7XG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgb3V0ZGlyOiAnd2ViJyxcbiAgICB9KTtcbiAgICB2aXRlUmVhY3QuYWRkQ29uZmlnRmllbGQoJ3NvbWV0aGluZycsICdudW1iZXInKTtcbiAgICB2aXRlUmVhY3QuYWRkQ29uZmlnRmllbGQoJ3NvbWV0aGluZ0Vsc2UnLCAnc3RyaW5nJyk7XG5cbiAgICBjb25zdCBjb25jdXJyZW50bHkgPSAoLi4uYXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIHJldHVybiBgY29uY3VycmVudGx5ICR7YXJncy5tYXAoYSA9PiBgXCIke2F9XCJgKS5qb2luKCcgJyl9YDtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGRUYXNrKCdkZXYnLCB7XG4gICAgICBleGVjOiBjb25jdXJyZW50bHkoXG4gICAgICAgICdub2RlbW9uIC0td2F0Y2ggLi9zcmMvY29uc3RydWN0cy9oYW5kbGVyIC0td2F0Y2ggLi9sb2NhbC9kZXYudHMgLi9sb2NhbC9kZXYudHMnLFxuICAgICAgICB2aXRlUmVhY3QuZGV2Q29tbWFuZCxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFRhc2soJ2NkazpkZXYnLCB7XG4gICAgICBleGVjOiAneWFybiBjZGsgLWEgXCJucHggdHMtbm9kZSAtUCB0c2NvbmZpZy5qc29uIC0tcHJlZmVyLXRzLWV4dHMgc3JjL0xvY2FsRGV2QXBwLnRzXCInLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cblxuICB9XG59XG4iXX0=
248
+ BatmanProject[_a] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.9.0" };
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,5 @@
1
+ import { SampleFile } from 'projen';
2
+ import { AwsCdkTypeScriptApp } from 'projen/lib/awscdk';
3
+ export declare class BootcampApplicationStackFile extends SampleFile {
4
+ constructor(project: AwsCdkTypeScriptApp);
5
+ }
@@ -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
+ }