@microsoft/terraform-cdk-constructs 0.0.3-pre.10 → 0.0.3-pre.12

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 (202) hide show
  1. package/.jsii +858 -681
  2. package/API.md +499 -405
  3. package/README.md +4 -5
  4. package/docs/testing.md +39 -137
  5. package/lib/azure-actiongroup/lib/actiongroup.d.ts +1 -1
  6. package/lib/azure-actiongroup/lib/actiongroup.js +4 -4
  7. package/lib/azure-actiongroup/model/action-group-props.d.ts +3 -2
  8. package/lib/azure-actiongroup/model/action-group-props.js +1 -1
  9. package/lib/azure-actiongroup/test/AzureActionGroup.integ.js +66 -0
  10. package/lib/azure-actiongroup/test/AzureActionGroup.spec.js +5 -33
  11. package/lib/azure-applicationgateway/lib/gateway.d.ts +5 -3
  12. package/lib/azure-applicationgateway/lib/gateway.js +14 -7
  13. package/lib/azure-applicationgateway/test/AzureApplicationGateway.integ.d.ts +1 -0
  14. package/lib/azure-applicationgateway/test/AzureApplicationGateway.integ.js +272 -0
  15. package/lib/azure-applicationgateway/test/AzureApplicationGateway.spec.js +3 -35
  16. package/lib/azure-applicationinsights/lib/appinsights.d.ts +4 -3
  17. package/lib/azure-applicationinsights/lib/appinsights.js +6 -6
  18. package/lib/azure-applicationinsights/test/AzureAppInsights.integ.d.ts +1 -0
  19. package/lib/azure-applicationinsights/test/AzureAppInsights.integ.js +101 -0
  20. package/lib/azure-applicationinsights/test/AzureAppInsights.spec.js +4 -27
  21. package/lib/azure-containerregistry/lib/registry.d.ts +4 -3
  22. package/lib/azure-containerregistry/lib/registry.js +5 -5
  23. package/lib/azure-containerregistry/test/AzureContainerRegistry.integ.d.ts +1 -0
  24. package/lib/azure-containerregistry/test/AzureContainerRegistry.integ.js +68 -0
  25. package/lib/azure-containerregistry/test/AzureContainerRegistry.spec.js +4 -23
  26. package/lib/azure-datalake/lib/datalake.d.ts +1 -0
  27. package/lib/azure-datalake/lib/datalake.js +2 -1
  28. package/lib/azure-datalake/test/AzureDatalake.spec.d.ts +1 -0
  29. package/lib/azure-datalake/test/AzureDatalake.spec.js +32 -0
  30. package/lib/azure-datalake/test/AzureStorageAccount.integ.d.ts +1 -0
  31. package/lib/azure-datalake/test/AzureStorageAccount.integ.js +60 -0
  32. package/lib/azure-eventhub/lib/authorization.js +1 -1
  33. package/lib/azure-eventhub/lib/consumer.js +1 -1
  34. package/lib/azure-eventhub/lib/{cluster.d.ts → eventhubcluster.d.ts} +11 -7
  35. package/lib/azure-eventhub/lib/eventhubcluster.js +64 -0
  36. package/lib/azure-eventhub/lib/index.d.ts +1 -1
  37. package/lib/azure-eventhub/lib/index.js +2 -2
  38. package/lib/azure-eventhub/lib/instance.d.ts +1 -0
  39. package/lib/azure-eventhub/lib/instance.js +5 -4
  40. package/lib/azure-eventhub/lib/kusto-connection.js +1 -1
  41. package/lib/azure-eventhub/lib/namespace.d.ts +7 -6
  42. package/lib/azure-eventhub/lib/namespace.js +24 -26
  43. package/lib/azure-eventhub/test/AzureEventhub.integ.d.ts +1 -0
  44. package/lib/azure-eventhub/test/AzureEventhub.integ.js +72 -0
  45. package/lib/azure-eventhub/test/AzureEventhub.spec.js +4 -27
  46. package/lib/azure-functionapp/lib/functionapplinux.js +1 -1
  47. package/lib/azure-functionapp/test/AzureLinuxFunctionApp.integ.d.ts +1 -0
  48. package/lib/azure-functionapp/test/AzureLinuxFunctionApp.integ.js +117 -0
  49. package/lib/azure-functionapp/test/AzureLinuxFunctionApp.spec.js +4 -21
  50. package/lib/azure-keyvault/lib/certificate.js +2 -2
  51. package/lib/azure-keyvault/lib/key.js +1 -1
  52. package/lib/azure-keyvault/lib/policy.js +1 -1
  53. package/lib/azure-keyvault/lib/secret.js +1 -1
  54. package/lib/azure-keyvault/lib/vault.d.ts +3 -2
  55. package/lib/azure-keyvault/lib/vault.js +4 -4
  56. package/lib/azure-keyvault/test/AzureKeyVault.integ.d.ts +1 -0
  57. package/lib/azure-keyvault/test/AzureKeyVault.integ.js +119 -0
  58. package/lib/azure-keyvault/test/AzureKeyVault.spec.js +4 -35
  59. package/lib/azure-kubernetes/lib/cluster.js +1 -1
  60. package/lib/azure-kubernetes/test/AzureKubernetesCluster.integ.d.ts +1 -0
  61. package/lib/azure-kubernetes/test/AzureKubernetesCluster.integ.js +75 -0
  62. package/lib/azure-kubernetes/test/AzureKubernetesCluster.spec.js +4 -21
  63. package/lib/azure-kusto/lib/cluster.d.ts +9 -5
  64. package/lib/azure-kusto/lib/cluster.js +66 -42
  65. package/lib/azure-kusto/lib/compute-specification.js +1 -1
  66. package/lib/azure-kusto/lib/database.d.ts +7 -8
  67. package/lib/azure-kusto/lib/database.js +23 -25
  68. package/lib/azure-kusto/test/AzureKusto.integ.d.ts +1 -0
  69. package/lib/azure-kusto/test/AzureKusto.integ.js +74 -0
  70. package/lib/azure-kusto/test/AzureKusto.spec.js +3 -22
  71. package/lib/azure-loganalytics/lib/workspace.d.ts +6 -3
  72. package/lib/azure-loganalytics/lib/workspace.js +7 -6
  73. package/lib/azure-loganalytics/test/AzureLogAnalytics.integ.d.ts +1 -0
  74. package/lib/azure-loganalytics/test/AzureLogAnalytics.integ.js +117 -0
  75. package/lib/azure-loganalytics/test/AzureLogAnalytics.spec.js +4 -23
  76. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  77. package/lib/azure-metricalert/test/AzureMetricAlert.integ.d.ts +1 -0
  78. package/lib/azure-metricalert/test/AzureMetricAlert.integ.js +85 -0
  79. package/lib/azure-metricalert/test/AzureMetricAlert.spec.js +4 -21
  80. package/lib/azure-networksecuritygroup/lib/preconfigured-rules.js +1 -1
  81. package/lib/azure-networksecuritygroup/lib/securitygroup.d.ts +4 -3
  82. package/lib/azure-networksecuritygroup/lib/securitygroup.js +7 -7
  83. package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.integ.d.ts +1 -0
  84. package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.integ.js +85 -0
  85. package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.spec.js +4 -23
  86. package/lib/azure-queryrulealert/lib/query-rule-alert.js +1 -1
  87. package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.integ.d.ts +1 -0
  88. package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.integ.js +63 -0
  89. package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.spec.js +4 -21
  90. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  91. package/lib/azure-resourcegroup/test/AzureResourceGroup.integ.d.ts +1 -0
  92. package/lib/azure-resourcegroup/test/AzureResourceGroup.integ.js +41 -0
  93. package/lib/azure-resourcegroup/test/AzureResourceGroup.spec.js +4 -17
  94. package/lib/azure-storageaccount/lib/account.d.ts +5 -0
  95. package/lib/azure-storageaccount/lib/account.js +3 -2
  96. package/lib/azure-storageaccount/lib/container.js +2 -2
  97. package/lib/azure-storageaccount/lib/fileshare.js +2 -2
  98. package/lib/azure-storageaccount/lib/queue.js +1 -1
  99. package/lib/azure-storageaccount/lib/table.js +1 -1
  100. package/lib/azure-storageaccount/test/AzureStorageAccount.integ.d.ts +1 -0
  101. package/lib/azure-storageaccount/test/AzureStorageAccount.integ.js +84 -0
  102. package/lib/azure-storageaccount/test/AzureStorageAccount.spec.js +4 -17
  103. package/lib/azure-virtualmachine/lib/image-references.js +2 -2
  104. package/lib/azure-virtualmachine/lib/vm.d.ts +29 -6
  105. package/lib/azure-virtualmachine/lib/vm.js +17 -15
  106. package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.integ.d.ts +1 -0
  107. package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.integ.js +109 -0
  108. package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.spec.js +5 -25
  109. package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.integ.d.ts +1 -0
  110. package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.integ.js +105 -0
  111. package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.spec.js +4 -23
  112. package/lib/azure-virtualmachinescaleset/lib/cluster.d.ts +28 -6
  113. package/lib/azure-virtualmachinescaleset/lib/cluster.js +13 -11
  114. package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.integ.d.ts +1 -0
  115. package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.integ.js +113 -0
  116. package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.spec.js +5 -25
  117. package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.integ.d.ts +1 -0
  118. package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.integ.js +109 -0
  119. package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.spec.js +4 -23
  120. package/lib/azure-virtualnetwork/lib/network.d.ts +4 -3
  121. package/lib/azure-virtualnetwork/lib/network.js +7 -6
  122. package/lib/azure-virtualnetwork/lib/peering.js +1 -1
  123. package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.integ.d.ts +1 -0
  124. package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.integ.js +92 -0
  125. package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.spec.js +5 -25
  126. package/lib/core-azure/lib/diagsettings.d.ts +3 -2
  127. package/lib/core-azure/lib/diagsettings.js +15 -21
  128. package/lib/core-azure/lib/rbac.js +1 -1
  129. package/lib/core-azure/lib/resource.js +6 -4
  130. package/lib/core-azure/test/AzureResource.integ.d.ts +1 -0
  131. package/lib/core-azure/test/AzureResource.integ.js +75 -0
  132. package/lib/testing/index.d.ts +34 -0
  133. package/lib/testing/index.js +235 -2
  134. package/package.json +32 -11
  135. package/cdktf.out/manifest.json +0 -13
  136. package/cdktf.out/stacks/testAzureActionGroup/cdk.tf.json +0 -111
  137. package/cdktf.out/stacks/testAzureApplicationGateway/cdk.tf.json +0 -588
  138. package/cdktf.out/stacks/testAzureApplicationInsights/cdk.tf.json +0 -245
  139. package/cdktf.out/stacks/testAzureContainerRegistry/cdk.tf.json +0 -179
  140. package/cdktf.out/stacks/testAzureEventhub/cdk.tf.json +0 -236
  141. package/cdktf.out/stacks/testAzureKeyVault/cdk.tf.json +0 -436
  142. package/cdktf.out/stacks/testAzureKubernetesCluster/cdk.tf.json +0 -152
  143. package/cdktf.out/stacks/testAzureKusto/cdk.tf.json +0 -209
  144. package/cdktf.out/stacks/testAzureLinuxFunctionApp/cdk.tf.json +0 -439
  145. package/cdktf.out/stacks/testAzureLinuxVirtualMachineExample/cdk.tf.json +0 -283
  146. package/cdktf.out/stacks/testAzureLinuxVirtualMachineScaleSetExample/cdk.tf.json +0 -261
  147. package/cdktf.out/stacks/testAzureLogAnalytics/cdk.tf.json +0 -309
  148. package/cdktf.out/stacks/testAzureMetricAlert/cdk.tf.json +0 -161
  149. package/cdktf.out/stacks/testAzureNetworkSecurityGroup/cdk.tf.json +0 -271
  150. package/cdktf.out/stacks/testAzureQueryRuleAlert/cdk.tf.json +0 -122
  151. package/cdktf.out/stacks/testAzureResourceGroup/cdk.tf.json +0 -88
  152. package/cdktf.out/stacks/testAzureStorageAccount/cdk.tf.json +0 -339
  153. package/cdktf.out/stacks/testAzureVirtualNetwork/cdk.tf.json +0 -264
  154. package/cdktf.out/stacks/testAzureWindowVirtualMachineScaleSetExample/cdk.tf.json +0 -261
  155. package/cdktf.out/stacks/testAzureWindowsVirtualMachineExample/cdk.tf.json +0 -280
  156. package/cdktf.out/stacks/testExampleAzureResource/cdk.tf.json +0 -167
  157. package/lib/azure-actiongroup/test/ExampleAzureActionGroup.d.ts +0 -5
  158. package/lib/azure-actiongroup/test/ExampleAzureActionGroup.js +0 -66
  159. package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.d.ts +0 -5
  160. package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.js +0 -267
  161. package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.d.ts +0 -5
  162. package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.js +0 -87
  163. package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.d.ts +0 -5
  164. package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.js +0 -57
  165. package/lib/azure-eventhub/lib/cluster.js +0 -64
  166. package/lib/azure-eventhub/test/ExampleAzureEventhub.d.ts +0 -5
  167. package/lib/azure-eventhub/test/ExampleAzureEventhub.js +0 -72
  168. package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.d.ts +0 -5
  169. package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.js +0 -123
  170. package/lib/azure-keyvault/test/ExampleAzureKeyVault.d.ts +0 -5
  171. package/lib/azure-keyvault/test/ExampleAzureKeyVault.js +0 -112
  172. package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.d.ts +0 -5
  173. package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.js +0 -65
  174. package/lib/azure-kusto/test/ExampleAzureKusto.d.ts +0 -5
  175. package/lib/azure-kusto/test/ExampleAzureKusto.js +0 -71
  176. package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.d.ts +0 -5
  177. package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.js +0 -115
  178. package/lib/azure-metricalert/test/ExampleAzureMetricAlert.d.ts +0 -5
  179. package/lib/azure-metricalert/test/ExampleAzureMetricAlert.js +0 -81
  180. package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.d.ts +0 -5
  181. package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.js +0 -97
  182. package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.d.ts +0 -5
  183. package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.js +0 -67
  184. package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.d.ts +0 -5
  185. package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.js +0 -29
  186. package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.d.ts +0 -5
  187. package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.js +0 -102
  188. package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.d.ts +0 -5
  189. package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.js +0 -106
  190. package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.d.ts +0 -5
  191. package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.js +0 -102
  192. package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.d.ts +0 -5
  193. package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.js +0 -107
  194. package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.d.ts +0 -5
  195. package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.js +0 -103
  196. package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.d.ts +0 -5
  197. package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.js +0 -88
  198. package/lib/core-azure/test/AzureResource.spec.js +0 -19
  199. package/lib/core-azure/test/ExampleAzureResource.d.ts +0 -5
  200. package/lib/core-azure/test/ExampleAzureResource.js +0 -67
  201. package/tfsec.json +0 -4
  202. /package/lib/{core-azure/test/AzureResource.spec.d.ts → azure-actiongroup/test/AzureActionGroup.integ.d.ts} +0 -0
package/README.md CHANGED
@@ -8,7 +8,7 @@ With L2 Constructs, you get the following benefits:
8
8
  - **Abstraction**: Higher-level abstractions over Azure resources make your infrastructure code more declarative and easier to understand.
9
9
  - **Reusability**: Encapsulate common patterns and best practices in your infrastructure code, promoting reusability across different projects and teams.
10
10
  - **Rapid Development**: Accelerate your cloud development process with pre-built constructs that have been tested for common use cases, allowing you to focus on your unique application logic.
11
- - **Direct IDE Integration**: Access detailed documentation directly within your Integrated Development Environment (IDE), streamlining your development workflow: ![alt text](./docs/images/ide-documentation.png)
11
+ - **Direct IDE Integration**: Access detailed documentation directly within your Integrated Development Environment (IDE), streamlining your development workflow: ![alt text](https://raw.githubusercontent.com/Azure/terraform-cdk-constructs/main/docs/images/ide-documentation.png)
12
12
 
13
13
 
14
14
  ## Quick Example
@@ -112,11 +112,10 @@ Currently, our CDK L2 constructs are available in the following languages:
112
112
 
113
113
  | Language | Status |
114
114
  |------------|--------------|
115
- | TypeScript | Available |
116
- | Python | Coming soon |
115
+ | TypeScript | [Available](https://www.npmjs.com/package/@microsoft/terraform-cdk-constructs) |
116
+ | Python | [Available](https://pypi.org/project/microsoft-cdktfconstructs/) |
117
117
  | Java | Coming soon |
118
- | Go | Coming soon |
119
- | C# | Coming soon |
118
+ | C# | [Available](https://www.nuget.org/packages/Microsoft.Cdktf.Azure.TFConstructs) |
120
119
 
121
120
  Stay tuned for updates as we work to expand support to other popular programming languages!
122
121
 
package/docs/testing.md CHANGED
@@ -18,6 +18,29 @@ The purpose of this document is to provide guidelines for writing tests in the C
18
18
  - [Randomizing Globally Unique Resource Names](#randomizing-globally-unique-resource-names)
19
19
  - [End to End Tests](#end-to-end-tests-1)
20
20
 
21
+ # How to run tests
22
+
23
+ ### How to run any single test:
24
+ 1. Must be logged in with Az Login
25
+ 2. Run the following command:
26
+ ```
27
+ jest ./pathtotestfile/filename.ts
28
+ ```
29
+
30
+ ### How to run all unit tests at same time:
31
+ 1. Must be logged in with Az Login
32
+ 2. Run the following command:
33
+ ```
34
+ npx projen test
35
+ ```
36
+
37
+ ### How to run all integration tests at same time:
38
+ 1. Must be logged in with Az Login
39
+ 2. Run the following command:
40
+ ```
41
+ npm run integration:nostream
42
+ ```
43
+
21
44
 
22
45
  ## Writing Tests
23
46
 
@@ -67,6 +90,7 @@ The tests will use AZ CLI for authentication. Make sure to set the Azure subscri
67
90
  az account set -s MySubscription
68
91
  ```
69
92
 
93
+
70
94
  ## How to Write Unit Tests
71
95
  Unit tests are written in Typescript using Jest. They consist of a `spec` test file within the module folder under the `test` folder:
72
96
 
@@ -83,13 +107,13 @@ Below is a spec test for the resource group construct:
83
107
 
84
108
  ```
85
109
  # index.ts
86
- import { Testing, TerraformStack} from 'cdktf';
87
- import 'cdktf/lib/testing/adapters/jest';
88
- import { AzureResourceGroup } from '../';
89
- import {AzurermProvider} from "@cdktf/provider-azurerm/lib/provider";
90
-
110
+ import { AzurermProvider } from "@cdktf/provider-azurerm/lib/provider";
111
+ import { Testing, TerraformStack } from "cdktf";
112
+ import { TerraformPlan } from "../../testing";
113
+ import "cdktf/lib/testing/adapters/jest";
114
+ import * as rg from "..";
91
115
 
92
- describe('Resource Group With Defaults', () => {
116
+ describe("Resource Group With Defaults", () => {
93
117
  let stack: TerraformStack;
94
118
  let fullSynthResult: any;
95
119
 
@@ -97,24 +121,22 @@ describe('Resource Group With Defaults', () => {
97
121
  const app = Testing.app();
98
122
  stack = new TerraformStack(app, "test");
99
123
 
100
- new AzurermProvider(stack, "azureFeature", {features: {}});
101
- new AzureResourceGroup(stack, 'testRG');
124
+ new AzurermProvider(stack, "azureFeature", { features: {} });
125
+ new rg.Group(stack, "testRG");
102
126
 
103
- fullSynthResult = Testing.fullSynth(stack); // Save the result for reuse
127
+ fullSynthResult = Testing.fullSynth(stack);
104
128
  });
105
129
 
106
130
  it("renders a Resource Group with defaults and checks snapshot", () => {
107
- expect(
108
- Testing.synth(stack)
109
- ).toMatchSnapshot(); // Compare the already prepared stack
131
+ expect(Testing.synth(stack)).toMatchSnapshot();
110
132
  });
111
133
 
112
134
  it("check if the produced terraform configuration is valid", () => {
113
- expect(fullSynthResult).toBeValidTerraform(); // Use the saved result
135
+ expect(fullSynthResult).toBeValidTerraform();
114
136
  });
115
137
 
116
138
  it("check if this can be planned", () => {
117
- expect(fullSynthResult).toPlanSuccessfully(); // Use the saved result
139
+ TerraformPlan(fullSynthResult);
118
140
  });
119
141
  });
120
142
  ```
@@ -199,22 +221,21 @@ npm test src/azure-resourcegroup/test/AzureResourceGroup.spec.ts -- -u
199
221
 
200
222
 
201
223
  ## Integration Tests
202
- Integration tests are written in Golang using the Terratest library. The golang test ends in `_test.go`. An example file is used by the integration test to deploy an example of the construct and test that it works:
224
+ Integration tests are written in typescript and end in `.integ.ts`:
203
225
 
204
226
 
205
227
  ```plaintext
206
228
  src
207
229
  └── azure-resourcegroup
208
230
  ├── test
209
- ├── AzureResourceGroup_test.go
210
- │ └── ExampleAzureResourceGroup.ts
231
+ └── AzureResourceGroup.integ.ts
211
232
 
212
233
  └── index.ts
213
234
  ```
214
235
 
215
236
  The integration test will perform the following against the example file:
216
237
 
217
- 1. **terraform apply**: The integration test starts by executing a terraform apply using the Example file to set up the infrastructure.
238
+ 1. **terraform apply**: The integration test starts by executing a terraform apply.
218
239
  2. **terraform plan**: After setup, a terraform plan is run to:
219
240
  - Confirm there are no additional changes needed.
220
241
  - Ensure the setup is stable and consistent (idempotent).
@@ -223,125 +244,6 @@ The integration test will perform the following against the example file:
223
244
  - This step removes the test environment and ensures the infrastructure can be cleanly deleted.
224
245
  - It's designed to catch common problems that occur when removing infrastructure, especially those related to resource dependencies.
225
246
 
226
- You may also checkout the [Terratest](https://github.com/gruntwork-io/terratest/tree/master/test/azure) library for test examples to use against the Azure resources.
227
-
228
- ### Running the Integration Tests
229
-
230
- To run integration tests, use the following command in the test directory:
231
- ```
232
- /workspaces/…/azure-resourcegroup/test$ go test -v .
233
- ```
234
-
235
- This will kick off the integration test to synthesize the example file into Terraform configuration files within the `.tempstacks` folder in the module directory:
236
-
237
- ```plaintext
238
- src
239
- └── azure-resourcegroup
240
- ├── test
241
- │ ├── .tempstacks
242
- │ │ └── stacks
243
- │ │ └── testAzureResourceGroup
244
- │ │ └── cdk.tf.json
245
- │ ├── ExampleAzureResourceGroupStack.ts
246
- │ └── AzureResourceGroup_test.go
247
- └── index.ts
248
- ```
249
-
250
- The test will then run `tfcdk deploy *` to deploy all stacks, then it will run any API checks to validate the deployed resource followed by a `tfcdk destroy` to clean up all the resources.
251
-
252
- After the test runs, the `.tempstacks` directory is automatically deleted.
253
-
254
- #### Further Troubleshooting of Tests
255
-
256
- If there is a need to troubleshoot the stacks, you can comment out the `defer` block within the Go test and re-run the test:
257
-
258
- ```
259
- // Comment this out to stop .tempstacks from being deleted
260
- defer func() {
261
- util.CdkTFDestroyAll(t, terraformOptions, example_file)
262
- os.RemoveAll("./.tempstacks")
263
- }()
264
- ```
265
-
266
-
267
- ### Randomizing Globally Unique Resource Names
268
-
269
- **Goal**: Ensure each resource has a unique name to prevent conflicts, especially useful in test environments or when deploying multiple instances of the same infrastructure.
270
-
271
- **Method**: Use a base class in TypeScript to set up a naming pattern, and then use Golang to generate a random name for each test run.
272
-
273
- **Step 1**: Create a Base Class in TypeScript
274
- First, you'll need a base class, BaseTestStack, which includes a variable for the resource name. This class sets up a default name, which you can later override with a random value.
275
-
276
- ```typescript
277
- import {BaseTestStack} from "../../testing";
278
-
279
- const app = new App();
280
-
281
- export class exampleAzureResourceGroup extends BaseTestStack {
282
- constructor(scope: Construct, id: string) {
283
- super(scope, id);
284
-
285
- new AzurermProvider(this, "azure", {
286
- features: {},
287
- });
288
-
289
- new AzureResourceGroup(this, 'testRG', {
290
- name: `rg-${this.name}`,
291
- location: 'eastus',
292
- tags: {
293
- name: 'test',
294
- Env: "NonProd",
295
- },
296
- ignoreChanges: ['tags["Environment"]'],
297
-
298
- });
299
-
300
- }
301
- }
302
-
303
- ```
304
- **Step 2**: Extend the Base Class for Specific Resources
305
- When creating specific resources, extend the BaseTestStack class. Use this.name to create a unique name for each resource.
306
-
307
-
308
- ```typescript
309
- import {BaseTestStack} from "../../testing";
310
-
311
- export class exampleAzureResourceGroup extends BaseTestStack {
312
- constructor(scope: Construct, id: string) {
313
- super(scope, id);
314
-
315
- new AzureResourceGroup(this, 'testRG', {
316
- name: `rg-${this.name}`, // Unique name for the resource
317
- // ... other configurations ...
318
- });
319
- }
320
- }
321
- ```
322
-
323
- **Step 3**: Use Golang to Generate a Random Name During Tests
324
- In your Golang tests, generate a random string to use as the resource name. This ensures that every test run has a different name for its resources.
325
- ```typescript
326
- // Randomize System Name
327
- rndName := strings.ToLower(random.UniqueId())
328
-
329
- terraformOptions := &terraform.Options{
330
- TerraformBinary: "cdktf",
331
- //Terraform Variables
332
- Vars: map[string]interface{}{
333
- "name": rndName,
334
- },
335
- TerraformDir: "../../../",
336
- }
337
-
338
-
339
- ```
340
-
341
- When the test kicks off it will perform a `terraform -var=name=<RandomString>` to randomize the names of all the resources.
342
-
343
-
344
-
345
247
  ## End to End Tests
346
248
 
347
249
  End to End tests are used when testing a class that contains multiple stacks. The workflow is the same as with integration tests, however the test will take much longer.
@@ -15,7 +15,7 @@ export declare class ActionGroup extends AzureResource {
15
15
  * @param id - The unique identifier for this instance of the Action Group.
16
16
  * @param props - Configuration properties for the Action Group. These properties may include:
17
17
  * - `name`: The name of the Action Group.
18
- * - `resourceGroup`: The resource group under which the Action Group is created.
18
+ * - `resourceGroup`: Optional. Reference to the resource group for deployment.
19
19
  * - `shortName`: A shorter name for the Action Group used in notifications.
20
20
  * - `enabled`: Specifies if the Action Group is active. Defaults to true.
21
21
  * - `location`: The Azure region where the Action Group is hosted. Defaults to global.
@@ -15,7 +15,7 @@ class ActionGroup extends lib_1.AzureResource {
15
15
  * @param id - The unique identifier for this instance of the Action Group.
16
16
  * @param props - Configuration properties for the Action Group. These properties may include:
17
17
  * - `name`: The name of the Action Group.
18
- * - `resourceGroup`: The resource group under which the Action Group is created.
18
+ * - `resourceGroup`: Optional. Reference to the resource group for deployment.
19
19
  * - `shortName`: A shorter name for the Action Group used in notifications.
20
20
  * - `enabled`: Specifies if the Action Group is active. Defaults to true.
21
21
  * - `location`: The Azure region where the Action Group is hosted. Defaults to global.
@@ -48,7 +48,7 @@ class ActionGroup extends lib_1.AzureResource {
48
48
  constructor(scope, id, props) {
49
49
  super(scope, id);
50
50
  this.props = props;
51
- this.resourceGroup = props.resourceGroup;
51
+ this.resourceGroup = this.setupResourceGroup(props);
52
52
  /**
53
53
  * Define default values.
54
54
  */
@@ -61,7 +61,7 @@ class ActionGroup extends lib_1.AzureResource {
61
61
  const azurermMonitorActionGroup = new monitor_action_group_1.MonitorActionGroup(this, "actiongroup", {
62
62
  ...defaults,
63
63
  name: props.name,
64
- resourceGroupName: props.resourceGroup.name,
64
+ resourceGroupName: this.resourceGroup.name,
65
65
  shortName: props.shortName,
66
66
  armRoleReceiver: cdktf.listMapper(model.monitorActionGroupArmRoleReceiverToTerraform, true)(this.props.armRoleReceivers),
67
67
  emailReceiver: cdktf.listMapper(model.monitorActionGroupEmailReceiverToTerraform, true)(this.props.emailReceivers),
@@ -82,4 +82,4 @@ class ActionGroup extends lib_1.AzureResource {
82
82
  }
83
83
  }
84
84
  exports.ActionGroup = ActionGroup;
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtYWN0aW9uZ3JvdXAvbGliL2FjdGlvbmdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJGQUFzRjtBQUV0RiwrQkFBK0I7QUFFL0IsOENBQXFEO0FBQ3JELGtDQUFrQztBQUVsQyxNQUFhLFdBQVksU0FBUSxtQkFBYTtJQUk1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQ0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBRXpDOztXQUVHO1FBQ0gsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJO1lBQzlCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVE7WUFDcEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTtTQUN2QixDQUFDO1FBRUYsdURBQXVEO1FBQ3ZELE1BQU0seUJBQXlCLEdBQUcsSUFBSSx5Q0FBa0IsQ0FDdEQsSUFBSSxFQUNKLGFBQWEsRUFDYjtZQUNFLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUk7WUFDM0MsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGVBQWUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUMvQixLQUFLLENBQUMsNENBQTRDLEVBQ2xELElBQUksQ0FDTCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7WUFFOUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQzdCLEtBQUssQ0FBQywwQ0FBMEMsRUFDaEQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFFNUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQzdCLEtBQUssQ0FBQywwQ0FBMEMsRUFDaEQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFFNUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQzNCLEtBQUssQ0FBQyx3Q0FBd0MsRUFDOUMsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFFMUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQy9CLEtBQUssQ0FBQyw0Q0FBNEMsRUFDbEQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUU5QixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUNoQyxLQUFLLENBQUMsNkNBQTZDLEVBQ25ELElBQUksQ0FDTCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7WUFFL0Isb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDcEMsS0FBSyxDQUFDLGlEQUFpRCxFQUN2RCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDO1lBRW5DLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQ2hDLEtBQUssQ0FBQyw2Q0FBNkMsRUFDbkQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztTQUNoQyxDQUNGLENBQUM7UUFFRixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLEVBQUUsR0FBRyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7UUFFdkMsTUFBTSxpQ0FBaUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQ2pFLElBQUksRUFDSixJQUFJLEVBQ0o7WUFDRSxLQUFLLEVBQUUseUJBQXlCLENBQUMsRUFBRTtTQUNwQyxDQUNGLENBQUM7UUFFRixnSUFBZ0k7UUFDaEksaUNBQWlDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUNGO0FBM0hELGtDQTJIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vbml0b3JBY3Rpb25Hcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvbW9uaXRvci1hY3Rpb24tZ3JvdXBcIjtcbmltcG9ydCB7IFJlc291cmNlR3JvdXAgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF6dXJlcm0vbGliL3Jlc291cmNlLWdyb3VwXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBenVyZVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliXCI7XG5pbXBvcnQgKiBhcyBtb2RlbCBmcm9tIFwiLi4vbW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkdyb3VwIGV4dGVuZHMgQXp1cmVSZXNvdXJjZSB7XG4gIHJlYWRvbmx5IHByb3BzOiBtb2RlbC5BY3Rpb25Hcm91cFByb3BzO1xuICBwdWJsaWMgcmVzb3VyY2VHcm91cDogUmVzb3VyY2VHcm91cDtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNYW5hZ2VzIGFuIEF6dXJlIE1vbml0b3IgQWN0aW9uIEdyb3VwLCB3aGljaCBpcyB1c2VkIHRvIHRyaWdnZXIgYWN0aW9ucyBvciBub3RpZmljYXRpb25zIGJhc2VkIG9uIGFsZXJ0cyBvciBjb25kaXRpb25zIG1ldCB3aXRoaW4gQXp1cmUgTW9uaXRvci5cbiAgICpcbiAgICogQW4gQWN0aW9uIEdyb3VwIGluIEF6dXJlIE1vbml0b3IgZGVmaW5lcyBhIGNvbGxlY3Rpb24gb2YgaW5kaXZpZHVhbCBhY3Rpb25zIHRoYXQgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjb25kaXRpb25zIG9mIGFuIGFzc29jaWF0ZWQgYWxlcnQgcnVsZSBhcmUgbWV0LiBBY3Rpb25zIGNhbiBpbmNsdWRlIHNlbmRpbmcgZW1haWxzLCB0cmlnZ2VyaW5nIEF6dXJlIEZ1bmN0aW9ucywgY2FsbGluZyB3ZWJob29rcywgYW5kIG1vcmUuIFRoaXMgY2xhc3MgYWxsb3dzIGZvciBjb25maWd1cmluZyBhbmQgbWFuYWdpbmcgdGhlc2UgYWN0aW9ucywgbWFraW5nIGl0IGVzc2VudGlhbCBmb3Igc2V0dGluZyB1cCBjb21wcmVoZW5zaXZlIG1vbml0b3JpbmcgYW5kIHJlc3BvbnNlIHN5c3RlbXMgaW4gQXp1cmUgYXBwbGljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0LCB0eXBpY2FsbHkgcmVwcmVzZW50aW5nIHRoZSBDbG91ZCBEZXZlbG9wbWVudCBLaXQgKENESykgc3RhY2suXG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpbnN0YW5jZSBvZiB0aGUgQWN0aW9uIEdyb3VwLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBBY3Rpb24gR3JvdXAuIFRoZXNlIHByb3BlcnRpZXMgbWF5IGluY2x1ZGU6XG4gICAqICAgICAgICAgICAgICAgIC0gYG5hbWVgOiBUaGUgbmFtZSBvZiB0aGUgQWN0aW9uIEdyb3VwLlxuICAgKiAgICAgICAgICAgICAgICAtIGByZXNvdXJjZUdyb3VwYDogVGhlIHJlc291cmNlIGdyb3VwIHVuZGVyIHdoaWNoIHRoZSBBY3Rpb24gR3JvdXAgaXMgY3JlYXRlZC5cbiAgICogICAgICAgICAgICAgICAgLSBgc2hvcnROYW1lYDogQSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBBY3Rpb24gR3JvdXAgdXNlZCBpbiBub3RpZmljYXRpb25zLlxuICAgKiAgICAgICAgICAgICAgICAtIGBlbmFibGVkYDogU3BlY2lmaWVzIGlmIHRoZSBBY3Rpb24gR3JvdXAgaXMgYWN0aXZlLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiAgICAgICAgICAgICAgICAtIGBsb2NhdGlvbmA6IFRoZSBBenVyZSByZWdpb24gd2hlcmUgdGhlIEFjdGlvbiBHcm91cCBpcyBob3N0ZWQuIERlZmF1bHRzIHRvIGdsb2JhbC5cbiAgICogICAgICAgICAgICAgICAgLSBgdGFnc2A6IEEgZGljdGlvbmFyeSBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoZSBBY3Rpb24gR3JvdXAgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgIC0gUmVjZWl2ZXJzOiBDb25maWd1cmF0aW9ucyBmb3IgdmFyaW91cyB0eXBlcyBvZiBub3RpZmljYXRpb25zIChlLmcuLCBlbWFpbCwgU01TLCB3ZWJob29rKS5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhY3Rpb25Hcm91cCA9IG5ldyBBY3Rpb25Hcm91cCh0aGlzLCAnbXlBY3Rpb25Hcm91cCcsIHtcbiAgICogICBuYW1lOiAnY3JpdGljYWxBbGVydHNHcm91cCcsXG4gICAqICAgcmVzb3VyY2VHcm91cDogbXlSZXNvdXJjZUdyb3VwLFxuICAgKiAgIHNob3J0TmFtZTogJ0FsZXJ0cycsXG4gICAqICAgbG9jYXRpb246ICdFYXN0IFVTJyxcbiAgICogICBlbWFpbFJlY2VpdmVyczogW3tcbiAgICogICAgIG5hbWU6ICdhZG1pbicsXG4gICAqICAgICBlbWFpbEFkZHJlc3M6ICdhZG1pbkBleGFtcGxlLmNvbSdcbiAgICogICB9XSxcbiAgICogICBzbXNSZWNlaXZlcnM6IFt7XG4gICAqICAgICBuYW1lOiAnYWRtaW5TbXMnLFxuICAgKiAgICAgY291bnRyeUNvZGU6ICcxJyxcbiAgICogICAgIHBob25lTnVtYmVyOiAnNTU1MTIzNDU2NydcbiAgICogICB9XSxcbiAgICogICB0YWdzOiB7XG4gICAqICAgICBlbnZpcm9ubWVudDogJ3Byb2R1Y3Rpb24nXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqIFRoaXMgc2V0dXAgY3JlYXRlcyBhbiBBY3Rpb24gR3JvdXAgdGhhdCBzZW5kcyBlbWFpbCBhbmQgU01TIG5vdGlmaWNhdGlvbnMgd2hlbiB0cmlnZ2VyZWQgYnkgYW4gYWxlcnQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogbW9kZWwuQWN0aW9uR3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5yZXNvdXJjZUdyb3VwID0gcHJvcHMucmVzb3VyY2VHcm91cDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZSBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKi9cbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGVuYWJsZWQ6IHByb3BzLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgIGxvY2F0aW9uOiBwcm9wcy5sb2NhdGlvbiA/PyBcImdsb2JhbFwiLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/PyB7fSxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBBY3Rpb24gR3JvdXAgd2l0aCB0aGUgcHJvdmlkZWQgcHJvcGVydGllc1xuICAgIGNvbnN0IGF6dXJlcm1Nb25pdG9yQWN0aW9uR3JvdXAgPSBuZXcgTW9uaXRvckFjdGlvbkdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiYWN0aW9uZ3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdHMsXG4gICAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lOiBwcm9wcy5yZXNvdXJjZUdyb3VwLm5hbWUsXG4gICAgICAgIHNob3J0TmFtZTogcHJvcHMuc2hvcnROYW1lLFxuICAgICAgICBhcm1Sb2xlUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwQXJtUm9sZVJlY2VpdmVyVG9UZXJyYWZvcm0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSh0aGlzLnByb3BzLmFybVJvbGVSZWNlaXZlcnMpLFxuXG4gICAgICAgIGVtYWlsUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwRW1haWxSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5lbWFpbFJlY2VpdmVycyksXG5cbiAgICAgICAgdm9pY2VSZWNlaXZlcjogY2RrdGYubGlzdE1hcHBlcihcbiAgICAgICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBWb2ljZVJlY2VpdmVyVG9UZXJyYWZvcm0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSh0aGlzLnByb3BzLnZvaWNlUmVjZWl2ZXJzKSxcblxuICAgICAgICBzbXNSZWNlaXZlcjogY2RrdGYubGlzdE1hcHBlcihcbiAgICAgICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBTbXNSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5zbXNSZWNlaXZlcnMpLFxuXG4gICAgICAgIHdlYmhvb2tSZWNlaXZlcjogY2RrdGYubGlzdE1hcHBlcihcbiAgICAgICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBXZWJob29rUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMud2ViaG9va1JlY2VpdmVycyksXG5cbiAgICAgICAgZXZlbnRIdWJSZWNlaXZlcjogY2RrdGYubGlzdE1hcHBlcihcbiAgICAgICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBFdmVudEh1YlJlY2VpdmVyVG9UZXJyYWZvcm0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSh0aGlzLnByb3BzLmV2ZW50SHViUmVjZWl2ZXJzKSxcblxuICAgICAgICBhenVyZUFwcFB1c2hSZWNlaXZlcjogY2RrdGYubGlzdE1hcHBlcihcbiAgICAgICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBBenVyZUFwcFB1c2hSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5henVyZUFwcFB1c2hSZWNlaXZlcnMpLFxuXG4gICAgICAgIGxvZ2ljQXBwUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwTG9naWNBcHBSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5sb2dpY0FwcFJlY2VpdmVycyksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBUZXJyYWZvcm0gT3V0cHV0c1xuICAgIHRoaXMuaWQgPSBhenVyZXJtTW9uaXRvckFjdGlvbkdyb3VwLmlkO1xuXG4gICAgY29uc3QgY2RrdGZUZXJyYWZvcm1PdXRwdXRBY3Rpb25Hcm91cElkID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dChcbiAgICAgIHRoaXMsXG4gICAgICBcImlkXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBhenVyZXJtTW9uaXRvckFjdGlvbkdyb3VwLmlkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLypUaGlzIGFsbG93cyB0aGUgVGVycmFmb3JtIHJlc291cmNlIG5hbWUgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIG5hbWUuIFlvdSBjYW4gcmVtb3ZlIHRoZSBjYWxsIGlmIHlvdSBkb24ndCBuZWVkIHRoZW0gdG8gbWF0Y2guKi9cbiAgICBjZGt0ZlRlcnJhZm9ybU91dHB1dEFjdGlvbkdyb3VwSWQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgfVxufVxuIl19
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtYWN0aW9uZ3JvdXAvbGliL2FjdGlvbmdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJGQUFzRjtBQUV0RiwrQkFBK0I7QUFFL0IsOENBQXFEO0FBQ3JELGtDQUFrQztBQUVsQyxNQUFhLFdBQVksU0FBUSxtQkFBYTtJQUk1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQ0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQ7O1dBRUc7UUFDSCxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUk7WUFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUTtZQUNwQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1NBQ3ZCLENBQUM7UUFFRix1REFBdUQ7UUFDdkQsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLHlDQUFrQixDQUN0RCxJQUFJLEVBQ0osYUFBYSxFQUNiO1lBQ0UsR0FBRyxRQUFRO1lBQ1gsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSTtZQUMxQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQy9CLEtBQUssQ0FBQyw0Q0FBNEMsRUFDbEQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUU5QixhQUFhLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDN0IsS0FBSyxDQUFDLDBDQUEwQyxFQUNoRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUU1QixhQUFhLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDN0IsS0FBSyxDQUFDLDBDQUEwQyxFQUNoRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUU1QixXQUFXLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDM0IsS0FBSyxDQUFDLHdDQUF3QyxFQUM5QyxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUUxQixlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDL0IsS0FBSyxDQUFDLDRDQUE0QyxFQUNsRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1lBRTlCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQ2hDLEtBQUssQ0FBQyw2Q0FBNkMsRUFDbkQsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUUvQixvQkFBb0IsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUNwQyxLQUFLLENBQUMsaURBQWlELEVBQ3ZELElBQUksQ0FDTCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUM7WUFFbkMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FDaEMsS0FBSyxDQUFDLDZDQUE2QyxFQUNuRCxJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1NBQ2hDLENBQ0YsQ0FBQztRQUVGLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsRUFBRSxHQUFHLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztRQUV2QyxNQUFNLGlDQUFpQyxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FDakUsSUFBSSxFQUNKLElBQUksRUFDSjtZQUNFLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO1NBQ3BDLENBQ0YsQ0FBQztRQUVGLGdJQUFnSTtRQUNoSSxpQ0FBaUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUEzSEQsa0NBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9uaXRvckFjdGlvbkdyb3VwIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9tb25pdG9yLWFjdGlvbi1ncm91cFwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEF6dXJlUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWJcIjtcbmltcG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuLi9tb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uR3JvdXAgZXh0ZW5kcyBBenVyZVJlc291cmNlIHtcbiAgcmVhZG9ubHkgcHJvcHM6IG1vZGVsLkFjdGlvbkdyb3VwUHJvcHM7XG4gIHB1YmxpYyByZXNvdXJjZUdyb3VwOiBSZXNvdXJjZUdyb3VwO1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIE1hbmFnZXMgYW4gQXp1cmUgTW9uaXRvciBBY3Rpb24gR3JvdXAsIHdoaWNoIGlzIHVzZWQgdG8gdHJpZ2dlciBhY3Rpb25zIG9yIG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gYWxlcnRzIG9yIGNvbmRpdGlvbnMgbWV0IHdpdGhpbiBBenVyZSBNb25pdG9yLlxuICAgKlxuICAgKiBBbiBBY3Rpb24gR3JvdXAgaW4gQXp1cmUgTW9uaXRvciBkZWZpbmVzIGEgY29sbGVjdGlvbiBvZiBpbmRpdmlkdWFsIGFjdGlvbnMgdGhhdCBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbmRpdGlvbnMgb2YgYW4gYXNzb2NpYXRlZCBhbGVydCBydWxlIGFyZSBtZXQuIEFjdGlvbnMgY2FuIGluY2x1ZGUgc2VuZGluZyBlbWFpbHMsIHRyaWdnZXJpbmcgQXp1cmUgRnVuY3Rpb25zLCBjYWxsaW5nIHdlYmhvb2tzLCBhbmQgbW9yZS4gVGhpcyBjbGFzcyBhbGxvd3MgZm9yIGNvbmZpZ3VyaW5nIGFuZCBtYW5hZ2luZyB0aGVzZSBhY3Rpb25zLCBtYWtpbmcgaXQgZXNzZW50aWFsIGZvciBzZXR0aW5nIHVwIGNvbXByZWhlbnNpdmUgbW9uaXRvcmluZyBhbmQgcmVzcG9uc2Ugc3lzdGVtcyBpbiBBenVyZSBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3QsIHR5cGljYWxseSByZXByZXNlbnRpbmcgdGhlIENsb3VkIERldmVsb3BtZW50IEtpdCAoQ0RLKSBzdGFjay5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlIG9mIHRoZSBBY3Rpb24gR3JvdXAuXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIEFjdGlvbiBHcm91cC4gVGhlc2UgcHJvcGVydGllcyBtYXkgaW5jbHVkZTpcbiAgICogICAgICAgICAgICAgICAgLSBgbmFtZWA6IFRoZSBuYW1lIG9mIHRoZSBBY3Rpb24gR3JvdXAuXG4gICAqICAgICAgICAgICAgICAgIC0gYHJlc291cmNlR3JvdXBgOiBPcHRpb25hbC4gUmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSBncm91cCBmb3IgZGVwbG95bWVudC5cbiAgICogICAgICAgICAgICAgICAgLSBgc2hvcnROYW1lYDogQSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBBY3Rpb24gR3JvdXAgdXNlZCBpbiBub3RpZmljYXRpb25zLlxuICAgKiAgICAgICAgICAgICAgICAtIGBlbmFibGVkYDogU3BlY2lmaWVzIGlmIHRoZSBBY3Rpb24gR3JvdXAgaXMgYWN0aXZlLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiAgICAgICAgICAgICAgICAtIGBsb2NhdGlvbmA6IFRoZSBBenVyZSByZWdpb24gd2hlcmUgdGhlIEFjdGlvbiBHcm91cCBpcyBob3N0ZWQuIERlZmF1bHRzIHRvIGdsb2JhbC5cbiAgICogICAgICAgICAgICAgICAgLSBgdGFnc2A6IEEgZGljdGlvbmFyeSBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoZSBBY3Rpb24gR3JvdXAgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgIC0gUmVjZWl2ZXJzOiBDb25maWd1cmF0aW9ucyBmb3IgdmFyaW91cyB0eXBlcyBvZiBub3RpZmljYXRpb25zIChlLmcuLCBlbWFpbCwgU01TLCB3ZWJob29rKS5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhY3Rpb25Hcm91cCA9IG5ldyBBY3Rpb25Hcm91cCh0aGlzLCAnbXlBY3Rpb25Hcm91cCcsIHtcbiAgICogICBuYW1lOiAnY3JpdGljYWxBbGVydHNHcm91cCcsXG4gICAqICAgcmVzb3VyY2VHcm91cDogbXlSZXNvdXJjZUdyb3VwLFxuICAgKiAgIHNob3J0TmFtZTogJ0FsZXJ0cycsXG4gICAqICAgbG9jYXRpb246ICdFYXN0IFVTJyxcbiAgICogICBlbWFpbFJlY2VpdmVyczogW3tcbiAgICogICAgIG5hbWU6ICdhZG1pbicsXG4gICAqICAgICBlbWFpbEFkZHJlc3M6ICdhZG1pbkBleGFtcGxlLmNvbSdcbiAgICogICB9XSxcbiAgICogICBzbXNSZWNlaXZlcnM6IFt7XG4gICAqICAgICBuYW1lOiAnYWRtaW5TbXMnLFxuICAgKiAgICAgY291bnRyeUNvZGU6ICcxJyxcbiAgICogICAgIHBob25lTnVtYmVyOiAnNTU1MTIzNDU2NydcbiAgICogICB9XSxcbiAgICogICB0YWdzOiB7XG4gICAqICAgICBlbnZpcm9ubWVudDogJ3Byb2R1Y3Rpb24nXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqIFRoaXMgc2V0dXAgY3JlYXRlcyBhbiBBY3Rpb24gR3JvdXAgdGhhdCBzZW5kcyBlbWFpbCBhbmQgU01TIG5vdGlmaWNhdGlvbnMgd2hlbiB0cmlnZ2VyZWQgYnkgYW4gYWxlcnQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogbW9kZWwuQWN0aW9uR3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5yZXNvdXJjZUdyb3VwID0gdGhpcy5zZXR1cFJlc291cmNlR3JvdXAocHJvcHMpO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIGRlZmF1bHQgdmFsdWVzLlxuICAgICAqL1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgZW5hYmxlZDogcHJvcHMuZW5hYmxlZCA/PyB0cnVlLFxuICAgICAgbG9jYXRpb246IHByb3BzLmxvY2F0aW9uID8/IFwiZ2xvYmFsXCIsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzID8/IHt9LFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgdGhlIEFjdGlvbiBHcm91cCB3aXRoIHRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzXG4gICAgY29uc3QgYXp1cmVybU1vbml0b3JBY3Rpb25Hcm91cCA9IG5ldyBNb25pdG9yQWN0aW9uR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJhY3Rpb25ncm91cFwiLFxuICAgICAge1xuICAgICAgICAuLi5kZWZhdWx0cyxcbiAgICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgICAgcmVzb3VyY2VHcm91cE5hbWU6IHRoaXMucmVzb3VyY2VHcm91cC5uYW1lLFxuICAgICAgICBzaG9ydE5hbWU6IHByb3BzLnNob3J0TmFtZSxcbiAgICAgICAgYXJtUm9sZVJlY2VpdmVyOiBjZGt0Zi5saXN0TWFwcGVyKFxuICAgICAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEFybVJvbGVSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5hcm1Sb2xlUmVjZWl2ZXJzKSxcblxuICAgICAgICBlbWFpbFJlY2VpdmVyOiBjZGt0Zi5saXN0TWFwcGVyKFxuICAgICAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEVtYWlsUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMuZW1haWxSZWNlaXZlcnMpLFxuXG4gICAgICAgIHZvaWNlUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwVm9pY2VSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy52b2ljZVJlY2VpdmVycyksXG5cbiAgICAgICAgc21zUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwU21zUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMuc21zUmVjZWl2ZXJzKSxcblxuICAgICAgICB3ZWJob29rUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwV2ViaG9va1JlY2VpdmVyVG9UZXJyYWZvcm0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSh0aGlzLnByb3BzLndlYmhvb2tSZWNlaXZlcnMpLFxuXG4gICAgICAgIGV2ZW50SHViUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwRXZlbnRIdWJSZWNlaXZlclRvVGVycmFmb3JtLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkodGhpcy5wcm9wcy5ldmVudEh1YlJlY2VpdmVycyksXG5cbiAgICAgICAgYXp1cmVBcHBQdXNoUmVjZWl2ZXI6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwQXp1cmVBcHBQdXNoUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMuYXp1cmVBcHBQdXNoUmVjZWl2ZXJzKSxcblxuICAgICAgICBsb2dpY0FwcFJlY2VpdmVyOiBjZGt0Zi5saXN0TWFwcGVyKFxuICAgICAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cExvZ2ljQXBwUmVjZWl2ZXJUb1RlcnJhZm9ybSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApKHRoaXMucHJvcHMubG9naWNBcHBSZWNlaXZlcnMpLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gVGVycmFmb3JtIE91dHB1dHNcbiAgICB0aGlzLmlkID0gYXp1cmVybU1vbml0b3JBY3Rpb25Hcm91cC5pZDtcblxuICAgIGNvbnN0IGNka3RmVGVycmFmb3JtT3V0cHV0QWN0aW9uR3JvdXBJZCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJpZFwiLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogYXp1cmVybU1vbml0b3JBY3Rpb25Hcm91cC5pZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8qVGhpcyBhbGxvd3MgdGhlIFRlcnJhZm9ybSByZXNvdXJjZSBuYW1lIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCBuYW1lLiBZb3UgY2FuIHJlbW92ZSB0aGUgY2FsbCBpZiB5b3UgZG9uJ3QgbmVlZCB0aGVtIHRvIG1hdGNoLiovXG4gICAgY2RrdGZUZXJyYWZvcm1PdXRwdXRBY3Rpb25Hcm91cElkLm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gIH1cbn1cbiJdfQ==
@@ -13,9 +13,10 @@ export interface ActionGroupProps {
13
13
  */
14
14
  readonly name: string;
15
15
  /**
16
- * The name of the resource group in which to create the Action Group instance.
16
+ * An optional reference to the resource group in which to deploy the Action Group.
17
+ * If not provided, the Action Group will be deployed in the default resource group.
17
18
  */
18
- readonly resourceGroup: ResourceGroup;
19
+ readonly resourceGroup?: ResourceGroup;
19
20
  /**
20
21
  * The short name of the action group. This will be used in SMS messages. The length should be in the range (1 - 12).
21
22
  */
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWdyb3VwLXByb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWFjdGlvbmdyb3VwL21vZGVsL2FjdGlvbi1ncm91cC1wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCB7IEFybVJvbGVSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vYXJtLXJvbGUtcmVjZWl2ZXItcHJvcHNcIjtcbmltcG9ydCB7IEF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi9henVyZS1hcHAtcHVzaC1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgRW1haWxSZWNlaXZlcnNQcm9wcyB9IGZyb20gXCIuL2VtYWlsLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBFdmVudGh1YlJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi9ldmVudGh1Yi1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgTG9naWNBcHBSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vbG9naWMtYXBwLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBTbXNSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vc21zLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBWb2ljZVJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi92b2ljZS1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgV2ViaG9va1JlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi93ZWJob29rLXJlY2VpdmVyLXByb3BzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uR3JvdXBQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQWN0aW9uIEdyb3VwLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIGdyb3VwIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgQWN0aW9uIEdyb3VwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cDogUmVzb3VyY2VHcm91cDtcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBhY3Rpb24gZ3JvdXAuIFRoaXMgd2lsbCBiZSB1c2VkIGluIFNNUyBtZXNzYWdlcy4gVGhlIGxlbmd0aCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlICgxIC0gMTIpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvcnROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgYWN0aW9uIGdyb3VwIGlzIGVuYWJsZWQuIElmIGFuIGFjdGlvbiBncm91cCBpcyBub3QgZW5hYmxlZCwgdGhlbiBub25lIG9mIGl0cyByZWNlaXZlcnMgd2lsbCByZWNlaXZlIGNvbW11bmljYXRpb25zLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBBenVyZSBSZWdpb24gd2hlcmUgdGhlIEFjdGlvbiBHcm91cCBzaG91bGQgZXhpc3QuXG4gICAqIEBkZWZhdWx0IGdsb2JhbFxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2YgdGFncyB0byBhc3NpZ24gdG8gdGhlIHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgcmVhZG9ubHkgYXJtUm9sZVJlY2VpdmVycz86IEFybVJvbGVSZWNlaXZlclByb3BzW107XG5cbiAgcmVhZG9ubHkgZW1haWxSZWNlaXZlcnM/OiBFbWFpbFJlY2VpdmVyc1Byb3BzW107XG5cbiAgcmVhZG9ubHkgdm9pY2VSZWNlaXZlcnM/OiBWb2ljZVJlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBzbXNSZWNlaXZlcnM/OiBTbXNSZWNlaXZlclByb3BzW107XG5cbiAgcmVhZG9ubHkgd2ViaG9va1JlY2VpdmVycz86IFdlYmhvb2tSZWNlaXZlclByb3BzW107XG5cbiAgcmVhZG9ubHkgZXZlbnRIdWJSZWNlaXZlcnM/OiBFdmVudGh1YlJlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBhenVyZUFwcFB1c2hSZWNlaXZlcnM/OiBBenVyZUFwcFB1c2hSZWNlaXZlclByb3BzW107XG5cbiAgcmVhZG9ubHkgbG9naWNBcHBSZWNlaXZlcnM/OiBMb2dpY0FwcFJlY2VpdmVyUHJvcHNbXTtcblxuICAvLyBUT0RPOlxuICAvLyByZWFkb25seSBpdHNtUmVjZWl2ZXJzO1xuICAvLyByZWFkb25seSBhdXRvbWF0aW9uUnVuYm9va1JlY2VpdmVycztcbiAgLy8gcmVhZG9ubHkgYXp1cmVGdW5jdGlvblJlY2VpdmVycztcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWdyb3VwLXByb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWFjdGlvbmdyb3VwL21vZGVsL2FjdGlvbi1ncm91cC1wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCB7IEFybVJvbGVSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vYXJtLXJvbGUtcmVjZWl2ZXItcHJvcHNcIjtcbmltcG9ydCB7IEF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi9henVyZS1hcHAtcHVzaC1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgRW1haWxSZWNlaXZlcnNQcm9wcyB9IGZyb20gXCIuL2VtYWlsLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBFdmVudGh1YlJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi9ldmVudGh1Yi1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgTG9naWNBcHBSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vbG9naWMtYXBwLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBTbXNSZWNlaXZlclByb3BzIH0gZnJvbSBcIi4vc21zLXJlY2VpdmVyLXByb3BzXCI7XG5pbXBvcnQgeyBWb2ljZVJlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi92b2ljZS1yZWNlaXZlci1wcm9wc1wiO1xuaW1wb3J0IHsgV2ViaG9va1JlY2VpdmVyUHJvcHMgfSBmcm9tIFwiLi93ZWJob29rLXJlY2VpdmVyLXByb3BzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uR3JvdXBQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQWN0aW9uIEdyb3VwLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCByZWZlcmVuY2UgdG8gdGhlIHJlc291cmNlIGdyb3VwIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgQWN0aW9uIEdyb3VwLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBBY3Rpb24gR3JvdXAgd2lsbCBiZSBkZXBsb3llZCBpbiB0aGUgZGVmYXVsdCByZXNvdXJjZSBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlR3JvdXA/OiBSZXNvdXJjZUdyb3VwO1xuICAvKipcbiAgICogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGFjdGlvbiBncm91cC4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gU01TIG1lc3NhZ2VzLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgKDEgLSAxMikuXG4gICAqL1xuICByZWFkb25seSBzaG9ydE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBhY3Rpb24gZ3JvdXAgaXMgZW5hYmxlZC4gSWYgYW4gYWN0aW9uIGdyb3VwIGlzIG5vdCBlbmFibGVkLCB0aGVuIG5vbmUgb2YgaXRzIHJlY2VpdmVycyB3aWxsIHJlY2VpdmUgY29tbXVuaWNhdGlvbnMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIEF6dXJlIFJlZ2lvbiB3aGVyZSB0aGUgQWN0aW9uIEdyb3VwIHNob3VsZCBleGlzdC5cbiAgICogQGRlZmF1bHQgZ2xvYmFsXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB0YWdzIHRvIGFzc2lnbiB0byB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICByZWFkb25seSBhcm1Sb2xlUmVjZWl2ZXJzPzogQXJtUm9sZVJlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBlbWFpbFJlY2VpdmVycz86IEVtYWlsUmVjZWl2ZXJzUHJvcHNbXTtcblxuICByZWFkb25seSB2b2ljZVJlY2VpdmVycz86IFZvaWNlUmVjZWl2ZXJQcm9wc1tdO1xuXG4gIHJlYWRvbmx5IHNtc1JlY2VpdmVycz86IFNtc1JlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSB3ZWJob29rUmVjZWl2ZXJzPzogV2ViaG9va1JlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBldmVudEh1YlJlY2VpdmVycz86IEV2ZW50aHViUmVjZWl2ZXJQcm9wc1tdO1xuXG4gIHJlYWRvbmx5IGF6dXJlQXBwUHVzaFJlY2VpdmVycz86IEF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHNbXTtcblxuICByZWFkb25seSBsb2dpY0FwcFJlY2VpdmVycz86IExvZ2ljQXBwUmVjZWl2ZXJQcm9wc1tdO1xuXG4gIC8vIFRPRE86XG4gIC8vIHJlYWRvbmx5IGl0c21SZWNlaXZlcnM7XG4gIC8vIHJlYWRvbmx5IGF1dG9tYXRpb25SdW5ib29rUmVjZWl2ZXJzO1xuICAvLyByZWFkb25seSBhenVyZUZ1bmN0aW9uUmVjZWl2ZXJzO1xufVxuIl19
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const provider_1 = require("@cdktf/provider-azurerm/lib/provider");
4
+ const resource_group_1 = require("@cdktf/provider-azurerm/lib/resource-group");
5
+ const cdktf_1 = require("cdktf");
6
+ const ag = require("..");
7
+ const testing_1 = require("../../testing");
8
+ const randomName_1 = require("../../util/randomName");
9
+ require("cdktf/lib/testing/adapters/jest");
10
+ describe("Example of deploying Action Group", () => {
11
+ let stack;
12
+ let fullSynthResult;
13
+ const streamOutput = process.env.STREAM_OUTPUT !== "false";
14
+ beforeEach(() => {
15
+ const app = cdktf_1.Testing.app();
16
+ stack = new cdktf_1.TerraformStack(app, "test");
17
+ const randomName = (0, randomName_1.generateRandomName)(12);
18
+ new provider_1.AzurermProvider(stack, "azureFeature", { features: {} });
19
+ // Create a resource group
20
+ const resourceGroup = new resource_group_1.ResourceGroup(stack, "rg", {
21
+ name: `rg-${randomName}`,
22
+ location: "eastus",
23
+ });
24
+ new ag.ActionGroup(stack, "testAzureActionGroup", {
25
+ name: "testactiongroup",
26
+ location: "global",
27
+ resourceGroup: resourceGroup,
28
+ shortName: "testshortn",
29
+ emailReceivers: [
30
+ {
31
+ name: "testemail1",
32
+ emailAddress: "test1@email.com",
33
+ useCommonAlertSchema: true,
34
+ },
35
+ {
36
+ name: "testemail2",
37
+ emailAddress: "test2@email.com",
38
+ },
39
+ ],
40
+ webhookReceivers: [
41
+ {
42
+ name: "testwebhook1",
43
+ serviceUri: "https://www.example1.com",
44
+ useCommonAlertSchema: true,
45
+ },
46
+ {
47
+ name: "testwebhook2",
48
+ serviceUri: "https://www.example2.com",
49
+ },
50
+ ],
51
+ });
52
+ fullSynthResult = cdktf_1.Testing.fullSynth(stack); // Save the result for reuse
53
+ });
54
+ afterEach(() => {
55
+ try {
56
+ (0, testing_1.TerraformDestroy)(fullSynthResult, streamOutput);
57
+ }
58
+ catch (error) {
59
+ console.error("Error during Terraform destroy:", error);
60
+ }
61
+ });
62
+ it("check if this can be deployed", () => {
63
+ (0, testing_1.TerraformApplyAndCheckIdempotency)(fullSynthResult, streamOutput); // Set to true to stream output
64
+ });
65
+ });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVBY3Rpb25Hcm91cC5pbnRlZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1hY3Rpb25ncm91cC90ZXN0L0F6dXJlQWN0aW9uR3JvdXAuaW50ZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtRUFBdUU7QUFDdkUsK0VBQTJFO0FBQzNFLGlDQUFnRDtBQUNoRCx5QkFBeUI7QUFFekIsMkNBR3VCO0FBQ3ZCLHNEQUEyRDtBQUMzRCwyQ0FBeUM7QUFFekMsUUFBUSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtJQUNqRCxJQUFJLEtBQXFCLENBQUM7SUFDMUIsSUFBSSxlQUFvQixDQUFDO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQztJQUUzRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLEtBQUssR0FBRyxJQUFJLHNCQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQWtCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUMsSUFBSSwwQkFBZSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3RCwwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSw4QkFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbkQsSUFBSSxFQUFFLE1BQU0sVUFBVSxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7WUFDaEQsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixRQUFRLEVBQUUsUUFBUTtZQUNsQixhQUFhLEVBQUUsYUFBYTtZQUM1QixTQUFTLEVBQUUsWUFBWTtZQUN2QixjQUFjLEVBQUU7Z0JBQ2Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFlBQVksRUFBRSxpQkFBaUI7b0JBQy9CLG9CQUFvQixFQUFFLElBQUk7aUJBQzNCO2dCQUNEO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixZQUFZLEVBQUUsaUJBQWlCO2lCQUNoQzthQUNGO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxvQkFBb0IsRUFBRSxJQUFJO2lCQUMzQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVSxFQUFFLDBCQUEwQjtpQkFDdkM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILGVBQWUsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0lBQzFFLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUk7WUFDRixJQUFBLDBCQUFnQixFQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNqRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUN2QyxJQUFBLDJDQUFpQyxFQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXp1cmVybVByb3ZpZGVyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9wcm92aWRlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCB7IFRlc3RpbmcsIFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBhZyBmcm9tIFwiLi5cIjtcblxuaW1wb3J0IHtcbiAgVGVycmFmb3JtQXBwbHlBbmRDaGVja0lkZW1wb3RlbmN5LFxuICBUZXJyYWZvcm1EZXN0cm95LFxufSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21OYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWwvcmFuZG9tTmFtZVwiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuXG5kZXNjcmliZShcIkV4YW1wbGUgb2YgZGVwbG95aW5nIEFjdGlvbiBHcm91cFwiLCAoKSA9PiB7XG4gIGxldCBzdGFjazogVGVycmFmb3JtU3RhY2s7XG4gIGxldCBmdWxsU3ludGhSZXN1bHQ6IGFueTtcbiAgY29uc3Qgc3RyZWFtT3V0cHV0ID0gcHJvY2Vzcy5lbnYuU1RSRUFNX09VVFBVVCAhPT0gXCJmYWxzZVwiO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3RcIik7XG4gICAgY29uc3QgcmFuZG9tTmFtZSA9IGdlbmVyYXRlUmFuZG9tTmFtZSgxMik7XG5cbiAgICBuZXcgQXp1cmVybVByb3ZpZGVyKHN0YWNrLCBcImF6dXJlRmVhdHVyZVwiLCB7IGZlYXR1cmVzOiB7fSB9KTtcblxuICAgIC8vIENyZWF0ZSBhIHJlc291cmNlIGdyb3VwXG4gICAgY29uc3QgcmVzb3VyY2VHcm91cCA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcInJnXCIsIHtcbiAgICAgIG5hbWU6IGByZy0ke3JhbmRvbU5hbWV9YCxcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgIH0pO1xuXG4gICAgbmV3IGFnLkFjdGlvbkdyb3VwKHN0YWNrLCBcInRlc3RBenVyZUFjdGlvbkdyb3VwXCIsIHtcbiAgICAgIG5hbWU6IFwidGVzdGFjdGlvbmdyb3VwXCIsXG4gICAgICBsb2NhdGlvbjogXCJnbG9iYWxcIixcbiAgICAgIHJlc291cmNlR3JvdXA6IHJlc291cmNlR3JvdXAsXG4gICAgICBzaG9ydE5hbWU6IFwidGVzdHNob3J0blwiLFxuICAgICAgZW1haWxSZWNlaXZlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdGVtYWlsMVwiLFxuICAgICAgICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0MUBlbWFpbC5jb21cIixcbiAgICAgICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdGVtYWlsMlwiLFxuICAgICAgICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0MkBlbWFpbC5jb21cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB3ZWJob29rUmVjZWl2ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3R3ZWJob29rMVwiLFxuICAgICAgICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly93d3cuZXhhbXBsZTEuY29tXCIsXG4gICAgICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3R3ZWJob29rMlwiLFxuICAgICAgICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly93d3cuZXhhbXBsZTIuY29tXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZnVsbFN5bnRoUmVzdWx0ID0gVGVzdGluZy5mdWxsU3ludGgoc3RhY2spOyAvLyBTYXZlIHRoZSByZXN1bHQgZm9yIHJldXNlXG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIFRlcnJhZm9ybURlc3Ryb3koZnVsbFN5bnRoUmVzdWx0LCBzdHJlYW1PdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIFRlcnJhZm9ybSBkZXN0cm95OlwiLCBlcnJvcik7XG4gICAgfVxuICB9KTtcblxuICBpdChcImNoZWNrIGlmIHRoaXMgY2FuIGJlIGRlcGxveWVkXCIsICgpID0+IHtcbiAgICBUZXJyYWZvcm1BcHBseUFuZENoZWNrSWRlbXBvdGVuY3koZnVsbFN5bnRoUmVzdWx0LCBzdHJlYW1PdXRwdXQpOyAvLyBTZXQgdG8gdHJ1ZSB0byBzdHJlYW0gb3V0cHV0XG4gIH0pO1xufSk7XG4iXX0=