@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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigStruct = exports.Struct = void 0;
|
|
4
|
+
const util_1 = require("../../../util");
|
|
5
|
+
class Struct {
|
|
6
|
+
constructor(name, attributes, isClass = false, isAnonymous = false, isSingleItem = false, nestingMode = "") {
|
|
7
|
+
this.name = name;
|
|
8
|
+
this.attributes = attributes;
|
|
9
|
+
this.isClass = isClass;
|
|
10
|
+
this.isAnonymous = isAnonymous;
|
|
11
|
+
this.isSingleItem = isSingleItem;
|
|
12
|
+
this.nestingMode = nestingMode;
|
|
13
|
+
}
|
|
14
|
+
get assignableAttributes() {
|
|
15
|
+
return this.attributes.filter((attribute) => attribute.isAssignable);
|
|
16
|
+
}
|
|
17
|
+
get optionalAttributes() {
|
|
18
|
+
return this.attributes.filter((attribute) => attribute.optional);
|
|
19
|
+
}
|
|
20
|
+
get allOptional() {
|
|
21
|
+
return (this.attributes.filter((attribute) => !attribute.optional && !attribute.computed).length == 0);
|
|
22
|
+
}
|
|
23
|
+
get attributeType() {
|
|
24
|
+
return `${this.name}${this.allOptional ? " = {}" : ""}`;
|
|
25
|
+
}
|
|
26
|
+
get assignable() {
|
|
27
|
+
return !this.isClass || this.assignableAttributes.length > 0;
|
|
28
|
+
}
|
|
29
|
+
get extends() {
|
|
30
|
+
return "";
|
|
31
|
+
}
|
|
32
|
+
get mapperName() {
|
|
33
|
+
return `${(0, util_1.downcaseFirst)(this.name)}ToTerraform`;
|
|
34
|
+
}
|
|
35
|
+
get hclMapperName() {
|
|
36
|
+
return `${(0, util_1.downcaseFirst)(this.name)}ToHclTerraform`;
|
|
37
|
+
}
|
|
38
|
+
get outputReferenceName() {
|
|
39
|
+
return `${this.name}OutputReference`;
|
|
40
|
+
}
|
|
41
|
+
get listName() {
|
|
42
|
+
return `${this.name}List`;
|
|
43
|
+
}
|
|
44
|
+
get mapName() {
|
|
45
|
+
return `${this.name}Map`;
|
|
46
|
+
}
|
|
47
|
+
get mapListName() {
|
|
48
|
+
return `${this.name}MapList`;
|
|
49
|
+
}
|
|
50
|
+
get listMapName() {
|
|
51
|
+
return `${this.name}ListMap`;
|
|
52
|
+
}
|
|
53
|
+
get listListName() {
|
|
54
|
+
return `${this.name}ListList`;
|
|
55
|
+
}
|
|
56
|
+
get isProvider() {
|
|
57
|
+
return this.attributes.some((att) => att.isProvider);
|
|
58
|
+
}
|
|
59
|
+
get referencedTypes() {
|
|
60
|
+
const types = [];
|
|
61
|
+
this.attributes.forEach((att) => {
|
|
62
|
+
const attReferences = att.getReferencedTypes(false); // This may be a config struct, but still need the references in this context
|
|
63
|
+
if (attReferences) {
|
|
64
|
+
types.push(...attReferences);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return types;
|
|
68
|
+
}
|
|
69
|
+
get exportCount() {
|
|
70
|
+
let count = 1; // self
|
|
71
|
+
count += 1; // toTerraform function
|
|
72
|
+
if (this.nestingMode === "list" ||
|
|
73
|
+
this.nestingMode === "set" ||
|
|
74
|
+
this.nestingMode === "map") {
|
|
75
|
+
count += 1; // output reference
|
|
76
|
+
if (!this.isSingleItem) {
|
|
77
|
+
count += 1; // complex collection
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return count;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.Struct = Struct;
|
|
84
|
+
class ConfigStruct extends Struct {
|
|
85
|
+
get extends() {
|
|
86
|
+
return ` extends cdktn.TerraformMetaArguments`;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.ConfigStruct = ConfigStruct;
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL3N0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx3Q0FBOEM7QUFDOUMsTUFBYSxNQUFNO0lBQ2pCLFlBQ2tCLElBQVksRUFDWixVQUE0QixFQUM1QixVQUFVLEtBQUssRUFDZixjQUFjLEtBQUssRUFDNUIsZUFBZSxLQUFLLEVBQ1gsY0FBc0IsRUFBRTtRQUx4QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ1gsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDdkMsQ0FBQztJQUVKLElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxDQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUNwQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FDMUQsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDZFQUE2RTtZQUNsSSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDdEIsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUVuQyxJQUNFLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTTtZQUMzQixJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUs7WUFDMUIsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQzFCLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1lBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDbkMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQXpHRCx3QkF5R0M7QUFFRCxNQUFhLFlBQWEsU0FBUSxNQUFNO0lBQ3RDLElBQVcsT0FBTztRQUNoQixPQUFPLHVDQUF1QyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQUpELG9DQUlDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IEF0dHJpYnV0ZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBkb3duY2FzZUZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxcIjtcbmV4cG9ydCBjbGFzcyBTdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuICAgIHB1YmxpYyByZWFkb25seSBpc0NsYXNzID0gZmFsc2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGlzQW5vbnltb3VzID0gZmFsc2UsXG4gICAgcHVibGljIGlzU2luZ2xlSXRlbSA9IGZhbHNlLFxuICAgIHB1YmxpYyByZWFkb25seSBuZXN0aW5nTW9kZTogc3RyaW5nID0gXCJcIixcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgYXNzaWduYWJsZUF0dHJpYnV0ZXMoKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLmlzQXNzaWduYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wdGlvbmFsQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVNb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUub3B0aW9uYWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGxPcHRpb25hbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLmZpbHRlcihcbiAgICAgICAgKGF0dHJpYnV0ZSkgPT4gIWF0dHJpYnV0ZS5vcHRpb25hbCAmJiAhYXR0cmlidXRlLmNvbXB1dGVkLFxuICAgICAgKS5sZW5ndGggPT0gMFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0ke3RoaXMuYWxsT3B0aW9uYWwgPyBcIiA9IHt9XCIgOiBcIlwifWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFzc2lnbmFibGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzQ2xhc3MgfHwgdGhpcy5hc3NpZ25hYmxlQXR0cmlidXRlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIGdldCBleHRlbmRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcHBlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZG93bmNhc2VGaXJzdCh0aGlzLm5hbWUpfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGNsTWFwcGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMubmFtZSl9VG9IY2xUZXJyYWZvcm1gO1xuICB9XG5cbiAgcHVibGljIGdldCBvdXRwdXRSZWZlcmVuY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX1PdXRwdXRSZWZlcmVuY2VgO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TGlzdGA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfU1hcGA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcExpc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX1NYXBMaXN0YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGlzdE1hcE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfUxpc3RNYXBgO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0TGlzdE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfUxpc3RMaXN0YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQcm92aWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLnNvbWUoKGF0dCkgPT4gYXR0LmlzUHJvdmlkZXIpO1xuICB9XG5cbiAgcHVibGljIGdldCByZWZlcmVuY2VkVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dCkgPT4ge1xuICAgICAgY29uc3QgYXR0UmVmZXJlbmNlcyA9IGF0dC5nZXRSZWZlcmVuY2VkVHlwZXMoZmFsc2UpOyAvLyBUaGlzIG1heSBiZSBhIGNvbmZpZyBzdHJ1Y3QsIGJ1dCBzdGlsbCBuZWVkIHRoZSByZWZlcmVuY2VzIGluIHRoaXMgY29udGV4dFxuICAgICAgaWYgKGF0dFJlZmVyZW5jZXMpIHtcbiAgICAgICAgdHlwZXMucHVzaCguLi5hdHRSZWZlcmVuY2VzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwb3J0Q291bnQoKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAxOyAvLyBzZWxmXG4gICAgY291bnQgKz0gMTsgLy8gdG9UZXJyYWZvcm0gZnVuY3Rpb25cblxuICAgIGlmIChcbiAgICAgIHRoaXMubmVzdGluZ01vZGUgPT09IFwibGlzdFwiIHx8XG4gICAgICB0aGlzLm5lc3RpbmdNb2RlID09PSBcInNldFwiIHx8XG4gICAgICB0aGlzLm5lc3RpbmdNb2RlID09PSBcIm1hcFwiXG4gICAgKSB7XG4gICAgICBjb3VudCArPSAxOyAvLyBvdXRwdXQgcmVmZXJlbmNlXG5cbiAgICAgIGlmICghdGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgICAgY291bnQgKz0gMTsgLy8gY29tcGxleCBjb2xsZWN0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWdTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICBwdWJsaWMgZ2V0IGV4dGVuZHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCBleHRlbmRzIGNka3RuLlRlcnJhZm9ybU1ldGFBcmd1bWVudHNgO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModuleGenerator = void 0;
|
|
4
|
+
// Copyright (c) HashiCorp, Inc
|
|
5
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
6
|
+
const codemaker_1 = require("codemaker");
|
|
7
|
+
const models_1 = require("./models");
|
|
8
|
+
const sanitized_comments_1 = require("./sanitized-comments");
|
|
9
|
+
class ModuleGenerator {
|
|
10
|
+
constructor(code, targets) {
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.targets = targets;
|
|
13
|
+
this.code.indentation = 2;
|
|
14
|
+
for (const target of this.targets) {
|
|
15
|
+
this.emitSubmodule(target);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
emitSubmodule(target) {
|
|
19
|
+
const spec = target.spec;
|
|
20
|
+
if (!spec) {
|
|
21
|
+
throw new Error(`missing spec for ${target.fqn}`);
|
|
22
|
+
}
|
|
23
|
+
this.code.openFile(target.fileName);
|
|
24
|
+
this.code.line(`// generated by cdktn get`);
|
|
25
|
+
this.code.line(`// ${target.source}`);
|
|
26
|
+
this.code.line(`import { TerraformModule, type TerraformModuleUserConfig } from 'cdktn';`);
|
|
27
|
+
this.code.line(`import { Construct } from 'constructs';`);
|
|
28
|
+
const baseName = this.code.toPascalCase(target.name.replace(/[-/.]/g, "_"));
|
|
29
|
+
const configType = `${baseName}Config`;
|
|
30
|
+
this.code.openBlock(`export interface ${configType} extends TerraformModuleUserConfig`);
|
|
31
|
+
for (const input of spec.inputs) {
|
|
32
|
+
const optional = input.required && input.default === undefined ? "" : "?";
|
|
33
|
+
const comment = (0, sanitized_comments_1.sanitizedComment)(this.code);
|
|
34
|
+
if (input.description) {
|
|
35
|
+
comment.line(input.description);
|
|
36
|
+
}
|
|
37
|
+
if (input.default) {
|
|
38
|
+
comment.line(input.default);
|
|
39
|
+
}
|
|
40
|
+
if (input.type.includes("map(")) {
|
|
41
|
+
comment.line(`The property type contains a map, they have special handling, please see {@link cdk.tf/module-map-inputs the docs}`);
|
|
42
|
+
}
|
|
43
|
+
comment.end();
|
|
44
|
+
this.code.line(`readonly ${models_1.AttributeModel.escapeName((0, codemaker_1.toCamelCase)(input.name))}${optional}: ${parseType(input.type)};`);
|
|
45
|
+
}
|
|
46
|
+
this.code.closeBlock();
|
|
47
|
+
// Add a link to the Terraform Registry if it is sourced from there
|
|
48
|
+
// https://developer.hashicorp.com/terraform/language/modules/sources
|
|
49
|
+
// Registry modules are referred to as <NAMESPACE>/<NAME>/<PROVIDER>
|
|
50
|
+
// Other sources contain dots, e.g.
|
|
51
|
+
// app.terraform.io/example-corp/k8s-cluster/azurerm (private registries)
|
|
52
|
+
// github.com/hashicorp/example (Github)
|
|
53
|
+
// git@github.com:hashicorp/example.git
|
|
54
|
+
// bitbucket.org/hashicorp/terraform-consul-aws (Bitbucket)
|
|
55
|
+
// ... and more
|
|
56
|
+
// ../module and ./module (local paths)
|
|
57
|
+
const isNonRegistryModule = target.source.includes(".");
|
|
58
|
+
let registryPath;
|
|
59
|
+
// Submodules also exist (e.g. terraform-aws-modules/vpc/aws//modules/vpc-endpoints)
|
|
60
|
+
// And linking directly to them in the Registry requires including the version
|
|
61
|
+
// like e.g. https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest/submodules/vpc-endpoints
|
|
62
|
+
if (target.source.includes("//")) {
|
|
63
|
+
registryPath = target.source.replace("//modules", `/${target.version || "latest"}/submodules`);
|
|
64
|
+
// terraform-aws-modules/vpc/aws//modules/vpc-endpoints
|
|
65
|
+
// ->
|
|
66
|
+
// terraform-aws-modules/vpc/aws/latest/submodules/vpc-endpoints
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// not submodule specified, just append the version
|
|
70
|
+
registryPath = `${target.source}/${target.version || "latest"}`;
|
|
71
|
+
}
|
|
72
|
+
const comment = (0, sanitized_comments_1.sanitizedComment)(this.code);
|
|
73
|
+
comment.line(`Defines an ${baseName} based on a Terraform module`);
|
|
74
|
+
comment.line(``);
|
|
75
|
+
comment.line(isNonRegistryModule
|
|
76
|
+
? `Source at ${target.source}`
|
|
77
|
+
: `Docs at Terraform Registry: {@link https://registry.terraform.io/modules/${registryPath} ${target.source}}`);
|
|
78
|
+
comment.end();
|
|
79
|
+
this.code.openBlock(`export class ${baseName} extends TerraformModule`);
|
|
80
|
+
this.code.line(`private readonly inputs: { [name: string]: any } = { }`);
|
|
81
|
+
const allOptional = spec.inputs.find((x) => x.required) ? "" : " = {}";
|
|
82
|
+
this.code.open(`public constructor(scope: Construct, id: string, config: ${configType}${allOptional}) {`);
|
|
83
|
+
this.code.open(`super(scope, id, {`);
|
|
84
|
+
this.code.line("...config,");
|
|
85
|
+
this.code.line(`source: '${target.source}',`);
|
|
86
|
+
if (target.version) {
|
|
87
|
+
this.code.line(`version: '${target.version}',`);
|
|
88
|
+
}
|
|
89
|
+
this.code.close(`});`);
|
|
90
|
+
for (const input of spec.inputs) {
|
|
91
|
+
const inputName = models_1.AttributeModel.escapeName((0, codemaker_1.toCamelCase)(input.name));
|
|
92
|
+
this.code.line(`this.${inputName} = config.${inputName};`);
|
|
93
|
+
}
|
|
94
|
+
this.code.close(`}`); // ctor
|
|
95
|
+
for (const input of spec.inputs) {
|
|
96
|
+
const inputName = models_1.AttributeModel.escapeName((0, codemaker_1.toCamelCase)(input.name));
|
|
97
|
+
const inputType = parseType(input.type) +
|
|
98
|
+
(input.required && input.default === undefined ? "" : " | undefined");
|
|
99
|
+
this.code.openBlock(`public get ${inputName}(): ${inputType}`);
|
|
100
|
+
this.code.line(`return this.inputs['${input.name}'] as ${inputType};`);
|
|
101
|
+
this.code.closeBlock();
|
|
102
|
+
this.code.openBlock(`public set ${inputName}(value: ${inputType})`);
|
|
103
|
+
this.code.line(`this.inputs['${input.name}'] = value;`);
|
|
104
|
+
this.code.closeBlock();
|
|
105
|
+
}
|
|
106
|
+
for (const output of spec.outputs) {
|
|
107
|
+
const outputName = (0, codemaker_1.toCamelCase)(output.name);
|
|
108
|
+
this.code.openBlock(`public get ${outputName}Output()`);
|
|
109
|
+
this.code.line(`return this.getString('${output.name}')`);
|
|
110
|
+
this.code.closeBlock();
|
|
111
|
+
}
|
|
112
|
+
this.code.openBlock(`protected synthesizeAttributes()`);
|
|
113
|
+
this.code.line(`return this.inputs;`);
|
|
114
|
+
this.code.closeBlock();
|
|
115
|
+
this.code.openBlock(`protected synthesizeHclAttributes(): { [name: string]: any }`);
|
|
116
|
+
this.code.line(`return Object.fromEntries(`);
|
|
117
|
+
this.code.line(` Object.entries(this.inputs)`);
|
|
118
|
+
this.code.line(` .filter(([, val]) => val !== undefined)`);
|
|
119
|
+
this.code.line(` .map(([key, val]) => {`);
|
|
120
|
+
this.code.line(` return [`);
|
|
121
|
+
this.code.line(` key,`);
|
|
122
|
+
this.code.line(` {`);
|
|
123
|
+
this.code.line(` value: val,`);
|
|
124
|
+
this.code.line(` type: "any",`);
|
|
125
|
+
this.code.line(` },`);
|
|
126
|
+
this.code.line(` ];`);
|
|
127
|
+
this.code.line(` })`);
|
|
128
|
+
this.code.line(`);`);
|
|
129
|
+
this.code.closeBlock();
|
|
130
|
+
this.code.closeBlock(); // class
|
|
131
|
+
this.code.closeFile(target.fileName);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.ModuleGenerator = ModuleGenerator;
|
|
135
|
+
function parseType(type) {
|
|
136
|
+
if (type === "string") {
|
|
137
|
+
return "string";
|
|
138
|
+
}
|
|
139
|
+
if (type === "number") {
|
|
140
|
+
return "number";
|
|
141
|
+
}
|
|
142
|
+
if (type === "bool") {
|
|
143
|
+
return "boolean";
|
|
144
|
+
}
|
|
145
|
+
if (type === "list") {
|
|
146
|
+
return "string[]";
|
|
147
|
+
}
|
|
148
|
+
if (type === "map") {
|
|
149
|
+
return "{ [key: string]: string }";
|
|
150
|
+
}
|
|
151
|
+
if (type === "tuple") {
|
|
152
|
+
return "string[]";
|
|
153
|
+
}
|
|
154
|
+
if (type === "any") {
|
|
155
|
+
return "any";
|
|
156
|
+
}
|
|
157
|
+
const complexType = parseComplexType(type);
|
|
158
|
+
if (complexType) {
|
|
159
|
+
return complexType;
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`unknown type ${type}`);
|
|
162
|
+
}
|
|
163
|
+
function parseComplexType(type) {
|
|
164
|
+
const complex = /^(object|list|map|set|tuple)\(([\s\S]+)\)/;
|
|
165
|
+
const match = complex.exec(type);
|
|
166
|
+
if (!match) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
const [, kind, innerType] = match;
|
|
170
|
+
if (kind === "object") {
|
|
171
|
+
return `any`;
|
|
172
|
+
}
|
|
173
|
+
if (kind === "list" || kind === "set") {
|
|
174
|
+
return `${parseType(innerType)}[]`;
|
|
175
|
+
}
|
|
176
|
+
if (kind === "tuple") {
|
|
177
|
+
return `any[]`;
|
|
178
|
+
}
|
|
179
|
+
if (kind === "map") {
|
|
180
|
+
return `{ [key: string]: ${parseType(innerType)} }`;
|
|
181
|
+
}
|
|
182
|
+
throw new Error(`unexpected kind ${kind}`);
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZXQvZ2VuZXJhdG9yL21vZHVsZS1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBbUQ7QUFDbkQscUNBQTBDO0FBQzFDLDZEQUF3RDtBQUd4RCxNQUFhLGVBQWU7SUFDMUIsWUFDbUIsSUFBZSxFQUNmLE9BQXNDO1FBRHRDLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUV2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFMUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFtQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXpCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDBFQUEwRSxDQUMzRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENB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QUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtJQUNwQyxNQUFNLE9BQU8sR0FBRywyQ0FBMkMsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWxDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdEMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNyQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbkIsT0FBTyxvQkFBb0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIsIHRvQ2FtZWxDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IHNhbml0aXplZENvbW1lbnQgfSBmcm9tIFwiLi9zYW5pdGl6ZWQtY29tbWVudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlR2VuZXJhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRzOiBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXRbXSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRoaXMudGFyZ2V0cykge1xuICAgICAgdGhpcy5lbWl0U3VibW9kdWxlKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3VibW9kdWxlKHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KSB7XG4gICAgY29uc3Qgc3BlYyA9IHRhcmdldC5zcGVjO1xuXG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc3BlYyBmb3IgJHt0YXJnZXQuZnFufWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZSh0YXJnZXQuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRgKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gJHt0YXJnZXQuc291cmNlfWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgaW1wb3J0IHsgVGVycmFmb3JtTW9kdWxlLCB0eXBlIFRlcnJhZm9ybU1vZHVsZVVzZXJDb25maWcgfSBmcm9tICdjZGt0bic7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgKTtcblxuICAgIGNvbnN0IGJhc2VOYW1lID0gdGhpcy5jb2RlLnRvUGFzY2FsQ2FzZSh0YXJnZXQubmFtZS5yZXBsYWNlKC9bLS8uXS9nLCBcIl9cIikpO1xuICAgIGNvbnN0IGNvbmZpZ1R5cGUgPSBgJHtiYXNlTmFtZX1Db25maWdgO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgaW50ZXJmYWNlICR7Y29uZmlnVHlwZX0gZXh0ZW5kcyBUZXJyYWZvcm1Nb2R1bGVVc2VyQ29uZmlnYCxcbiAgICApO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2Ygc3BlYy5pbnB1dHMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbmFsID0gaW5wdXQucmVxdWlyZWQgJiYgaW5wdXQuZGVmYXVsdCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiP1wiO1xuXG4gICAgICBjb25zdCBjb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgICAgaWYgKGlucHV0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbW1lbnQubGluZShpbnB1dC5kZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQuZGVmYXVsdCkge1xuICAgICAgICBjb21tZW50LmxpbmUoaW5wdXQuZGVmYXVsdCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQudHlwZS5pbmNsdWRlcyhcIm1hcChcIikpIHtcbiAgICAgICAgY29tbWVudC5saW5lKFxuICAgICAgICAgIGBUaGUgcHJvcGVydHkgdHlwZSBjb250YWlucyBhIG1hcCwgdGhleSBoYXZlIHNwZWNpYWwgaGFuZGxpbmcsIHBsZWFzZSBzZWUge0BsaW5rIGNkay50Zi9tb2R1bGUtbWFwLWlucHV0cyB0aGUgZG9jc31gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29tbWVudC5lbmQoKTtcblxuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGByZWFkb25seSAke0F0dHJpYnV0ZU1vZGVsLmVzY2FwZU5hbWUoXG4gICAgICAgICAgdG9DYW1lbENhc2UoaW5wdXQubmFtZSksXG4gICAgICAgICl9JHtvcHRpb25hbH06ICR7cGFyc2VUeXBlKGlucHV0LnR5cGUpfTtgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIC8vIEFkZCBhIGxpbmsgdG8gdGhlIFRlcnJhZm9ybSBSZWdpc3RyeSBpZiBpdCBpcyBzb3VyY2VkIGZyb20gdGhlcmVcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9tb2R1bGVzL3NvdXJjZXNcbiAgICAvLyBSZWdpc3RyeSBtb2R1bGVzIGFyZSByZWZlcnJlZCB0byBhcyA8TkFNRVNQQUNFPi88TkFNRT4vPFBST1ZJREVSPlxuICAgIC8vIE90aGVyIHNvdXJjZXMgY29udGFpbiBkb3RzLCBlLmcuXG4gICAgLy8gYXBwLnRlcnJhZm9ybS5pby9leGFtcGxlLWNvcnAvazhzLWNsdXN0ZXIvYXp1cmVybSAocHJpdmF0ZSByZWdpc3RyaWVzKVxuICAgIC8vIGdpdGh1Yi5jb20vaGFzaGljb3JwL2V4YW1wbGUgKEdpdGh1YilcbiAgICAvLyBnaXRAZ2l0aHViLmNvbTpoYXNoaWNvcnAvZXhhbXBsZS5naXRcbiAgICAvLyBiaXRidWNrZXQub3JnL2hhc2hpY29ycC90ZXJyYWZvcm0tY29uc3VsLWF3cyAoQml0YnVja2V0KVxuICAgIC8vIC4uLiBhbmQgbW9yZVxuICAgIC8vIC4uL21vZHVsZSBhbmQgLi9tb2R1bGUgKGxvY2FsIHBhdGhzKVxuICAgIGNvbnN0IGlzTm9uUmVnaXN0cnlNb2R1bGUgPSB0YXJnZXQuc291cmNlLmluY2x1ZGVzKFwiLlwiKTtcbiAgICBsZXQgcmVnaXN0cnlQYXRoO1xuICAgIC8vIFN1Ym1vZHVsZXMgYWxzbyBleGlzdCAoZS5nLiB0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvdnBjL2F3cy8vbW9kdWxlcy92cGMtZW5kcG9pbnRzKVxuICAgIC8vIEFuZCBsaW5raW5nIGRpcmVjdGx5IHRvIHRoZW0gaW4gdGhlIFJlZ2lzdHJ5IHJlcXVpcmVzIGluY2x1ZGluZyB0aGUgdmVyc2lvblxuICAgIC8vIGxpa2UgZS5nLiBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9tb2R1bGVzL3RlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzL2xhdGVzdC9zdWJtb2R1bGVzL3ZwYy1lbmRwb2ludHNcbiAgICBpZiAodGFyZ2V0LnNvdXJjZS5pbmNsdWRlcyhcIi8vXCIpKSB7XG4gICAgICByZWdpc3RyeVBhdGggPSB0YXJnZXQuc291cmNlLnJlcGxhY2UoXG4gICAgICAgIFwiLy9tb2R1bGVzXCIsXG4gICAgICAgIGAvJHt0YXJnZXQudmVyc2lvbiB8fCBcImxhdGVzdFwifS9zdWJtb2R1bGVzYCxcbiAgICAgICk7XG4gICAgICAvLyB0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvdnBjL2F3cy8vbW9kdWxlcy92cGMtZW5kcG9pbnRzXG4gICAgICAvLyAtPlxuICAgICAgLy8gdGVycmFmb3JtLWF3cy1tb2R1bGVzL3ZwYy9hd3MvbGF0ZXN0L3N1Ym1vZHVsZXMvdnBjLWVuZHBvaW50c1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3Qgc3VibW9kdWxlIHNwZWNpZmllZCwganVzdCBhcHBlbmQgdGhlIHZlcnNpb25cbiAgICAgIHJlZ2lzdHJ5UGF0aCA9IGAke3RhcmdldC5zb3VyY2V9LyR7dGFyZ2V0LnZlcnNpb24gfHwgXCJsYXRlc3RcIn1gO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29tbWVudC5saW5lKGBEZWZpbmVzIGFuICR7YmFzZU5hbWV9IGJhc2VkIG9uIGEgVGVycmFmb3JtIG1vZHVsZWApO1xuICAgIGNvbW1lbnQubGluZShgYCk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgaXNOb25SZWdpc3RyeU1vZHVsZVxuICAgICAgICA/IGBTb3VyY2UgYXQgJHt0YXJnZXQuc291cmNlfWBcbiAgICAgICAgOiBgRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9tb2R1bGVzLyR7cmVnaXN0cnlQYXRofSAke3RhcmdldC5zb3VyY2V9fWAsXG4gICAgKTtcbiAgICBjb21tZW50LmVuZCgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYGV4cG9ydCBjbGFzcyAke2Jhc2VOYW1lfSBleHRlbmRzIFRlcnJhZm9ybU1vZHVsZWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYHByaXZhdGUgcmVhZG9ubHkgaW5wdXRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHsgfWApO1xuXG4gICAgY29uc3QgYWxsT3B0aW9uYWwgPSBzcGVjLmlucHV0cy5maW5kKCh4KSA9PiB4LnJlcXVpcmVkKSA/IFwiXCIgOiBcIiA9IHt9XCI7XG5cbiAgICB0aGlzLmNvZGUub3BlbihcbiAgICAgIGBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29uZmlnOiAke2NvbmZpZ1R5cGV9JHthbGxPcHRpb25hbH0pIHtgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLm9wZW4oYHN1cGVyKHNjb3BlLCBpZCwge2ApO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLi4uY29uZmlnLFwiKTtcbiAgICB0aGlzLmNvZGUubGluZShgc291cmNlOiAnJHt0YXJnZXQuc291cmNlfScsYCk7XG4gICAgaWYgKHRhcmdldC52ZXJzaW9uKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShgdmVyc2lvbjogJyR7dGFyZ2V0LnZlcnNpb259JyxgKTtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlKGB9KTtgKTtcblxuICAgIGZvciAoY29uc3QgaW5wdXQgb2Ygc3BlYy5pbnB1dHMpIHtcbiAgICAgIGNvbnN0IGlucHV0TmFtZSA9IEF0dHJpYnV0ZU1vZGVsLmVzY2FwZU5hbWUodG9DYW1lbENhc2UoaW5wdXQubmFtZSkpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHtpbnB1dE5hbWV9ID0gY29uZmlnLiR7aW5wdXROYW1lfTtgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2UoYH1gKTsgLy8gY3RvclxuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBzcGVjLmlucHV0cykge1xuICAgICAgY29uc3QgaW5wdXROYW1lID0gQXR0cmlidXRlTW9kZWwuZXNjYXBlTmFtZSh0b0NhbWVsQ2FzZShpbnB1dC5uYW1lKSk7XG4gICAgICBjb25zdCBpbnB1dFR5cGUgPVxuICAgICAgICBwYXJzZVR5cGUoaW5wdXQudHlwZSkgK1xuICAgICAgICAoaW5wdXQucmVxdWlyZWQgJiYgaW5wdXQuZGVmYXVsdCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiIHwgdW5kZWZpbmVkXCIpO1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGdldCAke2lucHV0TmFtZX0oKTogJHtpbnB1dFR5cGV9YCk7XG4gICAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuIHRoaXMuaW5wdXRzWycke2lucHV0Lm5hbWV9J10gYXMgJHtpbnB1dFR5cGV9O2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIHNldCAke2lucHV0TmFtZX0odmFsdWU6ICR7aW5wdXRUeXBlfSlgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGB0aGlzLmlucHV0c1snJHtpbnB1dC5uYW1lfSddID0gdmFsdWU7YCk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHNwZWMub3V0cHV0cykge1xuICAgICAgY29uc3Qgb3V0cHV0TmFtZSA9IHRvQ2FtZWxDYXNlKG91dHB1dC5uYW1lKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBnZXQgJHtvdXRwdXROYW1lfU91dHB1dCgpYCk7XG4gICAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCcke291dHB1dC5uYW1lfScpYCk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHByb3RlY3RlZCBzeW50aGVzaXplQXR0cmlidXRlcygpYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLmlucHV0cztgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwcm90ZWN0ZWQgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH1gLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgT2JqZWN0LmVudHJpZXModGhpcy5pbnB1dHMpYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAuZmlsdGVyKChbLCB2YWxdKSA9PiB2YWwgIT09IHVuZGVmaW5lZClgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgIC5tYXAoKFtrZXksIHZhbF0pID0+IHtgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgcmV0dXJuIFtgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgICBrZXksYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgICAge2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICAgICAgdmFsdWU6IHZhbCxgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgICAgIHR5cGU6IFwiYW55XCIsYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgICAgfSxgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgXTtgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgIH0pYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCk7YCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7IC8vIGNsYXNzXG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZSh0YXJnZXQuZmlsZU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBcIm51bWJlclwiO1xuICB9XG4gIGlmICh0eXBlID09PSBcImJvb2xcIikge1xuICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJsaXN0XCIpIHtcbiAgICByZXR1cm4gXCJzdHJpbmdbXVwiO1xuICB9XG4gIGlmICh0eXBlID09PSBcIm1hcFwiKSB7XG4gICAgcmV0dXJuIFwieyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVwiO1xuICB9XG4gIGlmICh0eXBlID09PSBcInR1cGxlXCIpIHtcbiAgICByZXR1cm4gXCJzdHJpbmdbXVwiO1xuICB9XG4gIGlmICh0eXBlID09PSBcImFueVwiKSB7XG4gICAgcmV0dXJuIFwiYW55XCI7XG4gIH1cblxuICBjb25zdCBjb21wbGV4VHlwZSA9IHBhcnNlQ29tcGxleFR5cGUodHlwZSk7XG4gIGlmIChjb21wbGV4VHlwZSkge1xuICAgIHJldHVybiBjb21wbGV4VHlwZTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgdW5rbm93biB0eXBlICR7dHlwZX1gKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21wbGV4VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb21wbGV4ID0gL14ob2JqZWN0fGxpc3R8bWFwfHNldHx0dXBsZSlcXCgoW1xcc1xcU10rKVxcKS87XG4gIGNvbnN0IG1hdGNoID0gY29tcGxleC5leGVjKHR5cGUpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IFssIGtpbmQsIGlubmVyVHlwZV0gPSBtYXRjaDtcblxuICBpZiAoa2luZCA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBgYW55YDtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImxpc3RcIiB8fCBraW5kID09PSBcInNldFwiKSB7XG4gICAgcmV0dXJuIGAke3BhcnNlVHlwZShpbm5lclR5cGUpfVtdYDtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcInR1cGxlXCIpIHtcbiAgICByZXR1cm4gYGFueVtdYDtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcIm1hcFwiKSB7XG4gICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICR7cGFyc2VUeXBlKGlubmVyVHlwZSl9IH1gO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGtpbmQgJHtraW5kfWApO1xufVxuIl19
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerraformProviderGenerator = void 0;
|
|
4
|
+
// Copyright (c) HashiCorp, Inc
|
|
5
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
6
|
+
const codemaker_1 = require("codemaker");
|
|
7
|
+
const commons_1 = require("@cdktn/commons");
|
|
8
|
+
const provider_schema_1 = require("@cdktn/provider-schema");
|
|
9
|
+
const resource_parser_1 = require("./resource-parser");
|
|
10
|
+
const emitter_1 = require("./emitter");
|
|
11
|
+
const isMatching = (target, terraformSchemaName) => {
|
|
12
|
+
if (target.isModule)
|
|
13
|
+
return false;
|
|
14
|
+
const elements = terraformSchemaName.split("/");
|
|
15
|
+
if (elements.length === 1) {
|
|
16
|
+
return target.source === terraformSchemaName;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const [hostname, namespace, provider] = elements;
|
|
20
|
+
if (!hostname || !namespace || !provider) {
|
|
21
|
+
throw new Error(`can't handle ${terraformSchemaName}`);
|
|
22
|
+
}
|
|
23
|
+
// If target.source is set, try to match it
|
|
24
|
+
if (target.source) {
|
|
25
|
+
const targetSource = {
|
|
26
|
+
// defaults
|
|
27
|
+
hostname: "registry.terraform.io",
|
|
28
|
+
namespace: "hashicorp",
|
|
29
|
+
name: "",
|
|
30
|
+
};
|
|
31
|
+
const targetElements = target.source.split("/");
|
|
32
|
+
switch (targetElements.length) {
|
|
33
|
+
case 1: // only name set
|
|
34
|
+
targetSource.name = targetElements[0].toLowerCase();
|
|
35
|
+
break;
|
|
36
|
+
case 2: // namespace and name set
|
|
37
|
+
targetSource.namespace = targetElements[0].toLowerCase();
|
|
38
|
+
targetSource.name = targetElements[1].toLowerCase();
|
|
39
|
+
break;
|
|
40
|
+
case 3: // hostname, namespace and name set
|
|
41
|
+
targetSource.hostname = targetElements[0].toLowerCase();
|
|
42
|
+
targetSource.namespace = targetElements[1].toLowerCase();
|
|
43
|
+
targetSource.name = targetElements[2].toLowerCase();
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`can't handle ${target.source}. Expected string with 1, 2 or 3 elements separated by '/'`);
|
|
47
|
+
}
|
|
48
|
+
return (targetSource.hostname === hostname &&
|
|
49
|
+
targetSource.namespace === namespace &&
|
|
50
|
+
targetSource.name === provider);
|
|
51
|
+
}
|
|
52
|
+
// Else, try to match target.name to the provider name
|
|
53
|
+
return target.name === provider;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
class TerraformProviderGenerator {
|
|
57
|
+
constructor(code, schema) {
|
|
58
|
+
this.code = code;
|
|
59
|
+
this.schema = schema;
|
|
60
|
+
this.resourceParser = new resource_parser_1.ResourceParser();
|
|
61
|
+
this.versions = {};
|
|
62
|
+
this.code.indentation = 2;
|
|
63
|
+
this.resourceEmitter = new emitter_1.ResourceEmitter(this.code);
|
|
64
|
+
this.structEmitter = new emitter_1.StructEmitter(this.code);
|
|
65
|
+
}
|
|
66
|
+
getProviderByConstraint(providerConstraint) {
|
|
67
|
+
return Object.keys(this.schema.provider_schemas || {}).find((fqpn) => isMatching(providerConstraint, fqpn));
|
|
68
|
+
}
|
|
69
|
+
generate(providerConstraint) {
|
|
70
|
+
var _a;
|
|
71
|
+
const fqpn = this.getProviderByConstraint(providerConstraint);
|
|
72
|
+
if (!fqpn) {
|
|
73
|
+
commons_1.logger.debug(`Could not find provider constraint for ${providerConstraint} in schema: ${JSON.stringify(this.schema, null, 2)}`);
|
|
74
|
+
throw new Error(`Could not find provider with constraint ${JSON.stringify(providerConstraint)}`);
|
|
75
|
+
}
|
|
76
|
+
const providerVersion = (_a = this.schema.provider_versions) === null || _a === void 0 ? void 0 : _a[fqpn];
|
|
77
|
+
this.emitProvider(fqpn, providerVersion, providerConstraint);
|
|
78
|
+
this.versions[fqpn] = providerVersion;
|
|
79
|
+
}
|
|
80
|
+
generateAll() {
|
|
81
|
+
for (const fqpn of Object.keys(this.schema.provider_schemas || {})) {
|
|
82
|
+
this.generate(new commons_1.ConstructsMakerProviderTarget(new commons_1.TerraformProviderConstraint(fqpn), commons_1.LANGUAGES[0]));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async save(outdir) {
|
|
86
|
+
await this.code.save(outdir);
|
|
87
|
+
}
|
|
88
|
+
buildResourceModels(fqpn, constraint) {
|
|
89
|
+
var _a;
|
|
90
|
+
const provider = (_a = this.schema.provider_schemas) === null || _a === void 0 ? void 0 : _a[fqpn];
|
|
91
|
+
if (!provider) {
|
|
92
|
+
throw new Error(`Can not find provider '${fqpn}' in schema`);
|
|
93
|
+
}
|
|
94
|
+
const resources = Object.entries(provider.resource_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, type, resource, "resource", constraint));
|
|
95
|
+
const dataSources = Object.entries(provider.data_source_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, `data_${type}`, resource, "data_source", constraint));
|
|
96
|
+
return [].concat(...resources, ...dataSources);
|
|
97
|
+
}
|
|
98
|
+
getClassNameForResource(terraformType) {
|
|
99
|
+
return this.resourceParser.getClassNameForResource(terraformType);
|
|
100
|
+
}
|
|
101
|
+
getNamespaceNameForResource(terraformType) {
|
|
102
|
+
return this.resourceParser.getNamespaceNameForResource(terraformType);
|
|
103
|
+
}
|
|
104
|
+
emitProvider(fqpn, providerVersion, constraint) {
|
|
105
|
+
var _a;
|
|
106
|
+
const name = (constraint === null || constraint === void 0 ? void 0 : constraint.name)
|
|
107
|
+
? constraint.name
|
|
108
|
+
: (0, provider_schema_1.parseFQPN)(fqpn).name;
|
|
109
|
+
const provider = (_a = this.schema.provider_schemas) === null || _a === void 0 ? void 0 : _a[fqpn];
|
|
110
|
+
if (!provider) {
|
|
111
|
+
throw new Error(`Can not find provider '${fqpn}' in schema`);
|
|
112
|
+
}
|
|
113
|
+
const files = [];
|
|
114
|
+
this.buildResourceModels(fqpn, constraint).forEach((resourceModel) => {
|
|
115
|
+
if (constraint) {
|
|
116
|
+
resourceModel.providerVersionConstraint = constraint.version;
|
|
117
|
+
resourceModel.terraformProviderSource = constraint.source;
|
|
118
|
+
}
|
|
119
|
+
resourceModel.providerVersion = providerVersion;
|
|
120
|
+
if (resourceModel.structsRequireSharding) {
|
|
121
|
+
files.push(this.emitResourceWithComplexStruct(resourceModel));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
files.push(this.emitResource(resourceModel));
|
|
125
|
+
}
|
|
126
|
+
this.emitResourceReadme(resourceModel);
|
|
127
|
+
});
|
|
128
|
+
if (provider.provider) {
|
|
129
|
+
const providerResource = this.resourceParser.parse(fqpn, `provider`, provider.provider, "provider", constraint);
|
|
130
|
+
if (constraint) {
|
|
131
|
+
providerResource.providerVersionConstraint = constraint.version;
|
|
132
|
+
providerResource.terraformProviderSource = constraint.source;
|
|
133
|
+
providerResource.terraformProviderName = constraint.name;
|
|
134
|
+
}
|
|
135
|
+
providerResource.providerVersion = providerVersion;
|
|
136
|
+
files.push(this.emitResource(providerResource));
|
|
137
|
+
this.emitResourceReadme(providerResource);
|
|
138
|
+
}
|
|
139
|
+
this.emitIndexFile(name, files);
|
|
140
|
+
this.emitLazyIndexFile(name, files);
|
|
141
|
+
}
|
|
142
|
+
emitResourceReadme(resource) {
|
|
143
|
+
const filePath = `${resource.namespaceFolderPath}/README.md`;
|
|
144
|
+
this.code.openFile(filePath);
|
|
145
|
+
this.code.line(`# \`${resource.terraformType}\``);
|
|
146
|
+
this.code.line();
|
|
147
|
+
const type = resource.isProvider
|
|
148
|
+
? resource.provider
|
|
149
|
+
: resource.terraformType;
|
|
150
|
+
this.code.line(`Refer to the Terraform Registry for docs: [\`${type}\`](${resource.linkToDocs}).`);
|
|
151
|
+
this.code.closeFile(filePath);
|
|
152
|
+
}
|
|
153
|
+
emitIndexFile(provider, files) {
|
|
154
|
+
const folder = `providers/${provider}`;
|
|
155
|
+
const filePath = `${folder}/index.ts`;
|
|
156
|
+
this.code.openFile(filePath);
|
|
157
|
+
this.code.line("// generated by cdktn get");
|
|
158
|
+
for (const file of files) {
|
|
159
|
+
const dirName = file.replace(`${folder}/`, "").replace("/index.ts", "");
|
|
160
|
+
this.code.line(`export * as ${(0, codemaker_1.toCamelCase)(dirName)} from './${dirName}';`);
|
|
161
|
+
}
|
|
162
|
+
this.code.line();
|
|
163
|
+
this.code.closeFile(filePath);
|
|
164
|
+
}
|
|
165
|
+
emitLazyIndexFile(provider, files) {
|
|
166
|
+
const folder = `providers/${provider}`;
|
|
167
|
+
const filePath = `${folder}/lazy-index.ts`;
|
|
168
|
+
this.code.openFile(filePath);
|
|
169
|
+
this.code.line("// generated by cdktn get");
|
|
170
|
+
for (const file of files) {
|
|
171
|
+
const dirName = file.replace(`${folder}/`, "").replace("/index.ts", "");
|
|
172
|
+
this.code.line(`Object.defineProperty(exports, '${(0, codemaker_1.toCamelCase)(dirName)}', { get: function () { return require('./${dirName}'); } });`);
|
|
173
|
+
}
|
|
174
|
+
this.code.line();
|
|
175
|
+
this.code.closeFile(filePath);
|
|
176
|
+
}
|
|
177
|
+
emitResource(resource) {
|
|
178
|
+
this.code.openFile(resource.filePath);
|
|
179
|
+
this.emitFileHeader(resource);
|
|
180
|
+
this.structEmitter.emit(resource);
|
|
181
|
+
this.resourceEmitter.emit(resource);
|
|
182
|
+
this.code.closeFile(resource.filePath);
|
|
183
|
+
return resource.filePath;
|
|
184
|
+
}
|
|
185
|
+
emitResourceWithComplexStruct(resource) {
|
|
186
|
+
const generatedFiles = [];
|
|
187
|
+
// drop the last segment of the filepath
|
|
188
|
+
const filePath = resource.filePath;
|
|
189
|
+
this.code.openFile(filePath);
|
|
190
|
+
this.code.line(`// generated from terraform resource schema`);
|
|
191
|
+
this.code.line();
|
|
192
|
+
if (resource.structsRequireSharding) {
|
|
193
|
+
if (resource.referencedTypes.length > 0) {
|
|
194
|
+
this.code.line(`import { ${resource.referencedTypes.join(", \n")}} from './${resource.structsFolderName}'`);
|
|
195
|
+
}
|
|
196
|
+
this.code.line(`export * from './${resource.structsFolderName}'`);
|
|
197
|
+
resource.importStatements.forEach((statement) => this.code.line(statement));
|
|
198
|
+
this.structEmitter.emitInterface(resource, resource.configStruct);
|
|
199
|
+
this.resourceEmitter.emit(resource);
|
|
200
|
+
this.code.closeFile(filePath);
|
|
201
|
+
this.structEmitter.emit(resource);
|
|
202
|
+
generatedFiles.push(resource.fileName);
|
|
203
|
+
generatedFiles.push(resource.structsFolderName);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
resource.importStatements.forEach((statement) => this.code.line(statement));
|
|
207
|
+
this.structEmitter.emit(resource);
|
|
208
|
+
this.resourceEmitter.emit(resource);
|
|
209
|
+
this.code.closeFile(filePath);
|
|
210
|
+
generatedFiles.push(resource.fileName);
|
|
211
|
+
}
|
|
212
|
+
return filePath;
|
|
213
|
+
}
|
|
214
|
+
emitFileHeader(resource) {
|
|
215
|
+
this.code.line(`// ${resource.linkToDocs}`);
|
|
216
|
+
this.code.line(`// generated from terraform resource schema`);
|
|
217
|
+
this.code.line();
|
|
218
|
+
resource.importStatements.forEach((statement) => this.code.line(statement));
|
|
219
|
+
this.code.line();
|
|
220
|
+
this.code.line("// Configuration");
|
|
221
|
+
this.code.line();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
exports.TerraformProviderGenerator = TerraformProviderGenerator;
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFFdkUsdURBQW1EO0FBQ25ELHVDQUEyRDtBQVEzRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixNQUE2QixFQUM3QixtQkFBMkIsRUFDbEIsRUFBRTtJQUNYLElBQUksTUFBTSxDQUFDLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQztJQUMvQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUVqRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLFdBQVc7Z0JBQ1gsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxD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SUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFsUUQsZ0VBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVBhcnNlciB9IGZyb20gXCIuL3Jlc291cmNlLXBhcnNlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VFbWl0dGVyLCBTdHJ1Y3RFbWl0dGVyIH0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5pbnRlcmZhY2UgUHJvdmlkZXJEYXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBpc01hdGNoaW5nID0gKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgdGVycmFmb3JtU2NoZW1hTmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICh0YXJnZXQuaXNNb2R1bGUpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBlbGVtZW50cyA9IHRlcnJhZm9ybVNjaGVtYU5hbWUuc3BsaXQoXCIvXCIpO1xuXG4gIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnNvdXJjZSA9PT0gdGVycmFmb3JtU2NoZW1hTmFtZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbaG9zdG5hbWUsIG5hbWVzcGFjZSwgcHJvdmlkZXJdID0gZWxlbWVudHM7XG5cbiAgICBpZiAoIWhvc3RuYW1lIHx8ICFuYW1lc3BhY2UgfHwgIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGhhbmRsZSAke3RlcnJhZm9ybVNjaGVtYU5hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGFyZ2V0LnNvdXJjZSBpcyBzZXQsIHRyeSB0byBtYXRjaCBpdFxuICAgIGlmICh0YXJnZXQuc291cmNlKSB7XG4gICAgICBjb25zdCB0YXJnZXRTb3VyY2UgPSB7XG4gICAgICAgIC8vIGRlZmF1bHRzXG4gICAgICAgIGhvc3RuYW1lOiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiLFxuICAgICAgICBuYW1lc3BhY2U6IFwiaGFzaGljb3JwXCIsXG4gICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICB9O1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudHMgPSB0YXJnZXQuc291cmNlLnNwbGl0KFwiL1wiKTtcbiAgICAgIHN3aXRjaCAodGFyZ2V0RWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTogLy8gb25seSBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOiAvLyBuYW1lc3BhY2UgYW5kIG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6IC8vIGhvc3RuYW1lLCBuYW1lc3BhY2UgYW5kIG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLmhvc3RuYW1lID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYGNhbid0IGhhbmRsZSAke3RhcmdldC5zb3VyY2V9LiBFeHBlY3RlZCBzdHJpbmcgd2l0aCAxLCAyIG9yIDMgZWxlbWVudHMgc2VwYXJhdGVkIGJ5ICcvJ2AsXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0U291cmNlLmhvc3RuYW1lID09PSBob3N0bmFtZSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLnJlc291cmNlRW1pdHRlciA9IG5ldyBSZXNvdXJjZUVtaXR0ZXIodGhpcy5jb2RlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIgPSBuZXcgU3RydWN0RW1pdHRlcih0aGlzLmNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm92aWRlckJ5Q29uc3RyYWludChcbiAgICBwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogRlFQTiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLmZpbmQoKGZxcG4pID0+XG4gICAgICBpc01hdGNoaW5nKHByb3ZpZGVyQ29uc3RyYWludCwgZnFwbiksXG4gICAgKSBhcyBGUVBOIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlKHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgY29uc3QgZnFwbiA9IHRoaXMuZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQocHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICBpZiAoIWZxcG4pIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIGNvbnN0cmFpbnQgZm9yICR7cHJvdmlkZXJDb25zdHJhaW50fSBpbiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgd2l0aCBjb25zdHJhaW50ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50LFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyVmVyc2lvbiA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3ZlcnNpb25zPy5bZnFwbl07XG4gICAgdGhpcy5lbWl0UHJvdmlkZXIoZnFwbiwgcHJvdmlkZXJWZXJzaW9uLCBwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIHRoaXMudmVyc2lvbnNbZnFwbl0gPSBwcm92aWRlclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVBbGwoKSB7XG4gICAgZm9yIChjb25zdCBmcXBuIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlKFxuICAgICAgICBuZXcgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQoXG4gICAgICAgICAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChmcXBuKSxcbiAgICAgICAgICBMQU5HVUFHRVNbMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlKG91dGRpcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFJlc291cmNlTW9kZWxzKFxuICAgIGZxcG46IEZRUE4sXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbFtdIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIucmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoZnFwbiwgdHlwZSwgcmVzb3VyY2UsIFwicmVzb3VyY2VcIiwgY29uc3RyYWludCksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgICAgZnFwbixcbiAgICAgICAgICBgZGF0YV8ke3R5cGV9YCxcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICBcImRhdGFfc291cmNlXCIsXG4gICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIChbXSBhcyBSZXNvdXJjZU1vZGVsW10pLmNvbmNhdCguLi5yZXNvdXJjZXMsIC4uLmRhdGFTb3VyY2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGFzc05hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVBhcnNlci5nZXRDbGFzc05hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UHJvdmlkZXIoXG4gICAgZnFwbjogRlFQTixcbiAgICBwcm92aWRlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKSB7XG4gICAgY29uc3QgbmFtZSA9IGNvbnN0cmFpbnQ/Lm5hbWVcbiAgICAgID8gKGNvbnN0cmFpbnQubmFtZSBhcyBQcm92aWRlck5hbWUpXG4gICAgICA6IHBhcnNlRlFQTihmcXBuKS5uYW1lO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcz8uW2ZxcG5dO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBmaW5kIHByb3ZpZGVyICcke2ZxcG59JyBpbiBzY2hlbWFgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLmJ1aWxkUmVzb3VyY2VNb2RlbHMoZnFwbiwgY29uc3RyYWludCkuZm9yRWFjaCgocmVzb3VyY2VNb2RlbCkgPT4ge1xuICAgICAgaWYgKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb25Db25zdHJhaW50ID0gY29uc3RyYWludC52ZXJzaW9uO1xuICAgICAgICByZXNvdXJjZU1vZGVsLnRlcnJhZm9ybVByb3ZpZGVyU291cmNlID0gY29uc3RyYWludC5zb3VyY2U7XG4gICAgICB9XG4gICAgICByZXNvdXJjZU1vZGVsLnByb3ZpZGVyVmVyc2lvbiA9IHByb3ZpZGVyVmVyc2lvbjtcblxuICAgICAgaWYgKHJlc291cmNlTW9kZWwuc3RydWN0c1JlcXVpcmVTaGFyZGluZykge1xuICAgICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlV2l0aENvbXBsZXhTdHJ1Y3QocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZShyZXNvdXJjZU1vZGVsKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXRSZXNvdXJjZVJlYWRtZShyZXNvdXJjZU1vZGVsKTtcbiAgICB9KTtcblxuICAgIGlmIChwcm92aWRlci5wcm92aWRlcikge1xuICAgICAgY29uc3QgcHJvdmlkZXJSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgIGZxcG4sXG4gICAgICAgIGBwcm92aWRlcmAsXG4gICAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgICBcInByb3ZpZGVyXCIsXG4gICAgICAgIGNvbnN0cmFpbnQsXG4gICAgICApO1xuICAgICAgaWYgKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS5wcm92aWRlclZlcnNpb25Db25zdHJhaW50ID0gY29uc3RyYWludC52ZXJzaW9uO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyU291cmNlID0gY29uc3RyYWludC5zb3VyY2U7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UudGVycmFmb3JtUHJvdmlkZXJOYW1lID0gY29uc3RyYWludC5uYW1lO1xuICAgICAgfVxuICAgICAgcHJvdmlkZXJSZXNvdXJjZS5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHByb3ZpZGVyUmVzb3VyY2UpKTtcbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHByb3ZpZGVyUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdEluZGV4RmlsZShuYW1lLCBmaWxlcyk7XG4gICAgdGhpcy5lbWl0TGF6eUluZGV4RmlsZShuYW1lLCBmaWxlcyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVJlYWRtZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7cmVzb3VyY2UubmFtZXNwYWNlRm9sZGVyUGF0aH0vUkVBRE1FLm1kYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAjIFxcYCR7cmVzb3VyY2UudGVycmFmb3JtVHlwZX1cXGBgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IHR5cGUgPSByZXNvdXJjZS5pc1Byb3ZpZGVyXG4gICAgICA/IHJlc291cmNlLnByb3ZpZGVyXG4gICAgICA6IHJlc291cmNlLnRlcnJhZm9ybVR5cGU7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgUmVmZXIgdG8gdGhlIFRlcnJhZm9ybSBSZWdpc3RyeSBmb3IgZG9jczogW1xcYCR7dHlwZX1cXGBdKCR7cmVzb3VyY2UubGlua1RvRG9jc30pLmAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEluZGV4RmlsZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9YDtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2ZvbGRlcn0vaW5kZXgudHNgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBnZW5lcmF0ZWQgYnkgY2RrdG4gZ2V0XCIpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGZpbGUucmVwbGFjZShgJHtmb2xkZXJ9L2AsIFwiXCIpLnJlcGxhY2UoXCIvaW5kZXgudHNcIiwgXCJcIik7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYGV4cG9ydCAqIGFzICR7dG9DYW1lbENhc2UoZGlyTmFtZSl9IGZyb20gJy4vJHtkaXJOYW1lfSc7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRMYXp5SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9sYXp5LWluZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJyR7dG9DYW1lbENhc2UoXG4gICAgICAgICAgZGlyTmFtZSxcbiAgICAgICAgKX0nLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWlyZSgnLi8ke2Rpck5hbWV9Jyk7IH0gfSk7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHN0cmluZyB7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKHJlc291cmNlLmZpbGVQYXRoKTtcbiAgICB0aGlzLmVtaXRGaWxlSGVhZGVyKHJlc291cmNlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG5cbiAgICByZXR1cm4gcmVzb3VyY2UuZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkRmlsZXMgPSBbXTtcblxuICAgIC8vIGRyb3AgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgZmlsZXBhdGhcbiAgICBjb25zdCBmaWxlUGF0aCA9IHJlc291cmNlLmZpbGVQYXRoO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgaWYgKHJlc291cmNlLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgIGlmIChyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgaW1wb3J0IHsgJHtyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMuam9pbihcIiwgXFxuXCIpfX0gZnJvbSAnLi8ke1xuICAgICAgICAgICAgcmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWVcbiAgICAgICAgICB9J2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcuLyR7cmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWV9J2ApO1xuXG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCByZXNvdXJjZS5jb25maWdTdHJ1Y3QpO1xuICAgICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG5cbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICAgIGdlbmVyYXRlZEZpbGVzLnB1c2gocmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlSGVhZGVyKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vICR7cmVzb3VyY2UubGlua1RvRG9jc31gKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYWApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCkpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBDb25maWd1cmF0aW9uXCIpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gIH1cbn1cbiJdfQ==
|