@cdktn/provider-generator 0.23.0-pre.7 → 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.
Files changed (195) hide show
  1. package/ambient.d.ts +0 -1
  2. package/{lib → build}/__tests__/edge-provider-schema/builder.d.ts +1 -0
  3. package/build/__tests__/edge-provider-schema/builder.js +106 -0
  4. package/build/__tests__/edge-provider-schema/cli.d.ts +2 -0
  5. package/build/__tests__/edge-provider-schema/cli.js +67 -0
  6. package/{lib → build}/__tests__/edge-provider-schema/index.d.ts +1 -0
  7. package/build/__tests__/edge-provider-schema/index.js +154 -0
  8. package/build/__tests__/edge-provider-schema.test.d.ts +2 -0
  9. package/build/__tests__/edge-provider-schema.test.js +46 -0
  10. package/build/__tests__/provider.test.d.ts +2 -0
  11. package/build/__tests__/provider.test.js +158 -0
  12. package/build/get/__tests__/constructs-maker.test.d.ts +2 -0
  13. package/build/get/__tests__/constructs-maker.test.js +113 -0
  14. package/build/get/__tests__/generator/complex-computed-types.test.d.ts +2 -0
  15. package/build/get/__tests__/generator/complex-computed-types.test.js +42 -0
  16. package/build/get/__tests__/generator/deep-nested-attributes.test.d.ts +2 -0
  17. package/build/get/__tests__/generator/deep-nested-attributes.test.js +50 -0
  18. package/build/get/__tests__/generator/description-escaping.test.d.ts +2 -0
  19. package/build/get/__tests__/generator/description-escaping.test.js +65 -0
  20. package/build/get/__tests__/generator/empty-provider-resources.test.d.ts +2 -0
  21. package/build/get/__tests__/generator/empty-provider-resources.test.js +40 -0
  22. package/build/get/__tests__/generator/export-sharding.test.d.ts +2 -0
  23. package/build/get/__tests__/generator/export-sharding.test.js +82 -0
  24. package/build/get/__tests__/generator/module-generator.test.d.ts +2 -0
  25. package/build/get/__tests__/generator/module-generator.test.js +476 -0
  26. package/build/get/__tests__/generator/nested-types.test.d.ts +2 -0
  27. package/build/get/__tests__/generator/nested-types.test.js +51 -0
  28. package/build/get/__tests__/generator/provider.test.d.ts +2 -0
  29. package/build/get/__tests__/generator/provider.test.js +51 -0
  30. package/build/get/__tests__/generator/resource-types.test.d.ts +2 -0
  31. package/build/get/__tests__/generator/resource-types.test.js +78 -0
  32. package/build/get/__tests__/generator/skipped-attributes.test.d.ts +2 -0
  33. package/build/get/__tests__/generator/skipped-attributes.test.js +55 -0
  34. package/build/get/__tests__/generator/types.test.d.ts +2 -0
  35. package/build/get/__tests__/generator/types.test.js +289 -0
  36. package/build/get/__tests__/generator/versions-file.test.d.ts +2 -0
  37. package/build/get/__tests__/generator/versions-file.test.js +74 -0
  38. package/{lib → build}/get/__tests__/util.d.ts +1 -0
  39. package/build/get/__tests__/util.js +59 -0
  40. package/{lib → build}/get/constructs-maker.d.ts +2 -1
  41. package/{lib → build}/get/constructs-maker.js +5 -2
  42. package/{lib → build}/get/generator/custom-defaults.d.ts +1 -0
  43. package/build/get/generator/custom-defaults.js +403 -0
  44. package/{lib → build}/get/generator/emitter/attributes-emitter.d.ts +1 -0
  45. package/build/get/generator/emitter/attributes-emitter.js +161 -0
  46. package/{lib → build}/get/generator/emitter/index.d.ts +1 -0
  47. package/{lib → build}/get/generator/emitter/index.js +1 -1
  48. package/{lib → build}/get/generator/emitter/resource-emitter.d.ts +1 -0
  49. package/build/get/generator/emitter/resource-emitter.js +147 -0
  50. package/{lib → build}/get/generator/emitter/struct-emitter.d.ts +1 -0
  51. package/build/get/generator/emitter/struct-emitter.js +500 -0
  52. package/{lib → build}/get/generator/loop-detection.d.ts +1 -0
  53. package/build/get/generator/loop-detection.js +56 -0
  54. package/{lib → build}/get/generator/models/attribute-model.d.ts +1 -0
  55. package/build/get/generator/models/attribute-model.js +160 -0
  56. package/{lib → build}/get/generator/models/attribute-type-model.d.ts +1 -0
  57. package/build/get/generator/models/attribute-type-model.js +376 -0
  58. package/{lib → build}/get/generator/models/index.d.ts +1 -0
  59. package/{lib → build}/get/generator/models/index.js +1 -1
  60. package/{lib → build}/get/generator/models/resource-model.d.ts +1 -0
  61. package/build/get/generator/models/resource-model.js +106 -0
  62. package/{lib → build}/get/generator/models/scope.d.ts +1 -0
  63. package/build/get/generator/models/scope.js +36 -0
  64. package/{lib → build}/get/generator/models/struct.d.ts +1 -0
  65. package/build/get/generator/models/struct.js +90 -0
  66. package/{lib → build}/get/generator/module-generator.d.ts +1 -0
  67. package/build/get/generator/module-generator.js +184 -0
  68. package/{lib → build}/get/generator/provider-generator.d.ts +1 -0
  69. package/build/get/generator/provider-generator.js +225 -0
  70. package/{lib → build}/get/generator/resource-parser.d.ts +1 -0
  71. package/build/get/generator/resource-parser.js +497 -0
  72. package/{lib → build}/get/generator/sanitized-comments.d.ts +1 -0
  73. package/build/get/generator/sanitized-comments.js +44 -0
  74. package/{lib → build}/get/generator/skipped-attributes.d.ts +1 -0
  75. package/build/get/generator/skipped-attributes.js +29 -0
  76. package/{lib → build}/index.d.ts +1 -0
  77. package/{lib → build}/index.js +1 -1
  78. package/{lib → build}/util.d.ts +1 -0
  79. package/build/util.js +30 -0
  80. package/package.json +13 -15
  81. package/{lib → src}/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +1 -1
  82. package/{lib → src}/__tests__/__snapshots__/provider.test.ts.snap +14953 -890
  83. package/{lib → src}/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +1 -1
  84. package/{lib → src}/get/__tests__/generator/__snapshots__/description-escaping.test.ts.snap +1 -1
  85. package/{lib → src}/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +1 -1
  86. package/{lib → src}/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +10 -10
  87. package/{lib → src}/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +1 -1
  88. package/{lib → src}/get/__tests__/generator/__snapshots__/provider.test.ts.snap +1 -1
  89. package/{lib → src}/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +1 -1
  90. package/{lib → src}/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +1 -1
  91. package/{lib → src}/get/__tests__/generator/__snapshots__/types.test.ts.snap +92 -1
  92. package/src/get/__tests__/generator/fixtures/map-of-map-of-string.test.fixture.json +27 -0
  93. package/tsconfig.json +6 -3
  94. package/lib/__tests__/edge-provider-schema/builder.js +0 -106
  95. package/lib/__tests__/edge-provider-schema/cli.d.ts +0 -1
  96. package/lib/__tests__/edge-provider-schema/cli.js +0 -67
  97. package/lib/__tests__/edge-provider-schema/index.js +0 -154
  98. package/lib/__tests__/edge-provider-schema.test.d.ts +0 -1
  99. package/lib/__tests__/edge-provider-schema.test.js +0 -46
  100. package/lib/__tests__/provider.test.d.ts +0 -1
  101. package/lib/__tests__/provider.test.js +0 -158
  102. package/lib/get/__tests__/constructs-maker.test.d.ts +0 -1
  103. package/lib/get/__tests__/constructs-maker.test.js +0 -113
  104. package/lib/get/__tests__/generator/complex-computed-types.test.d.ts +0 -1
  105. package/lib/get/__tests__/generator/complex-computed-types.test.js +0 -42
  106. package/lib/get/__tests__/generator/deep-nested-attributes.test.d.ts +0 -1
  107. package/lib/get/__tests__/generator/deep-nested-attributes.test.js +0 -50
  108. package/lib/get/__tests__/generator/description-escaping.test.d.ts +0 -1
  109. package/lib/get/__tests__/generator/description-escaping.test.js +0 -65
  110. package/lib/get/__tests__/generator/empty-provider-resources.test.d.ts +0 -1
  111. package/lib/get/__tests__/generator/empty-provider-resources.test.js +0 -40
  112. package/lib/get/__tests__/generator/export-sharding.test.d.ts +0 -1
  113. package/lib/get/__tests__/generator/export-sharding.test.js +0 -82
  114. package/lib/get/__tests__/generator/module-generator.test.d.ts +0 -1
  115. package/lib/get/__tests__/generator/module-generator.test.js +0 -476
  116. package/lib/get/__tests__/generator/nested-types.test.d.ts +0 -1
  117. package/lib/get/__tests__/generator/nested-types.test.js +0 -51
  118. package/lib/get/__tests__/generator/provider.test.d.ts +0 -1
  119. package/lib/get/__tests__/generator/provider.test.js +0 -51
  120. package/lib/get/__tests__/generator/resource-types.test.d.ts +0 -1
  121. package/lib/get/__tests__/generator/resource-types.test.js +0 -78
  122. package/lib/get/__tests__/generator/skipped-attributes.test.d.ts +0 -1
  123. package/lib/get/__tests__/generator/skipped-attributes.test.js +0 -55
  124. package/lib/get/__tests__/generator/types.test.d.ts +0 -1
  125. package/lib/get/__tests__/generator/types.test.js +0 -280
  126. package/lib/get/__tests__/generator/versions-file.test.d.ts +0 -1
  127. package/lib/get/__tests__/generator/versions-file.test.js +0 -74
  128. package/lib/get/__tests__/util.js +0 -59
  129. package/lib/get/generator/custom-defaults.js +0 -403
  130. package/lib/get/generator/emitter/attributes-emitter.js +0 -161
  131. package/lib/get/generator/emitter/resource-emitter.js +0 -144
  132. package/lib/get/generator/emitter/struct-emitter.js +0 -500
  133. package/lib/get/generator/loop-detection.js +0 -56
  134. package/lib/get/generator/models/attribute-model.js +0 -160
  135. package/lib/get/generator/models/attribute-type-model.js +0 -376
  136. package/lib/get/generator/models/resource-model.js +0 -106
  137. package/lib/get/generator/models/scope.js +0 -36
  138. package/lib/get/generator/models/struct.js +0 -90
  139. package/lib/get/generator/module-generator.js +0 -184
  140. package/lib/get/generator/provider-generator.js +0 -225
  141. package/lib/get/generator/resource-parser.js +0 -497
  142. package/lib/get/generator/sanitized-comments.js +0 -44
  143. package/lib/get/generator/skipped-attributes.js +0 -29
  144. package/lib/util.js +0 -30
  145. /package/{lib → src}/get/__tests__/generator/fixtures/aws-provider.test.fixture.json +0 -0
  146. /package/{lib → src}/get/__tests__/generator/fixtures/aws_acm_certificate.test.fixture.json +0 -0
  147. /package/{lib → src}/get/__tests__/generator/fixtures/aws_cloudfront_distribution.test.fixture.json +0 -0
  148. /package/{lib → src}/get/__tests__/generator/fixtures/aws_fms_admin_account.test.fixture.json +0 -0
  149. /package/{lib → src}/get/__tests__/generator/fixtures/aws_quicksight_template.test.fixture.json +0 -0
  150. /package/{lib → src}/get/__tests__/generator/fixtures/aws_s3_bucket.test.fixture.json +0 -0
  151. /package/{lib → src}/get/__tests__/generator/fixtures/aws_security_group.test.fixture.json +0 -0
  152. /package/{lib → src}/get/__tests__/generator/fixtures/aws_wafv2_web_acl.test.fixture.json +0 -0
  153. /package/{lib → src}/get/__tests__/generator/fixtures/block-type-nested-computed-list.test.fixture.json +0 -0
  154. /package/{lib → src}/get/__tests__/generator/fixtures/block-type-set-list.test.fixture.json +0 -0
  155. /package/{lib → src}/get/__tests__/generator/fixtures/boolean-list.test.fixture.json +0 -0
  156. /package/{lib → src}/get/__tests__/generator/fixtures/boolean-map.test.fixture.json +0 -0
  157. /package/{lib → src}/get/__tests__/generator/fixtures/comment-ending-sequence.test.fixture.json +0 -0
  158. /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex-nested.test.fixture.json +0 -0
  159. /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex.test.fixture.json +0 -0
  160. /package/{lib → src}/get/__tests__/generator/fixtures/computed-optional-complex.test.fixture.json +0 -0
  161. /package/{lib → src}/get/__tests__/generator/fixtures/data_aws_quicksight_analysis.fixture.json +0 -0
  162. /package/{lib → src}/get/__tests__/generator/fixtures/datadog_dashboard.test.fixture.json +0 -0
  163. /package/{lib → src}/get/__tests__/generator/fixtures/datadog_spans_metric.test.fixture.json +0 -0
  164. /package/{lib → src}/get/__tests__/generator/fixtures/deep-attributes.test.fixture.json +0 -0
  165. /package/{lib → src}/get/__tests__/generator/fixtures/deeply-nested-block-types.test.fixture.json +0 -0
  166. /package/{lib → src}/get/__tests__/generator/fixtures/description-escaping.test.fixture.json +0 -0
  167. /package/{lib → src}/get/__tests__/generator/fixtures/elasticstack-provider.test.fixture.json +0 -0
  168. /package/{lib → src}/get/__tests__/generator/fixtures/empty-provider-resources.test.fixture.json +0 -0
  169. /package/{lib → src}/get/__tests__/generator/fixtures/ignored-attributes.test.fixture.json +0 -0
  170. /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-attribute-names.test.fixture.json +0 -0
  171. /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-resource-names.test.fixture.json +0 -0
  172. /package/{lib → src}/get/__tests__/generator/fixtures/list-list-object.test.fixture.json +0 -0
  173. /package/{lib → src}/get/__tests__/generator/fixtures/list-list-string.test.fixture.json +0 -0
  174. /package/{lib → src}/get/__tests__/generator/fixtures/list-of-string-map.test.fixture.json +0 -0
  175. /package/{lib → src}/get/__tests__/generator/fixtures/map-of-string-list.test.fixture.json +0 -0
  176. /package/{lib → src}/get/__tests__/generator/fixtures/markdown-description-with-code-blocks.test.fixture.json +0 -0
  177. /package/{lib → src}/get/__tests__/generator/fixtures/module-get-x.test.fixture.tf +0 -0
  178. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-1.test.fixture.tf +0 -0
  179. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-2.test.fixture.tf +0 -0
  180. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-outputs.test.fixture.tf +0 -0
  181. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-variable-type.test.fixture.tf +0 -0
  182. /package/{lib → src}/get/__tests__/generator/fixtures/module-with-star-default.test.fixture.tf +0 -0
  183. /package/{lib → src}/get/__tests__/generator/fixtures/name-conflict.test.fixture.json +0 -0
  184. /package/{lib → src}/get/__tests__/generator/fixtures/nested-type-without-attributes.test.fixture.json +0 -0
  185. /package/{lib → src}/get/__tests__/generator/fixtures/nested-types.test.fixture.json +0 -0
  186. /package/{lib → src}/get/__tests__/generator/fixtures/number-list.test.fixture.json +0 -0
  187. /package/{lib → src}/get/__tests__/generator/fixtures/number-map.test.fixture.json +0 -0
  188. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-boolean.test.fixture.json +0 -0
  189. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-dynamic.test.fixture.json +0 -0
  190. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-number.test.fixture.json +0 -0
  191. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-string.test.fixture.json +0 -0
  192. /package/{lib → src}/get/__tests__/generator/fixtures/single-block-type.test.fixture.json +0 -0
  193. /package/{lib → src}/get/__tests__/generator/fixtures/string-list.test.fixture.json +0 -0
  194. /package/{lib → src}/get/__tests__/generator/fixtures/string-map.test.fixture.json +0 -0
  195. /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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vZHVsZS1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBbUQ7QUFDbkQscUNBQTBDO0FBQzFDLDZEQUF3RDtBQUd4RCxNQUFhLGVBQWU7SUFDMUIsWUFDbUIsSUFBZSxFQUNmLE9BQXNDO1FBRHRDLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUV2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFMUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFtQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXpCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUUxRCxN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VyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtJQUNwQyxNQUFNLE9BQU8sR0FBRywyQ0FBMkMsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWxDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdEMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNyQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbkIsT0FBTyxvQkFBb0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIsIHRvQ2FtZWxDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IHNhbml0aXplZENvbW1lbnQgfSBmcm9tIFwiLi9zYW5pdGl6ZWQtY29tbWVudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlR2VuZXJhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRzOiBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXRbXSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRoaXMudGFyZ2V0cykge1xuICAgICAgdGhpcy5lbWl0U3VibW9kdWxlKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3VibW9kdWxlKHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KSB7XG4gICAgY29uc3Qgc3BlYyA9IHRhcmdldC5zcGVjO1xuXG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc3BlYyBmb3IgJHt0YXJnZXQuZnFufWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZSh0YXJnZXQuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRgKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gJHt0YXJnZXQuc291cmNlfWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgaW1wb3J0IHsgVGVycmFmb3JtTW9kdWxlLCBUZXJyYWZvcm1Nb2R1bGVVc2VyQ29uZmlnIH0gZnJvbSAnY2RrdG4nO2AsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7YCk7XG5cbiAgICBjb25zdCBiYXNlTmFtZSA9IHRoaXMuY29kZS50b1Bhc2NhbENhc2UodGFyZ2V0Lm5hbWUucmVwbGFjZSgvWy0vLl0vZywgXCJfXCIpKTtcbiAgICBjb25zdCBjb25maWdUeXBlID0gYCR7YmFzZU5hbWV9Q29uZmlnYDtcblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgZXhwb3J0IGludGVyZmFjZSAke2NvbmZpZ1R5cGV9IGV4dGVuZHMgVGVycmFmb3JtTW9kdWxlVXNlckNvbmZpZ2AsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHNwZWMuaW5wdXRzKSB7XG4gICAgICBjb25zdCBvcHRpb25hbCA9IGlucHV0LnJlcXVpcmVkICYmIGlucHV0LmRlZmF1bHQgPT09IHVuZGVmaW5lZCA/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFFdkUsdURBQW1EO0FBQ25ELHVDQUEyRDtBQVEzRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixNQUE2QixFQUM3QixtQkFBMkIsRUFDbEIsRUFBRTtJQUNYLElBQUksTUFBTSxDQUFDLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQztJQUMvQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUVqRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLFdBQVc7Z0JBQ1gsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELFFBQVEsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixLQUFLLENBQUMsRUFBRSxnQkFBZ0I7b0JBQ3RCLFlBQVksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNwRCxNQUFNO2dCQUNSLEtBQUssQ0FBQyxFQUFFLHlCQUF5QjtvQkFDL0IsWUFBWSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3pELFlBQVksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNwRCxNQUFNO2dCQUNSLEtBQUssQ0FBQyxFQUFFLG1DQUFtQztvQkFDekMsWUFBWSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3hELFlBQVksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN6RCxZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUjtvQkFDRSxNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixNQUFNLENBQUMsTUFBTSw0REFBNEQsQ0FDMUYsQ0FBQztZQUNOLENBQUM7WUFFRCxPQUFPLENBQ0wsWUFBWSxDQUFDLFFBQVEsS0FBSyxRQUFRO2dCQUNsQyxZQUFZLENBQUMsU0FBUyxLQUFLLFNBQVM7Z0JBQ3BDLFlBQVksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUMvQixDQUFDO1FBQ0osQ0FBQztRQUVELHNEQUFzRDtRQUV0RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDLENBQUM7QUFNRixNQUFhLDBCQUEwQjtJQU1yQyxZQUNtQixJQUFlLEVBQ2YsTUFBc0I7UUFEdEIsU0FBSSxHQUFKLElBQUksQ0FBVztRQUNmLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBUGpDLG1CQUFjLEdBQUcsSUFBSSxnQ0FBYyxFQUFFLENBQUM7UUFHdkMsYUFBUSxHQUEyQyxFQUFFLENBQUM7UUFNM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSx5QkFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLHVCQUF1QixDQUM3QixrQkFBeUM7UUFFekMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDbkUsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUNqQixDQUFDO0lBQ3hCLENBQUM7SUFFTSxRQUFRLENBQUMsa0JBQXlDOztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixnQkFBTSxDQUFDLEtBQUssQ0FDViwwQ0FBMEMsa0JBQWtCLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FDdkYsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLEVBQ0osQ0FBQyxDQUNGLEVBQUUsQ0FDSixDQUFDO1lBQ0YsTUFBTSxJQUFJLEtBQUssQ0FDYiwyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsQ0FDdkQsa0JBQWtCLENBQ25CLEVBQUUsQ0FDSixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsMENBQUcsSUFBSSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUM7SUFDeEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsUUFBUSxDQUNYLElBQUksdUNBQTZCLENBQy9CLElBQUkscUNBQTJCLENBQUMsSUFBSSxDQUFDLEVBQ3JDLG1CQUFTLENBQUMsQ0FBQyxDQUFDLENBQ2IsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQWM7UUFDOUIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sbUJBQW1CLENBQ3hCLElBQVUsRUFDVixVQUFrQzs7UUFFbEMsTUFBTSxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQiwwQ0FBRyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ25FLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQzFFLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ3hFLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FDdkIsSUFBSSxFQUNKLFFBQVEsSUFBSSxFQUFFLEVBQ2QsUUFBUSxFQUNSLGFBQWEsRUFDYixVQUFVLENBQ1gsQ0FDSixDQUFDO1FBRUYsT0FBUSxFQUFzQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxhQUFxQjtRQUNsRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLDJCQUEyQixDQUFDLGFBQXFCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sWUFBWSxDQUNsQixJQUFVLEVBQ1YsZUFBd0IsRUFDeEIsVUFBa0M7O1FBRWxDLE1BQU0sSUFBSSxHQUFHLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUk7WUFDM0IsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxJQUFxQjtZQUNuQyxDQUFDLENBQUMsSUFBQSwyQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLDBDQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLElBQUksYUFBYSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ25FLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsYUFBYSxDQUFDLHlCQUF5QixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzdELGFBQWEsQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzVELENBQUM7WUFDRCxhQUFhLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUVoRCxJQUFJLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FDaEQsSUFBSSxFQUNKLFVBQVUsRUFDVixRQUFRLENBQUMsUUFBUSxFQUNqQixVQUFVLEVBQ1YsVUFBVSxDQUNYLENBQUM7WUFDRixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLGdCQUFnQixDQUFDLHlCQUF5QixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2hFLGdCQUFnQixDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQzdELGdCQUFnQixDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDM0QsQ0FBQztZQUNELGdCQUFnQixDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsUUFBdUI7UUFDaEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxRQUFRLENBQUMsbUJBQW1CLFlBQVksQ0FBQztRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLFFBQVEsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVU7WUFDOUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRO1lBQ25CLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLGdEQUFnRCxJQUFJLE9BQU8sUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUNuRixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUFzQixFQUFFLEtBQWU7UUFDM0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxHQUFHLE1BQU0sV0FBVyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixlQUFlLElBQUEsdUJBQVcsRUFBQyxPQUFPLENBQUMsWUFBWSxPQUFPLElBQUksQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFzQixFQUFFLEtBQWU7UUFDL0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLG1DQUFtQyxJQUFBLHVCQUFXLEVBQzVDLE9BQU8sQ0FDUiw2Q0FBNkMsT0FBTyxXQUFXLENBQ2pFLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sWUFBWSxDQUFDLFFBQXVCO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVPLDZCQUE2QixDQUFDLFFBQXVCO1FBQzNELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUUxQix3Q0FBd0M7UUFDeEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakIsSUFBSSxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixZQUFZLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUMvQyxRQUFRLENBQUMsaUJBQ1gsR0FBRyxDQUNKLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFFbEUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBdUI7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFsUUQsZ0VBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVBhcnNlciB9IGZyb20gXCIuL3Jlc291cmNlLXBhcnNlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VFbWl0dGVyLCBTdHJ1Y3RFbWl0dGVyIH0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5pbnRlcmZhY2UgUHJvdmlkZXJEYXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBpc01hdGNoaW5nID0gKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgdGVycmFmb3JtU2NoZW1hTmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICh0YXJnZXQuaXNNb2R1bGUpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBlbGVtZW50cyA9IHRlcnJhZm9ybVNjaGVtYU5hbWUuc3BsaXQoXCIvXCIpO1xuXG4gIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnNvdXJjZSA9PT0gdGVycmFmb3JtU2NoZW1hTmFtZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbaG9zdG5hbWUsIG5hbWVzcGFjZSwgcHJvdmlkZXJdID0gZWxlbWVudHM7XG5cbiAgICBpZiAoIWhvc3RuYW1lIHx8ICFuYW1lc3BhY2UgfHwgIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGhhbmRsZSAke3RlcnJhZm9ybVNjaGVtYU5hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGFyZ2V0LnNvdXJjZSBpcyBzZXQsIHRyeSB0byBtYXRjaCBpdFxuICAgIGlmICh0YXJnZXQuc291cmNlKSB7XG4gICAgICBjb25zdCB0YXJnZXRTb3VyY2UgPSB7XG4gICAgICAgIC8vIGRlZmF1bHRzXG4gICAgICAgIGhvc3RuYW1lOiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiLFxuICAgICAgICBuYW1lc3BhY2U6IFwiaGFzaGljb3JwXCIsXG4gICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICB9O1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudHMgPSB0YXJnZXQuc291cmNlLnNwbGl0KFwiL1wiKTtcbiAgICAgIHN3aXRjaCAodGFyZ2V0RWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTogLy8gb25seSBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOiAvLyBuYW1lc3BhY2UgYW5kIG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6IC8vIGhvc3RuYW1lLCBuYW1lc3BhY2UgYW5kIG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLmhvc3RuYW1lID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYGNhbid0IGhhbmRsZSAke3RhcmdldC5zb3VyY2V9LiBFeHBlY3RlZCBzdHJpbmcgd2l0aCAxLCAyIG9yIDMgZWxlbWVudHMgc2VwYXJhdGVkIGJ5ICcvJ2AsXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0U291cmNlLmhvc3RuYW1lID09PSBob3N0bmFtZSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLnJlc291cmNlRW1pdHRlciA9IG5ldyBSZXNvdXJjZUVtaXR0ZXIodGhpcy5jb2RlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIgPSBuZXcgU3RydWN0RW1pdHRlcih0aGlzLmNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm92aWRlckJ5Q29uc3RyYWludChcbiAgICBwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogRlFQTiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLmZpbmQoKGZxcG4pID0+XG4gICAgICBpc01hdGNoaW5nKHByb3ZpZGVyQ29uc3RyYWludCwgZnFwbiksXG4gICAgKSBhcyBGUVBOIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlKHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgY29uc3QgZnFwbiA9IHRoaXMuZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQocHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICBpZiAoIWZxcG4pIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIGNvbnN0cmFpbnQgZm9yICR7cHJvdmlkZXJDb25zdHJhaW50fSBpbiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgd2l0aCBjb25zdHJhaW50ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50LFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyVmVyc2lvbiA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3ZlcnNpb25zPy5bZnFwbl07XG4gICAgdGhpcy5lbWl0UHJvdmlkZXIoZnFwbiwgcHJvdmlkZXJWZXJzaW9uLCBwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIHRoaXMudmVyc2lvbnNbZnFwbl0gPSBwcm92aWRlclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVBbGwoKSB7XG4gICAgZm9yIChjb25zdCBmcXBuIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlKFxuICAgICAgICBuZXcgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQoXG4gICAgICAgICAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChmcXBuKSxcbiAgICAgICAgICBMQU5HVUFHRVNbMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlKG91dGRpcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFJlc291cmNlTW9kZWxzKFxuICAgIGZxcG46IEZRUE4sXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbFtdIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIucmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoZnFwbiwgdHlwZSwgcmVzb3VyY2UsIFwicmVzb3VyY2VcIiwgY29uc3RyYWludCksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgICAgZnFwbixcbiAgICAgICAgICBgZGF0YV8ke3R5cGV9YCxcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICBcImRhdGFfc291cmNlXCIsXG4gICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIChbXSBhcyBSZXNvdXJjZU1vZGVsW10pLmNvbmNhdCguLi5yZXNvdXJjZXMsIC4uLmRhdGFTb3VyY2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGFzc05hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVBhcnNlci5nZXRDbGFzc05hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UHJvdmlkZXIoXG4gICAgZnFwbjogRlFQTixcbiAgICBwcm92aWRlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKSB7XG4gICAgY29uc3QgbmFtZSA9IGNvbnN0cmFpbnQ/Lm5hbWVcbiAgICAgID8gKGNvbnN0cmFpbnQubmFtZSBhcyBQcm92aWRlck5hbWUpXG4gICAgICA6IHBhcnNlRlFQTihmcXBuKS5uYW1lO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcz8uW2ZxcG5dO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBmaW5kIHByb3ZpZGVyICcke2ZxcG59JyBpbiBzY2hlbWFgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLmJ1aWxkUmVzb3VyY2VNb2RlbHMoZnFwbiwgY29uc3RyYWludCkuZm9yRWFjaCgocmVzb3VyY2VNb2RlbCkgPT4ge1xuICAgICAgaWYgKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb25Db25zdHJhaW50ID0gY29uc3RyYWludC52ZXJzaW9uO1xuICAgICAgICByZXNvdXJjZU1vZGVsLnRlcnJhZm9ybVByb3ZpZGVyU291cmNlID0gY29uc3RyYWludC5zb3VyY2U7XG4gICAgICB9XG4gICAgICByZXNvdXJjZU1vZGVsLnByb3ZpZGVyVmVyc2lvbiA9IHByb3ZpZGVyVmVyc2lvbjtcblxuICAgICAgaWYgKHJlc291cmNlTW9kZWwuc3RydWN0c1JlcXVpcmVTaGFyZGluZykge1xuICAgICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlV2l0aENvbXBsZXhTdHJ1Y3QocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZShyZXNvdXJjZU1vZGVsKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXRSZXNvdXJjZVJlYWRtZShyZXNvdXJjZU1vZGVsKTtcbiAgICB9KTtcblxuICAgIGlmIChwcm92aWRlci5wcm92aWRlcikge1xuICAgICAgY29uc3QgcHJvdmlkZXJSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgIGZxcG4sXG4gICAgICAgIGBwcm92aWRlcmAsXG4gICAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgICBcInByb3ZpZGVyXCIsXG4gICAgICAgIGNvbnN0cmFpbnQsXG4gICAgICApO1xuICAgICAgaWYgKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS5wcm92aWRlclZlcnNpb25Db25zdHJhaW50ID0gY29uc3RyYWludC52ZXJzaW9uO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyU291cmNlID0gY29uc3RyYWludC5zb3VyY2U7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UudGVycmFmb3JtUHJvdmlkZXJOYW1lID0gY29uc3RyYWludC5uYW1lO1xuICAgICAgfVxuICAgICAgcHJvdmlkZXJSZXNvdXJjZS5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHByb3ZpZGVyUmVzb3VyY2UpKTtcbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHByb3ZpZGVyUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdEluZGV4RmlsZShuYW1lLCBmaWxlcyk7XG4gICAgdGhpcy5lbWl0TGF6eUluZGV4RmlsZShuYW1lLCBmaWxlcyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVJlYWRtZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7cmVzb3VyY2UubmFtZXNwYWNlRm9sZGVyUGF0aH0vUkVBRE1FLm1kYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAjIFxcYCR7cmVzb3VyY2UudGVycmFmb3JtVHlwZX1cXGBgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IHR5cGUgPSByZXNvdXJjZS5pc1Byb3ZpZGVyXG4gICAgICA/IHJlc291cmNlLnByb3ZpZGVyXG4gICAgICA6IHJlc291cmNlLnRlcnJhZm9ybVR5cGU7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgUmVmZXIgdG8gdGhlIFRlcnJhZm9ybSBSZWdpc3RyeSBmb3IgZG9jczogW1xcYCR7dHlwZX1cXGBdKCR7cmVzb3VyY2UubGlua1RvRG9jc30pLmAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEluZGV4RmlsZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9YDtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2ZvbGRlcn0vaW5kZXgudHNgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBnZW5lcmF0ZWQgYnkgY2RrdG4gZ2V0XCIpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGZpbGUucmVwbGFjZShgJHtmb2xkZXJ9L2AsIFwiXCIpLnJlcGxhY2UoXCIvaW5kZXgudHNcIiwgXCJcIik7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYGV4cG9ydCAqIGFzICR7dG9DYW1lbENhc2UoZGlyTmFtZSl9IGZyb20gJy4vJHtkaXJOYW1lfSc7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRMYXp5SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9sYXp5LWluZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJyR7dG9DYW1lbENhc2UoXG4gICAgICAgICAgZGlyTmFtZSxcbiAgICAgICAgKX0nLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWlyZSgnLi8ke2Rpck5hbWV9Jyk7IH0gfSk7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHN0cmluZyB7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKHJlc291cmNlLmZpbGVQYXRoKTtcbiAgICB0aGlzLmVtaXRGaWxlSGVhZGVyKHJlc291cmNlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG5cbiAgICByZXR1cm4gcmVzb3VyY2UuZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkRmlsZXMgPSBbXTtcblxuICAgIC8vIGRyb3AgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgZmlsZXBhdGhcbiAgICBjb25zdCBmaWxlUGF0aCA9IHJlc291cmNlLmZpbGVQYXRoO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgaWYgKHJlc291cmNlLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgIGlmIChyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgaW1wb3J0IHsgJHtyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMuam9pbihcIiwgXFxuXCIpfX0gZnJvbSAnLi8ke1xuICAgICAgICAgICAgcmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWVcbiAgICAgICAgICB9J2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcuLyR7cmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWV9J2ApO1xuXG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCByZXNvdXJjZS5jb25maWdTdHJ1Y3QpO1xuICAgICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG5cbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICAgIGdlbmVyYXRlZEZpbGVzLnB1c2gocmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlSGVhZGVyKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vICR7cmVzb3VyY2UubGlua1RvRG9jc31gKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYWApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCkpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBDb25maWd1cmF0aW9uXCIpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gIH1cbn1cbiJdfQ==