@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,90 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLHdDQUE4QztBQUM5QyxNQUFhLE1BQU07SUFDakIsWUFDa0IsSUFBWSxFQUNaLFVBQTRCLEVBQzVCLFVBQVUsS0FBSyxFQUNmLGNBQWMsS0FBSyxFQUM1QixlQUFlLEtBQUssRUFDWCxjQUFzQixFQUFFO1FBTHhCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDWCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUN2QyxDQUFDO0lBRUosSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ3BCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUMxRCxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixPQUFPLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDckQsQ0FBQztJQUVELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNkVBQTZFO1lBQ2xJLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTztRQUN0QixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsdUJBQXVCO1FBRW5DLElBQ0UsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNO1lBQzNCLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSztZQUMxQixJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssRUFDMUIsQ0FBQztZQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7WUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUNuQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBekdELHdCQXlHQztBQUVELE1BQWEsWUFBYSxTQUFRLE1BQU07SUFDdEMsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sdUNBQXVDLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBSkQsb0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi9hdHRyaWJ1dGUtbW9kZWxcIjtcbmltcG9ydCB7IGRvd25jYXNlRmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbFwiO1xuZXhwb3J0IGNsYXNzIFN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW10sXG4gICAgcHVibGljIHJlYWRvbmx5IGlzQ2xhc3MgPSBmYWxzZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNBbm9ueW1vdXMgPSBmYWxzZSxcbiAgICBwdWJsaWMgaXNTaW5nbGVJdGVtID0gZmFsc2UsXG4gICAgcHVibGljIHJlYWRvbmx5IG5lc3RpbmdNb2RlOiBzdHJpbmcgPSBcIlwiLFxuICApIHt9XG5cbiAgcHVibGljIGdldCBhc3NpZ25hYmxlQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVNb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUuaXNBc3NpZ25hYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3B0aW9uYWxBdHRyaWJ1dGVzKCk6IEF0dHJpYnV0ZU1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuZmlsdGVyKChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5vcHRpb25hbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFsbE9wdGlvbmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMuZmlsdGVyKFxuICAgICAgICAoYXR0cmlidXRlKSA9PiAhYXR0cmlidXRlLm9wdGlvbmFsICYmICFhdHRyaWJ1dGUuY29tcHV0ZWQsXG4gICAgICApLmxlbmd0aCA9PSAwXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXR0cmlidXRlVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSR7dGhpcy5hbGxPcHRpb25hbCA/IFwiID0ge31cIiA6IFwiXCJ9YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXNzaWduYWJsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNDbGFzcyB8fCB0aGlzLmFzc2lnbmFibGVBdHRyaWJ1dGVzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4dGVuZHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFwcGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMubmFtZSl9VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgcHVibGljIGdldCBoY2xNYXBwZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2Rvd25jYXNlRmlyc3QodGhpcy5uYW1lKX1Ub0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dHB1dFJlZmVyZW5jZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfU91dHB1dFJlZmVyZW5jZWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX1MaXN0YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFwTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TWFwYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFwTGlzdE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfU1hcExpc3RgO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0TWFwTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TGlzdE1hcGA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpc3RMaXN0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TGlzdExpc3RgO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuc29tZSgoYXR0KSA9PiBhdHQuaXNQcm92aWRlcik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlZmVyZW5jZWRUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0KSA9PiB7XG4gICAgICBjb25zdCBhdHRSZWZlcmVuY2VzID0gYXR0LmdldFJlZmVyZW5jZWRUeXBlcyhmYWxzZSk7IC8vIFRoaXMgbWF5IGJlIGEgY29uZmlnIHN0cnVjdCwgYnV0IHN0aWxsIG5lZWQgdGhlIHJlZmVyZW5jZXMgaW4gdGhpcyBjb250ZXh0XG4gICAgICBpZiAoYXR0UmVmZXJlbmNlcykge1xuICAgICAgICB0eXBlcy5wdXNoKC4uLmF0dFJlZmVyZW5jZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBleHBvcnRDb3VudCgpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDE7IC8vIHNlbGZcbiAgICBjb3VudCArPSAxOyAvLyB0b1RlcnJhZm9ybSBmdW5jdGlvblxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0XCIgfHxcbiAgICAgIHRoaXMubmVzdGluZ01vZGUgPT09IFwic2V0XCIgfHxcbiAgICAgIHRoaXMubmVzdGluZ01vZGUgPT09IFwibWFwXCJcbiAgICApIHtcbiAgICAgIGNvdW50ICs9IDE7IC8vIG91dHB1dCByZWZlcmVuY2VcblxuICAgICAgaWYgKCF0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgICBjb3VudCArPSAxOyAvLyBjb21wbGV4IGNvbGxlY3Rpb25cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmZpZ1N0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gIHB1YmxpYyBnZXQgZXh0ZW5kcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgIGV4dGVuZHMgY2RrdG4uVGVycmFmb3JtTWV0YUFyZ3VtZW50c2A7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,184 +0,0 @@
|
|
|
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, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vZHVsZS1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBbUQ7QUFDbkQscUNBQTBDO0FBQzFDLDZEQUF3RDtBQUd4RCxNQUFhLGVBQWU7SUFDMUIsWUFDbUIsSUFBZSxFQUNmLE9BQXNDO1FBRHRDLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUV2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFMUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFtQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXpCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUUxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLFVBQVUsR0FBRyxHQUFHLFFBQVEsUUFBUSxDQUFDO1FBRXZDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNqQixvQkFBb0IsVUFBVSxvQ0FBb0MsQ0FDbkUsQ0FBQztRQUNGLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBRTFFLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWdCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysb0hBQW9ILENBQ3JILENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRWQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osWUFBWSx1QkFBYyxDQUFDLFVBQVUsQ0FDbkMsSUFBQSx1QkFBVyxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDeEIsR0FBRyxRQUFRLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUMxQyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdkIsbUVBQW1FO1FBQ25FLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsbUNBQW1DO1FBQ25DLHlFQUF5RTtRQUN6RSx3Q0FBd0M7UUFDeEMsdUNBQXVDO1FBQ3ZDLDJEQUEyRDtRQUMzRCxlQUFlO1FBQ2YsdUNBQXVDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsSUFBSSxZQUFZLENBQUM7UUFDakIsb0ZBQW9GO1FBQ3BGLDhFQUE4RTtRQUM5RSxnSEFBZ0g7UUFDaEgsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDbEMsV0FBVyxFQUNYLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxRQUFRLGFBQWEsQ0FDNUMsQ0FBQztZQUNGLHVEQUF1RDtZQUN2RCxLQUFLO1lBQ0wsZ0VBQWdFO1FBQ2xFLENBQUM7YUFBTSxDQUFDO1lBQ04sbURBQW1EO1lBQ25ELFlBQVksR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNsRSxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBZ0IsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLFFBQVEsOEJBQThCLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsbUJBQW1CO1lBQ2pCLENBQUMsQ0FBQyxhQUFhLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLDRFQUE0RSxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUNqSCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLFFBQVEsMEJBQTBCLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRXZFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDREQUE0RCxVQUFVLEdBQUcsV0FBVyxLQUFLLENBQzFGLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxTQUFTLEdBQUcsdUJBQWMsQ0FBQyxVQUFVLENBQUMsSUFBQSx1QkFBVyxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsU0FBUyxhQUFhLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTztRQUU3QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFNBQVMsR0FBRyx1QkFBYyxDQUFDLFVBQVUsQ0FBQyxJQUFBLHVCQUFXLEVBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckUsTUFBTSxTQUFTLEdBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLFNBQVMsT0FBTyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixLQUFLLENBQUMsSUFBSSxTQUFTLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLFNBQVMsV0FBVyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFBLHVCQUFXLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsVUFBVSxVQUFVLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ2pCLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUF2S0QsMENBdUtDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM3QixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNwQixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbkIsT0FBTywyQkFBMkIsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtJQUNwQyxNQUFNLE9BQU8sR0FBRywyQ0FBMkMsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWxDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdEMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNyQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbkIsT0FBTyxvQkFBb0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIsIHRvQ2FtZWxDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IHNhbml0aXplZENvbW1lbnQgfSBmcm9tIFwiLi9zYW5pdGl6ZWQtY29tbWVudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlR2VuZXJhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRzOiBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXRbXSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRoaXMudGFyZ2V0cykge1xuICAgICAgdGhpcy5lbWl0U3VibW9kdWxlKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3VibW9kdWxlKHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KSB7XG4gICAgY29uc3Qgc3BlYyA9IHRhcmdldC5zcGVjO1xuXG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc3BlYyBmb3IgJHt0YXJnZXQuZnFufWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZSh0YXJnZXQuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRgKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gJHt0YXJnZXQuc291cmNlfWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgaW1wb3J0IHsgVGVycmFmb3JtTW9kdWxlLCBUZXJyYWZvcm1Nb2R1bGVVc2VyQ29uZmlnIH0gZnJvbSAnY2RrdG4nO2AsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7YCk7XG5cbiAgICBjb25zdCBiYXNlTmFtZSA9IHRoaXMuY29kZS50b1Bhc2NhbENhc2UodGFyZ2V0Lm5hbWUucmVwbGFjZSgvWy0vLl0vZywgXCJfXCIpKTtcbiAgICBjb25zdCBjb25maWdUeXBlID0gYCR7YmFzZU5hbWV9Q29uZmlnYDtcblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgZXhwb3J0IGludGVyZmFjZSAke2NvbmZpZ1R5cGV9IGV4dGVuZHMgVGVycmFmb3JtTW9kdWxlVXNlckNvbmZpZ2AsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHNwZWMuaW5wdXRzKSB7XG4gICAgICBjb25zdCBvcHRpb25hbCA9IGlucHV0LnJlcXVpcmVkICYmIGlucHV0LmRlZmF1bHQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIj9cIjtcblxuICAgICAgY29uc3QgY29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICAgIGlmIChpbnB1dC5kZXNjcmlwdGlvbikge1xuICAgICAgICBjb21tZW50LmxpbmUoaW5wdXQuZGVzY3JpcHRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0LmRlZmF1bHQpIHtcbiAgICAgICAgY29tbWVudC5saW5lKGlucHV0LmRlZmF1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0LnR5cGUuaW5jbHVkZXMoXCJtYXAoXCIpKSB7XG4gICAgICAgIGNvbW1lbnQubGluZShcbiAgICAgICAgICBgVGhlIHByb3BlcnR5IHR5cGUgY29udGFpbnMgYSBtYXAsIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nLCBwbGVhc2Ugc2VlIHtAbGluayBjZGsudGYvbW9kdWxlLW1hcC1pbnB1dHMgdGhlIGRvY3N9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbW1lbnQuZW5kKCk7XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcmVhZG9ubHkgJHtBdHRyaWJ1dGVNb2RlbC5lc2NhcGVOYW1lKFxuICAgICAgICAgIHRvQ2FtZWxDYXNlKGlucHV0Lm5hbWUpLFxuICAgICAgICApfSR7b3B0aW9uYWx9OiAke3BhcnNlVHlwZShpbnB1dC50eXBlKX07YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICAvLyBBZGQgYSBsaW5rIHRvIHRoZSBUZXJyYWZvcm0gUmVnaXN0cnkgaWYgaXQgaXMgc291cmNlZCBmcm9tIHRoZXJlXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvbW9kdWxlcy9zb3VyY2VzXG4gICAgLy8gUmVnaXN0cnkgbW9kdWxlcyBhcmUgcmVmZXJyZWQgdG8gYXMgPE5BTUVTUEFDRT4vPE5BTUU+LzxQUk9WSURFUj5cbiAgICAvLyBPdGhlciBzb3VyY2VzIGNvbnRhaW4gZG90cywgZS5nLlxuICAgIC8vIGFwcC50ZXJyYWZvcm0uaW8vZXhhbXBsZS1jb3JwL2s4cy1jbHVzdGVyL2F6dXJlcm0gKHByaXZhdGUgcmVnaXN0cmllcylcbiAgICAvLyBnaXRodWIuY29tL2hhc2hpY29ycC9leGFtcGxlIChHaXRodWIpXG4gICAgLy8gZ2l0QGdpdGh1Yi5jb206aGFzaGljb3JwL2V4YW1wbGUuZ2l0XG4gICAgLy8gYml0YnVja2V0Lm9yZy9oYXNoaWNvcnAvdGVycmFmb3JtLWNvbnN1bC1hd3MgKEJpdGJ1Y2tldClcbiAgICAvLyAuLi4gYW5kIG1vcmVcbiAgICAvLyAuLi9tb2R1bGUgYW5kIC4vbW9kdWxlIChsb2NhbCBwYXRocylcbiAgICBjb25zdCBpc05vblJlZ2lzdHJ5TW9kdWxlID0gdGFyZ2V0LnNvdXJjZS5pbmNsdWRlcyhcIi5cIik7XG4gICAgbGV0IHJlZ2lzdHJ5UGF0aDtcbiAgICAvLyBTdWJtb2R1bGVzIGFsc28gZXhpc3QgKGUuZy4gdGVycmFmb3JtLWF3cy1tb2R1bGVzL3ZwYy9hd3MvL21vZHVsZXMvdnBjLWVuZHBvaW50cylcbiAgICAvLyBBbmQgbGlua2luZyBkaXJlY3RseSB0byB0aGVtIGluIHRoZSBSZWdpc3RyeSByZXF1aXJlcyBpbmNsdWRpbmcgdGhlIHZlcnNpb25cbiAgICAvLyBsaWtlIGUuZy4gaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vbW9kdWxlcy90ZXJyYWZvcm0tYXdzLW1vZHVsZXMvdnBjL2F3cy9sYXRlc3Qvc3VibW9kdWxlcy92cGMtZW5kcG9pbnRzXG4gICAgaWYgKHRhcmdldC5zb3VyY2UuaW5jbHVkZXMoXCIvL1wiKSkge1xuICAgICAgcmVnaXN0cnlQYXRoID0gdGFyZ2V0LnNvdXJjZS5yZXBsYWNlKFxuICAgICAgICBcIi8vbW9kdWxlc1wiLFxuICAgICAgICBgLyR7dGFyZ2V0LnZlcnNpb24gfHwgXCJsYXRlc3RcIn0vc3VibW9kdWxlc2AsXG4gICAgICApO1xuICAgICAgLy8gdGVycmFmb3JtLWF3cy1tb2R1bGVzL3ZwYy9hd3MvL21vZHVsZXMvdnBjLWVuZHBvaW50c1xuICAgICAgLy8gLT5cbiAgICAgIC8vIHRlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzL2xhdGVzdC9zdWJtb2R1bGVzL3ZwYy1lbmRwb2ludHNcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm90IHN1Ym1vZHVsZSBzcGVjaWZpZWQsIGp1c3QgYXBwZW5kIHRoZSB2ZXJzaW9uXG4gICAgICByZWdpc3RyeVBhdGggPSBgJHt0YXJnZXQuc291cmNlfS8ke3RhcmdldC52ZXJzaW9uIHx8IFwibGF0ZXN0XCJ9YDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGNvbW1lbnQubGluZShgRGVmaW5lcyBhbiAke2Jhc2VOYW1lfSBiYXNlZCBvbiBhIFRlcnJhZm9ybSBtb2R1bGVgKTtcbiAgICBjb21tZW50LmxpbmUoYGApO1xuICAgIGNvbW1lbnQubGluZShcbiAgICAgIGlzTm9uUmVnaXN0cnlNb2R1bGVcbiAgICAgICAgPyBgU291cmNlIGF0ICR7dGFyZ2V0LnNvdXJjZX1gXG4gICAgICAgIDogYERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vbW9kdWxlcy8ke3JlZ2lzdHJ5UGF0aH0gJHt0YXJnZXQuc291cmNlfX1gLFxuICAgICk7XG4gICAgY29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBleHBvcnQgY2xhc3MgJHtiYXNlTmFtZX0gZXh0ZW5kcyBUZXJyYWZvcm1Nb2R1bGVgKTtcblxuICAgIHRoaXMuY29kZS5saW5lKGBwcml2YXRlIHJlYWRvbmx5IGlucHV0czogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gPSB7IH1gKTtcblxuICAgIGNvbnN0IGFsbE9wdGlvbmFsID0gc3BlYy5pbnB1dHMuZmluZCgoeCkgPT4geC5yZXF1aXJlZCkgPyBcIlwiIDogXCIgPSB7fVwiO1xuXG4gICAgdGhpcy5jb2RlLm9wZW4oXG4gICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogJHtjb25maWdUeXBlfSR7YWxsT3B0aW9uYWx9KSB7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5vcGVuKGBzdXBlcihzY29wZSwgaWQsIHtgKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi4uLmNvbmZpZyxcIik7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHNvdXJjZTogJyR7dGFyZ2V0LnNvdXJjZX0nLGApO1xuICAgIGlmICh0YXJnZXQudmVyc2lvbikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHZlcnNpb246ICcke3RhcmdldC52ZXJzaW9ufScsYCk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZShgfSk7YCk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHNwZWMuaW5wdXRzKSB7XG4gICAgICBjb25zdCBpbnB1dE5hbWUgPSBBdHRyaWJ1dGVNb2RlbC5lc2NhcGVOYW1lKHRvQ2FtZWxDYXNlKGlucHV0Lm5hbWUpKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGB0aGlzLiR7aW5wdXROYW1lfSA9IGNvbmZpZy4ke2lucHV0TmFtZX07YCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlKGB9YCk7IC8vIGN0b3JcblxuICAgIGZvciAoY29uc3QgaW5wdXQgb2Ygc3BlYy5pbnB1dHMpIHtcbiAgICAgIGNvbnN0IGlucHV0TmFtZSA9IEF0dHJpYnV0ZU1vZGVsLmVzY2FwZU5hbWUodG9DYW1lbENhc2UoaW5wdXQubmFtZSkpO1xuICAgICAgY29uc3QgaW5wdXRUeXBlID1cbiAgICAgICAgcGFyc2VUeXBlKGlucHV0LnR5cGUpICtcbiAgICAgICAgKGlucHV0LnJlcXVpcmVkICYmIGlucHV0LmRlZmF1bHQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIiB8IHVuZGVmaW5lZFwiKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBnZXQgJHtpbnB1dE5hbWV9KCk6ICR7aW5wdXRUeXBlfWApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLmlucHV0c1snJHtpbnB1dC5uYW1lfSddIGFzICR7aW5wdXRUeXBlfTtgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBzZXQgJHtpbnB1dE5hbWV9KHZhbHVlOiAke2lucHV0VHlwZX0pYCk7XG4gICAgICB0aGlzLmNvZGUubGluZShgdGhpcy5pbnB1dHNbJyR7aW5wdXQubmFtZX0nXSA9IHZhbHVlO2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBzcGVjLm91dHB1dHMpIHtcbiAgICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b0NhbWVsQ2FzZShvdXRwdXQubmFtZSk7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwdWJsaWMgZ2V0ICR7b3V0cHV0TmFtZX1PdXRwdXQoKWApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLmdldFN0cmluZygnJHtvdXRwdXQubmFtZX0nKWApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKWApO1xuICAgIHRoaXMuY29kZS5saW5lKGByZXR1cm4gdGhpcy5pbnB1dHM7YCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5wdXRzKWApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgLmZpbHRlcigoWywgdmFsXSkgPT4gdmFsICE9PSB1bmRlZmluZWQpYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAubWFwKChba2V5LCB2YWxdKSA9PiB7YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgIHJldHVybiBbYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgICAga2V5LGApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICAgIHtgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgICAgIHZhbHVlOiB2YWwsYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgICAgICB0eXBlOiBcImFueVwiLGApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICAgIH0sYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgIF07YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICB9KWApO1xuICAgIHRoaXMuY29kZS5saW5lKGApO2ApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpOyAvLyBjbGFzc1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUodGFyZ2V0LmZpbGVOYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGUodHlwZTogc3RyaW5nKSB7XG4gIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJib29sXCIpIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwibGlzdFwiKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJtYXBcIikge1xuICAgIHJldHVybiBcInsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cIjtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJ0dXBsZVwiKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJhbnlcIikge1xuICAgIHJldHVybiBcImFueVwiO1xuICB9XG5cbiAgY29uc3QgY29tcGxleFR5cGUgPSBwYXJzZUNvbXBsZXhUeXBlKHR5cGUpO1xuICBpZiAoY29tcGxleFR5cGUpIHtcbiAgICByZXR1cm4gY29tcGxleFR5cGU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZSAke3R5cGV9YCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tcGxleFR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29tcGxleCA9IC9eKG9iamVjdHxsaXN0fG1hcHxzZXR8dHVwbGUpXFwoKFtcXHNcXFNdKylcXCkvO1xuICBjb25zdCBtYXRjaCA9IGNvbXBsZXguZXhlYyh0eXBlKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBbLCBraW5kLCBpbm5lclR5cGVdID0gbWF0Y2g7XG5cbiAgaWYgKGtpbmQgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gYGFueWA7XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJsaXN0XCIgfHwga2luZCA9PT0gXCJzZXRcIikge1xuICAgIHJldHVybiBgJHtwYXJzZVR5cGUoaW5uZXJUeXBlKX1bXWA7XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJ0dXBsZVwiKSB7XG4gICAgcmV0dXJuIGBhbnlbXWA7XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJtYXBcIikge1xuICAgIHJldHVybiBgeyBba2V5OiBzdHJpbmddOiAke3BhcnNlVHlwZShpbm5lclR5cGUpfSB9YDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBraW5kICR7a2luZH1gKTtcbn1cbiJdfQ==
|
|
@@ -1,225 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFFdkUsdURBQW1EO0FBQ25ELHVDQUEyRDtBQVEzRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixNQUE2QixFQUM3QixtQkFBMkIsRUFDbEIsRUFBRTtJQUNYLElBQUksTUFBTSxDQUFDLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQztJQUMvQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUVqRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLFdBQVc7Z0JBQ1gsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELFFB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QUMsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFsUUQsZ0VBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVBhcnNlciB9IGZyb20gXCIuL3Jlc291cmNlLXBhcnNlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VFbWl0dGVyLCBTdHJ1Y3RFbWl0dGVyIH0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5pbnRlcmZhY2UgUHJvdmlkZXJEYXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBpc01hdGNoaW5nID0gKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgdGVycmFmb3JtU2NoZW1hTmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICh0YXJnZXQuaXNNb2R1bGUpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBlbGVtZW50cyA9IHRlcnJhZm9ybVNjaGVtYU5hbWUuc3BsaXQoXCIvXCIpO1xuXG4gIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnNvdXJjZSA9PT0gdGVycmFmb3JtU2NoZW1hTmFtZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbaG9zdG5hbWUsIG5hbWVzcGFjZSwgcHJvdmlkZXJdID0gZWxlbWVudHM7XG5cbiAgICBpZiAoIWhvc3RuYW1lIHx8ICFuYW1lc3BhY2UgfHwgIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGhhbmRsZSAke3RlcnJhZm9ybVNjaGVtYU5hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGFyZ2V0LnNvdXJjZSBpcyBzZXQsIHRyeSB0byBtYXRjaCBpdFxuICAgIGlmICh0YXJnZXQuc291cmNlKSB7XG4gICAgICBjb25zdCB0YXJnZXRTb3VyY2UgPSB7XG4gICAgICAgIC8vIGRlZmF1bHRzXG4gICAgICAgIGhvc3RuYW1lOiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiLFxuICAgICAgICBuYW1lc3BhY2U6IFwiaGFzaGljb3JwXCIsXG4gICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICB9O1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudHMgPSB0YXJnZXQuc291cmNlLnNwbGl0KFwiL1wiKTtcbiAgICAgIHN3aXRjaCAodGFyZ2V0RWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTogLy8gb25seSBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOiAvLyBuYW1lc3BhY2UgYW5kIG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6IC8vIGhvc3RuYW1lLCBuYW1lc3BhY2UgYW5kIG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLmhvc3RuYW1lID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYGNhbid0IGhhbmRsZSAke3RhcmdldC5zb3VyY2V9LiBFeHBlY3RlZCBzdHJpbmcgd2l0aCAxLCAyIG9yIDMgZWxlbWVudHMgc2VwYXJhdGVkIGJ5ICcvJ2AsXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0U291cmNlLmhvc3RuYW1lID09PSBob3N0bmFtZSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLnJlc291cmNlRW1pdHRlciA9IG5ldyBSZXNvdXJjZUVtaXR0ZXIodGhpcy5jb2RlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIgPSBuZXcgU3RydWN0RW1pdHRlcih0aGlzLmNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm92aWRlckJ5Q29uc3RyYWludChcbiAgICBwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogRlFQTiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLmZpbmQoKGZxcG4pID0+XG4gICAgICBpc01hdGNoaW5nKHByb3ZpZGVyQ29uc3RyYWludCwgZnFwbiksXG4gICAgKSBhcyBGUVBOIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlKHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgY29uc3QgZnFwbiA9IHRoaXMuZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQocHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICBpZiAoIWZxcG4pIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIGNvbnN0cmFpbnQgZm9yICR7cHJvdmlkZXJDb25zdHJhaW50fSBpbiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgd2l0aCBjb25zdHJhaW50ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50LFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyVmVyc2lvbiA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3ZlcnNpb25zPy5bZnFwbl07XG4gICAgdGhpcy5lbWl0UHJvdmlkZXIoZnFwbiwgcHJvdmlkZXJWZXJzaW9uLCBwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIHRoaXMudmVyc2lvbnNbZnFwbl0gPSBwcm92aWRlclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVBbGwoKSB7XG4gICAgZm9yIChjb25zdCBmcXBuIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlKFxuICAgICAgICBuZXcgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQoXG4gICAgICAgICAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChmcXBuKSxcbiAgICAgICAgICBMQU5HVUFHRVNbMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlKG91dGRpcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFJlc291cmNlTW9kZWxzKFxuICAgIGZxcG46IEZRUE4sXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbFtdIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIucmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoZnFwbiwgdHlwZSwgcmVzb3VyY2UsIFwicmVzb3VyY2VcIiwgY29uc3RyYWludCksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgICAgZnFwbixcbiAgICAgICAgICBgZGF0YV8ke3R5cGV9YCxcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICBcImRhdGFfc291cmNlXCIsXG4gICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIChbXSBhcyBSZXNvdXJjZU1vZGVsW10pLmNvbmNhdCguLi5yZXNvdXJjZXMsIC4uLmRhdGFTb3VyY2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGFzc05hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVBhcnNlci5nZXRDbGFzc05hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UHJvdmlkZXIoXG4gICAgZnFwbjogRlFQTixcbiAgICBwcm92aWRlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKSB7XG4gICAgY29uc3QgbmFtZSA9IGNvbnN0cmFpbnQ/Lm5hbWVcbiAgICAgID8gKGNvbnN0cmFpbnQubmFtZSBhcyBQcm92aWRlck5hbWUpXG4gICAgICA6IHBhcnNlRlFQTihmcXBuKS5uYW1lO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcz8uW2ZxcG5dO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBmaW5kIHByb3ZpZGVyICcke2ZxcG59JyBpbiBzY2hlbWFgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLmJ1aWxkUmVzb3VyY2VNb2RlbHMoZnFwbiwgY29uc3RyYWludCkuZm9yRWFjaCgocmVzb3VyY2VNb2RlbCkgPT4ge1xuICAgICAgaWYgKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb25Db25zdHJhaW50ID0gY29uc3RyYWludC52ZXJzaW9uO1xuICAgICAgICByZXNvdXJjZU1vZGVsLnRlcnJhZm9ybVByb3ZpZGVyU291cmNlID0gY29uc3RyYWludC5zb3VyY2U7XG4gICAgICB9XG4gICAgICByZXNvdXJjZU1vZGVsLnByb3ZpZGVyVmVyc2lvbiA9IHByb3ZpZGVyVmVyc2lvbjtcblxuICAgICAgaWYgKHJlc291cmNlTW9kZWwuc3RydWN0c1JlcXVpcmVTaGFyZGluZykge1xuICAgICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlV2l0aENvbXBsZXhTdHJ1Y3QocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZShyZXNvdXJjZU1vZGVsKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXRSZXNvdXJjZVJlYWRtZShyZXNvdXJjZU1vZGVsKTtcbiAgICB9KTtcblxuICAgIGlmIChwcm92aWRlci5wcm92aWRlcikge1xuICAgICAgY29uc3QgcHJvdmlkZXJSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgIGZxcG4sXG4gICAgICAgIGBwcm92aWRlcmAsXG4gICAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgICBcInByb3ZpZGVyXCIsXG4gICAgICAgIGNvbnN0cmFpbnQsXG4gICAgICApO1xuICAgICAgaWYgKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS5wcm92aWRlclZlcnNpb25Db25zdHJhaW50ID0gY29uc3RyYWludC52ZXJzaW9uO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyU291cmNlID0gY29uc3RyYWludC5zb3VyY2U7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UudGVycmFmb3JtUHJvdmlkZXJOYW1lID0gY29uc3RyYWludC5uYW1lO1xuICAgICAgfVxuICAgICAgcHJvdmlkZXJSZXNvdXJjZS5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHByb3ZpZGVyUmVzb3VyY2UpKTtcbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHByb3ZpZGVyUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdEluZGV4RmlsZShuYW1lLCBmaWxlcyk7XG4gICAgdGhpcy5lbWl0TGF6eUluZGV4RmlsZShuYW1lLCBmaWxlcyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVJlYWRtZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7cmVzb3VyY2UubmFtZXNwYWNlRm9sZGVyUGF0aH0vUkVBRE1FLm1kYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAjIFxcYCR7cmVzb3VyY2UudGVycmFmb3JtVHlwZX1cXGBgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IHR5cGUgPSByZXNvdXJjZS5pc1Byb3ZpZGVyXG4gICAgICA/IHJlc291cmNlLnByb3ZpZGVyXG4gICAgICA6IHJlc291cmNlLnRlcnJhZm9ybVR5cGU7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgUmVmZXIgdG8gdGhlIFRlcnJhZm9ybSBSZWdpc3RyeSBmb3IgZG9jczogW1xcYCR7dHlwZX1cXGBdKCR7cmVzb3VyY2UubGlua1RvRG9jc30pLmAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEluZGV4RmlsZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9YDtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2ZvbGRlcn0vaW5kZXgudHNgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBnZW5lcmF0ZWQgYnkgY2RrdG4gZ2V0XCIpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGZpbGUucmVwbGFjZShgJHtmb2xkZXJ9L2AsIFwiXCIpLnJlcGxhY2UoXCIvaW5kZXgudHNcIiwgXCJcIik7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYGV4cG9ydCAqIGFzICR7dG9DYW1lbENhc2UoZGlyTmFtZSl9IGZyb20gJy4vJHtkaXJOYW1lfSc7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRMYXp5SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9sYXp5LWluZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJyR7dG9DYW1lbENhc2UoXG4gICAgICAgICAgZGlyTmFtZSxcbiAgICAgICAgKX0nLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWlyZSgnLi8ke2Rpck5hbWV9Jyk7IH0gfSk7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHN0cmluZyB7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKHJlc291cmNlLmZpbGVQYXRoKTtcbiAgICB0aGlzLmVtaXRGaWxlSGVhZGVyKHJlc291cmNlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG5cbiAgICByZXR1cm4gcmVzb3VyY2UuZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkRmlsZXMgPSBbXTtcblxuICAgIC8vIGRyb3AgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgZmlsZXBhdGhcbiAgICBjb25zdCBmaWxlUGF0aCA9IHJlc291cmNlLmZpbGVQYXRoO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgaWYgKHJlc291cmNlLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgIGlmIChyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgaW1wb3J0IHsgJHtyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMuam9pbihcIiwgXFxuXCIpfX0gZnJvbSAnLi8ke1xuICAgICAgICAgICAgcmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWVcbiAgICAgICAgICB9J2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcuLyR7cmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWV9J2ApO1xuXG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCByZXNvdXJjZS5jb25maWdTdHJ1Y3QpO1xuICAgICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG5cbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICAgIGdlbmVyYXRlZEZpbGVzLnB1c2gocmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlSGVhZGVyKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vICR7cmVzb3VyY2UubGlua1RvRG9jc31gKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYWApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCkpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBDb25maWd1cmF0aW9uXCIpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gIH1cbn1cbiJdfQ==
|