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.
Files changed (125) hide show
  1. package/.jsii +1560 -1559
  2. package/.spec.swcrc +22 -0
  3. package/jest.config.js +18 -15
  4. package/lib/_tokens.js +1 -1
  5. package/lib/annotations.js +2 -2
  6. package/lib/app.js +2 -2
  7. package/lib/aspect.js +2 -2
  8. package/lib/backends/azurerm-backend.js +3 -3
  9. package/lib/backends/cloud-backend.js +5 -5
  10. package/lib/backends/consul-backend.js +3 -3
  11. package/lib/backends/cos-backend.js +3 -3
  12. package/lib/backends/gcs-backend.js +3 -3
  13. package/lib/backends/http-backend.js +3 -3
  14. package/lib/backends/index.js +1 -1
  15. package/lib/backends/local-backend.js +3 -3
  16. package/lib/backends/oss-backend.js +3 -3
  17. package/lib/backends/pg-backend.js +3 -3
  18. package/lib/backends/remote-backend.js +5 -5
  19. package/lib/backends/s3-backend.js +3 -3
  20. package/lib/backends/swift-backend.js +3 -3
  21. package/lib/complex-computed-list.js +24 -24
  22. package/lib/errors.js +1 -1
  23. package/lib/features.js +1 -1
  24. package/lib/functions/helpers.js +1 -1
  25. package/lib/functions/terraform-functions.generated.js +2 -2
  26. package/lib/hcl/render.js +1 -1
  27. package/lib/importable-resource.js +2 -2
  28. package/lib/index.js +1 -1
  29. package/lib/manifest.js +2 -2
  30. package/lib/private/fs.d.ts +20 -5
  31. package/lib/private/fs.js +43 -69
  32. package/lib/private/unique.js +1 -1
  33. package/lib/resource.js +2 -2
  34. package/lib/runtime.js +1 -1
  35. package/lib/synthesize/index.js +1 -1
  36. package/lib/synthesize/synthesizer.js +1 -1
  37. package/lib/synthesize/types.js +1 -1
  38. package/lib/terraform-addressable.js +1 -1
  39. package/lib/terraform-asset.js +2 -2
  40. package/lib/terraform-backend.js +2 -2
  41. package/lib/terraform-conditions.js +1 -1
  42. package/lib/terraform-count.js +2 -2
  43. package/lib/terraform-data-resource.js +2 -2
  44. package/lib/terraform-data-source.js +2 -2
  45. package/lib/terraform-dependable.js +1 -1
  46. package/lib/terraform-dynamic-block.js +1 -1
  47. package/lib/terraform-dynamic-expression.js +1 -1
  48. package/lib/terraform-element.js +2 -2
  49. package/lib/terraform-functions.js +2 -2
  50. package/lib/terraform-hcl-module.js +2 -2
  51. package/lib/terraform-iterator.js +6 -6
  52. package/lib/terraform-local.js +2 -2
  53. package/lib/terraform-module-asset.js +1 -1
  54. package/lib/terraform-module.js +2 -2
  55. package/lib/terraform-operators.js +2 -2
  56. package/lib/terraform-output.js +2 -2
  57. package/lib/terraform-provider.js +2 -2
  58. package/lib/terraform-provisioner.js +2 -2
  59. package/lib/terraform-remote-state.js +2 -2
  60. package/lib/terraform-resource-targets.js +2 -2
  61. package/lib/terraform-resource.js +2 -2
  62. package/lib/terraform-stack.js +2 -2
  63. package/lib/terraform-variable.js +3 -3
  64. package/lib/testing/adapters/jest.js +1 -1
  65. package/lib/testing/index.js +2 -2
  66. package/lib/testing/matchers.js +2 -2
  67. package/lib/tfExpression.js +1 -1
  68. package/lib/tokens/index.js +1 -1
  69. package/lib/tokens/lazy.js +3 -3
  70. package/lib/tokens/private/dependency.js +1 -1
  71. package/lib/tokens/private/encoding.js +1 -1
  72. package/lib/tokens/private/intrinsic.js +1 -1
  73. package/lib/tokens/private/resolve.js +1 -1
  74. package/lib/tokens/private/stack-trace.js +1 -1
  75. package/lib/tokens/private/token-map.js +1 -1
  76. package/lib/tokens/private/uniqueid.js +1 -1
  77. package/lib/tokens/resolvable.js +3 -3
  78. package/lib/tokens/string-fragments.js +2 -2
  79. package/lib/tokens/token.js +3 -3
  80. package/lib/tsconfig.tsbuildinfo +1 -0
  81. package/lib/upgrade-id-aspect.js +2 -2
  82. package/lib/util.js +1 -1
  83. package/lib/validateEnvironment.js +1 -1
  84. package/lib/validations/index.js +1 -1
  85. package/lib/validations/validate-binary-version.js +1 -1
  86. package/lib/validations/validate-provider-presence.js +1 -1
  87. package/lib/validations/validate-terraform-version.js +1 -1
  88. package/node_modules/fflate/CHANGELOG.md +115 -0
  89. package/node_modules/{yazl → fflate}/LICENSE +3 -3
  90. package/node_modules/fflate/README.md +558 -0
  91. package/node_modules/fflate/esm/browser.d.ts +1501 -0
  92. package/node_modules/fflate/esm/browser.js +2665 -0
  93. package/node_modules/fflate/esm/index.d.mts +1501 -0
  94. package/node_modules/fflate/esm/index.mjs +2679 -0
  95. package/node_modules/fflate/lib/browser.cjs +2688 -0
  96. package/node_modules/fflate/lib/browser.d.cts +1501 -0
  97. package/node_modules/fflate/lib/index.cjs +2668 -0
  98. package/node_modules/fflate/lib/index.d.ts +1501 -0
  99. package/node_modules/fflate/lib/node-worker.cjs +32 -0
  100. package/node_modules/fflate/lib/node.cjs +2700 -0
  101. package/node_modules/fflate/lib/node.d.cts +1501 -0
  102. package/node_modules/fflate/lib/worker.cjs +20 -0
  103. package/node_modules/fflate/package.json +127 -0
  104. package/node_modules/fflate/umd/index.js +1 -0
  105. package/package.json +95 -89
  106. package/tsconfig.json +6 -3
  107. package/tsconfig.test.json +12 -0
  108. package/lib/testing/__tests__/matchers.test.d.ts +0 -1
  109. package/lib/testing/__tests__/matchers.test.js +0 -205
  110. package/lib/testing/adapters/__tests__/index.test.d.ts +0 -1
  111. package/lib/testing/adapters/__tests__/index.test.js +0 -67
  112. package/lib/testing/adapters/__tests__/jest.test.d.ts +0 -1
  113. package/lib/testing/adapters/__tests__/jest.test.js +0 -41
  114. package/node_modules/buffer-crc32/LICENSE +0 -19
  115. package/node_modules/buffer-crc32/README.md +0 -55
  116. package/node_modules/buffer-crc32/dist/index.cjs +0 -306
  117. package/node_modules/buffer-crc32/dist/index.d.cts +0 -35
  118. package/node_modules/buffer-crc32/dist/index.d.mts +0 -35
  119. package/node_modules/buffer-crc32/dist/index.mjs +0 -304
  120. package/node_modules/buffer-crc32/index.d.ts +0 -35
  121. package/node_modules/buffer-crc32/package.json +0 -54
  122. package/node_modules/yazl/README.md +0 -457
  123. package/node_modules/yazl/index.js +0 -826
  124. package/node_modules/yazl/package.json +0 -34
  125. 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
- [![NPM Version](https://img.shields.io/npm/v/buffer-crc32.svg)](https://npmjs.org/package/buffer-crc32)
4
- [![Build Status](https://github.com/brianloveswords/buffer-crc32/actions/workflows/ci.yml/badge.svg)](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