@macedon-technologies/batman 1.32.1 → 1.34.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.
Files changed (37) hide show
  1. package/.jsii +2 -2
  2. package/lib/BatmanProject.js +1 -1
  3. package/lib/BootcampProject.js +1 -1
  4. package/lib/CodeOwnersFile.js +1 -1
  5. package/lib/DataDogAspectFile.js +5 -18
  6. package/lib/PrAutoMergeWorkflow.js +1 -1
  7. package/lib/ProductionDeployWorkflow.js +1 -1
  8. package/lib/SecretConstructFile.js +4 -54
  9. package/lib/SecretHandlerFiles.js +6 -173
  10. package/lib/SoftwareFactoryFiles.js +1 -1
  11. package/lib/StagingDeployWorkflow.js +1 -1
  12. package/lib/templates.d.ts +16 -0
  13. package/lib/templates.js +104 -0
  14. package/package.json +2 -1
  15. package/templates/app/architecture-rules/README.md +97 -0
  16. package/templates/app/architecture-rules/check.ts +218 -0
  17. package/templates/app/architecture-rules/rules.json +3 -0
  18. package/templates/app/architecture-rules/tsconfig.json +14 -0
  19. package/templates/app/openspec-gates/check-tasks-complete.ts +44 -0
  20. package/templates/app/openspec-gates/tsconfig.json +13 -0
  21. package/templates/app/package.json +74 -0
  22. package/templates/app/pnpm-lock.yaml +3888 -0
  23. package/templates/app/pnpm-workspace.yaml +7 -0
  24. package/templates/app/src/aspects/DataDogAspect.ts +14 -0
  25. package/templates/app/src/constructs/Secret.ts +50 -0
  26. package/templates/app/src/constructs/handler/Secret.Function.ts +38 -0
  27. package/templates/app/src/constructs/handler/secret/client.ts +5 -0
  28. package/templates/app/src/constructs/handler/secret/createSecretValue.ts +30 -0
  29. package/templates/app/src/constructs/handler/secret/didRandomPropertiesChange.ts +13 -0
  30. package/templates/app/src/constructs/handler/secret/updateSecretValue.ts +71 -0
  31. package/templates/app/swamp-bootstrap/pull-extensions.ts +68 -0
  32. package/templates/app/swamp-bootstrap/tsconfig.json +13 -0
  33. package/templates/app/test/DataDogAspect.test.ts +31 -0
  34. package/templates/app/test/Secret.test.ts +40 -0
  35. package/templates/app/test/didRandomPropertiesChange.test.ts +19 -0
  36. package/templates/app/test/tsconfig.json +13 -0
  37. package/templates/app/tsconfig.json +50 -0
package/.jsii CHANGED
@@ -1393,6 +1393,6 @@
1393
1393
  "symbolId": "src/WorkflowActionVersions:WorkflowActionVersions"
1394
1394
  }
1395
1395
  },
1396
- "version": "1.32.1",
1397
- "fingerprint": "SA1psU4XUCoyznTMo0IHlvOXqLkoIjQxxTlCYAZMqR0="
1396
+ "version": "1.34.0",
1397
+ "fingerprint": "KieBAE1cnDi5Foi2STefR2reOrUwymxBEaGz+TLqRIw="
1398
1398
  }
@@ -12,7 +12,7 @@ const SoftwareFactoryFiles_1 = require("./SoftwareFactoryFiles");
12
12
  const utils_1 = require("./utils");
13
13
  const ViteReactProject_1 = require("./ViteReactProject");
14
14
  class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.32.1" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.34.0" };
16
16
  constructor(options) {
17
17
  super({
18
18
  ...options,
@@ -12,7 +12,7 @@ const SoftwareFactoryFiles_1 = require("./SoftwareFactoryFiles");
12
12
  const utils_1 = require("./utils");
13
13
  const ViteReactProject_1 = require("./ViteReactProject");
14
14
  class BootcampProject extends awscdk_1.AwsCdkTypeScriptApp {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BootcampProject", version: "1.32.1" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BootcampProject", version: "1.34.0" };
16
16
  constructor(options) {
17
17
  super({
18
18
  ...options,
@@ -4,7 +4,7 @@ exports.CodeOwnersFile = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const projen_1 = require("projen");
6
6
  class CodeOwnersFile extends projen_1.TextFile {
7
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.32.1" };
7
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.34.0" };
8
8
  constructor(project, options = {}) {
9
9
  const defaultOwners = ['* @macedon-technologies/platform', '* @macedon-technologies/ai-development-team'];
10
10
  const allOwners = [...defaultOwners, ...(options.additionalOwners || [])];
@@ -2,28 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataDogAspectFile = void 0;
4
4
  const projen_1 = require("projen");
5
+ const templates_1 = require("./templates");
6
+ const DATADOG_ASPECT_PATH = 'src/aspects/DataDogAspect.ts';
5
7
  class DataDogAspectFile extends projen_1.TextFile {
6
8
  constructor(project) {
7
- super(project, 'src/aspects/DataDogAspect.ts', {
8
- lines: [
9
- "import { IAspect } from 'aws-cdk-lib';",
10
- "import { Function } from 'aws-cdk-lib/aws-lambda';",
11
- "import { IConstruct } from 'constructs';",
12
- "import { DatadogLambda } from 'datadog-cdk-constructs-v2'; // or v1",
13
- '',
14
- 'export class DataDogAspect implements IAspect {',
15
- ' constructor(private props: { datadog: DatadogLambda }) {}',
16
- '',
17
- ' visit(node: IConstruct): void {',
18
- ' if (node instanceof Function) {',
19
- ' this.props.datadog.addLambdaFunctions([node]);',
20
- ' }',
21
- ' }',
22
- '}',
23
- ],
9
+ super(project, DATADOG_ASPECT_PATH, {
10
+ lines: (0, templates_1.templateLines)(project, DATADOG_ASPECT_PATH),
24
11
  marker: true,
25
12
  });
26
13
  }
27
14
  }
28
15
  exports.DataDogAspectFile = DataDogAspectFile;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YURvZ0FzcGVjdEZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRGF0YURvZ0FzcGVjdEZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBR2xDLE1BQWEsaUJBQWtCLFNBQVEsaUJBQVE7SUFDN0MsWUFBWSxPQUE0QjtRQUN0QyxLQUFLLENBQUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFO1lBQzdDLEtBQUssRUFBRTtnQkFDTCx3Q0FBd0M7Z0JBQ3hDLG9EQUFvRDtnQkFDcEQsMENBQTBDO2dCQUMxQyxxRUFBcUU7Z0JBQ3JFLEVBQUU7Z0JBQ0YsaURBQWlEO2dCQUNqRCw2REFBNkQ7Z0JBQzdELEVBQUU7Z0JBQ0YsbUNBQW1DO2dCQUNuQyxxQ0FBcUM7Z0JBQ3JDLHNEQUFzRDtnQkFDdEQsT0FBTztnQkFDUCxLQUFLO2dCQUNMLEdBQUc7YUFDSjtZQUNELE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBdEJELDhDQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRG9nQXNwZWN0RmlsZSBleHRlbmRzIFRleHRGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCkge1xuICAgIHN1cGVyKHByb2plY3QsICdzcmMvYXNwZWN0cy9EYXRhRG9nQXNwZWN0LnRzJywge1xuICAgICAgbGluZXM6IFtcbiAgICAgICAgXCJpbXBvcnQgeyBJQXNwZWN0IH0gZnJvbSAnYXdzLWNkay1saWInO1wiLFxuICAgICAgICBcImltcG9ydCB7IEZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XCIsXG4gICAgICAgIFwiaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1wiLFxuICAgICAgICBcImltcG9ydCB7IERhdGFkb2dMYW1iZGEgfSBmcm9tICdkYXRhZG9nLWNkay1jb25zdHJ1Y3RzLXYyJzsgLy8gb3IgdjFcIixcbiAgICAgICAgJycsXG4gICAgICAgICdleHBvcnQgY2xhc3MgRGF0YURvZ0FzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3QgeycsXG4gICAgICAgICcgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvcHM6IHsgZGF0YWRvZzogRGF0YWRvZ0xhbWJkYSB9KSB7fScsXG4gICAgICAgICcnLFxuICAgICAgICAnICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7JyxcbiAgICAgICAgJyAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7JyxcbiAgICAgICAgJyAgICAgIHRoaXMucHJvcHMuZGF0YWRvZy5hZGRMYW1iZGFGdW5jdGlvbnMoW25vZGVdKTsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJ30nLFxuICAgICAgXSxcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YURvZ0FzcGVjdEZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRGF0YURvZ0FzcGVjdEZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBRWxDLDJDQUE0QztBQUU1QyxNQUFNLG1CQUFtQixHQUFHLDhCQUE4QixDQUFDO0FBRTNELE1BQWEsaUJBQWtCLFNBQVEsaUJBQVE7SUFDN0MsWUFBWSxPQUE0QjtRQUN0QyxLQUFLLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFO1lBQ2xDLEtBQUssRUFBRSxJQUFBLHlCQUFhLEVBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBUEQsOENBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSAncHJvamVuL2xpYi9hd3NjZGsnO1xuaW1wb3J0IHsgdGVtcGxhdGVMaW5lcyB9IGZyb20gJy4vdGVtcGxhdGVzJztcblxuY29uc3QgREFUQURPR19BU1BFQ1RfUEFUSCA9ICdzcmMvYXNwZWN0cy9EYXRhRG9nQXNwZWN0LnRzJztcblxuZXhwb3J0IGNsYXNzIERhdGFEb2dBc3BlY3RGaWxlIGV4dGVuZHMgVGV4dEZpbGUge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwKSB7XG4gICAgc3VwZXIocHJvamVjdCwgREFUQURPR19BU1BFQ1RfUEFUSCwge1xuICAgICAgbGluZXM6IHRlbXBsYXRlTGluZXMocHJvamVjdCwgREFUQURPR19BU1BFQ1RfUEFUSCksXG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -14,7 +14,7 @@ const PR_AUTO_MERGE_README_URL = 'https://github.com/macedon-technologies/platfo
14
14
  * workflows from pull request branches can't read the key. The job never checks out pull request code.
15
15
  */
16
16
  class PrAutoMergeWorkflow extends projen_1.YamlFile {
17
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.PrAutoMergeWorkflow", version: "1.32.1" };
17
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.PrAutoMergeWorkflow", version: "1.34.0" };
18
18
  constructor(project, options = {}) {
19
19
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);
20
20
  super(project, '.github/workflows/pr-auto-merge.yml', {
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const utils_1 = require("./utils");
8
8
  const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
9
9
  class ProductionDeployWorkflow extends projen_1.YamlFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.ProductionDeployWorkflow", version: "1.32.1" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.ProductionDeployWorkflow", version: "1.34.0" };
11
11
  constructor(project, options) {
12
12
  const packageManager = project.package.packageManager;
13
13
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SecretConstructFile = void 0;
4
4
  const projen_1 = require("projen");
5
+ const templates_1 = require("./templates");
6
+ const SECRET_CONSTRUCT_PATH = 'src/constructs/Secret.ts';
5
7
  /**
6
8
  * Scaffolds src/constructs/Secret.ts: a Secrets Manager secret that keeps
7
9
  * manually changed values across deploys. Copied from @matthewbonig/secret (MIT),
@@ -9,60 +11,8 @@ const projen_1 = require("projen");
9
11
  */
10
12
  class SecretConstructFile extends projen_1.SampleFile {
11
13
  constructor(project) {
12
- super(project, 'src/constructs/Secret.ts', {
13
- contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
14
- // This file is generated by Batman and is yours to modify.
15
- import { join } from 'path';
16
- import { CustomResource } from 'aws-cdk-lib';
17
- import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam';
18
- import { Runtime } from 'aws-cdk-lib/aws-lambda';
19
- import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
20
- import { Secret as AWSSecret, SecretProps, SecretStringGenerator } from 'aws-cdk-lib/aws-secretsmanager';
21
- import { Provider } from 'aws-cdk-lib/custom-resources';
22
- import { Construct } from 'constructs';
23
-
24
- export class Secret extends AWSSecret {
25
- constructor(scope: Construct, id: string, props: SecretProps) {
26
- super(scope, id, {
27
- ...props,
28
- generateSecretString: undefined, // explicitly set this to undefined so that we never use the built-in functionality
29
- });
30
-
31
- if (props.generateSecretString?.secretStringTemplate) {
32
- // now we're going to use a custom resource for this instead
33
- this.createCustomResource(props.generateSecretString);
34
- }
35
- }
36
-
37
- private createCustomResource(generateSecretString: SecretStringGenerator) {
38
- const eventHandler = new NodejsFunction(this, 'EventHandlerFunction', {
39
- runtime: Runtime.NODEJS_24_X,
40
- entry: join(__dirname, 'handler/Secret.Function.ts'),
41
- });
42
- this.grantWrite(eventHandler);
43
- this.grantRead(eventHandler);
44
- eventHandler.addToRolePolicy(new PolicyStatement({
45
- effect: Effect.ALLOW,
46
- resources: ['*'],
47
- actions: ['secretsmanager:GetRandomPassword'],
48
- }));
49
- const provider = new Provider(this, 'CustomResourceProvider', {
50
- onEventHandler: eventHandler,
51
- });
52
- const customResource = new CustomResource(this, 'GenerateSecretStringCR', {
53
- resourceType: 'Custom::GenerateSecretString',
54
- serviceToken: provider.serviceToken,
55
- properties: {
56
- Secret: this.secretArn,
57
- GenerateSecretString: generateSecretString,
58
- },
59
- });
60
- customResource.node.addDependency(this);
61
- }
62
- }
63
- `,
64
- });
14
+ super(project, SECRET_CONSTRUCT_PATH, (0, templates_1.templateFileOptions)(project, SECRET_CONSTRUCT_PATH));
65
15
  }
66
16
  }
67
17
  exports.SecretConstructFile = SecretConstructFile;
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjcmV0Q29uc3RydWN0RmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWNyZXRDb25zdHJ1Y3RGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUdwQzs7OztHQUlHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxtQkFBVTtJQUNqRCxZQUFZLE9BQTRCO1FBQ3RDLEtBQUssQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUU7WUFDekMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtEZjtTQUNJLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhERCxrREF3REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5cbi8qKlxuICogU2NhZmZvbGRzIHNyYy9jb25zdHJ1Y3RzL1NlY3JldC50czogYSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IHRoYXQga2VlcHNcbiAqIG1hbnVhbGx5IGNoYW5nZWQgdmFsdWVzIGFjcm9zcyBkZXBsb3lzLiBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlUKSxcbiAqIHdpdGggdGhlIGhhbmRsZXIgTGFtYmRhIG9uIE5vZGUuanMgMjQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRDb25zdHJ1Y3RGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHApIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvU2VjcmV0LnRzJywge1xuICAgICAgY29udGVudHM6IGAvLyBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vbWJvbmlnL3NlY3JldCkuXG4vLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IEJhdG1hbiBhbmQgaXMgeW91cnMgdG8gbW9kaWZ5LlxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgUnVudGltZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgeyBTZWNyZXQgYXMgQVdTU2VjcmV0LCBTZWNyZXRQcm9wcywgU2VjcmV0U3RyaW5nR2VuZXJhdG9yIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGNsYXNzIFNlY3JldCBleHRlbmRzIEFXU1NlY3JldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTZWNyZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzogdW5kZWZpbmVkLCAvLyBleHBsaWNpdGx5IHNldCB0aGlzIHRvIHVuZGVmaW5lZCBzbyB0aGF0IHdlIG5ldmVyIHVzZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb25hbGl0eVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmdlbmVyYXRlU2VjcmV0U3RyaW5nPy5zZWNyZXRTdHJpbmdUZW1wbGF0ZSkge1xuICAgICAgLy8gbm93IHdlJ3JlIGdvaW5nIHRvIHVzZSBhIGN1c3RvbSByZXNvdXJjZSBmb3IgdGhpcyBpbnN0ZWFkXG4gICAgICB0aGlzLmNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzLmdlbmVyYXRlU2VjcmV0U3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKGdlbmVyYXRlU2VjcmV0U3RyaW5nOiBTZWNyZXRTdHJpbmdHZW5lcmF0b3IpIHtcbiAgICBjb25zdCBldmVudEhhbmRsZXIgPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgJ0V2ZW50SGFuZGxlckZ1bmN0aW9uJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIGVudHJ5OiBqb2luKF9fZGlybmFtZSwgJ2hhbmRsZXIvU2VjcmV0LkZ1bmN0aW9uLnRzJyksXG4gICAgfSk7XG4gICAgdGhpcy5ncmFudFdyaXRlKGV2ZW50SGFuZGxlcik7XG4gICAgdGhpcy5ncmFudFJlYWQoZXZlbnRIYW5kbGVyKTtcbiAgICBldmVudEhhbmRsZXIuYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRSYW5kb21QYXNzd29yZCddLFxuICAgIH0pKTtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCAnQ3VzdG9tUmVzb3VyY2VQcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBldmVudEhhbmRsZXIsXG4gICAgfSk7XG4gICAgY29uc3QgY3VzdG9tUmVzb3VyY2UgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0dlbmVyYXRlU2VjcmV0U3RyaW5nQ1InLCB7XG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkdlbmVyYXRlU2VjcmV0U3RyaW5nJyxcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBTZWNyZXQ6IHRoaXMuc2VjcmV0QXJuLFxuICAgICAgICBHZW5lcmF0ZVNlY3JldFN0cmluZzogZ2VuZXJhdGVTZWNyZXRTdHJpbmcsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGN1c3RvbVJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzKTtcbiAgfVxufVxuYCxcbiAgICB9KTtcbiAgfVxufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjcmV0Q29uc3RydWN0RmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWNyZXRDb25zdHJ1Y3RGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUVwQywyQ0FBa0Q7QUFFbEQsTUFBTSxxQkFBcUIsR0FBRywwQkFBMEIsQ0FBQztBQUV6RDs7OztHQUlHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxtQkFBVTtJQUNqRCxZQUFZLE9BQTRCO1FBQ3RDLEtBQUssQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsSUFBQSwrQkFBbUIsRUFBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7Q0FDRjtBQUpELGtEQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSAncHJvamVuL2xpYi9hd3NjZGsnO1xuaW1wb3J0IHsgdGVtcGxhdGVGaWxlT3B0aW9ucyB9IGZyb20gJy4vdGVtcGxhdGVzJztcblxuY29uc3QgU0VDUkVUX0NPTlNUUlVDVF9QQVRIID0gJ3NyYy9jb25zdHJ1Y3RzL1NlY3JldC50cyc7XG5cbi8qKlxuICogU2NhZmZvbGRzIHNyYy9jb25zdHJ1Y3RzL1NlY3JldC50czogYSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IHRoYXQga2VlcHNcbiAqIG1hbnVhbGx5IGNoYW5nZWQgdmFsdWVzIGFjcm9zcyBkZXBsb3lzLiBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlUKSxcbiAqIHdpdGggdGhlIGhhbmRsZXIgTGFtYmRhIG9uIE5vZGUuanMgMjQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRDb25zdHJ1Y3RGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHApIHtcbiAgICBzdXBlcihwcm9qZWN0LCBTRUNSRVRfQ09OU1RSVUNUX1BBVEgsIHRlbXBsYXRlRmlsZU9wdGlvbnMocHJvamVjdCwgU0VDUkVUX0NPTlNUUlVDVF9QQVRIKSk7XG4gIH1cbn1cbiJdfQ==
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SecretHandlerFiles = void 0;
4
4
  const projen_1 = require("projen");
5
+ const templates_1 = require("./templates");
6
+ const HANDLER_ENTRY_PATH = 'src/constructs/handler/Secret.Function.ts';
7
+ const HANDLER_DIR = 'src/constructs/handler/secret';
5
8
  /**
6
9
  * Scaffolds the Lambda handler sources used by the generated Secret construct
7
10
  * (src/constructs/Secret.ts). Copied from @matthewbonig/secret (MIT).
@@ -11,179 +14,9 @@ const projen_1 = require("projen");
11
14
  */
12
15
  class SecretHandlerFiles {
13
16
  constructor(project) {
14
- new projen_1.SampleFile(project, 'src/constructs/handler/Secret.Function.ts', {
15
- contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
16
- // This file is generated by Batman and is yours to modify.
17
- import { createSecretValue } from './secret/createSecretValue';
18
- import { updateSecretValue } from './secret/updateSecretValue';
19
-
20
- interface CustomResource {
21
- RequestType: 'Create' | 'Update' | 'Delete';
22
- LogicalResourceId: string;
23
- ResourceProperties: any;
24
- OldResourceProperties?: any;
25
- PhysicalResourceId?: string;
26
- }
27
-
28
- export const handler = async (event: CustomResource) => {
29
- console.log('Received event:', JSON.stringify(event, null, 2));
30
-
31
- switch (event.RequestType) {
32
- case 'Create':
33
- console.log(\`Create secret value for secret \${event.LogicalResourceId};\`);
34
- await createSecretValue({
35
- secretArn: event.ResourceProperties.Secret,
36
- generateSecretString: event.ResourceProperties.GenerateSecretString,
37
- });
38
- break;
39
- case 'Update':
40
- console.log('Updating secret with physical id:', event.PhysicalResourceId);
41
- await updateSecretValue({
42
- secretArn: event.ResourceProperties.Secret,
43
- generateSecretString: event.ResourceProperties.GenerateSecretString,
44
- oldGenerateSecretString: event.OldResourceProperties.GenerateSecretString,
45
- });
46
- break;
47
- case 'Delete':
48
- console.log('Deleting secret with physical id:', event.PhysicalResourceId);
49
- console.log('Doing nothing. deleting secrets requires no work at all.');
50
- break;
51
- }
52
- };
53
- `,
54
- });
55
- new projen_1.SampleFile(project, 'src/constructs/handler/secret/client.ts', {
56
- contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
57
- // This file is generated by Batman and is yours to modify.
58
- import { SecretsManager } from '@aws-sdk/client-secrets-manager';
59
-
60
- export const client = new SecretsManager({});
61
- `,
62
- });
63
- new projen_1.SampleFile(project, 'src/constructs/handler/secret/createSecretValue.ts', {
64
- contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
65
- // This file is generated by Batman and is yours to modify.
66
- import { GetRandomPasswordCommand, PutSecretValueCommand } from '@aws-sdk/client-secrets-manager';
67
- import { client } from './client';
68
-
69
- export async function createSecretValue({ generateSecretString, secretArn }: {
70
- secretArn: any;
71
- generateSecretString: any;
72
- }) {
73
- // since this is a create, we can just write the value as-is...
74
- const secretValue = JSON.parse(generateSecretString.secretStringTemplate);
75
- if (generateSecretString.generateStringKey) {
76
- const randomValue = await client.send(new GetRandomPasswordCommand({
77
- ExcludeCharacters: generateSecretString.excludeCharacters,
78
- ExcludeLowercase: generateSecretString.excludeLowercase,
79
- ExcludeNumbers: generateSecretString.excludeNumbers,
80
- ExcludePunctuation: generateSecretString.excludePunctuation,
81
- ExcludeUppercase: generateSecretString.excludeUppercase,
82
- IncludeSpace: generateSecretString.includeSpace,
83
- PasswordLength: generateSecretString.passwordLength,
84
- RequireEachIncludedType: generateSecretString.requireEachIncludedType,
85
- }));
86
- secretValue[generateSecretString.generateStringKey] = randomValue.RandomPassword;
87
- }
88
-
89
- await client.send(new PutSecretValueCommand({
90
- SecretId: secretArn,
91
- SecretString: JSON.stringify(secretValue),
92
- }));
93
- }
94
- `,
95
- });
96
- new projen_1.SampleFile(project, 'src/constructs/handler/secret/didRandomPropertiesChange.ts', {
97
- contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
98
- // This file is generated by Batman and is yours to modify.
99
- export function didRandomPropertiesChange(oldGenerateSecretString: any, generateSecretString: any) {
100
- return oldGenerateSecretString.excludeCharacters !== generateSecretString.excludeCharacters ||
101
- oldGenerateSecretString.excludeLowercase !== generateSecretString.excludeLowercase ||
102
- oldGenerateSecretString.excludeNumbers !== generateSecretString.excludeNumbers ||
103
- oldGenerateSecretString.excludePunctuation !== generateSecretString.excludePunctuation ||
104
- oldGenerateSecretString.excludeUppercase !== generateSecretString.excludeUppercase ||
105
- oldGenerateSecretString.includeSpace !== generateSecretString.includeSpace ||
106
- oldGenerateSecretString.passwordLength !== generateSecretString.passwordLength ||
107
- oldGenerateSecretString.requireEachIncludedType !== generateSecretString.requireEachIncludedType;
108
-
109
- }
110
- `,
111
- });
112
- new projen_1.SampleFile(project, 'src/constructs/handler/secret/updateSecretValue.ts', {
113
- contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
114
- // This file is generated by Batman and is yours to modify.
115
- import {
116
- GetRandomPasswordCommand,
117
- GetSecretValueCommand,
118
- PutSecretValueCommand,
119
- } from '@aws-sdk/client-secrets-manager';
120
- import { client } from './client';
121
- import { didRandomPropertiesChange } from './didRandomPropertiesChange';
122
-
123
- export async function updateSecretValue({ oldGenerateSecretString, generateSecretString, secretArn }: {
124
- secretArn: any;
125
- generateSecretString: any;
126
- oldGenerateSecretString: any;
127
- }) {
128
- // let's get the existing value
129
- const existingSecretValue = await client.send(new GetSecretValueCommand({
130
- SecretId: secretArn,
131
- }));
132
- // and parse the existing value
133
- let parsedValue: any = {};
134
-
135
- try {
136
- parsedValue = JSON.parse(existingSecretValue.SecretString!);
137
- } catch (err) {
138
- // the existing value couldn't be parsed, it was probably a random string.
139
- // let's go ahead and just start fresh then,
140
- }
141
-
142
- // now let's check what properties have changed
143
- const newSecretStringTemplate = JSON.parse(generateSecretString.secretStringTemplate);
144
- const oldSecretStringTemplate = JSON.parse(oldGenerateSecretString.secretStringTemplate);
145
- for (const key in newSecretStringTemplate) {
146
- if (oldSecretStringTemplate[key] === undefined) {
147
- // ok, so here's something to add...
148
- parsedValue[key] = newSecretStringTemplate[key];
149
- }
150
- if (oldSecretStringTemplate[key] !== newSecretStringTemplate[key]) {
151
- // ok, so here's something to update...
152
- parsedValue[key] = newSecretStringTemplate[key];
153
- }
154
- }
155
- for (const key in oldSecretStringTemplate) {
156
- if (newSecretStringTemplate[key] === undefined) {
157
- // ok, so here's something to remove...
158
- delete parsedValue[key];
159
- }
160
- }
161
-
162
- // did anything around the GenerateStringKey change?
163
- if (didRandomPropertiesChange(oldGenerateSecretString, generateSecretString)
164
- || generateSecretString.generateStringKey !== oldGenerateSecretString.generateStringKey) {
165
- const { RandomPassword: newRandomValue } = await client.send(new GetRandomPasswordCommand({
166
- ExcludeLowercase: generateSecretString.excludeLowercase === 'true',
167
- ExcludeNumbers: generateSecretString.excludeNumbers === 'true',
168
- ExcludePunctuation: generateSecretString.excludePunctuation === 'true',
169
- ExcludeUppercase: generateSecretString.excludeUppercase === 'true',
170
- IncludeSpace: generateSecretString.includeSpace === 'true',
171
- PasswordLength: +generateSecretString.passwordLength,
172
- RequireEachIncludedType: generateSecretString.requireEachIncludedType === 'true',
173
- }));
174
- parsedValue[generateSecretString.generateStringKey] = newRandomValue;
175
- }
176
-
177
- // update the secret in AWS
178
- await client.send(new PutSecretValueCommand({
179
- SecretId: secretArn,
180
- SecretString: JSON.stringify(parsedValue),
181
- }));
182
-
183
- }
184
- `,
185
- });
17
+ new projen_1.SampleFile(project, HANDLER_ENTRY_PATH, (0, templates_1.templateFileOptions)(project, HANDLER_ENTRY_PATH));
18
+ new projen_1.SampleDir(project, HANDLER_DIR, (0, templates_1.templateDirOptions)(project, HANDLER_DIR));
186
19
  }
187
20
  }
188
21
  exports.SecretHandlerFiles = SecretHandlerFiles;
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjcmV0SGFuZGxlckZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NlY3JldEhhbmRsZXJGaWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFHcEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0IsWUFBWSxPQUE0QjtRQUN0QyxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDJDQUEyQyxFQUFFO1lBQ25FLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQ2Y7U0FDSSxDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLHlDQUF5QyxFQUFFO1lBQ2pFLFFBQVEsRUFBRTs7Ozs7Q0FLZjtTQUNJLENBQUMsQ0FBQztRQUVILElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsb0RBQW9ELEVBQUU7WUFDNUUsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QmY7U0FDSSxDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDREQUE0RCxFQUFFO1lBQ3BGLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7OztDQWFmO1NBQ0ksQ0FBQyxDQUFDO1FBRUgsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSxvREFBb0QsRUFBRTtZQUM1RSxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUVmO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkxELGdEQW1MQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhbXBsZUZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcblxuLyoqXG4gKiBTY2FmZm9sZHMgdGhlIExhbWJkYSBoYW5kbGVyIHNvdXJjZXMgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIFNlY3JldCBjb25zdHJ1Y3RcbiAqIChzcmMvY29uc3RydWN0cy9TZWNyZXQudHMpLiBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlUKS5cbiAqXG4gKiBUaGUgZW50cnkgZmlsZSBpcyBkZWxpYmVyYXRlbHkgbm90IG5hbWVkICoubGFtYmRhLnRzLCBzbyBwcm9qZW4ncyBsYW1iZGFcbiAqIGF1dG8tZGlzY292ZXJ5IGRvZXMgbm90IGdlbmVyYXRlIGEgc2Vjb25kIGZ1bmN0aW9uIGNsYXNzIGZvciBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlY3JldEhhbmRsZXJGaWxlcyB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHApIHtcbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9TZWNyZXQuRnVuY3Rpb24udHMnLCB7XG4gICAgICBjb250ZW50czogYC8vIENvcGllZCBmcm9tIEBtYXR0aGV3Ym9uaWcvc2VjcmV0IChNSVQsIGh0dHBzOi8vZ2l0aHViLmNvbS9tYm9uaWcvc2VjcmV0KS5cbi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgQmF0bWFuIGFuZCBpcyB5b3VycyB0byBtb2RpZnkuXG5pbXBvcnQgeyBjcmVhdGVTZWNyZXRWYWx1ZSB9IGZyb20gJy4vc2VjcmV0L2NyZWF0ZVNlY3JldFZhbHVlJztcbmltcG9ydCB7IHVwZGF0ZVNlY3JldFZhbHVlIH0gZnJvbSAnLi9zZWNyZXQvdXBkYXRlU2VjcmV0VmFsdWUnO1xuXG5pbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2Uge1xuICBSZXF1ZXN0VHlwZTogJ0NyZWF0ZScgfCAnVXBkYXRlJyB8ICdEZWxldGUnO1xuICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICBSZXNvdXJjZVByb3BlcnRpZXM6IGFueTtcbiAgT2xkUmVzb3VyY2VQcm9wZXJ0aWVzPzogYW55O1xuICBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKGV2ZW50OiBDdXN0b21SZXNvdXJjZSkgPT4ge1xuICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgZXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcblxuICBzd2l0Y2ggKGV2ZW50LlJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSAnQ3JlYXRlJzpcbiAgICAgIGNvbnNvbGUubG9nKFxcYENyZWF0ZSBzZWNyZXQgdmFsdWUgZm9yIHNlY3JldCBcXCR7ZXZlbnQuTG9naWNhbFJlc291cmNlSWR9O1xcYCk7XG4gICAgICBhd2FpdCBjcmVhdGVTZWNyZXRWYWx1ZSh7XG4gICAgICAgIHNlY3JldEFybjogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlNlY3JldCxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFN0cmluZyxcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnVXBkYXRlJzpcbiAgICAgIGNvbnNvbGUubG9nKCdVcGRhdGluZyBzZWNyZXQgd2l0aCBwaHlzaWNhbCBpZDonLCBldmVudC5QaHlzaWNhbFJlc291cmNlSWQpO1xuICAgICAgYXdhaXQgdXBkYXRlU2VjcmV0VmFsdWUoe1xuICAgICAgICBzZWNyZXRBcm46IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5TZWNyZXQsXG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuR2VuZXJhdGVTZWNyZXRTdHJpbmcsXG4gICAgICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nOiBldmVudC5PbGRSZXNvdXJjZVByb3BlcnRpZXMuR2VuZXJhdGVTZWNyZXRTdHJpbmcsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICBjb25zb2xlLmxvZygnRGVsZXRpbmcgc2VjcmV0IHdpdGggcGh5c2ljYWwgaWQ6JywgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkKTtcbiAgICAgIGNvbnNvbGUubG9nKCdEb2luZyBub3RoaW5nLiBkZWxldGluZyBzZWNyZXRzIHJlcXVpcmVzIG5vIHdvcmsgYXQgYWxsLicpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5gLFxuICAgIH0pO1xuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgJ3NyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvc2VjcmV0L2NsaWVudC50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgLy8gQ29waWVkIGZyb20gQG1hdHRoZXdib25pZy9zZWNyZXQgKE1JVCwgaHR0cHM6Ly9naXRodWIuY29tL21ib25pZy9zZWNyZXQpLlxuLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBCYXRtYW4gYW5kIGlzIHlvdXJzIHRvIG1vZGlmeS5cbmltcG9ydCB7IFNlY3JldHNNYW5hZ2VyIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5cbmV4cG9ydCBjb25zdCBjbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXIoe30pO1xuYCxcbiAgICB9KTtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL3NlY3JldC9jcmVhdGVTZWNyZXRWYWx1ZS50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgLy8gQ29waWVkIGZyb20gQG1hdHRoZXdib25pZy9zZWNyZXQgKE1JVCwgaHR0cHM6Ly9naXRodWIuY29tL21ib25pZy9zZWNyZXQpLlxuLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBCYXRtYW4gYW5kIGlzIHlvdXJzIHRvIG1vZGlmeS5cbmltcG9ydCB7IEdldFJhbmRvbVBhc3N3b3JkQ29tbWFuZCwgUHV0U2VjcmV0VmFsdWVDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgeyBjbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZWNyZXRWYWx1ZSh7IGdlbmVyYXRlU2VjcmV0U3RyaW5nLCBzZWNyZXRBcm4gfToge1xuICBzZWNyZXRBcm46IGFueTtcbiAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueTtcbn0pIHtcbiAgLy8gc2luY2UgdGhpcyBpcyBhIGNyZWF0ZSwgd2UgY2FuIGp1c3Qgd3JpdGUgdGhlIHZhbHVlIGFzLWlzLi4uXG4gIGNvbnN0IHNlY3JldFZhbHVlID0gSlNPTi5wYXJzZShnZW5lcmF0ZVNlY3JldFN0cmluZy5zZWNyZXRTdHJpbmdUZW1wbGF0ZSk7XG4gIGlmIChnZW5lcmF0ZVNlY3JldFN0cmluZy5nZW5lcmF0ZVN0cmluZ0tleSkge1xuICAgIGNvbnN0IHJhbmRvbVZhbHVlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFJhbmRvbVBhc3N3b3JkQ29tbWFuZCh7XG4gICAgICBFeGNsdWRlQ2hhcmFjdGVyczogZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUNoYXJhY3RlcnMsXG4gICAgICBFeGNsdWRlTG93ZXJjYXNlOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlTG93ZXJjYXNlLFxuICAgICAgRXhjbHVkZU51bWJlcnM6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVOdW1iZXJzLFxuICAgICAgRXhjbHVkZVB1bmN0dWF0aW9uOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlUHVuY3R1YXRpb24sXG4gICAgICBFeGNsdWRlVXBwZXJjYXNlOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlVXBwZXJjYXNlLFxuICAgICAgSW5jbHVkZVNwYWNlOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5pbmNsdWRlU3BhY2UsXG4gICAgICBQYXNzd29yZExlbmd0aDogZ2VuZXJhdGVTZWNyZXRTdHJpbmcucGFzc3dvcmRMZW5ndGgsXG4gICAgICBSZXF1aXJlRWFjaEluY2x1ZGVkVHlwZTogZ2VuZXJhdGVTZWNyZXRTdHJpbmcucmVxdWlyZUVhY2hJbmNsdWRlZFR5cGUsXG4gICAgfSkpO1xuICAgIHNlY3JldFZhbHVlW2dlbmVyYXRlU2VjcmV0U3RyaW5nLmdlbmVyYXRlU3RyaW5nS2V5XSA9IHJhbmRvbVZhbHVlLlJhbmRvbVBhc3N3b3JkO1xuICB9XG5cbiAgYXdhaXQgY2xpZW50LnNlbmQobmV3IFB1dFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldEFybixcbiAgICBTZWNyZXRTdHJpbmc6IEpTT04uc3RyaW5naWZ5KHNlY3JldFZhbHVlKSxcbiAgfSkpO1xufVxuYCxcbiAgICB9KTtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL3NlY3JldC9kaWRSYW5kb21Qcm9wZXJ0aWVzQ2hhbmdlLnRzJywge1xuICAgICAgY29udGVudHM6IGAvLyBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vbWJvbmlnL3NlY3JldCkuXG4vLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IEJhdG1hbiBhbmQgaXMgeW91cnMgdG8gbW9kaWZ5LlxuZXhwb3J0IGZ1bmN0aW9uIGRpZFJhbmRvbVByb3BlcnRpZXNDaGFuZ2Uob2xkR2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueSwgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueSkge1xuICByZXR1cm4gb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUNoYXJhY3RlcnMgIT09IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVDaGFyYWN0ZXJzIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUxvd2VyY2FzZSAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUxvd2VyY2FzZSB8fFxuICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVOdW1iZXJzICE9PSBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlTnVtYmVycyB8fFxuICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVQdW5jdHVhdGlvbiAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZVB1bmN0dWF0aW9uIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZVVwcGVyY2FzZSAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZVVwcGVyY2FzZSB8fFxuICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLmluY2x1ZGVTcGFjZSAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuaW5jbHVkZVNwYWNlIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcucGFzc3dvcmRMZW5ndGggIT09IGdlbmVyYXRlU2VjcmV0U3RyaW5nLnBhc3N3b3JkTGVuZ3RoIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcucmVxdWlyZUVhY2hJbmNsdWRlZFR5cGUgIT09IGdlbmVyYXRlU2VjcmV0U3RyaW5nLnJlcXVpcmVFYWNoSW5jbHVkZWRUeXBlO1xuXG59XG5gLFxuICAgIH0pO1xuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgJ3NyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvc2VjcmV0L3VwZGF0ZVNlY3JldFZhbHVlLnRzJywge1xuICAgICAgY29udGVudHM6IGAvLyBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vbWJvbmlnL3NlY3JldCkuXG4vLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IEJhdG1hbiBhbmQgaXMgeW91cnMgdG8gbW9kaWZ5LlxuaW1wb3J0IHtcbiAgR2V0UmFuZG9tUGFzc3dvcmRDb21tYW5kLFxuICBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIFB1dFNlY3JldFZhbHVlQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgeyBjbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBkaWRSYW5kb21Qcm9wZXJ0aWVzQ2hhbmdlIH0gZnJvbSAnLi9kaWRSYW5kb21Qcm9wZXJ0aWVzQ2hhbmdlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVNlY3JldFZhbHVlKHsgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcsIGdlbmVyYXRlU2VjcmV0U3RyaW5nLCBzZWNyZXRBcm4gfToge1xuICBzZWNyZXRBcm46IGFueTtcbiAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueTtcbiAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueTtcbn0pIHtcbiAgLy8gbGV0J3MgZ2V0IHRoZSBleGlzdGluZyB2YWx1ZVxuICBjb25zdCBleGlzdGluZ1NlY3JldFZhbHVlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldEFybixcbiAgfSkpO1xuICAvLyBhbmQgcGFyc2UgdGhlIGV4aXN0aW5nIHZhbHVlXG4gIGxldCBwYXJzZWRWYWx1ZTogYW55ID0ge307XG5cbiAgdHJ5IHtcbiAgICBwYXJzZWRWYWx1ZSA9IEpTT04ucGFyc2UoZXhpc3RpbmdTZWNyZXRWYWx1ZS5TZWNyZXRTdHJpbmchKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gdGhlIGV4aXN0aW5nIHZhbHVlIGNvdWxkbid0IGJlIHBhcnNlZCwgaXQgd2FzIHByb2JhYmx5IGEgcmFuZG9tIHN0cmluZy5cbiAgICAvLyBsZXQncyBnbyBhaGVhZCBhbmQganVzdCBzdGFydCBmcmVzaCB0aGVuLFxuICB9XG5cbiAgLy8gbm93IGxldCdzIGNoZWNrIHdoYXQgcHJvcGVydGllcyBoYXZlIGNoYW5nZWRcbiAgY29uc3QgbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGUgPSBKU09OLnBhcnNlKGdlbmVyYXRlU2VjcmV0U3RyaW5nLnNlY3JldFN0cmluZ1RlbXBsYXRlKTtcbiAgY29uc3Qgb2xkU2VjcmV0U3RyaW5nVGVtcGxhdGUgPSBKU09OLnBhcnNlKG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLnNlY3JldFN0cmluZ1RlbXBsYXRlKTtcbiAgZm9yIChjb25zdCBrZXkgaW4gbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGUpIHtcbiAgICBpZiAob2xkU2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBvaywgc28gaGVyZSdzIHNvbWV0aGluZyB0byBhZGQuLi5cbiAgICAgIHBhcnNlZFZhbHVlW2tleV0gPSBuZXdTZWNyZXRTdHJpbmdUZW1wbGF0ZVtrZXldO1xuICAgIH1cbiAgICBpZiAob2xkU2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSAhPT0gbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSkge1xuICAgICAgLy8gb2ssIHNvIGhlcmUncyBzb21ldGhpbmcgdG8gdXBkYXRlLi4uXG4gICAgICBwYXJzZWRWYWx1ZVtrZXldID0gbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gb2xkU2VjcmV0U3RyaW5nVGVtcGxhdGUpIHtcbiAgICBpZiAobmV3U2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBvaywgc28gaGVyZSdzIHNvbWV0aGluZyB0byByZW1vdmUuLi5cbiAgICAgIGRlbGV0ZSBwYXJzZWRWYWx1ZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIGRpZCBhbnl0aGluZyBhcm91bmQgdGhlIEdlbmVyYXRlU3RyaW5nS2V5IGNoYW5nZT9cbiAgaWYgKGRpZFJhbmRvbVByb3BlcnRpZXNDaGFuZ2Uob2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcsIGdlbmVyYXRlU2VjcmV0U3RyaW5nKVxuICAgIHx8IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmdlbmVyYXRlU3RyaW5nS2V5ICE9PSBvbGRHZW5lcmF0ZVNlY3JldFN0cmluZy5nZW5lcmF0ZVN0cmluZ0tleSkge1xuICAgIGNvbnN0IHsgUmFuZG9tUGFzc3dvcmQ6IG5ld1JhbmRvbVZhbHVlIH0gPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0UmFuZG9tUGFzc3dvcmRDb21tYW5kKHtcbiAgICAgIEV4Y2x1ZGVMb3dlcmNhc2U6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVMb3dlcmNhc2UgPT09ICd0cnVlJyxcbiAgICAgIEV4Y2x1ZGVOdW1iZXJzOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlTnVtYmVycyA9PT0gJ3RydWUnLFxuICAgICAgRXhjbHVkZVB1bmN0dWF0aW9uOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlUHVuY3R1YXRpb24gPT09ICd0cnVlJyxcbiAgICAgIEV4Y2x1ZGVVcHBlcmNhc2U6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVVcHBlcmNhc2UgPT09ICd0cnVlJyxcbiAgICAgIEluY2x1ZGVTcGFjZTogZ2VuZXJhdGVTZWNyZXRTdHJpbmcuaW5jbHVkZVNwYWNlID09PSAndHJ1ZScsXG4gICAgICBQYXNzd29yZExlbmd0aDogK2dlbmVyYXRlU2VjcmV0U3RyaW5nLnBhc3N3b3JkTGVuZ3RoLFxuICAgICAgUmVxdWlyZUVhY2hJbmNsdWRlZFR5cGU6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLnJlcXVpcmVFYWNoSW5jbHVkZWRUeXBlID09PSAndHJ1ZScsXG4gICAgfSkpO1xuICAgIHBhcnNlZFZhbHVlW2dlbmVyYXRlU2VjcmV0U3RyaW5nLmdlbmVyYXRlU3RyaW5nS2V5XSA9IG5ld1JhbmRvbVZhbHVlO1xuICB9XG5cbiAgLy8gdXBkYXRlIHRoZSBzZWNyZXQgaW4gQVdTXG4gIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBQdXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgIFNlY3JldElkOiBzZWNyZXRBcm4sXG4gICAgU2VjcmV0U3RyaW5nOiBKU09OLnN0cmluZ2lmeShwYXJzZWRWYWx1ZSksXG4gIH0pKTtcblxufVxuYCxcbiAgICB9KTtcbiAgfVxufVxuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjcmV0SGFuZGxlckZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NlY3JldEhhbmRsZXJGaWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0M7QUFFL0MsMkNBQXNFO0FBRXRFLE1BQU0sa0JBQWtCLEdBQUcsMkNBQTJDLENBQUM7QUFDdkUsTUFBTSxXQUFXLEdBQUcsK0JBQStCLENBQUM7QUFFcEQ7Ozs7OztHQU1HO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0IsWUFBWSxPQUE0QjtRQUN0QyxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLElBQUEsK0JBQW1CLEVBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLGtCQUFTLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFBLDhCQUFrQixFQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7Q0FDRjtBQUxELGdEQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FtcGxlRGlyLCBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5pbXBvcnQgeyB0ZW1wbGF0ZURpck9wdGlvbnMsIHRlbXBsYXRlRmlsZU9wdGlvbnMgfSBmcm9tICcuL3RlbXBsYXRlcyc7XG5cbmNvbnN0IEhBTkRMRVJfRU5UUllfUEFUSCA9ICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL1NlY3JldC5GdW5jdGlvbi50cyc7XG5jb25zdCBIQU5ETEVSX0RJUiA9ICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL3NlY3JldCc7XG5cbi8qKlxuICogU2NhZmZvbGRzIHRoZSBMYW1iZGEgaGFuZGxlciBzb3VyY2VzIHVzZWQgYnkgdGhlIGdlbmVyYXRlZCBTZWNyZXQgY29uc3RydWN0XG4gKiAoc3JjL2NvbnN0cnVjdHMvU2VjcmV0LnRzKS4gQ29waWVkIGZyb20gQG1hdHRoZXdib25pZy9zZWNyZXQgKE1JVCkuXG4gKlxuICogVGhlIGVudHJ5IGZpbGUgaXMgZGVsaWJlcmF0ZWx5IG5vdCBuYW1lZCAqLmxhbWJkYS50cywgc28gcHJvamVuJ3MgbGFtYmRhXG4gKiBhdXRvLWRpc2NvdmVyeSBkb2VzIG5vdCBnZW5lcmF0ZSBhIHNlY29uZCBmdW5jdGlvbiBjbGFzcyBmb3IgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRIYW5kbGVyRmlsZXMge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwKSB7XG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgSEFORExFUl9FTlRSWV9QQVRILCB0ZW1wbGF0ZUZpbGVPcHRpb25zKHByb2plY3QsIEhBTkRMRVJfRU5UUllfUEFUSCkpO1xuICAgIG5ldyBTYW1wbGVEaXIocHJvamVjdCwgSEFORExFUl9ESVIsIHRlbXBsYXRlRGlyT3B0aW9ucyhwcm9qZWN0LCBIQU5ETEVSX0RJUikpO1xuICB9XG59XG4iXX0=
@@ -35,7 +35,7 @@ const DEFAULT_GITHUB_OWNER = 'macedon-technologies';
35
35
  * workflows that wire them together) is templated.
36
36
  */
37
37
  class SoftwareFactoryFiles {
38
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.32.1" };
38
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.34.0" };
39
39
  constructor(project, options) {
40
40
  const { repoName, actionVersions, attestationFiles } = options;
41
41
  const githubOwner = options.githubOwner || DEFAULT_GITHUB_OWNER;
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const utils_1 = require("./utils");
8
8
  const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
9
9
  class StagingDeployWorkflow extends projen_1.YamlFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.32.1" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.34.0" };
11
11
  constructor(project, options) {
12
12
  const packageManager = project.package.packageManager;
13
13
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);
@@ -0,0 +1,16 @@
1
+ import { Project, SampleDirOptions, SampleFileOptions } from 'projen';
2
+ export declare const TEMPLATE_APP_DIR: string;
3
+ /**
4
+ * Options for a bootstrapped `SampleFile` copied from the template app file at
5
+ * the same path.
6
+ */
7
+ export declare function templateFileOptions(project: Project, filePath: string, templateRoot?: string): SampleFileOptions;
8
+ /**
9
+ * Options for a bootstrapped `SampleDir` copied from the template app
10
+ * directory at the same path.
11
+ */
12
+ export declare function templateDirOptions(project: Project, dir: string, templateRoot?: string): SampleDirOptions;
13
+ /**
14
+ * Lines of the template app file at the same path, for a generated `TextFile`.
15
+ */
16
+ export declare function templateLines(project: Project, filePath: string, templateRoot?: string): string[];
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TEMPLATE_APP_DIR = void 0;
37
+ exports.templateFileOptions = templateFileOptions;
38
+ exports.templateDirOptions = templateDirOptions;
39
+ exports.templateLines = templateLines;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ exports.TEMPLATE_APP_DIR = path.join(__dirname, '..', 'templates', 'app');
43
+ const PROJECT_NAME_PLACEHOLDER = '__PROJECT_NAME__';
44
+ const PLACEHOLDER_EXTENSIONS = new Set(['.json', '.yaml', '.yml']);
45
+ function templatePath(templateRoot, relativePath, kind) {
46
+ const source = path.join(templateRoot, relativePath);
47
+ const stat = fs.statSync(source, { throwIfNoEntry: false });
48
+ if (!stat) {
49
+ throw new Error(`Batman template not found: ${source}`);
50
+ }
51
+ if (kind === 'file' ? !stat.isFile() : !stat.isDirectory()) {
52
+ throw new Error(`Batman template is not a ${kind}: ${source}`);
53
+ }
54
+ return source;
55
+ }
56
+ /**
57
+ * The template's text, with `__PROJECT_NAME__` replaced by the project name.
58
+ * Throws when a template other than JSON or YAML contains the placeholder.
59
+ */
60
+ function templateText(project, source) {
61
+ const text = fs.readFileSync(source, 'utf8');
62
+ if (!text.includes(PROJECT_NAME_PLACEHOLDER)) {
63
+ return { text, substituted: false };
64
+ }
65
+ if (!PLACEHOLDER_EXTENSIONS.has(path.extname(source).toLowerCase())) {
66
+ throw new Error(`${PROJECT_NAME_PLACEHOLDER} is only allowed in JSON and YAML templates, found in ${source}`);
67
+ }
68
+ return { text: text.split(PROJECT_NAME_PLACEHOLDER).join(project.name), substituted: true };
69
+ }
70
+ /**
71
+ * Options for a bootstrapped `SampleFile` copied from the template app file at
72
+ * the same path.
73
+ */
74
+ function templateFileOptions(project, filePath, templateRoot = exports.TEMPLATE_APP_DIR) {
75
+ const source = templatePath(templateRoot, filePath, 'file');
76
+ const { text, substituted } = templateText(project, source);
77
+ return substituted ? { contents: text } : { sourcePath: source };
78
+ }
79
+ /**
80
+ * Options for a bootstrapped `SampleDir` copied from the template app
81
+ * directory at the same path.
82
+ */
83
+ function templateDirOptions(project, dir, templateRoot = exports.TEMPLATE_APP_DIR) {
84
+ const sourceDir = templatePath(templateRoot, dir, 'directory');
85
+ const files = {};
86
+ for (const entry of fs.readdirSync(sourceDir, { recursive: true, withFileTypes: true })) {
87
+ if (!entry.isFile()) {
88
+ continue;
89
+ }
90
+ const source = path.join(entry.parentPath, entry.name);
91
+ const { text, substituted } = templateText(project, source);
92
+ if (substituted) {
93
+ files[path.relative(sourceDir, source).split(path.sep).join('/')] = text;
94
+ }
95
+ }
96
+ return Object.keys(files).length > 0 ? { sourceDir, files } : { sourceDir };
97
+ }
98
+ /**
99
+ * Lines of the template app file at the same path, for a generated `TextFile`.
100
+ */
101
+ function templateLines(project, filePath, templateRoot = exports.TEMPLATE_APP_DIR) {
102
+ return templateText(project, templatePath(templateRoot, filePath, 'file')).text.split('\n');
103
+ }
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQ0Esa0RBUUM7QUFNRCxnREFrQkM7QUFLRCxzQ0FNQztBQXRGRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBR2hCLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUUvRSxNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixDQUFDO0FBRXBELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFbkUsU0FBUyxZQUFZLENBQUMsWUFBb0IsRUFBRSxZQUFvQixFQUFFLElBQTBCO0lBQzFGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixJQUFJLEtBQUssTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0Qs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QUFnQjtJQUV2QyxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUHJvamVjdCwgU2FtcGxlRGlyT3B0aW9ucywgU2FtcGxlRmlsZU9wdGlvbnMgfSBmcm9tICdwcm9qZW4nO1xuXG5leHBvcnQgY29uc3QgVEVNUExBVEVfQVBQX0RJUiA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICd0ZW1wbGF0ZXMnLCAnYXBwJyk7XG5cbmNvbnN0IFBST0pFQ1RfTkFNRV9QTEFDRUhPTERFUiA9ICdfX1BST0pFQ1RfTkFNRV9fJztcblxuY29uc3QgUExBQ0VIT0xERVJfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuanNvbicsICcueWFtbCcsICcueW1sJ10pO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZVBhdGgodGVtcGxhdGVSb290OiBzdHJpbmcsIHJlbGF0aXZlUGF0aDogc3RyaW5nLCBraW5kOiAnZmlsZScgfCAnZGlyZWN0b3J5Jyk6IHN0cmluZyB7XG4gIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbih0ZW1wbGF0ZVJvb3QsIHJlbGF0aXZlUGF0aCk7XG4gIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhzb3VyY2UsIHsgdGhyb3dJZk5vRW50cnk6IGZhbHNlIH0pO1xuICBpZiAoIXN0YXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhdG1hbiB0ZW1wbGF0ZSBub3QgZm91bmQ6ICR7c291cmNlfWApO1xuICB9XG4gIGlmIChraW5kID09PSAnZmlsZScgPyAhc3RhdC5pc0ZpbGUoKSA6ICFzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhdG1hbiB0ZW1wbGF0ZSBpcyBub3QgYSAke2tpbmR9OiAke3NvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4gc291cmNlO1xufVxuXG4vKipcbiAqIFRoZSB0ZW1wbGF0ZSdzIHRleHQsIHdpdGggYF9fUFJPSkVDVF9OQU1FX19gIHJlcGxhY2VkIGJ5IHRoZSBwcm9qZWN0IG5hbWUuXG4gKiBUaHJvd3Mgd2hlbiBhIHRlbXBsYXRlIG90aGVyIHRoYW4gSlNPTiBvciBZQU1MIGNvbnRhaW5zIHRoZSBwbGFjZWhvbGRlci5cbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGVUZXh0KHByb2plY3Q6IFByb2plY3QsIHNvdXJjZTogc3RyaW5nKTogeyB0ZXh0OiBzdHJpbmc7IHN1YnN0aXR1dGVkOiBib29sZWFuIH0ge1xuICBjb25zdCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKHNvdXJjZSwgJ3V0ZjgnKTtcbiAgaWYgKCF0ZXh0LmluY2x1ZGVzKFBST0pFQ1RfTkFNRV9QTEFDRUhPTERFUikpIHtcbiAgICByZXR1cm4geyB0ZXh0LCBzdWJzdGl0dXRlZDogZmFsc2UgfTtcbiAgfVxuICBpZiAoIVBMQUNFSE9MREVSX0VYVEVOU0lPTlMuaGFzKHBhdGguZXh0bmFtZShzb3VyY2UpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7UFJPSkVDVF9OQU1FX1BMQUNFSE9MREVSfSBpcyBvbmx5IGFsbG93ZWQgaW4gSlNPTiBhbmQgWUFNTCB0ZW1wbGF0ZXMsIGZvdW5kIGluICR7c291cmNlfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4geyB0ZXh0OiB0ZXh0LnNwbGl0KFBST0pFQ1RfTkFNRV9QTEFDRUhPTERFUikuam9pbihwcm9qZWN0Lm5hbWUpLCBzdWJzdGl0dXRlZDogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgYm9vdHN0cmFwcGVkIGBTYW1wbGVGaWxlYCBjb3BpZWQgZnJvbSB0aGUgdGVtcGxhdGUgYXBwIGZpbGUgYXRcbiAqIHRoZSBzYW1lIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZUZpbGVPcHRpb25zKFxuICBwcm9qZWN0OiBQcm9qZWN0LFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICB0ZW1wbGF0ZVJvb3Q6IHN0cmluZyA9IFRFTVBMQVRFX0FQUF9ESVIsXG4pOiBTYW1wbGVGaWxlT3B0aW9ucyB7XG4gIGNvbnN0IHNvdXJjZSA9IHRlbXBsYXRlUGF0aCh0ZW1wbGF0ZVJvb3QsIGZpbGVQYXRoLCAnZmlsZScpO1xuICBjb25zdCB7IHRleHQsIHN1YnN0aXR1dGVkIH0gPSB0ZW1wbGF0ZVRleHQocHJvamVjdCwgc291cmNlKTtcbiAgcmV0dXJuIHN1YnN0aXR1dGVkID8geyBjb250ZW50czogdGV4dCB9IDogeyBzb3VyY2VQYXRoOiBzb3VyY2UgfTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIGJvb3RzdHJhcHBlZCBgU2FtcGxlRGlyYCBjb3BpZWQgZnJvbSB0aGUgdGVtcGxhdGUgYXBwXG4gKiBkaXJlY3RvcnkgYXQgdGhlIHNhbWUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlRGlyT3B0aW9ucyhcbiAgcHJvamVjdDogUHJvamVjdCxcbiAgZGlyOiBzdHJpbmcsXG4gIHRlbXBsYXRlUm9vdDogc3RyaW5nID0gVEVNUExBVEVfQVBQX0RJUixcbik6IFNhbXBsZURpck9wdGlvbnMge1xuICBjb25zdCBzb3VyY2VEaXIgPSB0ZW1wbGF0ZVBhdGgodGVtcGxhdGVSb290LCBkaXIsICdkaXJlY3RvcnknKTtcbiAgY29uc3QgZmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBmcy5yZWFkZGlyU3luYyhzb3VyY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pKSB7XG4gICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbihlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCB7IHRleHQsIHN1YnN0aXR1dGVkIH0gPSB0ZW1wbGF0ZVRleHQocHJvamVjdCwgc291cmNlKTtcbiAgICBpZiAoc3Vic3RpdHV0ZWQpIHtcbiAgICAgIGZpbGVzW3BhdGgucmVsYXRpdmUoc291cmNlRGlyLCBzb3VyY2UpLnNwbGl0KHBhdGguc2VwKS5qb2luKCcvJyldID0gdGV4dDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbGVzKS5sZW5ndGggPiAwID8geyBzb3VyY2VEaXIsIGZpbGVzIH0gOiB7IHNvdXJjZURpciB9O1xufVxuXG4vKipcbiAqIExpbmVzIG9mIHRoZSB0ZW1wbGF0ZSBhcHAgZmlsZSBhdCB0aGUgc2FtZSBwYXRoLCBmb3IgYSBnZW5lcmF0ZWQgYFRleHRGaWxlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlTGluZXMoXG4gIHByb2plY3Q6IFByb2plY3QsXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHRlbXBsYXRlUm9vdDogc3RyaW5nID0gVEVNUExBVEVfQVBQX0RJUixcbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRlbXBsYXRlVGV4dChwcm9qZWN0LCB0ZW1wbGF0ZVBhdGgodGVtcGxhdGVSb290LCBmaWxlUGF0aCwgJ2ZpbGUnKSkudGV4dC5zcGxpdCgnXFxuJyk7XG59XG4iXX0=
package/package.json CHANGED
@@ -49,7 +49,7 @@
49
49
  "main": "lib/index.js",
50
50
  "license": "Apache-2.0",
51
51
  "stability": "stable",
52
- "version": "1.32.1",
52
+ "version": "1.34.0",
53
53
  "jest": {
54
54
  "coverageProvider": "v8",
55
55
  "testMatch": [
@@ -126,6 +126,7 @@
126
126
  "release": "projen release",
127
127
  "swamp:bootstrap": "projen swamp:bootstrap",
128
128
  "test": "projen test",
129
+ "test:templates": "projen test:templates",
129
130
  "test:watch": "projen test:watch",
130
131
  "unbump": "projen unbump",
131
132
  "upgrade": "projen upgrade",