@cdktn/provider-generator 0.24.0-pre.87 → 0.24.0-pre.89
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__/edge-provider-schema/builder.d.ts +9 -3
- package/build/__tests__/edge-provider-schema/builder.js +6 -3
- package/build/__tests__/edge-provider-schema/index.js +119 -1
- package/build/__tests__/provider.test.js +4 -1
- package/build/get/__tests__/generator/ephemeral-resources.test.d.ts +2 -0
- package/build/get/__tests__/generator/ephemeral-resources.test.js +49 -0
- package/build/get/__tests__/generator/provider-functions.test.d.ts +2 -0
- package/build/get/__tests__/generator/provider-functions.test.js +176 -0
- package/build/get/__tests__/generator/provider.test.js +9 -1
- package/build/get/__tests__/generator/write-only.test.d.ts +2 -0
- package/build/get/__tests__/generator/write-only.test.js +65 -0
- package/build/get/__tests__/target-versions.test.d.ts +2 -0
- package/build/get/__tests__/target-versions.test.js +171 -0
- package/build/get/constructs-maker.d.ts +8 -1
- package/build/get/constructs-maker.js +13 -4
- package/build/get/generator/emitter/attributes-emitter.d.ts +12 -2
- package/build/get/generator/emitter/attributes-emitter.js +47 -5
- package/build/get/generator/emitter/index.d.ts +1 -0
- package/build/get/generator/emitter/index.js +2 -1
- package/build/get/generator/emitter/provider-functions-emitter.d.ts +11 -0
- package/build/get/generator/emitter/provider-functions-emitter.js +94 -0
- package/build/get/generator/emitter/resource-emitter.d.ts +5 -1
- package/build/get/generator/emitter/resource-emitter.js +83 -7
- package/build/get/generator/models/attribute-model.d.ts +2 -0
- package/build/get/generator/models/attribute-model.js +2 -1
- package/build/get/generator/models/index.d.ts +1 -0
- package/build/get/generator/models/index.js +2 -1
- package/build/get/generator/models/provider-function-model.d.ts +102 -0
- package/build/get/generator/models/provider-function-model.js +667 -0
- package/build/get/generator/models/resource-model.d.ts +3 -0
- package/build/get/generator/models/resource-model.js +13 -4
- package/build/get/generator/models/struct.d.ts +2 -0
- package/build/get/generator/models/struct.js +6 -2
- package/build/get/generator/provider-generator.d.ts +2 -0
- package/build/get/generator/provider-generator.js +31 -3
- package/build/get/generator/resource-parser.js +3 -1
- package/package.json +5 -5
- package/src/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +4 -0
- package/src/__tests__/edge-provider-schema/builder.ts +17 -1
- package/src/__tests__/edge-provider-schema/index.ts +124 -1
- package/src/__tests__/provider.test.ts +3 -0
- package/src/get/__tests__/generator/__snapshots__/ephemeral-resources.test.ts.snap +524 -0
- package/src/get/__tests__/generator/__snapshots__/provider-functions.test.ts.snap +444 -0
- package/src/get/__tests__/generator/__snapshots__/write-only.test.ts.snap +262 -0
- package/src/get/__tests__/generator/ephemeral-resources.test.ts +46 -0
- package/src/get/__tests__/generator/fixtures/ephemeral-resources.test.fixture.json +160 -0
- package/src/get/__tests__/generator/fixtures/provider-functions-collision.test.fixture.json +31 -0
- package/src/get/__tests__/generator/fixtures/provider-functions-synthetic.test.fixture.json +192 -0
- package/src/get/__tests__/generator/fixtures/provider-functions.test.fixture.json +170 -0
- package/src/get/__tests__/generator/fixtures/write-only.test.fixture.json +58 -0
- package/src/get/__tests__/generator/provider-functions.test.ts +262 -0
- package/src/get/__tests__/generator/provider.test.ts +8 -0
- package/src/get/__tests__/generator/write-only.test.ts +71 -0
- package/src/get/__tests__/target-versions.test.ts +206 -0
- package/src/get/constructs-maker.ts +43 -3
- package/src/get/generator/emitter/attributes-emitter.ts +61 -6
- package/src/get/generator/emitter/index.ts +1 -0
- package/src/get/generator/emitter/provider-functions-emitter.ts +117 -0
- package/src/get/generator/emitter/resource-emitter.ts +110 -6
- package/src/get/generator/models/attribute-model.ts +3 -0
- package/src/get/generator/models/index.ts +1 -0
- package/src/get/generator/models/provider-function-model.ts +872 -0
- package/src/get/generator/models/resource-model.ts +25 -3
- package/src/get/generator/models/struct.ts +9 -1
- package/src/get/generator/provider-generator.ts +70 -4
- package/src/get/generator/resource-parser.ts +2 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
// Copyright (c) HashiCorp, Inc
|
|
27
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
30
|
+
const provider_generator_1 = require("../../generator/provider-generator");
|
|
31
|
+
const provider_function_model_1 = require("../../generator/models/provider-function-model");
|
|
32
|
+
const codemaker_1 = require("codemaker");
|
|
33
|
+
const util_1 = require("../util");
|
|
34
|
+
const tmp = (0, util_1.createTmpHelper)();
|
|
35
|
+
test("generate provider functions for the time provider (real terraform 1.15.6 schema fragment)", async () => {
|
|
36
|
+
const code = new codemaker_1.CodeMaker();
|
|
37
|
+
const workdir = tmp("provider-functions.test");
|
|
38
|
+
const spec = JSON.parse(fs.readFileSync(path.join(__dirname, "fixtures", "provider-functions.test.fixture.json"), "utf-8"));
|
|
39
|
+
new provider_generator_1.TerraformProviderGenerator(code, spec).generateAll();
|
|
40
|
+
await code.save(workdir);
|
|
41
|
+
const providerFunctionsOutput = fs.readFileSync(path.join(workdir, "providers/time/provider-functions/index.ts"), "utf-8");
|
|
42
|
+
expect(providerFunctionsOutput).toMatchSnapshot("time-provider-functions");
|
|
43
|
+
const providerOutput = fs.readFileSync(path.join(workdir, "providers/time/provider/index.ts"), "utf-8");
|
|
44
|
+
expect(providerOutput).toMatchSnapshot("time-provider");
|
|
45
|
+
const providerIndex = fs.readFileSync(path.join(workdir, "providers/time/index.ts"), "utf-8");
|
|
46
|
+
expect(providerIndex).toMatchSnapshot("provider-index");
|
|
47
|
+
const providerLazyIndex = fs.readFileSync(path.join(workdir, "providers/time/lazy-index.ts"), "utf-8");
|
|
48
|
+
expect(providerLazyIndex).toMatchSnapshot("provider-lazy-index");
|
|
49
|
+
});
|
|
50
|
+
describe("generate provider functions covering variadic parameters, primitive/list returns, and a 'default' parameter name", () => {
|
|
51
|
+
let providerFunctionsOutput;
|
|
52
|
+
let providerIndex;
|
|
53
|
+
let providerLazyIndex;
|
|
54
|
+
beforeAll(async () => {
|
|
55
|
+
const code = new codemaker_1.CodeMaker();
|
|
56
|
+
const workdir = tmp("provider-functions-synthetic.test");
|
|
57
|
+
const spec = JSON.parse(fs.readFileSync(path.join(__dirname, "fixtures", "provider-functions-synthetic.test.fixture.json"), "utf-8"));
|
|
58
|
+
new provider_generator_1.TerraformProviderGenerator(code, spec).generateAll();
|
|
59
|
+
await code.save(workdir);
|
|
60
|
+
providerFunctionsOutput = fs.readFileSync(path.join(workdir, "providers/example/provider-functions/index.ts"), "utf-8");
|
|
61
|
+
providerIndex = fs.readFileSync(path.join(workdir, "providers/example/index.ts"), "utf-8");
|
|
62
|
+
providerLazyIndex = fs.readFileSync(path.join(workdir, "providers/example/lazy-index.ts"), "utf-8");
|
|
63
|
+
});
|
|
64
|
+
test("matches the snapshot", () => {
|
|
65
|
+
expect(providerFunctionsOutput).toMatchSnapshot("example-provider-functions");
|
|
66
|
+
expect(providerIndex).toMatchSnapshot("provider-index");
|
|
67
|
+
expect(providerLazyIndex).toMatchSnapshot("provider-lazy-index");
|
|
68
|
+
});
|
|
69
|
+
test("nested collection docstrings use the compact recursive Array/Set notation", () => {
|
|
70
|
+
// list(set(string)): notation carries the structure; a plain Terraform
|
|
71
|
+
// list needs no prose note.
|
|
72
|
+
expect(providerFunctionsOutput).toContain("@param {Array<Set<string>>} nameGroups");
|
|
73
|
+
expect(providerFunctionsOutput).toContain("@returns {Array<Set<string>>}");
|
|
74
|
+
// set(list(string)): Set<...> notation plus the set-semantics prose note
|
|
75
|
+
// (the jsii type is still an array - the note keeps a reader from
|
|
76
|
+
// literally passing a JS Set).
|
|
77
|
+
expect(providerFunctionsOutput).toContain("@param {Set<Array<string>>} nameLists - Terraform set; ordering is not guaranteed and duplicate values are removed.");
|
|
78
|
+
expect(providerFunctionsOutput).toContain("@returns {Set<Array<string>>} Terraform set; ordering is not guaranteed and duplicate values are removed.");
|
|
79
|
+
});
|
|
80
|
+
// This package has no TypeScript-compiling harness
|
|
81
|
+
// for generated output (no fixture/test anywhere generates a snippet and
|
|
82
|
+
// feeds it through `tsc`/`ts.transpileModule`, and `cdktn` itself isn't a
|
|
83
|
+
// dependency of this package to typecheck against), so these are
|
|
84
|
+
// structural assertions on the emitted declaration text rather than an
|
|
85
|
+
// actual compile - see also the runtime-level proof in
|
|
86
|
+
// packages/cdktn/test/provider-functions.test.ts, which exercises the
|
|
87
|
+
// same union/token mechanics these signatures rely on.
|
|
88
|
+
describe("composition: a function's return type is directly assignable to another function's parameter of the 'same' Terraform type", () => {
|
|
89
|
+
test("flagsForSeed()'s set(bool) return type (cdktn.IResolvable) is one of the exact union members flagSet()'s set(bool) parameter declares", () => {
|
|
90
|
+
expect(providerFunctionsOutput).toContain("public flagsForSeed(seed: string): cdktn.IResolvable {");
|
|
91
|
+
expect(providerFunctionsOutput).toContain("public flagSet(flags: Array<boolean | cdktn.IResolvable> | cdktn.IResolvable): cdktn.IResolvable {");
|
|
92
|
+
});
|
|
93
|
+
test("defaultTags()'s map(string) return type is textually identical to tagMap()'s map(string) parameter type", () => {
|
|
94
|
+
expect(providerFunctionsOutput).toContain("public defaultTags(prefix: string): { [key: string]: string } {");
|
|
95
|
+
expect(providerFunctionsOutput).toContain("public tagMap(tags: { [key: string]: string }): string {");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
test("a list(bool) parameter (not just set(bool)) also accepts a whole-collection token", () => {
|
|
99
|
+
expect(providerFunctionsOutput).toContain("public flagsOrdered(flags: Array<boolean | cdktn.IResolvable> | cdktn.IResolvable): cdktn.IResolvable {");
|
|
100
|
+
});
|
|
101
|
+
test("a list(object) parameter widens to any[] | cdktn.IResolvable (whole-collection token accepted)", () => {
|
|
102
|
+
expect(providerFunctionsOutput).toContain("public describeConfigs(configs: any[] | cdktn.IResolvable): string {");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
test("buildProviderFunctionsModel throws when two function names collapse to the same generated method name", () => {
|
|
106
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
107
|
+
foo_bar: { return_type: "string", parameters: [] },
|
|
108
|
+
foo__bar: { return_type: "string", parameters: [] },
|
|
109
|
+
})).toThrow(/foo_bar/);
|
|
110
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
111
|
+
foo_bar: { return_type: "string", parameters: [] },
|
|
112
|
+
foo__bar: { return_type: "string", parameters: [] },
|
|
113
|
+
})).toThrow(/foo__bar/);
|
|
114
|
+
});
|
|
115
|
+
test("buildProviderFunctionsModel throws when two parameter names collapse within one function", () => {
|
|
116
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
117
|
+
my_function: {
|
|
118
|
+
return_type: "string",
|
|
119
|
+
parameters: [
|
|
120
|
+
{ name: "some_value", type: "string" },
|
|
121
|
+
{ name: "some__value", type: "string" },
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
})).toThrow(/some_value/);
|
|
125
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
126
|
+
my_function: {
|
|
127
|
+
return_type: "string",
|
|
128
|
+
parameters: [
|
|
129
|
+
{ name: "some_value", type: "string" },
|
|
130
|
+
{ name: "some__value", type: "string" },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
})).toThrow(/some__value/);
|
|
134
|
+
});
|
|
135
|
+
// Both of these assert the model-level throw happens before any file is
|
|
136
|
+
// generated: buildProviderFunctionsModel is called directly, with no
|
|
137
|
+
// CodeMaker/generator involved, so there is no emission step to reach.
|
|
138
|
+
test("buildProviderFunctionsModel throws when a function name sanitizes to 'constructor'", () => {
|
|
139
|
+
// The nested signature literal is cast to `FunctionSignature` (rather than
|
|
140
|
+
// relying on contextual typing from the surrounding index signature)
|
|
141
|
+
// because TypeScript special-cases a property literally named
|
|
142
|
+
// "constructor" - contextually typing it against `Function` (from
|
|
143
|
+
// `Object.prototype`) instead of the index signature's `FunctionSignature`,
|
|
144
|
+
// and spuriously flagging `return_type: "string"` as an error. See
|
|
145
|
+
// https://github.com/microsoft/TypeScript/issues/40776.
|
|
146
|
+
const signature = {
|
|
147
|
+
return_type: "string",
|
|
148
|
+
parameters: [],
|
|
149
|
+
};
|
|
150
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
151
|
+
constructor: signature,
|
|
152
|
+
})).toThrow(/constructor/);
|
|
153
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
154
|
+
constructor: signature,
|
|
155
|
+
})).toThrow(/example/);
|
|
156
|
+
});
|
|
157
|
+
test("buildProviderFunctionsModel throws when a function name sanitizes to 'providerLocalName'", () => {
|
|
158
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
159
|
+
provider_local_name: { return_type: "string", parameters: [] },
|
|
160
|
+
})).toThrow(/provider_local_name/);
|
|
161
|
+
expect(() => (0, provider_function_model_1.buildProviderFunctionsModel)("example", {
|
|
162
|
+
provider_local_name: { return_type: "string", parameters: [] },
|
|
163
|
+
})).toThrow(/providerLocalName/);
|
|
164
|
+
});
|
|
165
|
+
test("assertNoFunctionsGetterCollision throws when the provider's own config schema would generate a 'functions' property", () => {
|
|
166
|
+
expect(() => (0, provider_function_model_1.assertNoFunctionsGetterCollision)("example", ["alias", "functions"])).toThrow(/"functions"/);
|
|
167
|
+
});
|
|
168
|
+
test("assertNoFunctionsGetterCollision does not throw when there is no colliding attribute", () => {
|
|
169
|
+
expect(() => (0, provider_function_model_1.assertNoFunctionsGetterCollision)("example", ["alias"])).not.toThrow();
|
|
170
|
+
});
|
|
171
|
+
test("generation throws when a provider's config attribute collides with the generated 'functions' getter", async () => {
|
|
172
|
+
const code = new codemaker_1.CodeMaker();
|
|
173
|
+
const spec = JSON.parse(fs.readFileSync(path.join(__dirname, "fixtures", "provider-functions-collision.test.fixture.json"), "utf-8"));
|
|
174
|
+
expect(() => new provider_generator_1.TerraformProviderGenerator(code, spec).generateAll()).toThrow(/"functions"/);
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZnVuY3Rpb25zLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L19fdGVzdHNfXy9nZW5lcmF0b3IvcHJvdmlkZXItZnVuY3Rpb25zLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QiwyRUFBZ0Y7QUFDaEYsNEZBR3dEO0FBQ3hELHlDQUFzQztBQUV0QyxrQ0FBMEM7QUFFMUMsTUFBTSxHQUFHLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7QUFFOUIsSUFBSSxDQUFDLDJGQUEyRixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzNHLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3JCLEVBQUUsQ0FBQyxZQUFZLENBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLHNDQUFzQyxDQUFDLEVBQ3hFLE9BQU8sQ0FDUixDQUNGLENBQUM7SUFDRixJQUFJLCtDQUEwQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6RCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFekIsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw0Q0FBNEMsQ0FBQyxFQUNoRSxPQUFPLENBQ1IsQ0FBQztJQUNGLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sY0FB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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IgfSBmcm9tIFwiLi4vLi4vZ2VuZXJhdG9yL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHtcbiAgYXNzZXJ0Tm9GdW5jdGlvbnNHZXR0ZXJDb2xsaXNpb24sXG4gIGJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbCxcbn0gZnJvbSBcIi4uLy4uL2dlbmVyYXRvci9tb2RlbHMvcHJvdmlkZXItZnVuY3Rpb24tbW9kZWxcIjtcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7IEZ1bmN0aW9uU2lnbmF0dXJlIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBjcmVhdGVUbXBIZWxwZXIgfSBmcm9tIFwiLi4vdXRpbFwiO1xuXG5jb25zdCB0bXAgPSBjcmVhdGVUbXBIZWxwZXIoKTtcblxudGVzdChcImdlbmVyYXRlIHByb3ZpZGVyIGZ1bmN0aW9ucyBmb3IgdGhlIHRpbWUgcHJvdmlkZXIgKHJlYWwgdGVycmFmb3JtIDEuMTUuNiBzY2hlbWEgZnJhZ21lbnQpXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgY29kZSA9IG5ldyBDb2RlTWFrZXIoKTtcbiAgY29uc3Qgd29ya2RpciA9IHRtcChcInByb3ZpZGVyLWZ1bmN0aW9ucy50ZXN0XCIpO1xuICBjb25zdCBzcGVjID0gSlNPTi5wYXJzZShcbiAgICBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImZpeHR1cmVzXCIsIFwicHJvdmlkZXItZnVuY3Rpb25zLnRlc3QuZml4dHVyZS5qc29uXCIpLFxuICAgICAgXCJ1dGYtOFwiLFxuICAgICksXG4gICk7XG4gIG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcihjb2RlLCBzcGVjKS5nZW5lcmF0ZUFsbCgpO1xuICBhd2FpdCBjb2RlLnNhdmUod29ya2Rpcik7XG5cbiAgY29uc3QgcHJvdmlkZXJGdW5jdGlvbnNPdXRwdXQgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFwicHJvdmlkZXJzL3RpbWUvcHJvdmlkZXItZnVuY3Rpb25zL2luZGV4LnRzXCIpLFxuICAgIFwidXRmLThcIixcbiAgKTtcbiAgZXhwZWN0KHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0KS50b01hdGNoU25hcHNob3QoXCJ0aW1lLXByb3ZpZGVyLWZ1bmN0aW9uc1wiKTtcblxuICBjb25zdCBwcm92aWRlck91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4od29ya2RpciwgXCJwcm92aWRlcnMvdGltZS9wcm92aWRlci9pbmRleC50c1wiKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdChwcm92aWRlck91dHB1dCkudG9NYXRjaFNuYXBzaG90KFwidGltZS1wcm92aWRlclwiKTtcblxuICBjb25zdCBwcm92aWRlckluZGV4ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBcInByb3ZpZGVycy90aW1lL2luZGV4LnRzXCIpLFxuICAgIFwidXRmLThcIixcbiAgKTtcbiAgZXhwZWN0KHByb3ZpZGVySW5kZXgpLnRvTWF0Y2hTbmFwc2hvdChcInByb3ZpZGVyLWluZGV4XCIpO1xuXG4gIGNvbnN0IHByb3ZpZGVyTGF6eUluZGV4ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBcInByb3ZpZGVycy90aW1lL2xhenktaW5kZXgudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3QocHJvdmlkZXJMYXp5SW5kZXgpLnRvTWF0Y2hTbmFwc2hvdChcInByb3ZpZGVyLWxhenktaW5kZXhcIik7XG59KTtcblxuZGVzY3JpYmUoXCJnZW5lcmF0ZSBwcm92aWRlciBmdW5jdGlvbnMgY292ZXJpbmcgdmFyaWFkaWMgcGFyYW1ldGVycywgcHJpbWl0aXZlL2xpc3QgcmV0dXJucywgYW5kIGEgJ2RlZmF1bHQnIHBhcmFtZXRlciBuYW1lXCIsICgpID0+IHtcbiAgbGV0IHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0OiBzdHJpbmc7XG4gIGxldCBwcm92aWRlckluZGV4OiBzdHJpbmc7XG4gIGxldCBwcm92aWRlckxhenlJbmRleDogc3RyaW5nO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29kZSA9IG5ldyBDb2RlTWFrZXIoKTtcbiAgICBjb25zdCB3b3JrZGlyID0gdG1wKFwicHJvdmlkZXItZnVuY3Rpb25zLXN5bnRoZXRpYy50ZXN0XCIpO1xuICAgIGNvbnN0IHNwZWMgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4oXG4gICAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICAgIFwiZml4dHVyZXNcIixcbiAgICAgICAgICBcInByb3ZpZGVyLWZ1bmN0aW9ucy1zeW50aGV0aWMudGVzdC5maXh0dXJlLmpzb25cIixcbiAgICAgICAgKSxcbiAgICAgICAgXCJ1dGYtOFwiLFxuICAgICAgKSxcbiAgICApO1xuICAgIG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcihjb2RlLCBzcGVjKS5nZW5lcmF0ZUFsbCgpO1xuICAgIGF3YWl0IGNvZGUuc2F2ZSh3b3JrZGlyKTtcblxuICAgIHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKHdvcmtkaXIsIFwicHJvdmlkZXJzL2V4YW1wbGUvcHJvdmlkZXItZnVuY3Rpb25zL2luZGV4LnRzXCIpLFxuICAgICAgXCJ1dGYtOFwiLFxuICAgICk7XG4gICAgcHJvdmlkZXJJbmRleCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbih3b3JrZGlyLCBcInByb3ZpZGVycy9leGFtcGxlL2luZGV4LnRzXCIpLFxuICAgICAgXCJ1dGYtOFwiLFxuICAgICk7XG4gICAgcHJvdmlkZXJMYXp5SW5kZXggPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4od29ya2RpciwgXCJwcm92aWRlcnMvZXhhbXBsZS9sYXp5LWluZGV4LnRzXCIpLFxuICAgICAgXCJ1dGYtOFwiLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJtYXRjaGVzIHRoZSBzbmFwc2hvdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0KS50b01hdGNoU25hcHNob3QoXG4gICAgICBcImV4YW1wbGUtcHJvdmlkZXItZnVuY3Rpb25zXCIsXG4gICAgKTtcbiAgICBleHBlY3QocHJvdmlkZXJJbmRleCkudG9NYXRjaFNuYXBzaG90KFwicHJvdmlkZXItaW5kZXhcIik7XG4gICAgZXhwZWN0KHByb3ZpZGVyTGF6eUluZGV4KS50b01hdGNoU25hcHNob3QoXCJwcm92aWRlci1sYXp5LWluZGV4XCIpO1xuICB9KTtcblxuICB0ZXN0KFwibmVzdGVkIGNvbGxlY3Rpb24gZG9jc3RyaW5ncyB1c2UgdGhlIGNvbXBhY3QgcmVjdXJzaXZlIEFycmF5L1NldCBub3RhdGlvblwiLCAoKSA9PiB7XG4gICAgLy8gbGlzdChzZXQoc3RyaW5nKSk6IG5vdGF0aW9uIGNhcnJpZXMgdGhlIHN0cnVjdHVyZTsgYSBwbGFpbiBUZXJyYWZvcm1cbiAgICAvLyBsaXN0IG5lZWRzIG5vIHByb3NlIG5vdGUuXG4gICAgZXhwZWN0KHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0KS50b0NvbnRhaW4oXG4gICAgICBcIkBwYXJhbSB7QXJyYXk8U2V0PHN0cmluZz4+fSBuYW1lR3JvdXBzXCIsXG4gICAgKTtcbiAgICBleHBlY3QocHJvdmlkZXJGdW5jdGlvbnNPdXRwdXQpLnRvQ29udGFpbihcIkByZXR1cm5zIHtBcnJheTxTZXQ8c3RyaW5nPj59XCIpO1xuICAgIC8vIHNldChsaXN0KHN0cmluZykpOiBTZXQ8Li4uPiBub3RhdGlvbiBwbHVzIHRoZSBzZXQtc2VtYW50aWNzIHByb3NlIG5vdGVcbiAgICAvLyAodGhlIGpzaWkgdHlwZSBpcyBzdGlsbCBhbiBhcnJheSAtIHRoZSBub3RlIGtlZXBzIGEgcmVhZGVyIGZyb21cbiAgICAvLyBsaXRlcmFsbHkgcGFzc2luZyBhIEpTIFNldCkuXG4gICAgZXhwZWN0KHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0KS50b0NvbnRhaW4oXG4gICAgICBcIkBwYXJhbSB7U2V0PEFycmF5PHN0cmluZz4+fSBuYW1lTGlzdHMgLSBUZXJyYWZvcm0gc2V0OyBvcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBhbmQgZHVwbGljYXRlIHZhbHVlcyBhcmUgcmVtb3ZlZC5cIixcbiAgICApO1xuICAgIGV4cGVjdChwcm92aWRlckZ1bmN0aW9uc091dHB1dCkudG9Db250YWluKFxuICAgICAgXCJAcmV0dXJucyB7U2V0PEFycmF5PHN0cmluZz4+fSBUZXJyYWZvcm0gc2V0OyBvcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBhbmQgZHVwbGljYXRlIHZhbHVlcyBhcmUgcmVtb3ZlZC5cIixcbiAgICApO1xuICB9KTtcblxuICAvLyBUaGlzIHBhY2thZ2UgaGFzIG5vIFR5cGVTY3JpcHQtY29tcGlsaW5nIGhhcm5lc3NcbiAgLy8gZm9yIGdlbmVyYXRlZCBvdXRwdXQgKG5vIGZpeHR1cmUvdGVzdCBhbnl3aGVyZSBnZW5lcmF0ZXMgYSBzbmlwcGV0IGFuZFxuICAvLyBmZWVkcyBpdCB0aHJvdWdoIGB0c2NgL2B0cy50cmFuc3BpbGVNb2R1bGVgLCBhbmQgYGNka3RuYCBpdHNlbGYgaXNuJ3QgYVxuICAvLyBkZXBlbmRlbmN5IG9mIHRoaXMgcGFja2FnZSB0byB0eXBlY2hlY2sgYWdhaW5zdCksIHNvIHRoZXNlIGFyZVxuICAvLyBzdHJ1Y3R1cmFsIGFzc2VydGlvbnMgb24gdGhlIGVtaXR0ZWQgZGVjbGFyYXRpb24gdGV4dCByYXRoZXIgdGhhbiBhblxuICAvLyBhY3R1YWwgY29tcGlsZSAtIHNlZSBhbHNvIHRoZSBydW50aW1lLWxldmVsIHByb29mIGluXG4gIC8vIHBhY2thZ2VzL2Nka3RuL3Rlc3QvcHJvdmlkZXItZnVuY3Rpb25zLnRlc3QudHMsIHdoaWNoIGV4ZXJjaXNlcyB0aGVcbiAgLy8gc2FtZSB1bmlvbi90b2tlbiBtZWNoYW5pY3MgdGhlc2Ugc2lnbmF0dXJlcyByZWx5IG9uLlxuICBkZXNjcmliZShcImNvbXBvc2l0aW9uOiBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgaXMgZGlyZWN0bHkgYXNzaWduYWJsZSB0byBhbm90aGVyIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyIG9mIHRoZSAnc2FtZScgVGVycmFmb3JtIHR5cGVcIiwgKCkgPT4ge1xuICAgIHRlc3QoXCJmbGFnc0ZvclNlZWQoKSdzIHNldChib29sKSByZXR1cm4gdHlwZSAoY2RrdG4uSVJlc29sdmFibGUpIGlzIG9uZSBvZiB0aGUgZXhhY3QgdW5pb24gbWVtYmVycyBmbGFnU2V0KCkncyBzZXQoYm9vbCkgcGFyYW1ldGVyIGRlY2xhcmVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChwcm92aWRlckZ1bmN0aW9uc091dHB1dCkudG9Db250YWluKFxuICAgICAgICBcInB1YmxpYyBmbGFnc0ZvclNlZWQoc2VlZDogc3RyaW5nKTogY2RrdG4uSVJlc29sdmFibGUge1wiLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChwcm92aWRlckZ1bmN0aW9uc091dHB1dCkudG9Db250YWluKFxuICAgICAgICBcInB1YmxpYyBmbGFnU2V0KGZsYWdzOiBBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGUpOiBjZGt0bi5JUmVzb2x2YWJsZSB7XCIsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGVzdChcImRlZmF1bHRUYWdzKCkncyBtYXAoc3RyaW5nKSByZXR1cm4gdHlwZSBpcyB0ZXh0dWFsbHkgaWRlbnRpY2FsIHRvIHRhZ01hcCgpJ3MgbWFwKHN0cmluZykgcGFyYW1ldGVyIHR5cGVcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0KS50b0NvbnRhaW4oXG4gICAgICAgIFwicHVibGljIGRlZmF1bHRUYWdzKHByZWZpeDogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHByb3ZpZGVyRnVuY3Rpb25zT3V0cHV0KS50b0NvbnRhaW4oXG4gICAgICAgIFwicHVibGljIHRhZ01hcCh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogc3RyaW5nIHtcIixcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhIGxpc3QoYm9vbCkgcGFyYW1ldGVyIChub3QganVzdCBzZXQoYm9vbCkpIGFsc28gYWNjZXB0cyBhIHdob2xlLWNvbGxlY3Rpb24gdG9rZW5cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwcm92aWRlckZ1bmN0aW9uc091dHB1dCkudG9Db250YWluKFxuICAgICAgXCJwdWJsaWMgZmxhZ3NPcmRlcmVkKGZsYWdzOiBBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGUpOiBjZGt0bi5JUmVzb2x2YWJsZSB7XCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImEgbGlzdChvYmplY3QpIHBhcmFtZXRlciB3aWRlbnMgdG8gYW55W10gfCBjZGt0bi5JUmVzb2x2YWJsZSAod2hvbGUtY29sbGVjdGlvbiB0b2tlbiBhY2NlcHRlZClcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwcm92aWRlckZ1bmN0aW9uc091dHB1dCkudG9Db250YWluKFxuICAgICAgXCJwdWJsaWMgZGVzY3JpYmVDb25maWdzKGNvbmZpZ3M6IGFueVtdIHwgY2RrdG4uSVJlc29sdmFibGUpOiBzdHJpbmcge1wiLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbnRlc3QoXCJidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgdGhyb3dzIHdoZW4gdHdvIGZ1bmN0aW9uIG5hbWVzIGNvbGxhcHNlIHRvIHRoZSBzYW1lIGdlbmVyYXRlZCBtZXRob2QgbmFtZVwiLCAoKSA9PiB7XG4gIGV4cGVjdCgoKSA9PlxuICAgIGJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbChcImV4YW1wbGVcIiwge1xuICAgICAgZm9vX2JhcjogeyByZXR1cm5fdHlwZTogXCJzdHJpbmdcIiwgcGFyYW1ldGVyczogW10gfSxcbiAgICAgIGZvb19fYmFyOiB7IHJldHVybl90eXBlOiBcInN0cmluZ1wiLCBwYXJhbWV0ZXJzOiBbXSB9LFxuICAgIH0pLFxuICApLnRvVGhyb3coL2Zvb19iYXIvKTtcbiAgZXhwZWN0KCgpID0+XG4gICAgYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsKFwiZXhhbXBsZVwiLCB7XG4gICAgICBmb29fYmFyOiB7IHJldHVybl90eXBlOiBcInN0cmluZ1wiLCBwYXJhbWV0ZXJzOiBbXSB9LFxuICAgICAgZm9vX19iYXI6IHsgcmV0dXJuX3R5cGU6IFwic3RyaW5nXCIsIHBhcmFtZXRlcnM6IFtdIH0sXG4gICAgfSksXG4gICkudG9UaHJvdygvZm9vX19iYXIvKTtcbn0pO1xuXG50ZXN0KFwiYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsIHRocm93cyB3aGVuIHR3byBwYXJhbWV0ZXIgbmFtZXMgY29sbGFwc2Ugd2l0aGluIG9uZSBmdW5jdGlvblwiLCAoKSA9PiB7XG4gIGV4cGVjdCgoKSA9PlxuICAgIGJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbChcImV4YW1wbGVcIiwge1xuICAgICAgbXlfZnVuY3Rpb246IHtcbiAgICAgICAgcmV0dXJuX3R5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgICAgICB7IG5hbWU6IFwic29tZV92YWx1ZVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInNvbWVfX3ZhbHVlXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSksXG4gICkudG9UaHJvdygvc29tZV92YWx1ZS8pO1xuICBleHBlY3QoKCkgPT5cbiAgICBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXCJleGFtcGxlXCIsIHtcbiAgICAgIG15X2Z1bmN0aW9uOiB7XG4gICAgICAgIHJldHVybl90eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgeyBuYW1lOiBcInNvbWVfdmFsdWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHsgbmFtZTogXCJzb21lX192YWx1ZVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pLFxuICApLnRvVGhyb3coL3NvbWVfX3ZhbHVlLyk7XG59KTtcblxuLy8gQm90aCBvZiB0aGVzZSBhc3NlcnQgdGhlIG1vZGVsLWxldmVsIHRocm93IGhhcHBlbnMgYmVmb3JlIGFueSBmaWxlIGlzXG4vLyBnZW5lcmF0ZWQ6IGJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbCBpcyBjYWxsZWQgZGlyZWN0bHksIHdpdGggbm9cbi8vIENvZGVNYWtlci9nZW5lcmF0b3IgaW52b2x2ZWQsIHNvIHRoZXJlIGlzIG5vIGVtaXNzaW9uIHN0ZXAgdG8gcmVhY2guXG50ZXN0KFwiYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsIHRocm93cyB3aGVuIGEgZnVuY3Rpb24gbmFtZSBzYW5pdGl6ZXMgdG8gJ2NvbnN0cnVjdG9yJ1wiLCAoKSA9PiB7XG4gIC8vIFRoZSBuZXN0ZWQgc2lnbmF0dXJlIGxpdGVyYWwgaXMgY2FzdCB0byBgRnVuY3Rpb25TaWduYXR1cmVgIChyYXRoZXIgdGhhblxuICAvLyByZWx5aW5nIG9uIGNvbnRleHR1YWwgdHlwaW5nIGZyb20gdGhlIHN1cnJvdW5kaW5nIGluZGV4IHNpZ25hdHVyZSlcbiAgLy8gYmVjYXVzZSBUeXBlU2NyaXB0IHNwZWNpYWwtY2FzZXMgYSBwcm9wZXJ0eSBsaXRlcmFsbHkgbmFtZWRcbiAgLy8gXCJjb25zdHJ1Y3RvclwiIC0gY29udGV4dHVhbGx5IHR5cGluZyBpdCBhZ2FpbnN0IGBGdW5jdGlvbmAgKGZyb21cbiAgLy8gYE9iamVjdC5wcm90b3R5cGVgKSBpbnN0ZWFkIG9mIHRoZSBpbmRleCBzaWduYXR1cmUncyBgRnVuY3Rpb25TaWduYXR1cmVgLFxuICAvLyBhbmQgc3B1cmlvdXNseSBmbGFnZ2luZyBgcmV0dXJuX3R5cGU6IFwic3RyaW5nXCJgIGFzIGFuIGVycm9yLiBTZWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy80MDc3Ni5cbiAgY29uc3Qgc2lnbmF0dXJlOiBGdW5jdGlvblNpZ25hdHVyZSA9IHtcbiAgICByZXR1cm5fdHlwZTogXCJzdHJpbmdcIixcbiAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgfTtcbiAgZXhwZWN0KCgpID0+XG4gICAgYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsKFwiZXhhbXBsZVwiLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjogc2lnbmF0dXJlLFxuICAgIH0pLFxuICApLnRvVGhyb3coL2NvbnN0cnVjdG9yLyk7XG4gIGV4cGVjdCgoKSA9PlxuICAgIGJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbChcImV4YW1wbGVcIiwge1xuICAgICAgY29uc3RydWN0b3I6IHNpZ25hdHVyZSxcbiAgICB9KSxcbiAgKS50b1Rocm93KC9leGFtcGxlLyk7XG59KTtcblxudGVzdChcImJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbCB0aHJvd3Mgd2hlbiBhIGZ1bmN0aW9uIG5hbWUgc2FuaXRpemVzIHRvICdwcm92aWRlckxvY2FsTmFtZSdcIiwgKCkgPT4ge1xuICBleHBlY3QoKCkgPT5cbiAgICBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXCJleGFtcGxlXCIsIHtcbiAgICAgIHByb3ZpZGVyX2xvY2FsX25hbWU6IHsgcmV0dXJuX3R5cGU6IFwic3RyaW5nXCIsIHBhcmFtZXRlcnM6IFtdIH0sXG4gICAgfSksXG4gICkudG9UaHJvdygvcHJvdmlkZXJfbG9jYWxfbmFtZS8pO1xuICBleHBlY3QoKCkgPT5cbiAgICBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXCJleGFtcGxlXCIsIHtcbiAgICAgIHByb3ZpZGVyX2xvY2FsX25hbWU6IHsgcmV0dXJuX3R5cGU6IFwic3RyaW5nXCIsIHBhcmFtZXRlcnM6IFtdIH0sXG4gICAgfSksXG4gICkudG9UaHJvdygvcHJvdmlkZXJMb2NhbE5hbWUvKTtcbn0pO1xuXG50ZXN0KFwiYXNzZXJ0Tm9GdW5jdGlvbnNHZXR0ZXJDb2xsaXNpb24gdGhyb3dzIHdoZW4gdGhlIHByb3ZpZGVyJ3Mgb3duIGNvbmZpZyBzY2hlbWEgd291bGQgZ2VuZXJhdGUgYSAnZnVuY3Rpb25zJyBwcm9wZXJ0eVwiLCAoKSA9PiB7XG4gIGV4cGVjdCgoKSA9PlxuICAgIGFzc2VydE5vRnVuY3Rpb25zR2V0dGVyQ29sbGlzaW9uKFwiZXhhbXBsZVwiLCBbXCJhbGlhc1wiLCBcImZ1bmN0aW9uc1wiXSksXG4gICkudG9UaHJvdygvXCJmdW5jdGlvbnNcIi8pO1xufSk7XG5cbnRlc3QoXCJhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbiBkb2VzIG5vdCB0aHJvdyB3aGVuIHRoZXJlIGlzIG5vIGNvbGxpZGluZyBhdHRyaWJ1dGVcIiwgKCkgPT4ge1xuICBleHBlY3QoKCkgPT5cbiAgICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbihcImV4YW1wbGVcIiwgW1wiYWxpYXNcIl0pLFxuICApLm5vdC50b1Rocm93KCk7XG59KTtcblxudGVzdChcImdlbmVyYXRpb24gdGhyb3dzIHdoZW4gYSBwcm92aWRlcidzIGNvbmZpZyBhdHRyaWJ1dGUgY29sbGlkZXMgd2l0aCB0aGUgZ2VuZXJhdGVkICdmdW5jdGlvbnMnIGdldHRlclwiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBuZXcgQ29kZU1ha2VyKCk7XG4gIGNvbnN0IHNwZWMgPSBKU09OLnBhcnNlKFxuICAgIGZzLnJlYWRGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBcImZpeHR1cmVzXCIsXG4gICAgICAgIFwicHJvdmlkZXItZnVuY3Rpb25zLWNvbGxpc2lvbi50ZXN0LmZpeHR1cmUuanNvblwiLFxuICAgICAgKSxcbiAgICAgIFwidXRmLThcIixcbiAgICApLFxuICApO1xuICBleHBlY3QoKCkgPT5cbiAgICBuZXcgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IoY29kZSwgc3BlYykuZ2VuZXJhdGVBbGwoKSxcbiAgKS50b1Rocm93KC9cImZ1bmN0aW9uc1wiLyk7XG59KTtcbiJdfQ==
|
|
@@ -39,6 +39,10 @@ test("generate provider", async () => {
|
|
|
39
39
|
await code.save(workdir);
|
|
40
40
|
const output = fs.readFileSync(path.join(workdir, "providers/aws/provider/index.ts"), "utf-8");
|
|
41
41
|
expect(output).toMatchSnapshot();
|
|
42
|
+
// aws has no provider-defined functions in this fixture - no getter, no
|
|
43
|
+
// cross-directory import should be emitted.
|
|
44
|
+
expect(output).not.toContain("public get functions()");
|
|
45
|
+
expect(output).not.toContain("provider-functions");
|
|
42
46
|
});
|
|
43
47
|
test("generate provider with only block_types", async () => {
|
|
44
48
|
const code = new codemaker_1.CodeMaker();
|
|
@@ -48,5 +52,9 @@ test("generate provider with only block_types", async () => {
|
|
|
48
52
|
await code.save(workdir);
|
|
49
53
|
const output = fs.readFileSync(path.join(workdir, "providers/elasticstack/provider/index.ts"), "utf-8");
|
|
50
54
|
expect(output).toMatchSnapshot();
|
|
55
|
+
// elasticstack has no provider-defined functions in this fixture - no
|
|
56
|
+
// getter, no cross-directory import should be emitted.
|
|
57
|
+
expect(output).not.toContain("public get functions()");
|
|
58
|
+
expect(output).not.toContain("provider-functions");
|
|
51
59
|
});
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZXQvX190ZXN0c19fL2dlbmVyYXRvci9wcm92aWRlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsMkVBQWdGO0FBQ2hGLHlDQUFzQztBQUN0QyxrQ0FBMEM7QUFFMUMsTUFBTSxHQUFHLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7QUFFOUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNyQixFQUFFLENBQUMsWUFBWSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUNsRSxPQUFPLENBQ1IsQ0FDRixDQUFDO0lBQ0YsSUFBSSwrQ0FBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDLEVBQ3JELE9BQU8sQ0FDUixDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2pDLHdFQUF3RTtJQUN4RSw0Q0FBNEM7SUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN2RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNyQixFQUFFLENBQUMsWUFBWSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQ1AsU0FBUyxFQUNULFVBQVUsRUFDVix5Q0FBeUMsQ0FDMUMsRUFDRCxPQUFPLENBQ1IsQ0FDRixDQUFDO0lBQ0YsSUFBSSwrQ0FBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDBDQUEwQyxDQUFDLEVBQzlELE9BQU8sQ0FDUixDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2pDLHNFQUFzRTtJQUN0RSx1REFBdUQ7SUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN2RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IgfSBmcm9tIFwiLi4vLi4vZ2VuZXJhdG9yL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgQ29kZU1ha2VyIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgY3JlYXRlVG1wSGVscGVyIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuY29uc3QgdG1wID0gY3JlYXRlVG1wSGVscGVyKCk7XG5cbnRlc3QoXCJnZW5lcmF0ZSBwcm92aWRlclwiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBuZXcgQ29kZU1ha2VyKCk7XG4gIGNvbnN0IHdvcmtkaXIgPSB0bXAoXCJwcm92aWRlci50ZXN0XCIpO1xuICBjb25zdCBzcGVjID0gSlNPTi5wYXJzZShcbiAgICBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImZpeHR1cmVzXCIsIFwiYXdzLXByb3ZpZGVyLnRlc3QuZml4dHVyZS5qc29uXCIpLFxuICAgICAgXCJ1dGYtOFwiLFxuICAgICksXG4gICk7XG4gIG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcihjb2RlLCBzcGVjKS5nZW5lcmF0ZUFsbCgpO1xuICBhd2FpdCBjb2RlLnNhdmUod29ya2Rpcik7XG5cbiAgY29uc3Qgb3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBcInByb3ZpZGVycy9hd3MvcHJvdmlkZXIvaW5kZXgudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbiAgLy8gYXdzIGhhcyBubyBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyBpbiB0aGlzIGZpeHR1cmUgLSBubyBnZXR0ZXIsIG5vXG4gIC8vIGNyb3NzLWRpcmVjdG9yeSBpbXBvcnQgc2hvdWxkIGJlIGVtaXR0ZWQuXG4gIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oXCJwdWJsaWMgZ2V0IGZ1bmN0aW9ucygpXCIpO1xuICBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKFwicHJvdmlkZXItZnVuY3Rpb25zXCIpO1xufSk7XG5cbnRlc3QoXCJnZW5lcmF0ZSBwcm92aWRlciB3aXRoIG9ubHkgYmxvY2tfdHlwZXNcIiwgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBjb2RlID0gbmV3IENvZGVNYWtlcigpO1xuICBjb25zdCB3b3JrZGlyID0gdG1wKFwicHJvdmlkZXIudGVzdFwiKTtcbiAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UoXG4gICAgZnMucmVhZEZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIFwiZml4dHVyZXNcIixcbiAgICAgICAgXCJlbGFzdGljc3RhY2stcHJvdmlkZXIudGVzdC5maXh0dXJlLmpzb25cIixcbiAgICAgICksXG4gICAgICBcInV0Zi04XCIsXG4gICAgKSxcbiAgKTtcbiAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKGNvZGUsIHNwZWMpLmdlbmVyYXRlQWxsKCk7XG4gIGF3YWl0IGNvZGUuc2F2ZSh3b3JrZGlyKTtcblxuICBjb25zdCBvdXRwdXQgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFwicHJvdmlkZXJzL2VsYXN0aWNzdGFjay9wcm92aWRlci9pbmRleC50c1wiKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAvLyBlbGFzdGljc3RhY2sgaGFzIG5vIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb25zIGluIHRoaXMgZml4dHVyZSAtIG5vXG4gIC8vIGdldHRlciwgbm8gY3Jvc3MtZGlyZWN0b3J5IGltcG9ydCBzaG91bGQgYmUgZW1pdHRlZC5cbiAgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbihcInB1YmxpYyBnZXQgZnVuY3Rpb25zKClcIik7XG4gIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oXCJwcm92aWRlci1mdW5jdGlvbnNcIik7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
// Copyright (c) HashiCorp, Inc
|
|
27
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
30
|
+
const provider_generator_1 = require("../../generator/provider-generator");
|
|
31
|
+
const codemaker_1 = require("codemaker");
|
|
32
|
+
const util_1 = require("../util");
|
|
33
|
+
const tmp = (0, util_1.createTmpHelper)();
|
|
34
|
+
test("generate a vault_alicloud_secret_backend resource with a write-only attribute", async () => {
|
|
35
|
+
const code = new codemaker_1.CodeMaker();
|
|
36
|
+
const workdir = tmp("write-only.test");
|
|
37
|
+
const spec = JSON.parse(fs.readFileSync(path.join(__dirname, "fixtures", "write-only.test.fixture.json"), "utf-8"));
|
|
38
|
+
new provider_generator_1.TerraformProviderGenerator(code, spec).generateAll();
|
|
39
|
+
await code.save(workdir);
|
|
40
|
+
const output = fs.readFileSync(path.join(workdir, "providers/vault/alicloud-secret-backend/index.ts"), "utf-8");
|
|
41
|
+
expect(output).toMatchSnapshot();
|
|
42
|
+
// The write-only attribute's getter is deprecated ...
|
|
43
|
+
expect(output).toMatch(/@deprecated Write-only: the provider never returns this value[\s\S]*?public get secretKeyWo\(\)/);
|
|
44
|
+
// ... its setter is a plain assignment ...
|
|
45
|
+
expect(output).toMatch(/public set secretKeyWo\(value: string\) \{\n\s*this\._secretKeyWo = value;\n\s*\}/);
|
|
46
|
+
// ... and usage registration happens at resolve time, from inside
|
|
47
|
+
// synthesizeAttributes()/synthesizeHclAttributes(), by wrapping the
|
|
48
|
+
// mapped value in markWriteOnlyAttribute() ...
|
|
49
|
+
expect(output).toMatch(/secret_key_wo: this\.markWriteOnlyAttribute\(cdktn\.stringToTerraform\(this\._secretKeyWo\)\),/);
|
|
50
|
+
expect(output).toMatch(/value: this\.markWriteOnlyAttribute\(cdktn\.stringToHclTerraform\(this\._secretKeyWo\)\),/);
|
|
51
|
+
// The required write-only attribute gets no reset method (required
|
|
52
|
+
// attributes never do) ...
|
|
53
|
+
expect(output).not.toMatch(/resetSecretKeyWo\b/);
|
|
54
|
+
// ... but the OPTIONAL write-only sibling does, exercising the reset ->
|
|
55
|
+
// clear -> synth-passes path end to end at the generator level.
|
|
56
|
+
expect(output).toMatch(/public resetSecondarySecretKeyWo\(\) \{\n\s*this\._secondarySecretKeyWo = undefined;\n\s*\}/);
|
|
57
|
+
expect(output).toMatch(/secondary_secret_key_wo: this\.markWriteOnlyAttribute\(cdktn\.stringToTerraform\(this\._secondarySecretKeyWo\)\),/);
|
|
58
|
+
// The non-write-only sibling attribute is untouched: its getter is
|
|
59
|
+
// emitted directly (no @deprecated JSDoc immediately above), its setter
|
|
60
|
+
// has no registration call, and its synthesis isn't wrapped.
|
|
61
|
+
expect(output).toMatch(/private _secretKeyWoVersion\?: number; \n\s*public get secretKeyWoVersion\(\)/);
|
|
62
|
+
expect(output).toMatch(/public set secretKeyWoVersion\(value: number\) \{\n\s*this\._secretKeyWoVersion = value;\n\s*\}/);
|
|
63
|
+
expect(output).toMatch(/secret_key_wo_version: cdktn\.numberToTerraform\(this\._secretKeyWoVersion\),/);
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtb25seS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9fX3Rlc3RzX18vZ2VuZXJhdG9yL3dyaXRlLW9ubHkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDJFQUFnRjtBQUNoRix5Q0FBc0M7QUFDdEMsa0NBQTBDO0FBRTFDLE1BQU0sR0FBRyxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO0FBRTlCLElBQUksQ0FBQywrRUFBK0UsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMvRixNQUFNLElBQUksR0FBRyxJQUFJLHFCQUFTLEVBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNyQixFQUFFLENBQUMsWUFBWSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSw4QkFBOEIsQ0FBQyxFQUNoRSxPQUFPLENBQ1IsQ0FDRixDQUFDO0lBQ0YsSUFBSSwrQ0FBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtEQUFrRCxDQUFDLEVBQ3RFLE9BQU8sQ0FDUixDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBRWpDLHNEQUFzRDtJQUN0RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUNwQixpR0FBaUcsQ0FDbEcsQ0FBQztJQUNGLDJDQUEyQztJQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUNwQixtRkFBbUYsQ0FDcEYsQ0FBQztJQUNGLGtFQUFrRTtJQUNsRSxvRUFBb0U7SUFDcEUsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQ3BCLGdHQUFnRyxDQUNqRyxDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FDcEIsMkZBQTJGLENBQzVGLENBQUM7SUFFRixtRUFBbUU7SUFDbkUsMkJBQTJCO0lBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDakQsd0VBQXdFO0lBQ3hFLGdFQUFnRTtJQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUNwQiw2RkFBNkYsQ0FDOUYsQ0FBQztJQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQ3BCLG1IQUFtSCxDQUNwSCxDQUFDO0lBRUYsbUVBQW1FO0lBQ25FLHdFQUF3RTtJQUN4RSw2REFBNkQ7SUFDN0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FDcEIsK0VBQStFLENBQ2hGLENBQUM7SUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUNwQixpR0FBaUcsQ0FDbEcsQ0FBQztJQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQ3BCLCtFQUErRSxDQUNoRixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvciB9IGZyb20gXCIuLi8uLi9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVUbXBIZWxwZXIgfSBmcm9tIFwiLi4vdXRpbFwiO1xuXG5jb25zdCB0bXAgPSBjcmVhdGVUbXBIZWxwZXIoKTtcblxudGVzdChcImdlbmVyYXRlIGEgdmF1bHRfYWxpY2xvdWRfc2VjcmV0X2JhY2tlbmQgcmVzb3VyY2Ugd2l0aCBhIHdyaXRlLW9ubHkgYXR0cmlidXRlXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgY29kZSA9IG5ldyBDb2RlTWFrZXIoKTtcbiAgY29uc3Qgd29ya2RpciA9IHRtcChcIndyaXRlLW9ubHkudGVzdFwiKTtcbiAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UoXG4gICAgZnMucmVhZEZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCJmaXh0dXJlc1wiLCBcIndyaXRlLW9ubHkudGVzdC5maXh0dXJlLmpzb25cIiksXG4gICAgICBcInV0Zi04XCIsXG4gICAgKSxcbiAgKTtcbiAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKGNvZGUsIHNwZWMpLmdlbmVyYXRlQWxsKCk7XG4gIGF3YWl0IGNvZGUuc2F2ZSh3b3JrZGlyKTtcblxuICBjb25zdCBvdXRwdXQgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFwicHJvdmlkZXJzL3ZhdWx0L2FsaWNsb3VkLXNlY3JldC1iYWNrZW5kL2luZGV4LnRzXCIpLFxuICAgIFwidXRmLThcIixcbiAgKTtcbiAgZXhwZWN0KG91dHB1dCkudG9NYXRjaFNuYXBzaG90KCk7XG5cbiAgLy8gVGhlIHdyaXRlLW9ubHkgYXR0cmlidXRlJ3MgZ2V0dGVyIGlzIGRlcHJlY2F0ZWQgLi4uXG4gIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goXG4gICAgL0BkZXByZWNhdGVkIFdyaXRlLW9ubHk6IHRoZSBwcm92aWRlciBuZXZlciByZXR1cm5zIHRoaXMgdmFsdWVbXFxzXFxTXSo/cHVibGljIGdldCBzZWNyZXRLZXlXb1xcKFxcKS8sXG4gICk7XG4gIC8vIC4uLiBpdHMgc2V0dGVyIGlzIGEgcGxhaW4gYXNzaWdubWVudCAuLi5cbiAgZXhwZWN0KG91dHB1dCkudG9NYXRjaChcbiAgICAvcHVibGljIHNldCBzZWNyZXRLZXlXb1xcKHZhbHVlOiBzdHJpbmdcXCkgXFx7XFxuXFxzKnRoaXNcXC5fc2VjcmV0S2V5V28gPSB2YWx1ZTtcXG5cXHMqXFx9LyxcbiAgKTtcbiAgLy8gLi4uIGFuZCB1c2FnZSByZWdpc3RyYXRpb24gaGFwcGVucyBhdCByZXNvbHZlIHRpbWUsIGZyb20gaW5zaWRlXG4gIC8vIHN5bnRoZXNpemVBdHRyaWJ1dGVzKCkvc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKSwgYnkgd3JhcHBpbmcgdGhlXG4gIC8vIG1hcHBlZCB2YWx1ZSBpbiBtYXJrV3JpdGVPbmx5QXR0cmlidXRlKCkgLi4uXG4gIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goXG4gICAgL3NlY3JldF9rZXlfd286IHRoaXNcXC5tYXJrV3JpdGVPbmx5QXR0cmlidXRlXFwoY2RrdG5cXC5zdHJpbmdUb1RlcnJhZm9ybVxcKHRoaXNcXC5fc2VjcmV0S2V5V29cXClcXCksLyxcbiAgKTtcbiAgZXhwZWN0KG91dHB1dCkudG9NYXRjaChcbiAgICAvdmFsdWU6IHRoaXNcXC5tYXJrV3JpdGVPbmx5QXR0cmlidXRlXFwoY2RrdG5cXC5zdHJpbmdUb0hjbFRlcnJhZm9ybVxcKHRoaXNcXC5fc2VjcmV0S2V5V29cXClcXCksLyxcbiAgKTtcblxuICAvLyBUaGUgcmVxdWlyZWQgd3JpdGUtb25seSBhdHRyaWJ1dGUgZ2V0cyBubyByZXNldCBtZXRob2QgKHJlcXVpcmVkXG4gIC8vIGF0dHJpYnV0ZXMgbmV2ZXIgZG8pIC4uLlxuICBleHBlY3Qob3V0cHV0KS5ub3QudG9NYXRjaCgvcmVzZXRTZWNyZXRLZXlXb1xcYi8pO1xuICAvLyAuLi4gYnV0IHRoZSBPUFRJT05BTCB3cml0ZS1vbmx5IHNpYmxpbmcgZG9lcywgZXhlcmNpc2luZyB0aGUgcmVzZXQgLT5cbiAgLy8gY2xlYXIgLT4gc3ludGgtcGFzc2VzIHBhdGggZW5kIHRvIGVuZCBhdCB0aGUgZ2VuZXJhdG9yIGxldmVsLlxuICBleHBlY3Qob3V0cHV0KS50b01hdGNoKFxuICAgIC9wdWJsaWMgcmVzZXRTZWNvbmRhcnlTZWNyZXRLZXlXb1xcKFxcKSBcXHtcXG5cXHMqdGhpc1xcLl9zZWNvbmRhcnlTZWNyZXRLZXlXbyA9IHVuZGVmaW5lZDtcXG5cXHMqXFx9LyxcbiAgKTtcbiAgZXhwZWN0KG91dHB1dCkudG9NYXRjaChcbiAgICAvc2Vjb25kYXJ5X3NlY3JldF9rZXlfd286IHRoaXNcXC5tYXJrV3JpdGVPbmx5QXR0cmlidXRlXFwoY2RrdG5cXC5zdHJpbmdUb1RlcnJhZm9ybVxcKHRoaXNcXC5fc2Vjb25kYXJ5U2VjcmV0S2V5V29cXClcXCksLyxcbiAgKTtcblxuICAvLyBUaGUgbm9uLXdyaXRlLW9ubHkgc2libGluZyBhdHRyaWJ1dGUgaXMgdW50b3VjaGVkOiBpdHMgZ2V0dGVyIGlzXG4gIC8vIGVtaXR0ZWQgZGlyZWN0bHkgKG5vIEBkZXByZWNhdGVkIEpTRG9jIGltbWVkaWF0ZWx5IGFib3ZlKSwgaXRzIHNldHRlclxuICAvLyBoYXMgbm8gcmVnaXN0cmF0aW9uIGNhbGwsIGFuZCBpdHMgc3ludGhlc2lzIGlzbid0IHdyYXBwZWQuXG4gIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goXG4gICAgL3ByaXZhdGUgX3NlY3JldEtleVdvVmVyc2lvblxcPzogbnVtYmVyOyBcXG5cXHMqcHVibGljIGdldCBzZWNyZXRLZXlXb1ZlcnNpb25cXChcXCkvLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoKFxuICAgIC9wdWJsaWMgc2V0IHNlY3JldEtleVdvVmVyc2lvblxcKHZhbHVlOiBudW1iZXJcXCkgXFx7XFxuXFxzKnRoaXNcXC5fc2VjcmV0S2V5V29WZXJzaW9uID0gdmFsdWU7XFxuXFxzKlxcfS8sXG4gICk7XG4gIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2goXG4gICAgL3NlY3JldF9rZXlfd29fdmVyc2lvbjogY2RrdG5cXC5udW1iZXJUb1RlcnJhZm9ybVxcKHRoaXNcXC5fc2VjcmV0S2V5V29WZXJzaW9uXFwpLC8sXG4gICk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
// Copyright (c) HashiCorp, Inc
|
|
27
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
28
|
+
const fs = __importStar(require("fs-extra"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
30
|
+
const commons_1 = require("@cdktn/commons");
|
|
31
|
+
const util_1 = require("./util");
|
|
32
|
+
const mockReadSchema = jest.fn();
|
|
33
|
+
jest.mock("@cdktn/provider-schema", () => ({
|
|
34
|
+
readSchema: (...args) => mockReadSchema(...args),
|
|
35
|
+
}));
|
|
36
|
+
// Imported after the mock so ConstructsMaker picks up the mocked readSchema.
|
|
37
|
+
const constructs_maker_1 = require("../constructs-maker");
|
|
38
|
+
const tmp = (0, util_1.createTmpHelper)();
|
|
39
|
+
const constraint = {
|
|
40
|
+
fqn: "hashicorp/random",
|
|
41
|
+
name: "random",
|
|
42
|
+
source: "hashicorp/random",
|
|
43
|
+
version: "3.1.3",
|
|
44
|
+
};
|
|
45
|
+
// Minimal schema - no resources/data sources - so generation stays within
|
|
46
|
+
// pure TypeScript emission (no jsii-pacmak invocation), mirroring the
|
|
47
|
+
// "empty-provider-resources" fixture used elsewhere in this package.
|
|
48
|
+
const fakeSchema = {
|
|
49
|
+
providerSchema: {
|
|
50
|
+
format_version: "0.2",
|
|
51
|
+
provider_schemas: {
|
|
52
|
+
"registry.terraform.io/hashicorp/random": {
|
|
53
|
+
resource_schemas: null,
|
|
54
|
+
data_source_schemas: null,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
provider_versions: {
|
|
58
|
+
"registry.terraform.io/hashicorp/random": "3.1.3",
|
|
59
|
+
},
|
|
60
|
+
cli_name: "terraform",
|
|
61
|
+
cli_version: "1.7.5",
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
describe("targetVersions threading through 'cdktn get'", () => {
|
|
65
|
+
beforeEach(() => {
|
|
66
|
+
mockReadSchema.mockReset();
|
|
67
|
+
mockReadSchema.mockResolvedValue(fakeSchema);
|
|
68
|
+
});
|
|
69
|
+
it("passes GetOptions.targetVersions through to readSchema", async () => {
|
|
70
|
+
const workdir = tmp("target-versions-thread.test");
|
|
71
|
+
const targetVersions = { terraform: ">=1.5.7" };
|
|
72
|
+
const options = {
|
|
73
|
+
codeMakerOutput: workdir,
|
|
74
|
+
targetLanguage: commons_1.Language.TYPESCRIPT,
|
|
75
|
+
targetVersions,
|
|
76
|
+
};
|
|
77
|
+
const maker = new constructs_maker_1.ConstructsMaker(options, "/some/cache/path");
|
|
78
|
+
await maker.generate([constraint]);
|
|
79
|
+
expect(mockReadSchema).toHaveBeenCalledWith([constraint], "/some/cache/path", targetVersions);
|
|
80
|
+
});
|
|
81
|
+
it("omits targetVersions from the readSchema call when not configured", async () => {
|
|
82
|
+
const workdir = tmp("target-versions-absent.test");
|
|
83
|
+
const options = {
|
|
84
|
+
codeMakerOutput: workdir,
|
|
85
|
+
targetLanguage: commons_1.Language.TYPESCRIPT,
|
|
86
|
+
};
|
|
87
|
+
const maker = new constructs_maker_1.ConstructsMaker(options);
|
|
88
|
+
await maker.generate([constraint]);
|
|
89
|
+
expect(mockReadSchema).toHaveBeenCalledWith([constraint], undefined, undefined);
|
|
90
|
+
});
|
|
91
|
+
it("stamps constraints.json with targetVersions + cli identity, and older constraints.json files without those fields are still treated as fresh (no forced regeneration)", async () => {
|
|
92
|
+
const workdir = tmp("target-versions-stamp.test");
|
|
93
|
+
const targetVersions = { terraform: ">=1.5.7" };
|
|
94
|
+
const options = {
|
|
95
|
+
codeMakerOutput: workdir,
|
|
96
|
+
targetLanguage: commons_1.Language.TYPESCRIPT,
|
|
97
|
+
targetVersions,
|
|
98
|
+
};
|
|
99
|
+
const maker = new constructs_maker_1.ConstructsMaker(options);
|
|
100
|
+
await maker.generate([constraint]);
|
|
101
|
+
const constraintsFile = JSON.parse(await fs.readFile(path.join(workdir, "constraints.json"), "utf8"));
|
|
102
|
+
expect(constraintsFile.targetVersions).toEqual(targetVersions);
|
|
103
|
+
expect(constraintsFile.cli).toEqual({
|
|
104
|
+
name: "terraform",
|
|
105
|
+
version: "1.7.5",
|
|
106
|
+
});
|
|
107
|
+
// Rewrite constraints.json as it would have looked before this feature
|
|
108
|
+
// landed (no targetVersions/cli fields), keeping the rest identical -
|
|
109
|
+
// this simulates re-running `cdktn get` against an output directory
|
|
110
|
+
// generated by an older cdktn version.
|
|
111
|
+
const { targetVersions: _tv, cli: _cli, ...legacyConstraints } = constraintsFile;
|
|
112
|
+
await fs.writeFile(path.join(workdir, "constraints.json"), JSON.stringify(legacyConstraints, null, 2));
|
|
113
|
+
const maker2 = new constructs_maker_1.ConstructsMaker(options);
|
|
114
|
+
const toGenerate = await maker2.filterAlreadyGenerated([constraint]);
|
|
115
|
+
expect(toGenerate).toEqual([]);
|
|
116
|
+
});
|
|
117
|
+
it("threads a partial targetVersions (single product) through unchanged and stamps it verbatim", async () => {
|
|
118
|
+
const workdir = tmp("target-versions-partial.test");
|
|
119
|
+
const targetVersions = { opentofu: ">=1.11.0" };
|
|
120
|
+
const options = {
|
|
121
|
+
codeMakerOutput: workdir,
|
|
122
|
+
targetLanguage: commons_1.Language.TYPESCRIPT,
|
|
123
|
+
targetVersions,
|
|
124
|
+
};
|
|
125
|
+
const maker = new constructs_maker_1.ConstructsMaker(options);
|
|
126
|
+
await maker.generate([constraint]);
|
|
127
|
+
expect(mockReadSchema).toHaveBeenCalledWith([constraint], undefined, targetVersions);
|
|
128
|
+
// The stamp records exactly what the project declared - no terraform
|
|
129
|
+
// default is injected at get-time (defaulting for the undeclared
|
|
130
|
+
// product happens only at synth-time, in resolveTargetVersions).
|
|
131
|
+
const constraintsFile = JSON.parse(await fs.readFile(path.join(workdir, "constraints.json"), "utf8"));
|
|
132
|
+
expect(constraintsFile.targetVersions).toEqual({ opentofu: ">=1.11.0" });
|
|
133
|
+
});
|
|
134
|
+
it("omits the cli stamp when the fetched schema carries no CLI version metadata", async () => {
|
|
135
|
+
const workdir = tmp("target-versions-no-cli.test");
|
|
136
|
+
const { cli_name: _cliName, cli_version: _cliVersion, ...schemaWithoutCli } = fakeSchema.providerSchema;
|
|
137
|
+
mockReadSchema.mockResolvedValue({ providerSchema: schemaWithoutCli });
|
|
138
|
+
const targetVersions = { terraform: ">=1.5.7" };
|
|
139
|
+
const options = {
|
|
140
|
+
codeMakerOutput: workdir,
|
|
141
|
+
targetLanguage: commons_1.Language.TYPESCRIPT,
|
|
142
|
+
targetVersions,
|
|
143
|
+
};
|
|
144
|
+
const maker = new constructs_maker_1.ConstructsMaker(options);
|
|
145
|
+
await maker.generate([constraint]);
|
|
146
|
+
const constraintsFile = JSON.parse(await fs.readFile(path.join(workdir, "constraints.json"), "utf8"));
|
|
147
|
+
expect(constraintsFile.cli).toBeUndefined();
|
|
148
|
+
expect(constraintsFile.targetVersions).toEqual(targetVersions);
|
|
149
|
+
});
|
|
150
|
+
it("does not force regeneration when targetVersions change between runs", async () => {
|
|
151
|
+
// The stamp is diagnostic-only: per the GetOptions.targetVersions doc,
|
|
152
|
+
// targetVersions never filters codegen (the full schema surface is
|
|
153
|
+
// always generated), so freshness only compares the providers map and
|
|
154
|
+
// the cdktf version.
|
|
155
|
+
const workdir = tmp("target-versions-change.test");
|
|
156
|
+
const options = {
|
|
157
|
+
codeMakerOutput: workdir,
|
|
158
|
+
targetLanguage: commons_1.Language.TYPESCRIPT,
|
|
159
|
+
targetVersions: { terraform: ">=1.5.7" },
|
|
160
|
+
};
|
|
161
|
+
const maker = new constructs_maker_1.ConstructsMaker(options);
|
|
162
|
+
await maker.generate([constraint]);
|
|
163
|
+
const maker2 = new constructs_maker_1.ConstructsMaker({
|
|
164
|
+
...options,
|
|
165
|
+
targetVersions: { terraform: ">=1.11.0" },
|
|
166
|
+
});
|
|
167
|
+
const toGenerate = await maker2.filterAlreadyGenerated([constraint]);
|
|
168
|
+
expect(toGenerate).toEqual([]);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LXZlcnNpb25zLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2V0L19fdGVzdHNfXy90YXJnZXQtdmVyc2lvbnMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw2Q0FBK0I7QUFDL0IsMkNBQTZCO0FBQzdCLDRDQUl3QjtBQUN4QixpQ0FBeUM7QUFFekMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6QyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVELENBQUMsQ0FBQyxDQUFDO0FBRUosNkVBQTZFO0FBQzdFLDBEQUFrRTtBQUVsRSxNQUFNLEdBQUcsR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztBQUU5QixNQUFNLFVBQVUsR0FBa0M7SUFDaEQsR0FBRyxFQUFFLGtCQUFrQjtJQUN2QixJQUFJLEVBQUUsUUFBUTtJQUNkLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQUVGLDBFQUEwRTtBQUMxRSxzRUFBc0U7QUFDdEUscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLGNBQWMsRUFBRTtRQUNkLGNBQWMsRUFBRSxLQUFjO1FBQzlCLGdCQUFnQixFQUFFO1lBQ2hCLHdDQUF3QyxFQUFFO2dCQUN4QyxnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixtQkFBbUIsRUFBRSxJQUFJO2FBQzFCO1NBQ0Y7UUFDRCxpQkFBaUIsRUFBRTtZQUNqQix3Q0FBd0MsRUFBRSxPQUFPO1NBQ2xEO1FBQ0QsUUFBUSxFQUFFLFdBQVc7UUFDckIsV0FB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TUFBTSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkYsdUVBQXVFO1FBQ3ZFLG1FQUFtRTtRQUNuRSxzRUFBc0U7UUFDdEUscUJBQXFCO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFlO1lBQzFCLGVBQWUsRUFBRSxPQUFPO1lBQ3hCLGNBQWMsRUFBRSxrQkFBUSxDQUFDLFVBQVU7WUFDbkMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtTQUN6QyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxrQ0FBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxrQ0FBZSxDQUFDO1lBQ2pDLEdBQUcsT0FBTztZQUNWLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUU7U0FDMUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludCxcbiAgVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgY3JlYXRlVG1wSGVscGVyIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5jb25zdCBtb2NrUmVhZFNjaGVtYSA9IGplc3QuZm4oKTtcbmplc3QubW9jayhcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIiwgKCkgPT4gKHtcbiAgcmVhZFNjaGVtYTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gbW9ja1JlYWRTY2hlbWEoLi4uYXJncyksXG59KSk7XG5cbi8vIEltcG9ydGVkIGFmdGVyIHRoZSBtb2NrIHNvIENvbnN0cnVjdHNNYWtlciBwaWNrcyB1cCB0aGUgbW9ja2VkIHJlYWRTY2hlbWEuXG5pbXBvcnQgeyBDb25zdHJ1Y3RzTWFrZXIsIEdldE9wdGlvbnMgfSBmcm9tIFwiLi4vY29uc3RydWN0cy1tYWtlclwiO1xuXG5jb25zdCB0bXAgPSBjcmVhdGVUbXBIZWxwZXIoKTtcblxuY29uc3QgY29uc3RyYWludDogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQgPSB7XG4gIGZxbjogXCJoYXNoaWNvcnAvcmFuZG9tXCIsXG4gIG5hbWU6IFwicmFuZG9tXCIsXG4gIHNvdXJjZTogXCJoYXNoaWNvcnAvcmFuZG9tXCIsXG4gIHZlcnNpb246IFwiMy4xLjNcIixcbn07XG5cbi8vIE1pbmltYWwgc2NoZW1hIC0gbm8gcmVzb3VyY2VzL2RhdGEgc291cmNlcyAtIHNvIGdlbmVyYXRpb24gc3RheXMgd2l0aGluXG4vLyBwdXJlIFR5cGVTY3JpcHQgZW1pc3Npb24gKG5vIGpzaWktcGFjbWFrIGludm9jYXRpb24pLCBtaXJyb3JpbmcgdGhlXG4vLyBcImVtcHR5LXByb3ZpZGVyLXJlc291cmNlc1wiIGZpeHR1cmUgdXNlZCBlbHNld2hlcmUgaW4gdGhpcyBwYWNrYWdlLlxuY29uc3QgZmFrZVNjaGVtYSA9IHtcbiAgcHJvdmlkZXJTY2hlbWE6IHtcbiAgICBmb3JtYXRfdmVyc2lvbjogXCIwLjJcIiBhcyBjb25zdCxcbiAgICBwcm92aWRlcl9zY2hlbWFzOiB7XG4gICAgICBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvcmFuZG9tXCI6IHtcbiAgICAgICAgcmVzb3VyY2Vfc2NoZW1hczogbnVsbCxcbiAgICAgICAgZGF0YV9zb3VyY2Vfc2NoZW1hczogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBwcm92aWRlcl92ZXJzaW9uczoge1xuICAgICAgXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL3JhbmRvbVwiOiBcIjMuMS4zXCIsXG4gICAgfSxcbiAgICBjbGlfbmFtZTogXCJ0ZXJyYWZvcm1cIixcbiAgICBjbGlfdmVyc2lvbjogXCIxLjcuNVwiLFxuICB9LFxufTtcblxuZGVzY3JpYmUoXCJ0YXJnZXRWZXJzaW9ucyB0aHJlYWRpbmcgdGhyb3VnaCAnY2RrdG4gZ2V0J1wiLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tSZWFkU2NoZW1hLm1vY2tSZXNldCgpO1xuICAgIG1vY2tSZWFkU2NoZW1hLm1vY2tSZXNvbHZlZFZhbHVlKGZha2VTY2hlbWEpO1xuICB9KTtcblxuICBpdChcInBhc3NlcyBHZXRPcHRpb25zLnRhcmdldFZlcnNpb25zIHRocm91Z2ggdG8gcmVhZFNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd29ya2RpciA9IHRtcChcInRhcmdldC12ZXJzaW9ucy10aHJlYWQudGVzdFwiKTtcbiAgICBjb25zdCB0YXJnZXRWZXJzaW9uczogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMgPSB7IHRlcnJhZm9ybTogXCI+PTEuNS43XCIgfTtcbiAgICBjb25zdCBvcHRpb25zOiBHZXRPcHRpb25zID0ge1xuICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgICB0YXJnZXRWZXJzaW9ucyxcbiAgICB9O1xuXG4gICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKG9wdGlvbnMsIFwiL3NvbWUvY2FjaGUvcGF0aFwiKTtcbiAgICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gICAgZXhwZWN0KG1vY2tSZWFkU2NoZW1hKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFtjb25zdHJhaW50XSxcbiAgICAgIFwiL3NvbWUvY2FjaGUvcGF0aFwiLFxuICAgICAgdGFyZ2V0VmVyc2lvbnMsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJvbWl0cyB0YXJnZXRWZXJzaW9ucyBmcm9tIHRoZSByZWFkU2NoZW1hIGNhbGwgd2hlbiBub3QgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd29ya2RpciA9IHRtcChcInRhcmdldC12ZXJzaW9ucy1hYnNlbnQudGVzdFwiKTtcbiAgICBjb25zdCBvcHRpb25zOiBHZXRPcHRpb25zID0ge1xuICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgfTtcblxuICAgIGNvbnN0IG1ha2VyID0gbmV3IENvbnN0cnVjdHNNYWtlcihvcHRpb25zKTtcbiAgICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gICAgZXhwZWN0KG1vY2tSZWFkU2NoZW1hKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFtjb25zdHJhaW50XSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICApO1xuICB9KTtcblxuICBpdChcInN0YW1wcyBjb25zdHJhaW50cy5qc29uIHdpdGggdGFyZ2V0VmVyc2lvbnMgKyBjbGkgaWRlbnRpdHksIGFuZCBvbGRlciBjb25zdHJhaW50cy5qc29uIGZpbGVzIHdpdGhvdXQgdGhvc2UgZmllbGRzIGFyZSBzdGlsbCB0cmVhdGVkIGFzIGZyZXNoIChubyBmb3JjZWQgcmVnZW5lcmF0aW9uKVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd29ya2RpciA9IHRtcChcInRhcmdldC12ZXJzaW9ucy1zdGFtcC50ZXN0XCIpO1xuICAgIGNvbnN0IHRhcmdldFZlcnNpb25zOiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyA9IHsgdGVycmFmb3JtOiBcIj49MS41LjdcIiB9O1xuICAgIGNvbnN0IG9wdGlvbnM6IEdldE9wdGlvbnMgPSB7XG4gICAgICBjb2RlTWFrZXJPdXRwdXQ6IHdvcmtkaXIsXG4gICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgIHRhcmdldFZlcnNpb25zLFxuICAgIH07XG5cbiAgICBjb25zdCBtYWtlciA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIob3B0aW9ucyk7XG4gICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnRdKTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzRmlsZSA9IEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4od29ya2RpciwgXCJjb25zdHJhaW50cy5qc29uXCIpLCBcInV0ZjhcIiksXG4gICAgKTtcbiAgICBleHBlY3QoY29uc3RyYWludHNGaWxlLnRhcmdldFZlcnNpb25zKS50b0VxdWFsKHRhcmdldFZlcnNpb25zKTtcbiAgICBleHBlY3QoY29uc3RyYWludHNGaWxlLmNsaSkudG9FcXVhbCh7XG4gICAgICBuYW1lOiBcInRlcnJhZm9ybVwiLFxuICAgICAgdmVyc2lvbjogXCIxLjcuNVwiLFxuICAgIH0pO1xuXG4gICAgLy8gUmV3cml0ZSBjb25zdHJhaW50cy5qc29uIGFzIGl0IHdvdWxkIGhhdmUgbG9va2VkIGJlZm9yZSB0aGlzIGZlYXR1cmVcbiAgICAvLyBsYW5kZWQgKG5vIHRhcmdldFZlcnNpb25zL2NsaSBmaWVsZHMpLCBrZWVwaW5nIHRoZSByZXN0IGlkZW50aWNhbCAtXG4gICAgLy8gdGhpcyBzaW11bGF0ZXMgcmUtcnVubmluZyBgY2RrdG4gZ2V0YCBhZ2FpbnN0IGFuIG91dHB1dCBkaXJlY3RvcnlcbiAgICAvLyBnZW5lcmF0ZWQgYnkgYW4gb2xkZXIgY2RrdG4gdmVyc2lvbi5cbiAgICBjb25zdCB7XG4gICAgICB0YXJnZXRWZXJzaW9uczogX3R2LFxuICAgICAgY2xpOiBfY2xpLFxuICAgICAgLi4ubGVnYWN5Q29uc3RyYWludHNcbiAgICB9ID0gY29uc3RyYWludHNGaWxlO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgIHBhdGguam9pbih3b3JrZGlyLCBcImNvbnN0cmFpbnRzLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShsZWdhY3lDb25zdHJhaW50cywgbnVsbCwgMiksXG4gICAgKTtcblxuICAgIGNvbnN0IG1ha2VyMiA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIob3B0aW9ucyk7XG4gICAgY29uc3QgdG9HZW5lcmF0ZSA9IGF3YWl0IG1ha2VyMi5maWx0ZXJBbHJlYWR5R2VuZXJhdGVkKFtjb25zdHJhaW50XSk7XG4gICAgZXhwZWN0KHRvR2VuZXJhdGUpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInRocmVhZHMgYSBwYXJ0aWFsIHRhcmdldFZlcnNpb25zIChzaW5nbGUgcHJvZHVjdCkgdGhyb3VnaCB1bmNoYW5nZWQgYW5kIHN0YW1wcyBpdCB2ZXJiYXRpbVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd29ya2RpciA9IHRtcChcInRhcmdldC12ZXJzaW9ucy1wYXJ0aWFsLnRlc3RcIik7XG4gICAgY29uc3QgdGFyZ2V0VmVyc2lvbnM6IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zID0geyBvcGVudG9mdTogXCI+PTEuMTEuMFwiIH07XG4gICAgY29uc3Qgb3B0aW9uczogR2V0T3B0aW9ucyA9IHtcbiAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgICAgdGFyZ2V0VmVyc2lvbnMsXG4gICAgfTtcblxuICAgIGNvbnN0IG1ha2VyID0gbmV3IENvbnN0cnVjdHNNYWtlcihvcHRpb25zKTtcbiAgICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gICAgZXhwZWN0KG1vY2tSZWFkU2NoZW1hKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFtjb25zdHJhaW50XSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRhcmdldFZlcnNpb25zLFxuICAgICk7XG5cbiAgICAvLyBUaGUgc3RhbXAgcmVjb3JkcyBleGFjdGx5IHdoYXQgdGhlIHByb2plY3QgZGVjbGFyZWQgLSBubyB0ZXJyYWZvcm1cbiAgICAvLyBkZWZhdWx0IGlzIGluamVjdGVkIGF0IGdldC10aW1lIChkZWZhdWx0aW5nIGZvciB0aGUgdW5kZWNsYXJlZFxuICAgIC8vIHByb2R1Y3QgaGFwcGVucyBvbmx5IGF0IHN5bnRoLXRpbWUsIGluIHJlc29sdmVUYXJnZXRWZXJzaW9ucykuXG4gICAgY29uc3QgY29uc3RyYWludHNGaWxlID0gSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbih3b3JrZGlyLCBcImNvbnN0cmFpbnRzLmpzb25cIiksIFwidXRmOFwiKSxcbiAgICApO1xuICAgIGV4cGVjdChjb25zdHJhaW50c0ZpbGUudGFyZ2V0VmVyc2lvbnMpLnRvRXF1YWwoeyBvcGVudG9mdTogXCI+PTEuMTEuMFwiIH0pO1xuICB9KTtcblxuICBpdChcIm9taXRzIHRoZSBjbGkgc3RhbXAgd2hlbiB0aGUgZmV0Y2hlZCBzY2hlbWEgY2FycmllcyBubyBDTEkgdmVyc2lvbiBtZXRhZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd29ya2RpciA9IHRtcChcInRhcmdldC12ZXJzaW9ucy1uby1jbGkudGVzdFwiKTtcbiAgICBjb25zdCB7XG4gICAgICBjbGlfbmFtZTogX2NsaU5hbWUsXG4gICAgICBjbGlfdmVyc2lvbjogX2NsaVZlcnNpb24sXG4gICAgICAuLi5zY2hlbWFXaXRob3V0Q2xpXG4gICAgfSA9IGZha2VTY2hlbWEucHJvdmlkZXJTY2hlbWE7XG4gICAgbW9ja1JlYWRTY2hlbWEubW9ja1Jlc29sdmVkVmFsdWUoeyBwcm92aWRlclNjaGVtYTogc2NoZW1hV2l0aG91dENsaSB9KTtcblxuICAgIGNvbnN0IHRhcmdldFZlcnNpb25zOiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyA9IHsgdGVycmFmb3JtOiBcIj49MS41LjdcIiB9O1xuICAgIGNvbnN0IG9wdGlvbnM6IEdldE9wdGlvbnMgPSB7XG4gICAgICBjb2RlTWFrZXJPdXRwdXQ6IHdvcmtkaXIsXG4gICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgIHRhcmdldFZlcnNpb25zLFxuICAgIH07XG5cbiAgICBjb25zdCBtYWtlciA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIob3B0aW9ucyk7XG4gICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnRdKTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzRmlsZSA9IEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4od29ya2RpciwgXCJjb25zdHJhaW50cy5qc29uXCIpLCBcInV0ZjhcIiksXG4gICAgKTtcbiAgICBleHBlY3QoY29uc3RyYWludHNGaWxlLmNsaSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChjb25zdHJhaW50c0ZpbGUudGFyZ2V0VmVyc2lvbnMpLnRvRXF1YWwodGFyZ2V0VmVyc2lvbnMpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGZvcmNlIHJlZ2VuZXJhdGlvbiB3aGVuIHRhcmdldFZlcnNpb25zIGNoYW5nZSBiZXR3ZWVuIHJ1bnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoZSBzdGFtcCBpcyBkaWFnbm9zdGljLW9ubHk6IHBlciB0aGUgR2V0T3B0aW9ucy50YXJnZXRWZXJzaW9ucyBkb2MsXG4gICAgLy8gdGFyZ2V0VmVyc2lvbnMgbmV2ZXIgZmlsdGVycyBjb2RlZ2VuICh0aGUgZnVsbCBzY2hlbWEgc3VyZmFjZSBpc1xuICAgIC8vIGFsd2F5cyBnZW5lcmF0ZWQpLCBzbyBmcmVzaG5lc3Mgb25seSBjb21wYXJlcyB0aGUgcHJvdmlkZXJzIG1hcCBhbmRcbiAgICAvLyB0aGUgY2RrdGYgdmVyc2lvbi5cbiAgICBjb25zdCB3b3JrZGlyID0gdG1wKFwidGFyZ2V0LXZlcnNpb25zLWNoYW5nZS50ZXN0XCIpO1xuICAgIGNvbnN0IG9wdGlvbnM6IEdldE9wdGlvbnMgPSB7XG4gICAgICBjb2RlTWFrZXJPdXRwdXQ6IHdvcmtkaXIsXG4gICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgIHRhcmdldFZlcnNpb25zOiB7IHRlcnJhZm9ybTogXCI+PTEuNS43XCIgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKG9wdGlvbnMpO1xuICAgIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG5cbiAgICBjb25zdCBtYWtlcjIgPSBuZXcgQ29uc3RydWN0c01ha2VyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB0YXJnZXRWZXJzaW9uczogeyB0ZXJyYWZvcm06IFwiPj0xLjExLjBcIiB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHRvR2VuZXJhdGUgPSBhd2FpdCBtYWtlcjIuZmlsdGVyQWxyZWFkeUdlbmVyYXRlZChbY29uc3RyYWludF0pO1xuICAgIGV4cGVjdCh0b0dlbmVyYXRlKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CodeMaker } from "codemaker";
|
|
2
|
-
import { TerraformDependencyConstraint, type LanguageOptions } from "@cdktn/commons";
|
|
2
|
+
import { TerraformDependencyConstraint, type LanguageOptions, type TerraformTargetVersions } from "@cdktn/commons";
|
|
3
3
|
import { Language } from "@cdktn/commons";
|
|
4
4
|
export interface GenerateJSIIOptions {
|
|
5
5
|
entrypoint: string;
|
|
@@ -55,6 +55,13 @@ export interface GetOptions {
|
|
|
55
55
|
* Language-specific code generation options.
|
|
56
56
|
*/
|
|
57
57
|
readonly languageOptions?: LanguageOptions;
|
|
58
|
+
/**
|
|
59
|
+
* The project's declared targetVersions (cdktf.json). Used to drive the
|
|
60
|
+
* fetch-time emission-gap warning in @cdktn/provider-schema and to stamp
|
|
61
|
+
* the generated constraints.json for diagnostics. Does NOT filter codegen:
|
|
62
|
+
* the full surface is always generated, narrowing happens at synth.
|
|
63
|
+
*/
|
|
64
|
+
readonly targetVersions?: TerraformTargetVersions;
|
|
58
65
|
}
|
|
59
66
|
export declare class ConstructsMaker {
|
|
60
67
|
private readonly options;
|