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