@cdktn/provider-schema 0.25.0-pre.5 → 0.25.0-pre.51
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/build/__tests__/cache.test.js +18 -8
- package/build/__tests__/provider-schema.test.js +80 -8
- package/build/__tests__/provider-schema.unit.test.js +325 -1
- package/build/__tests__/read-emission-gap-warning.unit.test.js +18 -8
- package/build/cache.js +19 -10
- package/build/emission-check.js +22 -12
- package/build/provider-schema.d.ts +20 -1
- package/build/provider-schema.d.ts.map +1 -1
- package/build/provider-schema.js +218 -16
- package/build/read.js +3 -3
- package/build/util.d.ts +0 -3
- package/build/util.d.ts.map +1 -1
- package/build/util.js +20 -10
- package/package.json +5 -4
- package/src/__tests__/__snapshots__/provider-schema.test.ts.snap +71 -2
- package/src/__tests__/fixtures/local-json-module-provider-aliases/module.tf.json +21 -0
- package/src/__tests__/fixtures/local-mixed-module-provider-aliases/aliases.tf.json +10 -0
- package/src/__tests__/fixtures/local-mixed-module-provider-aliases/module.tf +22 -0
- package/src/__tests__/fixtures/local-module-provider-aliases/module.tf +24 -0
|
@@ -1,11 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Copyright (c) HashiCorp, Inc
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
4
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
38
|
jest.mock("@cdktn/commons", () => ({
|
|
6
39
|
...jest.requireActual("@cdktn/commons"),
|
|
7
40
|
exec: jest.fn(),
|
|
8
41
|
}));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
9
45
|
const commons_1 = require("@cdktn/commons");
|
|
10
46
|
const provider_schema_1 = require("../provider-schema");
|
|
11
47
|
const execMock = commons_1.exec;
|
|
@@ -67,4 +103,292 @@ describe("getFetchingCliVersion", () => {
|
|
|
67
103
|
expect(execMock).toHaveBeenCalledTimes(1);
|
|
68
104
|
});
|
|
69
105
|
});
|
|
70
|
-
|
|
106
|
+
describe("collectModuleProviderAliases", () => {
|
|
107
|
+
it("returns nothing for a module without required_providers", () => {
|
|
108
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)({ variable: { foo: [{}] } })).toEqual([]);
|
|
109
|
+
});
|
|
110
|
+
it("returns nothing for required providers without configuration aliases", () => {
|
|
111
|
+
const parsed = {
|
|
112
|
+
terraform: [
|
|
113
|
+
{ required_providers: [{ aws: { source: "hashicorp/aws" } }] },
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([]);
|
|
117
|
+
});
|
|
118
|
+
it("collects every alias declared across terraform blocks", () => {
|
|
119
|
+
const parsed = {
|
|
120
|
+
terraform: [
|
|
121
|
+
{
|
|
122
|
+
required_providers: [
|
|
123
|
+
{
|
|
124
|
+
aws: {
|
|
125
|
+
source: "hashicorp/aws",
|
|
126
|
+
configuration_aliases: [
|
|
127
|
+
"${aws.global_region}",
|
|
128
|
+
"${aws.secondary}",
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
random: { source: "hashicorp/random" },
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
required_providers: [
|
|
137
|
+
{
|
|
138
|
+
awsx: {
|
|
139
|
+
source: "hashicorp/aws",
|
|
140
|
+
configuration_aliases: ["${awsx.tertiary}"],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
|
|
148
|
+
{ localName: "aws", alias: "global_region", source: "hashicorp/aws" },
|
|
149
|
+
{ localName: "aws", alias: "secondary", source: "hashicorp/aws" },
|
|
150
|
+
{ localName: "awsx", alias: "tertiary", source: "hashicorp/aws" },
|
|
151
|
+
]);
|
|
152
|
+
});
|
|
153
|
+
it("deduplicates aliases declared in more than one file", () => {
|
|
154
|
+
const declaration = {
|
|
155
|
+
aws: {
|
|
156
|
+
source: "hashicorp/aws",
|
|
157
|
+
configuration_aliases: ["${aws.global_region}"],
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
const parsed = {
|
|
161
|
+
terraform: [{ required_providers: [declaration, declaration] }],
|
|
162
|
+
};
|
|
163
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
|
|
164
|
+
{ localName: "aws", alias: "global_region", source: "hashicorp/aws" },
|
|
165
|
+
]);
|
|
166
|
+
});
|
|
167
|
+
it("keeps aliases of providers declared without a source", () => {
|
|
168
|
+
const parsed = {
|
|
169
|
+
terraform: {
|
|
170
|
+
required_providers: {
|
|
171
|
+
aws: { configuration_aliases: ["${aws.other}"] },
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
|
|
176
|
+
{ localName: "aws", alias: "other", source: undefined },
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
it("reads the plain references a .tf.json module declares", () => {
|
|
180
|
+
// hcl2json only wraps HCL expressions in an interpolation; JSON syntax
|
|
181
|
+
// carries the reference as-is, and its blocks come through unwrapped
|
|
182
|
+
const parsed = {
|
|
183
|
+
terraform: {
|
|
184
|
+
required_providers: {
|
|
185
|
+
null: {
|
|
186
|
+
source: "hashicorp/null",
|
|
187
|
+
configuration_aliases: ["null.extra"],
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
|
|
193
|
+
{ localName: "null", alias: "extra", source: "hashicorp/null" },
|
|
194
|
+
]);
|
|
195
|
+
});
|
|
196
|
+
it("reads aliases a module spread across .tf and .tf.json files", () => {
|
|
197
|
+
// hcl2json merges a .tf.json file into the parsed HCL by recursing into
|
|
198
|
+
// the HCL block array, so the JSON half ends up as a named property on
|
|
199
|
+
// that array rather than another entry in it
|
|
200
|
+
const parsed = {
|
|
201
|
+
terraform: [
|
|
202
|
+
{ required_providers: [{ aws: { source: "hashicorp/aws" } }] },
|
|
203
|
+
],
|
|
204
|
+
};
|
|
205
|
+
parsed.terraform.required_providers = {
|
|
206
|
+
null: {
|
|
207
|
+
source: "hashicorp/null",
|
|
208
|
+
configuration_aliases: ["null.extra"],
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
|
|
212
|
+
{ localName: "null", alias: "extra", source: "hashicorp/null" },
|
|
213
|
+
]);
|
|
214
|
+
});
|
|
215
|
+
it("collects a bare local name as a required default configuration", () => {
|
|
216
|
+
// `configuration_aliases = [aws, aws.pip_read]` makes the module demand
|
|
217
|
+
// that the caller pass its default `aws` configuration explicitly too
|
|
218
|
+
const parsed = {
|
|
219
|
+
terraform: [
|
|
220
|
+
{
|
|
221
|
+
required_providers: [
|
|
222
|
+
{
|
|
223
|
+
aws: {
|
|
224
|
+
source: "hashicorp/aws",
|
|
225
|
+
configuration_aliases: ["${aws}", "${aws.pip_read}"],
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
};
|
|
232
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
|
|
233
|
+
{ localName: "aws", alias: undefined, source: "hashicorp/aws" },
|
|
234
|
+
{ localName: "aws", alias: "pip_read", source: "hashicorp/aws" },
|
|
235
|
+
]);
|
|
236
|
+
});
|
|
237
|
+
it("deduplicates a bare local name declared in more than one terraform block", () => {
|
|
238
|
+
const parsed = {
|
|
239
|
+
terraform: [
|
|
240
|
+
{
|
|
241
|
+
required_providers: [
|
|
242
|
+
{
|
|
243
|
+
aws: {
|
|
244
|
+
source: "hashicorp/aws",
|
|
245
|
+
configuration_aliases: ["${aws}"],
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
],
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
required_providers: [
|
|
252
|
+
{
|
|
253
|
+
aws: {
|
|
254
|
+
source: "hashicorp/aws",
|
|
255
|
+
configuration_aliases: ["${aws}", "${aws.secondary}"],
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
],
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
};
|
|
262
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
|
|
263
|
+
{ localName: "aws", alias: undefined, source: "hashicorp/aws" },
|
|
264
|
+
{ localName: "aws", alias: "secondary", source: "hashicorp/aws" },
|
|
265
|
+
]);
|
|
266
|
+
});
|
|
267
|
+
it("ignores entries that are not provider configuration references", () => {
|
|
268
|
+
const parsed = {
|
|
269
|
+
terraform: {
|
|
270
|
+
required_providers: {
|
|
271
|
+
aws: {
|
|
272
|
+
configuration_aliases: ["${var.not_an_alias.x}", "${aws[0]}"],
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([]);
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
describe("applyModuleProviderAliases", () => {
|
|
281
|
+
const configWithModule = () => ({
|
|
282
|
+
terraform: {},
|
|
283
|
+
module: { my_module: { source: "./mod" } },
|
|
284
|
+
});
|
|
285
|
+
it("declares the aliased providers and passes them to the module", () => {
|
|
286
|
+
const config = (0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [
|
|
287
|
+
{ localName: "aws", alias: "global_region", source: "hashicorp/aws" },
|
|
288
|
+
{ localName: "aws", alias: "secondary", source: "hashicorp/aws" },
|
|
289
|
+
]);
|
|
290
|
+
expect(config).toEqual({
|
|
291
|
+
terraform: { required_providers: { aws: { source: "hashicorp/aws" } } },
|
|
292
|
+
provider: { aws: [{ alias: "global_region" }, { alias: "secondary" }] },
|
|
293
|
+
module: {
|
|
294
|
+
my_module: {
|
|
295
|
+
source: "./mod",
|
|
296
|
+
providers: {
|
|
297
|
+
"aws.global_region": "aws.global_region",
|
|
298
|
+
"aws.secondary": "aws.secondary",
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
it("passes the default configuration when the module requires it", () => {
|
|
305
|
+
const config = (0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [
|
|
306
|
+
{ localName: "aws", source: "hashicorp/aws" },
|
|
307
|
+
{ localName: "aws", alias: "pip_read", source: "hashicorp/aws" },
|
|
308
|
+
]);
|
|
309
|
+
expect(config).toEqual({
|
|
310
|
+
terraform: { required_providers: { aws: { source: "hashicorp/aws" } } },
|
|
311
|
+
provider: { aws: [{}, { alias: "pip_read" }] },
|
|
312
|
+
module: {
|
|
313
|
+
my_module: {
|
|
314
|
+
source: "./mod",
|
|
315
|
+
providers: { aws: "aws", "aws.pip_read": "aws.pip_read" },
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
it("passes only the default configuration for a bare-only declaration", () => {
|
|
321
|
+
// `configuration_aliases = [aws]`, without any aliased configuration
|
|
322
|
+
const config = (0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [
|
|
323
|
+
{ localName: "aws", source: "hashicorp/aws" },
|
|
324
|
+
]);
|
|
325
|
+
expect(config).toEqual({
|
|
326
|
+
terraform: { required_providers: { aws: { source: "hashicorp/aws" } } },
|
|
327
|
+
provider: { aws: [{}] },
|
|
328
|
+
module: {
|
|
329
|
+
my_module: { source: "./mod", providers: { aws: "aws" } },
|
|
330
|
+
},
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
it("omits required_providers for aliases without a declared source", () => {
|
|
334
|
+
const config = (0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [
|
|
335
|
+
{ localName: "aws", alias: "other" },
|
|
336
|
+
]);
|
|
337
|
+
expect(config.terraform.required_providers).toBeUndefined();
|
|
338
|
+
expect(config.provider).toEqual({ aws: [{ alias: "other" }] });
|
|
339
|
+
});
|
|
340
|
+
it("leaves the config untouched when there are no aliases", () => {
|
|
341
|
+
expect((0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [])).toEqual(configWithModule());
|
|
342
|
+
});
|
|
343
|
+
it("leaves the config untouched when the module call is unknown", () => {
|
|
344
|
+
expect((0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "other_module", [
|
|
345
|
+
{ localName: "aws", alias: "global_region" },
|
|
346
|
+
])).toEqual(configWithModule());
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
describe("packageSubdir", () => {
|
|
350
|
+
it.each([
|
|
351
|
+
["terraform-aws-modules/iam/aws", undefined],
|
|
352
|
+
[
|
|
353
|
+
"terraform-aws-modules/iam/aws//modules/iam-account",
|
|
354
|
+
"modules/iam-account",
|
|
355
|
+
],
|
|
356
|
+
["git::https://github.com/org/repo.git//sub?ref=v1.2.3", "sub"],
|
|
357
|
+
["git::ssh://git@github.com/org/repo.git", undefined],
|
|
358
|
+
["./local/module", undefined],
|
|
359
|
+
])("splits %s", (source, expected) => {
|
|
360
|
+
expect((0, provider_schema_1.packageSubdir)(source)).toEqual(expected);
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
describe("fetchedModuleDir", () => {
|
|
364
|
+
let workdir;
|
|
365
|
+
beforeEach(() => {
|
|
366
|
+
workdir = fs.mkdtempSync(path.join(os.tmpdir(), "fetched-module-dir-"));
|
|
367
|
+
});
|
|
368
|
+
afterEach(() => {
|
|
369
|
+
fs.rmSync(workdir, { recursive: true, force: true });
|
|
370
|
+
});
|
|
371
|
+
function writeManifest(modules) {
|
|
372
|
+
const dir = path.join(workdir, ".terraform", "modules");
|
|
373
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
374
|
+
fs.writeFileSync(path.join(dir, "modules.json"), JSON.stringify({ Modules: modules }));
|
|
375
|
+
}
|
|
376
|
+
it("prefers the directory recorded in the module manifest", () => {
|
|
377
|
+
writeManifest([
|
|
378
|
+
{ Key: "", Dir: "." },
|
|
379
|
+
{ Key: "my_module", Dir: ".terraform/modules/my_module/modules/sub" },
|
|
380
|
+
]);
|
|
381
|
+
expect((0, provider_schema_1.fetchedModuleDir)(workdir, "my_module", "org/name/aws//modules/sub")).toEqual(path.join(workdir, ".terraform", "modules", "my_module", "modules", "sub"));
|
|
382
|
+
});
|
|
383
|
+
it("falls back to the install path when the manifest was not written", () => {
|
|
384
|
+
expect((0, provider_schema_1.fetchedModuleDir)(workdir, "my_module", "org/name/aws//modules/sub")).toEqual(path.join(workdir, ".terraform", "modules", "my_module", "modules", "sub"));
|
|
385
|
+
});
|
|
386
|
+
it("falls back to the install path when the manifest lacks the module", () => {
|
|
387
|
+
writeManifest([{ Key: "", Dir: "." }]);
|
|
388
|
+
expect((0, provider_schema_1.fetchedModuleDir)(workdir, "my_module", "org/name/aws")).toEqual(path.join(workdir, ".terraform", "modules", "my_module"));
|
|
389
|
+
});
|
|
390
|
+
it("reads local modules where they are", () => {
|
|
391
|
+
expect((0, provider_schema_1.fetchedModuleDir)(workdir, "my_module", "../mod", "/abs/path/to/mod")).toEqual("/abs/path/to/mod");
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNoQixDQUFDLENBQUMsQ0FBQztBQUVKLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLDRDQUFzQztBQUN0Qyx3REFRNEI7QUFFNUIsTUFBTSxRQUFRLEdBQUcsY0FBNEIsQ0FBQztBQUU5QyxTQUFTLGNBQWMsQ0FBQyxPQUFPLEdBQUcsaUNBQWlDO0lBQ2pFLE1BQU0sR0FBRyxHQUFRLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsT0FBTyxHQUFHLGlDQUFpQztJQUM3RCxNQUFNLEdBQUcsR0FBUSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsSUFBSSxlQUFpQyxDQUFDO0lBRXRDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFD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QUUsR0FBRyxFQUFFO1FBQzNFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxJQUFBLGtDQUFnQixFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQ3pELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7UUFDNUMsTUFBTSxDQUNKLElBQUEsa0NBQWdCLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FDckUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcblxuamVzdC5tb2NrKFwiQGNka3RuL2NvbW1vbnNcIiwgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKFwiQGNka3RuL2NvbW1vbnNcIiksXG4gIGV4ZWM6IGplc3QuZm4oKSxcbn0pKTtcblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtQ29uZmlnLFxuICBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyxcbiAgY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyxcbiAgZmV0Y2hlZE1vZHVsZURpcixcbiAgZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uLFxuICBwYWNrYWdlU3ViZGlyLFxuICB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5LFxufSBmcm9tIFwiLi4vcHJvdmlkZXItc2NoZW1hXCI7XG5cbmNvbnN0IGV4ZWNNb2NrID0gZXhlYyBhcyB1bmtub3duIGFzIGplc3QuTW9jaztcblxuZnVuY3Rpb24gdHJhbnNpZW50RXJyb3IobWVzc2FnZSA9IFwiNTAyIEJhZCBHYXRld2F5IGZyb20gZ2l0aHViLmNvbVwiKSB7XG4gIGNvbnN0IGVycjogYW55ID0gbmV3IEVycm9yKFwibm9uLXplcm8gZXhpdCBjb2RlIDFcIik7XG4gIGVyci5zdGRlcnIgPSBtZXNzYWdlO1xuICByZXR1cm4gZXJyO1xufVxuXG5mdW5jdGlvbiBmYXRhbEVycm9yKG1lc3NhZ2UgPSBcIkVycm9yOiBJbnZhbGlkIHByb3ZpZGVyIHZlcnNpb25cIikge1xuICBjb25zdCBlcnI6IGFueSA9IG5ldyBFcnJvcihcIm5vbi16ZXJvIGV4aXQgY29kZSAxXCIpO1xuICBlcnIuc3RkZXJyID0gbWVzc2FnZTtcbiAgcmV0dXJuIGVycjtcbn1cblxuZGVzY3JpYmUoXCJ0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5XCIsICgpID0+IHtcbiAgbGV0IGNvbnNvbGVFcnJvclNweTogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVzZXQoKTtcbiAgICBjb25zb2xlRXJyb3JTcHkgPSBqZXN0XG4gICAgICAuc3B5T24oY29uc29sZSwgXCJlcnJvclwiKVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGNvbnNvbGVFcnJvclNweS5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgaW1tZWRpYXRlbHkgb24gZmlyc3QtYXR0ZW1wdCBzdWNjZXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoXCJva1wiKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IFwiL3RtcC94XCIgfSwgMywgMCk7XG5cbiAgICBleHBlY3QocmVzdWx0KS50b0JlKFwib2tcIik7XG4gICAgZXhwZWN0KGV4ZWNNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0cmllcyBvbiB0cmFuc2llbnQgc3RkZXJyIGFuZCBldmVudHVhbGx5IHN1Y2NlZWRzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9ja1xuICAgICAgLm1vY2tSZWplY3RlZFZhbHVlT25jZSh0cmFuc2llbnRFcnJvcigpKVxuICAgICAgLm1vY2tSZWplY3RlZFZhbHVlT25jZSh0cmFuc2llbnRFcnJvcihcIkVDT05OUkVTRVRcIikpXG4gICAgICAubW9ja1Jlc29sdmVkVmFsdWVPbmNlKFwib2tcIik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBcIi90bXAveFwiIH0sIDMsIDApO1xuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZShcIm9rXCIpO1xuICAgIGV4cGVjdChleGVjTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHJldHJ5IG9uIG5vbi10cmFuc2llbnQgZXJyb3JzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UoZmF0YWxFcnJvcigpKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IFwiL3RtcC94XCIgfSwgMywgMCksXG4gICAgKS5yZWplY3RzLnRvTWF0Y2hPYmplY3QoeyBzdGRlcnI6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiSW52YWxpZFwiKSB9KTtcblxuICAgIGV4cGVjdChleGVjTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcInRocm93cyBhZnRlciBleGhhdXN0aW5nIHJldHJpZXMgb24gcGVyc2lzdGVudCB0cmFuc2llbnQgZXJyb3JzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVqZWN0ZWRWYWx1ZSh0cmFuc2llbnRFcnJvcihcIjUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlXCIpKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IFwiL3RtcC94XCIgfSwgMywgMCksXG4gICAgKS5yZWplY3RzLnRvTWF0Y2hPYmplY3QoeyBzdGRlcnI6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiNTAzXCIpIH0pO1xuXG4gICAgZXhwZWN0KGV4ZWNNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uXCIsICgpID0+IHtcbiAgaXQoXCJleGVjcyBgdGVycmFmb3JtIHZlcnNpb25gIG9uY2UgYW5kIG1lbW9pemVzIHRoZSByZXN1bHRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4ZWNNb2NrLm1vY2tSZXNldCgpO1xuICAgIGV4ZWNNb2NrLm1vY2tSZXNvbHZlZFZhbHVlKFwiVGVycmFmb3JtIHYxLjcuNVxcbm9uIGxpbnV4X2FtZDY0XFxuXCIpO1xuXG4gICAgY29uc3QgZmlyc3QgPSBhd2FpdCBnZXRGZXRjaGluZ0NsaVZlcnNpb24oKTtcbiAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCBnZXRGZXRjaGluZ0NsaVZlcnNpb24oKTtcblxuICAgIGV4cGVjdChmaXJzdCkudG9FcXVhbCh7IG5hbWU6IFwidGVycmFmb3JtXCIsIHZlcnNpb246IFwiMS43LjVcIiB9KTtcbiAgICBleHBlY3Qoc2Vjb25kKS50b0JlKGZpcnN0KTtcbiAgICBleHBlY3QoZXhlY01vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIG5vdGhpbmcgZm9yIGEgbW9kdWxlIHdpdGhvdXQgcmVxdWlyZWRfcHJvdmlkZXJzXCIsICgpID0+IHtcbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyh7IHZhcmlhYmxlOiB7IGZvbzogW3t9XSB9IH0pKS50b0VxdWFsKFxuICAgICAgW10sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIG5vdGhpbmcgZm9yIHJlcXVpcmVkIHByb3ZpZGVycyB3aXRob3V0IGNvbmZpZ3VyYXRpb24gYWxpYXNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiBbXG4gICAgICAgIHsgcmVxdWlyZWRfcHJvdmlkZXJzOiBbeyBhd3M6IHsgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9IH1dIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJjb2xsZWN0cyBldmVyeSBhbGlhcyBkZWNsYXJlZCBhY3Jvc3MgdGVycmFmb3JtIGJsb2Nrc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXdzOiB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIixcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcbiAgICAgICAgICAgICAgICAgIFwiJHthd3MuZ2xvYmFsX3JlZ2lvbn1cIixcbiAgICAgICAgICAgICAgICAgIFwiJHthd3Muc2Vjb25kYXJ5fVwiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJhbmRvbTogeyBzb3VyY2U6IFwiaGFzaGljb3JwL3JhbmRvbVwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXdzeDoge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3c3gudGVydGlhcnl9XCJdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwic2Vjb25kYXJ5XCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c3hcIiwgYWxpYXM6IFwidGVydGlhcnlcIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImRlZHVwbGljYXRlcyBhbGlhc2VzIGRlY2xhcmVkIGluIG1vcmUgdGhhbiBvbmUgZmlsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB7XG4gICAgICBhd3M6IHtcbiAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIixcbiAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3cy5nbG9iYWxfcmVnaW9ufVwiXSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICB0ZXJyYWZvcm06IFt7IHJlcXVpcmVkX3Byb3ZpZGVyczogW2RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbl0gfV0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW1xuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcImdsb2JhbF9yZWdpb25cIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIGFsaWFzZXMgb2YgcHJvdmlkZXJzIGRlY2xhcmVkIHdpdGhvdXQgYSBzb3VyY2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IHtcbiAgICAgIHRlcnJhZm9ybToge1xuICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IHtcbiAgICAgICAgICBhd3M6IHsgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3cy5vdGhlcn1cIl0gfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW1xuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcIm90aGVyXCIsIHNvdXJjZTogdW5kZWZpbmVkIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwicmVhZHMgdGhlIHBsYWluIHJlZmVyZW5jZXMgYSAudGYuanNvbiBtb2R1bGUgZGVjbGFyZXNcIiwgKCkgPT4ge1xuICAgIC8vIGhjbDJqc29uIG9ubHkgd3JhcHMgSENMIGV4cHJlc3Npb25zIGluIGFuIGludGVycG9sYXRpb247IEpTT04gc3ludGF4XG4gICAgLy8gY2FycmllcyB0aGUgcmVmZXJlbmNlIGFzLWlzLCBhbmQgaXRzIGJsb2NrcyBjb21lIHRocm91Z2ggdW53cmFwcGVkXG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiB7XG4gICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge1xuICAgICAgICAgIG51bGw6IHtcbiAgICAgICAgICAgIHNvdXJjZTogXCJoYXNoaWNvcnAvbnVsbFwiLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCJudWxsLmV4dHJhXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcIm51bGxcIiwgYWxpYXM6IFwiZXh0cmFcIiwgc291cmNlOiBcImhhc2hpY29ycC9udWxsXCIgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBhbGlhc2VzIGEgbW9kdWxlIHNwcmVhZCBhY3Jvc3MgLnRmIGFuZCAudGYuanNvbiBmaWxlc1wiLCAoKSA9PiB7XG4gICAgLy8gaGNsMmpzb24gbWVyZ2VzIGEgLnRmLmpzb24gZmlsZSBpbnRvIHRoZSBwYXJzZWQgSENMIGJ5IHJlY3Vyc2luZyBpbnRvXG4gICAgLy8gdGhlIEhDTCBibG9jayBhcnJheSwgc28gdGhlIEpTT04gaGFsZiBlbmRzIHVwIGFzIGEgbmFtZWQgcHJvcGVydHkgb25cbiAgICAvLyB0aGF0IGFycmF5IHJhdGhlciB0aGFuIGFub3RoZXIgZW50cnkgaW4gaXRcbiAgICBjb25zdCBwYXJzZWQ6IGFueSA9IHtcbiAgICAgIHRlcnJhZm9ybTogW1xuICAgICAgICB7IHJlcXVpcmVkX3Byb3ZpZGVyczogW3sgYXdzOiB7IHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSB9XSB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIHBhcnNlZC50ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzID0ge1xuICAgICAgbnVsbDoge1xuICAgICAgICBzb3VyY2U6IFwiaGFzaGljb3JwL251bGxcIixcbiAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCJudWxsLmV4dHJhXCJdLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJudWxsXCIsIGFsaWFzOiBcImV4dHJhXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvbnVsbFwiIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwiY29sbGVjdHMgYSBiYXJlIGxvY2FsIG5hbWUgYXMgYSByZXF1aXJlZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgIC8vIGBjb25maWd1cmF0aW9uX2FsaWFzZXMgPSBbYXdzLCBhd3MucGlwX3JlYWRdYCBtYWtlcyB0aGUgbW9kdWxlIGRlbWFuZFxuICAgIC8vIHRoYXQgdGhlIGNhbGxlciBwYXNzIGl0cyBkZWZhdWx0IGBhd3NgIGNvbmZpZ3VyYXRpb24gZXhwbGljaXRseSB0b29cbiAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICB0ZXJyYWZvcm06IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhd3M6IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fYWxpYXNlczogW1wiJHthd3N9XCIsIFwiJHthd3MucGlwX3JlYWR9XCJdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IHVuZGVmaW5lZCwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcInBpcF9yZWFkXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJkZWR1cGxpY2F0ZXMgYSBiYXJlIGxvY2FsIG5hbWUgZGVjbGFyZWQgaW4gbW9yZSB0aGFuIG9uZSB0ZXJyYWZvcm0gYmxvY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IHtcbiAgICAgIHRlcnJhZm9ybTogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVxdWlyZWRfcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF3czoge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3c31cIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXdzOiB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIixcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIiR7YXdzfVwiLCBcIiR7YXdzLnNlY29uZGFyeX1cIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBhbGlhczogdW5kZWZpbmVkLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwic2Vjb25kYXJ5XCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJpZ25vcmVzIGVudHJpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gcmVmZXJlbmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiB7XG4gICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge1xuICAgICAgICAgIGF3czoge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke3Zhci5ub3RfYW5fYWxpYXMueH1cIiwgXCIke2F3c1swXX1cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImFwcGx5TW9kdWxlUHJvdmlkZXJBbGlhc2VzXCIsICgpID0+IHtcbiAgY29uc3QgY29uZmlnV2l0aE1vZHVsZSA9ICgpOiBUZXJyYWZvcm1Db25maWcgPT4gKHtcbiAgICB0ZXJyYWZvcm06IHt9LFxuICAgIG1vZHVsZTogeyBteV9tb2R1bGU6IHsgc291cmNlOiBcIi4vbW9kXCIgfSB9LFxuICB9KTtcblxuICBpdChcImRlY2xhcmVzIHRoZSBhbGlhc2VkIHByb3ZpZGVycyBhbmQgcGFzc2VzIHRoZW0gdG8gdGhlIG1vZHVsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwic2Vjb25kYXJ5XCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChjb25maWcpLnRvRXF1YWwoe1xuICAgICAgdGVycmFmb3JtOiB7IHJlcXVpcmVkX3Byb3ZpZGVyczogeyBhd3M6IHsgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9IH0gfSxcbiAgICAgIHByb3ZpZGVyOiB7IGF3czogW3sgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiIH0sIHsgYWxpYXM6IFwic2Vjb25kYXJ5XCIgfV0gfSxcbiAgICAgIG1vZHVsZToge1xuICAgICAgICBteV9tb2R1bGU6IHtcbiAgICAgICAgICBzb3VyY2U6IFwiLi9tb2RcIixcbiAgICAgICAgICBwcm92aWRlcnM6IHtcbiAgICAgICAgICAgIFwiYXdzLmdsb2JhbF9yZWdpb25cIjogXCJhd3MuZ2xvYmFsX3JlZ2lvblwiLFxuICAgICAgICAgICAgXCJhd3Muc2Vjb25kYXJ5XCI6IFwiYXdzLnNlY29uZGFyeVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInBhc3NlcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHdoZW4gdGhlIG1vZHVsZSByZXF1aXJlcyBpdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcInBpcF9yZWFkXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChjb25maWcpLnRvRXF1YWwoe1xuICAgICAgdGVycmFmb3JtOiB7IHJlcXVpcmVkX3Byb3ZpZGVyczogeyBhd3M6IHsgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9IH0gfSxcbiAgICAgIHByb3ZpZGVyOiB7IGF3czogW3t9LCB7IGFsaWFzOiBcInBpcF9yZWFkXCIgfV0gfSxcbiAgICAgIG1vZHVsZToge1xuICAgICAgICBteV9tb2R1bGU6IHtcbiAgICAgICAgICBzb3VyY2U6IFwiLi9tb2RcIixcbiAgICAgICAgICBwcm92aWRlcnM6IHsgYXdzOiBcImF3c1wiLCBcImF3cy5waXBfcmVhZFwiOiBcImF3cy5waXBfcmVhZFwiIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInBhc3NlcyBvbmx5IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGEgYmFyZS1vbmx5IGRlY2xhcmF0aW9uXCIsICgpID0+IHtcbiAgICAvLyBgY29uZmlndXJhdGlvbl9hbGlhc2VzID0gW2F3c11gLCB3aXRob3V0IGFueSBhbGlhc2VkIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBjb25maWcgPSBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyhjb25maWdXaXRoTW9kdWxlKCksIFwibXlfbW9kdWxlXCIsIFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgXSk7XG5cbiAgICBleHBlY3QoY29uZmlnKS50b0VxdWFsKHtcbiAgICAgIHRlcnJhZm9ybTogeyByZXF1aXJlZF9wcm92aWRlcnM6IHsgYXdzOiB7IHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSB9IH0sXG4gICAgICBwcm92aWRlcjogeyBhd3M6IFt7fV0gfSxcbiAgICAgIG1vZHVsZToge1xuICAgICAgICBteV9tb2R1bGU6IHsgc291cmNlOiBcIi4vbW9kXCIsIHByb3ZpZGVyczogeyBhd3M6IFwiYXdzXCIgfSB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJvbWl0cyByZXF1aXJlZF9wcm92aWRlcnMgZm9yIGFsaWFzZXMgd2l0aG91dCBhIGRlY2xhcmVkIHNvdXJjZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwib3RoZXJcIiB9LFxuICAgIF0pO1xuXG4gICAgZXhwZWN0KGNvbmZpZy50ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGNvbmZpZy5wcm92aWRlcikudG9FcXVhbCh7IGF3czogW3sgYWxpYXM6IFwib3RoZXJcIiB9XSB9KTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgdGhlIGNvbmZpZyB1bnRvdWNoZWQgd2hlbiB0aGVyZSBhcmUgbm8gYWxpYXNlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXSksXG4gICAgKS50b0VxdWFsKGNvbmZpZ1dpdGhNb2R1bGUoKSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIHRoZSBjb25maWcgdW50b3VjaGVkIHdoZW4gdGhlIG1vZHVsZSBjYWxsIGlzIHVua25vd25cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGFwcGx5TW9kdWxlUHJvdmlkZXJBbGlhc2VzKGNvbmZpZ1dpdGhNb2R1bGUoKSwgXCJvdGhlcl9tb2R1bGVcIiwgW1xuICAgICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiIH0sXG4gICAgICBdKSxcbiAgICApLnRvRXF1YWwoY29uZmlnV2l0aE1vZHVsZSgpKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwYWNrYWdlU3ViZGlyXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1widGVycmFmb3JtLWF3cy1tb2R1bGVzL2lhbS9hd3NcIiwgdW5kZWZpbmVkXSxcbiAgICBbXG4gICAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9pYW0vYXdzLy9tb2R1bGVzL2lhbS1hY2NvdW50XCIsXG4gICAgICBcIm1vZHVsZXMvaWFtLWFjY291bnRcIixcbiAgICBdLFxuICAgIFtcImdpdDo6aHR0cHM6Ly9naXRodWIuY29tL29yZy9yZXBvLmdpdC8vc3ViP3JlZj12MS4yLjNcIiwgXCJzdWJcIl0sXG4gICAgW1wiZ2l0Ojpzc2g6Ly9naXRAZ2l0aHViLmNvbS9vcmcvcmVwby5naXRcIiwgdW5kZWZpbmVkXSxcbiAgICBbXCIuL2xvY2FsL21vZHVsZVwiLCB1bmRlZmluZWRdLFxuICBdKShcInNwbGl0cyAlc1wiLCAoc291cmNlLCBleHBlY3RlZCkgPT4ge1xuICAgIGV4cGVjdChwYWNrYWdlU3ViZGlyKHNvdXJjZSBhcyBzdHJpbmcpKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJmZXRjaGVkTW9kdWxlRGlyXCIsICgpID0+IHtcbiAgbGV0IHdvcmtkaXI6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB3b3JrZGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCBcImZldGNoZWQtbW9kdWxlLWRpci1cIikpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGZzLnJtU3luYyh3b3JrZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdyaXRlTWFuaWZlc3QobW9kdWxlczogeyBLZXk6IHN0cmluZzsgRGlyOiBzdHJpbmcgfVtdKSB7XG4gICAgY29uc3QgZGlyID0gcGF0aC5qb2luKHdvcmtkaXIsIFwiLnRlcnJhZm9ybVwiLCBcIm1vZHVsZXNcIik7XG4gICAgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihkaXIsIFwibW9kdWxlcy5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBNb2R1bGVzOiBtb2R1bGVzIH0pLFxuICAgICk7XG4gIH1cblxuICBpdChcInByZWZlcnMgdGhlIGRpcmVjdG9yeSByZWNvcmRlZCBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0XCIsICgpID0+IHtcbiAgICB3cml0ZU1hbmlmZXN0KFtcbiAgICAgIHsgS2V5OiBcIlwiLCBEaXI6IFwiLlwiIH0sXG4gICAgICB7IEtleTogXCJteV9tb2R1bGVcIiwgRGlyOiBcIi50ZXJyYWZvcm0vbW9kdWxlcy9teV9tb2R1bGUvbW9kdWxlcy9zdWJcIiB9LFxuICAgIF0pO1xuXG4gICAgZXhwZWN0KFxuICAgICAgZmV0Y2hlZE1vZHVsZURpcih3b3JrZGlyLCBcIm15X21vZHVsZVwiLCBcIm9yZy9uYW1lL2F3cy8vbW9kdWxlcy9zdWJcIiksXG4gICAgKS50b0VxdWFsKFxuICAgICAgcGF0aC5qb2luKFxuICAgICAgICB3b3JrZGlyLFxuICAgICAgICBcIi50ZXJyYWZvcm1cIixcbiAgICAgICAgXCJtb2R1bGVzXCIsXG4gICAgICAgIFwibXlfbW9kdWxlXCIsXG4gICAgICAgIFwibW9kdWxlc1wiLFxuICAgICAgICBcInN1YlwiLFxuICAgICAgKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImZhbGxzIGJhY2sgdG8gdGhlIGluc3RhbGwgcGF0aCB3aGVuIHRoZSBtYW5pZmVzdCB3YXMgbm90IHdyaXR0ZW5cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGZldGNoZWRNb2R1bGVEaXIod29ya2RpciwgXCJteV9tb2R1bGVcIiwgXCJvcmcvbmFtZS9hd3MvL21vZHVsZXMvc3ViXCIpLFxuICAgICkudG9FcXVhbChcbiAgICAgIHBhdGguam9pbihcbiAgICAgICAgd29ya2RpcixcbiAgICAgICAgXCIudGVycmFmb3JtXCIsXG4gICAgICAgIFwibW9kdWxlc1wiLFxuICAgICAgICBcIm15X21vZHVsZVwiLFxuICAgICAgICBcIm1vZHVsZXNcIixcbiAgICAgICAgXCJzdWJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHRvIHRoZSBpbnN0YWxsIHBhdGggd2hlbiB0aGUgbWFuaWZlc3QgbGFja3MgdGhlIG1vZHVsZVwiLCAoKSA9PiB7XG4gICAgd3JpdGVNYW5pZmVzdChbeyBLZXk6IFwiXCIsIERpcjogXCIuXCIgfV0pO1xuXG4gICAgZXhwZWN0KGZldGNoZWRNb2R1bGVEaXIod29ya2RpciwgXCJteV9tb2R1bGVcIiwgXCJvcmcvbmFtZS9hd3NcIikpLnRvRXF1YWwoXG4gICAgICBwYXRoLmpvaW4od29ya2RpciwgXCIudGVycmFmb3JtXCIsIFwibW9kdWxlc1wiLCBcIm15X21vZHVsZVwiKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlYWRzIGxvY2FsIG1vZHVsZXMgd2hlcmUgdGhleSBhcmVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGZldGNoZWRNb2R1bGVEaXIod29ya2RpciwgXCJteV9tb2R1bGVcIiwgXCIuLi9tb2RcIiwgXCIvYWJzL3BhdGgvdG8vbW9kXCIpLFxuICAgICkudG9FcXVhbChcIi9hYnMvcGF0aC90by9tb2RcIik7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -17,13 +17,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
17
17
|
}) : function(o, v) {
|
|
18
18
|
o["default"] = v;
|
|
19
19
|
});
|
|
20
|
-
var __importStar = (this && this.__importStar) || function (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
27
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
38
|
jest.mock("../provider-schema", () => ({
|
|
29
39
|
...jest.requireActual("../provider-schema"),
|
|
@@ -77,4 +87,4 @@ describe("readSchema - emission gap warning on cache hits (regression)", () => {
|
|
|
77
87
|
expect(warnSpy.mock.calls[1][0]).toContain("provider schema fetched with terraform 1.7.5");
|
|
78
88
|
});
|
|
79
89
|
});
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1lbWlzc2lvbi1nYXAtd2FybmluZy51bml0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3JlYWQtZW1pc3Npb24tZ2FwLXdhcm5pbmcudW5pdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO0lBQzNDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDN0IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNqQyxDQUFDLENBQUMsQ0FBQztBQUVKLDZDQUErQjtBQUMvQix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDRDQUl3QjtBQUN4QixrQ0FBcUM7QUFDckMsd0RBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsb0NBQTBDLENBQUM7QUFDMUUsTUFBTSx5QkFBeUIsR0FBRyx1Q0FBNkMsQ0FBQztBQUVoRixNQUFNLGNBQWMsR0FBbUI7SUFDckMsY0FBYyxFQUFFLEtBQUs7SUFDckIsUUFBUSxFQUFFLFdBQVc7SUFDckIsV0FBVyxFQUFFLE9BQU87Q0FDckIsQ0FBQztBQUVGLFFBQVEsQ0FBQyw4REFBOEQsRUFBRSxHQUFHLEVBQUU7SUFDNUUsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLElBQUksT0FBeUIsQ0FBQztJQUU5QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsUUFBUSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekUseUJBQXlCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMseUJBQXlCLENBQUMsaUJBQWlCLENBQUM7WUFDMUMsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQyxDQUFDO1FBQ0gsc0JBQXNCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsbUZBQW1GLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakcsTUFBTSxVQUFVLEdBQUcsSUFBSSxxQ0FBMkIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sY0FBYyxHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBRWpELE1BQU0sSUFBQSxpQkFBVSxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBQSxpQkFBVSxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXpELHlFQUF5RTtRQUN6RSxvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEQsb0VBQW9FO1FBQ3BFLHFFQUFxRTtRQUNyRSw2QkFBNkI7UUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDeEMsOENBQThDLENBQy9DLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3hDLDhDQUE4QyxDQUMvQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5cbmplc3QubW9jayhcIi4uL3Byb3ZpZGVyLXNjaGVtYVwiLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoXCIuLi9wcm92aWRlci1zY2hlbWFcIiksXG4gIHJlYWRQcm92aWRlclNjaGVtYTogamVzdC5mbigpLFxuICBnZXRGZXRjaGluZ0NsaVZlcnNpb246IGplc3QuZm4oKSxcbn0pKTtcblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7XG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyByZWFkU2NoZW1hIH0gZnJvbSBcIi4uL3JlYWRcIjtcbmltcG9ydCB7IGdldEZldGNoaW5nQ2xpVmVyc2lvbiwgcmVhZFByb3ZpZGVyU2NoZW1hIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLXNjaGVtYVwiO1xuXG5jb25zdCByZWFkUHJvdmlkZXJTY2hlbWFNb2NrID0gcmVhZFByb3ZpZGVyU2NoZW1hIGFzIHVua25vd24gYXMgamVzdC5Nb2NrO1xuY29uc3QgZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uTW9jayA9IGdldEZldGNoaW5nQ2xpVmVyc2lvbiBhcyB1bmtub3duIGFzIGplc3QuTW9jaztcblxuY29uc3Qgc3RhbXBlZEZpeHR1cmU6IFByb3ZpZGVyU2NoZW1hID0ge1xuICBmb3JtYXRfdmVyc2lvbjogXCIwLjFcIixcbiAgY2xpX25hbWU6IFwidGVycmFmb3JtXCIsXG4gIGNsaV92ZXJzaW9uOiBcIjEuNy41XCIsXG59O1xuXG5kZXNjcmliZShcInJlYWRTY2hlbWEgLSBlbWlzc2lvbiBnYXAgd2FybmluZyBvbiBjYWNoZSBoaXRzIChyZWdyZXNzaW9uKVwiLCAoKSA9PiB7XG4gIGxldCBjYWNoZURpcjogc3RyaW5nO1xuICBsZXQgd2FyblNweTogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjYWNoZURpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJwcm92aWRlci1zY2hlbWEtY2FjaGUtXCIpKTtcbiAgICB3YXJuU3B5ID0gamVzdC5zcHlPbihsb2dnZXIsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdW5kZWZpbmVkKTtcbiAgICBnZXRGZXRjaGluZ0NsaVZlcnNpb25Nb2NrLm1vY2tSZXNldCgpO1xuICAgIGdldEZldGNoaW5nQ2xpVmVyc2lvbk1vY2subW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgbmFtZTogXCJ0ZXJyYWZvcm1cIixcbiAgICAgIHZlcnNpb246IFwiMS43LjVcIixcbiAgICB9KTtcbiAgICByZWFkUHJvdmlkZXJTY2hlbWFNb2NrLm1vY2tSZXNldCgpO1xuICAgIHJlYWRQcm92aWRlclNjaGVtYU1vY2subW9ja1Jlc29sdmVkVmFsdWUoc3RhbXBlZEZpeHR1cmUpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHdhcm5TcHkubW9ja1Jlc3RvcmUoKTtcbiAgICBmcy5yZW1vdmVTeW5jKGNhY2hlRGlyKTtcbiAgfSk7XG5cbiAgaXQoXCJmaXJlcyB0aGUgd2FybmluZyBvbiBib3RoIGEgZnJlc2ggZmV0Y2ggYW5kIGEgbGF0ZXIgY2FjaGUgaGl0IGZvciB0aGUgc2FtZSB0YXJnZXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KFwiaGFzaGljb3JwL251bGxAMy4xLjBcIik7XG4gICAgY29uc3QgdGFyZ2V0VmVyc2lvbnMgPSB7IHRlcnJhZm9ybTogXCI+PTEuMTIuMFwiIH07XG5cbiAgICBhd2FpdCByZWFkU2NoZW1hKFtjb25zdHJhaW50XSwgY2FjaGVEaXIsIHRhcmdldFZlcnNpb25zKTtcbiAgICBhd2FpdCByZWFkU2NoZW1hKFtjb25zdHJhaW50XSwgY2FjaGVEaXIsIHRhcmdldFZlcnNpb25zKTtcblxuICAgIC8vIHNlY29uZCByZWFkU2NoZW1hIGNhbGwgaXMgc2VydmVkIGZyb20gdGhlIG9uLWRpc2sgY2FjaGUgd3JpdHRlbiBieSB0aGVcbiAgICAvLyBmaXJzdCAtIHRoZSB1bmRlcmx5aW5nIGZldGNoIG9ubHkgZXZlciBydW5zIG9uY2UuXG4gICAgZXhwZWN0KHJlYWRQcm92aWRlclNjaGVtYU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgIC8vIHlldCB0aGUgZW1pc3Npb24tZ2FwIHdhcm5pbmcgZmlyZXMgZm9yIGJvdGggY2FsbHMsIGJlY2F1c2UgaXQgbm93XG4gICAgLy8gcnVucyBhZ2FpbnN0IHRoZSByZXNvbHZlZCAoY2FjaGVkLW9yLWZyZXNoKSBzY2hlbWEgaW4gcmVhZC50cywgbm90XG4gICAgLy8gaW5zaWRlIHJlYWRQcm92aWRlclNjaGVtYS5cbiAgICBleHBlY3Qod2FyblNweSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIGV4cGVjdCh3YXJuU3B5Lm1vY2suY2FsbHNbMF1bMF0pLnRvQ29udGFpbihcbiAgICAgIFwicHJvdmlkZXIgc2NoZW1hIGZldGNoZWQgd2l0aCB0ZXJyYWZvcm0gMS43LjVcIixcbiAgICApO1xuICAgIGV4cGVjdCh3YXJuU3B5Lm1vY2suY2FsbHNbMV1bMF0pLnRvQ29udGFpbihcbiAgICAgIFwicHJvdmlkZXIgc2NoZW1hIGZldGNoZWQgd2l0aCB0ZXJyYWZvcm0gMS43LjVcIixcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|
package/build/cache.js
CHANGED
|
@@ -19,15 +19,25 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
19
19
|
}) : function(o, v) {
|
|
20
20
|
o["default"] = v;
|
|
21
21
|
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || function (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
};
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
29
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.cachedAccess =
|
|
40
|
+
exports.cachedAccess = cachedAccess;
|
|
31
41
|
const commons_1 = require("@cdktn/commons");
|
|
32
42
|
const fs = __importStar(require("fs-extra"));
|
|
33
43
|
const path = __importStar(require("path"));
|
|
@@ -68,5 +78,4 @@ function cachedAccess(producer, cacheDir, keySuffix) {
|
|
|
68
78
|
return result;
|
|
69
79
|
};
|
|
70
80
|
}
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw0Q0FBdUU7QUFDdkUsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUU3QixxRUFBcUU7QUFDckUscUZBQXFGO0FBQ3JGLEVBQUU7QUFDRiwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLDBFQUEwRTtBQUMxRSxzQ0FBc0M7QUFDdEMsU0FBUyxRQUFRLENBQUMsS0FBNEIsRUFBRSxTQUFrQjtJQUNoRSxNQUFNLElBQUksR0FBRyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsQ0FDakUsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQ3BCLEVBQUUsQ0FBQztJQUNKLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkUsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FDMUIsUUFBa0MsRUFDbEMsUUFBd0IsRUFDeEIsU0FBa0I7SUFFbEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRXpFLElBQUksWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFrQixDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUNwRSxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUNoQixvQ0FBb0MsUUFBUSxzQkFBc0IsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEUsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDckIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDckQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQU0sQ0FBQztRQUNoRSxDQUFDO1FBQ0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsQ0FBQztRQUV6RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN2QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDO0FBbkNELG9DQW1DQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0c01ha2VyVGFyZ2V0LCBsb2dnZXIsIEVycm9ycyB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8vIFdlIGtlZXAgdGhpcyB2ZXJ5IHNpbXBsZSBzaW5jZSB0aGUgY2FjaGluZyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbFxuLy8gd2UgbWlnaHQgbmVlZCB0byBkbyBob3VzZWtlZXBpbmcgLyBpbmNsdWRlIHRlcnJhZm9ybSAvIGNka3RmIHZlcnNpb24gaW4gdGhlIGZ1dHVyZVxuLy9cbi8vIGtleVN1ZmZpeCBkaXN0aW5ndWlzaGVzIGNhY2hlIGVudHJpZXMgZmV0Y2hlZCBieSBkaWZmZXJlbnQgQ0xJcy92ZXJzaW9uc1xuLy8gKGUuZy4gXCJ0ZXJyYWZvcm0tMS43XCIpIHNvIGEgc2NoZW1hIGZldGNoZWQgYnkgYSBDTEkgdG9vIG9sZCB0byBlbWl0IG5ld2VyXG4vLyBzZWN0aW9ucyAoZnVuY3Rpb25zLCBlcGhlbWVyYWwgcmVzb3VyY2VzLCAuLi4pIGlzbid0IHNlcnZlZCB1cCBhcyBpZiBpdFxuLy8gd2VyZSBhIGNvbXBsZXRlIGZldGNoLiBTZWUgcmVhZC50cy5cbmZ1bmN0aW9uIGNhY2hlS2V5KGlucHV0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsIGtleVN1ZmZpeD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2UgPSBgJHtlbmNvZGVVUklDb21wb25lbnQoaW5wdXQuZnFuKX1AJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgaW5wdXQudmVyc2lvbiB8fCBcIlwiLFxuICApfWA7XG4gIHJldHVybiBrZXlTdWZmaXggPyBgJHtiYXNlfUAke2VuY29kZVVSSUNvbXBvbmVudChrZXlTdWZmaXgpfWAgOiBiYXNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVkQWNjZXNzPEkgZXh0ZW5kcyBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsIE8+KFxuICBwcm9kdWNlcjogKGlucHV0OiBJKSA9PiBQcm9taXNlPE8+LFxuICBjYWNoZURpcj86IHN0cmluZyB8IG51bGwsXG4gIGtleVN1ZmZpeD86IHN0cmluZyxcbik6IChpbnB1dDogSSkgPT4gUHJvbWlzZTxPPiB7XG4gIGNvbnN0IGNhY2hlRW5hYmxlZCA9IHR5cGVvZiBjYWNoZURpciA9PT0gXCJzdHJpbmdcIiAmJiBjYWNoZURpci5sZW5ndGggPiAwO1xuXG4gIGlmIChjYWNoZUVuYWJsZWQgJiYgIWZzLmxzdGF0U3luYyhjYWNoZURpciBhcyBzdHJpbmcpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICBgUHJvdmlkZXIgU2NoZW1hIENhY2hlIGRpcmVjdG9yeSAnJHtjYWNoZURpcn0nIGlzIG5vdCBhIGRpcmVjdG9yeWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmICghY2FjaGVFbmFibGVkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBQcm92aWRlciBTY2hlbWEgQ2FjaGUgZGlzYWJsZWRgKTtcbiAgICByZXR1cm4gKGlucHV0KSA9PiB7XG4gICAgICByZXR1cm4gcHJvZHVjZXIoaW5wdXQpO1xuICAgIH07XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFByb3ZpZGVyIFNjaGVtYSBDYWNoZSBlbmFibGVkLCBjYWNoaW5nIGF0ICR7Y2FjaGVEaXJ9YCk7XG4gIHJldHVybiBhc3luYyAoaW5wdXQpID0+IHtcbiAgICBjb25zdCBrZXkgPSBjYWNoZUtleShpbnB1dCwga2V5U3VmZml4KTtcbiAgICBjb25zdCBjYWNoZVBhdGggPSBwYXRoLmpvaW4oY2FjaGVEaXIsIGAke2tleX0uanNvbmApO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNhY2hlUGF0aCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUgaGl0IGZvciAke2tleX1gKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGNhY2hlUGF0aCwgXCJ1dGYtOFwiKSkgYXMgTztcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBDYWNoZSBtaXNzIGZvciAke2tleX0sIGdlbmVyYXRpbmcgc2NoZW1hYCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9kdWNlcihpbnB1dCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGNhY2hlUGF0aCwgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgbG9nZ2VyLmRlYnVnKGBXcml0ZSBjYWNoZSBmb3IgJHtrZXl9YCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbiJdfQ==
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkgsb0NBbUNDO0FBckRELDRDQUF1RTtBQUN2RSw2Q0FBK0I7QUFDL0IsMkNBQTZCO0FBRTdCLHFFQUFxRTtBQUNyRSxxRkFBcUY7QUFDckYsRUFBRTtBQUNGLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLHNDQUFzQztBQUN0QyxTQUFTLFFBQVEsQ0FBQyxLQUE0QixFQUFFLFNBQWtCO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUNqRSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FDcEIsRUFBRSxDQUFDO0lBQ0osT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RSxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUMxQixRQUFrQyxFQUNsQyxRQUF3QixFQUN4QixTQUFrQjtJQUVsQixNQUFNLFlBQVksR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFekUsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQWtCLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQ2hCLG9DQUFvQyxRQUFRLHNCQUFzQixDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0RSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNyQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNyRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBTSxDQUFDO1FBQ2hFLENBQUM7UUFDRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXpELE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RELGdCQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlclRhcmdldCwgbG9nZ2VyLCBFcnJvcnMgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vLyBXZSBrZWVwIHRoaXMgdmVyeSBzaW1wbGUgc2luY2UgdGhlIGNhY2hpbmcgZmVhdHVyZSBpcyBleHBlcmltZW50YWxcbi8vIHdlIG1pZ2h0IG5lZWQgdG8gZG8gaG91c2VrZWVwaW5nIC8gaW5jbHVkZSB0ZXJyYWZvcm0gLyBjZGt0ZiB2ZXJzaW9uIGluIHRoZSBmdXR1cmVcbi8vXG4vLyBrZXlTdWZmaXggZGlzdGluZ3Vpc2hlcyBjYWNoZSBlbnRyaWVzIGZldGNoZWQgYnkgZGlmZmVyZW50IENMSXMvdmVyc2lvbnNcbi8vIChlLmcuIFwidGVycmFmb3JtLTEuN1wiKSBzbyBhIHNjaGVtYSBmZXRjaGVkIGJ5IGEgQ0xJIHRvbyBvbGQgdG8gZW1pdCBuZXdlclxuLy8gc2VjdGlvbnMgKGZ1bmN0aW9ucywgZXBoZW1lcmFsIHJlc291cmNlcywgLi4uKSBpc24ndCBzZXJ2ZWQgdXAgYXMgaWYgaXRcbi8vIHdlcmUgYSBjb21wbGV0ZSBmZXRjaC4gU2VlIHJlYWQudHMuXG5mdW5jdGlvbiBjYWNoZUtleShpbnB1dDogQ29uc3RydWN0c01ha2VyVGFyZ2V0LCBrZXlTdWZmaXg/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0LmZxbil9QCR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgIGlucHV0LnZlcnNpb24gfHwgXCJcIixcbiAgKX1gO1xuICByZXR1cm4ga2V5U3VmZml4ID8gYCR7YmFzZX1AJHtlbmNvZGVVUklDb21wb25lbnQoa2V5U3VmZml4KX1gIDogYmFzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlZEFjY2VzczxJIGV4dGVuZHMgQ29uc3RydWN0c01ha2VyVGFyZ2V0LCBPPihcbiAgcHJvZHVjZXI6IChpbnB1dDogSSkgPT4gUHJvbWlzZTxPPixcbiAgY2FjaGVEaXI/OiBzdHJpbmcgfCBudWxsLFxuICBrZXlTdWZmaXg/OiBzdHJpbmcsXG4pOiAoaW5wdXQ6IEkpID0+IFByb21pc2U8Tz4ge1xuICBjb25zdCBjYWNoZUVuYWJsZWQgPSB0eXBlb2YgY2FjaGVEaXIgPT09IFwic3RyaW5nXCIgJiYgY2FjaGVEaXIubGVuZ3RoID4gMDtcblxuICBpZiAoY2FjaGVFbmFibGVkICYmICFmcy5sc3RhdFN5bmMoY2FjaGVEaXIgYXMgc3RyaW5nKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgYFByb3ZpZGVyIFNjaGVtYSBDYWNoZSBkaXJlY3RvcnkgJyR7Y2FjaGVEaXJ9JyBpcyBub3QgYSBkaXJlY3RvcnlgLFxuICAgICk7XG4gIH1cblxuICBpZiAoIWNhY2hlRW5hYmxlZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUHJvdmlkZXIgU2NoZW1hIENhY2hlIGRpc2FibGVkYCk7XG4gICAgcmV0dXJuIChpbnB1dCkgPT4ge1xuICAgICAgcmV0dXJuIHByb2R1Y2VyKGlucHV0KTtcbiAgICB9O1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBQcm92aWRlciBTY2hlbWEgQ2FjaGUgZW5hYmxlZCwgY2FjaGluZyBhdCAke2NhY2hlRGlyfWApO1xuICByZXR1cm4gYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkoaW5wdXQsIGtleVN1ZmZpeCk7XG4gICAgY29uc3QgY2FjaGVQYXRoID0gcGF0aC5qb2luKGNhY2hlRGlyLCBgJHtrZXl9Lmpzb25gKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhjYWNoZVBhdGgpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYENhY2hlIGhpdCBmb3IgJHtrZXl9YCk7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShjYWNoZVBhdGgsIFwidXRmLThcIikpIGFzIE87XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUgbWlzcyBmb3IgJHtrZXl9LCBnZW5lcmF0aW5nIHNjaGVtYWApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvZHVjZXIoaW5wdXQpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShjYWNoZVBhdGgsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgV3JpdGUgY2FjaGUgZm9yICR7a2V5fWApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4iXX0=
|