@cdktn/provider-generator 0.23.0-pre.38 → 0.23.0-pre.39

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 (179) hide show
  1. package/build/__tests__/edge-provider-schema/builder.js +106 -0
  2. package/build/__tests__/edge-provider-schema/cli.js +67 -0
  3. package/build/__tests__/edge-provider-schema/index.js +154 -0
  4. package/build/__tests__/edge-provider-schema.test.js +46 -0
  5. package/build/__tests__/provider.test.js +158 -0
  6. package/build/get/__tests__/constructs-maker.test.js +113 -0
  7. package/build/get/__tests__/generator/complex-computed-types.test.js +42 -0
  8. package/build/get/__tests__/generator/deep-nested-attributes.test.js +50 -0
  9. package/build/get/__tests__/generator/description-escaping.test.js +65 -0
  10. package/build/get/__tests__/generator/empty-provider-resources.test.js +40 -0
  11. package/build/get/__tests__/generator/export-sharding.test.js +82 -0
  12. package/build/get/__tests__/generator/module-generator.test.js +476 -0
  13. package/build/get/__tests__/generator/nested-types.test.js +51 -0
  14. package/build/get/__tests__/generator/provider.test.js +51 -0
  15. package/build/get/__tests__/generator/resource-types.test.js +78 -0
  16. package/build/get/__tests__/generator/skipped-attributes.test.js +55 -0
  17. package/build/get/__tests__/generator/types.test.js +289 -0
  18. package/build/get/__tests__/generator/versions-file.test.js +74 -0
  19. package/build/get/__tests__/util.js +59 -0
  20. package/{lib → build}/get/constructs-maker.d.ts +1 -1
  21. package/build/get/constructs-maker.js +530 -0
  22. package/build/get/generator/custom-defaults.js +403 -0
  23. package/build/get/generator/emitter/attributes-emitter.js +161 -0
  24. package/{lib → build}/get/generator/emitter/index.js +1 -1
  25. package/build/get/generator/emitter/resource-emitter.js +144 -0
  26. package/build/get/generator/emitter/struct-emitter.js +500 -0
  27. package/build/get/generator/loop-detection.js +56 -0
  28. package/build/get/generator/models/attribute-model.js +160 -0
  29. package/build/get/generator/models/attribute-type-model.js +376 -0
  30. package/{lib → build}/get/generator/models/index.js +1 -1
  31. package/build/get/generator/models/resource-model.js +106 -0
  32. package/build/get/generator/models/scope.js +36 -0
  33. package/build/get/generator/models/struct.js +90 -0
  34. package/build/get/generator/module-generator.js +184 -0
  35. package/build/get/generator/provider-generator.js +225 -0
  36. package/build/get/generator/resource-parser.js +497 -0
  37. package/build/get/generator/sanitized-comments.js +44 -0
  38. package/build/get/generator/skipped-attributes.js +29 -0
  39. package/{lib → build}/index.js +1 -1
  40. package/build/util.js +30 -0
  41. package/package.json +6 -6
  42. package/tsconfig.json +5 -3
  43. package/lib/__tests__/edge-provider-schema/builder.js +0 -106
  44. package/lib/__tests__/edge-provider-schema/cli.js +0 -67
  45. package/lib/__tests__/edge-provider-schema/index.js +0 -154
  46. package/lib/__tests__/edge-provider-schema.test.js +0 -46
  47. package/lib/__tests__/provider.test.js +0 -158
  48. package/lib/get/__tests__/constructs-maker.test.js +0 -113
  49. package/lib/get/__tests__/generator/complex-computed-types.test.js +0 -42
  50. package/lib/get/__tests__/generator/deep-nested-attributes.test.js +0 -50
  51. package/lib/get/__tests__/generator/description-escaping.test.js +0 -65
  52. package/lib/get/__tests__/generator/empty-provider-resources.test.js +0 -40
  53. package/lib/get/__tests__/generator/export-sharding.test.js +0 -82
  54. package/lib/get/__tests__/generator/module-generator.test.js +0 -476
  55. package/lib/get/__tests__/generator/nested-types.test.js +0 -51
  56. package/lib/get/__tests__/generator/provider.test.js +0 -51
  57. package/lib/get/__tests__/generator/resource-types.test.js +0 -78
  58. package/lib/get/__tests__/generator/skipped-attributes.test.js +0 -55
  59. package/lib/get/__tests__/generator/types.test.js +0 -289
  60. package/lib/get/__tests__/generator/versions-file.test.js +0 -74
  61. package/lib/get/__tests__/util.js +0 -59
  62. package/lib/get/constructs-maker.js +0 -530
  63. package/lib/get/generator/custom-defaults.js +0 -403
  64. package/lib/get/generator/emitter/attributes-emitter.js +0 -161
  65. package/lib/get/generator/emitter/resource-emitter.js +0 -144
  66. package/lib/get/generator/emitter/struct-emitter.js +0 -500
  67. package/lib/get/generator/loop-detection.js +0 -56
  68. package/lib/get/generator/models/attribute-model.js +0 -160
  69. package/lib/get/generator/models/attribute-type-model.js +0 -376
  70. package/lib/get/generator/models/resource-model.js +0 -106
  71. package/lib/get/generator/models/scope.js +0 -36
  72. package/lib/get/generator/models/struct.js +0 -90
  73. package/lib/get/generator/module-generator.js +0 -184
  74. package/lib/get/generator/provider-generator.js +0 -225
  75. package/lib/get/generator/resource-parser.js +0 -497
  76. package/lib/get/generator/sanitized-comments.js +0 -44
  77. package/lib/get/generator/skipped-attributes.js +0 -29
  78. package/lib/util.js +0 -30
  79. /package/{lib → build}/__tests__/edge-provider-schema/builder.d.ts +0 -0
  80. /package/{lib → build}/__tests__/edge-provider-schema/cli.d.ts +0 -0
  81. /package/{lib → build}/__tests__/edge-provider-schema/index.d.ts +0 -0
  82. /package/{lib → build}/__tests__/edge-provider-schema.test.d.ts +0 -0
  83. /package/{lib → build}/__tests__/provider.test.d.ts +0 -0
  84. /package/{lib → build}/get/__tests__/constructs-maker.test.d.ts +0 -0
  85. /package/{lib → build}/get/__tests__/generator/complex-computed-types.test.d.ts +0 -0
  86. /package/{lib → build}/get/__tests__/generator/deep-nested-attributes.test.d.ts +0 -0
  87. /package/{lib → build}/get/__tests__/generator/description-escaping.test.d.ts +0 -0
  88. /package/{lib → build}/get/__tests__/generator/empty-provider-resources.test.d.ts +0 -0
  89. /package/{lib → build}/get/__tests__/generator/export-sharding.test.d.ts +0 -0
  90. /package/{lib → build}/get/__tests__/generator/module-generator.test.d.ts +0 -0
  91. /package/{lib → build}/get/__tests__/generator/nested-types.test.d.ts +0 -0
  92. /package/{lib → build}/get/__tests__/generator/provider.test.d.ts +0 -0
  93. /package/{lib → build}/get/__tests__/generator/resource-types.test.d.ts +0 -0
  94. /package/{lib → build}/get/__tests__/generator/skipped-attributes.test.d.ts +0 -0
  95. /package/{lib → build}/get/__tests__/generator/types.test.d.ts +0 -0
  96. /package/{lib → build}/get/__tests__/generator/versions-file.test.d.ts +0 -0
  97. /package/{lib → build}/get/__tests__/util.d.ts +0 -0
  98. /package/{lib → build}/get/generator/custom-defaults.d.ts +0 -0
  99. /package/{lib → build}/get/generator/emitter/attributes-emitter.d.ts +0 -0
  100. /package/{lib → build}/get/generator/emitter/index.d.ts +0 -0
  101. /package/{lib → build}/get/generator/emitter/resource-emitter.d.ts +0 -0
  102. /package/{lib → build}/get/generator/emitter/struct-emitter.d.ts +0 -0
  103. /package/{lib → build}/get/generator/loop-detection.d.ts +0 -0
  104. /package/{lib → build}/get/generator/models/attribute-model.d.ts +0 -0
  105. /package/{lib → build}/get/generator/models/attribute-type-model.d.ts +0 -0
  106. /package/{lib → build}/get/generator/models/index.d.ts +0 -0
  107. /package/{lib → build}/get/generator/models/resource-model.d.ts +0 -0
  108. /package/{lib → build}/get/generator/models/scope.d.ts +0 -0
  109. /package/{lib → build}/get/generator/models/struct.d.ts +0 -0
  110. /package/{lib → build}/get/generator/module-generator.d.ts +0 -0
  111. /package/{lib → build}/get/generator/provider-generator.d.ts +0 -0
  112. /package/{lib → build}/get/generator/resource-parser.d.ts +0 -0
  113. /package/{lib → build}/get/generator/sanitized-comments.d.ts +0 -0
  114. /package/{lib → build}/get/generator/skipped-attributes.d.ts +0 -0
  115. /package/{lib → build}/index.d.ts +0 -0
  116. /package/{lib → build}/util.d.ts +0 -0
  117. /package/{lib → src}/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +0 -0
  118. /package/{lib → src}/__tests__/__snapshots__/provider.test.ts.snap +0 -0
  119. /package/{lib → src}/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +0 -0
  120. /package/{lib → src}/get/__tests__/generator/__snapshots__/description-escaping.test.ts.snap +0 -0
  121. /package/{lib → src}/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +0 -0
  122. /package/{lib → src}/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +0 -0
  123. /package/{lib → src}/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +0 -0
  124. /package/{lib → src}/get/__tests__/generator/__snapshots__/provider.test.ts.snap +0 -0
  125. /package/{lib → src}/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +0 -0
  126. /package/{lib → src}/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +0 -0
  127. /package/{lib → src}/get/__tests__/generator/__snapshots__/types.test.ts.snap +0 -0
  128. /package/{lib → src}/get/__tests__/generator/fixtures/aws-provider.test.fixture.json +0 -0
  129. /package/{lib → src}/get/__tests__/generator/fixtures/aws_acm_certificate.test.fixture.json +0 -0
  130. /package/{lib → src}/get/__tests__/generator/fixtures/aws_cloudfront_distribution.test.fixture.json +0 -0
  131. /package/{lib → src}/get/__tests__/generator/fixtures/aws_fms_admin_account.test.fixture.json +0 -0
  132. /package/{lib → src}/get/__tests__/generator/fixtures/aws_quicksight_template.test.fixture.json +0 -0
  133. /package/{lib → src}/get/__tests__/generator/fixtures/aws_s3_bucket.test.fixture.json +0 -0
  134. /package/{lib → src}/get/__tests__/generator/fixtures/aws_security_group.test.fixture.json +0 -0
  135. /package/{lib → src}/get/__tests__/generator/fixtures/aws_wafv2_web_acl.test.fixture.json +0 -0
  136. /package/{lib → src}/get/__tests__/generator/fixtures/block-type-nested-computed-list.test.fixture.json +0 -0
  137. /package/{lib → src}/get/__tests__/generator/fixtures/block-type-set-list.test.fixture.json +0 -0
  138. /package/{lib → src}/get/__tests__/generator/fixtures/boolean-list.test.fixture.json +0 -0
  139. /package/{lib → src}/get/__tests__/generator/fixtures/boolean-map.test.fixture.json +0 -0
  140. /package/{lib → src}/get/__tests__/generator/fixtures/comment-ending-sequence.test.fixture.json +0 -0
  141. /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex-nested.test.fixture.json +0 -0
  142. /package/{lib → src}/get/__tests__/generator/fixtures/computed-complex.test.fixture.json +0 -0
  143. /package/{lib → src}/get/__tests__/generator/fixtures/computed-optional-complex.test.fixture.json +0 -0
  144. /package/{lib → src}/get/__tests__/generator/fixtures/data_aws_quicksight_analysis.fixture.json +0 -0
  145. /package/{lib → src}/get/__tests__/generator/fixtures/datadog_dashboard.test.fixture.json +0 -0
  146. /package/{lib → src}/get/__tests__/generator/fixtures/datadog_spans_metric.test.fixture.json +0 -0
  147. /package/{lib → src}/get/__tests__/generator/fixtures/deep-attributes.test.fixture.json +0 -0
  148. /package/{lib → src}/get/__tests__/generator/fixtures/deeply-nested-block-types.test.fixture.json +0 -0
  149. /package/{lib → src}/get/__tests__/generator/fixtures/description-escaping.test.fixture.json +0 -0
  150. /package/{lib → src}/get/__tests__/generator/fixtures/elasticstack-provider.test.fixture.json +0 -0
  151. /package/{lib → src}/get/__tests__/generator/fixtures/empty-provider-resources.test.fixture.json +0 -0
  152. /package/{lib → src}/get/__tests__/generator/fixtures/ignored-attributes.test.fixture.json +0 -0
  153. /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-attribute-names.test.fixture.json +0 -0
  154. /package/{lib → src}/get/__tests__/generator/fixtures/incompatible-resource-names.test.fixture.json +0 -0
  155. /package/{lib → src}/get/__tests__/generator/fixtures/list-list-object.test.fixture.json +0 -0
  156. /package/{lib → src}/get/__tests__/generator/fixtures/list-list-string.test.fixture.json +0 -0
  157. /package/{lib → src}/get/__tests__/generator/fixtures/list-of-string-map.test.fixture.json +0 -0
  158. /package/{lib → src}/get/__tests__/generator/fixtures/map-of-map-of-string.test.fixture.json +0 -0
  159. /package/{lib → src}/get/__tests__/generator/fixtures/map-of-string-list.test.fixture.json +0 -0
  160. /package/{lib → src}/get/__tests__/generator/fixtures/markdown-description-with-code-blocks.test.fixture.json +0 -0
  161. /package/{lib → src}/get/__tests__/generator/fixtures/module-get-x.test.fixture.tf +0 -0
  162. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-1.test.fixture.tf +0 -0
  163. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-newline-2.test.fixture.tf +0 -0
  164. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-outputs.test.fixture.tf +0 -0
  165. /package/{lib → src}/get/__tests__/generator/fixtures/module-no-variable-type.test.fixture.tf +0 -0
  166. /package/{lib → src}/get/__tests__/generator/fixtures/module-with-star-default.test.fixture.tf +0 -0
  167. /package/{lib → src}/get/__tests__/generator/fixtures/name-conflict.test.fixture.json +0 -0
  168. /package/{lib → src}/get/__tests__/generator/fixtures/nested-type-without-attributes.test.fixture.json +0 -0
  169. /package/{lib → src}/get/__tests__/generator/fixtures/nested-types.test.fixture.json +0 -0
  170. /package/{lib → src}/get/__tests__/generator/fixtures/number-list.test.fixture.json +0 -0
  171. /package/{lib → src}/get/__tests__/generator/fixtures/number-map.test.fixture.json +0 -0
  172. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-boolean.test.fixture.json +0 -0
  173. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-dynamic.test.fixture.json +0 -0
  174. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-number.test.fixture.json +0 -0
  175. /package/{lib → src}/get/__tests__/generator/fixtures/primitive-string.test.fixture.json +0 -0
  176. /package/{lib → src}/get/__tests__/generator/fixtures/single-block-type.test.fixture.json +0 -0
  177. /package/{lib → src}/get/__tests__/generator/fixtures/string-list.test.fixture.json +0 -0
  178. /package/{lib → src}/get/__tests__/generator/fixtures/string-map.test.fixture.json +0 -0
  179. /package/{lib → src}/get/__tests__/generator/fixtures/stripe-schema.test.fixture.json +0 -0
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AttributesEmitter = void 0;
4
+ const models_1 = require("../models");
5
+ const custom_defaults_1 = require("../custom-defaults");
6
+ function titleCase(value) {
7
+ return value[0].toUpperCase() + value.slice(1);
8
+ }
9
+ class AttributesEmitter {
10
+ constructor(code) {
11
+ this.code = code;
12
+ }
13
+ emit(att, escapeReset, escapeInput) {
14
+ this.code.line();
15
+ this.code.line(`// ${att.terraformName} - computed: ${att.computed}, optional: ${att.isOptional}, required: ${att.isRequired}`);
16
+ const isStored = att.isStored;
17
+ const hasResetMethod = isStored && !att.isRequired && att.setterType._type !== "none";
18
+ const hasInputMethod = isStored && att.setterType._type !== "none";
19
+ const getterType = att.getterType;
20
+ if (getterType._type === "stored_class") {
21
+ this.code.line(`private ${att.storageName} = ${this.storedClassInit(att)};`);
22
+ }
23
+ else if (isStored) {
24
+ this.code.line(`private ${att.storageName}?: ${att.type.inputTypeDefinition}; `);
25
+ }
26
+ switch (getterType._type) {
27
+ case "plain":
28
+ this.code.openBlock(`public get ${att.name}()`);
29
+ this.code.line(`return ${this.determineGetAttCall(att)};`);
30
+ this.code.closeBlock();
31
+ break;
32
+ case "args":
33
+ this.code.openBlock(`public ${att.name}(${getterType.args})${getterType.returnType ? ": " + getterType.returnType : ""}`);
34
+ this.code.line(`return ${getterType.returnStatement};`);
35
+ this.code.closeBlock();
36
+ break;
37
+ case "stored_class":
38
+ this.code.openBlock(`public get ${att.name}()`);
39
+ this.code.line(`return this.${att.storageName};`);
40
+ this.code.closeBlock();
41
+ break;
42
+ }
43
+ const setterType = att.setterType;
44
+ switch (setterType._type) {
45
+ case "set":
46
+ this.code.openBlock(`public set ${att.name}(value: ${setterType.type})`);
47
+ this.code.line(`this.${att.storageName} = value;`);
48
+ this.code.closeBlock();
49
+ break;
50
+ case "put":
51
+ this.code.openBlock(`public put${titleCase(att.name)}(value: ${setterType.type})`);
52
+ this.code.line(`this.${att.storageName} = value;`);
53
+ this.code.closeBlock();
54
+ break;
55
+ case "stored_class":
56
+ this.code.openBlock(`public put${titleCase(att.name)}(value: ${setterType.type})`);
57
+ this.code.line(`this.${att.storageName}.internalValue = value;`);
58
+ this.code.closeBlock();
59
+ break;
60
+ }
61
+ if (hasResetMethod) {
62
+ this.code.openBlock(`public ${this.getResetName(att.name, escapeReset)}()`);
63
+ if (setterType._type === "stored_class") {
64
+ this.code.line(`this.${att.storageName}.internalValue = undefined;`);
65
+ }
66
+ else {
67
+ this.code.line(`this.${att.storageName} = undefined;`);
68
+ }
69
+ this.code.closeBlock();
70
+ }
71
+ if (hasInputMethod) {
72
+ this.code.line(`// Temporarily expose input value. Use with caution.`);
73
+ this.code.openBlock(`public get ${this.getInputName(att, escapeInput)}()`);
74
+ if (setterType._type === "stored_class") {
75
+ this.code.line(`return this.${att.storageName}.internalValue;`);
76
+ }
77
+ else {
78
+ this.code.line(`return this.${att.storageName};`);
79
+ }
80
+ this.code.closeBlock();
81
+ }
82
+ }
83
+ // returns an invocation of a stored class, e.g. 'new DeplotmentMetadataOutputReference(this, "metadata")'
84
+ storedClassInit(att) {
85
+ return att.type.getStoredClassInitializer(att.terraformName);
86
+ }
87
+ determineGetAttCall(att) {
88
+ if (att.isProvider) {
89
+ return `this.${att.storageName}`;
90
+ }
91
+ return att.type.getAttributeAccessFunction(att.terraformName);
92
+ }
93
+ needsInputEscape(att, attributes) {
94
+ return (attributes.find((a) => a.terraformName.match(`^${att.terraformName}_input$`)) instanceof models_1.AttributeModel);
95
+ }
96
+ getInputName(att, escape) {
97
+ if (escape) {
98
+ return `${att.name}TfInput`;
99
+ }
100
+ else {
101
+ return `${att.name}Input`;
102
+ }
103
+ }
104
+ needsResetEscape(att, attributes) {
105
+ return (attributes.find((a) => a.terraformName.match(`^reset_${att.terraformName}$`)) instanceof models_1.AttributeModel);
106
+ }
107
+ getResetName(name, escape) {
108
+ if (!name)
109
+ return name;
110
+ if (escape) {
111
+ return `resetTf${titleCase(name)}`;
112
+ }
113
+ else {
114
+ return `reset${titleCase(name)}`;
115
+ }
116
+ }
117
+ emitToHclTerraform(att, isStruct) {
118
+ var _a;
119
+ const type = att.type;
120
+ const context = isStruct ? "struct!" : "this";
121
+ const name = isStruct ? att.name : att.storageName;
122
+ const customDefault = custom_defaults_1.CUSTOM_DEFAULTS[att.terraformFullName];
123
+ const varReference = `${context}.${name}${!isStruct &&
124
+ type.isComplex &&
125
+ !att.isProvider &&
126
+ (((_a = type.struct) === null || _a === void 0 ? void 0 : _a.isClass) || att.getterType._type === "stored_class")
127
+ ? ".internalValue"
128
+ : ""}`;
129
+ const defaultCheck = customDefault !== undefined
130
+ ? `${varReference} === undefined ? ${customDefault} : `
131
+ : "";
132
+ const value = `${defaultCheck}${type.toHclTerraformFunction}(${varReference})`;
133
+ const isBlock = att.type.isComplex;
134
+ const tt = att.type.typeModelType;
135
+ this.code.open(`${att.terraformName}: {`);
136
+ this.code.line(`value: ${value},`);
137
+ this.code.line(`isBlock: ${isBlock},`);
138
+ this.code.line(`type: "${tt}",`);
139
+ this.code.line(`storageClassType: "${att.type.storedClassType}",`);
140
+ this.code.close("},");
141
+ }
142
+ emitToTerraform(att, isStruct) {
143
+ var _a;
144
+ const type = att.type;
145
+ const context = isStruct ? "struct!" : "this";
146
+ const name = isStruct ? att.name : att.storageName;
147
+ const customDefault = custom_defaults_1.CUSTOM_DEFAULTS[att.terraformFullName];
148
+ const varReference = `${context}.${name}${!isStruct &&
149
+ type.isComplex &&
150
+ !att.isProvider &&
151
+ (((_a = type.struct) === null || _a === void 0 ? void 0 : _a.isClass) || att.getterType._type === "stored_class")
152
+ ? ".internalValue"
153
+ : ""}`;
154
+ const defaultCheck = customDefault !== undefined
155
+ ? `${varReference} === undefined ? ${customDefault} : `
156
+ : "";
157
+ this.code.line(`${att.terraformName}: ${defaultCheck}${type.toTerraformFunction}(${varReference}),`);
158
+ }
159
+ }
160
+ exports.AttributesEmitter = AttributesEmitter;
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlcy1lbWl0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvZW1pdHRlci9hdHRyaWJ1dGVzLWVtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esc0NBQTJDO0FBQzNDLHdEQUFxRDtBQUVyRCxTQUFTLFNBQVMsQ0FBQyxLQUFhO0lBQzlCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQWEsaUJBQWlCO0lBQzVCLFlBQW9CLElBQWU7UUFBZixTQUFJLEdBQUosSUFBSSxDQUFXO0lBQUcsQ0FBQztJQUVoQyxJQUFJLENBQUMsR0FBbUIsRUFBRSxXQUFvQixFQUFFLFdBQW9CO1FBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osTUFBTSxHQUFHLENBQUMsYUFBYSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsZUFBZSxHQUFHLENBQUMsVUFBVSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FDaEgsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDOUIsTUFBTSxjQUFjLEdBQ2xCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLFFBQVEsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUM7UUFFbkUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUVsQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssY0FBYyxFQUFFLENBQUM7WUFDeEMsSUFB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LENBQUMsUUFBUTtZQUNULElBQUksQ0FBQyxTQUFTO1lBQ2QsQ0FBQyxHQUFHLENBQUMsVUFBVTtZQUNmLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLE9BQU8sS0FBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUM7WUFDL0QsQ0FBQyxDQUFDLGdCQUFnQjtZQUNsQixDQUFDLENBQUMsRUFDTixFQUFFLENBQUM7UUFDSCxNQUFNLFlBQVksR0FDaEIsYUFBYSxLQUFLLFNBQVM7WUFDekIsQ0FBQyxDQUFDLEdBQUcsWUFBWSxvQkFBb0IsYUFBYSxLQUFLO1lBQ3ZELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixHQUFHLEdBQUcsQ0FBQyxhQUFhLEtBQUssWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxZQUFZLElBQUksQ0FDckYsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRORCw4Q0FzTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ29kZU1ha2VyIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBDVVNUT01fREVGQVVMVFMgfSBmcm9tIFwiLi4vY3VzdG9tLWRlZmF1bHRzXCI7XG5cbmZ1bmN0aW9uIHRpdGxlQ2FzZSh2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB2YWx1ZVswXS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVzRW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29kZTogQ29kZU1ha2VyKSB7fVxuXG4gIHB1YmxpYyBlbWl0KGF0dDogQXR0cmlidXRlTW9kZWwsIGVzY2FwZVJlc2V0OiBib29sZWFuLCBlc2NhcGVJbnB1dDogYm9vbGVhbikge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgLy8gJHthdHQudGVycmFmb3JtTmFtZX0gLSBjb21wdXRlZDogJHthdHQuY29tcHV0ZWR9LCBvcHRpb25hbDogJHthdHQuaXNPcHRpb25hbH0sIHJlcXVpcmVkOiAke2F0dC5pc1JlcXVpcmVkfWAsXG4gICAgKTtcblxuICAgIGNvbnN0IGlzU3RvcmVkID0gYXR0LmlzU3RvcmVkO1xuICAgIGNvbnN0IGhhc1Jlc2V0TWV0aG9kID1cbiAgICAgIGlzU3RvcmVkICYmICFhdHQuaXNSZXF1aXJlZCAmJiBhdHQuc2V0dGVyVHlwZS5fdHlwZSAhPT0gXCJub25lXCI7XG4gICAgY29uc3QgaGFzSW5wdXRNZXRob2QgPSBpc1N0b3JlZCAmJiBhdHQuc2V0dGVyVHlwZS5fdHlwZSAhPT0gXCJub25lXCI7XG5cbiAgICBjb25zdCBnZXR0ZXJUeXBlID0gYXR0LmdldHRlclR5cGU7XG5cbiAgICBpZiAoZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBwcml2YXRlICR7YXR0LnN0b3JhZ2VOYW1lfSA9ICR7dGhpcy5zdG9yZWRDbGFzc0luaXQoYXR0KX07YCxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpc1N0b3JlZCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBwcml2YXRlICR7YXR0LnN0b3JhZ2VOYW1lfT86ICR7YXR0LnR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn07IGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZ2V0dGVyVHlwZS5fdHlwZSkge1xuICAgICAgY2FzZSBcInBsYWluXCI6XG4gICAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBnZXQgJHthdHQubmFtZX0oKWApO1xuICAgICAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuICR7dGhpcy5kZXRlcm1pbmVHZXRBdHRDYWxsKGF0dCl9O2ApO1xuICAgICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImFyZ3NcIjpcbiAgICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgICAgICBgcHVibGljICR7YXR0Lm5hbWV9KCR7Z2V0dGVyVHlwZS5hcmdzfSkke1xuICAgICAgICAgICAgZ2V0dGVyVHlwZS5yZXR1cm5UeXBlID8gXCI6IFwiICsgZ2V0dGVyVHlwZS5yZXR1cm5UeXBlIDogXCJcIlxuICAgICAgICAgIH1gLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuICR7Z2V0dGVyVHlwZS5yZXR1cm5TdGF0ZW1lbnR9O2ApO1xuICAgICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInN0b3JlZF9jbGFzc1wiOlxuICAgICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwdWJsaWMgZ2V0ICR7YXR0Lm5hbWV9KClgKTtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfTtgKTtcbiAgICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0dGVyVHlwZSA9IGF0dC5zZXR0ZXJUeXBlO1xuXG4gICAgc3dpdGNoIChzZXR0ZXJUeXBlLl90eXBlKSB7XG4gICAgICBjYXNlIFwic2V0XCI6XG4gICAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgICAgYHB1YmxpYyBzZXQgJHthdHQubmFtZX0odmFsdWU6ICR7c2V0dGVyVHlwZS50eXBlfSlgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvZGUubGluZShgdGhpcy4ke2F0dC5zdG9yYWdlTmFtZX0gPSB2YWx1ZTtgKTtcbiAgICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJwdXRcIjpcbiAgICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgICAgICBgcHVibGljIHB1dCR7dGl0bGVDYXNlKGF0dC5uYW1lKX0odmFsdWU6ICR7c2V0dGVyVHlwZS50eXBlfSlgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvZGUubGluZShgdGhpcy4ke2F0dC5zdG9yYWdlTmFtZX0gPSB2YWx1ZTtgKTtcbiAgICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzdG9yZWRfY2xhc3NcIjpcbiAgICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgICAgICBgcHVibGljIHB1dCR7dGl0bGVDYXNlKGF0dC5uYW1lKX0odmFsdWU6ICR7c2V0dGVyVHlwZS50eXBlfSlgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvZGUubGluZShgdGhpcy4ke2F0dC5zdG9yYWdlTmFtZX0uaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO2ApO1xuICAgICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaGFzUmVzZXRNZXRob2QpIHtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgIGBwdWJsaWMgJHt0aGlzLmdldFJlc2V0TmFtZShhdHQubmFtZSwgZXNjYXBlUmVzZXQpfSgpYCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzZXR0ZXJUeXBlLl90eXBlID09PSBcInN0b3JlZF9jbGFzc1wiKSB7XG4gICAgICAgIHRoaXMuY29kZS5saW5lKGB0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfS5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9ID0gdW5kZWZpbmVkO2ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIGlmIChoYXNJbnB1dE1ldGhvZCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5gKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgIGBwdWJsaWMgZ2V0ICR7dGhpcy5nZXRJbnB1dE5hbWUoYXR0LCBlc2NhcGVJbnB1dCl9KClgLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNldHRlclR5cGUuX3R5cGUgPT09IFwic3RvcmVkX2NsYXNzXCIpIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfS5pbnRlcm5hbFZhbHVlO2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfTtgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm5zIGFuIGludm9jYXRpb24gb2YgYSBzdG9yZWQgY2xhc3MsIGUuZy4gJ25ldyBEZXBsb3RtZW50TWV0YWRhdGFPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJtZXRhZGF0YVwiKSdcbiAgcHJpdmF0ZSBzdG9yZWRDbGFzc0luaXQoYXR0OiBBdHRyaWJ1dGVNb2RlbCkge1xuICAgIHJldHVybiBhdHQudHlwZS5nZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKGF0dC50ZXJyYWZvcm1OYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXRlcm1pbmVHZXRBdHRDYWxsKGF0dDogQXR0cmlidXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIGlmIChhdHQuaXNQcm92aWRlcikge1xuICAgICAgcmV0dXJuIGB0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dC50eXBlLmdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKGF0dC50ZXJyYWZvcm1OYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBuZWVkc0lucHV0RXNjYXBlKFxuICAgIGF0dDogQXR0cmlidXRlTW9kZWwsXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF0dHJpYnV0ZXMuZmluZCgoYSkgPT5cbiAgICAgICAgYS50ZXJyYWZvcm1OYW1lLm1hdGNoKGBeJHthdHQudGVycmFmb3JtTmFtZX1faW5wdXQkYCksXG4gICAgICApIGluc3RhbmNlb2YgQXR0cmlidXRlTW9kZWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldElucHV0TmFtZShhdHQ6IEF0dHJpYnV0ZU1vZGVsLCBlc2NhcGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoZXNjYXBlKSB7XG4gICAgICByZXR1cm4gYCR7YXR0Lm5hbWV9VGZJbnB1dGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHthdHQubmFtZX1JbnB1dGA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5lZWRzUmVzZXRFc2NhcGUoXG4gICAgYXR0OiBBdHRyaWJ1dGVNb2RlbCxcbiAgICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0cmlidXRlcy5maW5kKChhKSA9PlxuICAgICAgICBhLnRlcnJhZm9ybU5hbWUubWF0Y2goYF5yZXNldF8ke2F0dC50ZXJyYWZvcm1OYW1lfSRgKSxcbiAgICAgICkgaW5zdGFuY2VvZiBBdHRyaWJ1dGVNb2RlbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzZXROYW1lKG5hbWU6IHN0cmluZywgZXNjYXBlOiBib29sZWFuKSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbmFtZTtcbiAgICBpZiAoZXNjYXBlKSB7XG4gICAgICByZXR1cm4gYHJlc2V0VGYke3RpdGxlQ2FzZShuYW1lKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYHJlc2V0JHt0aXRsZUNhc2UobmFtZSl9YDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW1pdFRvSGNsVGVycmFmb3JtKGF0dDogQXR0cmlidXRlTW9kZWwsIGlzU3RydWN0OiBib29sZWFuKSB7XG4gICAgY29uc3QgdHlwZSA9IGF0dC50eXBlO1xuICAgIGNvbnN0IGNvbnRleHQgPSBpc1N0cnVjdCA/IFwic3RydWN0IVwiIDogXCJ0aGlzXCI7XG4gICAgY29uc3QgbmFtZSA9IGlzU3RydWN0ID8gYXR0Lm5hbWUgOiBhdHQuc3RvcmFnZU5hbWU7XG4gICAgY29uc3QgY3VzdG9tRGVmYXVsdCA9IENVU1RPTV9ERUZBVUxUU1thdHQudGVycmFmb3JtRnVsbE5hbWVdO1xuXG4gICAgY29uc3QgdmFyUmVmZXJlbmNlID0gYCR7Y29udGV4dH0uJHtuYW1lfSR7XG4gICAgICAhaXNTdHJ1Y3QgJiZcbiAgICAgIHR5cGUuaXNDb21wbGV4ICYmXG4gICAgICAhYXR0LmlzUHJvdmlkZXIgJiZcbiAgICAgICh0eXBlLnN0cnVjdD8uaXNDbGFzcyB8fCBhdHQuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIilcbiAgICAgICAgPyBcIi5pbnRlcm5hbFZhbHVlXCJcbiAgICAgICAgOiBcIlwiXG4gICAgfWA7XG4gICAgY29uc3QgZGVmYXVsdENoZWNrID1cbiAgICAgIGN1c3RvbURlZmF1bHQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGAke3ZhclJlZmVyZW5jZX0gPT09IHVuZGVmaW5lZCA/ICR7Y3VzdG9tRGVmYXVsdH0gOiBgXG4gICAgICAgIDogXCJcIjtcblxuICAgIGNvbnN0IHZhbHVlID0gYCR7ZGVmYXVsdENoZWNrfSR7dHlwZS50b0hjbFRlcnJhZm9ybUZ1bmN0aW9ufSgke3ZhclJlZmVyZW5jZX0pYDtcbiAgICBjb25zdCBpc0Jsb2NrID0gYXR0LnR5cGUuaXNDb21wbGV4O1xuICAgIGNvbnN0IHR0ID0gYXR0LnR5cGUudHlwZU1vZGVsVHlwZTtcblxuICAgIHRoaXMuY29kZS5vcGVuKGAke2F0dC50ZXJyYWZvcm1OYW1lfToge2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGB2YWx1ZTogJHt2YWx1ZX0sYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYGlzQmxvY2s6ICR7aXNCbG9ja30sYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHR5cGU6IFwiJHt0dH1cIixgKTtcbiAgICB0aGlzLmNvZGUubGluZShgc3RvcmFnZUNsYXNzVHlwZTogXCIke2F0dC50eXBlLnN0b3JlZENsYXNzVHlwZX1cIixgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2UoXCJ9LFwiKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0VG9UZXJyYWZvcm0oYXR0OiBBdHRyaWJ1dGVNb2RlbCwgaXNTdHJ1Y3Q6IGJvb2xlYW4pIHtcbiAgICBjb25zdCB0eXBlID0gYXR0LnR5cGU7XG4gICAgY29uc3QgY29udGV4dCA9IGlzU3RydWN0ID8gXCJzdHJ1Y3QhXCIgOiBcInRoaXNcIjtcbiAgICBjb25zdCBuYW1lID0gaXNTdHJ1Y3QgPyBhdHQubmFtZSA6IGF0dC5zdG9yYWdlTmFtZTtcbiAgICBjb25zdCBjdXN0b21EZWZhdWx0ID0gQ1VTVE9NX0RFRkFVTFRTW2F0dC50ZXJyYWZvcm1GdWxsTmFtZV07XG5cbiAgICBjb25zdCB2YXJSZWZlcmVuY2UgPSBgJHtjb250ZXh0fS4ke25hbWV9JHtcbiAgICAgICFpc1N0cnVjdCAmJlxuICAgICAgdHlwZS5pc0NvbXBsZXggJiZcbiAgICAgICFhdHQuaXNQcm92aWRlciAmJlxuICAgICAgKHR5cGUuc3RydWN0Py5pc0NsYXNzIHx8IGF0dC5nZXR0ZXJUeXBlLl90eXBlID09PSBcInN0b3JlZF9jbGFzc1wiKVxuICAgICAgICA/IFwiLmludGVybmFsVmFsdWVcIlxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgICBjb25zdCBkZWZhdWx0Q2hlY2sgPVxuICAgICAgY3VzdG9tRGVmYXVsdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gYCR7dmFyUmVmZXJlbmNlfSA9PT0gdW5kZWZpbmVkID8gJHtjdXN0b21EZWZhdWx0fSA6IGBcbiAgICAgICAgOiBcIlwiO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgJHthdHQudGVycmFmb3JtTmFtZX06ICR7ZGVmYXVsdENoZWNrfSR7dHlwZS50b1RlcnJhZm9ybUZ1bmN0aW9ufSgke3ZhclJlZmVyZW5jZX0pLGAsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -19,4 +19,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
19
19
  __exportStar(require("./attributes-emitter"), exports);
20
20
  __exportStar(require("./resource-emitter"), exports);
21
21
  __exportStar(require("./struct-emitter"), exports);
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1REFBcUM7QUFDckMscURBQW1DO0FBQ25DLG1EQUFpQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5leHBvcnQgKiBmcm9tIFwiLi9hdHRyaWJ1dGVzLWVtaXR0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc291cmNlLWVtaXR0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cnVjdC1lbWl0dGVyXCI7XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9lbWl0dGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHVEQUFxQztBQUNyQyxxREFBbUM7QUFDbkMsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmV4cG9ydCAqIGZyb20gXCIuL2F0dHJpYnV0ZXMtZW1pdHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzb3VyY2UtZW1pdHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RydWN0LWVtaXR0ZXJcIjtcbiJdfQ==
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceEmitter = void 0;
4
+ const attributes_emitter_1 = require("./attributes-emitter");
5
+ const sanitized_comments_1 = require("../sanitized-comments");
6
+ class ResourceEmitter {
7
+ constructor(code) {
8
+ this.code = code;
9
+ this.attributesEmitter = new attributes_emitter_1.AttributesEmitter(this.code);
10
+ }
11
+ emit(resource) {
12
+ this.code.line();
13
+ const comment = (0, sanitized_comments_1.sanitizedComment)(this.code);
14
+ comment.line(`Represents a {@link ${resource.linkToDocs} ${resource.terraformResourceType}}`);
15
+ comment.end();
16
+ this.code.openBlock(`export class ${resource.className} extends cdktn.${resource.parentClassName}`);
17
+ this.emitHeader("STATIC PROPERTIES");
18
+ this.emitStaticProperties(resource);
19
+ this.emitHeader("STATIC Methods");
20
+ this.emitStaticMethods(resource);
21
+ this.emitHeader("INITIALIZER");
22
+ this.emitInitializer(resource);
23
+ this.emitHeader("ATTRIBUTES");
24
+ this.emitResourceAttributes(resource);
25
+ // synthesis
26
+ this.emitHeader("SYNTHESIS");
27
+ this.emitResourceSynthesis(resource);
28
+ this.emitHclResourceSynthesis(resource);
29
+ this.code.closeBlock(); // construct
30
+ }
31
+ emitHeader(title) {
32
+ this.code.line();
33
+ this.code.line("// " + "=".repeat(title.length));
34
+ this.code.line(`// ${title}`);
35
+ this.code.line("// " + "=".repeat(title.length));
36
+ }
37
+ emitStaticProperties(resource) {
38
+ this.code.line(`public static readonly tfResourceType = "${resource.terraformResourceType}";`);
39
+ }
40
+ emitStaticMethods(resource) {
41
+ const comment = (0, sanitized_comments_1.sanitizedComment)(this.code);
42
+ comment.line(`Generates CDKTN code for importing a ${resource.className} resource upon running "cdktn plan <stack-name>"`);
43
+ comment.line(`@param scope The scope in which to define this construct`);
44
+ comment.line(`@param importToId The construct id used in the generated config for the ${resource.className} to import`);
45
+ comment.line(`@param importFromId The id of the existing ${resource.className} that should be imported. Refer to the {@link ${resource.linkToDocs}#import import section} in the documentation of this resource for the id to use`);
46
+ comment.line(`@param provider? Optional instance of the provider where the ${resource.className} to import is found`);
47
+ comment.end();
48
+ this.code.line(`public static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktn.TerraformProvider) {
49
+ return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "${resource.terraformResourceType}", importId: importFromId, provider });
50
+ }`);
51
+ }
52
+ emitHclResourceSynthesis(resource) {
53
+ this.code.line();
54
+ this.code.openBlock(`protected synthesizeHclAttributes(): { [name: string]: any }`);
55
+ this.code.open(`const attrs = {`);
56
+ for (const att of resource.synthesizableAttributes) {
57
+ this.attributesEmitter.emitToHclTerraform(att, false);
58
+ }
59
+ this.code.close(`};`);
60
+ if (resource.synthesizableAttributes.length > 0) {
61
+ this.code.line();
62
+ this.code.line(`// remove undefined attributes`);
63
+ this.code.line(`return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined ))`);
64
+ }
65
+ else {
66
+ this.code.line(`return attrs;`);
67
+ }
68
+ this.code.closeBlock();
69
+ }
70
+ emitResourceSynthesis(resource) {
71
+ this.code.line();
72
+ this.code.openBlock(`protected synthesizeAttributes(): { [name: string]: any }`);
73
+ this.code.open(`return {`);
74
+ for (const att of resource.synthesizableAttributes) {
75
+ this.attributesEmitter.emitToTerraform(att, false);
76
+ }
77
+ this.code.close(`};`);
78
+ this.code.closeBlock();
79
+ }
80
+ emitResourceAttributes(resource) {
81
+ for (const att of resource.attributes) {
82
+ this.attributesEmitter.emit(att, this.attributesEmitter.needsResetEscape(att, resource.attributes), this.attributesEmitter.needsInputEscape(att, resource.attributes));
83
+ }
84
+ }
85
+ emitInitializer(resource) {
86
+ this.code.line();
87
+ const comment = (0, sanitized_comments_1.sanitizedComment)(this.code);
88
+ comment.line(`Create a new {@link ${resource.linkToDocs} ${resource.terraformResourceType}} ${resource.isDataSource ? "Data Source" : "Resource"}`);
89
+ comment.line(``);
90
+ comment.line(`@param scope The scope in which to define this construct`);
91
+ comment.line(`@param id The scoped construct ID. Must be unique amongst siblings in the same scope`);
92
+ comment.line(`@param options ${resource.configStruct.attributeType}`);
93
+ comment.end();
94
+ this.code.openBlock(`public constructor(scope: Construct, id: string, config: ${resource.configStruct.attributeType})`);
95
+ resource.isProvider
96
+ ? this.emitProviderSuper(resource)
97
+ : this.emitResourceSuper(resource);
98
+ // initialize config properties
99
+ for (const att of resource.configStruct.assignableAttributes) {
100
+ if (att.setterType._type === "stored_class") {
101
+ this.code.line(`this.${att.storageName}.internalValue = config.${att.name};`);
102
+ }
103
+ else {
104
+ this.code.line(`this.${att.storageName} = config.${att.name};`);
105
+ }
106
+ }
107
+ this.code.closeBlock();
108
+ }
109
+ emitResourceSuper(resource) {
110
+ this.code.open(`super(scope, id, {`);
111
+ this.code.line(`terraformResourceType: '${resource.terraformResourceType}',`);
112
+ this.emitTerraformGeneratorMetadata(resource);
113
+ this.code.line(`provider: config.provider,`);
114
+ this.code.line(`dependsOn: config.dependsOn,`);
115
+ this.code.line(`count: config.count,`);
116
+ this.code.line(`lifecycle: config.lifecycle,`);
117
+ this.code.line(`provisioners: config.provisioners,`);
118
+ this.code.line(`connection: config.connection,`);
119
+ this.code.line(`forEach: config.forEach`);
120
+ this.code.close(`});`);
121
+ }
122
+ emitProviderSuper(resource) {
123
+ this.code.open(`super(scope, id, {`);
124
+ this.code.line(`terraformResourceType: '${resource.terraformResourceType}',`);
125
+ this.emitTerraformGeneratorMetadata(resource);
126
+ this.code.line(`terraformProviderSource: '${resource.terraformProviderSource}'`);
127
+ this.code.close(`});`);
128
+ }
129
+ emitTerraformGeneratorMetadata(resource) {
130
+ this.code.open(`terraformGeneratorMetadata: {`);
131
+ this.code.line(`providerName: '${resource.provider}'${resource.providerVersion || resource.providerVersionConstraint
132
+ ? ","
133
+ : ""}`);
134
+ if (resource.providerVersion) {
135
+ this.code.line(`providerVersion: '${resource.providerVersion}'${resource.providerVersionConstraint ? "," : ""}`);
136
+ }
137
+ if (resource.providerVersionConstraint) {
138
+ this.code.line(`providerVersionConstraint: '${resource.providerVersionConstraint}'`);
139
+ }
140
+ this.code.close(`},`);
141
+ }
142
+ }
143
+ exports.ResourceEmitter = ResourceEmitter;
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZXQvZ2VuZXJhdG9yL2VtaXR0ZXIvcmVzb3VyY2UtZW1pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSw2REFBeUQ7QUFDekQsOERBQXlEO0FBRXpELE1BQWEsZUFBZTtJQUcxQixZQUE2QixJQUFlO1FBQWYsU0FBSSxHQUFKLElBQUksQ0FBVztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxzQ0FBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLElBQUksQ0FBQyxRQUF1QjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWdCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUJBQXVCLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLHFCQUFxQixHQUFHLENBQ2hGLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsZ0JBQWdCLFFBQVEsQ0FBQyxTQUFTLGtCQUFrQixRQUFRLENBQUMsZUFBZSxFQUFFLENBQy9FLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEs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QkFBcUIsSUFBSSxDQUM5RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDZCQUE2QixRQUFRLENBQUMsdUJBQXVCLEdBQUcsQ0FDakUsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxRQUF1QjtRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLGtCQUFrQixRQUFRLENBQUMsUUFBUSxJQUNqQyxRQUFRLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyx5QkFBeUI7WUFDNUQsQ0FBQyxDQUFDLEdBQUc7WUFDTCxDQUFDLENBQUMsRUFDTixFQUFFLENBQ0gsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLHFCQUFxQixRQUFRLENBQUMsZUFBZSxJQUMzQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDN0MsRUFBRSxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWiwrQkFBK0IsUUFBUSxDQUFDLHlCQUF5QixHQUFHLENBQ3JFLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBeE5ELDBDQXdOQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgQXR0cmlidXRlc0VtaXR0ZXIgfSBmcm9tIFwiLi9hdHRyaWJ1dGVzLWVtaXR0ZXJcIjtcbmltcG9ydCB7IHNhbml0aXplZENvbW1lbnQgfSBmcm9tIFwiLi4vc2FuaXRpemVkLWNvbW1lbnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUVtaXR0ZXIge1xuICBhdHRyaWJ1dGVzRW1pdHRlcjogQXR0cmlidXRlc0VtaXR0ZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNFbWl0dGVyID0gbmV3IEF0dHJpYnV0ZXNFbWl0dGVyKHRoaXMuY29kZSk7XG4gIH1cblxuICBwdWJsaWMgZW1pdChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgY29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb21tZW50LmxpbmUoXG4gICAgICBgUmVwcmVzZW50cyBhIHtAbGluayAke3Jlc291cmNlLmxpbmtUb0RvY3N9ICR7cmVzb3VyY2UudGVycmFmb3JtUmVzb3VyY2VUeXBlfX1gLFxuICAgICk7XG4gICAgY29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3Jlc291cmNlLmNsYXNzTmFtZX0gZXh0ZW5kcyBjZGt0bi4ke3Jlc291cmNlLnBhcmVudENsYXNzTmFtZX1gLFxuICAgICk7XG5cbiAgICB0aGlzLmVtaXRIZWFkZXIoXCJTVEFUSUMgUFJPUEVSVElFU1wiKTtcbiAgICB0aGlzLmVtaXRTdGF0aWNQcm9wZXJ0aWVzKHJlc291cmNlKTtcblxuICAgIHRoaXMuZW1pdEhlYWRlcihcIlNUQVRJQyBNZXRob2RzXCIpO1xuICAgIHRoaXMuZW1pdFN0YXRpY01ldGhvZHMocmVzb3VyY2UpO1xuXG4gICAgdGhpcy5lbWl0SGVhZGVyKFwiSU5JVElBTElaRVJcIik7XG4gICAgdGhpcy5lbWl0SW5pdGlhbGl6ZXIocmVzb3VyY2UpO1xuXG4gICAgdGhpcy5lbWl0SGVhZGVyKFwiQVRUUklCVVRFU1wiKTtcbiAgICB0aGlzLmVtaXRSZXNvdXJjZUF0dHJpYnV0ZXMocmVzb3VyY2UpO1xuXG4gICAgLy8gc3ludGhlc2lzXG4gICAgdGhpcy5lbWl0SGVhZGVyKFwiU1lOVEhFU0lTXCIpO1xuICAgIHRoaXMuZW1pdFJlc291cmNlU3ludGhlc2lzKHJlc291cmNlKTtcbiAgICB0aGlzLmVtaXRIY2xSZXNvdXJjZVN5bnRoZXNpcyhyZXNvdXJjZSk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpOyAvLyBjb25zdHJ1Y3RcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEhlYWRlcih0aXRsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIFwiICsgXCI9XCIucmVwZWF0KHRpdGxlLmxlbmd0aCkpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyAke3RpdGxlfWApO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gXCIgKyBcIj1cIi5yZXBlYXQodGl0bGUubGVuZ3RoKSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTdGF0aWNQcm9wZXJ0aWVzKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgcHVibGljIHN0YXRpYyByZWFkb25seSB0ZlJlc291cmNlVHlwZSA9IFwiJHtyZXNvdXJjZS50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9XCI7YCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3RhdGljTWV0aG9kcyhyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgYEdlbmVyYXRlcyBDREtUTiBjb2RlIGZvciBpbXBvcnRpbmcgYSAke3Jlc291cmNlLmNsYXNzTmFtZX0gcmVzb3VyY2UgdXBvbiBydW5uaW5nIFwiY2RrdG4gcGxhbiA8c3RhY2stbmFtZT5cImAsXG4gICAgKTtcbiAgICBjb21tZW50LmxpbmUoYEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0YCk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgYEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlICR7cmVzb3VyY2UuY2xhc3NOYW1lfSB0byBpbXBvcnRgLFxuICAgICk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgYEBwYXJhbSBpbXBvcnRGcm9tSWQgVGhlIGlkIG9mIHRoZSBleGlzdGluZyAke3Jlc291cmNlLmNsYXNzTmFtZX0gdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSNpbXBvcnQgaW1wb3J0IHNlY3Rpb259IGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgcmVzb3VyY2UgZm9yIHRoZSBpZCB0byB1c2VgLFxuICAgICk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgYEBwYXJhbSBwcm92aWRlcj8gT3B0aW9uYWwgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdoZXJlIHRoZSAke3Jlc291cmNlLmNsYXNzTmFtZX0gdG8gaW1wb3J0IGlzIGZvdW5kYCxcbiAgICApO1xuICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydChzY29wZTogQ29uc3RydWN0LCBpbXBvcnRUb0lkOiBzdHJpbmcsIGltcG9ydEZyb21JZDogc3RyaW5nLCBwcm92aWRlcj86IGNka3RuLlRlcnJhZm9ybVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgY2RrdG4uSW1wb3J0YWJsZVJlc291cmNlKHNjb3BlLCBpbXBvcnRUb0lkLCB7IHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCIke3Jlc291cmNlLnRlcnJhZm9ybVJlc291cmNlVHlwZX1cIiwgaW1wb3J0SWQ6IGltcG9ydEZyb21JZCwgcHJvdmlkZXIgfSk7XG4gICAgICB9YCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SGNsUmVzb3VyY2VTeW50aGVzaXMocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5vcGVuKGBjb25zdCBhdHRycyA9IHtgKTtcblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHJlc291cmNlLnN5bnRoZXNpemFibGVBdHRyaWJ1dGVzKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZXNFbWl0dGVyLmVtaXRUb0hjbFRlcnJhZm9ybShhdHQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2UoYH07YCk7XG5cbiAgICBpZiAocmVzb3VyY2Uuc3ludGhlc2l6YWJsZUF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgKSlgLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiBhdHRycztgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VTeW50aGVzaXMocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5vcGVuKGByZXR1cm4ge2ApO1xuXG4gICAgZm9yIChjb25zdCBhdHQgb2YgcmVzb3VyY2Uuc3ludGhlc2l6YWJsZUF0dHJpYnV0ZXMpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlc0VtaXR0ZXIuZW1pdFRvVGVycmFmb3JtKGF0dCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5jbG9zZShgfTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VBdHRyaWJ1dGVzKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgZm9yIChjb25zdCBhdHQgb2YgcmVzb3VyY2UuYXR0cmlidXRlcykge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzRW1pdHRlci5lbWl0KFxuICAgICAgICBhdHQsXG4gICAgICAgIHRoaXMuYXR0cmlidXRlc0VtaXR0ZXIubmVlZHNSZXNldEVzY2FwZShhdHQsIHJlc291cmNlLmF0dHJpYnV0ZXMpLFxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNFbWl0dGVyLm5lZWRzSW5wdXRFc2NhcGUoYXR0LCByZXNvdXJjZS5hdHRyaWJ1dGVzKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW5pdGlhbGl6ZXIocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgYENyZWF0ZSBhIG5ldyB7QGxpbmsgJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSAke1xuICAgICAgICByZXNvdXJjZS50ZXJyYWZvcm1SZXNvdXJjZVR5cGVcbiAgICAgIH19ICR7cmVzb3VyY2UuaXNEYXRhU291cmNlID8gXCJEYXRhIFNvdXJjZVwiIDogXCJSZXNvdXJjZVwifWAsXG4gICAgKTtcbiAgICBjb21tZW50LmxpbmUoYGApO1xuICAgIGNvbW1lbnQubGluZShgQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RgKTtcbiAgICBjb21tZW50LmxpbmUoXG4gICAgICBgQHBhcmFtIGlkIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHNpYmxpbmdzIGluIHRoZSBzYW1lIHNjb3BlYCxcbiAgICApO1xuICAgIGNvbW1lbnQubGluZShgQHBhcmFtIG9wdGlvbnMgJHtyZXNvdXJjZS5jb25maWdTdHJ1Y3QuYXR0cmlidXRlVHlwZX1gKTtcbiAgICBjb21tZW50LmVuZCgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogJHtyZXNvdXJjZS5jb25maWdTdHJ1Y3QuYXR0cmlidXRlVHlwZX0pYCxcbiAgICApO1xuXG4gICAgcmVzb3VyY2UuaXNQcm92aWRlclxuICAgICAgPyB0aGlzLmVtaXRQcm92aWRlclN1cGVyKHJlc291cmNlKVxuICAgICAgOiB0aGlzLmVtaXRSZXNvdXJjZVN1cGVyKHJlc291cmNlKTtcblxuICAgIC8vIGluaXRpYWxpemUgY29uZmlnIHByb3BlcnRpZXNcbiAgICBmb3IgKGNvbnN0IGF0dCBvZiByZXNvdXJjZS5jb25maWdTdHJ1Y3QuYXNzaWduYWJsZUF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChhdHQuc2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgdGhpcy4ke2F0dC5zdG9yYWdlTmFtZX0uaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy4ke2F0dC5uYW1lfTtgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9ID0gY29uZmlnLiR7YXR0Lm5hbWV9O2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVN1cGVyKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgdGhpcy5jb2RlLm9wZW4oYHN1cGVyKHNjb3BlLCBpZCwge2ApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHRlcnJhZm9ybVJlc291cmNlVHlwZTogJyR7cmVzb3VyY2UudGVycmFmb3JtUmVzb3VyY2VUeXBlfScsYCxcbiAgICApO1xuICAgIHRoaXMuZW1pdFRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhKHJlc291cmNlKTtcbiAgICB0aGlzLmNvZGUubGluZShgcHJvdmlkZXI6IGNvbmZpZy5wcm92aWRlcixgKTtcbiAgICB0aGlzLmNvZGUubGluZShgZGVwZW5kc09uOiBjb25maWcuZGVwZW5kc09uLGApO1xuICAgIHRoaXMuY29kZS5saW5lKGBjb3VudDogY29uZmlnLmNvdW50LGApO1xuICAgIHRoaXMuY29kZS5saW5lKGBsaWZlY3ljbGU6IGNvbmZpZy5saWZlY3ljbGUsYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHByb3Zpc2lvbmVyczogY29uZmlnLnByb3Zpc2lvbmVycyxgKTtcbiAgICB0aGlzLmNvZGUubGluZShgY29ubmVjdGlvbjogY29uZmlnLmNvbm5lY3Rpb24sYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYGZvckVhY2g6IGNvbmZpZy5mb3JFYWNoYCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlKGB9KTtgKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFByb3ZpZGVyU3VwZXIocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICB0aGlzLmNvZGUub3Blbihgc3VwZXIoc2NvcGUsIGlkLCB7YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiAnJHtyZXNvdXJjZS50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9JyxgLFxuICAgICk7XG4gICAgdGhpcy5lbWl0VGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGEocmVzb3VyY2UpO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHRlcnJhZm9ybVByb3ZpZGVyU291cmNlOiAnJHtyZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZX0nYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZShgfSk7YCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRUZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5vcGVuKGB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge2ApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHByb3ZpZGVyTmFtZTogJyR7cmVzb3VyY2UucHJvdmlkZXJ9JyR7XG4gICAgICAgIHJlc291cmNlLnByb3ZpZGVyVmVyc2lvbiB8fCByZXNvdXJjZS5wcm92aWRlclZlcnNpb25Db25zdHJhaW50XG4gICAgICAgICAgPyBcIixcIlxuICAgICAgICAgIDogXCJcIlxuICAgICAgfWAsXG4gICAgKTtcblxuICAgIGlmIChyZXNvdXJjZS5wcm92aWRlclZlcnNpb24pIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcHJvdmlkZXJWZXJzaW9uOiAnJHtyZXNvdXJjZS5wcm92aWRlclZlcnNpb259JyR7XG4gICAgICAgICAgcmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA/IFwiLFwiIDogXCJcIlxuICAgICAgICB9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc291cmNlLnByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJyR7cmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlKGB9LGApO1xuICB9XG59XG4iXX0=