truemark-cdk-lib 1.0.1 → 1.0.2-alpha.10

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.
@@ -1,9 +1,9 @@
1
1
  import { Construct } from "constructs";
2
- import { AddStageOpts, CodePipeline, StageDeployment, Wave, WaveOptions } from "aws-cdk-lib/pipelines";
2
+ import { AddStageOpts, CodePipeline, IFileSetProducer, StageDeployment, Wave, WaveOptions } from "aws-cdk-lib/pipelines";
3
3
  import { ComputeType, IBuildImage } from "aws-cdk-lib/aws-codebuild";
4
4
  import { PipelineNotificationRule } from "./pipeline-notification-rule";
5
5
  import { Stage } from "aws-cdk-lib";
6
- import { IFileSetProducer } from "aws-cdk-lib/pipelines";
6
+ import { NodePackageManager } from "./enums";
7
7
  /**
8
8
  * Properties for CdkPipeline
9
9
  */
@@ -19,13 +19,14 @@ export interface CdkPipelineProps {
19
19
  */
20
20
  readonly accountIds?: string[];
21
21
  /**
22
- * Arn of the CodeStar connection used to access the source code repository.
22
+ * Arn of the CodeStar connection used to access the source code repository. If not set, this
23
+ * construct assumes the repository is in AWS CodeCommit.
23
24
  */
24
- readonly connectionArn: string;
25
+ readonly connectionArn?: string;
25
26
  /**
26
- * Name of the source code repository.
27
+ * Source code repository.
27
28
  */
28
- readonly repo: string;
29
+ readonly repository: string;
29
30
  /**
30
31
  * Branch to use inside the source code repository.
31
32
  */
@@ -80,6 +81,18 @@ export interface CdkPipelineProps {
80
81
  * Public assets in multiple CodeBuild projects. Default is false.
81
82
  */
82
83
  readonly publishAssetsInParallel?: boolean;
84
+ /**
85
+ * Package manager to use when executing CDK.
86
+ *
87
+ * @default NodePackageManager.PNPM
88
+ */
89
+ readonly packageManager?: NodePackageManager;
90
+ /**
91
+ * The directory the CDK project is located in the repo.
92
+ *
93
+ * @default - "."
94
+ */
95
+ readonly cdkDirectory?: string;
83
96
  }
84
97
  /**
85
98
  * An abstraction to ease CDK pipeline creation and configuration.
@@ -9,6 +9,8 @@ const pipelines_1 = require("aws-cdk-lib/pipelines");
9
9
  const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
10
10
  const pipeline_notification_rule_1 = require("./pipeline-notification-rule");
11
11
  const aws_cdk_lib_1 = require("aws-cdk-lib");
12
+ const aws_codecommit_1 = require("aws-cdk-lib/aws-codecommit");
13
+ const enums_1 = require("./enums");
12
14
  /**
13
15
  * An abstraction to ease CDK pipeline creation and configuration.
14
16
  */
@@ -24,28 +26,51 @@ class CdkPipeline extends constructs_1.Construct {
24
26
  const underlyingPipeline = new aws_codepipeline_1.Pipeline(this, 'Pipeline', {
25
27
  artifactBucket
26
28
  });
27
- const input = pipelines_1.CodePipelineSource.connection(props.repo, props.branch, {
28
- connectionArn: props.connectionArn
29
- });
29
+ let input;
30
+ if (props.connectionArn !== undefined) {
31
+ input = pipelines_1.CodePipelineSource.connection(props.repository, props.branch, {
32
+ connectionArn: props.connectionArn
33
+ });
34
+ }
35
+ else {
36
+ const repository = props.repository.startsWith("arn:")
37
+ ? aws_codecommit_1.Repository.fromRepositoryArn(this, "Repository", props.repository)
38
+ : aws_codecommit_1.Repository.fromRepositoryName(this, "Repository", props.repository);
39
+ input = pipelines_1.CodePipelineSource.codeCommit(repository, props.branch);
40
+ }
30
41
  const stackName = aws_cdk_lib_1.Stack.of(this).stackName;
42
+ const cdkDirectory = (_a = props.cdkDirectory) !== null && _a !== void 0 ? _a : ".";
43
+ let commands = props.commands;
44
+ if (commands === undefined && props.packageManager === enums_1.NodePackageManager.PNPM) {
45
+ commands = [
46
+ `cd ${cdkDirectory !== null && cdkDirectory !== void 0 ? cdkDirectory : "."}`,
47
+ 'npm -g install pnpm',
48
+ 'pnpm install --frozen-lockfile --prefer-offline',
49
+ 'pnpm run build',
50
+ 'pnpm run test',
51
+ `pnpx cdk synth ${stackName}`
52
+ ];
53
+ }
54
+ else if (commands === undefined) {
55
+ commands = [
56
+ `cd ${cdkDirectory !== null && cdkDirectory !== void 0 ? cdkDirectory : "."}`,
57
+ 'npm config set fund false',
58
+ 'npm ci --prefer-offline',
59
+ 'npm run build',
60
+ 'npm run test',
61
+ `npx cdk synth ${stackName}`
62
+ ];
63
+ }
31
64
  this.pipeline = new pipelines_1.CodePipeline(this, 'CodePipeline', {
32
65
  codePipeline: underlyingPipeline,
33
- selfMutation: (_a = props.selfMutation) !== null && _a !== void 0 ? _a : true,
34
- dockerEnabledForSynth: (_b = props.dockerEnabledForSynth) !== null && _b !== void 0 ? _b : true,
35
- dockerEnabledForSelfMutation: (_c = props.dockerEnabledForSelfMutation) !== null && _c !== void 0 ? _c : true,
36
- publishAssetsInParallel: (_d = props.publishAssetsInParallel) !== null && _d !== void 0 ? _d : false,
66
+ selfMutation: (_b = props.selfMutation) !== null && _b !== void 0 ? _b : true,
67
+ dockerEnabledForSynth: (_c = props.dockerEnabledForSynth) !== null && _c !== void 0 ? _c : true,
68
+ dockerEnabledForSelfMutation: (_d = props.dockerEnabledForSelfMutation) !== null && _d !== void 0 ? _d : true,
69
+ publishAssetsInParallel: (_e = props.publishAssetsInParallel) !== null && _e !== void 0 ? _e : false,
37
70
  synth: new pipelines_1.ShellStep('Synth', {
38
- primaryOutputDirectory: 'cdk.out',
71
+ primaryOutputDirectory: `${cdkDirectory}/cdk.out`,
39
72
  input,
40
- commands: (_e = props.commands) !== null && _e !== void 0 ? _e : [
41
- 'mkdir /tmp/npm-cache',
42
- 'npm config set fund false',
43
- 'npm config set cache /tmp/npm-cache --location=global',
44
- 'npm ci --prefer-offline',
45
- 'npm run build',
46
- 'npm run test',
47
- `npx cdk synth ${stackName}`
48
- ],
73
+ commands,
49
74
  additionalInputs: (_f = props.additionalInputs) !== null && _f !== void 0 ? _f : {}
50
75
  }),
51
76
  synthCodeBuildDefaults: {
@@ -100,4 +125,4 @@ class CdkPipeline extends constructs_1.Construct {
100
125
  }
101
126
  }
102
127
  exports.CdkPipeline = CdkPipeline;
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFxQztBQUNyQyxtRUFBc0Q7QUFDdEQsaURBQXdDO0FBQ3hDLHVEQUFpRDtBQUNqRCxxREFRK0I7QUFDL0IsNkRBQStGO0FBQy9GLDZFQUFzRTtBQUN0RSw2Q0FBeUM7QUFpR3pDOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFLeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1Qjs7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLGFBQWEsR0FBRyxhQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFFLE1BQU0sY0FBYyxHQUFHLElBQUksZ0NBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDaEUsYUFBYTtZQUNiLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtTQUM3QixDQUFDLENBQUM7UUFFSCxNQUFNLGtCQUFrQixHQUFHLElBQUksMkJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3hELGNBQWM7U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3BFLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtTQUNuQyxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHdCQUFZLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNyRCxZQUFZLEVBQUUsa0JBQWtCO1lBQ2hDLFlBQVksUUFBRSxLQUFLLENBQUMsWUFBWSxtQ0FBSSxJQUFJO1lBQ3hDLHFCQUFxQixRQUFFLEtBQUssQ0FBQyxxQkFBcUIsbUNBQUksSUFBSTtZQUMxRCw0QkFBNEIsUUFBRSxLQUFLLENBQUMsNEJBQTRCLG1DQUFJLElBQUk7WUFDeEUsdUJBQXVCLFFBQUUsS0FBSyxDQUFDLHVCQUF1QixtQ0FBSSxLQUFLO1lBQy9ELEtBQUssRUFBRSxJQUFJLHFCQUFTLENBQUMsT0FBTyxFQUFFO2dCQUM1QixzQkFBc0IsRUFBRSxTQUFTO2dCQUNqQyxLQUFLO2dCQUNMLFFBQVEsUUFBRSxLQUFLLENBQUMsUUFBUSxtQ0FBRTtvQkFDeEIsc0JBQXNCO29CQUN0QiwyQkFBMkI7b0JBQzNCLHVEQUF1RDtvQkFDdkQseUJBQXlCO29CQUN6QixlQUFlO29CQUNmLGNBQWM7b0JBQ2QsaUJBQWlCLFNBQVMsRUFBRTtpQkFDN0I7Z0JBQ0QsZ0JBQWdCLFFBQUUsS0FBSyxDQUFDLGdCQUFnQixtQ0FBRSxFQUFFO2FBQzdDLENBQUM7WUFDRixzQkFBc0IsRUFBRTtnQkFDdEIscURBQXFEO2dCQUNyRCxnQkFBZ0IsRUFBRSx5QkFBUyxDQUFDLFVBQVUsQ0FBQztvQkFDckMsc0NBQXNDO29CQUN0QyxLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLGdCQUFnQjtxQkFDeEI7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLE9BQU8sRUFBRTs0QkFDUCxRQUFRLEVBQUU7Z0NBQ1IsTUFBTTtnQ0FDTiwyQ0FBMkMsQ0FBQywwQkFBMEI7NkJBQ3ZFO3lCQUNGO3FCQUNGO2lCQUNGLENBQUM7Z0JBQ0YsZ0JBQWdCLEVBQUU7b0JBQ2hCLFdBQVcsUUFBRSxLQUFLLENBQUMsV0FBVyxtQ0FBSSwyQkFBVyxDQUFDLEtBQUs7b0JBQ25ELFVBQVUsUUFBRSxLQUFLLENBQUMsVUFBVSxtQ0FBSSwrQkFBZSxDQUFDLGdCQUFnQjtpQkFDakU7YUFDRjtZQUNELGdDQUFnQyxFQUFFO2dCQUNoQyxnQkFBZ0IsRUFBRTtvQkFDaEIsVUFBVSxFQUFFLCtCQUFlLENBQUMsZ0JBQWdCO2lCQUM3QzthQUNGO1lBQ0QsNkJBQTZCLEVBQUU7Z0JBQzdCLGdCQUFnQixFQUFFO29CQUNoQixVQUFVLEVBQUUsK0JBQWUsQ0FBQyxnQkFBZ0I7aUJBQzdDO2FBQ0Y7WUFDRCxpQkFBaUIsRUFBRTtnQkFDakIsZ0JBQWdCLEVBQUU7b0JBQ2hCLFVBQVUsRUFBRSwrQkFBZSxDQUFDLGdCQUFnQjtpQkFDN0M7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxDQUFDLDRCQUE0QixFQUFFO1lBQ3RDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLHFEQUF3QixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7Z0JBQ2pGLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLDRCQUE0QixFQUFFLEtBQUssQ0FBQyw0QkFBNEI7YUFDakUsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVksRUFBRSxPQUFzQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQVUsRUFBRSxPQUFxQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUFqR0Qsa0NBaUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1BpcGVsaW5lfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHtLZXl9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQge0FydGlmYWN0QnVja2V0fSBmcm9tIFwiLi9hcnRpZmFjdC1idWNrZXRcIjtcbmltcG9ydCB7XG4gIEFkZFN0YWdlT3B0cyxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIFNoZWxsU3RlcCxcbiAgU3RhZ2VEZXBsb3ltZW50LFxuICBXYXZlLFxuICBXYXZlT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvcGlwZWxpbmVzXCI7XG5pbXBvcnQge0J1aWxkU3BlYywgQ29tcHV0ZVR5cGUsIElCdWlsZEltYWdlLCBMaW51eEJ1aWxkSW1hZ2V9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQge1BpcGVsaW5lTm90aWZpY2F0aW9uUnVsZX0gZnJvbSBcIi4vcGlwZWxpbmUtbm90aWZpY2F0aW9uLXJ1bGVcIjtcbmltcG9ydCB7U3RhY2ssIFN0YWdlfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7SUZpbGVTZXRQcm9kdWNlcn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtDYWNoZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlYnVpbGRcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBDZGtQaXBlbGluZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka1BpcGVsaW5lUHJvcHMge1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCBDREsgd2lsbCBjcmVhdGUgS01TIGtleXMgZm9yIGNyb3NzIGFjY291bnQgZGVwbG95bWVudHMuIFRoaXNcbiAgICogY2FuIGJlIGNvc3RseSBpZiB5b3UgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBwaXBlbGluZXMuIFRoaXMgcHJvcGVydHlcbiAgICogYWxsb3dzIGEgY29tbW9uIGtleSB0byBiZSBzaGFyZWQgYWNyb3NzIHBpcGVsaW5lcy5cbiAgICovXG4gIHJlYWRvbmx5IGtleUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFjY291bnQgSURzIHRoaXMgcGlwZWxpbmUgd2lsbCBkZXBsb3kgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJuIG9mIHRoZSBDb2RlU3RhciBjb25uZWN0aW9uIHVzZWQgdG8gYWNjZXNzIHRoZSBzb3VyY2UgY29kZSByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBzb3VyY2UgY29kZSByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCcmFuY2ggdG8gdXNlIGluc2lkZSB0aGUgc291cmNlIGNvZGUgcmVwb3NpdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzZWxmLW11dGF0aW9uLiBVc2VmdWwgZm9yIGNkayBwaXBlbGluZSBkZXZlbG9wbWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZk11dGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIGRvY2tlciBmb3IgdGhlICdzeW50aCcgc3RlcC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyRW5hYmxlZEZvclN5bnRoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIGRvY2tlciBmb3IgdGhlIHNlbGYtbXV0YXRlIHN0ZXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlckVuYWJsZWRGb3JTZWxmTXV0YXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGNvbXB1dGUgdG8gdXNlIGZvciB0aGlzIGJ1aWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBDb21wdXRlVHlwZS5TTUFMTFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVR5cGU/OiBDb21wdXRlVHlwZTtcblxuICAvKipcbiAgICogVGhlIGltYWdlIHRvIHVzZSBmb3IgYnVpbGRzLiBEZWZhdWx0IGlzIExpbnV4QnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl80XG4gICAqL1xuICByZWFkb25seSBidWlsZEltYWdlPzogSUJ1aWxkSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBTbGFjayBjaGFubmVsIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygbm90aWZpY2F0aW9uIGV2ZW50cyB0byByZWNlaXZlLiBCeSBkZWZhdWx0LCB0aGlzIGlzIGFsbCBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kdGNvbnNvbGUvbGF0ZXN0L3VzZXJndWlkZS9jb25jZXB0cy5odG1sI2V2ZW50cy1yZWYtcGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIEZpbGVTZXRzIHRvIHB1dCBpbiBvdGhlciBkaXJlY3Rvcmllc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0cz86IFJlY29yZDxzdHJpbmcsIElGaWxlU2V0UHJvZHVjZXI+O1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgZGVmYXVsdCBjb21tYW5kcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBhc3NldHMgaW4gbXVsdGlwbGUgQ29kZUJ1aWxkIHByb2plY3RzLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaEFzc2V0c0luUGFyYWxsZWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFuIGFic3RyYWN0aW9uIHRvIGVhc2UgQ0RLIHBpcGVsaW5lIGNyZWF0aW9uIGFuZCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2RrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHJlYWRvbmx5IHBpcGVsaW5lTm90aWZpY2F0aW9uUnVsZTogUGlwZWxpbmVOb3RpZmljYXRpb25SdWxlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDZGtQaXBlbGluZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBLZXkuZnJvbUtleUFybih0aGlzLCAnRW5jcnlwdGlvbktleScsIHByb3BzLmtleUFybik7XG5cbiAgICBjb25zdCBhcnRpZmFjdEJ1Y2tldCA9IG5ldyBBcnRpZmFjdEJ1Y2tldCh0aGlzLCAnQXJ0aWZhY3RCdWNrZXQnLCB7XG4gICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgYWNjb3VudElkczogcHJvcHMuYWNjb3VudElkc1xuICAgIH0pO1xuXG4gICAgY29uc3QgdW5kZXJseWluZ1BpcGVsaW5lID0gbmV3IFBpcGVsaW5lKHRoaXMsICdQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dCA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKHByb3BzLnJlcG8sIHByb3BzLmJyYW5jaCwge1xuICAgICAgY29ubmVjdGlvbkFybjogcHJvcHMuY29ubmVjdGlvbkFyblxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBDb2RlUGlwZWxpbmUodGhpcywgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdW5kZXJseWluZ1BpcGVsaW5lLFxuICAgICAgc2VsZk11dGF0aW9uOiBwcm9wcy5zZWxmTXV0YXRpb24gPz8gdHJ1ZSxcbiAgICAgIGRvY2tlckVuYWJsZWRGb3JTeW50aDogcHJvcHMuZG9ja2VyRW5hYmxlZEZvclN5bnRoID8/IHRydWUsXG4gICAgICBkb2NrZXJFbmFibGVkRm9yU2VsZk11dGF0aW9uOiBwcm9wcy5kb2NrZXJFbmFibGVkRm9yU2VsZk11dGF0aW9uID8/IHRydWUsXG4gICAgICBwdWJsaXNoQXNzZXRzSW5QYXJhbGxlbDogcHJvcHMucHVibGlzaEFzc2V0c0luUGFyYWxsZWwgPz8gZmFsc2UsXG4gICAgICBzeW50aDogbmV3IFNoZWxsU3RlcCgnU3ludGgnLCB7XG4gICAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIGNvbW1hbmRzOiBwcm9wcy5jb21tYW5kcz8/W1xuICAgICAgICAgICdta2RpciAvdG1wL25wbS1jYWNoZScsXG4gICAgICAgICAgJ25wbSBjb25maWcgc2V0IGZ1bmQgZmFsc2UnLFxuICAgICAgICAgICducG0gY29uZmlnIHNldCBjYWNoZSAvdG1wL25wbS1jYWNoZSAtLWxvY2F0aW9uPWdsb2JhbCcsXG4gICAgICAgICAgJ25wbSBjaSAtLXByZWZlci1vZmZsaW5lJyxcbiAgICAgICAgICAnbnBtIHJ1biBidWlsZCcsXG4gICAgICAgICAgJ25wbSBydW4gdGVzdCcsXG4gICAgICAgICAgYG5weCBjZGsgc3ludGggJHtzdGFja05hbWV9YFxuICAgICAgICBdLFxuICAgICAgICBhZGRpdGlvbmFsSW5wdXRzOiBwcm9wcy5hZGRpdGlvbmFsSW5wdXRzPz97fVxuICAgICAgfSksXG4gICAgICBzeW50aENvZGVCdWlsZERlZmF1bHRzOiB7XG4gICAgICAgIC8vIGNhY2hlOiBDYWNoZS5sb2NhbCgpLCAvLyBUT0RPIE5vdCBzdXBwb3J0ZWQgb24gQVJNXG4gICAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAvLyBUT0RPIE5lZWQgdG8gbG9vayBpbnRvIHRoaXMgZnVydGhlclxuICAgICAgICAgIGNhY2hlOiB7XG4gICAgICAgICAgICBwYXRoczogXCIvdG1wL25wbS1jYWNoZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgICBcIm4gMTZcIiwgLy8gSW5zdGFsbCBOb2RlIHYxNlxuICAgICAgICAgICAgICAgIFwibnBtIGkgLS1sb2NhdGlvbj1nbG9iYWwgLS1uby1mdW5kIGVzYnVpbGRcIiAvLyBJbnN0YWxsIGVzYnVpbGQgbG9jYWxseVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGNvbXB1dGVUeXBlOiBwcm9wcy5jb21wdXRlVHlwZSA/PyBDb21wdXRlVHlwZS5TTUFMTCxcbiAgICAgICAgICBidWlsZEltYWdlOiBwcm9wcy5idWlsZEltYWdlID8/IExpbnV4QnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl80XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3NldFB1Ymxpc2hpbmdDb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgYnVpbGRJbWFnZTogTGludXhCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yXzRcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNlbGZNdXRhdGlvbkNvZGVCdWlsZERlZmF1bHRzOiB7XG4gICAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eEJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfNFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl80XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocHJvcHMuc2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybikge1xuICAgICAgdGhpcy5waXBlbGluZU5vdGlmaWNhdGlvblJ1bGUgPSBuZXcgUGlwZWxpbmVOb3RpZmljYXRpb25SdWxlKHRoaXMsICdOb3RpZmljYXRpb24nLCB7XG4gICAgICAgIHNvdXJjZTogdW5kZXJseWluZ1BpcGVsaW5lLFxuICAgICAgICBzbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuOiBwcm9wcy5zbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhZGRTdGFnZShzdGFnZTogU3RhZ2UsIG9wdGlvbnM/OiBBZGRTdGFnZU9wdHMpOiBTdGFnZURlcGxveW1lbnQge1xuICAgIHJldHVybiB0aGlzLnBpcGVsaW5lLmFkZFN0YWdlKHN0YWdlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFdhdmUoaWQ6IHN0cmluZywgb3B0aW9ucz86IFdhdmVPcHRpb25zKTogV2F2ZSB7XG4gICAgcmV0dXJuIHRoaXMucGlwZWxpbmUuYWRkV2F2ZShpZCwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFxQztBQUNyQyxtRUFBc0Q7QUFDdEQsaURBQXdDO0FBQ3hDLHVEQUFpRDtBQUNqRCxxREFTK0I7QUFDL0IsNkRBQStGO0FBQy9GLDZFQUFzRTtBQUN0RSw2Q0FBeUM7QUFDekMsK0RBQXNEO0FBQ3RELG1DQUEyQztBQThHM0M7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUt4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCOztRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sYUFBYSxHQUFHLGFBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNoRSxhQUFhO1lBQ2IsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztRQUVILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDeEQsY0FBYztTQUNmLENBQUMsQ0FBQztRQUVILElBQUksS0FBeUIsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ3JDLEtBQUssR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNwRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDbkMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FB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Q0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLGdCQUFnQixFQUFFO29CQUNoQixVQUFVLEVBQUUsK0JBQWUsQ0FBQyxnQkFBZ0I7aUJBQzdDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsRUFBRTtZQUN0QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxxREFBd0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO2dCQUNqRixNQUFNLEVBQUUsa0JBQWtCO2dCQUMxQiw0QkFBNEIsRUFBRSxLQUFLLENBQUMsNEJBQTRCO2FBQ2pFLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFZLEVBQUUsT0FBc0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVLEVBQUUsT0FBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGO0FBdkhELGtDQXVIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtQaXBlbGluZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmVcIjtcbmltcG9ydCB7S2V5fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWttc1wiO1xuaW1wb3J0IHtBcnRpZmFjdEJ1Y2tldH0gZnJvbSBcIi4vYXJ0aWZhY3QtYnVja2V0XCI7XG5pbXBvcnQge1xuICBBZGRTdGFnZU9wdHMsXG4gIENvZGVQaXBlbGluZSxcbiAgQ29kZVBpcGVsaW5lU291cmNlLFxuICBJRmlsZVNldFByb2R1Y2VyLFxuICBTaGVsbFN0ZXAsXG4gIFN0YWdlRGVwbG95bWVudCxcbiAgV2F2ZSxcbiAgV2F2ZU9wdGlvbnNcbn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtCdWlsZFNwZWMsIENvbXB1dGVUeXBlLCBJQnVpbGRJbWFnZSwgTGludXhCdWlsZEltYWdlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZFwiO1xuaW1wb3J0IHtQaXBlbGluZU5vdGlmaWNhdGlvblJ1bGV9IGZyb20gXCIuL3BpcGVsaW5lLW5vdGlmaWNhdGlvbi1ydWxlXCI7XG5pbXBvcnQge1N0YWNrLCBTdGFnZX0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1JlcG9zaXRvcnl9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWNvbW1pdFwiO1xuaW1wb3J0IHtOb2RlUGFja2FnZU1hbmFnZXJ9IGZyb20gXCIuL2VudW1zXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgQ2RrUGlwZWxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtQaXBlbGluZVByb3BzIHtcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgQ0RLIHdpbGwgY3JlYXRlIEtNUyBrZXlzIGZvciBjcm9zcyBhY2NvdW50IGRlcGxveW1lbnRzLiBUaGlzXG4gICAqIGNhbiBiZSBjb3N0bHkgaWYgeW91IGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcGlwZWxpbmVzLiBUaGlzIHByb3BlcnR5XG4gICAqIGFsbG93cyBhIGNvbW1vbiBrZXkgdG8gYmUgc2hhcmVkIGFjcm9zcyBwaXBlbGluZXMuXG4gICAqL1xuICByZWFkb25seSBrZXlBcm46IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBhY2NvdW50IElEcyB0aGlzIHBpcGVsaW5lIHdpbGwgZGVwbG95IGludG8uXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFybiBvZiB0aGUgQ29kZVN0YXIgY29ubmVjdGlvbiB1c2VkIHRvIGFjY2VzcyB0aGUgc291cmNlIGNvZGUgcmVwb3NpdG9yeS4gSWYgbm90IHNldCwgdGhpc1xuICAgKiBjb25zdHJ1Y3QgYXNzdW1lcyB0aGUgcmVwb3NpdG9yeSBpcyBpbiBBV1MgQ29kZUNvbW1pdC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNvdXJjZSBjb2RlIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJyYW5jaCB0byB1c2UgaW5zaWRlIHRoZSBzb3VyY2UgY29kZSByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHNlbGYtbXV0YXRpb24uIFVzZWZ1bCBmb3IgY2RrIHBpcGVsaW5lIGRldmVsb3BtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzZWxmTXV0YXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZG9ja2VyIGZvciB0aGUgJ3N5bnRoJyBzdGVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBkb2NrZXJFbmFibGVkRm9yU3ludGg/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZG9ja2VyIGZvciB0aGUgc2VsZi1tdXRhdGUgc3RlcC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyRW5hYmxlZEZvclNlbGZNdXRhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgY29tcHV0ZSB0byB1c2UgZm9yIHRoaXMgYnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbXB1dGVUeXBlLlNNQUxMXG4gICAqL1xuICByZWFkb25seSBjb21wdXRlVHlwZT86IENvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdG8gdXNlIGZvciBidWlsZHMuIERlZmF1bHQgaXMgTGludXhCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yXzRcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBJQnVpbGRJbWFnZTtcblxuICAvKipcbiAgICogVGhlIFNsYWNrIGNoYW5uZWwgY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBub3RpZmljYXRpb24gZXZlbnRzIHRvIHJlY2VpdmUuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYWxsIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2R0Y29uc29sZS9sYXRlc3QvdXNlcmd1aWRlL2NvbmNlcHRzLmh0bWwjZXZlbnRzLXJlZi1waXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRXZlbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgRmlsZVNldHMgdG8gcHV0IGluIG90aGVyIGRpcmVjdG9yaWVzXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSW5wdXRzPzogUmVjb3JkPHN0cmluZywgSUZpbGVTZXRQcm9kdWNlcj47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBkZWZhdWx0IGNvbW1hbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHVibGljIGFzc2V0cyBpbiBtdWx0aXBsZSBDb2RlQnVpbGQgcHJvamVjdHMuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoQXNzZXRzSW5QYXJhbGxlbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBleGVjdXRpbmcgQ0RLLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI/OiBOb2RlUGFja2FnZU1hbmFnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RvcnkgdGhlIENESyBwcm9qZWN0IGlzIGxvY2F0ZWQgaW4gdGhlIHJlcG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gXCIuXCJcbiAgICovXG4gIHJlYWRvbmx5IGNka0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBhYnN0cmFjdGlvbiB0byBlYXNlIENESyBwaXBlbGluZSBjcmVhdGlvbiBhbmQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENka1BpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICByZWFkb25seSBwaXBlbGluZTogQ29kZVBpcGVsaW5lO1xuICByZWFkb25seSBwaXBlbGluZU5vdGlmaWNhdGlvblJ1bGU6IFBpcGVsaW5lTm90aWZpY2F0aW9uUnVsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2RrUGlwZWxpbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gS2V5LmZyb21LZXlBcm4odGhpcywgJ0VuY3J5cHRpb25LZXknLCBwcm9wcy5rZXlBcm4pO1xuXG4gICAgY29uc3QgYXJ0aWZhY3RCdWNrZXQgPSBuZXcgQXJ0aWZhY3RCdWNrZXQodGhpcywgJ0FydGlmYWN0QnVja2V0Jywge1xuICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgIGFjY291bnRJZHM6IHByb3BzLmFjY291bnRJZHNcbiAgICB9KTtcblxuICAgIGNvbnN0IHVuZGVybHlpbmdQaXBlbGluZSA9IG5ldyBQaXBlbGluZSh0aGlzLCAnUGlwZWxpbmUnLCB7XG4gICAgICBhcnRpZmFjdEJ1Y2tldFxuICAgIH0pO1xuXG4gICAgbGV0IGlucHV0OiBDb2RlUGlwZWxpbmVTb3VyY2U7XG4gICAgaWYgKHByb3BzLmNvbm5lY3Rpb25Bcm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5wdXQgPSBDb2RlUGlwZWxpbmVTb3VyY2UuY29ubmVjdGlvbihwcm9wcy5yZXBvc2l0b3J5LCBwcm9wcy5icmFuY2gsIHtcbiAgICAgICAgY29ubmVjdGlvbkFybjogcHJvcHMuY29ubmVjdGlvbkFyblxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBwcm9wcy5yZXBvc2l0b3J5LnN0YXJ0c1dpdGgoXCJhcm46XCIpXG4gICAgICAgID8gUmVwb3NpdG9yeS5mcm9tUmVwb3NpdG9yeUFybih0aGlzLCBcIlJlcG9zaXRvcnlcIiwgcHJvcHMucmVwb3NpdG9yeSlcbiAgICAgICAgOiBSZXBvc2l0b3J5LmZyb21SZXBvc2l0b3J5TmFtZSh0aGlzLCBcIlJlcG9zaXRvcnlcIiwgcHJvcHMucmVwb3NpdG9yeSlcbiAgICAgIGlucHV0ID0gQ29kZVBpcGVsaW5lU291cmNlLmNvZGVDb21taXQocmVwb3NpdG9yeSwgcHJvcHMuYnJhbmNoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFja05hbWUgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG4gICAgY29uc3QgY2RrRGlyZWN0b3J5ID0gcHJvcHMuY2RrRGlyZWN0b3J5ID8/IFwiLlwiO1xuXG4gICAgbGV0IGNvbW1hbmRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHByb3BzLmNvbW1hbmRzO1xuICAgIGlmIChjb21tYW5kcyA9PT0gdW5kZWZpbmVkICYmIHByb3BzLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSkge1xuICAgICAgY29tbWFuZHMgPSBbXG4gICAgICAgIGBjZCAke2Nka0RpcmVjdG9yeSA/PyBcIi5cIn1gLFxuICAgICAgICAnbnBtIC1nIGluc3RhbGwgcG5wbScsXG4gICAgICAgICdwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1wcmVmZXItb2ZmbGluZScsXG4gICAgICAgICdwbnBtIHJ1biBidWlsZCcsXG4gICAgICAgICdwbnBtIHJ1biB0ZXN0JyxcbiAgICAgICAgYHBucHggY2RrIHN5bnRoICR7c3RhY2tOYW1lfWBcbiAgICAgIF1cbiAgICB9IGVsc2UgaWYgKGNvbW1hbmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbW1hbmRzID0gW1xuICAgICAgICBgY2QgJHtjZGtEaXJlY3RvcnkgPz8gXCIuXCJ9YCxcbiAgICAgICAgJ25wbSBjb25maWcgc2V0IGZ1bmQgZmFsc2UnLFxuICAgICAgICAnbnBtIGNpIC0tcHJlZmVyLW9mZmxpbmUnLFxuICAgICAgICAnbnBtIHJ1biBidWlsZCcsXG4gICAgICAgICducG0gcnVuIHRlc3QnLFxuICAgICAgICBgbnB4IGNkayBzeW50aCAke3N0YWNrTmFtZX1gXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBDb2RlUGlwZWxpbmUodGhpcywgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdW5kZXJseWluZ1BpcGVsaW5lLFxuICAgICAgc2VsZk11dGF0aW9uOiBwcm9wcy5zZWxmTXV0YXRpb24gPz8gdHJ1ZSxcbiAgICAgIGRvY2tlckVuYWJsZWRGb3JTeW50aDogcHJvcHMuZG9ja2VyRW5hYmxlZEZvclN5bnRoID8/IHRydWUsXG4gICAgICBkb2NrZXJFbmFibGVkRm9yU2VsZk11dGF0aW9uOiBwcm9wcy5kb2NrZXJFbmFibGVkRm9yU2VsZk11dGF0aW9uID8/IHRydWUsXG4gICAgICBwdWJsaXNoQXNzZXRzSW5QYXJhbGxlbDogcHJvcHMucHVibGlzaEFzc2V0c0luUGFyYWxsZWwgPz8gZmFsc2UsXG4gICAgICBzeW50aDogbmV3IFNoZWxsU3RlcCgnU3ludGgnLCB7XG4gICAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IGAke2Nka0RpcmVjdG9yeX0vY2RrLm91dGAsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgYWRkaXRpb25hbElucHV0czogcHJvcHMuYWRkaXRpb25hbElucHV0cz8/e31cbiAgICAgIH0pLFxuICAgICAgc3ludGhDb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICAvLyBjYWNoZTogQ2FjaGUubG9jYWwoKSwgLy8gVE9ETyBOb3Qgc3VwcG9ydGVkIG9uIEFSTVxuICAgICAgICBwYXJ0aWFsQnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG4gICAgICAgICAgLy8gVE9ETyBOZWVkIHRvIGxvb2sgaW50byB0aGlzIGZ1cnRoZXJcbiAgICAgICAgICBjYWNoZToge1xuICAgICAgICAgICAgcGF0aHM6IFwiL3RtcC9ucG0tY2FjaGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGhhc2VzOiB7XG4gICAgICAgICAgICBpbnN0YWxsOiB7XG4gICAgICAgICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgICAgICAgXCJuIDE2XCIsIC8vIEluc3RhbGwgTm9kZSB2MTZcbiAgICAgICAgICAgICAgICBcIm5wbSBpIC0tbG9jYXRpb249Z2xvYmFsIC0tbm8tZnVuZCBlc2J1aWxkXCIgLy8gSW5zdGFsbCBlc2J1aWxkIGxvY2FsbHlcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBjb21wdXRlVHlwZTogcHJvcHMuY29tcHV0ZVR5cGUgPz8gQ29tcHV0ZVR5cGUuU01BTEwsXG4gICAgICAgICAgYnVpbGRJbWFnZTogcHJvcHMuYnVpbGRJbWFnZSA/PyBMaW51eEJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfNFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXNzZXRQdWJsaXNoaW5nQ29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl80XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZWxmTXV0YXRpb25Db2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgYnVpbGRJbWFnZTogTGludXhCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yXzRcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNvZGVCdWlsZERlZmF1bHRzOiB7XG4gICAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eEJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfNFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHByb3BzLnNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25Bcm4pIHtcbiAgICAgIHRoaXMucGlwZWxpbmVOb3RpZmljYXRpb25SdWxlID0gbmV3IFBpcGVsaW5lTm90aWZpY2F0aW9uUnVsZSh0aGlzLCAnTm90aWZpY2F0aW9uJywge1xuICAgICAgICBzb3VyY2U6IHVuZGVybHlpbmdQaXBlbGluZSxcbiAgICAgICAgc2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybjogcHJvcHMuc2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFyblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhZ2Uoc3RhZ2U6IFN0YWdlLCBvcHRpb25zPzogQWRkU3RhZ2VPcHRzKTogU3RhZ2VEZXBsb3ltZW50IHtcbiAgICByZXR1cm4gdGhpcy5waXBlbGluZS5hZGRTdGFnZShzdGFnZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRXYXZlKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBXYXZlT3B0aW9ucyk6IFdhdmUge1xuICAgIHJldHVybiB0aGlzLnBpcGVsaW5lLmFkZFdhdmUoaWQsIG9wdGlvbnMpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export declare enum NodePackageManager {
2
+ NPM = "npm",
3
+ YARN = "yarn",
4
+ PNPM = "pnpm"
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodePackageManager = void 0;
4
+ var NodePackageManager;
5
+ (function (NodePackageManager) {
6
+ NodePackageManager["NPM"] = "npm";
7
+ NodePackageManager["YARN"] = "yarn";
8
+ NodePackageManager["PNPM"] = "pnpm";
9
+ })(NodePackageManager = exports.NodePackageManager || (exports.NodePackageManager = {}));
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnVtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDNUIsaUNBQVcsQ0FBQTtJQUNYLG1DQUFhLENBQUE7SUFDYixtQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBSTdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gTm9kZVBhY2thZ2VNYW5hZ2VyIHtcbiAgTlBNID0gXCJucG1cIixcbiAgWUFSTiA9IFwieWFyblwiLFxuICBQTlBNID0gXCJwbnBtXCJcbn1cbiJdfQ==
@@ -2,3 +2,4 @@ export * from "./artifact-bucket";
2
2
  export * from "./cdk-pipeline";
3
3
  export * from "./extended-stack";
4
4
  export * from "./pipeline-notification-rule";
5
+ export * from "./enums";
@@ -14,4 +14,5 @@ __exportStar(require("./artifact-bucket"), exports);
14
14
  __exportStar(require("./cdk-pipeline"), exports);
15
15
  __exportStar(require("./extended-stack"), exports);
16
16
  __exportStar(require("./pipeline-notification-rule"), exports);
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsaURBQStCO0FBQy9CLG1EQUFpQztBQUNqQywrREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcnRpZmFjdC1idWNrZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Nkay1waXBlbGluZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXh0ZW5kZWQtc3RhY2tcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BpcGVsaW5lLW5vdGlmaWNhdGlvbi1ydWxlXCJcbiJdfQ==
17
+ __exportStar(require("./enums"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsaURBQStCO0FBQy9CLG1EQUFpQztBQUNqQywrREFBNEM7QUFDNUMsMENBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXJ0aWZhY3QtYnVja2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jZGstcGlwZWxpbmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4dGVuZGVkLXN0YWNrXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9waXBlbGluZS1ub3RpZmljYXRpb24tcnVsZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9lbnVtc1wiXG4iXX0=
@@ -0,0 +1 @@
1
+ export * from "./lib";
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./lib"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9saWJcIjtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from "./log-configuration";
2
+ export * from "./standard-fargate-cluster";
3
+ export * from "./standard-fargate-service";
4
+ export * from "./standard-application-fargate-service";
5
+ export * from "./standard-network-fargate-service";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./log-configuration"), exports);
14
+ __exportStar(require("./standard-fargate-cluster"), exports);
15
+ __exportStar(require("./standard-fargate-service"), exports);
16
+ __exportStar(require("./standard-application-fargate-service"), exports);
17
+ __exportStar(require("./standard-network-fargate-service"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzREFBb0M7QUFDcEMsNkRBQTJDO0FBQzNDLDZEQUEyQztBQUMzQyx5RUFBdUQ7QUFDdkQscUVBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbG9nLWNvbmZpZ3VyYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YW5kYXJkLWZhcmdhdGUtY2x1c3RlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhbmRhcmQtZmFyZ2F0ZS1zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGFuZGFyZC1hcHBsaWNhdGlvbi1mYXJnYXRlLXNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YW5kYXJkLW5ldHdvcmstZmFyZ2F0ZS1zZXJ2aWNlXCI7XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { RetentionDays } from "aws-cdk-lib/aws-logs";
2
+ import { RemovalPolicy } from "aws-cdk-lib";
3
+ import { IKey } from "aws-cdk-lib/aws-kms";
4
+ /**
5
+ * Standard log configuration for ECS services.
6
+ */
7
+ export interface LogConfiguration {
8
+ /** Enables logging to CloudWatch.
9
+ *
10
+ * @default - true
11
+ */
12
+ readonly enabled?: boolean;
13
+ /**
14
+ * The KMS customer managed key to encrypt the log group with.
15
+ */
16
+ readonly encryptionKey?: IKey;
17
+ /**
18
+ * Name of the log group. Best practice is to not set this field.
19
+ */
20
+ readonly logGroupName?: string;
21
+ /**
22
+ * How long, in days, the log contents will be retained.
23
+ *
24
+ * @default - RetentionDays.FIVE_DAYS
25
+ */
26
+ readonly retention?: RetentionDays;
27
+ /**
28
+ * Determine the removal policy of this log group
29
+ *
30
+ * @default - RemovalPolicy.DESTROY
31
+ */
32
+ readonly removalPolicy?: RemovalPolicy;
33
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2ctY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZXRlbnRpb25EYXlzfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7UmVtb3ZhbFBvbGljeX0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0lLZXl9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5cbi8qKlxuICogU3RhbmRhcmQgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIEVDUyBzZXJ2aWNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb25maWd1cmF0aW9uIHtcblxuICAvKiogRW5hYmxlcyBsb2dnaW5nIHRvIENsb3VkV2F0Y2guXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMgY3VzdG9tZXIgbWFuYWdlZCBrZXkgdG8gZW5jcnlwdCB0aGUgbG9nIGdyb3VwIHdpdGguXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogSUtleTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgbG9nIGdyb3VwLiBCZXN0IHByYWN0aWNlIGlzIHRvIG5vdCBzZXQgdGhpcyBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGxvbmcsIGluIGRheXMsIHRoZSBsb2cgY29udGVudHMgd2lsbCBiZSByZXRhaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBSZXRlbnRpb25EYXlzLkZJVkVfREFZU1xuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uPzogUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSByZW1vdmFsIHBvbGljeSBvZiB0aGlzIGxvZyBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG4iXX0=
@@ -0,0 +1,132 @@
1
+ import { StandardFargateService, StandardFargateServiceProps } from "./standard-fargate-service";
2
+ import { Construct } from "constructs";
3
+ import { Duration } from "aws-cdk-lib";
4
+ import { ApplicationProtocol, IApplicationListener, IApplicationLoadBalancer, TargetGroupLoadBalancingAlgorithmType } from "aws-cdk-lib/aws-elasticloadbalancingv2";
5
+ import { ARecord, IHostedZone } from "aws-cdk-lib/aws-route53";
6
+ import { DomainName } from "../../aws-route53";
7
+ /**
8
+ * Properties for StandardApplicationFargateService
9
+ */
10
+ export interface StandardApplicationFargateServiceProps extends StandardFargateServiceProps {
11
+ /**
12
+ * The name of an application-based stickiness cookie.
13
+ *
14
+ * @default - lb_affinity
15
+ */
16
+ readonly stickinessCookieName?: string;
17
+ /**
18
+ * The stickiness cookie expiration period. Set to 0 to disable.
19
+ *
20
+ * @default - Duration.days(1)
21
+ */
22
+ readonly stickinessCookieDuration?: Duration;
23
+ /**
24
+ * The time period during which the load balancer sends a newly registered target a
25
+ * linearly increasing share of the traffic to the target group. Set this to 0
26
+ * to disable.
27
+ *
28
+ * @default - Duration.seconds(30)
29
+ */
30
+ readonly slowStart?: Duration;
31
+ /**
32
+ * The protocol used by the application in the container.
33
+ *
34
+ * @default - ApplicationProtocol.HTTP
35
+ */
36
+ readonly applicationProtocol?: ApplicationProtocol;
37
+ /**
38
+ * The amount of time for Elastic Load Balancing to wait before deregistering a target.
39
+ *
40
+ * @default - Duration.seconds(10)
41
+ */
42
+ readonly deregistrationDelay?: Duration;
43
+ /**
44
+ * The approximate number of seconds between health checks for an individual target.
45
+ *
46
+ * @default - Duration.seconds(10)
47
+ */
48
+ readonly healthCheckInterval?: Duration;
49
+ /**
50
+ * The ping path destination where Elastic Load Balancing sends health check requests.
51
+ *
52
+ * @default - /health
53
+ */
54
+ readonly healthCheckPath?: string;
55
+ /**
56
+ * The amount of time, in seconds, during which no response from a target means a failed health check
57
+ *
58
+ * @default - Duration.seconds(3)
59
+ */
60
+ readonly healthCheckTimeout?: Duration;
61
+ /**
62
+ * The number of consecutive health checks successes required before considering an unhealthy target healthy.
63
+ *
64
+ * @default - 2
65
+ */
66
+ readonly healthyThresholdCount?: number;
67
+ /**
68
+ * The number of consecutive health check failures required before considering a target unhealthy.
69
+ *
70
+ * @default - 2
71
+ */
72
+ readonly unhealthyThresholdCount?: number;
73
+ /**
74
+ * HTTP code to use when checking for a successful response from a target
75
+ *
76
+ * @default - 200-299
77
+ */
78
+ readonly healthyHttpCodes?: string;
79
+ /**
80
+ * The load balancing algorithm to select targets for routing requests.
81
+ * To set this to LEAST_OUTSTANDING_REQUESTS, stickiness must be disabled.
82
+ *
83
+ * @default - ROUND_ROBIN
84
+ */
85
+ readonly loadBalancingAlgorithmType?: TargetGroupLoadBalancingAlgorithmType;
86
+ /**
87
+ * The number of ALB requests to target for scaling.
88
+ * Disabled by default.
89
+ */
90
+ readonly scaleRequestPerTarget?: number;
91
+ /**
92
+ * Domain name associated with this service.
93
+ */
94
+ readonly domainName: string;
95
+ /**
96
+ * Path pattern to match on the load balancer.
97
+ *
98
+ * @default - ["/*"]
99
+ */
100
+ readonly pathPattern?: string[];
101
+ /**
102
+ * Load balancer to attach this service to. If passed an ARN or name a lookup will be
103
+ * performed to locate the load balancer.
104
+ */
105
+ readonly loadBalancer: IApplicationLoadBalancer | string;
106
+ /**
107
+ * The listener protocol to attach this service to.
108
+ *
109
+ * @default - ApplicationProtocol.HTTPS
110
+ */
111
+ readonly listenerProtocol?: ApplicationProtocol;
112
+ /**
113
+ * The priority to give the target group on the ALB.
114
+ *
115
+ * @default - 1
116
+ */
117
+ readonly targetGroupPriority?: number;
118
+ /**
119
+ * Zone of the domain name. If set, a route53 record is created for the service.
120
+ */
121
+ readonly domainZone?: IHostedZone;
122
+ }
123
+ /**
124
+ * Creates an ECS Fargate service and maps it to an Application Load Balancer (ALB).
125
+ */
126
+ export declare class StandardApplicationFargateService extends StandardFargateService {
127
+ readonly loadBalancer: IApplicationLoadBalancer;
128
+ readonly listener: IApplicationListener;
129
+ readonly domainName?: DomainName;
130
+ readonly route53Record?: ARecord;
131
+ constructor(scope: Construct, id: string, props: StandardApplicationFargateServiceProps);
132
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StandardApplicationFargateService = void 0;
4
+ const standard_fargate_service_1 = require("./standard-fargate-service");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const aws_elasticloadbalancingv2_1 = require("aws-cdk-lib/aws-elasticloadbalancingv2");
7
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
8
+ const aws_route53_2 = require("../../aws-route53");
9
+ const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
10
+ /**
11
+ * Creates an ECS Fargate service and maps it to an Application Load Balancer (ALB).
12
+ */
13
+ class StandardApplicationFargateService extends standard_fargate_service_1.StandardFargateService {
14
+ constructor(scope, id, props) {
15
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
16
+ super(scope, id, props);
17
+ let stickinessCookieDuration = (_a = props.stickinessCookieDuration) !== null && _a !== void 0 ? _a : aws_cdk_lib_1.Duration.days(1);
18
+ if (stickinessCookieDuration.toSeconds() === 0) {
19
+ stickinessCookieDuration = undefined;
20
+ }
21
+ let stickinessCookieName;
22
+ if (stickinessCookieDuration !== undefined) {
23
+ stickinessCookieName = (_b = props.stickinessCookieName) !== null && _b !== void 0 ? _b : "lb_affinity";
24
+ }
25
+ let slowStart = (_c = props.slowStart) !== null && _c !== void 0 ? _c : aws_cdk_lib_1.Duration.seconds(30);
26
+ if (slowStart.toSeconds() === 0) {
27
+ slowStart = undefined;
28
+ }
29
+ const targetGroup = new aws_elasticloadbalancingv2_1.ApplicationTargetGroup(this, "TargetGroup", {
30
+ targets: [this.service],
31
+ vpc: props.cluster.vpc,
32
+ port: this.port,
33
+ protocol: (_d = props.applicationProtocol) !== null && _d !== void 0 ? _d : aws_elasticloadbalancingv2_1.ApplicationProtocol.HTTP,
34
+ deregistrationDelay: (_e = props.deregistrationDelay) !== null && _e !== void 0 ? _e : aws_cdk_lib_1.Duration.seconds(10),
35
+ slowStart,
36
+ healthCheck: {
37
+ enabled: true,
38
+ interval: (_f = props.healthCheckInterval) !== null && _f !== void 0 ? _f : aws_cdk_lib_1.Duration.seconds(10),
39
+ path: (_g = props.healthCheckPath) !== null && _g !== void 0 ? _g : "/health",
40
+ timeout: (_h = props.healthCheckTimeout) !== null && _h !== void 0 ? _h : aws_cdk_lib_1.Duration.seconds(3),
41
+ healthyThresholdCount: (_j = props.healthyThresholdCount) !== null && _j !== void 0 ? _j : 2,
42
+ unhealthyThresholdCount: (_k = props.unhealthyThresholdCount) !== null && _k !== void 0 ? _k : 2,
43
+ healthyHttpCodes: (_l = props.healthyHttpCodes) !== null && _l !== void 0 ? _l : "200-299"
44
+ },
45
+ stickinessCookieName,
46
+ stickinessCookieDuration,
47
+ loadBalancingAlgorithmType: (_m = props.loadBalancingAlgorithmType) !== null && _m !== void 0 ? _m : aws_elasticloadbalancingv2_1.TargetGroupLoadBalancingAlgorithmType.ROUND_ROBIN
48
+ });
49
+ if (props.scaleRequestPerTarget !== undefined) {
50
+ this.scaling.scaleOnRequestCount("RequestCountScaling", {
51
+ scaleInCooldown: this.scaleInCooldown,
52
+ scaleOutCooldown: this.scaleOutCooldown,
53
+ targetGroup,
54
+ requestsPerTarget: props.scaleRequestPerTarget,
55
+ });
56
+ }
57
+ const targetGroupConditions = [];
58
+ targetGroupConditions.push(aws_elasticloadbalancingv2_1.ListenerCondition.pathPatterns((_o = props.pathPattern) !== null && _o !== void 0 ? _o : ["/*"]));
59
+ if (props.domainName !== undefined) {
60
+ targetGroupConditions.push(aws_elasticloadbalancingv2_1.ListenerCondition.hostHeaders([props.domainName]));
61
+ }
62
+ let loadBalancer;
63
+ if (typeof props.loadBalancer === "string") {
64
+ if (props.loadBalancer.startsWith("arn:")) {
65
+ loadBalancer = aws_elasticloadbalancingv2_1.ApplicationLoadBalancer.fromLookup(this, "LoadBalancer", {
66
+ loadBalancerArn: props.loadBalancer
67
+ });
68
+ }
69
+ else {
70
+ loadBalancer = aws_elasticloadbalancingv2_1.ApplicationLoadBalancer.fromLookup(this, "LoadBalancer", {
71
+ loadBalancerTags: {
72
+ Name: props.loadBalancer
73
+ }
74
+ });
75
+ }
76
+ }
77
+ else {
78
+ loadBalancer = props.loadBalancer;
79
+ }
80
+ const listener = aws_elasticloadbalancingv2_1.ApplicationListener.fromLookup(this, "Listener", {
81
+ loadBalancerArn: loadBalancer.loadBalancerArn,
82
+ listenerProtocol: (_p = props.listenerProtocol) !== null && _p !== void 0 ? _p : aws_elasticloadbalancingv2_1.ApplicationProtocol.HTTPS
83
+ });
84
+ listener.addTargetGroups(`${id}TargetGroups`, {
85
+ targetGroups: [targetGroup],
86
+ conditions: targetGroupConditions,
87
+ priority: (_q = props.targetGroupPriority) !== null && _q !== void 0 ? _q : 1
88
+ });
89
+ if (props.domainZone !== undefined) {
90
+ this.domainName = aws_route53_2.DomainName.fromFqdn(props.domainName, props.domainZone);
91
+ this.route53Record = this.domainName.createARecord(this, aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.LoadBalancerTarget(loadBalancer)));
92
+ }
93
+ this.loadBalancer = loadBalancer;
94
+ this.listener = listener;
95
+ }
96
+ }
97
+ exports.StandardApplicationFargateService = StandardApplicationFargateService;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtYXBwbGljYXRpb24tZmFyZ2F0ZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhbmRhcmQtYXBwbGljYXRpb24tZmFyZ2F0ZS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUErRjtBQUUvRiw2Q0FBcUM7QUFDckMsdUZBTWdEO0FBQ2hELHlEQUEyRTtBQUMzRSxtREFBNkM7QUFDN0MseUVBQW1FO0FBMEluRTs7R0FFRztBQUNILE1BQWEsaUNBQWtDLFNBQVEsaURBQXNCO0lBTzNFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkM7O1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksd0JBQXdCLFNBQXlCLEtBQUssQ0FBQyx3QkFBd0IsbUNBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEcsSUFBSSx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDOUMsd0JBQXdCLEdBQUcsU0FBUyxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxvQkFBd0MsQ0FBQztRQUM3QyxJQUFJLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtZQUMxQyxvQkFBb0IsU0FBRyxLQUFLLENBQUMsb0JBQW9CLG1DQUFJLGFBQWEsQ0FBQTtTQUNuRTtRQUVELElBQUksU0FBUyxTQUF5QixLQUFLLENBQUMsU0FBUyxtQ0FBSSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0IsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUN2QjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksbURBQXNCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNsRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUc7WUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxRQUFFLEtBQUssQ0FBQyxtQkFBbUIsbUNBQUksZ0RBQW1CLENBQUMsSUFBSTtZQUMvRCxtQkFBbUIsUUFBRSxLQUFLLENBQUMsbUJBQW1CLG1DQUFJLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxTQUFTO1lBQ1QsV0FBVyxFQUFFO2dCQUNYLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsUUFBRSxLQUFLLENBQUMsbUJBQW1CLG1DQUFJLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxRQUFFLEtBQUssQ0FBQyxlQUFlLG1DQUFJLFNBQVM7Z0JBQ3hDLE9BQU8sUUFBRSxLQUFLLENBQUMsa0JBQWtCLG1DQUFJLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDeEQscUJBQXFCLFFBQUUsS0FBSyxDQUFDLHFCQUFxQixtQ0FBSSxDQUFDO2dCQUN2RCx1QkFBdUIsUUFBRSxLQUFLLENBQUMsdUJBQXVCLG1DQUFJLENBQUM7Z0JBQzNELGdCQUFnQixRQUFFLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUksU0FBUzthQUN0RDtZQUNELG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsMEJBQTBCLFFBQUUsS0FBSyxDQUFDLDBCQUEwQixtQ0FBSSxrRUFBcUMsQ0FBQyxXQUFXO1NBQ2xILENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLHFCQUFxQixLQUFLLFNBQVMsRUFBRTtZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFO2dCQUN0RCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3JDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3ZDLFdBQVc7Z0JBQ1gsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjthQUMvQyxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0scUJBQXFCLEdBQXdCLEVBQUUsQ0FBQztRQUN0RCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsOENBQWlCLENBQUMsWUFBWSxPQUFDLEtBQUssQ0FBQyxXQUFXLG1DQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDbEMscUJBQXFCLENBQUMsSUFBSSxDQUFDLDhDQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0U7UUFFRCxJQUFJLFlBQXNDLENBQUM7UUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQzFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pDLFlBQVksR0FBRyxvREFBdUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtvQkFDdEUsZUFBZSxFQUFFLEtBQUssQ0FBQyxZQUFZO2lCQUNwQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxZQUFZLEdBQUcsb0RBQXVCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7b0JBQ3RFLGdCQUFnQixFQUFFO3dCQUNoQixJQUFJLEVBQUUsS0FBSyxDQUFDLFlBQVk7cUJBQ3pCO2lCQUNGLENBQUMsQ0FBQzthQUNKO1NBQ0Y7YUFBTTtZQUNMLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1NBQ25DO1FBRUQsTUFBTSxRQUFRLEdBQUcsZ0RBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDaEUsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlO1lBQzdDLGdCQUFnQixRQUFFLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUksZ0RBQW1CLENBQUMsS0FBSztTQUN0RSxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUU7WUFDNUMsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzNCLFVBQVUsRUFBRSxxQkFBcUI7WUFDakMsUUFBUSxRQUFFLEtBQUssQ0FBQyxtQkFBbUIsbUNBQUksQ0FBQztTQUN6QyxDQUFDLENBQUM7UUFFSCxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsd0JBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQ3JELDBCQUFZLENBQUMsU0FBUyxDQUFDLElBQUksd0NBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBbEdELDhFQWtHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RhbmRhcmRGYXJnYXRlU2VydmljZSwgU3RhbmRhcmRGYXJnYXRlU2VydmljZVByb3BzfSBmcm9tIFwiLi9zdGFuZGFyZC1mYXJnYXRlLXNlcnZpY2VcIjtcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtEdXJhdGlvbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkxpc3RlbmVyLFxuICBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgQXBwbGljYXRpb25Qcm90b2NvbCxcbiAgQXBwbGljYXRpb25UYXJnZXRHcm91cCwgSUFwcGxpY2F0aW9uTGlzdGVuZXIsIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciwgTGlzdGVuZXJDb25kaXRpb24sXG4gIFRhcmdldEdyb3VwTG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQge0FSZWNvcmQsIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHtEb21haW5OYW1lfSBmcm9tIFwiLi4vLi4vYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7TG9hZEJhbGFuY2VyVGFyZ2V0fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFN0YW5kYXJkQXBwbGljYXRpb25GYXJnYXRlU2VydmljZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkQXBwbGljYXRpb25GYXJnYXRlU2VydmljZVByb3BzIGV4dGVuZHMgU3RhbmRhcmRGYXJnYXRlU2VydmljZVByb3BzIHtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgYW4gYXBwbGljYXRpb24tYmFzZWQgc3RpY2tpbmVzcyBjb29raWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbGJfYWZmaW5pdHlcbiAgICovXG4gIHJlYWRvbmx5IHN0aWNraW5lc3NDb29raWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RpY2tpbmVzcyBjb29raWUgZXhwaXJhdGlvbiBwZXJpb2QuIFNldCB0byAwIHRvIGRpc2FibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRHVyYXRpb24uZGF5cygxKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIHBlcmlvZCBkdXJpbmcgd2hpY2ggdGhlIGxvYWQgYmFsYW5jZXIgc2VuZHMgYSBuZXdseSByZWdpc3RlcmVkIHRhcmdldCBhXG4gICAqIGxpbmVhcmx5IGluY3JlYXNpbmcgc2hhcmUgb2YgdGhlIHRyYWZmaWMgdG8gdGhlIHRhcmdldCBncm91cC4gU2V0IHRoaXMgdG8gMFxuICAgKiB0byBkaXNhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLnNlY29uZHMoMzApXG4gICAqL1xuICByZWFkb25seSBzbG93U3RhcnQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQXG4gICAqL1xuICByZWFkb25seSBhcHBsaWNhdGlvblByb3RvY29sPzogQXBwbGljYXRpb25Qcm90b2NvbDtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lIGZvciBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRvIHdhaXQgYmVmb3JlIGRlcmVnaXN0ZXJpbmcgYSB0YXJnZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRHVyYXRpb24uc2Vjb25kcygxMClcbiAgICovXG4gIHJlYWRvbmx5IGRlcmVnaXN0cmF0aW9uRGVsYXk/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGFwcHJveGltYXRlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gaGVhbHRoIGNoZWNrcyBmb3IgYW4gaW5kaXZpZHVhbCB0YXJnZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRHVyYXRpb24uc2Vjb25kcygxMClcbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrSW50ZXJ2YWw/OiBEdXJhdGlvblxuXG4gIC8qKlxuICAgKiBUaGUgcGluZyBwYXRoIGRlc3RpbmF0aW9uIHdoZXJlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgc2VuZHMgaGVhbHRoIGNoZWNrIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIC9oZWFsdGhcbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCBkdXJpbmcgd2hpY2ggbm8gcmVzcG9uc2UgZnJvbSBhIHRhcmdldCBtZWFucyBhIGZhaWxlZCBoZWFsdGggY2hlY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBEdXJhdGlvbi5zZWNvbmRzKDMpXG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVja1RpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBoZWFsdGggY2hlY2tzIHN1Y2Nlc3NlcyByZXF1aXJlZCBiZWZvcmUgY29uc2lkZXJpbmcgYW4gdW5oZWFsdGh5IHRhcmdldCBoZWFsdGh5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDJcbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aHlUaHJlc2hvbGRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBoZWFsdGggY2hlY2sgZmFpbHVyZXMgcmVxdWlyZWQgYmVmb3JlIGNvbnNpZGVyaW5nIGEgdGFyZ2V0IHVuaGVhbHRoeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAyXG4gICAqL1xuICByZWFkb25seSB1bmhlYWx0aHlUaHJlc2hvbGRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogSFRUUCBjb2RlIHRvIHVzZSB3aGVuIGNoZWNraW5nIGZvciBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHRhcmdldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDIwMC0yOTlcbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aHlIdHRwQ29kZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkIGJhbGFuY2luZyBhbGdvcml0aG0gdG8gc2VsZWN0IHRhcmdldHMgZm9yIHJvdXRpbmcgcmVxdWVzdHMuXG4gICAqIFRvIHNldCB0aGlzIHRvIExFQVNUX09VVFNUQU5ESU5HX1JFUVVFU1RTLCBzdGlja2luZXNzIG11c3QgYmUgZGlzYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUk9VTkRfUk9CSU5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlPzogVGFyZ2V0R3JvdXBMb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBBTEIgcmVxdWVzdHMgdG8gdGFyZ2V0IGZvciBzY2FsaW5nLlxuICAgKiBEaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGVSZXF1ZXN0UGVyVGFyZ2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEb21haW4gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHBhdHRlcm4gdG8gbWF0Y2ggb24gdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW1wiLypcIl1cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhQYXR0ZXJuPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZXIgdG8gYXR0YWNoIHRoaXMgc2VydmljZSB0by4gSWYgcGFzc2VkIGFuIEFSTiBvciBuYW1lIGEgbG9va3VwIHdpbGwgYmVcbiAgICogcGVyZm9ybWVkIHRvIGxvY2F0ZSB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlcjogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdGVuZXIgcHJvdG9jb2wgdG8gYXR0YWNoIHRoaXMgc2VydmljZSB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBcHBsaWNhdGlvblByb3RvY29sLkhUVFBTXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lclByb3RvY29sPzogQXBwbGljYXRpb25Qcm90b2NvbDtcblxuICAvKipcbiAgICogVGhlIHByaW9yaXR5IHRvIGdpdmUgdGhlIHRhcmdldCBncm91cCBvbiB0aGUgQUxCLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDFcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwUHJpb3JpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFpvbmUgb2YgdGhlIGRvbWFpbiBuYW1lLiBJZiBzZXQsIGEgcm91dGU1MyByZWNvcmQgaXMgY3JlYXRlZCBmb3IgdGhlIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBkb21haW5ab25lPzogSUhvc3RlZFpvbmU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBFQ1MgRmFyZ2F0ZSBzZXJ2aWNlIGFuZCBtYXBzIGl0IHRvIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgKEFMQikuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZEFwcGxpY2F0aW9uRmFyZ2F0ZVNlcnZpY2UgZXh0ZW5kcyBTdGFuZGFyZEZhcmdhdGVTZXJ2aWNlIHtcblxuICByZWFkb25seSBsb2FkQmFsYW5jZXI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcbiAgcmVhZG9ubHkgbGlzdGVuZXI6IElBcHBsaWNhdGlvbkxpc3RlbmVyO1xuICByZWFkb25seSBkb21haW5OYW1lPzogRG9tYWluTmFtZTtcbiAgcmVhZG9ubHkgcm91dGU1M1JlY29yZD86IEFSZWNvcmQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YW5kYXJkQXBwbGljYXRpb25GYXJnYXRlU2VydmljZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBsZXQgc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uOiBEdXJhdGlvbiB8IHVuZGVmaW5lZCA9IHByb3BzLnN0aWNraW5lc3NDb29raWVEdXJhdGlvbiA/PyBEdXJhdGlvbi5kYXlzKDEpO1xuICAgIGlmIChzdGlja2luZXNzQ29va2llRHVyYXRpb24udG9TZWNvbmRzKCkgPT09IDApIHtcbiAgICAgIHN0aWNraW5lc3NDb29raWVEdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgc3RpY2tpbmVzc0Nvb2tpZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0aWNraW5lc3NDb29raWVOYW1lID0gcHJvcHMuc3RpY2tpbmVzc0Nvb2tpZU5hbWUgPz8gXCJsYl9hZmZpbml0eVwiXG4gICAgfVxuXG4gICAgbGV0IHNsb3dTdGFydDogRHVyYXRpb24gfCB1bmRlZmluZWQgPSBwcm9wcy5zbG93U3RhcnQgPz8gRHVyYXRpb24uc2Vjb25kcygzMCk7XG4gICAgaWYgKHNsb3dTdGFydC50b1NlY29uZHMoKSA9PT0gMCkge1xuICAgICAgc2xvd1N0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEdyb3VwID0gbmV3IEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAodGhpcywgXCJUYXJnZXRHcm91cFwiLCB7XG4gICAgICB0YXJnZXRzOiBbdGhpcy5zZXJ2aWNlXSxcbiAgICAgIHZwYzogcHJvcHMuY2x1c3Rlci52cGMsXG4gICAgICBwb3J0OiB0aGlzLnBvcnQsXG4gICAgICBwcm90b2NvbDogcHJvcHMuYXBwbGljYXRpb25Qcm90b2NvbCA/PyBBcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICBkZXJlZ2lzdHJhdGlvbkRlbGF5OiBwcm9wcy5kZXJlZ2lzdHJhdGlvbkRlbGF5ID8/IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgc2xvd1N0YXJ0LFxuICAgICAgaGVhbHRoQ2hlY2s6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgaW50ZXJ2YWw6IHByb3BzLmhlYWx0aENoZWNrSW50ZXJ2YWwgPz8gRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgIHBhdGg6IHByb3BzLmhlYWx0aENoZWNrUGF0aCA/PyBcIi9oZWFsdGhcIixcbiAgICAgICAgdGltZW91dDogcHJvcHMuaGVhbHRoQ2hlY2tUaW1lb3V0ID8/IER1cmF0aW9uLnNlY29uZHMoMyksXG4gICAgICAgIGhlYWx0aHlUaHJlc2hvbGRDb3VudDogcHJvcHMuaGVhbHRoeVRocmVzaG9sZENvdW50ID8/IDIsXG4gICAgICAgIHVuaGVhbHRoeVRocmVzaG9sZENvdW50OiBwcm9wcy51bmhlYWx0aHlUaHJlc2hvbGRDb3VudCA/PyAyLFxuICAgICAgICBoZWFsdGh5SHR0cENvZGVzOiBwcm9wcy5oZWFsdGh5SHR0cENvZGVzID8/IFwiMjAwLTI5OVwiXG4gICAgICB9LFxuICAgICAgc3RpY2tpbmVzc0Nvb2tpZU5hbWUsXG4gICAgICBzdGlja2luZXNzQ29va2llRHVyYXRpb24sXG4gICAgICBsb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZTogcHJvcHMubG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGUgPz8gVGFyZ2V0R3JvdXBMb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZS5ST1VORF9ST0JJTlxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnNjYWxlUmVxdWVzdFBlclRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNjYWxpbmcuc2NhbGVPblJlcXVlc3RDb3VudChcIlJlcXVlc3RDb3VudFNjYWxpbmdcIiwge1xuICAgICAgICBzY2FsZUluQ29vbGRvd246IHRoaXMuc2NhbGVJbkNvb2xkb3duLFxuICAgICAgICBzY2FsZU91dENvb2xkb3duOiB0aGlzLnNjYWxlT3V0Q29vbGRvd24sXG4gICAgICAgIHRhcmdldEdyb3VwLFxuICAgICAgICByZXF1ZXN0c1BlclRhcmdldDogcHJvcHMuc2NhbGVSZXF1ZXN0UGVyVGFyZ2V0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0R3JvdXBDb25kaXRpb25zOiBMaXN0ZW5lckNvbmRpdGlvbltdID0gW107XG4gICAgdGFyZ2V0R3JvdXBDb25kaXRpb25zLnB1c2goTGlzdGVuZXJDb25kaXRpb24ucGF0aFBhdHRlcm5zKHByb3BzLnBhdGhQYXR0ZXJuID8/IFtcIi8qXCJdKSk7XG4gICAgaWYgKHByb3BzLmRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0R3JvdXBDb25kaXRpb25zLnB1c2goTGlzdGVuZXJDb25kaXRpb24uaG9zdEhlYWRlcnMoW3Byb3BzLmRvbWFpbk5hbWVdKSk7XG4gICAgfVxuXG4gICAgbGV0IGxvYWRCYWxhbmNlcjogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuICAgIGlmICh0eXBlb2YgcHJvcHMubG9hZEJhbGFuY2VyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAocHJvcHMubG9hZEJhbGFuY2VyLnN0YXJ0c1dpdGgoXCJhcm46XCIpKSB7XG4gICAgICAgIGxvYWRCYWxhbmNlciA9IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLmZyb21Mb29rdXAodGhpcywgXCJMb2FkQmFsYW5jZXJcIiwge1xuICAgICAgICAgIGxvYWRCYWxhbmNlckFybjogcHJvcHMubG9hZEJhbGFuY2VyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9hZEJhbGFuY2VyID0gQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIuZnJvbUxvb2t1cCh0aGlzLCBcIkxvYWRCYWxhbmNlclwiLCB7XG4gICAgICAgICAgbG9hZEJhbGFuY2VyVGFnczoge1xuICAgICAgICAgICAgTmFtZTogcHJvcHMubG9hZEJhbGFuY2VyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZEJhbGFuY2VyID0gcHJvcHMubG9hZEJhbGFuY2VyO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3RlbmVyID0gQXBwbGljYXRpb25MaXN0ZW5lci5mcm9tTG9va3VwKHRoaXMsIFwiTGlzdGVuZXJcIiwge1xuICAgICAgbG9hZEJhbGFuY2VyQXJuOiBsb2FkQmFsYW5jZXIubG9hZEJhbGFuY2VyQXJuLFxuICAgICAgbGlzdGVuZXJQcm90b2NvbDogcHJvcHMubGlzdGVuZXJQcm90b2NvbCA/PyBBcHBsaWNhdGlvblByb3RvY29sLkhUVFBTXG4gICAgfSk7XG5cbiAgICBsaXN0ZW5lci5hZGRUYXJnZXRHcm91cHMoYCR7aWR9VGFyZ2V0R3JvdXBzYCwge1xuICAgICAgdGFyZ2V0R3JvdXBzOiBbdGFyZ2V0R3JvdXBdLFxuICAgICAgY29uZGl0aW9uczogdGFyZ2V0R3JvdXBDb25kaXRpb25zLFxuICAgICAgcHJpb3JpdHk6IHByb3BzLnRhcmdldEdyb3VwUHJpb3JpdHkgPz8gMVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmRvbWFpblpvbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kb21haW5OYW1lID0gRG9tYWluTmFtZS5mcm9tRnFkbihwcm9wcy5kb21haW5OYW1lLCBwcm9wcy5kb21haW5ab25lKTtcbiAgICAgIHRoaXMucm91dGU1M1JlY29yZCA9IHRoaXMuZG9tYWluTmFtZS5jcmVhdGVBUmVjb3JkKHRoaXMsXG4gICAgICAgIFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IExvYWRCYWxhbmNlclRhcmdldChsb2FkQmFsYW5jZXIpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkQmFsYW5jZXIgPSBsb2FkQmFsYW5jZXI7XG4gICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICB9XG59XG4iXX0=