@cdktn/cli-core 0.23.0-pre.36 → 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 (163) hide show
  1. package/build/lib/cdktf-config.d.ts.map +1 -0
  2. package/build/lib/cdktf-config.js +108 -0
  3. package/build/lib/cdktf-project-io-handler.d.ts.map +1 -0
  4. package/build/lib/cdktf-project-io-handler.js +84 -0
  5. package/build/lib/cdktf-project.d.ts.map +1 -0
  6. package/build/lib/cdktf-project.js +371 -0
  7. package/{src → build}/lib/cdktf-stack.d.ts +1 -0
  8. package/build/lib/cdktf-stack.d.ts.map +1 -0
  9. package/build/lib/cdktf-stack.js +386 -0
  10. package/build/lib/convert.d.ts.map +1 -0
  11. package/build/lib/convert.js +51 -0
  12. package/build/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
  13. package/build/lib/dependencies/cdktf-config-manager.js +36 -0
  14. package/build/lib/dependencies/dependency-manager.d.ts.map +1 -0
  15. package/build/lib/dependencies/dependency-manager.js +393 -0
  16. package/build/lib/dependencies/package-manager.d.ts.map +1 -0
  17. package/build/lib/dependencies/package-manager.js +581 -0
  18. package/build/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
  19. package/build/lib/dependencies/prebuilt-providers.js +221 -0
  20. package/build/lib/dependencies/registry-api.d.ts.map +1 -0
  21. package/build/lib/dependencies/registry-api.js +77 -0
  22. package/build/lib/dependencies/version-constraints.d.ts.map +1 -0
  23. package/build/lib/dependencies/version-constraints.js +95 -0
  24. package/build/lib/error-reporting.d.ts.map +1 -0
  25. package/build/lib/error-reporting.js +133 -0
  26. package/build/lib/errors.d.ts.map +1 -0
  27. package/build/lib/errors.js +10 -0
  28. package/build/lib/execution-logs.d.ts.map +1 -0
  29. package/build/lib/execution-logs.js +47 -0
  30. package/build/lib/get.d.ts.map +1 -0
  31. package/build/lib/get.js +90 -0
  32. package/build/lib/helpers/stack-helpers.d.ts.map +1 -0
  33. package/build/lib/helpers/stack-helpers.js +155 -0
  34. package/build/lib/index.d.ts.map +1 -0
  35. package/{src → build}/lib/index.js +1 -1
  36. package/build/lib/init.d.ts.map +1 -0
  37. package/build/lib/init.js +131 -0
  38. package/build/lib/local-provider-constraints.d.ts.map +1 -0
  39. package/build/lib/local-provider-constraints.js +95 -0
  40. package/build/lib/local-provider-versions.d.ts.map +1 -0
  41. package/build/lib/local-provider-versions.js +73 -0
  42. package/build/lib/models/deploy-machine.d.ts.map +1 -0
  43. package/build/lib/models/deploy-machine.js +283 -0
  44. package/build/lib/models/interactive-process.d.ts.map +1 -0
  45. package/build/lib/models/interactive-process.js +59 -0
  46. package/{src → build}/lib/models/schema.d.ts.map +1 -1
  47. package/build/lib/models/schema.js +181 -0
  48. package/{src → build}/lib/models/terraform-cli.d.ts +1 -0
  49. package/build/lib/models/terraform-cli.d.ts.map +1 -0
  50. package/build/lib/models/terraform-cli.js +355 -0
  51. package/build/lib/models/terraform.d.ts.map +1 -0
  52. package/build/lib/models/terraform.js +72 -0
  53. package/build/lib/output.d.ts.map +1 -0
  54. package/build/lib/output.js +211 -0
  55. package/build/lib/provider-add.d.ts.map +1 -0
  56. package/build/lib/provider-add.js +30 -0
  57. package/build/lib/server/terraform-logs.d.ts.map +1 -0
  58. package/build/lib/server/terraform-logs.js +19 -0
  59. package/{src → build}/lib/synth-stack.d.ts +1 -0
  60. package/build/lib/synth-stack.d.ts.map +1 -0
  61. package/build/lib/synth-stack.js +251 -0
  62. package/build/lib/synth.d.ts.map +1 -0
  63. package/build/lib/synth.js +67 -0
  64. package/{src → build}/lib/terraform-json.d.ts.map +1 -1
  65. package/build/lib/terraform-json.js +82 -0
  66. package/build/lib/terraform-provider-lock.d.ts.map +1 -0
  67. package/build/lib/terraform-provider-lock.js +95 -0
  68. package/{src → build}/lib/watch.d.ts +1 -0
  69. package/build/lib/watch.d.ts.map +1 -0
  70. package/build/lib/watch.js +155 -0
  71. package/package.json +12 -12
  72. package/src/lib/cdktf-config.d.ts.map +0 -1
  73. package/src/lib/cdktf-config.js +0 -108
  74. package/src/lib/cdktf-project-io-handler.d.ts.map +0 -1
  75. package/src/lib/cdktf-project-io-handler.js +0 -84
  76. package/src/lib/cdktf-project.d.ts.map +0 -1
  77. package/src/lib/cdktf-project.js +0 -371
  78. package/src/lib/cdktf-stack.d.ts.map +0 -1
  79. package/src/lib/cdktf-stack.js +0 -386
  80. package/src/lib/convert.d.ts.map +0 -1
  81. package/src/lib/convert.js +0 -51
  82. package/src/lib/dependencies/cdktf-config-manager.d.ts.map +0 -1
  83. package/src/lib/dependencies/cdktf-config-manager.js +0 -36
  84. package/src/lib/dependencies/dependency-manager.d.ts.map +0 -1
  85. package/src/lib/dependencies/dependency-manager.js +0 -393
  86. package/src/lib/dependencies/package-manager.d.ts.map +0 -1
  87. package/src/lib/dependencies/package-manager.js +0 -581
  88. package/src/lib/dependencies/prebuilt-providers.d.ts.map +0 -1
  89. package/src/lib/dependencies/prebuilt-providers.js +0 -221
  90. package/src/lib/dependencies/registry-api.d.ts.map +0 -1
  91. package/src/lib/dependencies/registry-api.js +0 -77
  92. package/src/lib/dependencies/version-constraints.d.ts.map +0 -1
  93. package/src/lib/dependencies/version-constraints.js +0 -95
  94. package/src/lib/error-reporting.d.ts.map +0 -1
  95. package/src/lib/error-reporting.js +0 -133
  96. package/src/lib/errors.d.ts.map +0 -1
  97. package/src/lib/errors.js +0 -10
  98. package/src/lib/execution-logs.d.ts.map +0 -1
  99. package/src/lib/execution-logs.js +0 -47
  100. package/src/lib/get.d.ts.map +0 -1
  101. package/src/lib/get.js +0 -90
  102. package/src/lib/helpers/stack-helpers.d.ts.map +0 -1
  103. package/src/lib/helpers/stack-helpers.js +0 -155
  104. package/src/lib/index.d.ts.map +0 -1
  105. package/src/lib/init.d.ts.map +0 -1
  106. package/src/lib/init.js +0 -131
  107. package/src/lib/local-provider-constraints.d.ts.map +0 -1
  108. package/src/lib/local-provider-constraints.js +0 -95
  109. package/src/lib/local-provider-versions.d.ts.map +0 -1
  110. package/src/lib/local-provider-versions.js +0 -73
  111. package/src/lib/models/deploy-machine.d.ts.map +0 -1
  112. package/src/lib/models/deploy-machine.js +0 -283
  113. package/src/lib/models/interactive-process.d.ts.map +0 -1
  114. package/src/lib/models/interactive-process.js +0 -59
  115. package/src/lib/models/schema.js +0 -181
  116. package/src/lib/models/terraform-cli.d.ts.map +0 -1
  117. package/src/lib/models/terraform-cli.js +0 -355
  118. package/src/lib/models/terraform.d.ts.map +0 -1
  119. package/src/lib/models/terraform.js +0 -72
  120. package/src/lib/output.d.ts.map +0 -1
  121. package/src/lib/output.js +0 -211
  122. package/src/lib/provider-add.d.ts.map +0 -1
  123. package/src/lib/provider-add.js +0 -30
  124. package/src/lib/server/terraform-logs.d.ts.map +0 -1
  125. package/src/lib/server/terraform-logs.js +0 -19
  126. package/src/lib/synth-stack.d.ts.map +0 -1
  127. package/src/lib/synth-stack.js +0 -251
  128. package/src/lib/synth.d.ts.map +0 -1
  129. package/src/lib/synth.js +0 -67
  130. package/src/lib/terraform-json.js +0 -82
  131. package/src/lib/terraform-provider-lock.d.ts.map +0 -1
  132. package/src/lib/terraform-provider-lock.js +0 -95
  133. package/src/lib/watch.d.ts.map +0 -1
  134. package/src/lib/watch.js +0 -155
  135. /package/{src → build}/lib/cdktf-config.d.ts +0 -0
  136. /package/{src → build}/lib/cdktf-project-io-handler.d.ts +0 -0
  137. /package/{src → build}/lib/cdktf-project.d.ts +0 -0
  138. /package/{src → build}/lib/convert.d.ts +0 -0
  139. /package/{src → build}/lib/dependencies/cdktf-config-manager.d.ts +0 -0
  140. /package/{src → build}/lib/dependencies/dependency-manager.d.ts +0 -0
  141. /package/{src → build}/lib/dependencies/package-manager.d.ts +0 -0
  142. /package/{src → build}/lib/dependencies/prebuilt-providers.d.ts +0 -0
  143. /package/{src → build}/lib/dependencies/registry-api.d.ts +0 -0
  144. /package/{src → build}/lib/dependencies/version-constraints.d.ts +0 -0
  145. /package/{src → build}/lib/error-reporting.d.ts +0 -0
  146. /package/{src → build}/lib/errors.d.ts +0 -0
  147. /package/{src → build}/lib/execution-logs.d.ts +0 -0
  148. /package/{src → build}/lib/get.d.ts +0 -0
  149. /package/{src → build}/lib/helpers/stack-helpers.d.ts +0 -0
  150. /package/{src → build}/lib/index.d.ts +0 -0
  151. /package/{src → build}/lib/init.d.ts +0 -0
  152. /package/{src → build}/lib/local-provider-constraints.d.ts +0 -0
  153. /package/{src → build}/lib/local-provider-versions.d.ts +0 -0
  154. /package/{src → build}/lib/models/deploy-machine.d.ts +0 -0
  155. /package/{src → build}/lib/models/interactive-process.d.ts +0 -0
  156. /package/{src → build}/lib/models/schema.d.ts +0 -0
  157. /package/{src → build}/lib/models/terraform.d.ts +0 -0
  158. /package/{src → build}/lib/output.d.ts +0 -0
  159. /package/{src → build}/lib/provider-add.d.ts +0 -0
  160. /package/{src → build}/lib/server/terraform-logs.d.ts +0 -0
  161. /package/{src → build}/lib/synth.d.ts +0 -0
  162. /package/{src → build}/lib/terraform-json.d.ts +0 -0
  163. /package/{src → build}/lib/terraform-provider-lock.d.ts +0 -0
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.schema = void 0;
27
+ // Copyright (c) HashiCorp, Inc
28
+ // SPDX-License-Identifier: MPL-2.0
29
+ const z = __importStar(require("zod"));
30
+ // Schemas from https://www.terraform.io/docs/internals/machine-readable-ui.html#change_summary
31
+ const resource = z.object({
32
+ addr: z.string(),
33
+ module: z.string(),
34
+ resource: z.string(),
35
+ implied_provider: z.string(),
36
+ resource_type: z.string(),
37
+ resource_name: z.string(),
38
+ resource_key: z.string().optional().nullable(),
39
+ });
40
+ const baseMessage = z
41
+ .object({
42
+ "@level": z.enum(["info", "error", "warn"]),
43
+ "@message": z.string(),
44
+ "@module": z.string(),
45
+ "@timestamp": z.string(),
46
+ })
47
+ .nonstrict();
48
+ const action = z.enum(["noop", "create", "read", "update", "delete"]);
49
+ const change = z.object({
50
+ resource,
51
+ action,
52
+ });
53
+ const replaceChange = change.extend({
54
+ action: z.literal("replace"),
55
+ reason: z.enum(["tainted", "requested", "cannot_update"]),
56
+ });
57
+ const plannedChange = baseMessage.extend({
58
+ type: z.literal("planned_change"),
59
+ change: z.union([replaceChange, change]),
60
+ });
61
+ const version = baseMessage.extend({
62
+ type: z.literal("version"),
63
+ });
64
+ const changeSummary = baseMessage.extend({
65
+ type: z.literal("change_summary"),
66
+ changes: z.object({
67
+ add: z.number(),
68
+ change: z.number(),
69
+ remove: z.number(),
70
+ operation: z.enum(["plan", "apply", "deploy"]),
71
+ }),
72
+ });
73
+ const outputs = baseMessage.extend({
74
+ type: z.literal("outputs"),
75
+ outputs: z.record(z.object({
76
+ sensitive: z.boolean(),
77
+ type: z.string(),
78
+ value: z.string(),
79
+ })),
80
+ });
81
+ const applyStart = baseMessage.extend({
82
+ type: z.literal("apply_start"),
83
+ hook: z.object({
84
+ resource,
85
+ action,
86
+ id_key: z.string().optional(),
87
+ id_value: z.string().optional(),
88
+ }),
89
+ });
90
+ const applyProgress = baseMessage.extend({
91
+ type: z.literal("apply_progress"),
92
+ hook: z.object({
93
+ resource,
94
+ action,
95
+ elapsed_seconds: z.number(),
96
+ }),
97
+ });
98
+ const applyComplete = baseMessage.extend({
99
+ type: z.literal("apply_complete"),
100
+ hook: z.object({
101
+ resource,
102
+ action,
103
+ id_key: z.string().optional(),
104
+ id_value: z.string().optional(),
105
+ elapsed_seconds: z.number(),
106
+ }),
107
+ });
108
+ const applyError = baseMessage.extend({
109
+ type: z.literal("apply_errored"),
110
+ hook: z.object({
111
+ resource,
112
+ action,
113
+ elapsed_seconds: z.number(),
114
+ }),
115
+ });
116
+ const provisionStart = baseMessage.extend({
117
+ type: z.literal("provision_start"),
118
+ hook: z.object({
119
+ resource,
120
+ provisioner: z.string(),
121
+ }),
122
+ });
123
+ const provisionProgress = baseMessage.extend({
124
+ type: z.literal("provision_progress"),
125
+ hook: z.object({
126
+ resource,
127
+ provisioner: z.string(),
128
+ output: z.string(),
129
+ }),
130
+ });
131
+ const provisionComplete = baseMessage.extend({
132
+ type: z.literal("provision_complete"),
133
+ hook: z.object({
134
+ resource,
135
+ provisioner: z.string(),
136
+ }),
137
+ });
138
+ const provisionErrored = baseMessage.extend({
139
+ type: z.literal("provision_errored"),
140
+ hook: z.object({
141
+ resource,
142
+ provisioner: z.string(),
143
+ }),
144
+ });
145
+ const refreshStart = baseMessage.extend({
146
+ type: z.literal("refresh_start"),
147
+ hook: z.object({
148
+ resource,
149
+ id_key: z.string().optional(),
150
+ id_value: z.string().optional(),
151
+ }),
152
+ });
153
+ const refreshComplete = baseMessage.extend({
154
+ type: z.literal("refresh_complete"),
155
+ hook: z.object({
156
+ resource,
157
+ id_key: z.string().optional(),
158
+ id_value: z.string().optional(),
159
+ }),
160
+ });
161
+ const logMessage = baseMessage.extend({
162
+ type: z.literal("log"),
163
+ });
164
+ exports.schema = z.union([
165
+ version,
166
+ plannedChange,
167
+ changeSummary,
168
+ outputs,
169
+ applyStart,
170
+ applyProgress,
171
+ applyComplete,
172
+ applyError,
173
+ provisionStart,
174
+ provisionProgress,
175
+ provisionComplete,
176
+ provisionErrored,
177
+ refreshStart,
178
+ refreshComplete,
179
+ logMessage,
180
+ ]);
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1Q0FBeUI7QUFFekIsK0ZBQStGO0FBQy9GLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUM1QixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN6QixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN6QixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMvQyxDQUFDLENBQUM7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDO0tBQ2xCLE1BQU0sQ0FBQztJQUNOLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN0QixTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNyQixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUN6QixDQUFDO0tBQ0QsU0FBUyxFQUFFLENBQUM7QUFFZixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFD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Q0FBQztJQUM1QixPQUFPO0lBQ1AsYUFBYTtJQUNiLGFBQWE7SUFDYixPQUFPO0lBQ1AsVUFBVTtJQUNWLGFBQWE7SUFDYixhQUFhO0lBQ2IsVUFBVTtJQUNWLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osZUFBZTtJQUNmLFVBQVU7Q0FDWCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5cbi8vIFNjaGVtYXMgZnJvbSBodHRwczovL3d3dy50ZXJyYWZvcm0uaW8vZG9jcy9pbnRlcm5hbHMvbWFjaGluZS1yZWFkYWJsZS11aS5odG1sI2NoYW5nZV9zdW1tYXJ5XG5jb25zdCByZXNvdXJjZSA9IHoub2JqZWN0KHtcbiAgYWRkcjogei5zdHJpbmcoKSxcbiAgbW9kdWxlOiB6LnN0cmluZygpLFxuICByZXNvdXJjZTogei5zdHJpbmcoKSxcbiAgaW1wbGllZF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2VfdHlwZTogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2VfbmFtZTogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2Vfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbn0pO1xuY29uc3QgYmFzZU1lc3NhZ2UgPSB6XG4gIC5vYmplY3Qoe1xuICAgIFwiQGxldmVsXCI6IHouZW51bShbXCJpbmZvXCIsIFwiZXJyb3JcIiwgXCJ3YXJuXCJdKSxcbiAgICBcIkBtZXNzYWdlXCI6IHouc3RyaW5nKCksXG4gICAgXCJAbW9kdWxlXCI6IHouc3RyaW5nKCksXG4gICAgXCJAdGltZXN0YW1wXCI6IHouc3RyaW5nKCksXG4gIH0pXG4gIC5ub25zdHJpY3QoKTtcblxuY29uc3QgYWN0aW9uID0gei5lbnVtKFtcIm5vb3BcIiwgXCJjcmVhdGVcIiwgXCJyZWFkXCIsIFwidXBkYXRlXCIsIFwiZGVsZXRlXCJdKTtcbmNvbnN0IGNoYW5nZSA9IHoub2JqZWN0KHtcbiAgcmVzb3VyY2UsXG4gIGFjdGlvbixcbn0pO1xuY29uc3QgcmVwbGFjZUNoYW5nZSA9IGNoYW5nZS5leHRlbmQoe1xuICBhY3Rpb246IHoubGl0ZXJhbChcInJlcGxhY2VcIiksXG4gIHJlYXNvbjogei5lbnVtKFtcInRhaW50ZWRcIiwgXCJyZXF1ZXN0ZWRcIiwgXCJjYW5ub3RfdXBkYXRlXCJdKSxcbn0pO1xuY29uc3QgcGxhbm5lZENoYW5nZSA9IGJhc2VNZXNzYWdlLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInBsYW5uZWRfY2hhbmdlXCIpLFxuICBjaGFuZ2U6IHoudW5pb24oW3JlcGxhY2VDaGFuZ2UsIGNoYW5nZV0pLFxufSk7XG5cbmNvbnN0IHZlcnNpb24gPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZXJzaW9uXCIpLFxufSk7XG5cbmNvbnN0IGNoYW5nZVN1bW1hcnkgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJjaGFuZ2Vfc3VtbWFyeVwiKSxcbiAgY2hhbmdlczogei5vYmplY3Qoe1xuICAgIGFkZDogei5udW1iZXIoKSxcbiAgICBjaGFuZ2U6IHoubnVtYmVyKCksXG4gICAgcmVtb3ZlOiB6Lm51bWJlcigpLFxuICAgIG9wZXJhdGlvbjogei5lbnVtKFtcInBsYW5cIiwgXCJhcHBseVwiLCBcImRlcGxveVwiXSksXG4gIH0pLFxufSk7XG5cbmNvbnN0IG91dHB1dHMgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJvdXRwdXRzXCIpLFxuICBvdXRwdXRzOiB6LnJlY29yZChcbiAgICB6Lm9iamVjdCh7XG4gICAgICBzZW5zaXRpdmU6IHouYm9vbGVhbigpLFxuICAgICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICAgIHZhbHVlOiB6LnN0cmluZygpLFxuICAgIH0pLFxuICApLFxufSk7XG5cbmNvbnN0IGFwcGx5U3RhcnQgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhcHBseV9zdGFydFwiKSxcbiAgaG9vazogei5vYmplY3Qoe1xuICAgIHJlc291cmNlLFxuICAgIGFjdGlvbixcbiAgICBpZF9rZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBpZF92YWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbn0pO1xuXG5jb25zdCBhcHBseVByb2dyZXNzID0gYmFzZU1lc3NhZ2UuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwiYXBwbHlfcHJvZ3Jlc3NcIiksXG4gIGhvb2s6IHoub2JqZWN0KHtcbiAgICByZXNvdXJjZSxcbiAgICBhY3Rpb24sXG4gICAgZWxhcHNlZF9zZWNvbmRzOiB6Lm51bWJlcigpLFxuICB9KSxcbn0pO1xuXG5jb25zdCBhcHBseUNvbXBsZXRlID0gYmFzZU1lc3NhZ2UuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwiYXBwbHlfY29tcGxldGVcIiksXG4gIGhvb2s6IHoub2JqZWN0KHtcbiAgICByZXNvdXJjZSxcbiAgICBhY3Rpb24sXG4gICAgaWRfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaWRfdmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBlbGFwc2VkX3NlY29uZHM6IHoubnVtYmVyKCksXG4gIH0pLFxufSk7XG5cbmNvbnN0IGFwcGx5RXJyb3IgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhcHBseV9lcnJvcmVkXCIpLFxuICBob29rOiB6Lm9iamVjdCh7XG4gICAgcmVzb3VyY2UsXG4gICAgYWN0aW9uLFxuICAgIGVsYXBzZWRfc2Vjb25kczogei5udW1iZXIoKSxcbiAgfSksXG59KTtcblxuY29uc3QgcHJvdmlzaW9uU3RhcnQgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJwcm92aXNpb25fc3RhcnRcIiksXG4gIGhvb2s6IHoub2JqZWN0KHtcbiAgICByZXNvdXJjZSxcbiAgICBwcm92aXNpb25lcjogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcblxuY29uc3QgcHJvdmlzaW9uUHJvZ3Jlc3MgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJwcm92aXNpb25fcHJvZ3Jlc3NcIiksXG4gIGhvb2s6IHoub2JqZWN0KHtcbiAgICByZXNvdXJjZSxcbiAgICBwcm92aXNpb25lcjogei5zdHJpbmcoKSxcbiAgICBvdXRwdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxufSk7XG5cbmNvbnN0IHByb3Zpc2lvbkNvbXBsZXRlID0gYmFzZU1lc3NhZ2UuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwicHJvdmlzaW9uX2NvbXBsZXRlXCIpLFxuICBob29rOiB6Lm9iamVjdCh7XG4gICAgcmVzb3VyY2UsXG4gICAgcHJvdmlzaW9uZXI6IHouc3RyaW5nKCksXG4gIH0pLFxufSk7XG5cbmNvbnN0IHByb3Zpc2lvbkVycm9yZWQgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJwcm92aXNpb25fZXJyb3JlZFwiKSxcbiAgaG9vazogei5vYmplY3Qoe1xuICAgIHJlc291cmNlLFxuICAgIHByb3Zpc2lvbmVyOiB6LnN0cmluZygpLFxuICB9KSxcbn0pO1xuXG5jb25zdCByZWZyZXNoU3RhcnQgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJyZWZyZXNoX3N0YXJ0XCIpLFxuICBob29rOiB6Lm9iamVjdCh7XG4gICAgcmVzb3VyY2UsXG4gICAgaWRfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaWRfdmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG59KTtcblxuY29uc3QgcmVmcmVzaENvbXBsZXRlID0gYmFzZU1lc3NhZ2UuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwicmVmcmVzaF9jb21wbGV0ZVwiKSxcbiAgaG9vazogei5vYmplY3Qoe1xuICAgIHJlc291cmNlLFxuICAgIGlkX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlkX3ZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxufSk7XG5cbmNvbnN0IGxvZ01lc3NhZ2UgPSBiYXNlTWVzc2FnZS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJsb2dcIiksXG59KTtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYSA9IHoudW5pb24oW1xuICB2ZXJzaW9uLFxuICBwbGFubmVkQ2hhbmdlLFxuICBjaGFuZ2VTdW1tYXJ5LFxuICBvdXRwdXRzLFxuICBhcHBseVN0YXJ0LFxuICBhcHBseVByb2dyZXNzLFxuICBhcHBseUNvbXBsZXRlLFxuICBhcHBseUVycm9yLFxuICBwcm92aXNpb25TdGFydCxcbiAgcHJvdmlzaW9uUHJvZ3Jlc3MsXG4gIHByb3Zpc2lvbkNvbXBsZXRlLFxuICBwcm92aXNpb25FcnJvcmVkLFxuICByZWZyZXNoU3RhcnQsXG4gIHJlZnJlc2hDb21wbGV0ZSxcbiAgbG9nTWVzc2FnZSxcbl0pO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25UeXBlcyA9IHouaW5mZXI8dHlwZW9mIGFjdGlvbj47XG4iXX0=
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import { Terraform, TerraformPlan, TerraformOutput, AbstractTerraformPlan, TerraformDeployState } from "./terraform";
2
3
  import { SynthesizedStack } from "../synth-stack";
3
4
  export declare class TerraformCliPlan extends AbstractTerraformPlan implements TerraformPlan {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-cli.d.ts","sourceRoot":"","sources":["../../../src/lib/models/terraform-cli.ts"],"names":[],"mappings":";AAUA,OAAO,EACL,SAAS,EACT,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAgBlD,qBAAa,gBACX,SAAQ,qBACR,YAAW,aAAa;aAGN,QAAQ,EAAE,MAAM;aAChB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;gBAD5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;CAI/C;AAED,uBAAe,oBAAoB;IACjC,OAAc,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,OAAc,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AACD,MAAM,MAAM,YAAY,GAAG,OAAO,oBAAoB,CAAC;AAkCvD,qBAAa,YAAa,YAAW,SAAS;IAY1C,OAAO,CAAC,QAAQ,CAAC,WAAW;aACZ,KAAK,EAAE,gBAAgB;IAZzC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGkB;gBAGxB,WAAW,EAAE,WAAW,EACzB,KAAK,EAAE,gBAAgB,EACvC,yBAAyB,YAAY,MAAM,YAAY,YAAY,EAAE,eACzD,MAAM,2BAAuB;IAe9B,IAAI,CAAC,IAAI,EAAE;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,OAAO,CAAC;QACtB,mBAAmB,EAAE,OAAO,CAAC;KAC9B,GAAG,OAAO,CAAC,IAAI,CAAC;IAkFjB,OAAO,KAAK,YAAY,GAQvB;IAED,OAAO,KAAK,UAAU,GAMrB;IAEY,IAAI,CAAC,IAAI,EAAE;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DJ,MAAM,CACjB,EACE,WAAmB,EACnB,WAAmB,EACnB,OAAe,EACf,WAAgB,EAChB,YAAiB,EACjB,IAAS,EACT,QAAa,GACd;;;;;;;;KAAA,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAgBrB,OAAO,CAClB,EACE,WAAmB,EACnB,WAAgB,EAChB,OAAe,EACf,YAAiB,EACjB,IAAS,EACT,QAAa,GACd;;;;;;;KAAA,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;YAepB,aAAa;IA+Fd,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAqB1B,MAAM,IAAI,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;KAAE,CAAC;IAwBrD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,KAAK;CAGnB;AAED,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB;AAED,wBAAsB,mCAAmC,CAAC,UAAU,EAAE,MAAM,iBAK3E"}
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.tryRemoveGeneratedConfigurationFile = exports.tryReadGeneratedConfigurationFile = exports.TerraformCli = exports.TerraformCliPlan = void 0;
30
+ // Copyright (c) HashiCorp, Inc
31
+ // SPDX-License-Identifier: MPL-2.0
32
+ const strip_ansi_1 = __importDefault(require("strip-ansi"));
33
+ const commons_1 = require("@cdktn/commons");
34
+ const terraform_1 = require("./terraform");
35
+ const deploy_machine_1 = require("./deploy-machine");
36
+ const waitFor_1 = require("xstate/lib/waitFor");
37
+ const errors_1 = require("../errors");
38
+ const terraform_json_1 = require("../terraform-json");
39
+ const interactive_process_1 = require("./interactive-process");
40
+ const path_1 = __importDefault(require("path"));
41
+ const fs = __importStar(require("fs-extra"));
42
+ const GENERATE_CONFIG_OUT_FILE = "generated_resources.tf";
43
+ class TerraformCliPlan extends terraform_1.AbstractTerraformPlan {
44
+ constructor(planFile, plan) {
45
+ super(planFile, plan === null || plan === void 0 ? void 0 : plan.resource_changes, plan === null || plan === void 0 ? void 0 : plan.output_changes);
46
+ this.planFile = planFile;
47
+ this.plan = plan;
48
+ }
49
+ }
50
+ exports.TerraformCliPlan = TerraformCliPlan;
51
+ class AbstractOutputFilter {
52
+ }
53
+ // The plan might error if there is a variable missing, but the error message hints the user
54
+ // in a wrong direction. We therefore catch the error and rethrow it with a more helpful message
55
+ class VariableRequiredFilter extends AbstractOutputFilter {
56
+ // Example for "No value for required variable" error
57
+ // ╷
58
+ // │ Error: No value for required variable
59
+ // │
60
+ // │ on cdk.tf.json line 31, in variable:
61
+ // │ 31: "with-dashes": {
62
+ // │
63
+ // │ The root module input variable "with-dashes" is not set, and has no default
64
+ // │ value. Use a -var or -var-file command line argument to provide a value for
65
+ // │ this variable
66
+ static condition(input) {
67
+ const line = (0, strip_ansi_1.default)(input);
68
+ return (line.includes("Error: No value for required variable") &&
69
+ line.includes("The root module input variable"));
70
+ }
71
+ static transform(line) {
72
+ const startMarker = 'The root module input variable "';
73
+ const variableName = line.substring(line.indexOf(startMarker) + startMarker.length, line.indexOf('" is not set'));
74
+ return (0, errors_1.missingVariable)(variableName);
75
+ }
76
+ }
77
+ class TerraformCli {
78
+ constructor(abortSignal, stack, createTerraformLogHandler = (_phase, _filter) => (_stdout, _isErr = false) => { }) {
79
+ this.abortSignal = abortSignal;
80
+ this.stack = stack;
81
+ this.workdir = stack.workingDirectory;
82
+ this.onStdout =
83
+ (phase, filter) => (stdout) => createTerraformLogHandler(phase, filter)(Buffer.isBuffer(stdout) ? stdout.toString() : stdout);
84
+ this.onStderr =
85
+ (phase, filter) => (stderr) => createTerraformLogHandler(phase, filter)(stderr.toString(), true);
86
+ }
87
+ async init(opts) {
88
+ await this.setUserAgent();
89
+ const args = ["init"];
90
+ if (opts.needsUpgrade) {
91
+ args.push("-upgrade");
92
+ }
93
+ if (opts.noColor) {
94
+ args.push("-no-color");
95
+ }
96
+ if (opts.migrateState) {
97
+ args.push("-migrate-state");
98
+ }
99
+ let initCanNotContinue = (_err) => { };
100
+ const rejectsIfInitCanNotContinue = new Promise((_resolve, reject) => {
101
+ initCanNotContinue = reject;
102
+ });
103
+ const stdout = this.onStdout("init");
104
+ const { actions, exitCode } = (0, interactive_process_1.spawnInteractive)({
105
+ file: commons_1.terraformBinaryName,
106
+ args,
107
+ options: {
108
+ cwd: this.workdir,
109
+ env: process.env,
110
+ },
111
+ }, (data) => {
112
+ stdout(data);
113
+ if (data.includes("Should Terraform migrate your existing state?") ||
114
+ data.includes("Do you want to copy existing state to the new backend")) {
115
+ // TODO: This only happens when terraform is passed the -migrate-state anyway, so this check is redundant
116
+ if (opts.migrateState) {
117
+ actions.writeLine("yes");
118
+ }
119
+ else {
120
+ actions.stop();
121
+ initCanNotContinue("Please pass the --migrate-state flag to migrate your state");
122
+ }
123
+ }
124
+ });
125
+ this.abortSignal.addEventListener("abort", () => {
126
+ actions.stop();
127
+ });
128
+ const progress = exitCode.then((code) => {
129
+ if (code !== 0) {
130
+ throw new Error(`terraform init failed with exit code ${code}`);
131
+ }
132
+ });
133
+ await Promise.race([progress, rejectsIfInitCanNotContinue]);
134
+ // TODO: this might have performance implications because we don't know if we're
135
+ // running a remote plan or a local one (so we run it always for all platforms)
136
+ // while we'd only need it for remote plans
137
+ if (opts.needsLockfileUpdate) {
138
+ await (0, commons_1.exec)(commons_1.terraformBinaryName, [
139
+ "providers",
140
+ "lock",
141
+ "-platform=linux_amd64",
142
+ ...(opts.noColor ? ["-no-color"] : []),
143
+ ], {
144
+ cwd: this.workdir,
145
+ env: process.env,
146
+ signal: this.abortSignal,
147
+ noColor: opts.noColor,
148
+ }, this.onStdout("init"), this.onStderr("init"));
149
+ }
150
+ }
151
+ get isCloudStack() {
152
+ var _a, _b, _c;
153
+ const parsedStack = terraform_json_1.terraformJsonSchema.parse(JSON.parse(this.stack.content));
154
+ return Boolean(((_b = (_a = parsedStack.terraform) === null || _a === void 0 ? void 0 : _a.backend) === null || _b === void 0 ? void 0 : _b.remote) || ((_c = parsedStack.terraform) === null || _c === void 0 ? void 0 : _c.cloud));
155
+ }
156
+ get hasImports() {
157
+ const parsedStack = terraform_json_1.terraformJsonSchema.parse(JSON.parse(this.stack.content));
158
+ return Boolean(parsedStack.import);
159
+ }
160
+ async plan(opts) {
161
+ const { destroy = false, refreshOnly = false, parallelism = -1, vars = [], varFiles = [], noColor = false, } = opts;
162
+ const options = ["plan", "-input=false"];
163
+ const generatedConfigFile = path_1.default.join(this.workdir, GENERATE_CONFIG_OUT_FILE);
164
+ if (fs.existsSync(generatedConfigFile)) {
165
+ fs.remove(generatedConfigFile);
166
+ }
167
+ if (this.hasImports) {
168
+ options.push(`-generate-config-out=${GENERATE_CONFIG_OUT_FILE}`);
169
+ }
170
+ if (!this.isCloudStack) {
171
+ const planFile = "plan";
172
+ options.push("-out", planFile);
173
+ }
174
+ if (destroy) {
175
+ options.push("-destroy");
176
+ }
177
+ if (refreshOnly) {
178
+ options.push("-refresh-only");
179
+ }
180
+ if (parallelism > -1) {
181
+ options.push(`-parallelism=${parallelism}`);
182
+ }
183
+ if (noColor) {
184
+ options.push("-no-color");
185
+ }
186
+ vars.forEach((v) => options.push(`-var=${v}`));
187
+ varFiles.forEach((v) => options.push(`-var-file=${v}`));
188
+ commons_1.logger.debug(`Executing ${commons_1.terraformBinaryName} ${options.join(" ")} in ${this.workdir}`);
189
+ await this.setUserAgent();
190
+ await (0, commons_1.exec)(commons_1.terraformBinaryName, options, {
191
+ cwd: this.workdir,
192
+ env: process.env,
193
+ signal: this.abortSignal,
194
+ noColor,
195
+ }, this.onStdout("plan", [VariableRequiredFilter]), this.onStderr("plan", [VariableRequiredFilter]));
196
+ }
197
+ async deploy({ autoApprove = false, refreshOnly = false, noColor = false, parallelism = -1, extraOptions = [], vars = [], varFiles = [], }, callback) {
198
+ await this.setUserAgent();
199
+ const service = (0, deploy_machine_1.createAndStartDeployService)({
200
+ terraformBinaryName: commons_1.terraformBinaryName,
201
+ workdir: this.workdir,
202
+ refreshOnly,
203
+ noColor,
204
+ autoApprove,
205
+ parallelism,
206
+ extraOptions,
207
+ vars,
208
+ varFiles,
209
+ });
210
+ return this.handleService("deploy", service, callback);
211
+ }
212
+ async destroy({ autoApprove = false, parallelism = -1, noColor = false, extraOptions = [], vars = [], varFiles = [], }, callback) {
213
+ await this.setUserAgent();
214
+ const service = (0, deploy_machine_1.createAndStartDestroyService)({
215
+ terraformBinaryName: commons_1.terraformBinaryName,
216
+ workdir: this.workdir,
217
+ autoApprove,
218
+ parallelism,
219
+ noColor,
220
+ extraOptions,
221
+ vars,
222
+ varFiles,
223
+ });
224
+ return this.handleService("destroy", service, callback);
225
+ }
226
+ async handleService(type, service, callback) {
227
+ // stop terraform apply if signaled as such from the outside (e.g. via ctrl+c)
228
+ this.abortSignal.addEventListener("abort", () => {
229
+ service.send("STOP");
230
+ }, { once: true });
231
+ // relay logs to stdout
232
+ service.onEvent((event) => {
233
+ commons_1.logger.trace(`Terraform CLI state machine event: ${JSON.stringify(event)}`);
234
+ if ((0, deploy_machine_1.isDeployEvent)(event, "OUTPUT_RECEIVED"))
235
+ this.onStdout(type)(event.output);
236
+ else if ((0, deploy_machine_1.isDeployEvent)(event, "APPROVED_EXTERNALLY"))
237
+ callback({ type: "external approval reply", approved: true });
238
+ else if ((0, deploy_machine_1.isDeployEvent)(event, "REJECTED_EXTERNALLY"))
239
+ callback({ type: "external approval reply", approved: false });
240
+ else if ((0, deploy_machine_1.isDeployEvent)(event, "OVERRIDDEN_EXTERNALLY"))
241
+ callback({
242
+ type: "external sentinel override reply",
243
+ overridden: true,
244
+ });
245
+ else if ((0, deploy_machine_1.isDeployEvent)(event, "OVERRIDE_REJECTED_EXTERNALLY"))
246
+ callback({
247
+ type: "external sentinel override reply",
248
+ overridden: false,
249
+ });
250
+ });
251
+ let previousState = "idle";
252
+ service.onTransition((state) => {
253
+ // only send updates on actual state change
254
+ // onTransition is called even if the state didn't change but only an event happened
255
+ if (state.matches(previousState))
256
+ return;
257
+ commons_1.logger.trace(`Terraform CLI state machine state transition: ${JSON.stringify(previousState)} => ${JSON.stringify(state.value)}`);
258
+ if (state.matches({ running: "awaiting_approval" })) {
259
+ callback({
260
+ type: "waiting for approval",
261
+ approve: () => service.send("APPROVE"),
262
+ reject: () => service.send("REJECT"),
263
+ });
264
+ }
265
+ else if (state.matches({ running: "awaiting_sentinel_override" })) {
266
+ callback({
267
+ type: "waiting for sentinel override",
268
+ override: () => service.send("OVERRIDE"),
269
+ reject: () => service.send("REJECT_OVERRIDE"),
270
+ });
271
+ }
272
+ else if (state.matches({ running: "processing" })) {
273
+ callback({
274
+ type: "running",
275
+ cancelled: Boolean(state.context.cancelled),
276
+ });
277
+ }
278
+ previousState = state.value;
279
+ });
280
+ service.start();
281
+ const state = await (0, waitFor_1.waitFor)(service, (state) => !!state.done, {
282
+ timeout: Infinity,
283
+ });
284
+ commons_1.logger.trace(`Invoking Terraform CLI for ${type} done (state machine reached final state). Last event: ${JSON.stringify(state.event)}. Context: ${JSON.stringify(state.context)}`);
285
+ // example events: { type: 'EXITED', exitCode: 0 }, { type: 'EXTERNAL_REJECT' }
286
+ if (state.event.type === "EXITED" &&
287
+ state.event.exitCode !== 0 &&
288
+ !state.context.cancelled // don't fail if we cancelled the run
289
+ ) {
290
+ throw `Invoking Terraform CLI failed with exit code ${state.event.exitCode}`;
291
+ }
292
+ return { cancelled: Boolean(state.context.cancelled) };
293
+ }
294
+ async version() {
295
+ try {
296
+ return await (0, commons_1.exec)(commons_1.terraformBinaryName, ["-v"], {
297
+ cwd: this.workdir,
298
+ env: process.env,
299
+ signal: this.abortSignal,
300
+ noColor: true,
301
+ }, this.onStdout("version"), this.onStderr("version"));
302
+ }
303
+ catch (_a) {
304
+ throw new Error("Terraform CLI not present - Please install a current version https://learn.hashicorp.com/terraform/getting-started/install.html");
305
+ }
306
+ }
307
+ async output() {
308
+ const output = await (0, commons_1.exec)(commons_1.terraformBinaryName, ["output", "-json"], {
309
+ cwd: this.workdir,
310
+ env: process.env,
311
+ signal: this.abortSignal,
312
+ noColor: true,
313
+ },
314
+ // We don't need to log the output here since we use it later on
315
+ () => { }, this.onStderr("output"));
316
+ try {
317
+ return JSON.parse(output);
318
+ }
319
+ catch (e) {
320
+ throw commons_1.Errors.External(`Failed to parse terraform output: ${e}. The output was '${output}'`);
321
+ }
322
+ }
323
+ async setUserAgent() {
324
+ // Read the cdktf version from the 'cdk.tf.json' file
325
+ // and set the user agent.
326
+ const version = await (0, commons_1.readCDKTFVersion)(this.workdir);
327
+ if (version != "") {
328
+ process.env.TF_APPEND_USER_AGENT =
329
+ "cdktn/" +
330
+ version +
331
+ " (+https://github.com/open-constructs/cdk-terrain)";
332
+ }
333
+ }
334
+ // We don't need to clean anything up for a running execution in the CLI since there is no left-over state in contrast to an open Terraform Cloud run
335
+ async abort() {
336
+ return;
337
+ }
338
+ }
339
+ exports.TerraformCli = TerraformCli;
340
+ async function tryReadGeneratedConfigurationFile(workingDir) {
341
+ const generatedConfigPath = path_1.default.join(workingDir, GENERATE_CONFIG_OUT_FILE);
342
+ if (!fs.existsSync(generatedConfigPath)) {
343
+ return null;
344
+ }
345
+ return fs.readFileSync(generatedConfigPath, "utf-8");
346
+ }
347
+ exports.tryReadGeneratedConfigurationFile = tryReadGeneratedConfigurationFile;
348
+ async function tryRemoveGeneratedConfigurationFile(workingDir) {
349
+ const generatedConfigPath = path_1.default.join(workingDir, GENERATE_CONFIG_OUT_FILE);
350
+ if (fs.existsSync(generatedConfigPath)) {
351
+ fs.unlinkSync(generatedConfigPath);
352
+ }
353
+ }
354
+ exports.tryRemoveGeneratedConfigurationFile = tryRemoveGeneratedConfigurationFile;
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL3RlcnJhZm9ybS1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDREQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsMkNBTXFCO0FBRXJCLHFEQUswQjtBQUMxQixnREFBNkM7QUFDN0Msc0NBQTRDO0FBQzVDLHNEQUF3RDtBQUN4RCwrREFBeUQ7QUFDekQsZ0RBQXdCO0FBQ3hCLDZDQUErQjtBQUUvQixNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBRTFELE1BQWEsZ0JBQ1gsU0FBUSxpQ0FBcUI7SUFHN0IsWUFDa0IsUUFBZ0IsRUFDaEIsSUFBNEI7UUFFNUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWMsQ0FBQyxDQUFDO1FBSDlDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBd0I7SUFHOUMsQ0FBQztDQUNGO0FBVkQsNENBVUM7QUFFRCxNQUFlLG9CQUFvQjtDQUdsQztBQUdELDRGQUE0RjtBQUM1RixnR0FBZ0c7QUFDaEcsTUFBTSxzQkFBdUIsU0FBUSxvQkFBb0I7SUFDdkQscURBQXFEO0lBQ3JELElBQUk7SUFDSiwwQ0FBMEM7SUFDMUMsSUFBSTtJQUNKLDJDQUEyQztJQUMzQywrQkFBK0I7SUFDL0IsSUFBSTtJQUNKLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsa0JBQWtCO0lBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFhO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixPQUFPLENB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QWlDLENBQ3JELFVBQWtCO0lBRWxCLE1BQU0sbUJBQW1CLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFSRCw4RUFRQztBQUVNLEtBQUssVUFBVSxtQ0FBbUMsQ0FBQyxVQUFrQjtJQUMxRSxNQUFNLG1CQUFtQixHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDNUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUN2QyxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDckMsQ0FBQztBQUNILENBQUM7QUFMRCxrRkFLQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgc3RyaXBBbnNpIGZyb20gXCJzdHJpcC1hbnNpXCI7XG5pbXBvcnQge1xuICBFcnJvcnMsXG4gIGV4ZWMsXG4gIGxvZ2dlcixcbiAgcmVhZENES1RGVmVyc2lvbixcbiAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm0sXG4gIFRlcnJhZm9ybVBsYW4sXG4gIFRlcnJhZm9ybU91dHB1dCxcbiAgQWJzdHJhY3RUZXJyYWZvcm1QbGFuLFxuICBUZXJyYWZvcm1EZXBsb3lTdGF0ZSxcbn0gZnJvbSBcIi4vdGVycmFmb3JtXCI7XG5pbXBvcnQgeyBTeW50aGVzaXplZFN0YWNrIH0gZnJvbSBcIi4uL3N5bnRoLXN0YWNrXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2UsXG4gIGNyZWF0ZUFuZFN0YXJ0RGVzdHJveVNlcnZpY2UsXG4gIERlcGxveVN0YXRlLFxuICBpc0RlcGxveUV2ZW50LFxufSBmcm9tIFwiLi9kZXBsb3ktbWFjaGluZVwiO1xuaW1wb3J0IHsgd2FpdEZvciB9IGZyb20gXCJ4c3RhdGUvbGliL3dhaXRGb3JcIjtcbmltcG9ydCB7IG1pc3NpbmdWYXJpYWJsZSB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB7IHRlcnJhZm9ybUpzb25TY2hlbWEgfSBmcm9tIFwiLi4vdGVycmFmb3JtLWpzb25cIjtcbmltcG9ydCB7IHNwYXduSW50ZXJhY3RpdmUgfSBmcm9tIFwiLi9pbnRlcmFjdGl2ZS1wcm9jZXNzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5cbmNvbnN0IEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSA9IFwiZ2VuZXJhdGVkX3Jlc291cmNlcy50ZlwiO1xuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtQ2xpUGxhblxuICBleHRlbmRzIEFic3RyYWN0VGVycmFmb3JtUGxhblxuICBpbXBsZW1lbnRzIFRlcnJhZm9ybVBsYW5cbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW5GaWxlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW46IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICkge1xuICAgIHN1cGVyKHBsYW5GaWxlLCBwbGFuPy5yZXNvdXJjZV9jaGFuZ2VzLCBwbGFuPy5vdXRwdXRfY2hhbmdlcyk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPdXRwdXRGaWx0ZXIge1xuICBwdWJsaWMgc3RhdGljIGNvbmRpdGlvbjogKGxpbmU6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm06IChsaW5lOiBzdHJpbmcpID0+IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIE91dHB1dEZpbHRlciA9IHR5cGVvZiBBYnN0cmFjdE91dHB1dEZpbHRlcjtcblxuLy8gVGhlIHBsYW4gbWlnaHQgZXJyb3IgaWYgdGhlcmUgaXMgYSB2YXJpYWJsZSBtaXNzaW5nLCBidXQgdGhlIGVycm9yIG1lc3NhZ2UgaGludHMgdGhlIHVzZXJcbi8vIGluIGEgd3JvbmcgZGlyZWN0aW9uLiBXZSB0aGVyZWZvcmUgY2F0Y2ggdGhlIGVycm9yIGFuZCByZXRocm93IGl0IHdpdGggYSBtb3JlIGhlbHBmdWwgbWVzc2FnZVxuY2xhc3MgVmFyaWFibGVSZXF1aXJlZEZpbHRlciBleHRlbmRzIEFic3RyYWN0T3V0cHV0RmlsdGVyIHtcbiAgLy8gRXhhbXBsZSBmb3IgXCJObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcIiBlcnJvclxuICAvLyDilbdcbiAgLy8g4pSCIEVycm9yOiBObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcbiAgLy8g4pSCXG4gIC8vIOKUgiAgIG9uIGNkay50Zi5qc29uIGxpbmUgMzEsIGluIHZhcmlhYmxlOlxuICAvLyDilIIgICAzMTogICAgIFwid2l0aC1kYXNoZXNcIjoge1xuICAvLyDilIJcbiAgLy8g4pSCIFRoZSByb290IG1vZHVsZSBpbnB1dCB2YXJpYWJsZSBcIndpdGgtZGFzaGVzXCIgaXMgbm90IHNldCwgYW5kIGhhcyBubyBkZWZhdWx0XG4gIC8vIOKUgiB2YWx1ZS4gVXNlIGEgLXZhciBvciAtdmFyLWZpbGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHByb3ZpZGUgYSB2YWx1ZSBmb3JcbiAgLy8g4pSCIHRoaXMgdmFyaWFibGVcbiAgcHVibGljIHN0YXRpYyBjb25kaXRpb24oaW5wdXQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmUgPSBzdHJpcEFuc2koaW5wdXQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGxpbmUuaW5jbHVkZXMoXCJFcnJvcjogTm8gdmFsdWUgZm9yIHJlcXVpcmVkIHZhcmlhYmxlXCIpICYmXG4gICAgICBsaW5lLmluY2x1ZGVzKFwiVGhlIHJvb3QgbW9kdWxlIGlucHV0IHZhcmlhYmxlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHRyYW5zZm9ybShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFydE1hcmtlciA9ICdUaGUgcm9vdCBtb2R1bGUgaW5wdXQgdmFyaWFibGUgXCInO1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGxpbmUuc3Vic3RyaW5nKFxuICAgICAgbGluZS5pbmRleE9mKHN0YXJ0TWFya2VyKSArIHN0YXJ0TWFya2VyLmxlbmd0aCxcbiAgICAgIGxpbmUuaW5kZXhPZignXCIgaXMgbm90IHNldCcpLFxuICAgICk7XG5cbiAgICByZXR1cm4gbWlzc2luZ1ZhcmlhYmxlKHZhcmlhYmxlTmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybUNsaSBpbXBsZW1lbnRzIFRlcnJhZm9ybSB7XG4gIHB1YmxpYyByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRvdXQ6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3Rkb3V0OiBCdWZmZXIgfCBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRlcnI6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxuICAgIHB1YmxpYyByZWFkb25seSBzdGFjazogU3ludGhlc2l6ZWRTdGFjayxcbiAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyID0gKF9waGFzZTogc3RyaW5nLCBfZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoX3N0ZG91dDogc3RyaW5nLCBfaXNFcnIgPSBmYWxzZSkgPT4ge30sXG4gICkge1xuICAgIHRoaXMud29ya2RpciA9IHN0YWNrLndvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5vblN0ZG91dCA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+IChzdGRvdXQ6IEJ1ZmZlciB8IHN0cmluZykgPT5cbiAgICAgICAgY3JlYXRlVGVycmFmb3JtTG9nSGFuZGxlcihcbiAgICAgICAgICBwaGFzZSxcbiAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICkoQnVmZmVyLmlzQnVmZmVyKHN0ZG91dCkgPyBzdGRvdXQudG9TdHJpbmcoKSA6IHN0ZG91dCk7XG4gICAgdGhpcy5vblN0ZGVyciA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PlxuICAgICAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKHBoYXNlLCBmaWx0ZXIpKHN0ZGVyci50b1N0cmluZygpLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdHM6IHtcbiAgICBuZWVkc1VwZ3JhZGU6IGJvb2xlYW47XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlOiBib29sZWFuO1xuICAgIG5lZWRzTG9ja2ZpbGVVcGRhdGU6IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuXG4gICAgY29uc3QgYXJncyA9IFtcImluaXRcIl07XG4gICAgaWYgKG9wdHMubmVlZHNVcGdyYWRlKSB7XG4gICAgICBhcmdzLnB1c2goXCItdXBncmFkZVwiKTtcbiAgICB9XG4gICAgaWYgKG9wdHMubm9Db2xvcikge1xuICAgICAgYXJncy5wdXNoKFwiLW5vLWNvbG9yXCIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5taWdyYXRlU3RhdGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi1taWdyYXRlLXN0YXRlXCIpO1xuICAgIH1cblxuICAgIGxldCBpbml0Q2FuTm90Q29udGludWUgPSAoX2VycjogYW55KSA9PiB7fTtcbiAgICBjb25zdCByZWplY3RzSWZJbml0Q2FuTm90Q29udGludWUgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5pdENhbk5vdENvbnRpbnVlID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3Rkb3V0ID0gdGhpcy5vblN0ZG91dChcImluaXRcIik7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBleGl0Q29kZSB9ID0gc3Bhd25JbnRlcmFjdGl2ZShcbiAgICAgIHtcbiAgICAgICAgZmlsZTogdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgICAgYXJncyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgYW55LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgIHN0ZG91dChkYXRhKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEuaW5jbHVkZXMoXCJTaG91bGQgVGVycmFmb3JtIG1pZ3JhdGUgeW91ciBleGlzdGluZyBzdGF0ZT9cIikgfHxcbiAgICAgICAgICBkYXRhLmluY2x1ZGVzKFwiRG8geW91IHdhbnQgdG8gY29weSBleGlzdGluZyBzdGF0ZSB0byB0aGUgbmV3IGJhY2tlbmRcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiB0ZXJyYWZvcm0gaXMgcGFzc2VkIHRoZSAtbWlncmF0ZS1zdGF0ZSBhbnl3YXksIHNvIHRoaXMgY2hlY2sgaXMgcmVkdW5kYW50XG4gICAgICAgICAgaWYgKG9wdHMubWlncmF0ZVN0YXRlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLndyaXRlTGluZShcInllc1wiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aW9ucy5zdG9wKCk7XG4gICAgICAgICAgICBpbml0Q2FuTm90Q29udGludWUoXG4gICAgICAgICAgICAgIFwiUGxlYXNlIHBhc3MgdGhlIC0tbWlncmF0ZS1zdGF0ZSBmbGFnIHRvIG1pZ3JhdGUgeW91ciBzdGF0ZVwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICBhY3Rpb25zLnN0b3AoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZXhpdENvZGUudGhlbigoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0ZXJyYWZvcm0gaW5pdCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UucmFjZShbcHJvZ3Jlc3MsIHJlamVjdHNJZkluaXRDYW5Ob3RDb250aW51ZV0pO1xuXG4gICAgLy8gVE9ETzogdGhpcyBtaWdodCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgd2UncmVcbiAgICAvLyBydW5uaW5nIGEgcmVtb3RlIHBsYW4gb3IgYSBsb2NhbCBvbmUgKHNvIHdlIHJ1biBpdCBhbHdheXMgZm9yIGFsbCBwbGF0Zm9ybXMpXG4gICAgLy8gd2hpbGUgd2UnZCBvbmx5IG5lZWQgaXQgZm9yIHJlbW90ZSBwbGFuc1xuICAgIGlmIChvcHRzLm5lZWRzTG9ja2ZpbGVVcGRhdGUpIHtcbiAgICAgIGF3YWl0IGV4ZWMoXG4gICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgIFtcbiAgICAgICAgICBcInByb3ZpZGVyc1wiLFxuICAgICAgICAgIFwibG9ja1wiLFxuICAgICAgICAgIFwiLXBsYXRmb3JtPWxpbnV4X2FtZDY0XCIsXG4gICAgICAgICAgLi4uKG9wdHMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICAgIG5vQ29sb3I6IG9wdHMubm9Db2xvcixcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5vblN0ZG91dChcImluaXRcIiksXG4gICAgICAgIHRoaXMub25TdGRlcnIoXCJpbml0XCIpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0Nsb3VkU3RhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uYmFja2VuZD8ucmVtb3RlIHx8IHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uY2xvdWQsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0ltcG9ydHMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihwYXJzZWRTdGFjay5pbXBvcnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYW4ob3B0czoge1xuICAgIGRlc3Ryb3k6IGJvb2xlYW47XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge1xuICAgICAgZGVzdHJveSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICB2YXJzID0gW10sXG4gICAgICB2YXJGaWxlcyA9IFtdLFxuICAgICAgbm9Db2xvciA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXCJwbGFuXCIsIFwiLWlucHV0PWZhbHNlXCJdO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnRmlsZSA9IHBhdGguam9pbihcbiAgICAgIHRoaXMud29ya2RpcixcbiAgICAgIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSxcbiAgICApO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ0ZpbGUpKSB7XG4gICAgICBmcy5yZW1vdmUoZ2VuZXJhdGVkQ29uZmlnRmlsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0ltcG9ydHMpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLWdlbmVyYXRlLWNvbmZpZy1vdXQ9JHtHRU5FUkFURV9DT05GSUdfT1VUX0ZJTEV9YCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0Nsb3VkU3RhY2spIHtcbiAgICAgIGNvbnN0IHBsYW5GaWxlID0gXCJwbGFuXCI7XG4gICAgICBvcHRpb25zLnB1c2goXCItb3V0XCIsIHBsYW5GaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoZGVzdHJveSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLWRlc3Ryb3lcIik7XG4gICAgfVxuICAgIGlmIChyZWZyZXNoT25seSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLXJlZnJlc2gtb25seVwiKTtcbiAgICB9XG4gICAgaWYgKHBhcmFsbGVsaXNtID4gLTEpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLXBhcmFsbGVsaXNtPSR7cGFyYWxsZWxpc219YCk7XG4gICAgfVxuICAgIGlmIChub0NvbG9yKSB7XG4gICAgICBvcHRpb25zLnB1c2goXCItbm8tY29sb3JcIik7XG4gICAgfVxuXG4gICAgdmFycy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXI9JHt2fWApKTtcbiAgICB2YXJGaWxlcy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXItZmlsZT0ke3Z9YCkpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEV4ZWN1dGluZyAke3RlcnJhZm9ybUJpbmFyeU5hbWV9ICR7b3B0aW9ucy5qb2luKFwiIFwiKX0gaW4gJHt0aGlzLndvcmtkaXJ9YCxcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcblxuICAgIGF3YWl0IGV4ZWMoXG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcixcbiAgICAgIH0sXG4gICAgICB0aGlzLm9uU3Rkb3V0KFwicGxhblwiLCBbVmFyaWFibGVSZXF1aXJlZEZpbHRlcl0pLFxuICAgICAgdGhpcy5vblN0ZGVycihcInBsYW5cIiwgW1ZhcmlhYmxlUmVxdWlyZWRGaWx0ZXJdKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveShcbiAgICB7XG4gICAgICBhdXRvQXBwcm92ZSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIG5vQ29sb3IgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICBleHRyYU9wdGlvbnMgPSBbXSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgfSxcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY3JlYXRlQW5kU3RhcnREZXBsb3lTZXJ2aWNlKHtcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICB3b3JrZGlyOiB0aGlzLndvcmtkaXIsXG4gICAgICByZWZyZXNoT25seSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICBhdXRvQXBwcm92ZSxcbiAgICAgIHBhcmFsbGVsaXNtLFxuICAgICAgZXh0cmFPcHRpb25zLFxuICAgICAgdmFycyxcbiAgICAgIHZhckZpbGVzLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcnZpY2UoXCJkZXBsb3lcIiwgc2VydmljZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3koXG4gICAge1xuICAgICAgYXV0b0FwcHJvdmUgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICBub0NvbG9yID0gZmFsc2UsXG4gICAgICBleHRyYU9wdGlvbnMgPSBbXSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgfSxcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY3JlYXRlQW5kU3RhcnREZXN0cm95U2VydmljZSh7XG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgd29ya2RpcjogdGhpcy53b3JrZGlyLFxuICAgICAgYXV0b0FwcHJvdmUsXG4gICAgICBwYXJhbGxlbGlzbSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICBleHRyYU9wdGlvbnMsXG4gICAgICB2YXJzLFxuICAgICAgdmFyRmlsZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VydmljZShcImRlc3Ryb3lcIiwgc2VydmljZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXJ2aWNlKFxuICAgIHR5cGU6IFwiZGVwbG95XCIgfCBcImRlc3Ryb3lcIixcbiAgICBzZXJ2aWNlOlxuICAgICAgfCBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2U+XG4gICAgICB8IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUFuZFN0YXJ0RGVzdHJveVNlcnZpY2U+LFxuICAgIGNhbGxiYWNrOiAoc3RhdGU6IFRlcnJhZm9ybURlcGxveVN0YXRlKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICAvLyBzdG9wIHRlcnJhZm9ybSBhcHBseSBpZiBzaWduYWxlZCBhcyBzdWNoIGZyb20gdGhlIG91dHNpZGUgKGUuZy4gdmlhIGN0cmwrYylcbiAgICB0aGlzLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImFib3J0XCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHNlcnZpY2Uuc2VuZChcIlNUT1BcIik7XG4gICAgICB9LFxuICAgICAgeyBvbmNlOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIC8vIHJlbGF5IGxvZ3MgdG8gc3Rkb3V0XG4gICAgc2VydmljZS5vbkV2ZW50KChldmVudCkgPT4ge1xuICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lIGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9VVFBVVF9SRUNFSVZFRFwiKSlcbiAgICAgICAgdGhpcy5vblN0ZG91dCh0eXBlKShldmVudC5vdXRwdXQpO1xuICAgICAgZWxzZSBpZiAoaXNEZXBsb3lFdmVudChldmVudCwgXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIpKVxuICAgICAgICBjYWxsYmFjayh7IHR5cGU6IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIiwgYXBwcm92ZWQ6IHRydWUgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIikpXG4gICAgICAgIGNhbGxiYWNrKHsgdHlwZTogXCJleHRlcm5hbCBhcHByb3ZhbCByZXBseVwiLCBhcHByb3ZlZDogZmFsc2UgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIGVsc2UgaWYgKGlzRGVwbG95RXZlbnQoZXZlbnQsIFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJldmlvdXNTdGF0ZTogRGVwbG95U3RhdGVbXCJ2YWx1ZVwiXSA9IFwiaWRsZVwiO1xuXG4gICAgc2VydmljZS5vblRyYW5zaXRpb24oKHN0YXRlKSA9PiB7XG4gICAgICAvLyBvbmx5IHNlbmQgdXBkYXRlcyBvbiBhY3R1YWwgc3RhdGUgY2hhbmdlXG4gICAgICAvLyBvblRyYW5zaXRpb24gaXMgY2FsbGVkIGV2ZW4gaWYgdGhlIHN0YXRlIGRpZG4ndCBjaGFuZ2UgYnV0IG9ubHkgYW4gZXZlbnQgaGFwcGVuZWRcbiAgICAgIGlmIChzdGF0ZS5tYXRjaGVzKHByZXZpb3VzU3RhdGUgYXMgRGVwbG95U3RhdGVbXCJ2YWx1ZVwiXSkpIHJldHVybjtcblxuICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lIHN0YXRlIHRyYW5zaXRpb246ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNTdGF0ZSxcbiAgICAgICAgKX0gPT4gJHtKU09OLnN0cmluZ2lmeShzdGF0ZS52YWx1ZSl9YCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzdGF0ZS5tYXRjaGVzKHsgcnVubmluZzogXCJhd2FpdGluZ19hcHByb3ZhbFwiIH0pKSB7XG4gICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICB0eXBlOiBcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCIsXG4gICAgICAgICAgYXBwcm92ZTogKCkgPT4gc2VydmljZS5zZW5kKFwiQVBQUk9WRVwiKSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHNlcnZpY2Uuc2VuZChcIlJFSkVDVFwiKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLm1hdGNoZXMoeyBydW5uaW5nOiBcImF3YWl0aW5nX3NlbnRpbmVsX292ZXJyaWRlXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICBvdmVycmlkZTogKCkgPT4gc2VydmljZS5zZW5kKFwiT1ZFUlJJREVcIiksXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiBzZXJ2aWNlLnNlbmQoXCJSRUpFQ1RfT1ZFUlJJREVcIiksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5tYXRjaGVzKHsgcnVubmluZzogXCJwcm9jZXNzaW5nXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwicnVubmluZ1wiLFxuICAgICAgICAgIGNhbmNlbGxlZDogQm9vbGVhbihzdGF0ZS5jb250ZXh0LmNhbmNlbGxlZCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcHJldmlvdXNTdGF0ZSA9IHN0YXRlLnZhbHVlIGFzIERlcGxveVN0YXRlW1widmFsdWVcIl07XG4gICAgfSk7XG4gICAgc2VydmljZS5zdGFydCgpO1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgd2FpdEZvcihzZXJ2aWNlLCAoc3RhdGUpID0+ICEhc3RhdGUuZG9uZSwge1xuICAgICAgdGltZW91dDogSW5maW5pdHksXG4gICAgfSk7XG5cbiAgICBsb2dnZXIudHJhY2UoXG4gICAgICBgSW52b2tpbmcgVGVycmFmb3JtIENMSSBmb3IgJHt0eXBlfSBkb25lIChzdGF0ZSBtYWNoaW5lIHJlYWNoZWQgZmluYWwgc3RhdGUpLiBMYXN0IGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBzdGF0ZS5ldmVudCxcbiAgICAgICl9LiBDb250ZXh0OiAke0pTT04uc3RyaW5naWZ5KHN0YXRlLmNvbnRleHQpfWAsXG4gICAgKTtcblxuICAgIC8vIGV4YW1wbGUgZXZlbnRzOiB7IHR5cGU6ICdFWElURUQnLCBleGl0Q29kZTogMCB9LCB7IHR5cGU6ICdFWFRFUk5BTF9SRUpFQ1QnIH1cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5ldmVudC50eXBlID09PSBcIkVYSVRFRFwiICYmXG4gICAgICBzdGF0ZS5ldmVudC5leGl0Q29kZSAhPT0gMCAmJlxuICAgICAgIXN0YXRlLmNvbnRleHQuY2FuY2VsbGVkIC8vIGRvbid0IGZhaWwgaWYgd2UgY2FuY2VsbGVkIHRoZSBydW5cbiAgICApIHtcbiAgICAgIHRocm93IGBJbnZva2luZyBUZXJyYWZvcm0gQ0xJIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke3N0YXRlLmV2ZW50LmV4aXRDb2RlfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2FuY2VsbGVkOiBCb29sZWFuKHN0YXRlLmNvbnRleHQuY2FuY2VsbGVkKSB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWMoXG4gICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgIFtcIi12XCJdLFxuICAgICAgICB7XG4gICAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgbm9Db2xvcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5vblN0ZG91dChcInZlcnNpb25cIiksXG4gICAgICAgIHRoaXMub25TdGRlcnIoXCJ2ZXJzaW9uXCIpLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUZXJyYWZvcm0gQ0xJIG5vdCBwcmVzZW50IC0gUGxlYXNlIGluc3RhbGwgYSBjdXJyZW50IHZlcnNpb24gaHR0cHM6Ly9sZWFybi5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9nZXR0aW5nLXN0YXJ0ZWQvaW5zdGFsbC5odG1sXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvdXRwdXQoKTogUHJvbWlzZTx7IFtrZXk6IHN0cmluZ106IFRlcnJhZm9ybU91dHB1dCB9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZXhlYyhcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICBbXCJvdXRwdXRcIiwgXCItanNvblwiXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGxvZyB0aGUgb3V0cHV0IGhlcmUgc2luY2Ugd2UgdXNlIGl0IGxhdGVyIG9uXG4gICAgICAoKSA9PiB7fSxcbiAgICAgIHRoaXMub25TdGRlcnIoXCJvdXRwdXRcIiksXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShvdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYEZhaWxlZCB0byBwYXJzZSB0ZXJyYWZvcm0gb3V0cHV0OiAke2V9LiBUaGUgb3V0cHV0IHdhcyAnJHtvdXRwdXR9J2AsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRVc2VyQWdlbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmVhZCB0aGUgY2RrdGYgdmVyc2lvbiBmcm9tIHRoZSAnY2RrLnRmLmpzb24nIGZpbGVcbiAgICAvLyBhbmQgc2V0IHRoZSB1c2VyIGFnZW50LlxuICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCByZWFkQ0RLVEZWZXJzaW9uKHRoaXMud29ya2Rpcik7XG4gICAgaWYgKHZlcnNpb24gIT0gXCJcIikge1xuICAgICAgcHJvY2Vzcy5lbnYuVEZfQVBQRU5EX1VTRVJfQUdFTlQgPVxuICAgICAgICBcImNka3RuL1wiICtcbiAgICAgICAgdmVyc2lvbiArXG4gICAgICAgIFwiICgraHR0cHM6Ly9naXRodWIuY29tL29wZW4tY29uc3RydWN0cy9jZGstdGVycmFpbilcIjtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBkb24ndCBuZWVkIHRvIGNsZWFuIGFueXRoaW5nIHVwIGZvciBhIHJ1bm5pbmcgZXhlY3V0aW9uIGluIHRoZSBDTEkgc2luY2UgdGhlcmUgaXMgbm8gbGVmdC1vdmVyIHN0YXRlIGluIGNvbnRyYXN0IHRvIGFuIG9wZW4gVGVycmFmb3JtIENsb3VkIHJ1blxuICBwdWJsaWMgYXN5bmMgYWJvcnQoKSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUoXG4gIHdvcmtpbmdEaXI6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBjb25zdCBnZW5lcmF0ZWRDb25maWdQYXRoID0gcGF0aC5qb2luKHdvcmtpbmdEaXIsIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoZ2VuZXJhdGVkQ29uZmlnUGF0aCwgXCJ1dGYtOFwiKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeVJlbW92ZUdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlKHdvcmtpbmdEaXI6IHN0cmluZykge1xuICBjb25zdCBnZW5lcmF0ZWRDb25maWdQYXRoID0gcGF0aC5qb2luKHdvcmtpbmdEaXIsIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ1BhdGgpKSB7XG4gICAgZnMudW5saW5rU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/lib/models/terraform.ts"],"names":[],"mappings":"AAEA,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,oBAAY,2BAA2B;IACrC,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AACD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,UAAU,EAAE,2BAA2B,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IAC/B,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;CACtD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,eAAe,CAMxE;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAWD,8BAAsB,qBAAsB,YAAW,aAAa;aAEhD,QAAQ,EAAE,MAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFd,QAAQ,EAAE,MAAM,EACf,eAAe,EAAE,eAAe,EAAE,EAClC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAGvE,IAAW,SAAS,IAAI,eAAe,EAAE,CAOxC;IAED,IAAW,kBAAkB,IAAI,eAAe,EAAE,CAEjD;IAED,IAAW,OAAO,IAAI,eAAe,EAAE,CAKtC;IAED,IAAW,eAAe,IAAI,eAAe,EAAE,CAE9C;IAED,IAAW,UAAU,IAAI,OAAO,CAI/B;CACF;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GACvC;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,GACD;IACE,IAAI,EAAE,+BAA+B,CAAC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,GACD;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,kCAAkC,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,CAAC,IAAI,EAAE;QACX,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,YAAY,EAAE,OAAO,CAAC;KACvB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB,IAAI,EAAE,CAAC,IAAI,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,CACJ,OAAO,EAAE;QACP,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnC,OAAO,CACL,OAAO,EAAE;QACP,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;KAAE,CAAC,CAAC;IACtD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B"}