projen-cdktf-hybrid-construct 0.1.44 → 0.1.47

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+
3
+ ## 0.1.45
4
+
5
+ - _Breaking Change_: `terraformExamplesFolder`, `terraformProvider`, `terraformProvider*Config` are now part of `terraformExamples` and differently structured.
6
+ - Add documentation hook (using docker if `terraform-docs` is not enabled)
7
+ - Add terraform and construct example folders
8
+ - Add tests to the generated code
9
+ - Remove `pre-commit` hooks
package/README.md CHANGED
@@ -18,13 +18,43 @@ const { HybridModule } = require("projen-cdktf-hybrid-construct");
18
18
 
19
19
  const project = new HybridModule({
20
20
  defaultReleaseBranch: "main",
21
- name: "my-new-hybrid-construct",
21
+ // The name of the module & repository need to start with terraform-cdk-
22
+ name: "terraform-cdk-my-new-hybrid-construct",
23
+ repositoryUrl:
24
+ "github.com/DanielMSchmidt/terraform-cdk-my-new-hybrid-construct",
22
25
 
23
- // All options available in the Projen Typescript template
24
- // deps: [], /* Runtime dependencies of this module. */
25
- // description: undefined, /* The description is just a string that helps people understand the purpose of the package. */
26
- // devDeps: [], /* Build dependencies for this module. */
27
- // packageName: undefined, /* The "name" in package.json. */
26
+ author: "Daniel Schmidt",
27
+ authorAddress: "danielmschmidt92@gmail.com",
28
+
29
+ // If enabled an example folder with terraform code will be created
30
+ terraformExamples: {
31
+ enabled: true,
32
+ folder: "terraform",
33
+ // The configuration to add to the example terraform file
34
+ providerConfig: `
35
+ terraform {
36
+ required_providers {
37
+ aws = {
38
+ source = "hashicorp/aws"
39
+ version = "~> 3.74"
40
+ }
41
+ }
42
+ # Terraform binary version constraint
43
+ required_version = "~> 1.1.0"
44
+ }
45
+
46
+
47
+ provider "aws" {
48
+ region = "eu-central-1"
49
+ }
50
+ `,
51
+ },
52
+
53
+ // If enabled a constructs example folder will be created
54
+ constructExamples: {
55
+ enabled: true,
56
+ folder: "construct-examples",
57
+ },
28
58
  });
29
59
  project.synth();
30
60
  ```
@@ -35,7 +65,8 @@ project.synth();
35
65
  - [x] Add example folder
36
66
  - [x] Add `terraform` example folder
37
67
  - [x] [Auto-generate parts of the docs](https://github.com/terraform-aws-modules/terraform-aws-eks/blob/e90c877a741ab3cc4215376a70f7bcc360b6a3d2/.github/workflows/pre-commit.yml)
38
- - [ ] Add testing strategy
68
+ - [x] Add example folder to project using this
69
+ - [x] Add testing strategy
39
70
  - [ ] Add deployment scripts to Artifactory
40
71
  - [ ] Add deployment scripts to Github Packages
41
72
  - [ ] Add construct / option / docs to publish existing module as construct
@@ -12,7 +12,6 @@
12
12
  /.gitignore linguist-generated
13
13
  /.mergify.yml linguist-generated
14
14
  /.npmignore linguist-generated
15
- /.pre-commit-config.yaml linguist-generated
16
15
  /.prettierignore linguist-generated
17
16
  /.prettierrc.json linguist-generated
18
17
  /.projen/** linguist-generated
@@ -3,16 +3,35 @@ import { HybridModule } from "../lib";
3
3
  const project = new HybridModule({
4
4
  name: "my-module",
5
5
  author: "Daniel Schmidt",
6
- repository: "github.com/DanielMSchmidt/my-module",
7
6
  defaultReleaseBranch: "main",
8
7
  authorAddress: "danielmschmidt92@gmail.com",
9
8
  repositoryUrl: "github.com/DanielMSchmidt/my-module",
10
9
  outdir: ".",
11
- terraformExamplesFolder: "terraform",
12
- terraformProvider: "aws",
13
- terraformProviderAwsConfig: {
14
- region: "eu-central-1",
15
- requiredProviderVersion: "3.74",
10
+ terraformExamples: {
11
+ enabled: true,
12
+ folder: "terraform",
13
+ providerConfig: `
14
+ terraform {
15
+ # Limit provider version (some modules are not compatible with aws 4.x)
16
+ required_providers {
17
+ aws = {
18
+ source = "hashicorp/aws"
19
+ version = "~> 3.74"
20
+ }
21
+ }
22
+ # Terraform binary version constraint
23
+ required_version = "~> 1.1.0"
24
+ }
25
+
26
+
27
+ provider "aws" {
28
+ region = "eu-central-1"
29
+ }
30
+ `,
31
+ },
32
+ constructExamples: {
33
+ enabled: true,
34
+ folder: "construct-examples",
16
35
  },
17
36
  projectId: "my-project-id",
18
37
  });
@@ -0,0 +1,7 @@
1
+ # Construct Examples
2
+
3
+ Example use-cases for the Construct library.
4
+
5
+ - [Basic Usage](./basic.ts)
6
+
7
+ To ensure all examples are working, please make sure the [index.ts](./index.ts) file is importing all of them.
@@ -0,0 +1,14 @@
1
+ import { TerraformStack } from "cdktf";
2
+ import { Construct } from "constructs";
3
+
4
+ import { MyConstruct } from "../src/";
5
+
6
+ export class BasicExample extends TerraformStack {
7
+ constructor(scope: Construct, name: string) {
8
+ super(scope, name);
9
+
10
+ new MyConstruct(this, "my-construct", {
11
+ propertyA: "valueA",
12
+ });
13
+ }
14
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "language": "typescript",
3
+ "app": "npx ts-node index.ts",
4
+ "projectId": "my-project-id"
5
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": "0.9.4",
3
+ "stacks": {
4
+ "basic-example": {
5
+ "name": "basic-example",
6
+ "constructPath": "basic-example",
7
+ "workingDirectory": "stacks/basic-example",
8
+ "synthesizedStackPath": "stacks/basic-example/cdk.tf.json",
9
+ "annotations": [],
10
+ "dependencies": []
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "//": {
3
+ "metadata": {
4
+ "backend": "local",
5
+ "stackName": "basic-example",
6
+ "version": "0.9.4"
7
+ },
8
+ "outputs": {
9
+ }
10
+ },
11
+ "terraform": {
12
+ "backend": {
13
+ "local": {
14
+ "path": "/home/runner/work/projen-cdktf-hybrid-construct/projen-cdktf-hybrid-construct/example/construct-examples/terraform.basic-example.tfstate"
15
+ }
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,11 @@
1
+ // This file will be synthesized to check if all examples are working
2
+
3
+ import { App } from "cdktf";
4
+ // All examples need to be imported here
5
+ import { BasicExample } from "./basic";
6
+
7
+ const app = new App();
8
+
9
+ // All examples need to be initialized here
10
+ new BasicExample(app, "basic-example");
11
+ app.synth();
@@ -0,0 +1 @@
1
+ import "cdktf/lib/testing/adapters/jest";
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cdktf_1 = require("cdktf");
4
+ require("cdktf/lib/testing/adapters/jest");
5
+ const __1 = require("../");
6
+ // To learn more about testing see cdk.tf/testing
7
+ describe("MyConstruct", () => {
8
+ it("should synthesize", () => {
9
+ expect(cdktf_1.Testing.synthScope((scope) => {
10
+ new __1.MyConstruct(scope, "my-construct", {
11
+ propertyA: "valueA",
12
+ });
13
+ })).toMatchSnapshot();
14
+ });
15
+ });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgtdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFnQztBQUNoQywyQ0FBeUM7QUFDekMsMkJBQWtDO0FBRWxDLGlEQUFpRDtBQUNqRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixFQUFFLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1FBQzNCLE1BQU0sQ0FDSixlQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxlQUFXLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDckMsU0FBUyxFQUFFLFFBQVE7YUFDcEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdGluZyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuaW1wb3J0IHsgTXlDb25zdHJ1Y3QgfSBmcm9tIFwiLi4vXCI7XG5cbi8vIFRvIGxlYXJuIG1vcmUgYWJvdXQgdGVzdGluZyBzZWUgY2RrLnRmL3Rlc3RpbmdcbmRlc2NyaWJlKFwiTXlDb25zdHJ1Y3RcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBzeW50aGVzaXplXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBUZXN0aW5nLnN5bnRoU2NvcGUoKHNjb3BlKSA9PiB7XG4gICAgICAgIG5ldyBNeUNvbnN0cnVjdChzY29wZSwgXCJteS1jb25zdHJ1Y3RcIiwge1xuICAgICAgICAgIHByb3BlcnR5QTogXCJ2YWx1ZUFcIixcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0pO1xufSk7Il19
@@ -7,4 +7,29 @@ module "eks_managed_node_group" {
7
7
  source = "DanielMSchmidt/my-module//modules/my-awesome-module"
8
8
 
9
9
  }
10
- ```
10
+ ```
11
+ <!-- BEGIN_TF_DOCS -->
12
+ ## Requirements
13
+
14
+ No requirements.
15
+
16
+ ## Providers
17
+
18
+ No providers.
19
+
20
+ ## Modules
21
+
22
+ No modules.
23
+
24
+ ## Resources
25
+
26
+ No resources.
27
+
28
+ ## Inputs
29
+
30
+ No inputs.
31
+
32
+ ## Outputs
33
+
34
+ No outputs.
35
+ <!-- END_TF_DOCS -->
@@ -20,7 +20,6 @@
20
20
  "post-compile": "npx projen post-compile",
21
21
  "post-upgrade": "npx projen post-upgrade",
22
22
  "pre-compile": "npx projen pre-compile",
23
- "precommit": "npx projen precommit",
24
23
  "release": "npx projen release",
25
24
  "test": "npx projen test",
26
25
  "test:update": "npx projen test:update",
@@ -38,4 +38,11 @@ for d in */ ; do
38
38
  mkdir -p "$TARGET_FOLDER/$dirname"
39
39
  cp "$MODULES_FOLDER/$dirname/cdk.tf.json" "$TARGET_FOLDER/$dirname/cdk.tf.json"
40
40
  cp "$SRC_FOLDER/$dirname.md" "$TARGET_FOLDER/$dirname/README.md"
41
+
42
+ # Add README hcl docs
43
+ if which terraform-docs >/dev/null; then
44
+ terraform-docs markdown table --output-file "$TARGET_FOLDER/$dirname/README.md" "$TARGET_FOLDER/$dirname"
45
+ else
46
+ docker run --rm --volume "$SCRIPTPATH/../modules:/terraform-docs" -u $(id -u) quay.io/terraform-docs/terraform-docs:0.16.0 markdown table --output-file "/terraform-docs/$dirname/README.md" /terraform-docs/$dirname
47
+ fi
41
48
  done
package/lib/index.d.ts CHANGED
@@ -1,29 +1,17 @@
1
1
  import { ConstructLibrary, ConstructLibraryOptions } from "projen/lib/cdk";
2
- declare type TerraformProviderAwsConfig = {
3
- region: string;
4
- requiredProviderVersion: string;
5
- };
6
- declare type TerraformProviderAzureConfig = {
7
- location: string;
8
- requiredProviderVersion: string;
9
- resourceGroupName: string;
10
- };
11
2
  declare type HybridModuleOptions = ConstructLibraryOptions & {
12
3
  cdktfVersion?: string;
13
4
  constructVersion?: string;
14
- repository: string;
15
5
  author: string;
16
- terraformExamplesFolder: string;
17
- terraformProvider: string;
18
- terraformProviderAwsConfig?: TerraformProviderAwsConfig;
19
- terraformProviderAzureConfig?: TerraformProviderAzureConfig;
20
- documentationPrecommitHook?: boolean;
21
- documentationPrecommitHookOptions?: {
22
- version?: string;
23
- disableFormatHook?: boolean;
24
- disableDocsHook?: boolean;
6
+ terraformExamples?: {
7
+ enabled: boolean;
8
+ folder?: string;
9
+ providerConfig?: string;
10
+ };
11
+ constructExamples?: {
12
+ enabled: boolean;
13
+ folder?: string;
25
14
  };
26
- additionalPrecommitHooks?: Record<string, any>[];
27
15
  projectId?: string;
28
16
  };
29
17
  export declare class HybridModule extends ConstructLibrary {
package/lib/index.js CHANGED
@@ -21,6 +21,25 @@ export class MyConstruct extends Construct {
21
21
  super(scope, id);
22
22
  }
23
23
  }
24
+ `;
25
+ const constructTestCode = `
26
+ import { Testing } from "cdktf";
27
+ import "cdktf/lib/testing/adapters/jest";
28
+ import { MyConstruct } from "../";
29
+
30
+ // To learn more about testing see cdk.tf/testing
31
+ describe("MyConstruct", () => {
32
+ it("should synthesize", () => {
33
+ expect(
34
+ Testing.synthScope((scope) => {
35
+ new MyConstruct(scope, "my-construct", {
36
+ propertyA: "valueA",
37
+ });
38
+ })
39
+ ).toMatchSnapshot();
40
+ });
41
+ });
42
+
24
43
  `;
25
44
  const moduleSrcCode = `
26
45
  import { App } from "cdktf";
@@ -45,54 +64,6 @@ const app = new App();
45
64
  new MyAwesomeModule(app, "my-awesome-module");
46
65
  app.synth();
47
66
  `;
48
- const terraformAwsMainSrcCode = `
49
- terraform {
50
- # Limit provider version (some modules are not compatible with aws 4.x)
51
- required_providers {
52
- aws = {
53
- source = "hashicorp/aws"
54
- version = "~> __requiredProviderVersion__"
55
- }
56
- }
57
- # Terraform binary version constraint
58
- required_version = "~> 1.1.0"
59
- }
60
-
61
-
62
- provider "aws" {
63
- region = "__region__"
64
- }
65
- `;
66
- const terraformAzureMainSrcCode = `
67
- # Configure the Azure provider
68
- terraform {
69
- required_providers {
70
- azurerm = {
71
- source = "hashicorp/azurerm"
72
- version = "~> __requiredProviderVersion__"
73
- }
74
- }
75
-
76
- required_version = ">= 1.1.0"
77
- }
78
-
79
- provider "azurerm" {
80
- features {}
81
- }
82
-
83
- resource "azurerm_resource_group" "rg" {
84
- name = "__resourceGroupName__"
85
- location = "__location__"
86
- }
87
- `;
88
- const terraformMainSrcCodeMap = {
89
- aws: {
90
- srcCode: terraformAwsMainSrcCode,
91
- },
92
- azure: {
93
- srcCode: terraformAzureMainSrcCode,
94
- },
95
- };
96
67
  const terraformReadmeDocs = `
97
68
  # Please add here some pure HCL tests for your modules in order to test HCL Interoperability
98
69
 
@@ -124,20 +95,7 @@ class HybridModule extends cdk_1.ConstructLibrary {
124
95
  eslintOptions: Object.assign({}, config.eslintOptions, {
125
96
  lintProjenRc: false,
126
97
  }),
127
- postBuildSteps: config.documentationPrecommitHook !== false
128
- ? [
129
- {
130
- id: "install-pre-commit",
131
- name: "Install pre-commit hook",
132
- run: "pip install pre-commit",
133
- },
134
- {
135
- id: "documentation-precommit-hook",
136
- name: "Documentation Pre-commit Hook",
137
- run: "pre-commit run --all-files",
138
- },
139
- ]
140
- : [],
98
+ postBuildSteps: [],
141
99
  });
142
100
  const constructVersion = config.constructVersion || "^10.0.25";
143
101
  const cdktfVersion = config.cdktfVersion || "^0.9.4";
@@ -154,7 +112,7 @@ class HybridModule extends cdk_1.ConstructLibrary {
154
112
 
155
113
  \`\`\`hcl
156
114
  module "eks_managed_node_group" {
157
- source = "${((_a = config.repository) === null || _a === void 0 ? void 0 : _a.replace("https://github.com/", "").replace("http://github.com/", "").replace("github.com/", "")) || "my-github-repo"}//modules/my-awesome-module"
115
+ source = "${((_a = config.repositoryUrl) === null || _a === void 0 ? void 0 : _a.replace("https://github.com/", "").replace("http://github.com/", "").replace("github.com/", "")) || "my-github-repo"}//modules/my-awesome-module"
158
116
 
159
117
  }
160
118
  \`\`\`
@@ -172,35 +130,101 @@ module "eks_managed_node_group" {
172
130
  output: "modules",
173
131
  projectId: config.projectId || (0, uuid_1.v4)(),
174
132
  }, null, 2),
133
+ "__tests__/index-test.ts": constructTestCode.trim(),
175
134
  },
176
135
  });
177
- // Retrieve correct TF main stuff
178
- let mainTfFile = terraformMainSrcCodeMap[config.terraformProvider].srcCode.trim();
179
- let configProperty = {};
180
- switch (config.terraformProvider) {
181
- case "aws": {
182
- configProperty = config.terraformProviderAwsConfig;
183
- break;
184
- }
185
- case "azure": {
186
- configProperty = config.terraformProviderAzureConfig;
187
- break;
188
- }
189
- default: {
190
- throw new Error("Need to define correctly a Provider, only [aws,azure,gcp] allowed");
191
- }
136
+ if (config.terraformExamples && config.terraformExamples.enabled) {
137
+ const providerConfig = config.terraformExamples.providerConfig ||
138
+ `
139
+ terraform {
140
+ # Terraform binary version constraint
141
+ required_version = "~> 1.1.0"
142
+
143
+ # Define all needed providers here, you can find all available providers here:
144
+ # https://registry.terraform.io/
145
+ required_providers {}
146
+ }
147
+
148
+ # Initialize your provider here
149
+
150
+ `.trim();
151
+ const examplesFolder = config.terraformExamples.folder || "terraform-examples";
152
+ new projen_1.SampleDir(this, examplesFolder, {
153
+ files: {
154
+ "main.tf": `
155
+ # Configure Terraform
156
+ ${providerConfig}
157
+
158
+ `.trimStart(),
159
+ "README.md": terraformReadmeDocs.trim(),
160
+ },
161
+ });
162
+ this.gitignore.addPatterns(`${examplesFolder}/.terraform`, `${examplesFolder}/.terraform.lock.hcl`);
163
+ }
164
+ if (config.constructExamples && config.constructExamples.enabled) {
165
+ const constructExampleFolder = config.constructExamples.folder || "construct-examples";
166
+ const levels = constructExampleFolder
167
+ .split("/")
168
+ .map(() => "..")
169
+ .join("/");
170
+ const constructReadmeDocs = `
171
+ # Construct Examples
172
+
173
+ Example use-cases for the Construct library.
174
+
175
+ - [Basic Usage](./basic.ts)
176
+
177
+ To ensure all examples are working, please make sure the [index.ts](./index.ts) file is importing all of them.
178
+ `;
179
+ const constructExampleCode = `
180
+ import { TerraformStack } from "cdktf";
181
+ import { Construct } from "constructs";
182
+
183
+ import { MyConstruct } from "${levels}/src/";
184
+
185
+ export class BasicExample extends TerraformStack {
186
+ constructor(scope: Construct, name: string) {
187
+ super(scope, name);
188
+
189
+ new MyConstruct(this, "my-construct", {
190
+ propertyA: "valueA",
191
+ });
192
+ }
193
+ }
194
+
195
+
196
+ `;
197
+ const exampleCollectionCode = `
198
+ // This file will be synthesized to check if all examples are working
199
+
200
+ import { App } from "cdktf";
201
+ // All examples need to be imported here
202
+ import { BasicExample } from "./basic";
203
+
204
+ const app = new App();
205
+
206
+ // All examples need to be initialized here
207
+ new BasicExample(app, "basic-example");
208
+ app.synth();
209
+ `;
210
+ new projen_1.SampleDir(this, constructExampleFolder, {
211
+ files: {
212
+ "index.ts": exampleCollectionCode.trim(),
213
+ "basic.ts": constructExampleCode.trim(),
214
+ "cdktf.json": JSON.stringify({
215
+ language: "typescript",
216
+ app: "npx ts-node index.ts",
217
+ projectId: config.projectId || (0, uuid_1.v4)(),
218
+ }, null, 2),
219
+ "README.md": constructReadmeDocs.trim(),
220
+ },
221
+ });
222
+ this.testTask.exec(`cdktf synth`, {
223
+ cwd: constructExampleFolder,
224
+ });
225
+ this.gitignore.addPatterns(`${constructExampleFolder}/cdktf.out`);
192
226
  }
193
- Object.keys(configProperty).forEach((key) => {
194
- mainTfFile = mainTfFile.replace(`__${key}__`, configProperty[key]);
195
- });
196
- new projen_1.SampleDir(this, config.terraformExamplesFolder, {
197
- files: {
198
- "main.tf": mainTfFile,
199
- "README.md": terraformReadmeDocs.trim(),
200
- },
201
- });
202
227
  this.gitignore.addPatterns("src/.gen", "src/cdktf.out", "src/modules");
203
- this.gitignore.addPatterns(`${config.terraformExamplesFolder}/.terraform`, `${config.terraformExamplesFolder}/.terraform.lock.hcl`);
204
228
  this.compileTask.prependExec("cdktf get", {
205
229
  cwd: this.srcdir,
206
230
  });
@@ -249,6 +273,13 @@ for d in */ ; do
249
273
  mkdir -p "$TARGET_FOLDER/$dirname"
250
274
  cp "$MODULES_FOLDER/$dirname/cdk.tf.json" "$TARGET_FOLDER/$dirname/cdk.tf.json"
251
275
  cp "$SRC_FOLDER/$dirname.md" "$TARGET_FOLDER/$dirname/README.md"
276
+
277
+ # Add README hcl docs
278
+ if which terraform-docs >/dev/null; then
279
+ terraform-docs markdown table --output-file "$TARGET_FOLDER/$dirname/README.md" "$TARGET_FOLDER/$dirname"
280
+ else
281
+ docker run --rm --volume "$SCRIPTPATH/../modules:/terraform-docs" -u $(id -u) quay.io/terraform-docs/terraform-docs:0.16.0 markdown table --output-file "/terraform-docs/$dirname/README.md" /terraform-docs/$dirname
282
+ fi
252
283
  done
253
284
  `.trim());
254
285
  this.compileTask.exec("./scripts/copy-modules.sh", {
@@ -268,32 +299,7 @@ terraform -chdir=terraform plan
268
299
  `);
269
300
  this.testTask.exec("./scripts/tf-module-test.sh");
270
301
  (_c = this.jest) === null || _c === void 0 ? void 0 : _c.addIgnorePattern("terraform");
271
- // Pre-commit hooks
272
- if (config.documentationPrecommitHook !== false) {
273
- const { additionalPrecommitHooks, documentationPrecommitHookOptions } = config;
274
- const { version = "v1.70.1", disableDocsHook = false, disableFormatHook = false, } = documentationPrecommitHookOptions || {};
275
- new projen_1.YamlFile(this, ".pre-commit-config.yaml", {
276
- committed: true,
277
- obj: {
278
- repos: [
279
- {
280
- repo: "https://github.com/antonbabenko/pre-commit-terraform",
281
- rev: version,
282
- hooks: [
283
- disableFormatHook ? null : { id: "terraform_fmt" },
284
- disableDocsHook ? null : { id: "terraform_docs" },
285
- ].filter((item) => item !== null),
286
- },
287
- ...(additionalPrecommitHooks !== null && additionalPrecommitHooks !== void 0 ? additionalPrecommitHooks : []),
288
- ],
289
- },
290
- });
291
- this.tasks.addTask("precommit", {
292
- description: "Runs precommit hooks",
293
- exec: "pre-commit install",
294
- });
295
- }
296
302
  }
297
303
  }
298
304
  exports.HybridModule = HybridModule;
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTJFO0FBQzNFLHdDQUEyRTtBQUMzRSwrQkFBa0M7QUFrQ2xDLE1BQU0sUUFBUSxHQUFHO0lBQ2YsUUFBUSxFQUFFLElBQUk7SUFDZCxVQUFVLEVBQUUsSUFBSTtJQUNoQixvQkFBb0IsRUFBRSxNQUFNO0NBQzdCLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHOzs7Ozs7Ozs7Ozs7Q0FZeEIsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0JyQixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQi9CLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxQmpDLENBQUM7QUFFRixNQUFNLHVCQUF1QixHQUEyQztJQUN0RSxHQUFHLEVBQUU7UUFDSCxPQUFPLEVBQUUsdUJBQXVCO0tBQ2pDO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLHlCQUF5QjtLQUNuQztDQUNGLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHOzs7Ozs7Ozs7S0FTdkIsQ0FBQztBQUVOLE1BQU0sVUFBVyxTQUFRLGlCQUFRO0lBQy9CLFlBQVksT0FBZ0IsRUFBRSxJQUFZLEVBQVUsT0FBZTtRQUNqRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtZQUNuQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFIK0MsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUluRSxDQUFDO0lBRVMsaUJBQWlCLENBQUMsQ0FBWTtRQUN0QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBRUQsTUFBYSxZQUFhLFNBQVEsc0JBQWdCO0lBQ2hELFlBQVksTUFBMkI7O1FBQ3JDLEtBQUssQ0FB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QUFLLElBQUksQ0FBQzt5QkFDbEM7d0JBQ0QsR0FBRyxDQUFDLHdCQUF3QixhQUF4Qix3QkFBd0IsY0FBeEIsd0JBQXdCLEdBQUksRUFBRSxDQUFDO3FCQUNwQztpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDOUIsV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkMsSUFBSSxFQUFFLG9CQUFvQjthQUMzQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7Q0FDRjtBQS9ORCxvQ0ErTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWxlQmFzZSwgSVJlc29sdmVyLCBQcm9qZWN0LCBTYW1wbGVEaXIsIFlhbWxGaWxlIH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgQ29uc3RydWN0TGlicmFyeSwgQ29uc3RydWN0TGlicmFyeU9wdGlvbnMgfSBmcm9tIFwicHJvamVuL2xpYi9jZGtcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuXG50eXBlIFRlcnJhZm9ybVByb3ZpZGVyQXdzQ29uZmlnID0ge1xuICByZWdpb246IHN0cmluZztcbiAgcmVxdWlyZWRQcm92aWRlclZlcnNpb246IHN0cmluZztcbn07XG5cbnR5cGUgVGVycmFmb3JtUHJvdmlkZXJBenVyZUNvbmZpZyA9IHtcbiAgbG9jYXRpb246IHN0cmluZztcbiAgcmVxdWlyZWRQcm92aWRlclZlcnNpb246IHN0cmluZztcbiAgcmVzb3VyY2VHcm91cE5hbWU6IHN0cmluZztcbn07XG5cbnR5cGUgSHlicmlkTW9kdWxlT3B0aW9ucyA9IENvbnN0cnVjdExpYnJhcnlPcHRpb25zICYge1xuICBjZGt0ZlZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnN0cnVjdFZlcnNpb24/OiBzdHJpbmc7XG4gIHJlcG9zaXRvcnk6IHN0cmluZztcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIHRlcnJhZm9ybUV4YW1wbGVzRm9sZGVyOiBzdHJpbmc7XG4gIHRlcnJhZm9ybVByb3ZpZGVyOiBzdHJpbmc7XG4gIHRlcnJhZm9ybVByb3ZpZGVyQXdzQ29uZmlnPzogVGVycmFmb3JtUHJvdmlkZXJBd3NDb25maWc7XG4gIHRlcnJhZm9ybVByb3ZpZGVyQXp1cmVDb25maWc/OiBUZXJyYWZvcm1Qcm92aWRlckF6dXJlQ29uZmlnO1xuICAvLyBSdW4gcHJlLWNvbW1pdCBob29rcyB1c2luZyBsb2NhbCBiaW5hcmllcyAvIG5vdCBhdCBhbGxcbiAgZG9jdW1lbnRhdGlvblByZWNvbW1pdEhvb2s/OiBib29sZWFuO1xuICBkb2N1bWVudGF0aW9uUHJlY29tbWl0SG9va09wdGlvbnM/OiB7XG4gICAgdmVyc2lvbj86IHN0cmluZzsgLy8gR2V0IHRoZSBsYXRlc3QgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2FudG9uYmFiZW5rby9wcmUtY29tbWl0LXRlcnJhZm9ybS9yZWxlYXNlc1xuICAgIGRpc2FibGVGb3JtYXRIb29rPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlRG9jc0hvb2s/OiBib29sZWFuO1xuICB9O1xuICBhZGRpdGlvbmFsUHJlY29tbWl0SG9va3M/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gIC8vIERlZmF1bHRlZCB0byBhIHV1aWQgc3RyaW5nIGFzIGNka3RmIHdvdWxkXG4gIHByb2plY3RJZD86IHN0cmluZztcbn07XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICBwcmV0dGllcjogdHJ1ZSxcbiAgcHJvamVucmNUczogdHJ1ZSxcbiAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IFwibWFpblwiLFxufTtcblxuY29uc3QgY29uc3RydWN0U3JjQ29kZSA9IGBcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlDb25zdHJ1Y3RPcHRpb25zIHtcbiAgcmVhZG9ubHkgcHJvcGVydHlBOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNeUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHB1YmxpYyBjb25maWc6IE15Q29uc3RydWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gIH1cbn1cbmA7XG5cbmNvbnN0IG1vZHVsZVNyY0NvZGUgPSBgXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBURk1vZHVsZVN0YWNrIH0gZnJvbSBcImNka3RmLXRmLW1vZHVsZS1zdGFja1wiO1xuaW1wb3J0IHsgTXlDb25zdHJ1Y3QgfSBmcm9tIFwiLi9pbmRleFwiO1xuXG5jbGFzcyBNeUF3ZXNvbWVNb2R1bGUgZXh0ZW5kcyBURk1vZHVsZVN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgTXlDb25zdHJ1Y3QodGhpcywgXCJteS1jb25zdHJ1Y3RcIiwge1xuICAgICAgcHJvcGVydHlBOiBcInZhbHVlQVwiLFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbi8vIFRoaXMgaXMgdGhlIG5hbWUgdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQgdW5kZXIuIFxuLy8gV2UgZXhwZWN0IGEgXCJteS1hd2Vzb21lLW1vZHVsZS5tZFwiIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBUaGUgUkVBRE1FLm1kIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbSB0aGlzIGZpbGUuXG5uZXcgTXlBd2Vzb21lTW9kdWxlKGFwcCwgXCJteS1hd2Vzb21lLW1vZHVsZVwiKTtcbmFwcC5zeW50aCgpO1xuYDtcblxuY29uc3QgdGVycmFmb3JtQXdzTWFpblNyY0NvZGUgPSBgXG50ZXJyYWZvcm0ge1xuICAjIExpbWl0IHByb3ZpZGVyIHZlcnNpb24gKHNvbWUgbW9kdWxlcyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBhd3MgNC54KVxuICByZXF1aXJlZF9wcm92aWRlcnMge1xuICAgIGF3cyA9IHtcbiAgICAgIHNvdXJjZSAgPSBcImhhc2hpY29ycC9hd3NcIlxuICAgICAgdmVyc2lvbiA9IFwifj4gX19yZXF1aXJlZFByb3ZpZGVyVmVyc2lvbl9fXCJcbiAgICB9XG4gIH1cbiAgIyBUZXJyYWZvcm0gYmluYXJ5IHZlcnNpb24gY29uc3RyYWludFxuICByZXF1aXJlZF92ZXJzaW9uID0gXCJ+PiAxLjEuMFwiXG59XG5cblxucHJvdmlkZXIgXCJhd3NcIiB7XG4gIHJlZ2lvbiA9IFwiX19yZWdpb25fX1wiXG59XG5gO1xuXG5jb25zdCB0ZXJyYWZvcm1BenVyZU1haW5TcmNDb2RlID0gYFxuIyBDb25maWd1cmUgdGhlIEF6dXJlIHByb3ZpZGVyXG50ZXJyYWZvcm0ge1xuICByZXF1aXJlZF9wcm92aWRlcnMge1xuICAgIGF6dXJlcm0gPSB7XG4gICAgICBzb3VyY2UgID0gXCJoYXNoaWNvcnAvYXp1cmVybVwiXG4gICAgICB2ZXJzaW9uID0gXCJ+PiBfX3JlcXVpcmVkUHJvdmlkZXJWZXJzaW9uX19cIlxuICAgIH1cbiAgfVxuXG4gIHJlcXVpcmVkX3ZlcnNpb24gPSBcIj49IDEuMS4wXCJcbn1cblxucHJvdmlkZXIgXCJhenVyZXJtXCIge1xuICBmZWF0dXJlcyB7fVxufVxuXG5yZXNvdXJjZSBcImF6dXJlcm1fcmVzb3VyY2VfZ3JvdXBcIiBcInJnXCIge1xuICBuYW1lICAgICA9IFwiX19yZXNvdXJjZUdyb3VwTmFtZV9fXCJcbiAgbG9jYXRpb24gPSBcIl9fbG9jYXRpb25fX1wiXG59XG5gO1xuXG5jb25zdCB0ZXJyYWZvcm1NYWluU3JjQ29kZU1hcDogeyBba2V5OiBzdHJpbmddOiB7IHNyY0NvZGU6IHN0cmluZyB9IH0gPSB7XG4gIGF3czoge1xuICAgIHNyY0NvZGU6IHRlcnJhZm9ybUF3c01haW5TcmNDb2RlLFxuICB9LFxuICBhenVyZToge1xuICAgIHNyY0NvZGU6IHRlcnJhZm9ybUF6dXJlTWFpblNyY0NvZGUsXG4gIH0sXG59O1xuXG5jb25zdCB0ZXJyYWZvcm1SZWFkbWVEb2NzID0gYFxuIyBQbGVhc2UgYWRkIGhlcmUgc29tZSBwdXJlIEhDTCB0ZXN0cyBmb3IgeW91ciBtb2R1bGVzIGluIG9yZGVyIHRvIHRlc3QgSENMIEludGVyb3BlcmFiaWxpdHlcblxuRXhhbXBsZXM6XG5cbm1vZHVsZSBcIm15X2F3ZXNvbWVfdGVzdFwiIHtcbiAgc291cmNlID0gXCIuLi9tb2R1bGVzL215LWF3ZXNvbWUtbW9kdWxlc1wiXG4gIC4uLnZhcmlhYmxlcy4uLlxufVxuICAgIGA7XG5cbmNsYXNzIFNjcmlwdEZpbGUgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIHBhdGg6IHN0cmluZywgcHJpdmF0ZSBjb250ZW50OiBzdHJpbmcpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBwYXRoLCB7XG4gICAgICBleGVjdXRhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVDb250ZW50KF86IElSZXNvbHZlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHlicmlkTW9kdWxlIGV4dGVuZHMgQ29uc3RydWN0TGlicmFyeSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSHlicmlkTW9kdWxlT3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLmRlZmF1bHRzLFxuICAgICAgLi4uY29uZmlnLFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICBlc2xpbnRPcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBjb25maWcuZXNsaW50T3B0aW9ucywge1xuICAgICAgICBsaW50UHJvamVuUmM6IGZhbHNlLFxuICAgICAgfSksXG4gICAgICBwb3N0QnVpbGRTdGVwczpcbiAgICAgICAgY29uZmlnLmRvY3VtZW50YXRpb25QcmVjb21taXRIb29rICE9PSBmYWxzZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiaW5zdGFsbC1wcmUtY29tbWl0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsIHByZS1jb21taXQgaG9va1wiLFxuICAgICAgICAgICAgICAgIHJ1bjogXCJwaXAgaW5zdGFsbCBwcmUtY29tbWl0XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogXCJkb2N1bWVudGF0aW9uLXByZWNvbW1pdC1ob29rXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJEb2N1bWVudGF0aW9uIFByZS1jb21taXQgSG9va1wiLFxuICAgICAgICAgICAgICAgIHJ1bjogXCJwcmUtY29tbWl0IHJ1biAtLWFsbC1maWxlc1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10sXG4gICAgfSk7XG4gICAgY29uc3QgY29uc3RydWN0VmVyc2lvbiA9IGNvbmZpZy5jb25zdHJ1Y3RWZXJzaW9uIHx8IFwiXjEwLjAuMjVcIjtcbiAgICBjb25zdCBjZGt0ZlZlcnNpb24gPSBjb25maWcuY2RrdGZWZXJzaW9uIHx8IFwiXjAuOS40XCI7XG5cbiAgICB0aGlzLmFkZFBlZXJEZXBzKGBjb25zdHJ1Y3RzQCR7Y29uc3RydWN0VmVyc2lvbn1gLCBgY2RrdGZAJHtjZGt0ZlZlcnNpb259YCk7XG4gICAgdGhpcy5hZGREZXZEZXBzKGBjZGt0Zi1jbGlAJHtjZGt0ZlZlcnNpb259YCwgXCJ0cy1ub2RlXCIpO1xuICAgIHRoaXMuYWRkS2V5d29yZHMoXCJjZGt0ZlwiLCBcImNka3RmLWh5YnJpZFwiKTtcbiAgICB0aGlzLnNldFNjcmlwdChcInRlcnJhZm9ybTp0ZXN0XCIsIFwiLi9zY3JpcHRzL3RmLW1vZHVsZS10ZXN0LnNoXCIpO1xuXG4gICAgLy8gTW9kdWxlIEVudHJ5cG9pbnRcbiAgICB0aGlzLmFkZERlcHMoXCJjZGt0Zi10Zi1tb2R1bGUtc3RhY2tcIik7XG4gICAgY29uc3QgbW9kdWxlRG9jcyA9IGBcbiMgTXkgQXdlc29tZSBNb2R1bGVcblxuIyMgVXNhZ2VcblxuXFxgXFxgXFxgaGNsXG5tb2R1bGUgXCJla3NfbWFuYWdlZF9ub2RlX2dyb3VwXCIge1xuICBzb3VyY2UgPSBcIiR7XG4gICAgY29uZmlnLnJlcG9zaXRvcnlcbiAgICAgID8ucmVwbGFjZShcImh0dHBzOi8vZ2l0aHViLmNvbS9cIiwgXCJcIilcbiAgICAgIC5yZXBsYWNlKFwiaHR0cDovL2dpdGh1Yi5jb20vXCIsIFwiXCIpXG4gICAgICAucmVwbGFjZShcImdpdGh1Yi5jb20vXCIsIFwiXCIpIHx8IFwibXktZ2l0aHViLXJlcG9cIlxuICB9Ly9tb2R1bGVzL215LWF3ZXNvbWUtbW9kdWxlXCJcblxufVxuXFxgXFxgXFxgXG4gICAgYDtcblxuICAgIG5ldyBTYW1wbGVEaXIodGhpcywgdGhpcy5zcmNkaXIsIHtcbiAgICAgIGZpbGVzOiB7XG4gICAgICAgIFwiaW5kZXgudHNcIjogY29uc3RydWN0U3JjQ29kZS50cmltKCksXG4gICAgICAgIFwidGZNb2R1bGVzLnRzXCI6IG1vZHVsZVNyY0NvZGUudHJpbSgpLFxuICAgICAgICBcIm15LWF3ZXNvbWUtbW9kdWxlLm1kXCI6IG1vZHVsZURvY3MudHJpbSgpLFxuICAgICAgICBcImNka3RmLmpzb25cIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFuZ3VhZ2U6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgICAgICAgYXBwOiBcIm5weCB0cy1ub2RlIHRmTW9kdWxlcy50c1wiLFxuICAgICAgICAgICAgdGVycmFmb3JtUHJvdmlkZXJzOiBbXCJoYXNoaWNvcnAvbnVsbEAzLjEuMVwiXSwgLy8gV2UgbmVlZCBhdCBsZWFzdCBhIHByb3ZpZGVyIGZvciBnZXQgdG8gc3VjY2VlZFxuICAgICAgICAgICAgdGVycmFmb3JtTW9kdWxlczogW10sXG4gICAgICAgICAgICBvdXRwdXQ6IFwibW9kdWxlc1wiLFxuICAgICAgICAgICAgcHJvamVjdElkOiBjb25maWcucHJvamVjdElkIHx8IHV1aWQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMlxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFJldHJpZXZlIGNvcnJlY3QgVEYgbWFpbiBzdHVmZlxuICAgIGxldCBtYWluVGZGaWxlID1cbiAgICAgIHRlcnJhZm9ybU1haW5TcmNDb2RlTWFwW2NvbmZpZy50ZXJyYWZvcm1Qcm92aWRlcl0uc3JjQ29kZS50cmltKCk7XG5cbiAgICBsZXQgY29uZmlnUHJvcGVydHk6IGFueSA9IHt9O1xuICAgIHN3aXRjaCAoY29uZmlnLnRlcnJhZm9ybVByb3ZpZGVyKSB7XG4gICAgICBjYXNlIFwiYXdzXCI6IHtcbiAgICAgICAgY29uZmlnUHJvcGVydHkgPSBjb25maWcudGVycmFmb3JtUHJvdmlkZXJBd3NDb25maWc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImF6dXJlXCI6IHtcbiAgICAgICAgY29uZmlnUHJvcGVydHkgPSBjb25maWcudGVycmFmb3JtUHJvdmlkZXJBenVyZUNvbmZpZztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk5lZWQgdG8gZGVmaW5lIGNvcnJlY3RseSBhIFByb3ZpZGVyLCBvbmx5IFthd3MsYXp1cmUsZ2NwXSBhbGxvd2VkXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhjb25maWdQcm9wZXJ0eSkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIG1haW5UZkZpbGUgPSBtYWluVGZGaWxlLnJlcGxhY2UoYF9fJHtrZXl9X19gLCBjb25maWdQcm9wZXJ0eVtrZXldKTtcbiAgICB9KTtcblxuICAgIG5ldyBTYW1wbGVEaXIodGhpcywgY29uZmlnLnRlcnJhZm9ybUV4YW1wbGVzRm9sZGVyLCB7XG4gICAgICBmaWxlczoge1xuICAgICAgICBcIm1haW4udGZcIjogbWFpblRmRmlsZSxcbiAgICAgICAgXCJSRUFETUUubWRcIjogdGVycmFmb3JtUmVhZG1lRG9jcy50cmltKCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5naXRpZ25vcmUuYWRkUGF0dGVybnMoXCJzcmMvLmdlblwiLCBcInNyYy9jZGt0Zi5vdXRcIiwgXCJzcmMvbW9kdWxlc1wiKTtcbiAgICB0aGlzLmdpdGlnbm9yZS5hZGRQYXR0ZXJucyhcbiAgICAgIGAke2NvbmZpZy50ZXJyYWZvcm1FeGFtcGxlc0ZvbGRlcn0vLnRlcnJhZm9ybWAsXG4gICAgICBgJHtjb25maWcudGVycmFmb3JtRXhhbXBsZXNGb2xkZXJ9Ly50ZXJyYWZvcm0ubG9jay5oY2xgXG4gICAgKTtcbiAgICB0aGlzLmNvbXBpbGVUYXNrLnByZXBlbmRFeGVjKFwiY2RrdGYgZ2V0XCIsIHtcbiAgICAgIGN3ZDogdGhpcy5zcmNkaXIsXG4gICAgfSk7XG4gICAgdGhpcy5jb21waWxlVGFzay5leGVjKFwiY2RrdGYgc3ludGhcIiwge1xuICAgICAgY3dkOiB0aGlzLnNyY2RpcixcbiAgICAgIG5hbWU6IFwiU3ludGhlc2l6ZSBtb2R1bGUgSENMXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgU2NyaXB0RmlsZShcbiAgICAgIHRoaXMsXG4gICAgICBcInNjcmlwdHMvY29weS1tb2R1bGVzLnNoXCIsXG4gICAgICBgXG4jIS9iaW4vYmFzaFxuIyBUaGlzIHNjcmlwdCBpcyBjcmVhdGVkIGJ5IHByb2plbiwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuXG5zZXQgLWVcblxuU0NSSVBUUEFUSD1cIiQoIGNkIC0tIFwiJChkaXJuYW1lIFwiJDBcIilcIiA+L2Rldi9udWxsIDI+JjEgOyBwd2QgLVAgKVwiXG5cbiMgY2hlY2sgaWYgdGhlIG1vZHVsZSBmb2xkZXIgaGFzIGJlZW4gZ2VuZXJhdGVkIGFzIGV4cGVjdGVkXG5NT0RVTEVTX0ZPTERFUj0kKCBjZCAtLSBcIiRTQ1JJUFRQQVRILy4uL3NyYy9tb2R1bGVzL3N0YWNrc1wiID4vZGV2L251bGwgMj4mMSA7IHB3ZCAtUCApXG5TUkNfRk9MREVSPSQoIGNkIC0tIFwiJFNDUklQVFBBVEgvLi4vc3JjL1wiID4vZGV2L251bGwgMj4mMSA7IHB3ZCAtUCApXG5UQVJHRVRfRk9MREVSPVwiJFNDUklQVFBBVEgvLi4vbW9kdWxlc1wiXG5cbmlmIFsgISAtZCBcIiRNT0RVTEVTX0ZPTERFUlwiIF07IHRoZW5cbiAgZWNobyBcIkV4cGVjdGVkIG1vZHVsZSBmb2xkZXIgdG8gZXhpc3QgYXQgJE1PRFVMRVNfRk9MREVSXCJcbiAgZXhpdCAxXG5maVxuXG5jZCBcIiRNT0RVTEVTX0ZPTERFUlwiXG5mb3IgZCBpbiAqLyA7IGRvXG4gICAgWyAtTCBcIlxcJHtkJS99XCIgXSAmJiBjb250aW51ZVxuXG4gICAgZGlybmFtZT1cIlxcJHtkJS99XCJcblxuXG4gICAgIyBDaGVjayBpZiBldmVyeXRoaW5nIGlzIGluIHBsYWNlXG4gICAgaWYgWyAhIC1mIFwiJE1PRFVMRVNfRk9MREVSLyRkaXJuYW1lL2Nkay50Zi5qc29uXCIgXTsgdGhlblxuICAgICAgZWNobyBcIkV4cGVjdGVkIGNvZGUgZm9yICRkaXJuYW1lIGF0IGNkay50Zi5qc29uIHRvIGV4aXN0IGF0ICRNT0RVTEVTX0ZPTERFUi8kZGlybmFtZVwiXG4gICAgICBleGl0IDFcbiAgICBmaVxuXG4gICAgaWYgWyAhIC1mIFwiJFNSQ19GT0xERVIvJGRpcm5hbWUubWRcIiBdOyB0aGVuXG4gICAgICBlY2hvIFwiRXhwZWN0ZWQgRG9jdW1lbnRhdGlvbiBmb3IgJGRpcm5hbWUgYXQgJGRpcm5hbWUubWQgdG8gZXhpc3QgYXQgJFNSQ19GT0xERVIvJGRpcm5hbWUubWRcIlxuICAgICAgZXhpdCAxXG4gICAgZmlcblxuICAgICMgQ29weSBtb2R1bGUgYW5kIHJlYWRtZSB0b2dldGhlclxuICAgIGVjaG8gXCJDb3B5aW5nIENvZGUgYW5kIFJFQURNRSBmb3IgbW9kdWxlICRkaXJuYW1lXCJcbiAgICBta2RpciAtcCBcIiRUQVJHRVRfRk9MREVSXCJcbiAgICBta2RpciAtcCBcIiRUQVJHRVRfRk9MREVSLyRkaXJuYW1lXCJcbiAgICBjcCBcIiRNT0RVTEVTX0ZPTERFUi8kZGlybmFtZS9jZGsudGYuanNvblwiIFwiJFRBUkdFVF9GT0xERVIvJGRpcm5hbWUvY2RrLnRmLmpzb25cIlxuICAgIGNwIFwiJFNSQ19GT0xERVIvJGRpcm5hbWUubWRcIiBcIiRUQVJHRVRfRk9MREVSLyRkaXJuYW1lL1JFQURNRS5tZFwiXG5kb25lXG5gLnRyaW0oKVxuICAgICk7XG4gICAgdGhpcy5jb21waWxlVGFzay5leGVjKFwiLi9zY3JpcHRzL2NvcHktbW9kdWxlcy5zaFwiLCB7XG4gICAgICBuYW1lOiBcIkNvcHkgSENMIE1vZHVsZXNcIixcbiAgICB9KTtcblxuICAgIC8vIGlnbm9yZSBkaXN0IGluIHRlc3RzXG4gICAgdGhpcy5qZXN0Py5hZGRJZ25vcmVQYXR0ZXJuKFwiZGlzdFwiKTtcblxuICAgIG5ldyBTY3JpcHRGaWxlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiLi9zY3JpcHRzL3RmLW1vZHVsZS10ZXN0LnNoXCIsXG4gICAgICBgXG4jIS9iaW4vYmFzaFxuIyBUaGlzIHNjcmlwdCBpcyBjcmVhdGVkIGJ5IHByb2plbiwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuXG5zZXQgLWVcblxudGVycmFmb3JtIC1jaGRpcj10ZXJyYWZvcm0gaW5pdCAtLXVwZ3JhZGVcbnRlcnJhZm9ybSAtY2hkaXI9dGVycmFmb3JtIGZtdFxudGVycmFmb3JtIC1jaGRpcj10ZXJyYWZvcm0gdmFsaWRhdGVcbnRlcnJhZm9ybSAtY2hkaXI9dGVycmFmb3JtIHBsYW4gICAgIFxuICAgICAgICBgXG4gICAgKTtcblxuICAgIHRoaXMudGVzdFRhc2suZXhlYyhcIi4vc2NyaXB0cy90Zi1tb2R1bGUtdGVzdC5zaFwiKTtcbiAgICB0aGlzLmplc3Q/LmFkZElnbm9yZVBhdHRlcm4oXCJ0ZXJyYWZvcm1cIik7XG5cbiAgICAvLyBQcmUtY29tbWl0IGhvb2tzXG4gICAgaWYgKGNvbmZpZy5kb2N1bWVudGF0aW9uUHJlY29tbWl0SG9vayAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHsgYWRkaXRpb25hbFByZWNvbW1pdEhvb2tzLCBkb2N1bWVudGF0aW9uUHJlY29tbWl0SG9va09wdGlvbnMgfSA9XG4gICAgICAgIGNvbmZpZztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmVyc2lvbiA9IFwidjEuNzAuMVwiLFxuICAgICAgICBkaXNhYmxlRG9jc0hvb2sgPSBmYWxzZSxcbiAgICAgICAgZGlzYWJsZUZvcm1hdEhvb2sgPSBmYWxzZSxcbiAgICAgIH0gPSBkb2N1bWVudGF0aW9uUHJlY29tbWl0SG9va09wdGlvbnMgfHwge307XG5cbiAgICAgIG5ldyBZYW1sRmlsZSh0aGlzLCBcIi5wcmUtY29tbWl0LWNvbmZpZy55YW1sXCIsIHtcbiAgICAgICAgY29tbWl0dGVkOiB0cnVlLFxuICAgICAgICBvYmo6IHtcbiAgICAgICAgICByZXBvczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9hbnRvbmJhYmVua28vcHJlLWNvbW1pdC10ZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgcmV2OiB2ZXJzaW9uLFxuICAgICAgICAgICAgICBob29rczogW1xuICAgICAgICAgICAgICAgIGRpc2FibGVGb3JtYXRIb29rID8gbnVsbCA6IHsgaWQ6IFwidGVycmFmb3JtX2ZtdFwiIH0sXG4gICAgICAgICAgICAgICAgZGlzYWJsZURvY3NIb29rID8gbnVsbCA6IHsgaWQ6IFwidGVycmFmb3JtX2RvY3NcIiB9LFxuICAgICAgICAgICAgICBdLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gbnVsbCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uKGFkZGl0aW9uYWxQcmVjb21taXRIb29rcyA/PyBbXSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRhc2tzLmFkZFRhc2soXCJwcmVjb21taXRcIiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogXCJSdW5zIHByZWNvbW1pdCBob29rc1wiLFxuICAgICAgICBleGVjOiBcInByZS1jb21taXQgaW5zdGFsbFwiLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWlFO0FBQ2pFLHdDQUEyRTtBQUMzRSwrQkFBa0M7QUEwQmxDLE1BQU0sUUFBUSxHQUFHO0lBQ2YsUUFBUSxFQUFFLElBQUk7SUFDZCxVQUFVLEVBQUUsSUFBSTtJQUNoQixvQkFBb0IsRUFBRSxNQUFNO0NBQzdCLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHOzs7Ozs7Ozs7Ozs7Q0FZeEIsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCekIsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0JyQixDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRzs7Ozs7Ozs7O0tBU3ZCLENBQUM7QUFFTixNQUFNLFVBQVcsU0FBUSxpQkFBUTtJQUMvQixZQUFZLE9BQWdCLEVBQUUsSUFBWSxFQUFVLE9BQWU7UUFDakUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDbkIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBSCtDLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFJbkUsQ0FBQztJQUVTLGlCQUFpQixDQUFDLENBQVk7UUFDdEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUVELE1BQWEsWUFBYSxTQUFRLHNCQUFnQjtJQUNoRCxZQUFZLE1BQTJCOztRQUNyQyxLQUFLLENBQUM7WUFDSixHQUFHLFFBQVE7WUFDWCxHQUFHLE1BQU07WUFDVCxVQUFVLEVBQUUsS0FBSztZQUNqQixhQUFhLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtnQkFDckQsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQztZQUNGLGNBQWMsRUFBRSxFQUFFO1NB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Q25DLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNoQixJQUFJLEVBQUUsdUJBQXVCO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxDQUNaLElBQUksRUFDSix5QkFBeUIsRUFDekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpREwsQ0FBQyxJQUFJLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDakQsSUFBSSxFQUFFLGtCQUFrQjtTQUN6QixDQUFDLENBQUM7UUFFSCx1QkFBdUI7UUFDdkIsTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQyxJQUFJLFVBQVUsQ0FDWixJQUFJLEVBQ0osNkJBQTZCLEVBQzdCOzs7Ozs7Ozs7U0FTRyxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2xELE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBblFELG9DQW1RQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbGVCYXNlLCBJUmVzb2x2ZXIsIFByb2plY3QsIFNhbXBsZURpciB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IENvbnN0cnVjdExpYnJhcnksIENvbnN0cnVjdExpYnJhcnlPcHRpb25zIH0gZnJvbSBcInByb2plbi9saWIvY2RrXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcblxudHlwZSBIeWJyaWRNb2R1bGVPcHRpb25zID0gQ29uc3RydWN0TGlicmFyeU9wdGlvbnMgJiB7XG4gIGNka3RmVmVyc2lvbj86IHN0cmluZztcbiAgY29uc3RydWN0VmVyc2lvbj86IHN0cmluZztcbiAgLy8gTmFtZSBvZiB0aGUgYXV0aG9yXG4gIGF1dGhvcjogc3RyaW5nO1xuICAvLyBJZiBzZXQgYSB0ZXJyYWZvcm0gZXhhbXBsZXMgZm9sZGVyIHdpbGwgYmUgY3JlYXRlZFxuICB0ZXJyYWZvcm1FeGFtcGxlcz86IHtcbiAgICAvLyBJZiBzZXQgdGVycmFmb3JtIGV4YW1wbGVzIHdpbGwgYmUgcmVuZGVyZWRcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIC8vIFBhdGggZm9yIHRoZSB0ZXJyYWZvcm0gZXhhbXBsZXNcbiAgICBmb2xkZXI/OiBzdHJpbmc7XG4gICAgLy8gVGhlIEhDTCBjb25maWcgZmlsZSB0byB1c2UgZm9yIHRoZSB0ZXJyYWZvcm0gcHJvdmlkZXJcbiAgICBwcm92aWRlckNvbmZpZz86IHN0cmluZztcbiAgfTtcbiAgY29uc3RydWN0RXhhbXBsZXM/OiB7XG4gICAgLy8gSWYgc2V0IGNvbnN0cnVjdCBleGFtcGxlcyB3aWxsIGJlIHJlbmRlcmVkXG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAvLyBQYXRoIGZvciB0aGUgY29uc3RydWN0IGV4YW1wbGVzXG4gICAgZm9sZGVyPzogc3RyaW5nO1xuICB9O1xuICAvLyBEZWZhdWx0ZWQgdG8gYSB1dWlkIHN0cmluZyBhcyBjZGt0ZiB3b3VsZFxuICBwcm9qZWN0SWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgcHJldHRpZXI6IHRydWUsXG4gIHByb2plbnJjVHM6IHRydWUsXG4gIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBcIm1haW5cIixcbn07XG5cbmNvbnN0IGNvbnN0cnVjdFNyY0NvZGUgPSBgXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE15Q29uc3RydWN0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHByb3BlcnR5QTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTXlDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwdWJsaWMgY29uZmlnOiBNeUNvbnN0cnVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICB9XG59XG5gO1xuXG5jb25zdCBjb25zdHJ1Y3RUZXN0Q29kZSA9IGBcbmltcG9ydCB7IFRlc3RpbmcgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCBcImNka3RmL2xpYi90ZXN0aW5nL2FkYXB0ZXJzL2plc3RcIjtcbmltcG9ydCB7IE15Q29uc3RydWN0IH0gZnJvbSBcIi4uL1wiO1xuXG4vLyBUbyBsZWFybiBtb3JlIGFib3V0IHRlc3Rpbmcgc2VlIGNkay50Zi90ZXN0aW5nXG5kZXNjcmliZShcIk15Q29uc3RydWN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgc3ludGhlc2l6ZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgVGVzdGluZy5zeW50aFNjb3BlKChzY29wZSkgPT4ge1xuICAgICAgICBuZXcgTXlDb25zdHJ1Y3Qoc2NvcGUsIFwibXktY29uc3RydWN0XCIsIHtcbiAgICAgICAgICBwcm9wZXJ0eUE6IFwidmFsdWVBXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9KTtcbn0pO1xuXG5gO1xuXG5jb25zdCBtb2R1bGVTcmNDb2RlID0gYFxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVEZNb2R1bGVTdGFjayB9IGZyb20gXCJjZGt0Zi10Zi1tb2R1bGUtc3RhY2tcIjtcbmltcG9ydCB7IE15Q29uc3RydWN0IH0gZnJvbSBcIi4vaW5kZXhcIjtcblxuY2xhc3MgTXlBd2Vzb21lTW9kdWxlIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IE15Q29uc3RydWN0KHRoaXMsIFwibXktY29uc3RydWN0XCIsIHtcbiAgICAgIHByb3BlcnR5QTogXCJ2YWx1ZUFcIixcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG4vLyBUaGlzIGlzIHRoZSBuYW1lIHRoZSBtb2R1bGUgY2FuIGJlIGZvdW5kIHVuZGVyLiBcbi8vIFdlIGV4cGVjdCBhIFwibXktYXdlc29tZS1tb2R1bGUubWRcIiBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LlxuLy8gVGhlIFJFQURNRS5tZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBmaWxlLlxubmV3IE15QXdlc29tZU1vZHVsZShhcHAsIFwibXktYXdlc29tZS1tb2R1bGVcIik7XG5hcHAuc3ludGgoKTtcbmA7XG5cbmNvbnN0IHRlcnJhZm9ybVJlYWRtZURvY3MgPSBgXG4jIFBsZWFzZSBhZGQgaGVyZSBzb21lIHB1cmUgSENMIHRlc3RzIGZvciB5b3VyIG1vZHVsZXMgaW4gb3JkZXIgdG8gdGVzdCBIQ0wgSW50ZXJvcGVyYWJpbGl0eVxuXG5FeGFtcGxlczpcblxubW9kdWxlIFwibXlfYXdlc29tZV90ZXN0XCIge1xuICBzb3VyY2UgPSBcIi4uL21vZHVsZXMvbXktYXdlc29tZS1tb2R1bGVzXCJcbiAgLi4udmFyaWFibGVzLi4uXG59XG4gICAgYDtcblxuY2xhc3MgU2NyaXB0RmlsZSBleHRlbmRzIEZpbGVCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgcGF0aDogc3RyaW5nLCBwcml2YXRlIGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHN1cGVyKHByb2plY3QsIHBhdGgsIHtcbiAgICAgIGV4ZWN1dGFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUNvbnRlbnQoXzogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIeWJyaWRNb2R1bGUgZXh0ZW5kcyBDb25zdHJ1Y3RMaWJyYXJ5IHtcbiAgY29uc3RydWN0b3IoY29uZmlnOiBIeWJyaWRNb2R1bGVPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4uZGVmYXVsdHMsXG4gICAgICAuLi5jb25maWcsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIGVzbGludE9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZy5lc2xpbnRPcHRpb25zLCB7XG4gICAgICAgIGxpbnRQcm9qZW5SYzogZmFsc2UsXG4gICAgICB9KSxcbiAgICAgIHBvc3RCdWlsZFN0ZXBzOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBjb25zdHJ1Y3RWZXJzaW9uID0gY29uZmlnLmNvbnN0cnVjdFZlcnNpb24gfHwgXCJeMTAuMC4yNVwiO1xuICAgIGNvbnN0IGNka3RmVmVyc2lvbiA9IGNvbmZpZy5jZGt0ZlZlcnNpb24gfHwgXCJeMC45LjRcIjtcblxuICAgIHRoaXMuYWRkUGVlckRlcHMoYGNvbnN0cnVjdHNAJHtjb25zdHJ1Y3RWZXJzaW9ufWAsIGBjZGt0ZkAke2Nka3RmVmVyc2lvbn1gKTtcbiAgICB0aGlzLmFkZERldkRlcHMoYGNka3RmLWNsaUAke2Nka3RmVmVyc2lvbn1gLCBcInRzLW5vZGVcIik7XG4gICAgdGhpcy5hZGRLZXl3b3JkcyhcImNka3RmXCIsIFwiY2RrdGYtaHlicmlkXCIpO1xuICAgIHRoaXMuc2V0U2NyaXB0KFwidGVycmFmb3JtOnRlc3RcIiwgXCIuL3NjcmlwdHMvdGYtbW9kdWxlLXRlc3Quc2hcIik7XG5cbiAgICAvLyBNb2R1bGUgRW50cnlwb2ludFxuICAgIHRoaXMuYWRkRGVwcyhcImNka3RmLXRmLW1vZHVsZS1zdGFja1wiKTtcbiAgICBjb25zdCBtb2R1bGVEb2NzID0gYFxuIyBNeSBBd2Vzb21lIE1vZHVsZVxuXG4jIyBVc2FnZVxuXG5cXGBcXGBcXGBoY2xcbm1vZHVsZSBcImVrc19tYW5hZ2VkX25vZGVfZ3JvdXBcIiB7XG4gIHNvdXJjZSA9IFwiJHtcbiAgICBjb25maWcucmVwb3NpdG9yeVVybFxuICAgICAgPy5yZXBsYWNlKFwiaHR0cHM6Ly9naXRodWIuY29tL1wiLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoXCJodHRwOi8vZ2l0aHViLmNvbS9cIiwgXCJcIilcbiAgICAgIC5yZXBsYWNlKFwiZ2l0aHViLmNvbS9cIiwgXCJcIikgfHwgXCJteS1naXRodWItcmVwb1wiXG4gIH0vL21vZHVsZXMvbXktYXdlc29tZS1tb2R1bGVcIlxuXG59XG5cXGBcXGBcXGBcbiAgICBgO1xuXG4gICAgbmV3IFNhbXBsZURpcih0aGlzLCB0aGlzLnNyY2Rpciwge1xuICAgICAgZmlsZXM6IHtcbiAgICAgICAgXCJpbmRleC50c1wiOiBjb25zdHJ1Y3RTcmNDb2RlLnRyaW0oKSxcbiAgICAgICAgXCJ0Zk1vZHVsZXMudHNcIjogbW9kdWxlU3JjQ29kZS50cmltKCksXG4gICAgICAgIFwibXktYXdlc29tZS1tb2R1bGUubWRcIjogbW9kdWxlRG9jcy50cmltKCksXG4gICAgICAgIFwiY2RrdGYuanNvblwiOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsYW5ndWFnZTogXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgICAgICBhcHA6IFwibnB4IHRzLW5vZGUgdGZNb2R1bGVzLnRzXCIsXG4gICAgICAgICAgICB0ZXJyYWZvcm1Qcm92aWRlcnM6IFtcImhhc2hpY29ycC9udWxsQDMuMS4xXCJdLCAvLyBXZSBuZWVkIGF0IGxlYXN0IGEgcHJvdmlkZXIgZm9yIGdldCB0byBzdWNjZWVkXG4gICAgICAgICAgICB0ZXJyYWZvcm1Nb2R1bGVzOiBbXSxcbiAgICAgICAgICAgIG91dHB1dDogXCJtb2R1bGVzXCIsXG4gICAgICAgICAgICBwcm9qZWN0SWQ6IGNvbmZpZy5wcm9qZWN0SWQgfHwgdXVpZCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyXG4gICAgICAgICksXG4gICAgICAgIFwiX190ZXN0c19fL2luZGV4LXRlc3QudHNcIjogY29uc3RydWN0VGVzdENvZGUudHJpbSgpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChjb25maWcudGVycmFmb3JtRXhhbXBsZXMgJiYgY29uZmlnLnRlcnJhZm9ybUV4YW1wbGVzLmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyQ29uZmlnID1cbiAgICAgICAgY29uZmlnLnRlcnJhZm9ybUV4YW1wbGVzLnByb3ZpZGVyQ29uZmlnIHx8XG4gICAgICAgIGBcbnRlcnJhZm9ybSB7XG4gICMgVGVycmFmb3JtIGJpbmFyeSB2ZXJzaW9uIGNvbnN0cmFpbnRcbiAgcmVxdWlyZWRfdmVyc2lvbiA9IFwifj4gMS4xLjBcIlxuXG4gICMgRGVmaW5lIGFsbCBuZWVkZWQgcHJvdmlkZXJzIGhlcmUsIHlvdSBjYW4gZmluZCBhbGwgYXZhaWxhYmxlIHByb3ZpZGVycyBoZXJlOlxuICAjIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL1xuICByZXF1aXJlZF9wcm92aWRlcnMge31cbn1cblxuIyBJbml0aWFsaXplIHlvdXIgcHJvdmlkZXIgaGVyZVxuXG5gLnRyaW0oKTtcbiAgICAgIGNvbnN0IGV4YW1wbGVzRm9sZGVyID1cbiAgICAgICAgY29uZmlnLnRlcnJhZm9ybUV4YW1wbGVzLmZvbGRlciB8fCBcInRlcnJhZm9ybS1leGFtcGxlc1wiO1xuXG4gICAgICBuZXcgU2FtcGxlRGlyKHRoaXMsIGV4YW1wbGVzRm9sZGVyLCB7XG4gICAgICAgIGZpbGVzOiB7XG4gICAgICAgICAgXCJtYWluLnRmXCI6IGBcbiMgQ29uZmlndXJlIFRlcnJhZm9ybVxuJHtwcm92aWRlckNvbmZpZ31cblxuICAgICAgICAgICAgYC50cmltU3RhcnQoKSxcbiAgICAgICAgICBcIlJFQURNRS5tZFwiOiB0ZXJyYWZvcm1SZWFkbWVEb2NzLnRyaW0oKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmdpdGlnbm9yZS5hZGRQYXR0ZXJucyhcbiAgICAgICAgYCR7ZXhhbXBsZXNGb2xkZXJ9Ly50ZXJyYWZvcm1gLFxuICAgICAgICBgJHtleGFtcGxlc0ZvbGRlcn0vLnRlcnJhZm9ybS5sb2NrLmhjbGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jb25zdHJ1Y3RFeGFtcGxlcyAmJiBjb25maWcuY29uc3RydWN0RXhhbXBsZXMuZW5hYmxlZCkge1xuICAgICAgY29uc3QgY29uc3RydWN0RXhhbXBsZUZvbGRlciA9XG4gICAgICAgIGNvbmZpZy5jb25zdHJ1Y3RFeGFtcGxlcy5mb2xkZXIgfHwgXCJjb25zdHJ1Y3QtZXhhbXBsZXNcIjtcblxuICAgICAgY29uc3QgbGV2ZWxzID0gY29uc3RydWN0RXhhbXBsZUZvbGRlclxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5tYXAoKCkgPT4gXCIuLlwiKVxuICAgICAgICAuam9pbihcIi9cIik7XG5cbiAgICAgIGNvbnN0IGNvbnN0cnVjdFJlYWRtZURvY3MgPSBgXG4jIENvbnN0cnVjdCBFeGFtcGxlc1xuXG5FeGFtcGxlIHVzZS1jYXNlcyBmb3IgdGhlIENvbnN0cnVjdCBsaWJyYXJ5LlxuXG4tIFtCYXNpYyBVc2FnZV0oLi9iYXNpYy50cylcblxuVG8gZW5zdXJlIGFsbCBleGFtcGxlcyBhcmUgd29ya2luZywgcGxlYXNlIG1ha2Ugc3VyZSB0aGUgW2luZGV4LnRzXSguL2luZGV4LnRzKSBmaWxlIGlzIGltcG9ydGluZyBhbGwgb2YgdGhlbS5cbmA7XG5cbiAgICAgIGNvbnN0IGNvbnN0cnVjdEV4YW1wbGVDb2RlID0gYFxuaW1wb3J0IHsgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IE15Q29uc3RydWN0IH0gZnJvbSBcIiR7bGV2ZWxzfS9zcmMvXCI7XG5cbmV4cG9ydCBjbGFzcyBCYXNpY0V4YW1wbGUgZXh0ZW5kcyBUZXJyYWZvcm1TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBuYW1lKTtcblxuICAgIG5ldyBNeUNvbnN0cnVjdCh0aGlzLCBcIm15LWNvbnN0cnVjdFwiLCB7XG4gICAgICBwcm9wZXJ0eUE6IFwidmFsdWVBXCIsXG4gICAgfSk7XG4gIH1cbn1cblxuXG5gO1xuXG4gICAgICBjb25zdCBleGFtcGxlQ29sbGVjdGlvbkNvZGUgPSBgXG4vLyBUaGlzIGZpbGUgd2lsbCBiZSBzeW50aGVzaXplZCB0byBjaGVjayBpZiBhbGwgZXhhbXBsZXMgYXJlIHdvcmtpbmdcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcImNka3RmXCI7XG4vLyBBbGwgZXhhbXBsZXMgbmVlZCB0byBiZSBpbXBvcnRlZCBoZXJlXG5pbXBvcnQgeyBCYXNpY0V4YW1wbGUgfSBmcm9tIFwiLi9iYXNpY1wiO1xuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5cbi8vIEFsbCBleGFtcGxlcyBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGhlcmVcbm5ldyBCYXNpY0V4YW1wbGUoYXBwLCBcImJhc2ljLWV4YW1wbGVcIik7XG5hcHAuc3ludGgoKTtcbmA7XG5cbiAgICAgIG5ldyBTYW1wbGVEaXIodGhpcywgY29uc3RydWN0RXhhbXBsZUZvbGRlciwge1xuICAgICAgICBmaWxlczoge1xuICAgICAgICAgIFwiaW5kZXgudHNcIjogZXhhbXBsZUNvbGxlY3Rpb25Db2RlLnRyaW0oKSxcbiAgICAgICAgICBcImJhc2ljLnRzXCI6IGNvbnN0cnVjdEV4YW1wbGVDb2RlLnRyaW0oKSxcbiAgICAgICAgICBcImNka3RmLmpzb25cIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhbmd1YWdlOiBcInR5cGVzY3JpcHRcIixcbiAgICAgICAgICAgICAgYXBwOiBcIm5weCB0cy1ub2RlIGluZGV4LnRzXCIsXG4gICAgICAgICAgICAgIHByb2plY3RJZDogY29uZmlnLnByb2plY3RJZCB8fCB1dWlkKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApLFxuICAgICAgICAgIFwiUkVBRE1FLm1kXCI6IGNvbnN0cnVjdFJlYWRtZURvY3MudHJpbSgpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudGVzdFRhc2suZXhlYyhgY2RrdGYgc3ludGhgLCB7XG4gICAgICAgIGN3ZDogY29uc3RydWN0RXhhbXBsZUZvbGRlcixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5naXRpZ25vcmUuYWRkUGF0dGVybnMoYCR7Y29uc3RydWN0RXhhbXBsZUZvbGRlcn0vY2RrdGYub3V0YCk7XG4gICAgfVxuXG4gICAgdGhpcy5naXRpZ25vcmUuYWRkUGF0dGVybnMoXCJzcmMvLmdlblwiLCBcInNyYy9jZGt0Zi5vdXRcIiwgXCJzcmMvbW9kdWxlc1wiKTtcbiAgICB0aGlzLmNvbXBpbGVUYXNrLnByZXBlbmRFeGVjKFwiY2RrdGYgZ2V0XCIsIHtcbiAgICAgIGN3ZDogdGhpcy5zcmNkaXIsXG4gICAgfSk7XG4gICAgdGhpcy5jb21waWxlVGFzay5leGVjKFwiY2RrdGYgc3ludGhcIiwge1xuICAgICAgY3dkOiB0aGlzLnNyY2RpcixcbiAgICAgIG5hbWU6IFwiU3ludGhlc2l6ZSBtb2R1bGUgSENMXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgU2NyaXB0RmlsZShcbiAgICAgIHRoaXMsXG4gICAgICBcInNjcmlwdHMvY29weS1tb2R1bGVzLnNoXCIsXG4gICAgICBgXG4jIS9iaW4vYmFzaFxuIyBUaGlzIHNjcmlwdCBpcyBjcmVhdGVkIGJ5IHByb2plbiwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuXG5zZXQgLWVcblxuU0NSSVBUUEFUSD1cIiQoIGNkIC0tIFwiJChkaXJuYW1lIFwiJDBcIilcIiA+L2Rldi9udWxsIDI+JjEgOyBwd2QgLVAgKVwiXG5cbiMgY2hlY2sgaWYgdGhlIG1vZHVsZSBmb2xkZXIgaGFzIGJlZW4gZ2VuZXJhdGVkIGFzIGV4cGVjdGVkXG5NT0RVTEVTX0ZPTERFUj0kKCBjZCAtLSBcIiRTQ1JJUFRQQVRILy4uL3NyYy9tb2R1bGVzL3N0YWNrc1wiID4vZGV2L251bGwgMj4mMSA7IHB3ZCAtUCApXG5TUkNfRk9MREVSPSQoIGNkIC0tIFwiJFNDUklQVFBBVEgvLi4vc3JjL1wiID4vZGV2L251bGwgMj4mMSA7IHB3ZCAtUCApXG5UQVJHRVRfRk9MREVSPVwiJFNDUklQVFBBVEgvLi4vbW9kdWxlc1wiXG5cbmlmIFsgISAtZCBcIiRNT0RVTEVTX0ZPTERFUlwiIF07IHRoZW5cbiAgZWNobyBcIkV4cGVjdGVkIG1vZHVsZSBmb2xkZXIgdG8gZXhpc3QgYXQgJE1PRFVMRVNfRk9MREVSXCJcbiAgZXhpdCAxXG5maVxuXG5jZCBcIiRNT0RVTEVTX0ZPTERFUlwiXG5mb3IgZCBpbiAqLyA7IGRvXG4gICAgWyAtTCBcIlxcJHtkJS99XCIgXSAmJiBjb250aW51ZVxuXG4gICAgZGlybmFtZT1cIlxcJHtkJS99XCJcblxuXG4gICAgIyBDaGVjayBpZiBldmVyeXRoaW5nIGlzIGluIHBsYWNlXG4gICAgaWYgWyAhIC1mIFwiJE1PRFVMRVNfRk9MREVSLyRkaXJuYW1lL2Nkay50Zi5qc29uXCIgXTsgdGhlblxuICAgICAgZWNobyBcIkV4cGVjdGVkIGNvZGUgZm9yICRkaXJuYW1lIGF0IGNkay50Zi5qc29uIHRvIGV4aXN0IGF0ICRNT0RVTEVTX0ZPTERFUi8kZGlybmFtZVwiXG4gICAgICBleGl0IDFcbiAgICBmaVxuXG4gICAgaWYgWyAhIC1mIFwiJFNSQ19GT0xERVIvJGRpcm5hbWUubWRcIiBdOyB0aGVuXG4gICAgICBlY2hvIFwiRXhwZWN0ZWQgRG9jdW1lbnRhdGlvbiBmb3IgJGRpcm5hbWUgYXQgJGRpcm5hbWUubWQgdG8gZXhpc3QgYXQgJFNSQ19GT0xERVIvJGRpcm5hbWUubWRcIlxuICAgICAgZXhpdCAxXG4gICAgZmlcblxuICAgICMgQ29weSBtb2R1bGUgYW5kIHJlYWRtZSB0b2dldGhlclxuICAgIGVjaG8gXCJDb3B5aW5nIENvZGUgYW5kIFJFQURNRSBmb3IgbW9kdWxlICRkaXJuYW1lXCJcbiAgICBta2RpciAtcCBcIiRUQVJHRVRfRk9MREVSXCJcbiAgICBta2RpciAtcCBcIiRUQVJHRVRfRk9MREVSLyRkaXJuYW1lXCJcbiAgICBjcCBcIiRNT0RVTEVTX0ZPTERFUi8kZGlybmFtZS9jZGsudGYuanNvblwiIFwiJFRBUkdFVF9GT0xERVIvJGRpcm5hbWUvY2RrLnRmLmpzb25cIlxuICAgIGNwIFwiJFNSQ19GT0xERVIvJGRpcm5hbWUubWRcIiBcIiRUQVJHRVRfRk9MREVSLyRkaXJuYW1lL1JFQURNRS5tZFwiXG5cbiAgICAjIEFkZCBSRUFETUUgaGNsIGRvY3NcbiAgICBpZiB3aGljaCB0ZXJyYWZvcm0tZG9jcyA+L2Rldi9udWxsOyB0aGVuXG4gICAgICB0ZXJyYWZvcm0tZG9jcyBtYXJrZG93biB0YWJsZSAtLW91dHB1dC1maWxlIFwiJFRBUkdFVF9GT0xERVIvJGRpcm5hbWUvUkVBRE1FLm1kXCIgXCIkVEFSR0VUX0ZPTERFUi8kZGlybmFtZVwiIFxuICAgIGVsc2VcbiAgICAgIGRvY2tlciBydW4gLS1ybSAtLXZvbHVtZSBcIiRTQ1JJUFRQQVRILy4uL21vZHVsZXM6L3RlcnJhZm9ybS1kb2NzXCIgLXUgJChpZCAtdSkgcXVheS5pby90ZXJyYWZvcm0tZG9jcy90ZXJyYWZvcm0tZG9jczowLjE2LjAgbWFya2Rvd24gdGFibGUgLS1vdXRwdXQtZmlsZSBcIi90ZXJyYWZvcm0tZG9jcy8kZGlybmFtZS9SRUFETUUubWRcIiAvdGVycmFmb3JtLWRvY3MvJGRpcm5hbWVcbiAgICBmaVxuZG9uZVxuYC50cmltKClcbiAgICApO1xuICAgIHRoaXMuY29tcGlsZVRhc2suZXhlYyhcIi4vc2NyaXB0cy9jb3B5LW1vZHVsZXMuc2hcIiwge1xuICAgICAgbmFtZTogXCJDb3B5IEhDTCBNb2R1bGVzXCIsXG4gICAgfSk7XG5cbiAgICAvLyBpZ25vcmUgZGlzdCBpbiB0ZXN0c1xuICAgIHRoaXMuamVzdD8uYWRkSWdub3JlUGF0dGVybihcImRpc3RcIik7XG5cbiAgICBuZXcgU2NyaXB0RmlsZShcbiAgICAgIHRoaXMsXG4gICAgICBcIi4vc2NyaXB0cy90Zi1tb2R1bGUtdGVzdC5zaFwiLFxuICAgICAgYFxuIyEvYmluL2Jhc2hcbiMgVGhpcyBzY3JpcHQgaXMgY3JlYXRlZCBieSBwcm9qZW4sIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5Llxuc2V0IC1lXG5cbnRlcnJhZm9ybSAtY2hkaXI9dGVycmFmb3JtIGluaXQgLS11cGdyYWRlXG50ZXJyYWZvcm0gLWNoZGlyPXRlcnJhZm9ybSBmbXRcbnRlcnJhZm9ybSAtY2hkaXI9dGVycmFmb3JtIHZhbGlkYXRlXG50ZXJyYWZvcm0gLWNoZGlyPXRlcnJhZm9ybSBwbGFuICAgICBcbiAgICAgICAgYFxuICAgICk7XG5cbiAgICB0aGlzLnRlc3RUYXNrLmV4ZWMoXCIuL3NjcmlwdHMvdGYtbW9kdWxlLXRlc3Quc2hcIik7XG4gICAgdGhpcy5qZXN0Py5hZGRJZ25vcmVQYXR0ZXJuKFwidGVycmFmb3JtXCIpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "main": "lib/index.js",
59
59
  "license": "MIT",
60
- "version": "0.1.44",
60
+ "version": "0.1.47",
61
61
  "jest": {
62
62
  "testMatch": [
63
63
  "<rootDir>/src/**/__tests__/**/*.ts?(x)",
@@ -1,8 +0,0 @@
1
- # ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
2
-
3
- repos:
4
- - repo: https://github.com/antonbabenko/pre-commit-terraform
5
- rev: v1.70.1
6
- hooks:
7
- - id: terraform_fmt
8
- - id: terraform_docs