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

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,137 @@
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
+ import { IVpc } from "aws-cdk-lib/aws-ec2";
8
+ /**
9
+ * Properties for StandardApplicationFargateService
10
+ */
11
+ export interface StandardApplicationFargateServiceProps extends StandardFargateServiceProps {
12
+ /**
13
+ * The name of an application-based stickiness cookie.
14
+ *
15
+ * @default - lb_affinity
16
+ */
17
+ readonly stickinessCookieName?: string;
18
+ /**
19
+ * The stickiness cookie expiration period. Set to 0 to disable.
20
+ *
21
+ * @default - Duration.days(1)
22
+ */
23
+ readonly stickinessCookieDuration?: Duration;
24
+ /**
25
+ * The time period during which the load balancer sends a newly registered target a
26
+ * linearly increasing share of the traffic to the target group. Set this to 0
27
+ * to disable.
28
+ *
29
+ * @default - Duration.seconds(30)
30
+ */
31
+ readonly slowStart?: Duration;
32
+ /**
33
+ * The protocol used by the application in the container.
34
+ *
35
+ * @default - ApplicationProtocol.HTTP
36
+ */
37
+ readonly applicationProtocol?: ApplicationProtocol;
38
+ /**
39
+ * The amount of time for Elastic Load Balancing to wait before deregistering a target.
40
+ *
41
+ * @default - Duration.seconds(10)
42
+ */
43
+ readonly deregistrationDelay?: Duration;
44
+ /**
45
+ * The approximate number of seconds between health checks for an individual target.
46
+ *
47
+ * @default - Duration.seconds(10)
48
+ */
49
+ readonly healthCheckInterval?: Duration;
50
+ /**
51
+ * The ping path destination where Elastic Load Balancing sends health check requests.
52
+ *
53
+ * @default - /health
54
+ */
55
+ readonly healthCheckPath?: string;
56
+ /**
57
+ * The amount of time, in seconds, during which no response from a target means a failed health check
58
+ *
59
+ * @default - Duration.seconds(3)
60
+ */
61
+ readonly healthCheckTimeout?: Duration;
62
+ /**
63
+ * The number of consecutive health checks successes required before considering an unhealthy target healthy.
64
+ *
65
+ * @default - 2
66
+ */
67
+ readonly healthyThresholdCount?: number;
68
+ /**
69
+ * The number of consecutive health check failures required before considering a target unhealthy.
70
+ *
71
+ * @default - 2
72
+ */
73
+ readonly unhealthyThresholdCount?: number;
74
+ /**
75
+ * HTTP code to use when checking for a successful response from a target
76
+ *
77
+ * @default - 200-299
78
+ */
79
+ readonly healthyHttpCodes?: string;
80
+ /**
81
+ * The load balancing algorithm to select targets for routing requests.
82
+ * To set this to LEAST_OUTSTANDING_REQUESTS, stickiness must be disabled.
83
+ *
84
+ * @default - ROUND_ROBIN
85
+ */
86
+ readonly loadBalancingAlgorithmType?: TargetGroupLoadBalancingAlgorithmType;
87
+ /**
88
+ * The number of ALB requests to target for scaling.
89
+ * Disabled by default.
90
+ */
91
+ readonly scaleRequestPerTarget?: number;
92
+ /**
93
+ * Domain name associated with this service.
94
+ */
95
+ readonly domainName: string;
96
+ /**
97
+ * Path pattern to match on the load balancer.
98
+ *
99
+ * @default - ["/*"]
100
+ */
101
+ readonly pathPattern?: string[];
102
+ /**
103
+ * Load balancer to attach this service to. If passed an ARN or name a lookup will be
104
+ * performed to locate the load balancer.
105
+ */
106
+ readonly loadBalancer: IApplicationLoadBalancer | string;
107
+ /**
108
+ * The listener protocol to attach this service to.
109
+ *
110
+ * @default - ApplicationProtocol.HTTPS
111
+ */
112
+ readonly listenerProtocol?: ApplicationProtocol;
113
+ /**
114
+ * The priority to give the target group on the ALB.
115
+ *
116
+ * @default - 1
117
+ */
118
+ readonly targetGroupPriority?: number;
119
+ /**
120
+ * Zone of the domain name. If set, a route53 record is created for the service.
121
+ */
122
+ readonly domainZone?: IHostedZone;
123
+ /**
124
+ * The VPC the services and load balancer are in.
125
+ */
126
+ readonly vpc: IVpc;
127
+ }
128
+ /**
129
+ * Creates an ECS Fargate service and maps it to an Application Load Balancer (ALB).
130
+ */
131
+ export declare class StandardApplicationFargateService extends StandardFargateService {
132
+ readonly loadBalancer: IApplicationLoadBalancer;
133
+ readonly listener: IApplicationListener;
134
+ readonly domainName?: DomainName;
135
+ readonly route53Record?: ARecord;
136
+ constructor(scope: Construct, id: string, props: StandardApplicationFargateServiceProps);
137
+ }
@@ -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.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtYXBwbGljYXRpb24tZmFyZ2F0ZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhbmRhcmQtYXBwbGljYXRpb24tZmFyZ2F0ZS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUErRjtBQUUvRiw2Q0FBcUM7QUFDckMsdUZBTWdEO0FBQ2hELHlEQUEyRTtBQUMzRSxtREFBNkM7QUFDN0MseUVBQW1FO0FBZ0puRTs7R0FFRztBQUNILE1BQWEsaUNBQWtDLFNBQVEsaURBQXNCO0lBTzNFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkM7O1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksd0JBQXdCLFNBQXlCLEtBQUssQ0FBQyx3QkFBd0IsbUNBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEcsSUFBSSx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDOUMsd0JBQXdCLEdBQUcsU0FBUyxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxvQkFBd0MsQ0FBQztRQUM3QyxJQUFJLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtZQUMxQyxvQkFBb0IsU0FBRyxLQUFLLENBQUMsb0JBQW9CLG1DQUFJLGFBQWEsQ0FBQTtTQUNuRTtRQUVELElBQUksU0FBUyxTQUF5QixLQUFLLENBQUMsU0FBUyxtQ0FBSSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0IsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUN2QjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksbURBQXNCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNsRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lB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QUFFO1lBQzVDLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUMzQixVQUFVLEVBQUUscUJBQXFCO1lBQ2pDLFFBQVEsUUFBRSxLQUFLLENBQUMsbUJBQW1CLG1DQUFJLENBQUM7U0FDekMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLHdCQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUNyRCwwQkFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLHdDQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQWxHRCw4RUFrR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0YW5kYXJkRmFyZ2F0ZVNlcnZpY2UsIFN0YW5kYXJkRmFyZ2F0ZVNlcnZpY2VQcm9wc30gZnJvbSBcIi4vc3RhbmRhcmQtZmFyZ2F0ZS1zZXJ2aWNlXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7RHVyYXRpb259IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsXG4gIEFwcGxpY2F0aW9uUHJvdG9jb2wsXG4gIEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAsIElBcHBsaWNhdGlvbkxpc3RlbmVyLCBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsIExpc3RlbmVyQ29uZGl0aW9uLFxuICBUYXJnZXRHcm91cExvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHtBUmVjb3JkLCBJSG9zdGVkWm9uZSwgUmVjb3JkVGFyZ2V0fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7RG9tYWluTmFtZX0gZnJvbSBcIi4uLy4uL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQge0xvYWRCYWxhbmNlclRhcmdldH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcbmltcG9ydCB7SVZwY30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTdGFuZGFyZEFwcGxpY2F0aW9uRmFyZ2F0ZVNlcnZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZEFwcGxpY2F0aW9uRmFyZ2F0ZVNlcnZpY2VQcm9wcyBleHRlbmRzIFN0YW5kYXJkRmFyZ2F0ZVNlcnZpY2VQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGFuIGFwcGxpY2F0aW9uLWJhc2VkIHN0aWNraW5lc3MgY29va2llLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGxiX2FmZmluaXR5XG4gICAqL1xuICByZWFkb25seSBzdGlja2luZXNzQ29va2llTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0aWNraW5lc3MgY29va2llIGV4cGlyYXRpb24gcGVyaW9kLiBTZXQgdG8gMCB0byBkaXNhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLmRheXMoMSlcbiAgICovXG4gIHJlYWRvbmx5IHN0aWNraW5lc3NDb29raWVEdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBwZXJpb2QgZHVyaW5nIHdoaWNoIHRoZSBsb2FkIGJhbGFuY2VyIHNlbmRzIGEgbmV3bHkgcmVnaXN0ZXJlZCB0YXJnZXQgYVxuICAgKiBsaW5lYXJseSBpbmNyZWFzaW5nIHNoYXJlIG9mIHRoZSB0cmFmZmljIHRvIHRoZSB0YXJnZXQgZ3JvdXAuIFNldCB0aGlzIHRvIDBcbiAgICogdG8gZGlzYWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEdXJhdGlvbi5zZWNvbmRzKDMwKVxuICAgKi9cbiAgcmVhZG9ubHkgc2xvd1N0YXJ0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwbGljYXRpb25Qcm90b2NvbD86IEFwcGxpY2F0aW9uUHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSBmb3IgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byB3YWl0IGJlZm9yZSBkZXJlZ2lzdGVyaW5nIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLnNlY29uZHMoMTApXG4gICAqL1xuICByZWFkb25seSBkZXJlZ2lzdHJhdGlvbkRlbGF5PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIGhlYWx0aCBjaGVja3MgZm9yIGFuIGluZGl2aWR1YWwgdGFyZ2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLnNlY29uZHMoMTApXG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVja0ludGVydmFsPzogRHVyYXRpb25cblxuICAvKipcbiAgICogVGhlIHBpbmcgcGF0aCBkZXN0aW5hdGlvbiB3aGVyZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHNlbmRzIGhlYWx0aCBjaGVjayByZXF1ZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAvaGVhbHRoXG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVja1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgZHVyaW5nIHdoaWNoIG5vIHJlc3BvbnNlIGZyb20gYSB0YXJnZXQgbWVhbnMgYSBmYWlsZWQgaGVhbHRoIGNoZWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRHVyYXRpb24uc2Vjb25kcygzKVxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2tUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaGVhbHRoIGNoZWNrcyBzdWNjZXNzZXMgcmVxdWlyZWQgYmVmb3JlIGNvbnNpZGVyaW5nIGFuIHVuaGVhbHRoeSB0YXJnZXQgaGVhbHRoeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAyXG4gICAqL1xuICByZWFkb25seSBoZWFsdGh5VGhyZXNob2xkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaGVhbHRoIGNoZWNrIGZhaWx1cmVzIHJlcXVpcmVkIGJlZm9yZSBjb25zaWRlcmluZyBhIHRhcmdldCB1bmhlYWx0aHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gMlxuICAgKi9cbiAgcmVhZG9ubHkgdW5oZWFsdGh5VGhyZXNob2xkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhUVFAgY29kZSB0byB1c2Ugd2hlbiBjaGVja2luZyBmb3IgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gYSB0YXJnZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSAyMDAtMjk5XG4gICAqL1xuICByZWFkb25seSBoZWFsdGh5SHR0cENvZGVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9hZCBiYWxhbmNpbmcgYWxnb3JpdGhtIHRvIHNlbGVjdCB0YXJnZXRzIGZvciByb3V0aW5nIHJlcXVlc3RzLlxuICAgKiBUbyBzZXQgdGhpcyB0byBMRUFTVF9PVVRTVEFORElOR19SRVFVRVNUUywgc3RpY2tpbmVzcyBtdXN0IGJlIGRpc2FibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFJPVU5EX1JPQklOXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZT86IFRhcmdldEdyb3VwTG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgQUxCIHJlcXVlc3RzIHRvIHRhcmdldCBmb3Igc2NhbGluZy5cbiAgICogRGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHNjYWxlUmVxdWVzdFBlclRhcmdldD86IG51bWJlcjtcblxuICAvKipcbiAgICogRG9tYWluIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmljZS5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCBwYXR0ZXJuIHRvIG1hdGNoIG9uIHRoZSBsb2FkIGJhbGFuY2VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtcIi8qXCJdXG4gICAqL1xuICByZWFkb25seSBwYXRoUGF0dGVybj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMb2FkIGJhbGFuY2VyIHRvIGF0dGFjaCB0aGlzIHNlcnZpY2UgdG8uIElmIHBhc3NlZCBhbiBBUk4gb3IgbmFtZSBhIGxvb2t1cCB3aWxsIGJlXG4gICAqIHBlcmZvcm1lZCB0byBsb2NhdGUgdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB8IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpc3RlbmVyIHByb3RvY29sIHRvIGF0dGFjaCB0aGlzIHNlcnZpY2UgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQU1xuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJQcm90b2NvbD86IEFwcGxpY2F0aW9uUHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmlvcml0eSB0byBnaXZlIHRoZSB0YXJnZXQgZ3JvdXAgb24gdGhlIEFMQi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAxXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cFByaW9yaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBab25lIG9mIHRoZSBkb21haW4gbmFtZS4gSWYgc2V0LCBhIHJvdXRlNTMgcmVjb3JkIGlzIGNyZWF0ZWQgZm9yIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluWm9uZT86IElIb3N0ZWRab25lO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoZSBzZXJ2aWNlcyBhbmQgbG9hZCBiYWxhbmNlciBhcmUgaW4uXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBFQ1MgRmFyZ2F0ZSBzZXJ2aWNlIGFuZCBtYXBzIGl0IHRvIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgKEFMQikuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZEFwcGxpY2F0aW9uRmFyZ2F0ZVNlcnZpY2UgZXh0ZW5kcyBTdGFuZGFyZEZhcmdhdGVTZXJ2aWNlIHtcblxuICByZWFkb25seSBsb2FkQmFsYW5jZXI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcbiAgcmVhZG9ubHkgbGlzdGVuZXI6IElBcHBsaWNhdGlvbkxpc3RlbmVyO1xuICByZWFkb25seSBkb21haW5OYW1lPzogRG9tYWluTmFtZTtcbiAgcmVhZG9ubHkgcm91dGU1M1JlY29yZD86IEFSZWNvcmQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YW5kYXJkQXBwbGljYXRpb25GYXJnYXRlU2VydmljZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBsZXQgc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uOiBEdXJhdGlvbiB8IHVuZGVmaW5lZCA9IHByb3BzLnN0aWNraW5lc3NDb29raWVEdXJhdGlvbiA/PyBEdXJhdGlvbi5kYXlzKDEpO1xuICAgIGlmIChzdGlja2luZXNzQ29va2llRHVyYXRpb24udG9TZWNvbmRzKCkgPT09IDApIHtcbiAgICAgIHN0aWNraW5lc3NDb29raWVEdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgc3RpY2tpbmVzc0Nvb2tpZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0aWNraW5lc3NDb29raWVOYW1lID0gcHJvcHMuc3RpY2tpbmVzc0Nvb2tpZU5hbWUgPz8gXCJsYl9hZmZpbml0eVwiXG4gICAgfVxuXG4gICAgbGV0IHNsb3dTdGFydDogRHVyYXRpb24gfCB1bmRlZmluZWQgPSBwcm9wcy5zbG93U3RhcnQgPz8gRHVyYXRpb24uc2Vjb25kcygzMCk7XG4gICAgaWYgKHNsb3dTdGFydC50b1NlY29uZHMoKSA9PT0gMCkge1xuICAgICAgc2xvd1N0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEdyb3VwID0gbmV3IEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAodGhpcywgXCJUYXJnZXRHcm91cFwiLCB7XG4gICAgICB0YXJnZXRzOiBbdGhpcy5zZXJ2aWNlXSxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgcG9ydDogdGhpcy5wb3J0LFxuICAgICAgcHJvdG9jb2w6IHByb3BzLmFwcGxpY2F0aW9uUHJvdG9jb2wgPz8gQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQLFxuICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogcHJvcHMuZGVyZWdpc3RyYXRpb25EZWxheSA/PyBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgIHNsb3dTdGFydCxcbiAgICAgIGhlYWx0aENoZWNrOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGludGVydmFsOiBwcm9wcy5oZWFsdGhDaGVja0ludGVydmFsID8/IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICBwYXRoOiBwcm9wcy5oZWFsdGhDaGVja1BhdGggPz8gXCIvaGVhbHRoXCIsXG4gICAgICAgIHRpbWVvdXQ6IHByb3BzLmhlYWx0aENoZWNrVGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMpLFxuICAgICAgICBoZWFsdGh5VGhyZXNob2xkQ291bnQ6IHByb3BzLmhlYWx0aHlUaHJlc2hvbGRDb3VudCA/PyAyLFxuICAgICAgICB1bmhlYWx0aHlUaHJlc2hvbGRDb3VudDogcHJvcHMudW5oZWFsdGh5VGhyZXNob2xkQ291bnQgPz8gMixcbiAgICAgICAgaGVhbHRoeUh0dHBDb2RlczogcHJvcHMuaGVhbHRoeUh0dHBDb2RlcyA/PyBcIjIwMC0yOTlcIlxuICAgICAgfSxcbiAgICAgIHN0aWNraW5lc3NDb29raWVOYW1lLFxuICAgICAgc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uLFxuICAgICAgbG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGU6IHByb3BzLmxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlID8/IFRhcmdldEdyb3VwTG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGUuUk9VTkRfUk9CSU5cbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5zY2FsZVJlcXVlc3RQZXJUYXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zY2FsaW5nLnNjYWxlT25SZXF1ZXN0Q291bnQoXCJSZXF1ZXN0Q291bnRTY2FsaW5nXCIsIHtcbiAgICAgICAgc2NhbGVJbkNvb2xkb3duOiB0aGlzLnNjYWxlSW5Db29sZG93bixcbiAgICAgICAgc2NhbGVPdXRDb29sZG93bjogdGhpcy5zY2FsZU91dENvb2xkb3duLFxuICAgICAgICB0YXJnZXRHcm91cCxcbiAgICAgICAgcmVxdWVzdHNQZXJUYXJnZXQ6IHByb3BzLnNjYWxlUmVxdWVzdFBlclRhcmdldCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEdyb3VwQ29uZGl0aW9uczogTGlzdGVuZXJDb25kaXRpb25bXSA9IFtdO1xuICAgIHRhcmdldEdyb3VwQ29uZGl0aW9ucy5wdXNoKExpc3RlbmVyQ29uZGl0aW9uLnBhdGhQYXR0ZXJucyhwcm9wcy5wYXRoUGF0dGVybiA/PyBbXCIvKlwiXSkpO1xuICAgIGlmIChwcm9wcy5kb21haW5OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldEdyb3VwQ29uZGl0aW9ucy5wdXNoKExpc3RlbmVyQ29uZGl0aW9uLmhvc3RIZWFkZXJzKFtwcm9wcy5kb21haW5OYW1lXSkpO1xuICAgIH1cblxuICAgIGxldCBsb2FkQmFsYW5jZXI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcbiAgICBpZiAodHlwZW9mIHByb3BzLmxvYWRCYWxhbmNlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHByb3BzLmxvYWRCYWxhbmNlci5zdGFydHNXaXRoKFwiYXJuOlwiKSkge1xuICAgICAgICBsb2FkQmFsYW5jZXIgPSBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlci5mcm9tTG9va3VwKHRoaXMsIFwiTG9hZEJhbGFuY2VyXCIsIHtcbiAgICAgICAgICBsb2FkQmFsYW5jZXJBcm46IHByb3BzLmxvYWRCYWxhbmNlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvYWRCYWxhbmNlciA9IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLmZyb21Mb29rdXAodGhpcywgXCJMb2FkQmFsYW5jZXJcIiwge1xuICAgICAgICAgIGxvYWRCYWxhbmNlclRhZ3M6IHtcbiAgICAgICAgICAgIE5hbWU6IHByb3BzLmxvYWRCYWxhbmNlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRCYWxhbmNlciA9IHByb3BzLmxvYWRCYWxhbmNlcjtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ZW5lciA9IEFwcGxpY2F0aW9uTGlzdGVuZXIuZnJvbUxvb2t1cCh0aGlzLCBcIkxpc3RlbmVyXCIsIHtcbiAgICAgIGxvYWRCYWxhbmNlckFybjogbG9hZEJhbGFuY2VyLmxvYWRCYWxhbmNlckFybixcbiAgICAgIGxpc3RlbmVyUHJvdG9jb2w6IHByb3BzLmxpc3RlbmVyUHJvdG9jb2wgPz8gQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQU1xuICAgIH0pO1xuXG4gICAgbGlzdGVuZXIuYWRkVGFyZ2V0R3JvdXBzKGAke2lkfVRhcmdldEdyb3Vwc2AsIHtcbiAgICAgIHRhcmdldEdyb3VwczogW3RhcmdldEdyb3VwXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRhcmdldEdyb3VwQ29uZGl0aW9ucyxcbiAgICAgIHByaW9yaXR5OiBwcm9wcy50YXJnZXRHcm91cFByaW9yaXR5ID8/IDFcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5kb21haW5ab25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZG9tYWluTmFtZSA9IERvbWFpbk5hbWUuZnJvbUZxZG4ocHJvcHMuZG9tYWluTmFtZSwgcHJvcHMuZG9tYWluWm9uZSk7XG4gICAgICB0aGlzLnJvdXRlNTNSZWNvcmQgPSB0aGlzLmRvbWFpbk5hbWUuY3JlYXRlQVJlY29yZCh0aGlzLFxuICAgICAgICBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBMb2FkQmFsYW5jZXJUYXJnZXQobG9hZEJhbGFuY2VyKSkpO1xuICAgIH1cblxuICAgIHRoaXMubG9hZEJhbGFuY2VyID0gbG9hZEJhbGFuY2VyO1xuICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgfVxufVxuIl19