cdktn 0.23.0 → 0.23.2
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/.jsii +1560 -1559
- package/.spec.swcrc +22 -0
- package/jest.config.js +18 -15
- package/lib/_tokens.js +1 -1
- package/lib/annotations.js +2 -2
- package/lib/app.js +2 -2
- package/lib/aspect.js +2 -2
- package/lib/backends/azurerm-backend.js +3 -3
- package/lib/backends/cloud-backend.js +5 -5
- package/lib/backends/consul-backend.js +3 -3
- package/lib/backends/cos-backend.js +3 -3
- package/lib/backends/gcs-backend.js +3 -3
- package/lib/backends/http-backend.js +3 -3
- package/lib/backends/index.js +1 -1
- package/lib/backends/local-backend.js +3 -3
- package/lib/backends/oss-backend.js +3 -3
- package/lib/backends/pg-backend.js +3 -3
- package/lib/backends/remote-backend.js +5 -5
- package/lib/backends/s3-backend.js +3 -3
- package/lib/backends/swift-backend.js +3 -3
- package/lib/complex-computed-list.js +24 -24
- package/lib/errors.js +1 -1
- package/lib/features.js +1 -1
- package/lib/functions/helpers.js +1 -1
- package/lib/functions/terraform-functions.generated.js +2 -2
- package/lib/hcl/render.js +1 -1
- package/lib/importable-resource.js +2 -2
- package/lib/index.js +1 -1
- package/lib/manifest.js +2 -2
- package/lib/private/fs.d.ts +20 -5
- package/lib/private/fs.js +43 -69
- package/lib/private/unique.js +1 -1
- package/lib/resource.js +2 -2
- package/lib/runtime.js +1 -1
- package/lib/synthesize/index.js +1 -1
- package/lib/synthesize/synthesizer.js +1 -1
- package/lib/synthesize/types.js +1 -1
- package/lib/terraform-addressable.js +1 -1
- package/lib/terraform-asset.js +2 -2
- package/lib/terraform-backend.js +2 -2
- package/lib/terraform-conditions.js +1 -1
- package/lib/terraform-count.js +2 -2
- package/lib/terraform-data-resource.js +2 -2
- package/lib/terraform-data-source.js +2 -2
- package/lib/terraform-dependable.js +1 -1
- package/lib/terraform-dynamic-block.js +1 -1
- package/lib/terraform-dynamic-expression.js +1 -1
- package/lib/terraform-element.js +2 -2
- package/lib/terraform-functions.js +2 -2
- package/lib/terraform-hcl-module.js +2 -2
- package/lib/terraform-iterator.js +6 -6
- package/lib/terraform-local.js +2 -2
- package/lib/terraform-module-asset.js +1 -1
- package/lib/terraform-module.js +2 -2
- package/lib/terraform-operators.js +2 -2
- package/lib/terraform-output.js +2 -2
- package/lib/terraform-provider.js +2 -2
- package/lib/terraform-provisioner.js +2 -2
- package/lib/terraform-remote-state.js +2 -2
- package/lib/terraform-resource-targets.js +2 -2
- package/lib/terraform-resource.js +2 -2
- package/lib/terraform-stack.js +2 -2
- package/lib/terraform-variable.js +3 -3
- package/lib/testing/adapters/jest.js +1 -1
- package/lib/testing/index.js +2 -2
- package/lib/testing/matchers.js +2 -2
- package/lib/tfExpression.js +1 -1
- package/lib/tokens/index.js +1 -1
- package/lib/tokens/lazy.js +3 -3
- package/lib/tokens/private/dependency.js +1 -1
- package/lib/tokens/private/encoding.js +1 -1
- package/lib/tokens/private/intrinsic.js +1 -1
- package/lib/tokens/private/resolve.js +1 -1
- package/lib/tokens/private/stack-trace.js +1 -1
- package/lib/tokens/private/token-map.js +1 -1
- package/lib/tokens/private/uniqueid.js +1 -1
- package/lib/tokens/resolvable.js +3 -3
- package/lib/tokens/string-fragments.js +2 -2
- package/lib/tokens/token.js +3 -3
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/upgrade-id-aspect.js +2 -2
- package/lib/util.js +1 -1
- package/lib/validateEnvironment.js +1 -1
- package/lib/validations/index.js +1 -1
- package/lib/validations/validate-binary-version.js +1 -1
- package/lib/validations/validate-provider-presence.js +1 -1
- package/lib/validations/validate-terraform-version.js +1 -1
- package/node_modules/fflate/CHANGELOG.md +115 -0
- package/node_modules/{yazl → fflate}/LICENSE +3 -3
- package/node_modules/fflate/README.md +558 -0
- package/node_modules/fflate/esm/browser.d.ts +1501 -0
- package/node_modules/fflate/esm/browser.js +2665 -0
- package/node_modules/fflate/esm/index.d.mts +1501 -0
- package/node_modules/fflate/esm/index.mjs +2679 -0
- package/node_modules/fflate/lib/browser.cjs +2688 -0
- package/node_modules/fflate/lib/browser.d.cts +1501 -0
- package/node_modules/fflate/lib/index.cjs +2668 -0
- package/node_modules/fflate/lib/index.d.ts +1501 -0
- package/node_modules/fflate/lib/node-worker.cjs +32 -0
- package/node_modules/fflate/lib/node.cjs +2700 -0
- package/node_modules/fflate/lib/node.d.cts +1501 -0
- package/node_modules/fflate/lib/worker.cjs +20 -0
- package/node_modules/fflate/package.json +127 -0
- package/node_modules/fflate/umd/index.js +1 -0
- package/package.json +95 -89
- package/tsconfig.json +6 -3
- package/tsconfig.test.json +12 -0
- package/lib/testing/__tests__/matchers.test.d.ts +0 -1
- package/lib/testing/__tests__/matchers.test.js +0 -205
- package/lib/testing/adapters/__tests__/index.test.d.ts +0 -1
- package/lib/testing/adapters/__tests__/index.test.js +0 -67
- package/lib/testing/adapters/__tests__/jest.test.d.ts +0 -1
- package/lib/testing/adapters/__tests__/jest.test.js +0 -41
- package/node_modules/buffer-crc32/LICENSE +0 -19
- package/node_modules/buffer-crc32/README.md +0 -55
- package/node_modules/buffer-crc32/dist/index.cjs +0 -306
- package/node_modules/buffer-crc32/dist/index.d.cts +0 -35
- package/node_modules/buffer-crc32/dist/index.d.mts +0 -35
- package/node_modules/buffer-crc32/dist/index.mjs +0 -304
- package/node_modules/buffer-crc32/index.d.ts +0 -35
- package/node_modules/buffer-crc32/package.json +0 -54
- package/node_modules/yazl/README.md +0 -457
- package/node_modules/yazl/index.js +0 -826
- package/node_modules/yazl/package.json +0 -34
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// Copyright (c) HashiCorp, Inc
|
|
4
|
-
// SPDX-License-Identifier: MPL-2.0
|
|
5
|
-
const index_1 = require("../index");
|
|
6
|
-
const resource_1 = require("../../../test/helper/resource");
|
|
7
|
-
const matchers_1 = require("../matchers");
|
|
8
|
-
const data_source_1 = require("../../../test/helper/data-source");
|
|
9
|
-
const terraform_stack_1 = require("../../terraform-stack");
|
|
10
|
-
const provider_1 = require("../../../test/helper/provider");
|
|
11
|
-
const fs = require("fs");
|
|
12
|
-
const path = require("path");
|
|
13
|
-
function corruptSynthesizedStack(stackPath) {
|
|
14
|
-
const manifest = JSON.parse(fs.readFileSync(path.resolve(stackPath, "manifest.json"), "utf8"));
|
|
15
|
-
const { synthesizedStackPath } = Object.values(manifest.stacks)[0];
|
|
16
|
-
const absoluteStackPath = path.resolve(stackPath, synthesizedStackPath);
|
|
17
|
-
fs.writeFileSync(absoluteStackPath, fs.readFileSync(absoluteStackPath, "utf8") +
|
|
18
|
-
"Weird text that makes the JSON file invalid", "utf8");
|
|
19
|
-
}
|
|
20
|
-
describe("deepEqualIgnoringObjectCasing", () => {
|
|
21
|
-
it("should compare simple items", () => {
|
|
22
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)(1, 1)).toBe(true);
|
|
23
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)("1", "1")).toBe(true);
|
|
24
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)(true, true)).toBe(true);
|
|
25
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)(false, false)).toBe(true);
|
|
26
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)(null, null)).toBe(true);
|
|
27
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)(undefined, undefined)).toBe(true);
|
|
28
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)([1, 2, 3], [1, 2, 3])).toBe(true);
|
|
29
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: 1, b: 2 }, { a: 1, b: 2 })).toBe(true);
|
|
30
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)(1, 2)).toBe(false);
|
|
31
|
-
});
|
|
32
|
-
it("should compare arrays", () => {
|
|
33
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)([1, 2, 3], [1, 2, 3])).toBe(true);
|
|
34
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)([1, 2, 3], [1, 2, 4])).toBe(false);
|
|
35
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)([1, 2, 3], [1, 2, 3, 4])).toBe(false);
|
|
36
|
-
});
|
|
37
|
-
it("should compare objects", () => {
|
|
38
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: 1, b: 2 }, { a: 1, b: 2 })).toBe(true);
|
|
39
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: { c: 3 }, b: 2 }, { a: { c: 3 }, b: 2 })).toBe(true);
|
|
40
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: 3, b: 2 }, { a: { c: 3 }, b: 2 })).toBe(false);
|
|
41
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: { c: 3 }, b: 2 }, { a: 3, b: 2 })).toBe(false);
|
|
42
|
-
});
|
|
43
|
-
it("should ignore case when comparing object keys", () => {
|
|
44
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: 1, fooBar: 2 }, { a: 1, foo_bar: 2 })).toBe(true);
|
|
45
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: { fooBar: 2 } }, { a: { foo_bar: 2 } })).toBe(true);
|
|
46
|
-
});
|
|
47
|
-
it("should ignore keys not present in expectation", () => {
|
|
48
|
-
expect((0, matchers_1.asymetricDeepEqualIgnoringObjectCasing)({ a: { fooBar: 2 } }, { a: { foo_bar: 2 }, b: 3 })).toBe(true);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
describe("matchers", () => {
|
|
52
|
-
const toHaveResourceWithProperties = (0, matchers_1.getToHaveResourceWithProperties)();
|
|
53
|
-
describe("toHaveResourceWithProperties", () => {
|
|
54
|
-
let synthesizedStack;
|
|
55
|
-
beforeEach(() => {
|
|
56
|
-
synthesizedStack = index_1.Testing.synthScope((scope) => {
|
|
57
|
-
new resource_1.TestResource(scope, "test", { name: "test", tags: { foo: "bar" } });
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
it("should pass with no properties", () => {
|
|
61
|
-
const res = toHaveResourceWithProperties(synthesizedStack, resource_1.TestResource);
|
|
62
|
-
expect(res.pass).toBeTruthy();
|
|
63
|
-
expect(res.message).toMatchInlineSnapshot(`
|
|
64
|
-
"Expected no test_resource with properties {} to be present in synthesized stack.
|
|
65
|
-
Found 1 test_resource resources instead:
|
|
66
|
-
[
|
|
67
|
-
{
|
|
68
|
-
"name": "test",
|
|
69
|
-
"tags": {
|
|
70
|
-
"foo": "bar"
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
]"
|
|
74
|
-
`);
|
|
75
|
-
});
|
|
76
|
-
it("should fail with wrong resouce", () => {
|
|
77
|
-
const res = toHaveResourceWithProperties(synthesizedStack, data_source_1.TestDataSource);
|
|
78
|
-
expect(res.pass).toBeFalsy();
|
|
79
|
-
expect(res.message).toMatchInlineSnapshot(`
|
|
80
|
-
"Expected test_data_source with properties {} to be present in synthesized stack.
|
|
81
|
-
Found no test_data_source resources instead"
|
|
82
|
-
`);
|
|
83
|
-
});
|
|
84
|
-
it("should work on nested elements", () => {
|
|
85
|
-
const res = toHaveResourceWithProperties(synthesizedStack, resource_1.TestResource, {
|
|
86
|
-
tags: { foo: "bar" },
|
|
87
|
-
});
|
|
88
|
-
expect(res.pass).toBeTruthy();
|
|
89
|
-
});
|
|
90
|
-
it("should fail if no item is found as asserted", () => {
|
|
91
|
-
const res = toHaveResourceWithProperties(synthesizedStack, resource_1.DockerImage);
|
|
92
|
-
expect(res.pass).toBeFalsy();
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
describe("toHaveDataSourceWithProperties", () => {
|
|
96
|
-
const toHaveDataSourceWithProperties = (0, matchers_1.getToHaveDataSourceWithProperties)();
|
|
97
|
-
let synthesizedStack;
|
|
98
|
-
beforeEach(() => {
|
|
99
|
-
synthesizedStack = index_1.Testing.synthScope((scope) => {
|
|
100
|
-
new resource_1.TestResource(scope, "test", { name: "test" });
|
|
101
|
-
new data_source_1.TestDataSource(scope, "test-data-source", { name: "data" });
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
it("should not find resources", () => {
|
|
105
|
-
const res = toHaveDataSourceWithProperties(synthesizedStack, resource_1.TestResource);
|
|
106
|
-
expect(res.pass).toBeFalsy();
|
|
107
|
-
});
|
|
108
|
-
it("should find data sources", () => {
|
|
109
|
-
const res = toHaveDataSourceWithProperties(synthesizedStack, data_source_1.TestDataSource, { name: "data" });
|
|
110
|
-
expect(res.pass).toBeTruthy();
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
describe("toHaveProviderWithProperties", () => {
|
|
114
|
-
const toHaveProviderWithProperties = (0, matchers_1.getToHaveProviderWithProperties)();
|
|
115
|
-
let synthesizedStack;
|
|
116
|
-
let synthesizedStackNoProvider;
|
|
117
|
-
beforeEach(() => {
|
|
118
|
-
synthesizedStack = index_1.Testing.synthScope((scope) => {
|
|
119
|
-
new provider_1.DockerProvider(scope, "test-provider", {
|
|
120
|
-
alias: "test-alias",
|
|
121
|
-
ssh_opts: ["-o", "StrictHostKeyChecking=no"],
|
|
122
|
-
});
|
|
123
|
-
new resource_1.DockerImage(scope, "test-image", { name: "test" });
|
|
124
|
-
});
|
|
125
|
-
synthesizedStackNoProvider = index_1.Testing.synthScope((scope) => {
|
|
126
|
-
new resource_1.DockerImage(scope, "test", { name: "test" });
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
it("should find provider", () => {
|
|
130
|
-
const res = toHaveProviderWithProperties(synthesizedStack, provider_1.DockerProvider, { alias: "test-alias", ssh_opts: ["-o", "StrictHostKeyChecking=no"] });
|
|
131
|
-
expect(res.pass).toBeTruthy();
|
|
132
|
-
});
|
|
133
|
-
it("should not find provider", () => {
|
|
134
|
-
const res = toHaveProviderWithProperties(synthesizedStackNoProvider, provider_1.DockerProvider, {});
|
|
135
|
-
expect(res.pass).toBeFalsy();
|
|
136
|
-
});
|
|
137
|
-
it("should not find resources", () => {
|
|
138
|
-
const res = toHaveProviderWithProperties(synthesizedStack, resource_1.TestResource);
|
|
139
|
-
expect(res.pass).toBeFalsy();
|
|
140
|
-
});
|
|
141
|
-
it("should not find data sources", () => {
|
|
142
|
-
const res = toHaveProviderWithProperties(synthesizedStack, data_source_1.TestDataSource);
|
|
143
|
-
expect(res.pass).toBeFalsy();
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
describe("toBeValidTerraform", () => {
|
|
147
|
-
it("fails if anything but a path is passed", () => {
|
|
148
|
-
const res = (0, matchers_1.toBeValidTerraform)("not a path");
|
|
149
|
-
expect(res.pass).toBeFalsy();
|
|
150
|
-
expect(res.message).toMatchInlineSnapshot(`"Expected subject to be a terraform directory: Error: ENOENT: no such file or directory, stat 'not a path'"`);
|
|
151
|
-
});
|
|
152
|
-
it("succeeds if the terraform config passed is valid", () => {
|
|
153
|
-
const app = index_1.Testing.app();
|
|
154
|
-
const stack = new terraform_stack_1.TerraformStack(app, "test");
|
|
155
|
-
new provider_1.DockerProvider(stack, "provider", {});
|
|
156
|
-
new resource_1.DockerImage(stack, "test", { name: "test" });
|
|
157
|
-
const res = (0, matchers_1.toBeValidTerraform)(index_1.Testing.fullSynth(stack));
|
|
158
|
-
expect(res.pass).toBeTruthy();
|
|
159
|
-
expect(res.message).toMatchInlineSnapshot(`"Expected subject not to be a valid terraform stack"`);
|
|
160
|
-
});
|
|
161
|
-
it("fails if the terraform config passed is invalid", () => {
|
|
162
|
-
const app = index_1.Testing.app();
|
|
163
|
-
const stack = new terraform_stack_1.TerraformStack(app, "test");
|
|
164
|
-
new provider_1.DockerProvider(stack, "provider", {});
|
|
165
|
-
new resource_1.DockerImage(stack, "test", { name: "test" });
|
|
166
|
-
const result = index_1.Testing.fullSynth(stack);
|
|
167
|
-
corruptSynthesizedStack(result);
|
|
168
|
-
const res = (0, matchers_1.toBeValidTerraform)(result);
|
|
169
|
-
expect(res.pass).toBeFalsy();
|
|
170
|
-
expect(res.message).toEqual(expect.stringContaining("Expected subject to be a valid terraform stack"));
|
|
171
|
-
const tf1_3 = "There are some problems with the configuration, described below";
|
|
172
|
-
const tf1_4 = "Terraform encountered problems during initialisation, including problems\n with the configuration, described below";
|
|
173
|
-
const tf1_5 = "Extra characters appear after the JSON value";
|
|
174
|
-
expect(res.message).toEqual(expect.stringMatching(new RegExp(`${tf1_3}|${tf1_4}|${tf1_5}`)));
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
describe("toPlanSuccessfully", () => {
|
|
178
|
-
it("fails if anything but a path is passed", () => {
|
|
179
|
-
const res = (0, matchers_1.toPlanSuccessfully)("not a path");
|
|
180
|
-
expect(res.pass).toBeFalsy();
|
|
181
|
-
expect(res.message).toMatchInlineSnapshot(`"Expected subject to be a terraform directory: Error: ENOENT: no such file or directory, stat 'not a path'"`);
|
|
182
|
-
});
|
|
183
|
-
it("succeeds if the terraform config passed is valid", () => {
|
|
184
|
-
const app = index_1.Testing.app();
|
|
185
|
-
const stack = new terraform_stack_1.TerraformStack(app, "test");
|
|
186
|
-
new provider_1.DockerProvider(stack, "provider", {});
|
|
187
|
-
new resource_1.DockerImage(stack, "test", { name: "test" });
|
|
188
|
-
const res = (0, matchers_1.toPlanSuccessfully)(index_1.Testing.fullSynth(stack));
|
|
189
|
-
expect(res.pass).toBeTruthy();
|
|
190
|
-
expect(res.message).toMatchInlineSnapshot(`"Expected subject not to plan successfully"`);
|
|
191
|
-
});
|
|
192
|
-
it("fails if the terraform config passed is invalid", () => {
|
|
193
|
-
const app = index_1.Testing.app();
|
|
194
|
-
const stack = new terraform_stack_1.TerraformStack(app, "test");
|
|
195
|
-
new provider_1.DockerProvider(stack, "provider", {});
|
|
196
|
-
new resource_1.DockerImage(stack, "test", { name: "test" });
|
|
197
|
-
const result = index_1.Testing.fullSynth(stack);
|
|
198
|
-
corruptSynthesizedStack(result);
|
|
199
|
-
const res = (0, matchers_1.toPlanSuccessfully)(result);
|
|
200
|
-
expect(res.pass).toBeFalsy();
|
|
201
|
-
expect(res.message).toEqual(expect.stringContaining("Expected subject to plan successfully"));
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hlcnMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hdGNoZXJzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLG9DQUFtQztBQUNuQyw0REFBMEU7QUFDMUUsMENBT3FCO0FBQ3JCLGtFQUFrRTtBQUNsRSwyREFBdUQ7QUFDdkQsNERBQStEO0FBQy9ELHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0IsU0FBUyx1QkFBdUIsQ0FBQyxTQUFpQjtJQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN6QixFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUNsRSxDQUFDO0lBRUYsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUM7SUFDMUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBRXhFLEVBQUUsQ0FBQyxhQUFhLENBQ2QsaUJBQWlCLEVBQ2pCLEVBQUUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQ3hDLDZDQUE2QyxFQUMvQyxNQUFNLENBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxRQUFRLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO0lBQzdDLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7UUFDckMsTUFBTSxDQUFDLElBQUEsaURBQXNDLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxJQUFBLGlEQUFzQyxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMs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QUFFLENBQUMsQ0FBQztZQUVqRCxNQUFNLE1BQU0sR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWhDLE1BQU0sR0FBRyxHQUFHLElBQUEsNkJBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FDekIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLHVDQUF1QyxDQUFDLENBQ2pFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgVGVzdGluZyB9IGZyb20gXCIuLi9pbmRleFwiO1xuaW1wb3J0IHsgVGVzdFJlc291cmNlLCBEb2NrZXJJbWFnZSB9IGZyb20gXCIuLi8uLi8uLi90ZXN0L2hlbHBlci9yZXNvdXJjZVwiO1xuaW1wb3J0IHtcbiAgdG9CZVZhbGlkVGVycmFmb3JtLFxuICB0b1BsYW5TdWNjZXNzZnVsbHksXG4gIGdldFRvSGF2ZVJlc291cmNlV2l0aFByb3BlcnRpZXMsXG4gIGdldFRvSGF2ZVByb3ZpZGVyV2l0aFByb3BlcnRpZXMsXG4gIGdldFRvSGF2ZURhdGFTb3VyY2VXaXRoUHJvcGVydGllcyxcbiAgYXN5bWV0cmljRGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmcsXG59IGZyb20gXCIuLi9tYXRjaGVyc1wiO1xuaW1wb3J0IHsgVGVzdERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vLi4vLi4vdGVzdC9oZWxwZXIvZGF0YS1zb3VyY2VcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcIi4uLy4uL3RlcnJhZm9ybS1zdGFja1wiO1xuaW1wb3J0IHsgRG9ja2VyUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vLi4vdGVzdC9oZWxwZXIvcHJvdmlkZXJcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5mdW5jdGlvbiBjb3JydXB0U3ludGhlc2l6ZWRTdGFjayhzdGFja1BhdGg6IHN0cmluZykge1xuICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShzdGFja1BhdGgsIFwibWFuaWZlc3QuanNvblwiKSwgXCJ1dGY4XCIpLFxuICApO1xuXG4gIGNvbnN0IHsgc3ludGhlc2l6ZWRTdGFja1BhdGggfSA9IE9iamVjdC52YWx1ZXMobWFuaWZlc3Quc3RhY2tzKVswXSBhcyBhbnk7XG4gIGNvbnN0IGFic29sdXRlU3RhY2tQYXRoID0gcGF0aC5yZXNvbHZlKHN0YWNrUGF0aCwgc3ludGhlc2l6ZWRTdGFja1BhdGgpO1xuXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgYWJzb2x1dGVTdGFja1BhdGgsXG4gICAgZnMucmVhZEZpbGVTeW5jKGFic29sdXRlU3RhY2tQYXRoLCBcInV0ZjhcIikgK1xuICAgICAgXCJXZWlyZCB0ZXh0IHRoYXQgbWFrZXMgdGhlIEpTT04gZmlsZSBpbnZhbGlkXCIsXG4gICAgXCJ1dGY4XCIsXG4gICk7XG59XG5cbmRlc2NyaWJlKFwiZGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmdcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBjb21wYXJlIHNpbXBsZSBpdGVtc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFzeW1ldHJpY0RlZXBFcXVhbElnbm9yaW5nT2JqZWN0Q2FzaW5nKDEsIDEpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChhc3ltZXRyaWNEZWVwRXF1YWxJZ25vcmluZ09iamVjdENhc2luZyhcIjFcIiwgXCIxXCIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChhc3ltZXRyaWNEZWVwRXF1YWxJZ25vcmluZ09iamVjdENhc2luZyh0cnVlLCB0cnVlKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYXN5bWV0cmljRGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmcoZmFsc2UsIGZhbHNlKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYXN5bWV0cmljRGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmcobnVsbCwgbnVsbCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGFzeW1ldHJpY0RlZXBFcXVhbElnbm9yaW5nT2JqZWN0Q2FzaW5nKHVuZGVmaW5lZCwgdW5kZWZpbmVkKSkudG9CZShcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICBleHBlY3QoYXN5bWV0cmljRGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmcoWzEsIDIsIDNdLCBbMSwgMiwgM10pKS50b0JlKFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGV4cGVjdChcbiAgICAgIGFzeW1ldHJpY0RlZXBFcXVhbElnbm9yaW5nT2JqZWN0Q2FzaW5nKHsgYTogMSwgYjogMiB9LCB7IGE6IDEsIGI6IDIgfSksXG4gICAgKS50b0JlKHRydWUpO1xuXG4gICAgZXhwZWN0KGFzeW1ldHJpY0RlZXBFcXVhbElnbm9yaW5nT2JqZWN0Q2FzaW5nKDEsIDIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgY29tcGFyZSBhcnJheXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChhc3ltZXRyaWNEZWVwRXF1YWxJZ25vcmluZ09iamVjdENhc2luZyhbMSwgMiwgM10sIFsxLCAyLCAzXSkpLnRvQmUoXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBleHBlY3QoYXN5bWV0cmljRGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmcoWzEsIDIsIDNdLCBbMSwgMiwgNF0pKS50b0JlKFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICBhc3ltZXRyaWNEZWVwRXF1YWxJZ25vcmluZ09iamVjdENhc2luZyhbMSwgMiwgM10sIFsxLCAyLCAzLCA0XSksXG4gICAgKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgY29tcGFyZSBvYmplY3RzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBhc3ltZXRyaWNEZWVwRXF1YWxJZ25vcmluZ09iamVjdENhc2luZyh7IGE6IDEsIGI6IDIgfSwgeyBhOiAxLCBiOiAyIH0pLFxuICAgICkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoXG4gICAgICBhc3ltZXRyaWNEZWVwRXF1YWxJZ25vcmluZ09iamVjdENhc2luZyhcbiAgICAgICAgeyBhOiB7IGM6IDMgfSwgYjogMiB9LFxuICAgICAgICB7IGE6IHsgYzogMyB9LCBiOiAyIH0sXG4gICAgICApLFxuICAgICkudG9CZSh0cnVlKTtcblxuICAgIGV4cGVjdChcbiAgICAgIGFzeW1ldHJpY0RlZXBFcXVhbElnbm9yaW5nT2JqZWN0Q2FzaW5nKFxuICAgICAgICB7IGE6IDMsIGI6IDIgfSxcbiAgICAgICAgeyBhOiB7IGM6IDMgfSwgYjogMiB9LFxuICAgICAgKSxcbiAgICApLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChcbiAgICAgIGFzeW1ldHJpY0RlZXBFcXVhbElnbm9yaW5nT2JqZWN0Q2FzaW5nKFxuICAgICAgICB7IGE6IHsgYzogMyB9LCBiOiAyIH0sXG4gICAgICAgIHsgYTogMywgYjogMiB9LFxuICAgICAgKSxcbiAgICApLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInNob3VsZCBpZ25vcmUgY2FzZSB3aGVuIGNvbXBhcmluZyBvYmplY3Qga2V5c1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXN5bWV0cmljRGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmcoXG4gICAgICAgIHsgYTogMSwgZm9vQmFyOiAyIH0sXG4gICAgICAgIHsgYTogMSwgZm9vX2JhcjogMiB9LFxuICAgICAgKSxcbiAgICApLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KFxuICAgICAgYXN5bWV0cmljRGVlcEVxdWFsSWdub3JpbmdPYmplY3RDYXNpbmcoXG4gICAgICAgIHsgYTogeyBmb29CYXI6IDIgfSB9LFxuICAgICAgICB7IGE6IHsgZm9vX2JhcjogMiB9IH0sXG4gICAgICApLFxuICAgICkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgaWdub3JlIGtleXMgbm90IHByZXNlbnQgaW4gZXhwZWN0YXRpb25cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGFzeW1ldHJpY0RlZXBFcXVhbElnbm9yaW5nT2JqZWN0Q2FzaW5nKFxuICAgICAgICB7IGE6IHsgZm9vQmFyOiAyIH0gfSxcbiAgICAgICAgeyBhOiB7IGZvb19iYXI6IDIgfSwgYjogMyB9LFxuICAgICAgKSxcbiAgICApLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwibWF0Y2hlcnNcIiwgKCkgPT4ge1xuICBjb25zdCB0b0hhdmVSZXNvdXJjZVdpdGhQcm9wZXJ0aWVzID0gZ2V0VG9IYXZlUmVzb3VyY2VXaXRoUHJvcGVydGllcygpO1xuICBkZXNjcmliZShcInRvSGF2ZVJlc291cmNlV2l0aFByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgIGxldCBzeW50aGVzaXplZFN0YWNrOiBzdHJpbmc7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBzeW50aGVzaXplZFN0YWNrID0gVGVzdGluZy5zeW50aFNjb3BlKChzY29wZSkgPT4ge1xuICAgICAgICBuZXcgVGVzdFJlc291cmNlKHNjb3BlLCBcInRlc3RcIiwgeyBuYW1lOiBcInRlc3RcIiwgdGFnczogeyBmb286IFwiYmFyXCIgfSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFzcyB3aXRoIG5vIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gdG9IYXZlUmVzb3VyY2VXaXRoUHJvcGVydGllcyhzeW50aGVzaXplZFN0YWNrLCBUZXN0UmVzb3VyY2UpO1xuXG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChyZXMubWVzc2FnZSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgICAgXCJFeHBlY3RlZCBubyB0ZXN0X3Jlc291cmNlIHdpdGggcHJvcGVydGllcyB7fSB0byBiZSBwcmVzZW50IGluIHN5bnRoZXNpemVkIHN0YWNrLlxuICAgICAgICBGb3VuZCAxIHRlc3RfcmVzb3VyY2UgcmVzb3VyY2VzIGluc3RlYWQ6XG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIm5hbWVcIjogXCJ0ZXN0XCIsXG4gICAgICAgICAgICBcInRhZ3NcIjoge1xuICAgICAgICAgICAgICBcImZvb1wiOiBcImJhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXCJcbiAgICAgIGApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZmFpbCB3aXRoIHdyb25nIHJlc291Y2VcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gdG9IYXZlUmVzb3VyY2VXaXRoUHJvcGVydGllcyhcbiAgICAgICAgc3ludGhlc2l6ZWRTdGFjayxcbiAgICAgICAgVGVzdERhdGFTb3VyY2UsXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVGYWxzeSgpO1xuICAgICAgZXhwZWN0KHJlcy5tZXNzYWdlKS50b01hdGNoSW5saW5lU25hcHNob3QoYFxuICAgICAgICBcIkV4cGVjdGVkIHRlc3RfZGF0YV9zb3VyY2Ugd2l0aCBwcm9wZXJ0aWVzIHt9IHRvIGJlIHByZXNlbnQgaW4gc3ludGhlc2l6ZWQgc3RhY2suXG4gICAgICAgIEZvdW5kIG5vIHRlc3RfZGF0YV9zb3VyY2UgcmVzb3VyY2VzIGluc3RlYWRcIlxuICAgICAgYCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB3b3JrIG9uIG5lc3RlZCBlbGVtZW50c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSB0b0hhdmVSZXNvdXJjZVdpdGhQcm9wZXJ0aWVzKHN5bnRoZXNpemVkU3RhY2ssIFRlc3RSZXNvdXJjZSwge1xuICAgICAgICB0YWdzOiB7IGZvbzogXCJiYXJcIiB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXMucGFzcykudG9CZVRydXRoeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZmFpbCBpZiBubyBpdGVtIGlzIGZvdW5kIGFzIGFzc2VydGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHRvSGF2ZVJlc291cmNlV2l0aFByb3BlcnRpZXMoc3ludGhlc2l6ZWRTdGFjaywgRG9ja2VySW1hZ2UpO1xuXG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVGYWxzeSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInRvSGF2ZURhdGFTb3VyY2VXaXRoUHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgdG9IYXZlRGF0YVNvdXJjZVdpdGhQcm9wZXJ0aWVzID0gZ2V0VG9IYXZlRGF0YVNvdXJjZVdpdGhQcm9wZXJ0aWVzKCk7XG4gICAgbGV0IHN5bnRoZXNpemVkU3RhY2s6IGFueTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHN5bnRoZXNpemVkU3RhY2sgPSBUZXN0aW5nLnN5bnRoU2NvcGUoKHNjb3BlKSA9PiB7XG4gICAgICAgIG5ldyBUZXN0UmVzb3VyY2Uoc2NvcGUsIFwidGVzdFwiLCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgICBuZXcgVGVzdERhdGFTb3VyY2Uoc2NvcGUsIFwidGVzdC1kYXRhLXNvdXJjZVwiLCB7IG5hbWU6IFwiZGF0YVwiIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBub3QgZmluZCByZXNvdXJjZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gdG9IYXZlRGF0YVNvdXJjZVdpdGhQcm9wZXJ0aWVzKFxuICAgICAgICBzeW50aGVzaXplZFN0YWNrLFxuICAgICAgICBUZXN0UmVzb3VyY2UsXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVGYWxzeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZmluZCBkYXRhIHNvdXJjZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gdG9IYXZlRGF0YVNvdXJjZVdpdGhQcm9wZXJ0aWVzKFxuICAgICAgICBzeW50aGVzaXplZFN0YWNrLFxuICAgICAgICBUZXN0RGF0YVNvdXJjZSxcbiAgICAgICAgeyBuYW1lOiBcImRhdGFcIiB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHJlcy5wYXNzKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwidG9IYXZlUHJvdmlkZXJXaXRoUHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgdG9IYXZlUHJvdmlkZXJXaXRoUHJvcGVydGllcyA9IGdldFRvSGF2ZVByb3ZpZGVyV2l0aFByb3BlcnRpZXMoKTtcbiAgICBsZXQgc3ludGhlc2l6ZWRTdGFjazogYW55O1xuICAgIGxldCBzeW50aGVzaXplZFN0YWNrTm9Qcm92aWRlcjogYW55O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgc3ludGhlc2l6ZWRTdGFjayA9IFRlc3Rpbmcuc3ludGhTY29wZSgoc2NvcGUpID0+IHtcbiAgICAgICAgbmV3IERvY2tlclByb3ZpZGVyKHNjb3BlLCBcInRlc3QtcHJvdmlkZXJcIiwge1xuICAgICAgICAgIGFsaWFzOiBcInRlc3QtYWxpYXNcIixcbiAgICAgICAgICBzc2hfb3B0czogW1wiLW9cIiwgXCJTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm9cIl0sXG4gICAgICAgIH0pO1xuICAgICAgICBuZXcgRG9ja2VySW1hZ2Uoc2NvcGUsIFwidGVzdC1pbWFnZVwiLCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHN5bnRoZXNpemVkU3RhY2tOb1Byb3ZpZGVyID0gVGVzdGluZy5zeW50aFNjb3BlKChzY29wZSkgPT4ge1xuICAgICAgICBuZXcgRG9ja2VySW1hZ2Uoc2NvcGUsIFwidGVzdFwiLCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBmaW5kIHByb3ZpZGVyXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHRvSGF2ZVByb3ZpZGVyV2l0aFByb3BlcnRpZXMoXG4gICAgICAgIHN5bnRoZXNpemVkU3RhY2ssXG4gICAgICAgIERvY2tlclByb3ZpZGVyLFxuICAgICAgICB7IGFsaWFzOiBcInRlc3QtYWxpYXNcIiwgc3NoX29wdHM6IFtcIi1vXCIsIFwiU3RyaWN0SG9zdEtleUNoZWNraW5nPW5vXCJdIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVUcnV0aHkoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBmaW5kIHByb3ZpZGVyXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHRvSGF2ZVByb3ZpZGVyV2l0aFByb3BlcnRpZXMoXG4gICAgICAgIHN5bnRoZXNpemVkU3RhY2tOb1Byb3ZpZGVyLFxuICAgICAgICBEb2NrZXJQcm92aWRlcixcbiAgICAgICAge30sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVGYWxzeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IGZpbmQgcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHRvSGF2ZVByb3ZpZGVyV2l0aFByb3BlcnRpZXMoc3ludGhlc2l6ZWRTdGFjaywgVGVzdFJlc291cmNlKTtcblxuICAgICAgZXhwZWN0KHJlcy5wYXNzKS50b0JlRmFsc3koKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBmaW5kIGRhdGEgc291cmNlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSB0b0hhdmVQcm92aWRlcldpdGhQcm9wZXJ0aWVzKFxuICAgICAgICBzeW50aGVzaXplZFN0YWNrLFxuICAgICAgICBUZXN0RGF0YVNvdXJjZSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChyZXMucGFzcykudG9CZUZhbHN5KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwidG9CZVZhbGlkVGVycmFmb3JtXCIsICgpID0+IHtcbiAgICBpdChcImZhaWxzIGlmIGFueXRoaW5nIGJ1dCBhIHBhdGggaXMgcGFzc2VkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHRvQmVWYWxpZFRlcnJhZm9ybShcIm5vdCBhIHBhdGhcIik7XG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVGYWxzeSgpO1xuICAgICAgZXhwZWN0KHJlcy5tZXNzYWdlKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICAgIGBcIkV4cGVjdGVkIHN1YmplY3QgdG8gYmUgYSB0ZXJyYWZvcm0gZGlyZWN0b3J5OiBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBzdGF0ICdub3QgYSBwYXRoJ1wiYCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInN1Y2NlZWRzIGlmIHRoZSB0ZXJyYWZvcm0gY29uZmlnIHBhc3NlZCBpcyB2YWxpZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3RcIik7XG5cbiAgICAgIG5ldyBEb2NrZXJQcm92aWRlcihzdGFjaywgXCJwcm92aWRlclwiLCB7fSk7XG4gICAgICBuZXcgRG9ja2VySW1hZ2Uoc3RhY2ssIFwidGVzdFwiLCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSB0b0JlVmFsaWRUZXJyYWZvcm0oVGVzdGluZy5mdWxsU3ludGgoc3RhY2spKTtcbiAgICAgIGV4cGVjdChyZXMucGFzcykudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KHJlcy5tZXNzYWdlKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICAgIGBcIkV4cGVjdGVkIHN1YmplY3Qgbm90IHRvIGJlIGEgdmFsaWQgdGVycmFmb3JtIHN0YWNrXCJgLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwiZmFpbHMgaWYgdGhlIHRlcnJhZm9ybSBjb25maWcgcGFzc2VkIGlzIGludmFsaWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFRlcnJhZm9ybVN0YWNrKGFwcCwgXCJ0ZXN0XCIpO1xuXG4gICAgICBuZXcgRG9ja2VyUHJvdmlkZXIoc3RhY2ssIFwicHJvdmlkZXJcIiwge30pO1xuICAgICAgbmV3IERvY2tlckltYWdlKHN0YWNrLCBcInRlc3RcIiwgeyBuYW1lOiBcInRlc3RcIiB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcbiAgICAgIGNvcnJ1cHRTeW50aGVzaXplZFN0YWNrKHJlc3VsdCk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IHRvQmVWYWxpZFRlcnJhZm9ybShyZXN1bHQpO1xuICAgICAgZXhwZWN0KHJlcy5wYXNzKS50b0JlRmFsc3koKTtcbiAgICAgIGV4cGVjdChyZXMubWVzc2FnZSkudG9FcXVhbChcbiAgICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoXG4gICAgICAgICAgXCJFeHBlY3RlZCBzdWJqZWN0IHRvIGJlIGEgdmFsaWQgdGVycmFmb3JtIHN0YWNrXCIsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgY29uc3QgdGYxXzMgPVxuICAgICAgICBcIlRoZXJlIGFyZSBzb21lIHByb2JsZW1zIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24sIGRlc2NyaWJlZCBiZWxvd1wiO1xuICAgICAgY29uc3QgdGYxXzQgPVxuICAgICAgICBcIlRlcnJhZm9ybSBlbmNvdW50ZXJlZCBwcm9ibGVtcyBkdXJpbmcgaW5pdGlhbGlzYXRpb24sIGluY2x1ZGluZyBwcm9ibGVtc1xcbiB3aXRoIHRoZSBjb25maWd1cmF0aW9uLCBkZXNjcmliZWQgYmVsb3dcIjtcbiAgICAgIGNvbnN0IHRmMV81ID0gXCJFeHRyYSBjaGFyYWN0ZXJzIGFwcGVhciBhZnRlciB0aGUgSlNPTiB2YWx1ZVwiO1xuXG4gICAgICBleHBlY3QocmVzLm1lc3NhZ2UpLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZyhuZXcgUmVnRXhwKGAke3RmMV8zfXwke3RmMV80fXwke3RmMV81fWApKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwidG9QbGFuU3VjY2Vzc2Z1bGx5XCIsICgpID0+IHtcbiAgICBpdChcImZhaWxzIGlmIGFueXRoaW5nIGJ1dCBhIHBhdGggaXMgcGFzc2VkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHRvUGxhblN1Y2Nlc3NmdWxseShcIm5vdCBhIHBhdGhcIik7XG4gICAgICBleHBlY3QocmVzLnBhc3MpLnRvQmVGYWxzeSgpO1xuICAgICAgZXhwZWN0KHJlcy5tZXNzYWdlKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICAgIGBcIkV4cGVjdGVkIHN1YmplY3QgdG8gYmUgYSB0ZXJyYWZvcm0gZGlyZWN0b3J5OiBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBzdGF0ICdub3QgYSBwYXRoJ1wiYCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInN1Y2NlZWRzIGlmIHRoZSB0ZXJyYWZvcm0gY29uZmlnIHBhc3NlZCBpcyB2YWxpZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3RcIik7XG5cbiAgICAgIG5ldyBEb2NrZXJQcm92aWRlcihzdGFjaywgXCJwcm92aWRlclwiLCB7fSk7XG4gICAgICBuZXcgRG9ja2VySW1hZ2Uoc3RhY2ssIFwidGVzdFwiLCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSB0b1BsYW5TdWNjZXNzZnVsbHkoVGVzdGluZy5mdWxsU3ludGgoc3RhY2spKTtcblxuICAgICAgZXhwZWN0KHJlcy5wYXNzKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QocmVzLm1lc3NhZ2UpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgICAgYFwiRXhwZWN0ZWQgc3ViamVjdCBub3QgdG8gcGxhbiBzdWNjZXNzZnVsbHlcImAsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJmYWlscyBpZiB0aGUgdGVycmFmb3JtIGNvbmZpZyBwYXNzZWQgaXMgaW52YWxpZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3RcIik7XG5cbiAgICAgIG5ldyBEb2NrZXJQcm92aWRlcihzdGFjaywgXCJwcm92aWRlclwiLCB7fSk7XG4gICAgICBuZXcgRG9ja2VySW1hZ2Uoc3RhY2ssIFwidGVzdFwiLCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7XG4gICAgICBjb3JydXB0U3ludGhlc2l6ZWRTdGFjayhyZXN1bHQpO1xuXG4gICAgICBjb25zdCByZXMgPSB0b1BsYW5TdWNjZXNzZnVsbHkocmVzdWx0KTtcbiAgICAgIGV4cGVjdChyZXMucGFzcykudG9CZUZhbHN5KCk7XG4gICAgICBleHBlY3QocmVzLm1lc3NhZ2UpLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiRXhwZWN0ZWQgc3ViamVjdCB0byBwbGFuIHN1Y2Nlc3NmdWxseVwiKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// Copyright (c) HashiCorp, Inc
|
|
4
|
-
// SPDX-License-Identifier: MPL-2.0
|
|
5
|
-
const __1 = require("../../..");
|
|
6
|
-
const helper_1 = require("../../../../test/helper");
|
|
7
|
-
const data_source_1 = require("../../../../test/helper/data-source");
|
|
8
|
-
const constructs_1 = require("constructs");
|
|
9
|
-
describe("#synthScope", () => {
|
|
10
|
-
test("basic example", () => {
|
|
11
|
-
expect(__1.Testing.synthScope((stack) => {
|
|
12
|
-
new data_source_1.TestDataSource(stack, "test-data-source", {
|
|
13
|
-
name: "foo",
|
|
14
|
-
});
|
|
15
|
-
new helper_1.TestResource(stack, "test-resource", {
|
|
16
|
-
name: "bar",
|
|
17
|
-
});
|
|
18
|
-
})).toMatchInlineSnapshot(`
|
|
19
|
-
"{
|
|
20
|
-
"data": {
|
|
21
|
-
"test_data_source": {
|
|
22
|
-
"test-data-source": {
|
|
23
|
-
"name": "foo"
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
"resource": {
|
|
28
|
-
"test_resource": {
|
|
29
|
-
"test-resource": {
|
|
30
|
-
"name": "bar"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}"
|
|
35
|
-
`);
|
|
36
|
-
});
|
|
37
|
-
test("using resource", () => {
|
|
38
|
-
class MyResource extends constructs_1.Construct {
|
|
39
|
-
constructor(scope, id) {
|
|
40
|
-
super(scope, id);
|
|
41
|
-
this.resource = new helper_1.TestResource(this, "test-resource", {
|
|
42
|
-
name: "bar",
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
expect(__1.Testing.synthScope((stack) => {
|
|
47
|
-
const res = new MyResource(stack, "my-resource");
|
|
48
|
-
new helper_1.TestResource(stack, "resource", {
|
|
49
|
-
name: res.resource.stringValue,
|
|
50
|
-
});
|
|
51
|
-
})).toMatchInlineSnapshot(`
|
|
52
|
-
"{
|
|
53
|
-
"resource": {
|
|
54
|
-
"test_resource": {
|
|
55
|
-
"my-resource_test-resource_4F34504B": {
|
|
56
|
-
"name": "bar"
|
|
57
|
-
},
|
|
58
|
-
"resource": {
|
|
59
|
-
"name": "\${test_resource.my-resource_test-resource_4F34504B.string_value}"
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}"
|
|
64
|
-
`);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluZGV4LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLGdDQUFtQztBQUNuQyxvREFBdUQ7QUFDdkQscUVBQXFFO0FBQ3JFLDJDQUF1QztBQUV2QyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtRQUN6QixNQUFNLENBQ0osV0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNCLElBQUksNEJBQWMsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQzVDLElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1lBRUgsSUFBSSxxQkFBWSxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUU7Z0JBQ3ZDLElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQnZCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUMxQixNQUFNLFVBQVcsU0FBUSxzQkFBUztZQUdoQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtnQkFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHFCQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtvQkFDdEQsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUNGO1FBQ0QsTUFBTSxDQUNKLFdBQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDakQsSUFBSSxxQkFBWSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVc7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7OztLQWF2QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFRlc3RpbmcgfSBmcm9tIFwiLi4vLi4vLi5cIjtcbmltcG9ydCB7IFRlc3RSZXNvdXJjZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90ZXN0L2hlbHBlclwiO1xuaW1wb3J0IHsgVGVzdERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdGVzdC9oZWxwZXIvZGF0YS1zb3VyY2VcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmRlc2NyaWJlKFwiI3N5bnRoU2NvcGVcIiwgKCkgPT4ge1xuICB0ZXN0KFwiYmFzaWMgZXhhbXBsZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgVGVzdGluZy5zeW50aFNjb3BlKChzdGFjaykgPT4ge1xuICAgICAgICBuZXcgVGVzdERhdGFTb3VyY2Uoc3RhY2ssIFwidGVzdC1kYXRhLXNvdXJjZVwiLCB7XG4gICAgICAgICAgbmFtZTogXCJmb29cIixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgXCJ0ZXN0LXJlc291cmNlXCIsIHtcbiAgICAgICAgICBuYW1lOiBcImJhclwiLFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFwie1xuICAgICAgICBcImRhdGFcIjoge1xuICAgICAgICAgIFwidGVzdF9kYXRhX3NvdXJjZVwiOiB7XG4gICAgICAgICAgICBcInRlc3QtZGF0YS1zb3VyY2VcIjoge1xuICAgICAgICAgICAgICBcIm5hbWVcIjogXCJmb29cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXNvdXJjZVwiOiB7XG4gICAgICAgICAgXCJ0ZXN0X3Jlc291cmNlXCI6IHtcbiAgICAgICAgICAgIFwidGVzdC1yZXNvdXJjZVwiOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBcImJhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XCJcbiAgICBgKTtcbiAgfSk7XG5cbiAgdGVzdChcInVzaW5nIHJlc291cmNlXCIsICgpID0+IHtcbiAgICBjbGFzcyBNeVJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAgIHB1YmxpYyByZXNvdXJjZTogVGVzdFJlc291cmNlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBUZXN0UmVzb3VyY2UodGhpcywgXCJ0ZXN0LXJlc291cmNlXCIsIHtcbiAgICAgICAgICBuYW1lOiBcImJhclwiLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZXhwZWN0KFxuICAgICAgVGVzdGluZy5zeW50aFNjb3BlKChzdGFjaykgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgTXlSZXNvdXJjZShzdGFjaywgXCJteS1yZXNvdXJjZVwiKTtcbiAgICAgICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgXCJyZXNvdXJjZVwiLCB7XG4gICAgICAgICAgbmFtZTogcmVzLnJlc291cmNlLnN0cmluZ1ZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFwie1xuICAgICAgICBcInJlc291cmNlXCI6IHtcbiAgICAgICAgICBcInRlc3RfcmVzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCJteS1yZXNvdXJjZV90ZXN0LXJlc291cmNlXzRGMzQ1MDRCXCI6IHtcbiAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiYmFyXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlc291cmNlXCI6IHtcbiAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiXFwke3Rlc3RfcmVzb3VyY2UubXktcmVzb3VyY2VfdGVzdC1yZXNvdXJjZV80RjM0NTA0Qi5zdHJpbmdfdmFsdWV9XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cIlxuICAgIGApO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// Copyright (c) HashiCorp, Inc
|
|
4
|
-
// SPDX-License-Identifier: MPL-2.0
|
|
5
|
-
const jest_1 = require("../jest");
|
|
6
|
-
const index_1 = require("../../index");
|
|
7
|
-
const data_source_1 = require("../../../../test/helper/data-source");
|
|
8
|
-
const resource_1 = require("../../../../test/helper/resource");
|
|
9
|
-
describe("jest-adapter", () => {
|
|
10
|
-
beforeAll(() => {
|
|
11
|
-
(0, jest_1.setupJest)();
|
|
12
|
-
});
|
|
13
|
-
it("should add extra matchers", () => {
|
|
14
|
-
expect(expect(true).toHaveResource).toBeDefined();
|
|
15
|
-
expect(expect(true).toHaveResourceWithProperties).toBeDefined();
|
|
16
|
-
});
|
|
17
|
-
describe("jestPassEvaluation", () => {
|
|
18
|
-
it("fails with jest error message", () => {
|
|
19
|
-
expect(() => expect(index_1.Testing.synthScope((stack) => {
|
|
20
|
-
new data_source_1.TestDataSource(stack, "test-data-source", {
|
|
21
|
-
name: "foo",
|
|
22
|
-
});
|
|
23
|
-
new resource_1.TestResource(stack, "test-resource", {
|
|
24
|
-
name: "bar",
|
|
25
|
-
});
|
|
26
|
-
})).toHaveResourceWithProperties(resource_1.TestResource, {
|
|
27
|
-
name: "bazs",
|
|
28
|
-
foo: expect.arrayContaining([expect.anything()]),
|
|
29
|
-
})).toThrowErrorMatchingInlineSnapshot(`
|
|
30
|
-
"Expected test_resource with properties {"name":"bazs","foo":"expect.ArrayContaining"} to be present in synthesized stack.
|
|
31
|
-
Found 1 test_resource resources instead:
|
|
32
|
-
[
|
|
33
|
-
{
|
|
34
|
-
"name": "bar"
|
|
35
|
-
}
|
|
36
|
-
]"
|
|
37
|
-
`);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiamVzdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxrQ0FBb0M7QUFDcEMsdUNBQXNDO0FBQ3RDLHFFQUFxRTtBQUNyRSwrREFBZ0U7QUFFaEUsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUEsZ0JBQVMsR0FBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osZUFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMzQixJQUFJLDRCQUFjLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO29CQUM1QyxJQUFJLEVBQUUsS0FBSztpQkFDWixDQUFDLENBQUM7Z0JBRUgsSUFBSSx1QkFBWSxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUU7b0JBQ3ZDLElBQUksRUFBRSxLQUFLO2lCQUNaLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUNILENBQUMsNEJBQTRCLENBQUMsdUJBQVksRUFBRTtnQkFDM0MsSUFBSSxFQUFFLE1BQU07Z0JBQ1osR0FBRyxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUNqRCxDQUFDLENBQ0gsQ0FBQyxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7T0FRcEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHNldHVwSmVzdCB9IGZyb20gXCIuLi9qZXN0XCI7XG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7XG5pbXBvcnQgeyBUZXN0RGF0YVNvdXJjZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90ZXN0L2hlbHBlci9kYXRhLXNvdXJjZVwiO1xuaW1wb3J0IHsgVGVzdFJlc291cmNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3Rlc3QvaGVscGVyL3Jlc291cmNlXCI7XG5cbmRlc2NyaWJlKFwiamVzdC1hZGFwdGVyXCIsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBzZXR1cEplc3QoKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgYWRkIGV4dHJhIG1hdGNoZXJzXCIsICgpID0+IHtcbiAgICBleHBlY3QoZXhwZWN0KHRydWUpLnRvSGF2ZVJlc291cmNlKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChleHBlY3QodHJ1ZSkudG9IYXZlUmVzb3VyY2VXaXRoUHJvcGVydGllcykudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJqZXN0UGFzc0V2YWx1YXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwiZmFpbHMgd2l0aCBqZXN0IGVycm9yIG1lc3NhZ2VcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGV4cGVjdChcbiAgICAgICAgICBUZXN0aW5nLnN5bnRoU2NvcGUoKHN0YWNrKSA9PiB7XG4gICAgICAgICAgICBuZXcgVGVzdERhdGFTb3VyY2Uoc3RhY2ssIFwidGVzdC1kYXRhLXNvdXJjZVwiLCB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiZm9vXCIsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgXCJ0ZXN0LXJlc291cmNlXCIsIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJiYXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLnRvSGF2ZVJlc291cmNlV2l0aFByb3BlcnRpZXMoVGVzdFJlc291cmNlLCB7XG4gICAgICAgICAgbmFtZTogXCJiYXpzXCIsXG4gICAgICAgICAgZm9vOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFtleHBlY3QuYW55dGhpbmcoKV0pLFxuICAgICAgICB9KSxcbiAgICAgICkudG9UaHJvd0Vycm9yTWF0Y2hpbmdJbmxpbmVTbmFwc2hvdChgXG4gICAgICAgIFwiRXhwZWN0ZWQgdGVzdF9yZXNvdXJjZSB3aXRoIHByb3BlcnRpZXMge1wibmFtZVwiOlwiYmF6c1wiLFwiZm9vXCI6XCJleHBlY3QuQXJyYXlDb250YWluaW5nXCJ9IHRvIGJlIHByZXNlbnQgaW4gc3ludGhlc2l6ZWQgc3RhY2suXG4gICAgICAgIEZvdW5kIDEgdGVzdF9yZXNvdXJjZSByZXNvdXJjZXMgaW5zdGVhZDpcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBcImJhclwiXG4gICAgICAgICAgfVxuICAgICAgICBdXCJcbiAgICAgIGApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
The MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2013-2024 Brian J. Brennan
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal in
|
|
7
|
-
the Software without restriction, including without limitation the rights to use,
|
|
8
|
-
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
|
9
|
-
Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
-
subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
16
|
-
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
17
|
-
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
|
18
|
-
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
19
|
-
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# buffer-crc32
|
|
2
|
-
|
|
3
|
-
[](https://npmjs.org/package/buffer-crc32)
|
|
4
|
-
[](https://github.com/brianloveswords/buffer-crc32/actions/workflows/ci.yml)
|
|
5
|
-
|
|
6
|
-
crc32 that works with binary data and fancy character sets, outputs
|
|
7
|
-
buffer, signed or unsigned data and has tests.
|
|
8
|
-
|
|
9
|
-
Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix
|
|
10
|
-
|
|
11
|
-
This package requires Node 8+ to work.
|
|
12
|
-
|
|
13
|
-
# install
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
npm install buffer-crc32
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
# example
|
|
20
|
-
|
|
21
|
-
```js
|
|
22
|
-
const crc32 = require('buffer-crc32');
|
|
23
|
-
// works with buffers
|
|
24
|
-
const buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]);
|
|
25
|
-
crc32(buf); // -> <Buffer 94 5a ab 4a>
|
|
26
|
-
|
|
27
|
-
// has convenience methods for getting signed or unsigned ints
|
|
28
|
-
crc32.signed(buf); // -> -1805997238
|
|
29
|
-
crc32.unsigned(buf); // -> 2488970058
|
|
30
|
-
|
|
31
|
-
// will cast to buffer if given a string, so you can
|
|
32
|
-
// directly use foreign characters safely
|
|
33
|
-
crc32('自動販売機'); // -> <Buffer cb 03 1a c5>
|
|
34
|
-
|
|
35
|
-
// and works in append mode too
|
|
36
|
-
const partialCrc = crc32('hey');
|
|
37
|
-
const partialCrc = crc32(' ', partialCrc);
|
|
38
|
-
const partialCrc = crc32('sup', partialCrc);
|
|
39
|
-
const partialCrc = crc32(' ', partialCrc);
|
|
40
|
-
const finalCrc = crc32('bros', partialCrc); // -> <Buffer 47 fa 55 70>
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
# tests
|
|
44
|
-
|
|
45
|
-
This was tested against the output of zlib's crc32 method. You can run
|
|
46
|
-
the tests with`npm test` (requires tap)
|
|
47
|
-
|
|
48
|
-
# see also
|
|
49
|
-
|
|
50
|
-
https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also
|
|
51
|
-
supports buffer inputs and return unsigned ints (thanks @tjholowaychuk).
|
|
52
|
-
|
|
53
|
-
# license
|
|
54
|
-
|
|
55
|
-
MIT/X11
|