@fjall/components-infrastructure 0.79.3 → 0.80.4

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 (94) hide show
  1. package/dist/lib/app.d.ts +39 -2
  2. package/dist/lib/app.js +85 -4
  3. package/dist/lib/aspects/resourceInventory.d.ts +41 -0
  4. package/dist/lib/aspects/resourceInventory.js +56 -0
  5. package/dist/lib/config/audit.d.ts +18 -0
  6. package/dist/lib/config/audit.js +22 -0
  7. package/dist/lib/config/aws/accountId.js +3 -3
  8. package/dist/lib/config/aws/ecrDefaultImage.js +7 -7
  9. package/dist/lib/config/aws/identityCenter.js +7 -8
  10. package/dist/lib/config/aws/identityCenterGroupMembership.js +6 -6
  11. package/dist/lib/config/aws/ipam.js +3 -3
  12. package/dist/lib/config/aws/ipamPoolId.js +4 -4
  13. package/dist/lib/config/aws/organisation.js +2 -3
  14. package/dist/lib/config/aws/organisationId.js +4 -4
  15. package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
  16. package/dist/lib/patterns/aws/auditRole.js +58 -0
  17. package/dist/lib/patterns/aws/buildkite.js +12 -12
  18. package/dist/lib/patterns/aws/cdn.d.ts +133 -0
  19. package/dist/lib/patterns/aws/cdn.js +216 -0
  20. package/dist/lib/patterns/aws/compute.d.ts +32 -13
  21. package/dist/lib/patterns/aws/compute.js +24 -14
  22. package/dist/lib/patterns/aws/database.d.ts +2 -1
  23. package/dist/lib/patterns/aws/database.js +7 -2
  24. package/dist/lib/patterns/aws/dynamodb.d.ts +66 -0
  25. package/dist/lib/patterns/aws/dynamodb.js +106 -0
  26. package/dist/lib/patterns/aws/hostedZone.js +1 -1
  27. package/dist/lib/patterns/aws/index.d.ts +1 -0
  28. package/dist/lib/patterns/aws/index.js +2 -1
  29. package/dist/lib/patterns/aws/loadBalancer.d.ts +163 -0
  30. package/dist/lib/patterns/aws/loadBalancer.js +278 -0
  31. package/dist/lib/patterns/aws/managedAccount.js +3 -4
  32. package/dist/lib/patterns/aws/queue.d.ts +61 -0
  33. package/dist/lib/patterns/aws/queue.js +103 -0
  34. package/dist/lib/patterns/aws/storage.js +3 -2
  35. package/dist/lib/patterns/aws/subdomainHostedZone.js +2 -2
  36. package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
  37. package/dist/lib/resources/aws/audit/auditRole.js +44 -0
  38. package/dist/lib/resources/aws/backup/backupPlan.js +3 -4
  39. package/dist/lib/resources/aws/backup/backupVault.js +3 -4
  40. package/dist/lib/resources/aws/base/awsStack.js +1 -2
  41. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +65 -0
  42. package/dist/lib/resources/aws/cdn/cloudFront.js +135 -0
  43. package/dist/lib/resources/aws/cdn/index.d.ts +1 -0
  44. package/dist/lib/resources/aws/cdn/index.js +18 -0
  45. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.d.ts +20 -0
  46. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.js +180 -0
  47. package/dist/lib/resources/aws/compute/ecs.d.ts +65 -11
  48. package/dist/lib/resources/aws/compute/ecs.js +293 -124
  49. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +1 -2
  50. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -4
  51. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +1 -2
  52. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -4
  53. package/dist/lib/resources/aws/compute/lambda.d.ts +10 -1
  54. package/dist/lib/resources/aws/compute/lambda.js +71 -4
  55. package/dist/lib/resources/aws/database/database.js +1 -1
  56. package/dist/lib/resources/aws/database/dynamodb.d.ts +70 -0
  57. package/dist/lib/resources/aws/database/dynamodb.js +170 -0
  58. package/dist/lib/resources/aws/database/rdsAurora.js +5 -5
  59. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +7 -7
  60. package/dist/lib/resources/aws/database/rdsDeletionWaiter.d.ts +33 -0
  61. package/dist/lib/resources/aws/database/rdsDeletionWaiter.js +74 -0
  62. package/dist/lib/resources/aws/database/rdsInstance.js +3 -3
  63. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +2 -2
  64. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -1
  65. package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -1
  66. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -1
  67. package/dist/lib/resources/aws/logging/cloudTrail.js +1 -1
  68. package/dist/lib/resources/aws/messaging/index.d.ts +1 -0
  69. package/dist/lib/resources/aws/messaging/index.js +18 -0
  70. package/dist/lib/resources/aws/messaging/sqs.d.ts +65 -0
  71. package/dist/lib/resources/aws/messaging/sqs.js +195 -0
  72. package/dist/lib/resources/aws/monitoring/monitoringRole.js +2 -3
  73. package/dist/lib/resources/aws/networking/ipamPool.js +1 -1
  74. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -0
  75. package/dist/lib/resources/aws/networking/vpc.js +7 -3
  76. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +20 -0
  77. package/dist/lib/resources/aws/networking/vpcEndpoint.js +59 -0
  78. package/dist/lib/resources/aws/networking/vpcEndpoints.d.ts +71 -0
  79. package/dist/lib/resources/aws/networking/vpcEndpoints.js +125 -0
  80. package/dist/lib/resources/aws/secrets/secret.js +1 -1
  81. package/dist/lib/resources/aws/storage/ecr.d.ts +1 -2
  82. package/dist/lib/resources/aws/storage/ecr.js +2 -2
  83. package/dist/lib/resources/aws/utilities/cfnOutput.test.d.ts +1 -0
  84. package/dist/lib/resources/aws/utilities/cfnOutput.test.js +102 -0
  85. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +1 -2
  86. package/dist/lib/resources/aws/utilities/codeBuild.js +1 -1
  87. package/dist/lib/resources/aws/utilities/customResource.d.ts +2 -1
  88. package/dist/lib/resources/aws/utilities/customResource.js +1 -1
  89. package/dist/lib/utils/getStackOutput.js +2 -2
  90. package/dist/lib/utils/sanitizeCfnKey.d.ts +5 -0
  91. package/dist/lib/utils/sanitizeCfnKey.js +11 -0
  92. package/dist/lib/utils/tagResource.d.ts +24 -0
  93. package/dist/lib/utils/tagResource.js +30 -0
  94. package/package.json +6 -5
@@ -0,0 +1,71 @@
1
+ import { Construct } from "constructs";
2
+ import { type IVpc, GatewayVpcEndpoint, InterfaceVpcEndpoint } from "aws-cdk-lib/aws-ec2";
3
+ /**
4
+ * Gateway VPC endpoint configuration for resource layer.
5
+ */
6
+ export interface VpcGatewayEndpointsConfig {
7
+ /** Enable S3 Gateway endpoint. Default: true */
8
+ s3?: boolean;
9
+ /** Enable DynamoDB Gateway endpoint. Default: true */
10
+ dynamodb?: boolean;
11
+ }
12
+ /**
13
+ * Interface VPC endpoint configuration for resource layer.
14
+ * Interface endpoints cost money (~$7-15/month each) but provide private connectivity.
15
+ */
16
+ export interface VpcInterfaceEndpointsConfig {
17
+ /** ECR endpoints (dkr + api) for container image pulls. ~$15/month */
18
+ ecr?: boolean;
19
+ /** Secrets Manager endpoint for secret access. ~$7/month */
20
+ secretsManager?: boolean;
21
+ /** KMS endpoint for CMK operations. ~$7/month */
22
+ kms?: boolean;
23
+ /** CloudWatch Logs endpoint for log shipping. ~$7/month */
24
+ cloudwatchLogs?: boolean;
25
+ /** Systems Manager endpoint. ~$7/month */
26
+ ssm?: boolean;
27
+ /** STS endpoint for assume-role operations. ~$7/month */
28
+ sts?: boolean;
29
+ }
30
+ /**
31
+ * Props for creating VPC endpoints.
32
+ */
33
+ export interface VpcEndpointsProps {
34
+ /** The VPC to create endpoints in. Required. */
35
+ vpc: IVpc;
36
+ /**
37
+ * Gateway endpoints (FREE).
38
+ * - Omit: enabled with defaults (s3: true, dynamodb: true)
39
+ * - `{}`: enabled with defaults
40
+ * - `{ s3: true, dynamodb: false }`: specific configuration
41
+ * - `false`: explicitly disabled
42
+ */
43
+ gateway?: VpcGatewayEndpointsConfig | false;
44
+ /**
45
+ * Interface endpoints (cost money).
46
+ * - Omit: disabled (default)
47
+ * - `{}`: disabled (must specify which endpoints)
48
+ * - `{ ecr: true, kms: true }`: specific endpoints
49
+ * - `false`: explicitly disabled
50
+ */
51
+ interface?: VpcInterfaceEndpointsConfig | false;
52
+ }
53
+ /**
54
+ * Creates VPC endpoints for AWS services.
55
+ *
56
+ * Gateway endpoints (S3, DynamoDB) are FREE and should always be enabled.
57
+ * They route traffic directly to the service without going through NAT.
58
+ *
59
+ * Interface endpoints cost money but provide private connectivity to AWS services.
60
+ * They're useful for:
61
+ * - Security: Traffic stays within AWS network
62
+ * - Cost: Avoid NAT Gateway data processing charges for high-volume services
63
+ * - Latency: Direct path to service
64
+ */
65
+ export declare class VpcEndpoints extends Construct {
66
+ readonly gatewayEndpoints: GatewayVpcEndpoint[];
67
+ readonly interfaceEndpoints: InterfaceVpcEndpoint[];
68
+ constructor(scope: Construct, id: string, props: VpcEndpointsProps);
69
+ private addGatewayEndpoints;
70
+ private addInterfaceEndpoints;
71
+ }
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VpcEndpoints = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
+ /**
7
+ * Creates VPC endpoints for AWS services.
8
+ *
9
+ * Gateway endpoints (S3, DynamoDB) are FREE and should always be enabled.
10
+ * They route traffic directly to the service without going through NAT.
11
+ *
12
+ * Interface endpoints cost money but provide private connectivity to AWS services.
13
+ * They're useful for:
14
+ * - Security: Traffic stays within AWS network
15
+ * - Cost: Avoid NAT Gateway data processing charges for high-volume services
16
+ * - Latency: Direct path to service
17
+ */
18
+ class VpcEndpoints extends constructs_1.Construct {
19
+ constructor(scope, id, props) {
20
+ super(scope, id);
21
+ this.gatewayEndpoints = [];
22
+ this.interfaceEndpoints = [];
23
+ this.addGatewayEndpoints(props);
24
+ this.addInterfaceEndpoints(props);
25
+ }
26
+ addGatewayEndpoints(props) {
27
+ const gatewayConfig = props.gateway;
28
+ if (gatewayConfig === false) {
29
+ return;
30
+ }
31
+ const enableS3 = gatewayConfig?.s3 ?? true;
32
+ const enableDynamodb = gatewayConfig?.dynamodb ?? true;
33
+ if (enableS3) {
34
+ const s3Endpoint = new aws_ec2_1.GatewayVpcEndpoint(this, "S3Endpoint", {
35
+ vpc: props.vpc,
36
+ service: aws_ec2_1.GatewayVpcEndpointAwsService.S3
37
+ });
38
+ this.gatewayEndpoints.push(s3Endpoint);
39
+ }
40
+ if (enableDynamodb) {
41
+ const dynamoEndpoint = new aws_ec2_1.GatewayVpcEndpoint(this, "DynamoDBEndpoint", {
42
+ vpc: props.vpc,
43
+ service: aws_ec2_1.GatewayVpcEndpointAwsService.DYNAMODB
44
+ });
45
+ this.gatewayEndpoints.push(dynamoEndpoint);
46
+ }
47
+ }
48
+ addInterfaceEndpoints(props) {
49
+ const interfaceConfig = props.interface;
50
+ if (interfaceConfig === false || interfaceConfig === undefined) {
51
+ return;
52
+ }
53
+ if (interfaceConfig.ecr) {
54
+ const ecrDockerEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "EcrDockerEndpoint", {
55
+ vpc: props.vpc,
56
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.ECR_DOCKER,
57
+ privateDnsEnabled: true,
58
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
59
+ });
60
+ this.interfaceEndpoints.push(ecrDockerEndpoint);
61
+ const ecrApiEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "EcrApiEndpoint", {
62
+ vpc: props.vpc,
63
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.ECR,
64
+ privateDnsEnabled: true,
65
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
66
+ });
67
+ this.interfaceEndpoints.push(ecrApiEndpoint);
68
+ }
69
+ if (interfaceConfig.secretsManager) {
70
+ const smEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "SecretsManagerEndpoint", {
71
+ vpc: props.vpc,
72
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.SECRETS_MANAGER,
73
+ privateDnsEnabled: true,
74
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
75
+ });
76
+ this.interfaceEndpoints.push(smEndpoint);
77
+ }
78
+ if (interfaceConfig.kms) {
79
+ const kmsEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "KmsEndpoint", {
80
+ vpc: props.vpc,
81
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.KMS,
82
+ privateDnsEnabled: true,
83
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
84
+ });
85
+ this.interfaceEndpoints.push(kmsEndpoint);
86
+ }
87
+ if (interfaceConfig.cloudwatchLogs) {
88
+ const cwLogsEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "CloudWatchLogsEndpoint", {
89
+ vpc: props.vpc,
90
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.CLOUDWATCH_LOGS,
91
+ privateDnsEnabled: true,
92
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
93
+ });
94
+ this.interfaceEndpoints.push(cwLogsEndpoint);
95
+ }
96
+ if (interfaceConfig.ssm) {
97
+ const ssmEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "SsmEndpoint", {
98
+ vpc: props.vpc,
99
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.SSM,
100
+ privateDnsEnabled: true,
101
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
102
+ });
103
+ this.interfaceEndpoints.push(ssmEndpoint);
104
+ // SSM also needs SSM Messages endpoint for session manager
105
+ const ssmMessagesEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "SsmMessagesEndpoint", {
106
+ vpc: props.vpc,
107
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.SSM_MESSAGES,
108
+ privateDnsEnabled: true,
109
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
110
+ });
111
+ this.interfaceEndpoints.push(ssmMessagesEndpoint);
112
+ }
113
+ if (interfaceConfig.sts) {
114
+ const stsEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "StsEndpoint", {
115
+ vpc: props.vpc,
116
+ service: aws_ec2_1.InterfaceVpcEndpointAwsService.STS,
117
+ privateDnsEnabled: true,
118
+ subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
119
+ });
120
+ this.interfaceEndpoints.push(stsEndpoint);
121
+ }
122
+ }
123
+ }
124
+ exports.VpcEndpoints = VpcEndpoints;
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjRW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNFbmRwb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLGlEQU82QjtBQXVEN0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUl6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFKSCxxQkFBZ0IsR0FBeUIsRUFBRSxDQUFDO1FBQzVDLHVCQUFrQixHQUEyQixFQUFFLENBQUM7UUFLOUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBd0I7UUFDbEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUVwQyxJQUFJLGFBQWEsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLGFBQWEsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDO1FBQzNDLE1BQU0sY0FBYyxHQUFHLGFBQWEsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDO1FBRXZELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLDRCQUFrQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzVELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxPQUFPLEVBQUUsc0NBQTRCLENBQUMsRUFBRTthQUN6QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksNEJBQWtCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQUN0RSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ2QsT0FBTyxFQUFFLHNDQUE0QixDQUFDLFFBQVE7YUFDL0MsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQXdCO1FBQ3BELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFeEMsSUFBSSxlQUFlLEtBQUssS0FBSyxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSw4QkFBb0IsQ0FDaEQsSUFBSSxFQUNKLG1CQUFtQixFQUNuQjtnQkFDRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ2QsT0FBTyxFQUFFLHdDQUE4QixDQUFDLFVBQVU7Z0JBQ2xELGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxvQkFBVSxDQUFDLG1CQUFtQixFQUFFO2FBQ3hELENBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUVoRCxNQUFNLGNBQWMsR0FBRyxJQUFJLDhCQUFvQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDdEUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dCQUNkLE9BQU8sRUFBRSx3Q0FBOEIsQ0FBQyxHQUFHO2dCQUMzQyxpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsb0JBQVUsQ0FBQyxtQkFBbUIsRUFBRTthQUN4RCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLDhCQUFvQixDQUN6QyxJQUFJLEVBQ0osd0JBQXdCLEVBQ3hCO2dCQUNFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxPQUFPLEVBQUUsd0NBQThCLENBQUMsZUFBZTtnQkFDdkQsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLG9CQUFVLENBQUMsbUJBQW1CLEVBQUU7YUFDeEQsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSw4QkFBb0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO2dCQUNoRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ2QsT0FBTyxFQUFFLHdDQUE4QixDQUFDLEdBQUc7Z0JBQzNDLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxvQkFBVSxDQUFDLG1CQUFtQixFQUFFO2FBQ3hELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sY0FBYyxHQUFHLElBQUksOEJBQW9CLENBQzdDLElBQUksRUFDSix3QkFBd0IsRUFDeEI7Z0JBQ0UsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dCQUNkLE9BQU8sRUFBRSx3Q0FBOEIsQ0FBQyxlQUFlO2dCQUN2RCxpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsb0JBQVUsQ0FBQyxtQkFBbUIsRUFBRTthQUN4RCxDQUNGLENBQUM7WUFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLDhCQUFvQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQ2hFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxPQUFPLEVBQUUsd0NBQThCLENBQUMsR0FBRztnQkFDM0MsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLG9CQUFVLENBQUMsbUJBQW1CLEVBQUU7YUFDeEQsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUxQywyREFBMkQ7WUFDM0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLDhCQUFvQixDQUNsRCxJQUFJLEVBQ0oscUJBQXFCLEVBQ3JCO2dCQUNFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxPQUFPLEVBQUUsd0NBQThCLENBQUMsWUFBWTtnQkFDcEQsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLG9CQUFVLENBQUMsbUJBQW1CLEVBQUU7YUFDeEQsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLDhCQUFvQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQ2hFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxPQUFPLEVBQUUsd0NBQThCLENBQUMsR0FBRztnQkFDM0MsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLG9CQUFVLENBQUMsbUJBQW1CLEVBQUU7YUFDeEQsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUlELG9DQTBJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICB0eXBlIElWcGMsXG4gIEdhdGV3YXlWcGNFbmRwb2ludCxcbiAgR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZSxcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnQsXG4gIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSxcbiAgU3VibmV0VHlwZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuXG4vKipcbiAqIEdhdGV3YXkgVlBDIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gZm9yIHJlc291cmNlIGxheWVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0dhdGV3YXlFbmRwb2ludHNDb25maWcge1xuICAvKiogRW5hYmxlIFMzIEdhdGV3YXkgZW5kcG9pbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgczM/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIER5bmFtb0RCIEdhdGV3YXkgZW5kcG9pbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgZHluYW1vZGI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBWUEMgZW5kcG9pbnQgY29uZmlndXJhdGlvbiBmb3IgcmVzb3VyY2UgbGF5ZXIuXG4gKiBJbnRlcmZhY2UgZW5kcG9pbnRzIGNvc3QgbW9uZXkgKH4kNy0xNS9tb250aCBlYWNoKSBidXQgcHJvdmlkZSBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNJbnRlcmZhY2VFbmRwb2ludHNDb25maWcge1xuICAvKiogRUNSIGVuZHBvaW50cyAoZGtyICsgYXBpKSBmb3IgY29udGFpbmVyIGltYWdlIHB1bGxzLiB+JDE1L21vbnRoICovXG4gIGVjcj86IGJvb2xlYW47XG4gIC8qKiBTZWNyZXRzIE1hbmFnZXIgZW5kcG9pbnQgZm9yIHNlY3JldCBhY2Nlc3MuIH4kNy9tb250aCAqL1xuICBzZWNyZXRzTWFuYWdlcj86IGJvb2xlYW47XG4gIC8qKiBLTVMgZW5kcG9pbnQgZm9yIENNSyBvcGVyYXRpb25zLiB+JDcvbW9udGggKi9cbiAga21zPzogYm9vbGVhbjtcbiAgLyoqIENsb3VkV2F0Y2ggTG9ncyBlbmRwb2ludCBmb3IgbG9nIHNoaXBwaW5nLiB+JDcvbW9udGggKi9cbiAgY2xvdWR3YXRjaExvZ3M/OiBib29sZWFuO1xuICAvKiogU3lzdGVtcyBNYW5hZ2VyIGVuZHBvaW50LiB+JDcvbW9udGggKi9cbiAgc3NtPzogYm9vbGVhbjtcbiAgLyoqIFNUUyBlbmRwb2ludCBmb3IgYXNzdW1lLXJvbGUgb3BlcmF0aW9ucy4gfiQ3L21vbnRoICovXG4gIHN0cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIGNyZWF0aW5nIFZQQyBlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjRW5kcG9pbnRzUHJvcHMge1xuICAvKiogVGhlIFZQQyB0byBjcmVhdGUgZW5kcG9pbnRzIGluLiBSZXF1aXJlZC4gKi9cbiAgdnBjOiBJVnBjO1xuICAvKipcbiAgICogR2F0ZXdheSBlbmRwb2ludHMgKEZSRUUpLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0cyAoczM6IHRydWUsIGR5bmFtb2RiOiB0cnVlKVxuICAgKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGB7IHMzOiB0cnVlLCBkeW5hbW9kYjogZmFsc2UgfWA6IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAgICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAqL1xuICBnYXRld2F5PzogVnBjR2F0ZXdheUVuZHBvaW50c0NvbmZpZyB8IGZhbHNlO1xuICAvKipcbiAgICogSW50ZXJmYWNlIGVuZHBvaW50cyAoY29zdCBtb25leSkuXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZGlzYWJsZWQgKG11c3Qgc3BlY2lmeSB3aGljaCBlbmRwb2ludHMpXG4gICAqIC0gYHsgZWNyOiB0cnVlLCBrbXM6IHRydWUgfWA6IHNwZWNpZmljIGVuZHBvaW50c1xuICAgKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICovXG4gIGludGVyZmFjZT86IFZwY0ludGVyZmFjZUVuZHBvaW50c0NvbmZpZyB8IGZhbHNlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgVlBDIGVuZHBvaW50cyBmb3IgQVdTIHNlcnZpY2VzLlxuICpcbiAqIEdhdGV3YXkgZW5kcG9pbnRzIChTMywgRHluYW1vREIpIGFyZSBGUkVFIGFuZCBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQuXG4gKiBUaGV5IHJvdXRlIHRyYWZmaWMgZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2Ugd2l0aG91dCBnb2luZyB0aHJvdWdoIE5BVC5cbiAqXG4gKiBJbnRlcmZhY2UgZW5kcG9pbnRzIGNvc3QgbW9uZXkgYnV0IHByb3ZpZGUgcHJpdmF0ZSBjb25uZWN0aXZpdHkgdG8gQVdTIHNlcnZpY2VzLlxuICogVGhleSdyZSB1c2VmdWwgZm9yOlxuICogLSBTZWN1cml0eTogVHJhZmZpYyBzdGF5cyB3aXRoaW4gQVdTIG5ldHdvcmtcbiAqIC0gQ29zdDogQXZvaWQgTkFUIEdhdGV3YXkgZGF0YSBwcm9jZXNzaW5nIGNoYXJnZXMgZm9yIGhpZ2gtdm9sdW1lIHNlcnZpY2VzXG4gKiAtIExhdGVuY3k6IERpcmVjdCBwYXRoIHRvIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIFZwY0VuZHBvaW50cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5RW5kcG9pbnRzOiBHYXRld2F5VnBjRW5kcG9pbnRbXSA9IFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJmYWNlRW5kcG9pbnRzOiBJbnRlcmZhY2VWcGNFbmRwb2ludFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwY0VuZHBvaW50c1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYWRkR2F0ZXdheUVuZHBvaW50cyhwcm9wcyk7XG4gICAgdGhpcy5hZGRJbnRlcmZhY2VFbmRwb2ludHMocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRHYXRld2F5RW5kcG9pbnRzKHByb3BzOiBWcGNFbmRwb2ludHNQcm9wcykge1xuICAgIGNvbnN0IGdhdGV3YXlDb25maWcgPSBwcm9wcy5nYXRld2F5O1xuXG4gICAgaWYgKGdhdGV3YXlDb25maWcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW5hYmxlUzMgPSBnYXRld2F5Q29uZmlnPy5zMyA/PyB0cnVlO1xuICAgIGNvbnN0IGVuYWJsZUR5bmFtb2RiID0gZ2F0ZXdheUNvbmZpZz8uZHluYW1vZGIgPz8gdHJ1ZTtcblxuICAgIGlmIChlbmFibGVTMykge1xuICAgICAgY29uc3QgczNFbmRwb2ludCA9IG5ldyBHYXRld2F5VnBjRW5kcG9pbnQodGhpcywgXCJTM0VuZHBvaW50XCIsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHNlcnZpY2U6IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5nYXRld2F5RW5kcG9pbnRzLnB1c2goczNFbmRwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKGVuYWJsZUR5bmFtb2RiKSB7XG4gICAgICBjb25zdCBkeW5hbW9FbmRwb2ludCA9IG5ldyBHYXRld2F5VnBjRW5kcG9pbnQodGhpcywgXCJEeW5hbW9EQkVuZHBvaW50XCIsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHNlcnZpY2U6IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuRFlOQU1PREJcbiAgICAgIH0pO1xuICAgICAgdGhpcy5nYXRld2F5RW5kcG9pbnRzLnB1c2goZHluYW1vRW5kcG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkSW50ZXJmYWNlRW5kcG9pbnRzKHByb3BzOiBWcGNFbmRwb2ludHNQcm9wcykge1xuICAgIGNvbnN0IGludGVyZmFjZUNvbmZpZyA9IHByb3BzLmludGVyZmFjZTtcblxuICAgIGlmIChpbnRlcmZhY2VDb25maWcgPT09IGZhbHNlIHx8IGludGVyZmFjZUNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGludGVyZmFjZUNvbmZpZy5lY3IpIHtcbiAgICAgIGNvbnN0IGVjckRvY2tlckVuZHBvaW50ID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkVjckRvY2tlckVuZHBvaW50XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSX0RPQ0tFUixcbiAgICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBzdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKGVjckRvY2tlckVuZHBvaW50KTtcblxuICAgICAgY29uc3QgZWNyQXBpRW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgXCJFY3JBcGlFbmRwb2ludFwiLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSLFxuICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKGVjckFwaUVuZHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJmYWNlQ29uZmlnLnNlY3JldHNNYW5hZ2VyKSB7XG4gICAgICBjb25zdCBzbUVuZHBvaW50ID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNlY3JldHNNYW5hZ2VyRW5kcG9pbnRcIixcbiAgICAgICAge1xuICAgICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICAgIHNlcnZpY2U6IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TRUNSRVRTX01BTkFHRVIsXG4gICAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludHMucHVzaChzbUVuZHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJmYWNlQ29uZmlnLmttcykge1xuICAgICAgY29uc3Qga21zRW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgXCJLbXNFbmRwb2ludFwiLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuS01TLFxuICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKGttc0VuZHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJmYWNlQ29uZmlnLmNsb3Vkd2F0Y2hMb2dzKSB7XG4gICAgICBjb25zdCBjd0xvZ3NFbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDbG91ZFdhdGNoTG9nc0VuZHBvaW50XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuQ0xPVURXQVRDSF9MT0dTLFxuICAgICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHN1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goY3dMb2dzRW5kcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChpbnRlcmZhY2VDb25maWcuc3NtKSB7XG4gICAgICBjb25zdCBzc21FbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBcIlNzbUVuZHBvaW50XCIsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHNlcnZpY2U6IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TU00sXG4gICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICBzdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goc3NtRW5kcG9pbnQpO1xuXG4gICAgICAvLyBTU00gYWxzbyBuZWVkcyBTU00gTWVzc2FnZXMgZW5kcG9pbnQgZm9yIHNlc3Npb24gbWFuYWdlclxuICAgICAgY29uc3Qgc3NtTWVzc2FnZXNFbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTc21NZXNzYWdlc0VuZHBvaW50XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1NNX01FU1NBR0VTLFxuICAgICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHN1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goc3NtTWVzc2FnZXNFbmRwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKGludGVyZmFjZUNvbmZpZy5zdHMpIHtcbiAgICAgIGNvbnN0IHN0c0VuZHBvaW50ID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIFwiU3RzRW5kcG9pbnRcIiwge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgc2VydmljZTogSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNUUyxcbiAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHN1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludHMucHVzaChzdHNFbmRwb2ludCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -72,4 +72,4 @@ class Secret extends constructs_1.Construct {
72
72
  }
73
73
  }
74
74
  exports.Secret = Secret;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc2VjcmV0cy9zZWNyZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBQzFDLHVFQUt3QztBQUN4QywyQ0FBdUM7QUFFdkMsK0JBQTJDO0FBa0MzQyxNQUFhLE1BQU8sU0FBUSxzQkFBUztJQUtuQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFYixzRkFBc0Y7UUFDdEYsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxNQUFNLEdBQUcsMkJBQVMsQ0FBQyxnQkFBZ0IsQ0FDdEMsSUFBSSxFQUNKLEdBQUcsRUFBRSxRQUFRLEVBQ2IsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztZQUNGLHlDQUF5QztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSx3QkFBa0IsQ0FDckQsSUFBSSxFQUNKLEdBQUcsRUFBRSxvQkFBb0IsRUFDekI7WUFDRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUU7U0FDdkIsQ0FDRixDQUFDO1FBRUY7O1dBRUc7UUFDSCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUI7WUFDL0MsQ0FBQyxDQUFDO2dCQUNFLGlCQUFpQixFQUFFLHlCQUFXLENBQUMsZUFBZSxDQUM1QyxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUM5QjthQUNGO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQOzs7V0FHRztRQUNILE1BQU0sb0JBQW9CLEdBQ3hCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxvQkFBb0I7WUFDcEQsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCx3REFBd0Q7UUFDeEQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWM7WUFDekMsQ0FBQyxDQUFDO2dCQUNFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDcEQsTUFBTTtpQkFDUCxDQUFDLENBQUM7YUFDSjtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUCwyQ0FBMkM7UUFDM0MsTUFBTSxhQUFhLEdBQUc7WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsYUFBYSxFQUFFLElBQUksQ0FBQyx5QkFBMEIsQ0FBQyxHQUFHO1lBQ2xELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixHQUFHLGlCQUFpQjtZQUNwQixHQUFHLG9CQUFvQjtZQUN2QixHQUFHLGNBQWM7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSwyQkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxTQUFTLENBQUMsV0FBb0I7UUFDNUIsT0FBTztZQUNMLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLFFBQVE7WUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUM1QixLQUFLLEVBQUUsV0FBVztTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQ1YsRUFBVSxFQUNWLEtBQWtCO1FBRWxCLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQWdCO2dCQUM1QixHQUFHLEtBQUs7YUFDVCxDQUFDO1lBQ0YsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdGRCx3QkE2RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWNyZXRWYWx1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU2VjcmV0IGFzIENka1NlY3JldCxcbiAgdHlwZSBTZWNyZXRTdHJpbmdHZW5lcmF0b3IsXG4gIFJlcGxpY2FSZWdpb24sXG4gIHR5cGUgSVNlY3JldFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgdHlwZSBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5IH0gZnJvbSBcIi4va21zXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgU2VjcmV0UHJvcHMge1xuICBzZWNyZXROYW1lOiBzdHJpbmc7XG4gIHNlY3JldE9iamVjdFZhbHVlPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFNlY3JldFZhbHVlO1xuICB9O1xuICBzZWNyZXRTdHJpbmdWYWx1ZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGFsaWFzTmFtZT86IHN0cmluZztcbiAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc/OiBTZWNyZXRTdHJpbmdHZW5lcmF0b3I7XG4gIC8qKiBSZWdpb25zIHdoZXJlIHRoaXMgc2VjcmV0IHNob3VsZCBiZSByZXBsaWNhdGVkIChmb3IgR2xvYmFsIEF1cm9yYSkgKi9cbiAgcmVwbGljYVJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgLyoqIFNldCB0byB0cnVlIHRvIGltcG9ydCBhbiBleGlzdGluZyBzZWNyZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUgKGZvciByZXBsaWNhdGVkIHNlY3JldHMpICovXG4gIGltcG9ydEV4aXN0aW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU2VjcmV0SW1wb3J0ID0ge1xuICAvKipcbiAgICogU2VjcmV0IElEXG4gICAqL1xuICBpZDogc3RyaW5nO1xuICAvKipcbiAgICogU2VjcmV0IG5hbWVcbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgLSBtYXkgYmUgdXNlZCB0byBpbXBvcnQgYSBzcGVjaWZpYyBmaWVsZCBmcm9tIHRoZSBzZWNyZXRcbiAgICovXG4gIGZpZWxkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIFNlY3JldCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBpZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0OiBJU2VjcmV0O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0c0N1c3RvbWVyTWFuYWdlZEtleT86IEN1c3RvbWVyTWFuYWdlZEtleTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VjcmV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgLy8gSWYgaW1wb3J0RXhpc3RpbmcgaXMgdHJ1ZSwgcmVmZXJlbmNlIGFuIGV4aXN0aW5nIHNlY3JldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBvbmVcbiAgICBpZiAocHJvcHMuaW1wb3J0RXhpc3RpbmcpIHtcbiAgICAgIC8vIEltcG9ydCB0aGUgZXhpc3Rpbmcgc2VjcmV0IChsaWtlbHkgcmVwbGljYXRlZCBmcm9tIGFub3RoZXIgcmVnaW9uKVxuICAgICAgdGhpcy5zZWNyZXQgPSBDZGtTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7aWR9U2VjcmV0YCxcbiAgICAgICAgcHJvcHMuc2VjcmV0TmFtZVxuICAgICAgKTtcbiAgICAgIC8vIE5vIEtNUyBrZXkgbmVlZGVkIGZvciBpbXBvcnRlZCBzZWNyZXRzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIEtNUyBrZXkgZm9yIG5ldyBzZWNyZXRzIG9ubHlcbiAgICB0aGlzLnNlY3JldHNDdXN0b21lck1hbmFnZWRLZXkgPSBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfUN1c3RvbWVyTWFuYWdlZEtleWAsXG4gICAgICB7XG4gICAgICAgIGFsaWFzTmFtZTogYGNtay8ke2lkfWBcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogSWYgYSBzZWNyZXRTdHJpbmdWYWx1ZSBpcyBwcm92aWRlZCwgdXNlIGl0IHRvIGNyZWF0ZSB0aGUgc2VjcmV0LlxuICAgICAqL1xuICAgIGNvbnN0IHNlY3JldFN0cmluZ1ZhbHVlID0gcHJvcHMuc2VjcmV0U3RyaW5nVmFsdWVcbiAgICAgID8ge1xuICAgICAgICAgIHNlY3JldFN0cmluZ1ZhbHVlOiBTZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQoXG4gICAgICAgICAgICBwcm9wcy5zZWNyZXRTdHJpbmdWYWx1ZSB8fCBcIlwiXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuXG4gICAgLyoqXG4gICAgICogSWYgYSBnZW5lcmF0ZVNlY3JldFN0cmluZyBpcyBwcm92aWRlZCwgdXNlIGl0IHRvIGNyZWF0ZSB0aGUgc2VjcmV0LlxuICAgICAqIElmIGEgc2VjcmV0U3RyaW5nVmFsdWUgaXMgcHJvdmlkZWQsIGlnbm9yZSB0aGUgZ2VuZXJhdGVTZWNyZXRTdHJpbmcuXG4gICAgICovXG4gICAgY29uc3QgZ2VuZXJhdGVTZWNyZXRTdHJpbmcgPVxuICAgICAgIXByb3BzLnNlY3JldFN0cmluZ1ZhbHVlICYmIHByb3BzLmdlbmVyYXRlU2VjcmV0U3RyaW5nXG4gICAgICAgID8geyBnZW5lcmF0ZVNlY3JldFN0cmluZzogcHJvcHMuZ2VuZXJhdGVTZWNyZXRTdHJpbmcgfVxuICAgICAgICA6IHt9O1xuXG4gICAgLy8gQ29uZmlndXJlIHNlY3JldCByZXBsaWNhdGlvbiBpZiByZWdpb25zIGFyZSBzcGVjaWZpZWRcbiAgICBjb25zdCByZXBsaWNhUmVnaW9ucyA9IHByb3BzLnJlcGxpY2FSZWdpb25zXG4gICAgICA/IHtcbiAgICAgICAgICByZXBsaWNhUmVnaW9uczogcHJvcHMucmVwbGljYVJlZ2lvbnMubWFwKChyZWdpb24pID0+ICh7XG4gICAgICAgICAgICByZWdpb25cbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgYmFzZSBvcHRpb25zIGZvciBDZGtTZWNyZXRcbiAgICBjb25zdCBzZWNyZXRPcHRpb25zID0ge1xuICAgICAgc2VjcmV0TmFtZTogcHJvcHMuc2VjcmV0TmFtZSxcbiAgICAgIHNlY3JldE9iamVjdFZhbHVlOiBwcm9wcy5zZWNyZXRPYmplY3RWYWx1ZSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMuc2VjcmV0c0N1c3RvbWVyTWFuYWdlZEtleSEua2V5LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgLi4uc2VjcmV0U3RyaW5nVmFsdWUsXG4gICAgICAuLi5nZW5lcmF0ZVNlY3JldFN0cmluZyxcbiAgICAgIC4uLnJlcGxpY2FSZWdpb25zXG4gICAgfTtcblxuICAgIHRoaXMuc2VjcmV0ID0gbmV3IENka1NlY3JldCh0aGlzLCBgJHtpZH1TZWNyZXRgLCBzZWNyZXRPcHRpb25zKTtcbiAgfVxuXG4gIGdldEltcG9ydChzZWNyZXRGaWVsZD86IHN0cmluZyk6IFNlY3JldEltcG9ydCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHt0aGlzLmlkfVNlY3JldGAsXG4gICAgICBuYW1lOiB0aGlzLnNlY3JldC5zZWNyZXROYW1lLFxuICAgICAgZmllbGQ6IHNlY3JldEZpZWxkXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBTZWNyZXRQcm9wc1xuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBTZWNyZXRQcm9wcyA9IHtcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIG5ld1Byb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc2VjcmV0cy9zZWNyZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBQzFDLHVFQUl3QztBQUN4QywyQ0FBdUM7QUFFdkMsK0JBQTJDO0FBaUMzQyxNQUFhLE1BQU8sU0FBUSxzQkFBUztJQUtuQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFYixzRkFBc0Y7UUFDdEYsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxNQUFNLEdBQUcsMkJBQVMsQ0FBQyxnQkFBZ0IsQ0FDdEMsSUFBSSxFQUNKLEdBQUcsRUFBRSxRQUFRLEVBQ2IsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztZQUNGLHlDQUF5QztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSx3QkFBa0IsQ0FDckQsSUFBSSxFQUNKLEdBQUcsRUFBRSxvQkFBb0IsRUFDekI7WUFDRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUU7U0FDdkIsQ0FDRixDQUFDO1FBRUY7O1dBRUc7UUFDSCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUI7WUFDL0MsQ0FBQyxDQUFDO2dCQUNFLGlCQUFpQixFQUFFLHlCQUFXLENBQUMsZUFBZSxDQUM1QyxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUM5QjthQUNGO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQOzs7V0FHRztRQUNILE1BQU0sb0JBQW9CLEdBQ3hCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxvQkFBb0I7WUFDcEQsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCx3REFBd0Q7UUFDeEQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWM7WUFDekMsQ0FBQyxDQUFDO2dCQUNFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDcEQsTUFBTTtpQkFDUCxDQUFDLENBQUM7YUFDSjtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUCwyQ0FBMkM7UUFDM0MsTUFBTSxhQUFhLEdBQUc7WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsYUFBYSxFQUFFLElBQUksQ0FBQyx5QkFBMEIsQ0FBQyxHQUFHO1lBQ2xELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixHQUFHLGlCQUFpQjtZQUNwQixHQUFHLG9CQUFvQjtZQUN2QixHQUFHLGNBQWM7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSwyQkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxTQUFTLENBQUMsV0FBb0I7UUFDNUIsT0FBTztZQUNMLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLFFBQVE7WUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUM1QixLQUFLLEVBQUUsV0FBVztTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQ1YsRUFBVSxFQUNWLEtBQWtCO1FBRWxCLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQWdCO2dCQUM1QixHQUFHLEtBQUs7YUFDVCxDQUFDO1lBQ0YsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdGRCx3QkE2RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWNyZXRWYWx1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU2VjcmV0IGFzIENka1NlY3JldCxcbiAgdHlwZSBTZWNyZXRTdHJpbmdHZW5lcmF0b3IsXG4gIHR5cGUgSVNlY3JldFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgdHlwZSBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5IH0gZnJvbSBcIi4va21zXCI7XG5cbmludGVyZmFjZSBTZWNyZXRQcm9wcyB7XG4gIHNlY3JldE5hbWU6IHN0cmluZztcbiAgc2VjcmV0T2JqZWN0VmFsdWU/OiB7XG4gICAgW2tleTogc3RyaW5nXTogU2VjcmV0VmFsdWU7XG4gIH07XG4gIHNlY3JldFN0cmluZ1ZhbHVlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgYWxpYXNOYW1lPzogc3RyaW5nO1xuICBnZW5lcmF0ZVNlY3JldFN0cmluZz86IFNlY3JldFN0cmluZ0dlbmVyYXRvcjtcbiAgLyoqIFJlZ2lvbnMgd2hlcmUgdGhpcyBzZWNyZXQgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgKGZvciBHbG9iYWwgQXVyb3JhKSAqL1xuICByZXBsaWNhUmVnaW9ucz86IHN0cmluZ1tdO1xuICAvKiogU2V0IHRvIHRydWUgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIHNlY3JldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZSAoZm9yIHJlcGxpY2F0ZWQgc2VjcmV0cykgKi9cbiAgaW1wb3J0RXhpc3Rpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBTZWNyZXRJbXBvcnQgPSB7XG4gIC8qKlxuICAgKiBTZWNyZXQgSURcbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZWNyZXQgbmFtZVxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCAtIG1heSBiZSB1c2VkIHRvIGltcG9ydCBhIHNwZWNpZmljIGZpZWxkIGZyb20gdGhlIHNlY3JldFxuICAgKi9cbiAgZmllbGQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgU2VjcmV0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ6IElTZWNyZXQ7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXRzQ3VzdG9tZXJNYW5hZ2VkS2V5PzogQ3VzdG9tZXJNYW5hZ2VkS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTZWNyZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICAvLyBJZiBpbXBvcnRFeGlzdGluZyBpcyB0cnVlLCByZWZlcmVuY2UgYW4gZXhpc3Rpbmcgc2VjcmV0IGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZVxuICAgIGlmIChwcm9wcy5pbXBvcnRFeGlzdGluZykge1xuICAgICAgLy8gSW1wb3J0IHRoZSBleGlzdGluZyBzZWNyZXQgKGxpa2VseSByZXBsaWNhdGVkIGZyb20gYW5vdGhlciByZWdpb24pXG4gICAgICB0aGlzLnNlY3JldCA9IENka1NlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtpZH1TZWNyZXRgLFxuICAgICAgICBwcm9wcy5zZWNyZXROYW1lXG4gICAgICApO1xuICAgICAgLy8gTm8gS01TIGtleSBuZWVkZWQgZm9yIGltcG9ydGVkIHNlY3JldHNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgS01TIGtleSBmb3IgbmV3IHNlY3JldHMgb25seVxuICAgIHRoaXMuc2VjcmV0c0N1c3RvbWVyTWFuYWdlZEtleSA9IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9Q3VzdG9tZXJNYW5hZ2VkS2V5YCxcbiAgICAgIHtcbiAgICAgICAgYWxpYXNOYW1lOiBgY21rLyR7aWR9YFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBJZiBhIHNlY3JldFN0cmluZ1ZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgaXQgdG8gY3JlYXRlIHRoZSBzZWNyZXQuXG4gICAgICovXG4gICAgY29uc3Qgc2VjcmV0U3RyaW5nVmFsdWUgPSBwcm9wcy5zZWNyZXRTdHJpbmdWYWx1ZVxuICAgICAgPyB7XG4gICAgICAgICAgc2VjcmV0U3RyaW5nVmFsdWU6IFNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChcbiAgICAgICAgICAgIHByb3BzLnNlY3JldFN0cmluZ1ZhbHVlIHx8IFwiXCJcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG5cbiAgICAvKipcbiAgICAgKiBJZiBhIGdlbmVyYXRlU2VjcmV0U3RyaW5nIGlzIHByb3ZpZGVkLCB1c2UgaXQgdG8gY3JlYXRlIHRoZSBzZWNyZXQuXG4gICAgICogSWYgYSBzZWNyZXRTdHJpbmdWYWx1ZSBpcyBwcm92aWRlZCwgaWdub3JlIHRoZSBnZW5lcmF0ZVNlY3JldFN0cmluZy5cbiAgICAgKi9cbiAgICBjb25zdCBnZW5lcmF0ZVNlY3JldFN0cmluZyA9XG4gICAgICAhcHJvcHMuc2VjcmV0U3RyaW5nVmFsdWUgJiYgcHJvcHMuZ2VuZXJhdGVTZWNyZXRTdHJpbmdcbiAgICAgICAgPyB7IGdlbmVyYXRlU2VjcmV0U3RyaW5nOiBwcm9wcy5nZW5lcmF0ZVNlY3JldFN0cmluZyB9XG4gICAgICAgIDoge307XG5cbiAgICAvLyBDb25maWd1cmUgc2VjcmV0IHJlcGxpY2F0aW9uIGlmIHJlZ2lvbnMgYXJlIHNwZWNpZmllZFxuICAgIGNvbnN0IHJlcGxpY2FSZWdpb25zID0gcHJvcHMucmVwbGljYVJlZ2lvbnNcbiAgICAgID8ge1xuICAgICAgICAgIHJlcGxpY2FSZWdpb25zOiBwcm9wcy5yZXBsaWNhUmVnaW9ucy5tYXAoKHJlZ2lvbikgPT4gKHtcbiAgICAgICAgICAgIHJlZ2lvblxuICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuXG4gICAgLy8gQ29uc3RydWN0IHRoZSBiYXNlIG9wdGlvbnMgZm9yIENka1NlY3JldFxuICAgIGNvbnN0IHNlY3JldE9wdGlvbnMgPSB7XG4gICAgICBzZWNyZXROYW1lOiBwcm9wcy5zZWNyZXROYW1lLFxuICAgICAgc2VjcmV0T2JqZWN0VmFsdWU6IHByb3BzLnNlY3JldE9iamVjdFZhbHVlLFxuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5zZWNyZXRzQ3VzdG9tZXJNYW5hZ2VkS2V5IS5rZXksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAuLi5zZWNyZXRTdHJpbmdWYWx1ZSxcbiAgICAgIC4uLmdlbmVyYXRlU2VjcmV0U3RyaW5nLFxuICAgICAgLi4ucmVwbGljYVJlZ2lvbnNcbiAgICB9O1xuXG4gICAgdGhpcy5zZWNyZXQgPSBuZXcgQ2RrU2VjcmV0KHRoaXMsIGAke2lkfVNlY3JldGAsIHNlY3JldE9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0SW1wb3J0KHNlY3JldEZpZWxkPzogc3RyaW5nKTogU2VjcmV0SW1wb3J0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke3RoaXMuaWR9U2VjcmV0YCxcbiAgICAgIG5hbWU6IHRoaXMuc2VjcmV0LnNlY3JldE5hbWUsXG4gICAgICBmaWVsZDogc2VjcmV0RmllbGRcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFNlY3JldFByb3BzXG4gICk6IChzYjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiAoc2I6IFN0YWNrQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgbmV3UHJvcHM6IFNlY3JldFByb3BzID0ge1xuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhzYi5nZXRTdGFjaygpLCBpZCwgbmV3UHJvcHMpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -2,8 +2,7 @@ import { type Construct } from "constructs";
2
2
  import { Repository, type RepositoryProps } from "aws-cdk-lib/aws-ecr";
3
3
  import type App from "../../../app";
4
4
  import { type StackBuilder } from "../base/awsStack";
5
- interface EcrProps {
6
- }
5
+ type EcrProps = Record<string, never>;
7
6
  export declare class EcrFactory {
8
7
  static build(id: string, props?: EcrProps): (app: App, scope: Construct) => Ecr;
9
8
  }
@@ -20,7 +20,7 @@ class Ecr extends aws_ecr_1.Repository {
20
20
  super(scope, id, Ecr.getRepositoryProps(props));
21
21
  this.outputs = [];
22
22
  this.outputs.push(new aws_cdk_lib_1.CfnOutput(this, "ecrRepository", {
23
- key: "RepositoryName",
23
+ key: `${id}RepositoryName`,
24
24
  value: this.repositoryName,
25
25
  exportName: `${id}RepositoryName`
26
26
  }));
@@ -40,4 +40,4 @@ class Ecr extends aws_ecr_1.Repository {
40
40
  }
41
41
  }
42
42
  exports.Ecr = Ecr;
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmFnZS9lY3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBSTZCO0FBQzdCLDZDQUF1RDtBQU92RCxNQUFhLFVBQVU7SUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBZ0I7UUFDdkMsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsR0FBRyxFQUFFO2dCQUNMLEdBQUcsS0FBSzthQUNULENBQUM7WUFDRixPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBVkQsZ0NBVUM7QUFFRCxNQUFhLEdBQUksU0FBUSxvQkFBVTtJQUdqQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBSDFDLFlBQU8sR0FBZ0IsRUFBRSxDQUFDO1FBS2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxnQkFBZ0I7WUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzFCLFVBQVUsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCO1NBQ2xDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBZ0I7UUFDeEMsdUJBQXVCO1FBQ3ZCLG9FQUFvRTtRQUNwRSxPQUFPO1lBQ0wsZUFBZSxFQUFFLElBQUk7WUFDckIsa0JBQWtCLEVBQUUsdUJBQWEsQ0FBQyxPQUFPO1lBQ3pDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUFnQjtRQUN2QyxPQUFPLENBQUMsS0FBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0Y7QUE3QkQsa0JBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgUmVwb3NpdG9yeSxcbiAgdHlwZSBSZXBvc2l0b3J5UHJvcHMsXG4gIFRhZ011dGFiaWxpdHlcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIENmbk91dHB1dCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uLy4uL2FwcFwiO1xuaW1wb3J0IHsgdHlwZSBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuXG5pbnRlcmZhY2UgRWNyUHJvcHMge31cblxuZXhwb3J0IGNsYXNzIEVjckZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM/OiBFY3JQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IGVjclByb3BzID0ge1xuICAgICAgICAuLi57fSxcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IEVjcihzY29wZSwgaWQsIGVjclByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFY3IgZXh0ZW5kcyBSZXBvc2l0b3J5IHtcbiAgcHJpdmF0ZSBvdXRwdXRzOiBDZm5PdXRwdXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogRWNyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEVjci5nZXRSZXBvc2l0b3J5UHJvcHMocHJvcHMpKTtcblxuICAgIHRoaXMub3V0cHV0cy5wdXNoKFxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBcImVjclJlcG9zaXRvcnlcIiwge1xuICAgICAgICBrZXk6IFwiUmVwb3NpdG9yeU5hbWVcIixcbiAgICAgICAgdmFsdWU6IHRoaXMucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke2lkfVJlcG9zaXRvcnlOYW1lYFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBzdGF0aWMgZ2V0UmVwb3NpdG9yeVByb3BzKHByb3BzPzogRWNyUHJvcHMpOiBSZXBvc2l0b3J5UHJvcHMge1xuICAgIC8vIHRvZG86IGxpZmVDeWNsZVJ1bGVzXG4gICAgLy8gdG9kbzogRW5jcnlwdGlvbiAmIEVuY3J5cHRpb25LZXkgKGRlZmF1bHQgaXMgQVdTIG1hbmFnZWQgS01TIGtleSlcbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VTY2FuT25QdXNoOiB0cnVlLFxuICAgICAgaW1hZ2VUYWdNdXRhYmlsaXR5OiBUYWdNdXRhYmlsaXR5Lk1VVEFCTEUsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTlxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM/OiBFY3JQcm9wcyk6IChzY29wZTogU3RhY2tCdWlsZGVyKSA9PiBFY3Ige1xuICAgIHJldHVybiAoc2NvcGU6IFN0YWNrQnVpbGRlcikgPT4gbmV3IEVjcihzY29wZS5nZXRTdGFjaygpLCBpZCwgcHJvcHMpO1xuICB9XG59XG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmFnZS9lY3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBSTZCO0FBQzdCLDZDQUF1RDtBQU92RCxNQUFhLFVBQVU7SUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBZ0I7UUFDdkMsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsR0FBRyxFQUFFO2dCQUNMLEdBQUcsS0FBSzthQUNULENBQUM7WUFDRixPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBVkQsZ0NBVUM7QUFFRCxNQUFhLEdBQUksU0FBUSxvQkFBVTtJQUdqQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBSDFDLFlBQU8sR0FBZ0IsRUFBRSxDQUFDO1FBS2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYztZQUMxQixVQUFVLEVBQUUsR0FBRyxFQUFFLGdCQUFnQjtTQUNsQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQWdCO1FBQ3hDLHVCQUF1QjtRQUN2QixvRUFBb0U7UUFDcEUsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGtCQUFrQixFQUFFLHVCQUFhLENBQUMsT0FBTztZQUN6QyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBZ0I7UUFDdkMsT0FBTyxDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBN0JELGtCQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIFJlcG9zaXRvcnksXG4gIHR5cGUgUmVwb3NpdG9yeVByb3BzLFxuICBUYWdNdXRhYmlsaXR5XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi8uLi9hcHBcIjtcbmltcG9ydCB7IHR5cGUgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2Jhc2UvYXdzU3RhY2tcIjtcblxudHlwZSBFY3JQcm9wcyA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuZXhwb3J0IGNsYXNzIEVjckZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM/OiBFY3JQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IGVjclByb3BzID0ge1xuICAgICAgICAuLi57fSxcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IEVjcihzY29wZSwgaWQsIGVjclByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFY3IgZXh0ZW5kcyBSZXBvc2l0b3J5IHtcbiAgcHJpdmF0ZSBvdXRwdXRzOiBDZm5PdXRwdXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogRWNyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEVjci5nZXRSZXBvc2l0b3J5UHJvcHMocHJvcHMpKTtcblxuICAgIHRoaXMub3V0cHV0cy5wdXNoKFxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBcImVjclJlcG9zaXRvcnlcIiwge1xuICAgICAgICBrZXk6IGAke2lkfVJlcG9zaXRvcnlOYW1lYCxcbiAgICAgICAgdmFsdWU6IHRoaXMucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke2lkfVJlcG9zaXRvcnlOYW1lYFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBzdGF0aWMgZ2V0UmVwb3NpdG9yeVByb3BzKHByb3BzPzogRWNyUHJvcHMpOiBSZXBvc2l0b3J5UHJvcHMge1xuICAgIC8vIHRvZG86IGxpZmVDeWNsZVJ1bGVzXG4gICAgLy8gdG9kbzogRW5jcnlwdGlvbiAmIEVuY3J5cHRpb25LZXkgKGRlZmF1bHQgaXMgQVdTIG1hbmFnZWQgS01TIGtleSlcbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VTY2FuT25QdXNoOiB0cnVlLFxuICAgICAgaW1hZ2VUYWdNdXRhYmlsaXR5OiBUYWdNdXRhYmlsaXR5Lk1VVEFCTEUsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTlxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM/OiBFY3JQcm9wcyk6IChzY29wZTogU3RhY2tCdWlsZGVyKSA9PiBFY3Ige1xuICAgIHJldHVybiAoc2NvcGU6IFN0YWNrQnVpbGRlcikgPT4gbmV3IEVjcihzY29wZS5nZXRTdGFjaygpLCBpZCwgcHJvcHMpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cfnOutput_js_1 = require("./cfnOutput.js");
4
+ const cdk = require("aws-cdk-lib");
5
+ describe("sanitiseCfnKey", () => {
6
+ it("should convert kebab-case to camelCase", () => {
7
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("compute-deploy-test")).toBe("computeDeployTest");
8
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("my-resource-name")).toBe("myResourceName");
9
+ });
10
+ it("should convert dot.separated to camelCase", () => {
11
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("my.domain.com")).toBe("myDomainCom");
12
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("api.v2.endpoint")).toBe("apiV2Endpoint");
13
+ });
14
+ it("should convert snake_case to camelCase", () => {
15
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("my_resource_name")).toBe("myResourceName");
16
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("database_host_endpoint")).toBe("databaseHostEndpoint");
17
+ });
18
+ it("should remove non-alphanumeric characters", () => {
19
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("my@resource#name")).toBe("myresourcename");
20
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("test!value$here")).toBe("testvaluehere");
21
+ });
22
+ it("should preserve camelCase input", () => {
23
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("myResourceName")).toBe("myresourcename");
24
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("ecrRepositoryName")).toBe("ecrrepositoryname");
25
+ });
26
+ it("should handle mixed formats", () => {
27
+ expect((0, cfnOutput_js_1.sanitiseCfnKey)("app-name_v2.test")).toBe("appNameV2Test");
28
+ });
29
+ });
30
+ describe("CfnOutput", () => {
31
+ let app;
32
+ let stack;
33
+ beforeEach(() => {
34
+ app = new cdk.App();
35
+ stack = new cdk.Stack(app, "TestStack");
36
+ });
37
+ describe("export name handling", () => {
38
+ it("should NOT sanitize exportName - must preserve case for cross-stack lookups", () => {
39
+ // This is a regression test for the ECR repository lookup issue.
40
+ // The CLI looks for exports like "app6EcrRepositoryName" and CloudFormation
41
+ // export names are case-sensitive. Sanitizing export names would break lookups.
42
+ const output = new cfnOutput_js_1.CfnOutput(stack, "TestOutput", {
43
+ value: "test-value",
44
+ exportName: "app6EcrRepositoryName"
45
+ });
46
+ // Get the CloudFormation template
47
+ const template = app.synth().getStackByName("TestStack").template;
48
+ const outputs = template.Outputs;
49
+ // Find our output (the key will be sanitized, but we need to check exportName)
50
+ const outputKey = Object.keys(outputs).find((key) => key.toLowerCase().includes("testoutput"));
51
+ expect(outputKey).toBeDefined();
52
+ // The export name must NOT be sanitized - it must be exactly as provided
53
+ expect(outputs[outputKey].Export.Name).toBe("app6EcrRepositoryName");
54
+ });
55
+ it("should preserve PascalCase export names", () => {
56
+ const output = new cfnOutput_js_1.CfnOutput(stack, "MyOutput", {
57
+ value: "test-value",
58
+ exportName: "MyAppDatabaseEndpoint"
59
+ });
60
+ const template = app.synth().getStackByName("TestStack").template;
61
+ const outputs = template.Outputs;
62
+ const outputKey = Object.keys(outputs).find((key) => key.toLowerCase().includes("myoutput"));
63
+ expect(outputs[outputKey].Export.Name).toBe("MyAppDatabaseEndpoint");
64
+ });
65
+ it("should preserve export names with mixed casing", () => {
66
+ const output = new cfnOutput_js_1.CfnOutput(stack, "EcrOutput", {
67
+ value: "test-ecr-arn",
68
+ exportName: "app6EcrRepositoryArn"
69
+ });
70
+ const template = app.synth().getStackByName("TestStack").template;
71
+ const outputs = template.Outputs;
72
+ const outputKey = Object.keys(outputs).find((key) => key.toLowerCase().includes("ecroutput"));
73
+ // Export name must be exactly as provided - CLI depends on this
74
+ expect(outputs[outputKey].Export.Name).toBe("app6EcrRepositoryArn");
75
+ });
76
+ });
77
+ describe("key sanitization", () => {
78
+ it("should sanitize the output key", () => {
79
+ new cfnOutput_js_1.CfnOutput(stack, "my-output-id", {
80
+ value: "test-value"
81
+ });
82
+ const template = app.synth().getStackByName("TestStack").template;
83
+ const outputs = template.Outputs;
84
+ // Key should be sanitized to camelCase
85
+ expect(outputs["myoutputid"]).toBeDefined();
86
+ });
87
+ it("should sanitize key when explicitly provided", () => {
88
+ new cfnOutput_js_1.CfnOutput(stack, "TestId", {
89
+ value: "test-value",
90
+ key: "my-custom-key"
91
+ });
92
+ const template = app.synth().getStackByName("TestStack").template;
93
+ const outputs = template.Outputs;
94
+ // The custom key should be sanitized
95
+ const outputEntry = Object.values(outputs)[0];
96
+ // Note: The key is set in CloudFormation logical ID, not as a separate property
97
+ // The output should use the sanitized ID
98
+ expect(outputs["testid"]).toBeDefined();
99
+ });
100
+ });
101
+ });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuT3V0cHV0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY2ZuT3V0cHV0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBMkQ7QUFDM0QsbUNBQW1DO0FBRW5DLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7SUFDOUIsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLENBQUMsSUFBQSw2QkFBYyxFQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsSUFBQSw2QkFBYyxFQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLElBQUEsNkJBQWMsRUFBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsSUFBQSw2QkFBYyxFQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxJQUFBLDZCQUFjLEVBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxJQUFBLDZCQUFjLEVBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkQsc0JBQXNCLENBQ3ZCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFB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LHdCQUFTLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDbkMsS0FBSyxFQUFFLFlBQVk7YUFDcEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDbEUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUVqQyx1Q0FBdUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxJQUFJLHdCQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDN0IsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEdBQUcsRUFBRSxlQUFlO2FBQ3JCLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFFakMscUNBQXFDO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUM7WUFDckQsZ0ZBQWdGO1lBQ2hGLHlDQUF5QztZQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2FuaXRpc2VDZm5LZXksIENmbk91dHB1dCB9IGZyb20gXCIuL2Nmbk91dHB1dC5qc1wiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5kZXNjcmliZShcInNhbml0aXNlQ2ZuS2V5XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgY29udmVydCBrZWJhYi1jYXNlIHRvIGNhbWVsQ2FzZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwiY29tcHV0ZS1kZXBsb3ktdGVzdFwiKSkudG9CZShcImNvbXB1dGVEZXBsb3lUZXN0XCIpO1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcIm15LXJlc291cmNlLW5hbWVcIikpLnRvQmUoXCJteVJlc291cmNlTmFtZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgY29udmVydCBkb3Quc2VwYXJhdGVkIHRvIGNhbWVsQ2FzZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwibXkuZG9tYWluLmNvbVwiKSkudG9CZShcIm15RG9tYWluQ29tXCIpO1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcImFwaS52Mi5lbmRwb2ludFwiKSkudG9CZShcImFwaVYyRW5kcG9pbnRcIik7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIGNvbnZlcnQgc25ha2VfY2FzZSB0byBjYW1lbENhc2VcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcIm15X3Jlc291cmNlX25hbWVcIikpLnRvQmUoXCJteVJlc291cmNlTmFtZVwiKTtcbiAgICBleHBlY3Qoc2FuaXRpc2VDZm5LZXkoXCJkYXRhYmFzZV9ob3N0X2VuZHBvaW50XCIpKS50b0JlKFxuICAgICAgXCJkYXRhYmFzZUhvc3RFbmRwb2ludFwiXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgcmVtb3ZlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwibXlAcmVzb3VyY2UjbmFtZVwiKSkudG9CZShcIm15cmVzb3VyY2VuYW1lXCIpO1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcInRlc3QhdmFsdWUkaGVyZVwiKSkudG9CZShcInRlc3R2YWx1ZWhlcmVcIik7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHByZXNlcnZlIGNhbWVsQ2FzZSBpbnB1dFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwibXlSZXNvdXJjZU5hbWVcIikpLnRvQmUoXCJteXJlc291cmNlbmFtZVwiKTtcbiAgICBleHBlY3Qoc2FuaXRpc2VDZm5LZXkoXCJlY3JSZXBvc2l0b3J5TmFtZVwiKSkudG9CZShcImVjcnJlcG9zaXRvcnluYW1lXCIpO1xuICB9KTtcblxuICBpdChcInNob3VsZCBoYW5kbGUgbWl4ZWQgZm9ybWF0c1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwiYXBwLW5hbWVfdjIudGVzdFwiKSkudG9CZShcImFwcE5hbWVWMlRlc3RcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQ2ZuT3V0cHV0XCIsICgpID0+IHtcbiAgbGV0IGFwcDogY2RrLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGsuU3RhY2s7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgICBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJleHBvcnQgbmFtZSBoYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgTk9UIHNhbml0aXplIGV4cG9ydE5hbWUgLSBtdXN0IHByZXNlcnZlIGNhc2UgZm9yIGNyb3NzLXN0YWNrIGxvb2t1cHNcIiwgKCkgPT4ge1xuICAgICAgLy8gVGhpcyBpcyBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIEVDUiByZXBvc2l0b3J5IGxvb2t1cCBpc3N1ZS5cbiAgICAgIC8vIFRoZSBDTEkgbG9va3MgZm9yIGV4cG9ydHMgbGlrZSBcImFwcDZFY3JSZXBvc2l0b3J5TmFtZVwiIGFuZCBDbG91ZEZvcm1hdGlvblxuICAgICAgLy8gZXhwb3J0IG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS4gU2FuaXRpemluZyBleHBvcnQgbmFtZXMgd291bGQgYnJlYWsgbG9va3Vwcy5cblxuICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IENmbk91dHB1dChzdGFjaywgXCJUZXN0T3V0cHV0XCIsIHtcbiAgICAgICAgdmFsdWU6IFwidGVzdC12YWx1ZVwiLFxuICAgICAgICBleHBvcnROYW1lOiBcImFwcDZFY3JSZXBvc2l0b3J5TmFtZVwiXG4gICAgICB9KTtcblxuICAgICAgLy8gR2V0IHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhcHAuc3ludGgoKS5nZXRTdGFja0J5TmFtZShcIlRlc3RTdGFja1wiKS50ZW1wbGF0ZTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0ZW1wbGF0ZS5PdXRwdXRzO1xuXG4gICAgICAvLyBGaW5kIG91ciBvdXRwdXQgKHRoZSBrZXkgd2lsbCBiZSBzYW5pdGl6ZWQsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIGV4cG9ydE5hbWUpXG4gICAgICBjb25zdCBvdXRwdXRLZXkgPSBPYmplY3Qua2V5cyhvdXRwdXRzKS5maW5kKChrZXkpID0+XG4gICAgICAgIGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwidGVzdG91dHB1dFwiKVxuICAgICAgKTtcbiAgICAgIGV4cGVjdChvdXRwdXRLZXkpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIFRoZSBleHBvcnQgbmFtZSBtdXN0IE5PVCBiZSBzYW5pdGl6ZWQgLSBpdCBtdXN0IGJlIGV4YWN0bHkgYXMgcHJvdmlkZWRcbiAgICAgIGV4cGVjdChvdXRwdXRzW291dHB1dEtleSFdLkV4cG9ydC5OYW1lKS50b0JlKFwiYXBwNkVjclJlcG9zaXRvcnlOYW1lXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcHJlc2VydmUgUGFzY2FsQ2FzZSBleHBvcnQgbmFtZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IENmbk91dHB1dChzdGFjaywgXCJNeU91dHB1dFwiLCB7XG4gICAgICAgIHZhbHVlOiBcInRlc3QtdmFsdWVcIixcbiAgICAgICAgZXhwb3J0TmFtZTogXCJNeUFwcERhdGFiYXNlRW5kcG9pbnRcIlxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXBwLnN5bnRoKCkuZ2V0U3RhY2tCeU5hbWUoXCJUZXN0U3RhY2tcIikudGVtcGxhdGU7XG4gICAgICBjb25zdCBvdXRwdXRzID0gdGVtcGxhdGUuT3V0cHV0cztcbiAgICAgIGNvbnN0IG91dHB1dEtleSA9IE9iamVjdC5rZXlzKG91dHB1dHMpLmZpbmQoKGtleSkgPT5cbiAgICAgICAga2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJteW91dHB1dFwiKVxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KG91dHB1dHNbb3V0cHV0S2V5IV0uRXhwb3J0Lk5hbWUpLnRvQmUoXCJNeUFwcERhdGFiYXNlRW5kcG9pbnRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBwcmVzZXJ2ZSBleHBvcnQgbmFtZXMgd2l0aCBtaXhlZCBjYXNpbmdcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IENmbk91dHB1dChzdGFjaywgXCJFY3JPdXRwdXRcIiwge1xuICAgICAgICB2YWx1ZTogXCJ0ZXN0LWVjci1hcm5cIixcbiAgICAgICAgZXhwb3J0TmFtZTogXCJhcHA2RWNyUmVwb3NpdG9yeUFyblwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhcHAuc3ludGgoKS5nZXRTdGFja0J5TmFtZShcIlRlc3RTdGFja1wiKS50ZW1wbGF0ZTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0ZW1wbGF0ZS5PdXRwdXRzO1xuICAgICAgY29uc3Qgb3V0cHV0S2V5ID0gT2JqZWN0LmtleXMob3V0cHV0cykuZmluZCgoa2V5KSA9PlxuICAgICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImVjcm91dHB1dFwiKVxuICAgICAgKTtcblxuICAgICAgLy8gRXhwb3J0IG5hbWUgbXVzdCBiZSBleGFjdGx5IGFzIHByb3ZpZGVkIC0gQ0xJIGRlcGVuZHMgb24gdGhpc1xuICAgICAgZXhwZWN0KG91dHB1dHNbb3V0cHV0S2V5IV0uRXhwb3J0Lk5hbWUpLnRvQmUoXCJhcHA2RWNyUmVwb3NpdG9yeUFyblwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJrZXkgc2FuaXRpemF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzYW5pdGl6ZSB0aGUgb3V0cHV0IGtleVwiLCAoKSA9PiB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCBcIm15LW91dHB1dC1pZFwiLCB7XG4gICAgICAgIHZhbHVlOiBcInRlc3QtdmFsdWVcIlxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXBwLnN5bnRoKCkuZ2V0U3RhY2tCeU5hbWUoXCJUZXN0U3RhY2tcIikudGVtcGxhdGU7XG4gICAgICBjb25zdCBvdXRwdXRzID0gdGVtcGxhdGUuT3V0cHV0cztcblxuICAgICAgLy8gS2V5IHNob3VsZCBiZSBzYW5pdGl6ZWQgdG8gY2FtZWxDYXNlXG4gICAgICBleHBlY3Qob3V0cHV0c1tcIm15b3V0cHV0aWRcIl0pLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzYW5pdGl6ZSBrZXkgd2hlbiBleHBsaWNpdGx5IHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssIFwiVGVzdElkXCIsIHtcbiAgICAgICAgdmFsdWU6IFwidGVzdC12YWx1ZVwiLFxuICAgICAgICBrZXk6IFwibXktY3VzdG9tLWtleVwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhcHAuc3ludGgoKS5nZXRTdGFja0J5TmFtZShcIlRlc3RTdGFja1wiKS50ZW1wbGF0ZTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0ZW1wbGF0ZS5PdXRwdXRzO1xuXG4gICAgICAvLyBUaGUgY3VzdG9tIGtleSBzaG91bGQgYmUgc2FuaXRpemVkXG4gICAgICBjb25zdCBvdXRwdXRFbnRyeSA9IE9iamVjdC52YWx1ZXMob3V0cHV0cylbMF0gYXMgYW55O1xuICAgICAgLy8gTm90ZTogVGhlIGtleSBpcyBzZXQgaW4gQ2xvdWRGb3JtYXRpb24gbG9naWNhbCBJRCwgbm90IGFzIGEgc2VwYXJhdGUgcHJvcGVydHlcbiAgICAgIC8vIFRoZSBvdXRwdXQgc2hvdWxkIHVzZSB0aGUgc2FuaXRpemVkIElEXG4gICAgICBleHBlY3Qob3V0cHV0c1tcInRlc3RpZFwiXSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,8 +1,7 @@
1
1
  import { Stack } from "aws-cdk-lib";
2
2
  import { Project, type ProjectProps } from "aws-cdk-lib/aws-codebuild";
3
3
  import { Construct } from "constructs";
4
- interface CodeBuildProps extends ProjectProps {
5
- }
4
+ type CodeBuildProps = ProjectProps;
6
5
  export declare class CodeBuildProject extends Construct {
7
6
  readonly project: Project;
8
7
  constructor(scope: Construct, id: string, props: CodeBuildProps);
@@ -23,4 +23,4 @@ class CodeBuildProjectStack extends aws_cdk_lib_1.Stack {
23
23
  }
24
24
  }
25
25
  exports.CodeBuildProjectStack = CodeBuildProjectStack;
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZUJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2NvZGVCdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBb0M7QUFDcEMsNkRBQXVFO0FBQ3ZFLDJDQUF1QztBQUt2QyxNQUFhLGdCQUFpQixTQUFRLHNCQUFTO0lBRzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUJBQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ25DLEdBQUcsS0FBSztZQUNSLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLDBCQUEwQixFQUFFLEVBQUU7U0FDakUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBWEQsNENBV0M7QUFFRCxNQUFhLHFCQUFzQixTQUFRLG1CQUFLO0lBQzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDN0IsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBUkQsc0RBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUHJvamVjdCwgdHlwZSBQcm9qZWN0UHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmludGVyZmFjZSBDb2RlQnVpbGRQcm9wcyBleHRlbmRzIFByb2plY3RQcm9wcyB7fVxuXG5leHBvcnQgY2xhc3MgQ29kZUJ1aWxkUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2RlQnVpbGRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnByb2plY3QgPSBuZXcgUHJvamVjdCh0aGlzLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24gfHwgYENvZGUgYnVpbGQgcHJvamVjdCBmb3IgJHtpZH1gXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvZGVCdWlsZFByb2plY3RTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZGVCdWlsZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBDb2RlQnVpbGRQcm9qZWN0KHRoaXMsIGlkLCB7XG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG59XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZUJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2NvZGVCdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBb0M7QUFDcEMsNkRBQXVFO0FBQ3ZFLDJDQUF1QztBQUl2QyxNQUFhLGdCQUFpQixTQUFRLHNCQUFTO0lBRzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUJBQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ25DLEdBQUcsS0FBSztZQUNSLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLDBCQUEwQixFQUFFLEVBQUU7U0FDakUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBWEQsNENBV0M7QUFFRCxNQUFhLHFCQUFzQixTQUFRLG1CQUFLO0lBQzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDN0IsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBUkQsc0RBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUHJvamVjdCwgdHlwZSBQcm9qZWN0UHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxudHlwZSBDb2RlQnVpbGRQcm9wcyA9IFByb2plY3RQcm9wcztcblxuZXhwb3J0IGNsYXNzIENvZGVCdWlsZFByb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogUHJvamVjdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZUJ1aWxkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5wcm9qZWN0ID0gbmV3IFByb2plY3QodGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGBDb2RlIGJ1aWxkIHByb2plY3QgZm9yICR7aWR9YFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlQnVpbGRQcm9qZWN0U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2RlQnVpbGRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCBpZCwge1xuICAgICAgLi4ucHJvcHNcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,4 +1,5 @@
1
- import { CustomResource as customResource, Duration, type AssetOptions } from "aws-cdk-lib";
1
+ import { CustomResource as customResource } from "aws-cdk-lib";
2
+ import type { Duration, AssetOptions } from "aws-cdk-lib";
2
3
  import { type PolicyStatement } from "aws-cdk-lib/aws-iam";
3
4
  import { type Runtime } from "aws-cdk-lib/aws-lambda";
4
5
  import { Construct } from "constructs";
@@ -52,4 +52,4 @@ class CustomResource extends constructs_1.Construct {
52
52
  }
53
53
  }
54
54
  exports.CustomResource = CustomResource;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSXFCO0FBQ3JCLG1FQUF3RDtBQUV4RCx1REFBNEQ7QUFDNUQsMkNBQXVDO0FBRXZDLDhDQUFzRTtBQXVCdEUsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFJM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUNiLHVFQUF1RSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FDYix5RUFBeUUsQ0FDMUUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxZQUFZO1lBQ3ZCLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUVsRCw2RkFBNkY7UUFDN0YsTUFBTSxjQUFjLEdBQUcsWUFBWTtZQUNqQyxDQUFDLENBQUMsSUFBSSx1QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2dCQUN0QyxJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixPQUFPO2dCQUNQLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEVBQUUsU0FBUztnQkFDNUQsZUFBZSxFQUNiLEtBQUssQ0FBQyxlQUFlLElBQUksR0FBRyxFQUFFLHlCQUF5QjtnQkFDekQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2FBQ2pDLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtnQkFDekMsSUFBSTtnQkFDSixPQUFPO2dCQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxTQUFTO2dCQUM1RCxlQUFlLEVBQ2IsS0FBSyxDQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUUseUJBQXlCO2dCQUN6RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7YUFDakMsQ0FBQyxDQUFDO1FBRVAsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ25ELGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ3hELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUE1REQsd0NBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ3VzdG9tUmVzb3VyY2UgYXMgY3VzdG9tUmVzb3VyY2UsXG4gIER1cmF0aW9uLFxuICB0eXBlIEFzc2V0T3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvZGUsIHR5cGUgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBTaW5nbGV0b25GdW5jdGlvbiwgTGFtYmRhRnVuY3Rpb24gfSBmcm9tIFwiLi4vY29tcHV0ZS9sYW1iZGFcIjtcblxuaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlUHJvcHMge1xuICBydW50aW1lOiBSdW50aW1lO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbmxpbmVQb2xpY3k6IFBvbGljeVN0YXRlbWVudFtdO1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZzsgLy8gVXNlZCB0byBiZSBgW2tleTogc3RyaW5nXTogYW55YCwgdGhpcyBjb3VsZCBicmVha1xuICB9O1xuXG4gIC8vIENvZGUgc291cmNlXG4gIGNvZGVQYXRoPzogc3RyaW5nO1xuICBpbmxpbmVDb2RlPzogc3RyaW5nO1xuXG4gIC8vIEFzc2V0IG9wdGlvbnMgKG9ubHkgdXNlZCB3aXRoIGNvZGVQYXRoKVxuICBhc3NldE9wdGlvbnM/OiBBc3NldE9wdGlvbnM7XG5cbiAgLy8gT3B0aW9uYWwgb3ZlcnJpZGVzXG4gIGhhbmRsZXI/OiBzdHJpbmc7IC8vIERlZmF1bHQ6IGAke2lkfS5oYW5kbGVyYCBmb3IgY29kZVBhdGgsIGBpbmRleC5oYW5kbGVyYCBmb3IgaW5saW5lQ29kZVxuICB0aW1lb3V0PzogRHVyYXRpb247IC8vIERlZmF1bHQ6IDMwMHMgKDUgbWludXRlcylcbn1cblxuZXhwb3J0IGNsYXNzIEN1c3RvbVJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogY3VzdG9tUmVzb3VyY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEN1c3RvbVJlc291cmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVmFsaWRhdGUgZXhhY3RseSBvbmUgY29kZSBzb3VyY2VcbiAgICBpZiAoIXByb3BzLmNvZGVQYXRoICYmICFwcm9wcy5pbmxpbmVDb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ3VzdG9tUmVzb3VyY2UgcmVxdWlyZXMgZWl0aGVyIGNvZGVQYXRoIG9yIGlubGluZUNvZGUgdG8gYmUgc3BlY2lmaWVkXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5jb2RlUGF0aCAmJiBwcm9wcy5pbmxpbmVDb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ3VzdG9tUmVzb3VyY2UgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2YgY29kZVBhdGggb3IgaW5saW5lQ29kZSwgbm90IGJvdGhcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0lubGluZUNvZGUgPSAhIXByb3BzLmlubGluZUNvZGU7XG4gICAgY29uc3QgY29kZSA9IGlzSW5saW5lQ29kZVxuICAgICAgPyBDb2RlLmZyb21JbmxpbmUocHJvcHMuaW5saW5lQ29kZSEpXG4gICAgICA6IENvZGUuZnJvbUFzc2V0KHByb3BzLmNvZGVQYXRoISwgcHJvcHMuYXNzZXRPcHRpb25zKTtcbiAgICBjb25zdCBoYW5kbGVyID1cbiAgICAgIHByb3BzLmhhbmRsZXIgPz8gKGlzSW5saW5lQ29kZSA/IFwiaW5kZXguaGFuZGxlclwiIDogYCR7aWR9LmhhbmRsZXJgKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gcHJvcHMudGltZW91dD8udG9TZWNvbmRzKCkgPz8gMzAwO1xuXG4gICAgLy8gVXNlIExhbWJkYUZ1bmN0aW9uIGZvciBpbmxpbmUgY29kZSAodW5pcXVlIHBlciB1c2UpLCBTaW5nbGV0b25GdW5jdGlvbiBmb3IgYXNzZXRzIChzaGFyZWQpXG4gICAgY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBpc0lubGluZUNvZGVcbiAgICAgID8gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIGAke2lkfUxhbWJkYWAsIHtcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gbGFtYmRhYCxcbiAgICAgICAgICByb2xlRGVzY3JpcHRpb246XG4gICAgICAgICAgICBwcm9wcy5yb2xlRGVzY3JpcHRpb24gfHwgYCR7aWR9IGN1c3RvbSByZXNvdXJjZSBsYW1iZGFgLFxuICAgICAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5XG4gICAgICAgIH0pXG4gICAgICA6IG5ldyBTaW5nbGV0b25GdW5jdGlvbih0aGlzLCBgJHtpZH1MYW1iZGFgLCB7XG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWUsXG4gICAgICAgICAgbGFtYmRhRGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBsYW1iZGFgLFxuICAgICAgICAgIHJvbGVEZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIHByb3BzLnJvbGVEZXNjcmlwdGlvbiB8fCBgJHtpZH0gY3VzdG9tIHJlc291cmNlIGxhbWJkYWAsXG4gICAgICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3lcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBgJHtpZH1Qcm92aWRlcmAsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBsYW1iZGFGdW5jdGlvblxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtpZH1SZXNvdXJjZWAsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczogcHJvcHMucHJvcGVydGllc1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNwb25zZSA9IHRoaXMucmVzb3VyY2UuZ2V0QXR0KFwiUmVzcG9uc2VcIikudG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBRS9ELG1FQUF3RDtBQUV4RCx1REFBNEQ7QUFDNUQsMkNBQXVDO0FBRXZDLDhDQUFzRTtBQXVCdEUsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFJM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUNiLHVFQUF1RSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FDYix5RUFBeUUsQ0FDMUUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxZQUFZO1lBQ3ZCLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUVsRCw2RkFBNkY7UUFDN0YsTUFBTSxjQUFjLEdBQUcsWUFBWTtZQUNqQyxDQUFDLENBQUMsSUFBSSx1QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2dCQUN0QyxJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixPQUFPO2dCQUNQLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEVBQUUsU0FBUztnQkFDNUQsZUFBZSxFQUNiLEtBQUssQ0FBQyxlQUFlLElBQUksR0FBRyxFQUFFLHlCQUF5QjtnQkFDekQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2FBQ2pDLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtnQkFDekMsSUFBSTtnQkFDSixPQUFPO2dCQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxTQUFTO2dCQUM1RCxlQUFlLEVBQ2IsS0FBSyxDQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUUseUJBQXlCO2dCQUN6RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7YUFDakMsQ0FBQyxDQUFDO1FBRVAsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ25ELGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ3hELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUE1REQsd0NBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgYXMgY3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB0eXBlIHsgRHVyYXRpb24sIEFzc2V0T3B0aW9ucyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgdHlwZSBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgdHlwZSBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IFNpbmdsZXRvbkZ1bmN0aW9uLCBMYW1iZGFGdW5jdGlvbiB9IGZyb20gXCIuLi9jb21wdXRlL2xhbWJkYVwiO1xuXG5pbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VQcm9wcyB7XG4gIHJ1bnRpbWU6IFJ1bnRpbWU7XG4gIHJvbGVEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbGFtYmRhRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlubGluZVBvbGljeTogUG9saWN5U3RhdGVtZW50W107XG4gIHByb3BlcnRpZXM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nOyAvLyBVc2VkIHRvIGJlIGBba2V5OiBzdHJpbmddOiBhbnlgLCB0aGlzIGNvdWxkIGJyZWFrXG4gIH07XG5cbiAgLy8gQ29kZSBzb3VyY2VcbiAgY29kZVBhdGg/OiBzdHJpbmc7XG4gIGlubGluZUNvZGU/OiBzdHJpbmc7XG5cbiAgLy8gQXNzZXQgb3B0aW9ucyAob25seSB1c2VkIHdpdGggY29kZVBhdGgpXG4gIGFzc2V0T3B0aW9ucz86IEFzc2V0T3B0aW9ucztcblxuICAvLyBPcHRpb25hbCBvdmVycmlkZXNcbiAgaGFuZGxlcj86IHN0cmluZzsgLy8gRGVmYXVsdDogYCR7aWR9LmhhbmRsZXJgIGZvciBjb2RlUGF0aCwgYGluZGV4LmhhbmRsZXJgIGZvciBpbmxpbmVDb2RlXG4gIHRpbWVvdXQ/OiBEdXJhdGlvbjsgLy8gRGVmYXVsdDogMzAwcyAoNSBtaW51dGVzKVxufVxuXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmVzb3VyY2UgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2U6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBjdXN0b21SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ3VzdG9tUmVzb3VyY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBleGFjdGx5IG9uZSBjb2RlIHNvdXJjZVxuICAgIGlmICghcHJvcHMuY29kZVBhdGggJiYgIXByb3BzLmlubGluZUNvZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDdXN0b21SZXNvdXJjZSByZXF1aXJlcyBlaXRoZXIgY29kZVBhdGggb3IgaW5saW5lQ29kZSB0byBiZSBzcGVjaWZpZWRcIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmNvZGVQYXRoICYmIHByb3BzLmlubGluZUNvZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDdXN0b21SZXNvdXJjZSByZXF1aXJlcyBleGFjdGx5IG9uZSBvZiBjb2RlUGF0aCBvciBpbmxpbmVDb2RlLCBub3QgYm90aFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlzSW5saW5lQ29kZSA9ICEhcHJvcHMuaW5saW5lQ29kZTtcbiAgICBjb25zdCBjb2RlID0gaXNJbmxpbmVDb2RlXG4gICAgICA/IENvZGUuZnJvbUlubGluZShwcm9wcy5pbmxpbmVDb2RlISlcbiAgICAgIDogQ29kZS5mcm9tQXNzZXQocHJvcHMuY29kZVBhdGghLCBwcm9wcy5hc3NldE9wdGlvbnMpO1xuICAgIGNvbnN0IGhhbmRsZXIgPVxuICAgICAgcHJvcHMuaGFuZGxlciA/PyAoaXNJbmxpbmVDb2RlID8gXCJpbmRleC5oYW5kbGVyXCIgOiBgJHtpZH0uaGFuZGxlcmApO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBwcm9wcy50aW1lb3V0Py50b1NlY29uZHMoKSA/PyAzMDA7XG5cbiAgICAvLyBVc2UgTGFtYmRhRnVuY3Rpb24gZm9yIGlubGluZSBjb2RlICh1bmlxdWUgcGVyIHVzZSksIFNpbmdsZXRvbkZ1bmN0aW9uIGZvciBhc3NldHMgKHNoYXJlZClcbiAgICBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IGlzSW5saW5lQ29kZVxuICAgICAgPyBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgYCR7aWR9TGFtYmRhYCwge1xuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lLFxuICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgbGFtYmRhRGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBsYW1iZGFgLFxuICAgICAgICAgIHJvbGVEZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIHByb3BzLnJvbGVEZXNjcmlwdGlvbiB8fCBgJHtpZH0gY3VzdG9tIHJlc291cmNlIGxhbWJkYWAsXG4gICAgICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3lcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IFNpbmdsZXRvbkZ1bmN0aW9uKHRoaXMsIGAke2lkfUxhbWJkYWAsIHtcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgICAgICBsYW1iZGFEZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IGxhbWJkYWAsXG4gICAgICAgICAgcm9sZURlc2NyaXB0aW9uOlxuICAgICAgICAgICAgcHJvcHMucm9sZURlc2NyaXB0aW9uIHx8IGAke2lkfSBjdXN0b20gcmVzb3VyY2UgbGFtYmRhYCxcbiAgICAgICAgICBpbmxpbmVQb2xpY3k6IHByb3BzLmlubGluZVBvbGljeVxuICAgICAgICB9KTtcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIGAke2lkfVByb3ZpZGVyYCwge1xuICAgICAgb25FdmVudEhhbmRsZXI6IGxhbWJkYUZ1bmN0aW9uXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGN1c3RvbVJlc291cmNlKHRoaXMsIGAke2lkfVJlc291cmNlYCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wcy5wcm9wZXJ0aWVzXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNvdXJjZS5nZXRBdHQoXCJSZXNwb25zZVwiKS50b1N0cmluZygpO1xuICB9XG59XG4iXX0=
@@ -7,7 +7,7 @@ function getStackOutput(stackname, key) {
7
7
  try {
8
8
  (0, fs_1.accessSync)(path, fs_1.constants.R_OK);
9
9
  }
10
- catch (error) {
10
+ catch (_error) {
11
11
  // File does not exist or we do not have permissions to read it
12
12
  return undefined;
13
13
  }
@@ -17,4 +17,4 @@ function getStackOutput(stackname, key) {
17
17
  return value[`${key}`];
18
18
  }
19
19
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3RhY2tPdXRwdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvZ2V0U3RhY2tPdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxpQ0FlQztBQXZCRCwyQkFBeUQ7QUFRekQsU0FBd0IsY0FBYyxDQUFDLFNBQWlCLEVBQUUsR0FBVztJQUNuRSxNQUFNLElBQUksR0FBRyxZQUFZLFNBQVMsT0FBTyxDQUFDO0lBRTFDLElBQUksQ0FBQztRQUNILElBQUEsZUFBVSxFQUFDLElBQUksRUFBRSxjQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiwrREFBK0Q7UUFDL0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLElBQUEsaUJBQVksRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsTUFBTSxVQUFVLEdBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNuRCxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhY2Nlc3NTeW5jLCByZWFkRmlsZVN5bmMsIGNvbnN0YW50cyB9IGZyb20gXCJmc1wiO1xuXG5pbnRlcmZhY2UgU3RhY2tKU09OIHtcbiAgU3RhY2tOYW1lOiB7XG4gICAgT3V0cHV0czogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTdGFja091dHB1dChzdGFja25hbWU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgY29uc3QgcGF0aCA9IGAuL291dHB1dC8ke3N0YWNrbmFtZX0uanNvbmA7XG5cbiAgdHJ5IHtcbiAgICBhY2Nlc3NTeW5jKHBhdGgsIGNvbnN0YW50cy5SX09LKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBGaWxlIGRvZXMgbm90IGV4aXN0IG9yIHdlIGRvIG5vdCBoYXZlIHBlcm1pc3Npb25zIHRvIHJlYWQgaXRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc3RhY2tPdXRwdXRGaWxlID0gcmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKTtcbiAgY29uc3Qgc3RhY2tPdXB1dDogU3RhY2tKU09OID0gSlNPTi5wYXJzZShzdGFja091dHB1dEZpbGUpO1xuICBmb3IgKGNvbnN0IFssIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzdGFja091cHV0KSkge1xuICAgIHJldHVybiB2YWx1ZVtgJHtrZXl9YF07XG4gIH1cbn1cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3RhY2tPdXRwdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvZ2V0U3RhY2tPdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxpQ0FlQztBQXZCRCwyQkFBeUQ7QUFRekQsU0FBd0IsY0FBYyxDQUFDLFNBQWlCLEVBQUUsR0FBVztJQUNuRSxNQUFNLElBQUksR0FBRyxZQUFZLFNBQVMsT0FBTyxDQUFDO0lBRTFDLElBQUksQ0FBQztRQUNILElBQUEsZUFBVSxFQUFDLElBQUksRUFBRSxjQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUFDLE9BQU8sTUFBTSxFQUFFLENBQUM7UUFDaEIsK0RBQStEO1FBQy9ELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFBLGlCQUFZLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sVUFBVSxHQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUQsS0FBSyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWNjZXNzU3luYywgcmVhZEZpbGVTeW5jLCBjb25zdGFudHMgfSBmcm9tIFwiZnNcIjtcblxuaW50ZXJmYWNlIFN0YWNrSlNPTiB7XG4gIFN0YWNrTmFtZToge1xuICAgIE91dHB1dHM6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U3RhY2tPdXRwdXQoc3RhY2tuYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gIGNvbnN0IHBhdGggPSBgLi9vdXRwdXQvJHtzdGFja25hbWV9Lmpzb25gO1xuXG4gIHRyeSB7XG4gICAgYWNjZXNzU3luYyhwYXRoLCBjb25zdGFudHMuUl9PSyk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8vIEZpbGUgZG9lcyBub3QgZXhpc3Qgb3Igd2UgZG8gbm90IGhhdmUgcGVybWlzc2lvbnMgdG8gcmVhZCBpdFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzdGFja091dHB1dEZpbGUgPSByZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpO1xuICBjb25zdCBzdGFja091cHV0OiBTdGFja0pTT04gPSBKU09OLnBhcnNlKHN0YWNrT3V0cHV0RmlsZSk7XG4gIGZvciAoY29uc3QgWywgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YWNrT3VwdXQpKSB7XG4gICAgcmV0dXJuIHZhbHVlW2Ake2tleX1gXTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Sanitizes a string to be a valid CloudFormation output key.
3
+ * CloudFormation output names must be alphanumeric only (no hyphens, underscores, or dots).
4
+ */
5
+ export declare function sanitizeCfnKey(input: string): string;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeCfnKey = sanitizeCfnKey;
4
+ /**
5
+ * Sanitizes a string to be a valid CloudFormation output key.
6
+ * CloudFormation output names must be alphanumeric only (no hyphens, underscores, or dots).
7
+ */
8
+ function sanitizeCfnKey(input) {
9
+ return input.replace(/[^a-zA-Z0-9]/g, "");
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemVDZm5LZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvc2FuaXRpemVDZm5LZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSx3Q0FFQztBQU5EOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2FuaXRpemVzIGEgc3RyaW5nIHRvIGJlIGEgdmFsaWQgQ2xvdWRGb3JtYXRpb24gb3V0cHV0IGtleS5cbiAqIENsb3VkRm9ybWF0aW9uIG91dHB1dCBuYW1lcyBtdXN0IGJlIGFscGhhbnVtZXJpYyBvbmx5IChubyBoeXBoZW5zLCB1bmRlcnNjb3Jlcywgb3IgZG90cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNmbktleShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIlwiKTtcbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { type IConstruct } from "constructs";
2
+ /**
3
+ * Apply tags directly to a specific resource.
4
+ *
5
+ * This uses CDK's native Tags.of().add() API which:
6
+ * - Properly merges with existing tags from L2 constructs
7
+ * - Works regardless of when it's called during construction
8
+ * - Applies tags to the resource and all its children
9
+ *
10
+ * Use this for resources that need specific tags beyond the standard Fjall tags,
11
+ * like VPC IPAM pool tags or resource-specific metadata.
12
+ *
13
+ * @param resource - The construct to tag
14
+ * @param tags - Key-value pairs of tags to apply
15
+ *
16
+ * @example
17
+ * // Apply specific tags to a resource
18
+ * tagResource(myVpc, {
19
+ * "fjall:operations:pool": "pool-123"
20
+ * });
21
+ */
22
+ export default function tagResource(resource: IConstruct, tags: {
23
+ [key: string]: string;
24
+ }): void;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = tagResource;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ /**
6
+ * Apply tags directly to a specific resource.
7
+ *
8
+ * This uses CDK's native Tags.of().add() API which:
9
+ * - Properly merges with existing tags from L2 constructs
10
+ * - Works regardless of when it's called during construction
11
+ * - Applies tags to the resource and all its children
12
+ *
13
+ * Use this for resources that need specific tags beyond the standard Fjall tags,
14
+ * like VPC IPAM pool tags or resource-specific metadata.
15
+ *
16
+ * @param resource - The construct to tag
17
+ * @param tags - Key-value pairs of tags to apply
18
+ *
19
+ * @example
20
+ * // Apply specific tags to a resource
21
+ * tagResource(myVpc, {
22
+ * "fjall:operations:pool": "pool-123"
23
+ * });
24
+ */
25
+ function tagResource(resource, tags) {
26
+ Object.entries(tags).forEach(([key, value]) => {
27
+ aws_cdk_lib_1.Tags.of(resource).add(key, value);
28
+ });
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsOEJBT0M7QUE5QkQsNkNBQW1DO0FBR25DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBd0IsV0FBVyxDQUNqQyxRQUFvQixFQUNwQixJQUErQjtJQUUvQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDNUMsa0JBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFwcGx5IHRhZ3MgZGlyZWN0bHkgdG8gYSBzcGVjaWZpYyByZXNvdXJjZS5cbiAqXG4gKiBUaGlzIHVzZXMgQ0RLJ3MgbmF0aXZlIFRhZ3Mub2YoKS5hZGQoKSBBUEkgd2hpY2g6XG4gKiAtIFByb3Blcmx5IG1lcmdlcyB3aXRoIGV4aXN0aW5nIHRhZ3MgZnJvbSBMMiBjb25zdHJ1Y3RzXG4gKiAtIFdvcmtzIHJlZ2FyZGxlc3Mgb2Ygd2hlbiBpdCdzIGNhbGxlZCBkdXJpbmcgY29uc3RydWN0aW9uXG4gKiAtIEFwcGxpZXMgdGFncyB0byB0aGUgcmVzb3VyY2UgYW5kIGFsbCBpdHMgY2hpbGRyZW5cbiAqXG4gKiBVc2UgdGhpcyBmb3IgcmVzb3VyY2VzIHRoYXQgbmVlZCBzcGVjaWZpYyB0YWdzIGJleW9uZCB0aGUgc3RhbmRhcmQgRmphbGwgdGFncyxcbiAqIGxpa2UgVlBDIElQQU0gcG9vbCB0YWdzIG9yIHJlc291cmNlLXNwZWNpZmljIG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSByZXNvdXJjZSAtIFRoZSBjb25zdHJ1Y3QgdG8gdGFnXG4gKiBAcGFyYW0gdGFncyAtIEtleS12YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFwcGx5IHNwZWNpZmljIHRhZ3MgdG8gYSByZXNvdXJjZVxuICogdGFnUmVzb3VyY2UobXlWcGMsIHtcbiAqICAgXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIjogXCJwb29sLTEyM1wiXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFnUmVzb3VyY2UoXG4gIHJlc291cmNlOiBJQ29uc3RydWN0LFxuICB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4pOiB2b2lkIHtcbiAgT2JqZWN0LmVudHJpZXModGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgVGFncy5vZihyZXNvdXJjZSkuYWRkKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cbiJdfQ==