@cdktn/provider-generator 0.23.0-pre.8 → 0.23.0
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/ambient.d.ts +0 -1
- package/{lib → build}/__tests__/edge-provider-schema/builder.d.ts +1 -0
- package/build/__tests__/edge-provider-schema/builder.js +106 -0
- package/build/__tests__/edge-provider-schema/cli.d.ts +2 -0
- package/build/__tests__/edge-provider-schema/cli.js +67 -0
- package/{lib → build}/__tests__/edge-provider-schema/index.d.ts +1 -0
- package/build/__tests__/edge-provider-schema/index.js +154 -0
- package/build/__tests__/edge-provider-schema.test.d.ts +2 -0
- package/build/__tests__/edge-provider-schema.test.js +46 -0
- package/build/__tests__/provider.test.d.ts +2 -0
- package/build/__tests__/provider.test.js +158 -0
- package/build/get/__tests__/constructs-maker.test.d.ts +2 -0
- package/build/get/__tests__/constructs-maker.test.js +113 -0
- package/build/get/__tests__/generator/complex-computed-types.test.d.ts +2 -0
- package/build/get/__tests__/generator/complex-computed-types.test.js +42 -0
- package/build/get/__tests__/generator/deep-nested-attributes.test.d.ts +2 -0
- package/build/get/__tests__/generator/deep-nested-attributes.test.js +50 -0
- package/build/get/__tests__/generator/description-escaping.test.d.ts +2 -0
- package/build/get/__tests__/generator/description-escaping.test.js +65 -0
- package/build/get/__tests__/generator/empty-provider-resources.test.d.ts +2 -0
- package/build/get/__tests__/generator/empty-provider-resources.test.js +40 -0
- package/build/get/__tests__/generator/export-sharding.test.d.ts +2 -0
- package/build/get/__tests__/generator/export-sharding.test.js +82 -0
- package/build/get/__tests__/generator/module-generator.test.d.ts +2 -0
- package/build/get/__tests__/generator/module-generator.test.js +476 -0
- package/build/get/__tests__/generator/nested-types.test.d.ts +2 -0
- package/build/get/__tests__/generator/nested-types.test.js +51 -0
- package/build/get/__tests__/generator/provider.test.d.ts +2 -0
- package/build/get/__tests__/generator/provider.test.js +51 -0
- package/build/get/__tests__/generator/resource-types.test.d.ts +2 -0
- package/build/get/__tests__/generator/resource-types.test.js +78 -0
- package/build/get/__tests__/generator/skipped-attributes.test.d.ts +2 -0
- package/build/get/__tests__/generator/skipped-attributes.test.js +55 -0
- package/build/get/__tests__/generator/types.test.d.ts +2 -0
- package/build/get/__tests__/generator/types.test.js +289 -0
- package/build/get/__tests__/generator/versions-file.test.d.ts +2 -0
- package/build/get/__tests__/generator/versions-file.test.js +74 -0
- package/{lib → build}/get/__tests__/util.d.ts +1 -0
- package/build/get/__tests__/util.js +59 -0
- package/{lib → build}/get/constructs-maker.d.ts +2 -1
- package/{lib → build}/get/constructs-maker.js +5 -2
- package/{lib → build}/get/generator/custom-defaults.d.ts +1 -0
- package/build/get/generator/custom-defaults.js +403 -0
- package/{lib → build}/get/generator/emitter/attributes-emitter.d.ts +1 -0
- package/build/get/generator/emitter/attributes-emitter.js +161 -0
- package/{lib → build}/get/generator/emitter/index.d.ts +1 -0
- package/{lib → build}/get/generator/emitter/index.js +1 -1
- package/{lib → build}/get/generator/emitter/resource-emitter.d.ts +1 -0
- package/build/get/generator/emitter/resource-emitter.js +147 -0
- package/{lib → build}/get/generator/emitter/struct-emitter.d.ts +1 -0
- package/build/get/generator/emitter/struct-emitter.js +500 -0
- package/{lib → build}/get/generator/loop-detection.d.ts +1 -0
- package/build/get/generator/loop-detection.js +56 -0
- package/{lib → build}/get/generator/models/attribute-model.d.ts +1 -0
- package/build/get/generator/models/attribute-model.js +160 -0
- package/{lib → build}/get/generator/models/attribute-type-model.d.ts +1 -0
- package/build/get/generator/models/attribute-type-model.js +376 -0
- package/{lib → build}/get/generator/models/index.d.ts +1 -0
- package/{lib → build}/get/generator/models/index.js +1 -1
- package/{lib → build}/get/generator/models/resource-model.d.ts +1 -0
- package/build/get/generator/models/resource-model.js +106 -0
- package/{lib → build}/get/generator/models/scope.d.ts +1 -0
- package/build/get/generator/models/scope.js +36 -0
- package/{lib → build}/get/generator/models/struct.d.ts +1 -0
- package/build/get/generator/models/struct.js +90 -0
- package/{lib → build}/get/generator/module-generator.d.ts +1 -0
- package/build/get/generator/module-generator.js +184 -0
- package/{lib → build}/get/generator/provider-generator.d.ts +1 -0
- package/build/get/generator/provider-generator.js +225 -0
- package/{lib → build}/get/generator/resource-parser.d.ts +1 -0
- package/build/get/generator/resource-parser.js +497 -0
- package/{lib → build}/get/generator/sanitized-comments.d.ts +1 -0
- package/build/get/generator/sanitized-comments.js +44 -0
- package/{lib → build}/get/generator/skipped-attributes.d.ts +1 -0
- package/build/get/generator/skipped-attributes.js +29 -0
- package/{lib → build}/index.d.ts +1 -0
- package/{lib → build}/index.js +1 -1
- package/{lib → build}/util.d.ts +1 -0
- package/build/util.js +30 -0
- package/package.json +13 -15
- package/{lib → src}/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +1 -1
- package/{lib → src}/__tests__/__snapshots__/provider.test.ts.snap +14953 -890
- package/{lib → src}/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +1 -1
- package/{lib → src}/get/__tests__/generator/__snapshots__/description-escaping.test.ts.snap +1 -1
- package/{lib → src}/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +1 -1
- package/{lib → src}/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +10 -10
- package/{lib → src}/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +1 -1
- package/{lib → src}/get/__tests__/generator/__snapshots__/provider.test.ts.snap +1 -1
- package/{lib → src}/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +1 -1
- package/{lib → src}/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +1 -1
- package/{lib → src}/get/__tests__/generator/__snapshots__/types.test.ts.snap +92 -1
- package/src/get/__tests__/generator/fixtures/map-of-map-of-string.test.fixture.json +27 -0
- package/tsconfig.json +6 -3
- package/lib/__tests__/edge-provider-schema/builder.js +0 -106
- package/lib/__tests__/edge-provider-schema/cli.d.ts +0 -1
- package/lib/__tests__/edge-provider-schema/cli.js +0 -67
- package/lib/__tests__/edge-provider-schema/index.js +0 -154
- package/lib/__tests__/edge-provider-schema.test.d.ts +0 -1
- package/lib/__tests__/edge-provider-schema.test.js +0 -46
- package/lib/__tests__/provider.test.d.ts +0 -1
- package/lib/__tests__/provider.test.js +0 -158
- package/lib/get/__tests__/constructs-maker.test.d.ts +0 -1
- package/lib/get/__tests__/constructs-maker.test.js +0 -113
- package/lib/get/__tests__/generator/complex-computed-types.test.d.ts +0 -1
- package/lib/get/__tests__/generator/complex-computed-types.test.js +0 -42
- package/lib/get/__tests__/generator/deep-nested-attributes.test.d.ts +0 -1
- package/lib/get/__tests__/generator/deep-nested-attributes.test.js +0 -50
- package/lib/get/__tests__/generator/description-escaping.test.d.ts +0 -1
- package/lib/get/__tests__/generator/description-escaping.test.js +0 -65
- package/lib/get/__tests__/generator/empty-provider-resources.test.d.ts +0 -1
- package/lib/get/__tests__/generator/empty-provider-resources.test.js +0 -40
- package/lib/get/__tests__/generator/export-sharding.test.d.ts +0 -1
- package/lib/get/__tests__/generator/export-sharding.test.js +0 -82
- package/lib/get/__tests__/generator/module-generator.test.d.ts +0 -1
- package/lib/get/__tests__/generator/module-generator.test.js +0 -476
- package/lib/get/__tests__/generator/nested-types.test.d.ts +0 -1
- package/lib/get/__tests__/generator/nested-types.test.js +0 -51
- package/lib/get/__tests__/generator/provider.test.d.ts +0 -1
- package/lib/get/__tests__/generator/provider.test.js +0 -51
- package/lib/get/__tests__/generator/resource-types.test.d.ts +0 -1
- package/lib/get/__tests__/generator/resource-types.test.js +0 -78
- package/lib/get/__tests__/generator/skipped-attributes.test.d.ts +0 -1
- package/lib/get/__tests__/generator/skipped-attributes.test.js +0 -55
- package/lib/get/__tests__/generator/types.test.d.ts +0 -1
- package/lib/get/__tests__/generator/types.test.js +0 -280
- package/lib/get/__tests__/generator/versions-file.test.d.ts +0 -1
- package/lib/get/__tests__/generator/versions-file.test.js +0 -74
- package/lib/get/__tests__/util.js +0 -59
- package/lib/get/generator/custom-defaults.js +0 -403
- package/lib/get/generator/emitter/attributes-emitter.js +0 -161
- package/lib/get/generator/emitter/resource-emitter.js +0 -144
- package/lib/get/generator/emitter/struct-emitter.js +0 -500
- package/lib/get/generator/loop-detection.js +0 -56
- package/lib/get/generator/models/attribute-model.js +0 -160
- package/lib/get/generator/models/attribute-type-model.js +0 -376
- package/lib/get/generator/models/resource-model.js +0 -106
- package/lib/get/generator/models/scope.js +0 -36
- package/lib/get/generator/models/struct.js +0 -90
- package/lib/get/generator/module-generator.js +0 -184
- package/lib/get/generator/provider-generator.js +0 -225
- package/lib/get/generator/resource-parser.js +0 -497
- package/lib/get/generator/sanitized-comments.js +0 -44
- package/lib/get/generator/skipped-attributes.js +0 -29
- package/lib/util.js +0 -30
- /package/{lib → src}/get/__tests__/generator/fixtures/aws-provider.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/aws_acm_certificate.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/aws_cloudfront_distribution.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/aws_fms_admin_account.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/aws_quicksight_template.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/aws_s3_bucket.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/aws_security_group.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/aws_wafv2_web_acl.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/block-type-nested-computed-list.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/block-type-set-list.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/boolean-list.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/boolean-map.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/comment-ending-sequence.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex-nested.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/computed-optional-complex.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/data_aws_quicksight_analysis.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/datadog_dashboard.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/datadog_spans_metric.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/deep-attributes.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/deeply-nested-block-types.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/description-escaping.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/elasticstack-provider.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/empty-provider-resources.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/ignored-attributes.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-attribute-names.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-resource-names.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/list-list-object.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/list-list-string.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/list-of-string-map.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/map-of-string-list.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/markdown-description-with-code-blocks.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/module-get-x.test.fixture.tf +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-1.test.fixture.tf +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-2.test.fixture.tf +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/module-no-outputs.test.fixture.tf +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/module-no-variable-type.test.fixture.tf +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/module-with-star-default.test.fixture.tf +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/name-conflict.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/nested-type-without-attributes.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/nested-types.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/number-list.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/number-map.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/primitive-boolean.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/primitive-dynamic.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/primitive-number.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/primitive-string.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/single-block-type.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/string-list.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/string-map.test.fixture.json +0 -0
- /package/{lib → src}/get/__tests__/generator/fixtures/stripe-schema.test.fixture.json +0 -0
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.detectAttributeLoops = void 0;
|
|
4
|
-
const equalAttributeIdentifiers = (x, y) => x[0] === y[0] &&
|
|
5
|
-
x[1].size === y[1].size &&
|
|
6
|
-
[...x[1]].every((x) => y[1].has(x));
|
|
7
|
-
function typeStructure(model) {
|
|
8
|
-
var _a;
|
|
9
|
-
if (!model.type.isComplex) {
|
|
10
|
-
return model.type.storedClassType;
|
|
11
|
-
}
|
|
12
|
-
return `<complex:{${(_a = model.type.struct) === null || _a === void 0 ? void 0 : _a.attributes.map((att) => att.name).sort()}}${model.type.typeModelType}>`;
|
|
13
|
-
}
|
|
14
|
-
function getAttributeIdentifier(model) {
|
|
15
|
-
return [
|
|
16
|
-
model.terraformName,
|
|
17
|
-
new Set(model.type.struct.attributes.map((a) => `${a.name}:${typeStructure(a)}`)),
|
|
18
|
-
];
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Detects recursive attribute schemas and returns an Object
|
|
22
|
-
* describing what property should be linking to which class
|
|
23
|
-
*/
|
|
24
|
-
function detectAttributeLoops(attributes) {
|
|
25
|
-
// We aproximate a class as a set of attributes names
|
|
26
|
-
// This is not a perfect approximation, but it's good enough for our purposes
|
|
27
|
-
const redirects = {};
|
|
28
|
-
function depthFirstSearch(attribute, path = [], knownStructs = {}) {
|
|
29
|
-
const name = attribute.terraformName;
|
|
30
|
-
const struct = attribute.type.struct;
|
|
31
|
-
if (!struct) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const structIdentifier = getAttributeIdentifier(attribute);
|
|
35
|
-
// Detect if we visited this already
|
|
36
|
-
const visited = Object.entries(knownStructs).find(([, attrIdentifier]) => equalAttributeIdentifiers(structIdentifier, attrIdentifier));
|
|
37
|
-
if (visited) {
|
|
38
|
-
// We have a loop, we don't need to search deeper
|
|
39
|
-
const toBeReplacedWith = visited[0];
|
|
40
|
-
const toReplace = [...path, name].join(".");
|
|
41
|
-
redirects[toReplace] = toBeReplacedWith;
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
// Search deeper
|
|
45
|
-
struct.attributes.forEach((a) => depthFirstSearch(a, [...path, name], {
|
|
46
|
-
...knownStructs,
|
|
47
|
-
// We haven't visited this yet, add it to the list of known structs
|
|
48
|
-
[[...path, name].join(".")]: structIdentifier,
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
attributes.forEach((attr) => depthFirstSearch(attr));
|
|
53
|
-
return redirects;
|
|
54
|
-
}
|
|
55
|
-
exports.detectAttributeLoops = detectAttributeLoops;
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC1kZXRlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb29wLWRldGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxNQUFNLHlCQUF5QixHQUFHLENBQ2hDLENBQXNCLEVBQ3RCLENBQXNCLEVBQ3RCLEVBQUUsQ0FDRixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7SUFDdkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXRDLFNBQVMsYUFBYSxDQUFDLEtBQXFCOztJQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxPQUFPLGFBQWEsTUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sMENBQUUsVUFBVSxDQUM5QyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQ3JCLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsS0FBcUI7SUFDbkQsT0FBTztRQUNMLEtBQUssQ0FBQyxhQUFhO1FBQ25CLElBQUksR0FBRyxDQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUMxRTtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsVUFBNEI7SUFHL0QscURBQXFEO0lBQ3JELDZFQUE2RTtJQUM3RSxNQUFNLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBRTdDLFNBQVMsZ0JBQWdCLENBQ3ZCLFNBQXlCLEVBQ3pCLE9BQWlCLEVBQUUsRUFDbkIsZUFBaUUsRUFBRTtRQUVuRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxvQ0FBb0M7UUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUN2RSx5QkFBeUIsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FDNUQsQ0FBQztRQUVGLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixpREFBaUQ7WUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sZ0JBQWdCO1lBQ2hCLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDOUIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ25DLEdBQUcsWUFBWTtnQkFDZixtRUFBbUU7Z0JBQ25FLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxnQkFBZ0I7YUFDOUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFckQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQTVDRCxvREE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvYXR0cmlidXRlLW1vZGVsXCI7XG5cbnR5cGUgQXR0cmlidXRlSWRlbnRpZmllciA9IFtzdHJpbmcsIFNldDxzdHJpbmc+XTtcbmNvbnN0IGVxdWFsQXR0cmlidXRlSWRlbnRpZmllcnMgPSAoXG4gIHg6IEF0dHJpYnV0ZUlkZW50aWZpZXIsXG4gIHk6IEF0dHJpYnV0ZUlkZW50aWZpZXIsXG4pID0+XG4gIHhbMF0gPT09IHlbMF0gJiZcbiAgeFsxXS5zaXplID09PSB5WzFdLnNpemUgJiZcbiAgWy4uLnhbMV1dLmV2ZXJ5KCh4KSA9PiB5WzFdLmhhcyh4KSk7XG5cbmZ1bmN0aW9uIHR5cGVTdHJ1Y3R1cmUobW9kZWw6IEF0dHJpYnV0ZU1vZGVsKSB7XG4gIGlmICghbW9kZWwudHlwZS5pc0NvbXBsZXgpIHtcbiAgICByZXR1cm4gbW9kZWwudHlwZS5zdG9yZWRDbGFzc1R5cGU7XG4gIH1cblxuICByZXR1cm4gYDxjb21wbGV4Onske21vZGVsLnR5cGUuc3RydWN0Py5hdHRyaWJ1dGVzXG4gICAgLm1hcCgoYXR0KSA9PiBhdHQubmFtZSlcbiAgICAuc29ydCgpfX0ke21vZGVsLnR5cGUudHlwZU1vZGVsVHlwZX0+YDtcbn1cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlSWRlbnRpZmllcihtb2RlbDogQXR0cmlidXRlTW9kZWwpOiBBdHRyaWJ1dGVJZGVudGlmaWVyIHtcbiAgcmV0dXJuIFtcbiAgICBtb2RlbC50ZXJyYWZvcm1OYW1lLFxuICAgIG5ldyBTZXQoXG4gICAgICBtb2RlbC50eXBlLnN0cnVjdCEuYXR0cmlidXRlcy5tYXAoKGEpID0+IGAke2EubmFtZX06JHt0eXBlU3RydWN0dXJlKGEpfWApLFxuICAgICksXG4gIF07XG59XG5cbi8qKlxuICogRGV0ZWN0cyByZWN1cnNpdmUgYXR0cmlidXRlIHNjaGVtYXMgYW5kIHJldHVybnMgYW4gT2JqZWN0XG4gKiBkZXNjcmliaW5nIHdoYXQgcHJvcGVydHkgc2hvdWxkIGJlIGxpbmtpbmcgdG8gd2hpY2ggY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEF0dHJpYnV0ZUxvb3BzKGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW10pOiB7XG4gIFtsb29wRW50cnlwb2ludDogc3RyaW5nXTogc3RyaW5nOyAvLyBhdHRyaWJ1dGUgcGF0aCB0byBiZSByZXBsYWNlZCAtPiBhdHRyaWJ1dGUgcGF0aCBvZiB0aGUgdHlwZSB0byByZXBsYWNlIHdpdGhcbn0ge1xuICAvLyBXZSBhcHJveGltYXRlIGEgY2xhc3MgYXMgYSBzZXQgb2YgYXR0cmlidXRlcyBuYW1lc1xuICAvLyBUaGlzIGlzIG5vdCBhIHBlcmZlY3QgYXBwcm94aW1hdGlvbiwgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG91ciBwdXJwb3Nlc1xuICBjb25zdCByZWRpcmVjdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmdW5jdGlvbiBkZXB0aEZpcnN0U2VhcmNoKFxuICAgIGF0dHJpYnV0ZTogQXR0cmlidXRlTW9kZWwsXG4gICAgcGF0aDogc3RyaW5nW10gPSBbXSxcbiAgICBrbm93blN0cnVjdHM6IHsgW2F0dHJpYnV0ZVBhdGg6IHN0cmluZ106IEF0dHJpYnV0ZUlkZW50aWZpZXIgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCBuYW1lID0gYXR0cmlidXRlLnRlcnJhZm9ybU5hbWU7XG4gICAgY29uc3Qgc3RydWN0ID0gYXR0cmlidXRlLnR5cGUuc3RydWN0O1xuICAgIGlmICghc3RydWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RydWN0SWRlbnRpZmllciA9IGdldEF0dHJpYnV0ZUlkZW50aWZpZXIoYXR0cmlidXRlKTtcbiAgICAvLyBEZXRlY3QgaWYgd2UgdmlzaXRlZCB0aGlzIGFscmVhZHlcbiAgICBjb25zdCB2aXNpdGVkID0gT2JqZWN0LmVudHJpZXMoa25vd25TdHJ1Y3RzKS5maW5kKChbLCBhdHRySWRlbnRpZmllcl0pID0+XG4gICAgICBlcXVhbEF0dHJpYnV0ZUlkZW50aWZpZXJzKHN0cnVjdElkZW50aWZpZXIsIGF0dHJJZGVudGlmaWVyKSxcbiAgICApO1xuXG4gICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBsb29wLCB3ZSBkb24ndCBuZWVkIHRvIHNlYXJjaCBkZWVwZXJcbiAgICAgIGNvbnN0IHRvQmVSZXBsYWNlZFdpdGggPSB2aXNpdGVkWzBdO1xuICAgICAgY29uc3QgdG9SZXBsYWNlID0gWy4uLnBhdGgsIG5hbWVdLmpvaW4oXCIuXCIpO1xuICAgICAgcmVkaXJlY3RzW3RvUmVwbGFjZV0gPSB0b0JlUmVwbGFjZWRXaXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZWFyY2ggZGVlcGVyXG4gICAgICBzdHJ1Y3QuYXR0cmlidXRlcy5mb3JFYWNoKChhKSA9PlxuICAgICAgICBkZXB0aEZpcnN0U2VhcmNoKGEsIFsuLi5wYXRoLCBuYW1lXSwge1xuICAgICAgICAgIC4uLmtub3duU3RydWN0cyxcbiAgICAgICAgICAvLyBXZSBoYXZlbid0IHZpc2l0ZWQgdGhpcyB5ZXQsIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBrbm93biBzdHJ1Y3RzXG4gICAgICAgICAgW1suLi5wYXRoLCBuYW1lXS5qb2luKFwiLlwiKV06IHN0cnVjdElkZW50aWZpZXIsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IGRlcHRoRmlyc3RTZWFyY2goYXR0cikpO1xuXG4gIHJldHVybiByZWRpcmVjdHM7XG59XG4iXX0=
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AttributeModel = exports.escapeAttributeName = void 0;
|
|
4
|
-
function escapeAttributeName(name) {
|
|
5
|
-
// `self` and `build` doesn't work in as property name in Python
|
|
6
|
-
if (name === "self" || name === "build")
|
|
7
|
-
return `${name}Attribute`;
|
|
8
|
-
// jsii can't handle `getFoo` properties, since it's incompatible with Java
|
|
9
|
-
if (name.match(/^get[A-Za-z]+/))
|
|
10
|
-
return name.replace("get", "fetch");
|
|
11
|
-
// `equals` is a prohibited name in jsii
|
|
12
|
-
if (name === "equals")
|
|
13
|
-
return "equalTo";
|
|
14
|
-
// `node` is already used by the Constructs base class
|
|
15
|
-
if (name === "node")
|
|
16
|
-
return "nodeAttribute";
|
|
17
|
-
// `System` shadows built-in types in CSharp (see #1420)
|
|
18
|
-
if (name === "system")
|
|
19
|
-
return "systemAttribute";
|
|
20
|
-
// `tfResourceType` is already used by resources to distinguish between different resource types
|
|
21
|
-
if (name === "tfResourceType")
|
|
22
|
-
return `${name}Attribute`;
|
|
23
|
-
// `importFrom` has potential for common name collision with providers
|
|
24
|
-
if (name === "importFrom")
|
|
25
|
-
return `${name}Attribute`;
|
|
26
|
-
// `move` could have common name collision with providers
|
|
27
|
-
if (name === "moveTo")
|
|
28
|
-
return `${name}Attribute`;
|
|
29
|
-
// `software` attribute can be confused with the JSII Java runtime package (see #3115)
|
|
30
|
-
if (name === "software")
|
|
31
|
-
return `${name}Attribute`;
|
|
32
|
-
return name;
|
|
33
|
-
}
|
|
34
|
-
exports.escapeAttributeName = escapeAttributeName;
|
|
35
|
-
class AttributeModel {
|
|
36
|
-
constructor(options) {
|
|
37
|
-
this.storageName = options.storageName;
|
|
38
|
-
this._name = options.name;
|
|
39
|
-
this.type = options.type;
|
|
40
|
-
this.optional = options.optional;
|
|
41
|
-
this.computed = options.computed;
|
|
42
|
-
this.terraformName = options.terraformName;
|
|
43
|
-
this.terraformFullName = options.terraformFullName;
|
|
44
|
-
this._description = options.description;
|
|
45
|
-
this.provider = options.provider;
|
|
46
|
-
this.required = options.required;
|
|
47
|
-
this.forcePlainGetterType = options.forcePlainGetterType;
|
|
48
|
-
}
|
|
49
|
-
get typeDefinition() {
|
|
50
|
-
const optional = this.optional ? "?" : "";
|
|
51
|
-
return `${this.name}${optional}: ${this.type.inputTypeDefinition}`;
|
|
52
|
-
}
|
|
53
|
-
get isAssignable() {
|
|
54
|
-
return this.required || this.optional;
|
|
55
|
-
}
|
|
56
|
-
get isOptional() {
|
|
57
|
-
return this.optional;
|
|
58
|
-
}
|
|
59
|
-
get isRequired() {
|
|
60
|
-
return this.required;
|
|
61
|
-
}
|
|
62
|
-
get isProvider() {
|
|
63
|
-
return this.provider;
|
|
64
|
-
}
|
|
65
|
-
get getterType() {
|
|
66
|
-
let getterType = { _type: "plain" };
|
|
67
|
-
if (this.forcePlainGetterType) {
|
|
68
|
-
return getterType;
|
|
69
|
-
}
|
|
70
|
-
if (this.isProvider) {
|
|
71
|
-
return getterType;
|
|
72
|
-
}
|
|
73
|
-
if (this.type.hasReferenceClass) {
|
|
74
|
-
getterType = {
|
|
75
|
-
_type: "stored_class",
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
else if (this.computed &&
|
|
79
|
-
!this.isAssignable &&
|
|
80
|
-
(!this.type.isTokenizable || this.type.typeModelType === "map")) {
|
|
81
|
-
getterType = {
|
|
82
|
-
_type: "stored_class",
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
return getterType;
|
|
86
|
-
}
|
|
87
|
-
get isStored() {
|
|
88
|
-
return this.isAssignable;
|
|
89
|
-
}
|
|
90
|
-
get setterType() {
|
|
91
|
-
if (!this.isStored) {
|
|
92
|
-
return { _type: "none" };
|
|
93
|
-
}
|
|
94
|
-
if (this.getterType._type === "stored_class") {
|
|
95
|
-
return {
|
|
96
|
-
_type: "stored_class",
|
|
97
|
-
type: this.type.inputTypeDefinition,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
return {
|
|
101
|
-
_type: "set",
|
|
102
|
-
type: `${this.type.inputTypeDefinition}${this.isProvider ? " | undefined" : ""}`,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
get name() {
|
|
106
|
-
return AttributeModel.escapeName(this._name);
|
|
107
|
-
}
|
|
108
|
-
static escapeName(name) {
|
|
109
|
-
return escapeAttributeName(name);
|
|
110
|
-
}
|
|
111
|
-
get description() {
|
|
112
|
-
var _a;
|
|
113
|
-
return (_a = this._description) === null || _a === void 0 ? void 0 : _a.replace(/'''/gi, "```");
|
|
114
|
-
}
|
|
115
|
-
getReferencedTypes(isConfigStruct) {
|
|
116
|
-
const attTypeStruct = this.type.struct;
|
|
117
|
-
if (!attTypeStruct) {
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
const types = [];
|
|
121
|
-
if (this.isAssignable) {
|
|
122
|
-
types.push(attTypeStruct.name);
|
|
123
|
-
types.push(attTypeStruct.mapperName);
|
|
124
|
-
types.push(attTypeStruct.hclMapperName);
|
|
125
|
-
}
|
|
126
|
-
if (!attTypeStruct.isSingleItem &&
|
|
127
|
-
(attTypeStruct.nestingMode === "list" ||
|
|
128
|
-
attTypeStruct.nestingMode === "set")) {
|
|
129
|
-
types.push(attTypeStruct.listName);
|
|
130
|
-
}
|
|
131
|
-
else if (attTypeStruct.nestingMode === "map") {
|
|
132
|
-
types.push(attTypeStruct.mapName);
|
|
133
|
-
}
|
|
134
|
-
else if (attTypeStruct.nestingMode === "maplist") {
|
|
135
|
-
types.push(attTypeStruct.mapListName);
|
|
136
|
-
}
|
|
137
|
-
else if (attTypeStruct.nestingMode === "mapset") {
|
|
138
|
-
types.push(attTypeStruct.mapListName);
|
|
139
|
-
}
|
|
140
|
-
else if (attTypeStruct.nestingMode === "listmap") {
|
|
141
|
-
types.push(attTypeStruct.listMapName);
|
|
142
|
-
}
|
|
143
|
-
else if (attTypeStruct.nestingMode === "setmap") {
|
|
144
|
-
types.push(attTypeStruct.listMapName);
|
|
145
|
-
}
|
|
146
|
-
else if (attTypeStruct.nestingMode === "listlist" ||
|
|
147
|
-
attTypeStruct.nestingMode === "listset" ||
|
|
148
|
-
attTypeStruct.nestingMode === "setlist" ||
|
|
149
|
-
attTypeStruct.nestingMode == "setset") {
|
|
150
|
-
types.push(attTypeStruct.listListName);
|
|
151
|
-
}
|
|
152
|
-
else if (!isConfigStruct) {
|
|
153
|
-
types.push(attTypeStruct.outputReferenceName);
|
|
154
|
-
}
|
|
155
|
-
// other types of nested collections aren't supported
|
|
156
|
-
return types;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
exports.AttributeModel = AttributeModel;
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXR0cmlidXRlLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFDQSxTQUFnQixtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLGdFQUFnRTtJQUNoRSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU87UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbkUsMkVBQTJFO0lBQzNFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLHdDQUF3QztJQUN4QyxJQUFJLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDeEMsc0RBQXNEO0lBQ3RELElBQUksSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLGVBQWUsQ0FBQztJQUM1Qyx3REFBd0Q7SUFDeEQsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8saUJBQWlCLENBQUM7SUFDaEQsZ0dBQWdHO0lBQ2hHLElBQUksSUFBSSxLQUFLLGdCQUFnQjtRQUFFLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUN6RCxzRUFBc0U7SUFDdEUsSUFBSSxJQUFJLEtBQUssWUFBWTtRQUFFLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNyRCx5REFBeUQ7SUFDekQsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNqRCxzRkFBc0Y7SUFDdEYsSUFBSSxJQUFJLEtBQUssVUFBVTtRQUFFLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNuRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFwQkQsa0RBb0JDO0FBRUQsTUFBYSxjQUFjO0lBYXpCLFlBQVksT0FBOEI7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsSUFBSSxVQUFVLEdBQWUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFFaEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hDLFVBQVUsR0FBRztnQkFDWCxLQUFLLEVBQUUsY0FBYzthQUN0QixDQUFDO1FBQ0osQ0FBQzthQUFNLElBQ0wsSUFBSSxDQUFDLFFBQVE7WUFDYixDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsRUFDL0QsQ0FBQztZQUNELFVBQVUsR0FBRztnQkFDWCxLQUFLLEVBQUUsY0FBYzthQUN0QixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQzdDLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQjthQUNwQyxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDckMsRUFBRTtTQUNILENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsV0FBVzs7UUFDcEIsT0FBTyxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGNBQXVCO1FBQy9DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUNFLENBQUMsYUFBYSxDQUFDLFlBQVk7WUFDM0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQ25DLGFBQWEsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLEVBQ3RDLENBQUM7WUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxhQUFhLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQUksYUFBYSxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sSUFBSSxhQUFhLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25ELEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQ0wsYUFBYSxDQUFDLFdBQVcsS0FBSyxVQUFVO1lBQ3hDLGFBQWEsQ0FBQyxXQUFXLEtBQUssU0FBUztZQUN2QyxhQUFhLENBQUMsV0FBVyxLQUFLLFNBQVM7WUFDdkMsYUFBYSxDQUFDLFdBQVcsSUFBSSxRQUFRLEVBQ3JDLENBQUM7WUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELHFEQUFxRDtRQUVyRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQTVKRCx3Q0E0SkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQXR0cmlidXRlVHlwZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLXR5cGUtbW9kZWxcIjtcblxuZXhwb3J0IHR5cGUgR2V0dGVyVHlwZSA9XG4gIHwgeyBfdHlwZTogXCJwbGFpblwiIH1cbiAgfCB7XG4gICAgICBfdHlwZTogXCJhcmdzXCI7XG4gICAgICBhcmdzOiBzdHJpbmc7XG4gICAgICByZXR1cm5UeXBlPzogc3RyaW5nO1xuICAgICAgcmV0dXJuU3RhdGVtZW50OiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIF90eXBlOiBcInN0b3JlZF9jbGFzc1wiO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFNldHRlclR5cGUgPVxuICB8IHsgX3R5cGU6IFwibm9uZVwiIH1cbiAgfCB7IF90eXBlOiBcInNldFwiOyB0eXBlOiBzdHJpbmcgfVxuICB8IHsgX3R5cGU6IFwicHV0XCI7IHR5cGU6IHN0cmluZyB9XG4gIHwgeyBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIjsgdHlwZTogc3RyaW5nIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlTW9kZWxPcHRpb25zIHtcbiAgc3RvcmFnZU5hbWU6IHN0cmluZzsgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbDtcbiAgb3B0aW9uYWw6IGJvb2xlYW47XG4gIGNvbXB1dGVkOiBib29sZWFuO1xuICB0ZXJyYWZvcm1OYW1lOiBzdHJpbmc7XG4gIHRlcnJhZm9ybUZ1bGxOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBnZXRBdHRDYWxsPzogc3RyaW5nO1xuICBwcm92aWRlcjogYm9vbGVhbjtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGZvcmNlUGxhaW5HZXR0ZXJUeXBlPzogYm9vbGVhbjsgLy8gdXNlZCBmb3Igc2tpcHBpbmcgYXR0cmlidXRlIHR5cGUgYXR0cmlidXRlcyB0aGF0IHVzZSB0aGUgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCB3aGljaCByZXR1cm5zIGFuIGludGVycG9sYXRpb24gYW5kIGhhcyBubyBzdG9yZWQgdHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlQXR0cmlidXRlTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgLy8gYHNlbGZgIGFuZCBgYnVpbGRgIGRvZXNuJ3Qgd29yayBpbiBhcyBwcm9wZXJ0eSBuYW1lIGluIFB5dGhvblxuICBpZiAobmFtZSA9PT0gXCJzZWxmXCIgfHwgbmFtZSA9PT0gXCJidWlsZFwiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICAvLyBqc2lpIGNhbid0IGhhbmRsZSBgZ2V0Rm9vYCBwcm9wZXJ0aWVzLCBzaW5jZSBpdCdzIGluY29tcGF0aWJsZSB3aXRoIEphdmFcbiAgaWYgKG5hbWUubWF0Y2goL15nZXRbQS1aYS16XSsvKSkgcmV0dXJuIG5hbWUucmVwbGFjZShcImdldFwiLCBcImZldGNoXCIpO1xuICAvLyBgZXF1YWxzYCBpcyBhIHByb2hpYml0ZWQgbmFtZSBpbiBqc2lpXG4gIGlmIChuYW1lID09PSBcImVxdWFsc1wiKSByZXR1cm4gXCJlcXVhbFRvXCI7XG4gIC8vIGBub2RlYCBpcyBhbHJlYWR5IHVzZWQgYnkgdGhlIENvbnN0cnVjdHMgYmFzZSBjbGFzc1xuICBpZiAobmFtZSA9PT0gXCJub2RlXCIpIHJldHVybiBcIm5vZGVBdHRyaWJ1dGVcIjtcbiAgLy8gYFN5c3RlbWAgc2hhZG93cyBidWlsdC1pbiB0eXBlcyBpbiBDU2hhcnAgKHNlZSAjMTQyMClcbiAgaWYgKG5hbWUgPT09IFwic3lzdGVtXCIpIHJldHVybiBcInN5c3RlbUF0dHJpYnV0ZVwiO1xuICAvLyBgdGZSZXNvdXJjZVR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSByZXNvdXJjZXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgcmVzb3VyY2UgdHlwZXNcbiAgaWYgKG5hbWUgPT09IFwidGZSZXNvdXJjZVR5cGVcIikgcmV0dXJuIGAke25hbWV9QXR0cmlidXRlYDtcbiAgLy8gYGltcG9ydEZyb21gIGhhcyBwb3RlbnRpYWwgZm9yIGNvbW1vbiBuYW1lIGNvbGxpc2lvbiB3aXRoIHByb3ZpZGVyc1xuICBpZiAobmFtZSA9PT0gXCJpbXBvcnRGcm9tXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIC8vIGBtb3ZlYCBjb3VsZCBoYXZlIGNvbW1vbiBuYW1lIGNvbGxpc2lvbiB3aXRoIHByb3ZpZGVyc1xuICBpZiAobmFtZSA9PT0gXCJtb3ZlVG9cIikgcmV0dXJuIGAke25hbWV9QXR0cmlidXRlYDtcbiAgLy8gYHNvZnR3YXJlYCBhdHRyaWJ1dGUgY2FuIGJlIGNvbmZ1c2VkIHdpdGggdGhlIEpTSUkgSmF2YSBydW50aW1lIHBhY2thZ2UgKHNlZSAjMzExNSlcbiAgaWYgKG5hbWUgPT09IFwic29mdHdhcmVcIikgcmV0dXJuIGAke25hbWV9QXR0cmlidXRlYDtcbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVNb2RlbCB7XG4gIHB1YmxpYyBzdG9yYWdlTmFtZTogc3RyaW5nOyAvLyBwcml2YXRlIHByb3BlcnR5XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgcHVibGljIHR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbDtcbiAgcHVibGljIG9wdGlvbmFsOiBib29sZWFuO1xuICBwdWJsaWMgY29tcHV0ZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyB0ZXJyYWZvcm1OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0ZXJyYWZvcm1GdWxsTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHVibGljIHByb3ZpZGVyOiBib29sZWFuO1xuICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBmb3JjZVBsYWluR2V0dGVyVHlwZT86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQXR0cmlidXRlTW9kZWxPcHRpb25zKSB7XG4gICAgdGhpcy5zdG9yYWdlTmFtZSA9IG9wdGlvbnMuc3RvcmFnZU5hbWU7XG4gICAgdGhpcy5fbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbnMub3B0aW9uYWw7XG4gICAgdGhpcy5jb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQ7XG4gICAgdGhpcy50ZXJyYWZvcm1OYW1lID0gb3B0aW9ucy50ZXJyYWZvcm1OYW1lO1xuICAgIHRoaXMudGVycmFmb3JtRnVsbE5hbWUgPSBvcHRpb25zLnRlcnJhZm9ybUZ1bGxOYW1lO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnByb3ZpZGVyID0gb3B0aW9ucy5wcm92aWRlcjtcbiAgICB0aGlzLnJlcXVpcmVkID0gb3B0aW9ucy5yZXF1aXJlZDtcbiAgICB0aGlzLmZvcmNlUGxhaW5HZXR0ZXJUeXBlID0gb3B0aW9ucy5mb3JjZVBsYWluR2V0dGVyVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZURlZmluaXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwiO1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9JHtvcHRpb25hbH06ICR7dGhpcy50eXBlLmlucHV0VHlwZURlZmluaXRpb259YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBc3NpZ25hYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkIHx8IHRoaXMub3B0aW9uYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3B0aW9uYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUHJvdmlkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdldHRlclR5cGUoKTogR2V0dGVyVHlwZSB7XG4gICAgbGV0IGdldHRlclR5cGU6IEdldHRlclR5cGUgPSB7IF90eXBlOiBcInBsYWluXCIgfTtcblxuICAgIGlmICh0aGlzLmZvcmNlUGxhaW5HZXR0ZXJUeXBlKSB7XG4gICAgICByZXR1cm4gZ2V0dGVyVHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyKSB7XG4gICAgICByZXR1cm4gZ2V0dGVyVHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlLmhhc1JlZmVyZW5jZUNsYXNzKSB7XG4gICAgICBnZXR0ZXJUeXBlID0ge1xuICAgICAgICBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuY29tcHV0ZWQgJiZcbiAgICAgICF0aGlzLmlzQXNzaWduYWJsZSAmJlxuICAgICAgKCF0aGlzLnR5cGUuaXNUb2tlbml6YWJsZSB8fCB0aGlzLnR5cGUudHlwZU1vZGVsVHlwZSA9PT0gXCJtYXBcIilcbiAgICApIHtcbiAgICAgIGdldHRlclR5cGUgPSB7XG4gICAgICAgIF90eXBlOiBcInN0b3JlZF9jbGFzc1wiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0dGVyVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTdG9yZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBc3NpZ25hYmxlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXR0ZXJUeXBlKCk6IFNldHRlclR5cGUge1xuICAgIGlmICghdGhpcy5pc1N0b3JlZCkge1xuICAgICAgcmV0dXJuIHsgX3R5cGU6IFwibm9uZVwiIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCIsXG4gICAgICAgIHR5cGU6IHRoaXMudHlwZS5pbnB1dFR5cGVEZWZpbml0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic2V0XCIsXG4gICAgICB0eXBlOiBgJHt0aGlzLnR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn0ke1xuICAgICAgICB0aGlzLmlzUHJvdmlkZXIgPyBcIiB8IHVuZGVmaW5lZFwiIDogXCJcIlxuICAgICAgfWAsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBdHRyaWJ1dGVNb2RlbC5lc2NhcGVOYW1lKHRoaXMuX25hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlc2NhcGVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVzY2FwZUF0dHJpYnV0ZU5hbWUobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uPy5yZXBsYWNlKC8nJycvZ2ksIFwiYGBgXCIpO1xuICB9XG5cbiAgcHVibGljIGdldFJlZmVyZW5jZWRUeXBlcyhpc0NvbmZpZ1N0cnVjdDogYm9vbGVhbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdHRUeXBlU3RydWN0ID0gdGhpcy50eXBlLnN0cnVjdDtcbiAgICBpZiAoIWF0dFR5cGVTdHJ1Y3QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5pc0Fzc2lnbmFibGUpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5uYW1lKTtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBwZXJOYW1lKTtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5oY2xNYXBwZXJOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhYXR0VHlwZVN0cnVjdC5pc1NpbmdsZUl0ZW0gJiZcbiAgICAgIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RcIiB8fFxuICAgICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcInNldFwiKVxuICAgICkge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwXCIpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwbGlzdFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubWFwTGlzdE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJtYXBzZXRcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lm1hcExpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibGlzdG1hcFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubGlzdE1hcE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRtYXBcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RNYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0bGlzdFwiIHx8XG4gICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RzZXRcIiB8fFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRsaXN0XCIgfHxcbiAgICAgIGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT0gXCJzZXRzZXRcIlxuICAgICkge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RMaXN0TmFtZSk7XG4gICAgfSBlbHNlIGlmICghaXNDb25maWdTdHJ1Y3QpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lKTtcbiAgICB9XG4gICAgLy8gb3RoZXIgdHlwZXMgb2YgbmVzdGVkIGNvbGxlY3Rpb25zIGFyZW4ndCBzdXBwb3J0ZWRcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxufVxuIl19
|