@microsoft/terraform-cdk-constructs 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/.jsii +55122 -31830
  2. package/API.md +74039 -46109
  3. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  4. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  5. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  6. package/lib/azure-applicationinsights/index.d.ts +7 -0
  7. package/lib/azure-applicationinsights/index.js +24 -0
  8. package/lib/azure-applicationinsights/lib/application-insights-schemas.d.ts +29 -0
  9. package/lib/azure-applicationinsights/lib/application-insights-schemas.js +162 -0
  10. package/lib/azure-applicationinsights/lib/application-insights.d.ts +206 -0
  11. package/lib/azure-applicationinsights/lib/application-insights.js +209 -0
  12. package/lib/azure-applicationinsights/lib/index.d.ts +5 -0
  13. package/lib/azure-applicationinsights/lib/index.js +22 -0
  14. package/lib/azure-applicationinsights/test/application-insights.integ.d.ts +9 -0
  15. package/lib/azure-applicationinsights/test/application-insights.integ.js +84 -0
  16. package/lib/azure-applicationinsights/test/application-insights.spec.d.ts +8 -0
  17. package/lib/azure-applicationinsights/test/application-insights.spec.js +209 -0
  18. package/lib/azure-containerapps/index.d.ts +1 -0
  19. package/lib/azure-containerapps/index.js +18 -0
  20. package/lib/azure-containerapps/lib/container-app-environment-schemas.d.ts +50 -0
  21. package/lib/azure-containerapps/lib/container-app-environment-schemas.js +522 -0
  22. package/lib/azure-containerapps/lib/container-app-environment.d.ts +374 -0
  23. package/lib/azure-containerapps/lib/container-app-environment.js +310 -0
  24. package/lib/azure-containerapps/lib/container-app-schemas.d.ts +48 -0
  25. package/lib/azure-containerapps/lib/container-app-schemas.js +466 -0
  26. package/lib/azure-containerapps/lib/container-app.d.ts +925 -0
  27. package/lib/azure-containerapps/lib/container-app.js +320 -0
  28. package/lib/azure-containerapps/lib/index.d.ts +4 -0
  29. package/lib/azure-containerapps/lib/index.js +21 -0
  30. package/lib/azure-containerapps/test/container-app-environment.integ.d.ts +10 -0
  31. package/lib/azure-containerapps/test/container-app-environment.integ.js +82 -0
  32. package/lib/azure-containerapps/test/container-app-environment.spec.d.ts +9 -0
  33. package/lib/azure-containerapps/test/container-app-environment.spec.js +412 -0
  34. package/lib/azure-containerapps/test/container-app.integ.d.ts +10 -0
  35. package/lib/azure-containerapps/test/container-app.integ.js +119 -0
  36. package/lib/azure-containerapps/test/container-app.spec.d.ts +9 -0
  37. package/lib/azure-containerapps/test/container-app.spec.js +839 -0
  38. package/lib/azure-containerregistry/index.d.ts +1 -0
  39. package/lib/azure-containerregistry/index.js +18 -0
  40. package/lib/azure-containerregistry/lib/container-registry-schemas.d.ts +32 -0
  41. package/lib/azure-containerregistry/lib/container-registry-schemas.js +316 -0
  42. package/lib/azure-containerregistry/lib/container-registry.d.ts +330 -0
  43. package/lib/azure-containerregistry/lib/container-registry.js +217 -0
  44. package/lib/azure-containerregistry/lib/index.d.ts +2 -0
  45. package/lib/azure-containerregistry/lib/index.js +19 -0
  46. package/lib/azure-containerregistry/test/container-registry.integ.d.ts +9 -0
  47. package/lib/azure-containerregistry/test/container-registry.integ.js +101 -0
  48. package/lib/azure-containerregistry/test/container-registry.spec.d.ts +4 -0
  49. package/lib/azure-containerregistry/test/container-registry.spec.js +425 -0
  50. package/lib/azure-cosmosdb/index.d.ts +1 -0
  51. package/lib/azure-cosmosdb/index.js +18 -0
  52. package/lib/azure-cosmosdb/lib/cosmos-db-schemas.d.ts +40 -0
  53. package/lib/azure-cosmosdb/lib/cosmos-db-schemas.js +330 -0
  54. package/lib/azure-cosmosdb/lib/cosmos-db.d.ts +290 -0
  55. package/lib/azure-cosmosdb/lib/cosmos-db.js +222 -0
  56. package/lib/azure-cosmosdb/lib/index.d.ts +2 -0
  57. package/lib/azure-cosmosdb/lib/index.js +19 -0
  58. package/lib/azure-cosmosdb/test/cosmos-db.integ.d.ts +9 -0
  59. package/lib/azure-cosmosdb/test/cosmos-db.integ.js +98 -0
  60. package/lib/azure-cosmosdb/test/cosmos-db.spec.d.ts +4 -0
  61. package/lib/azure-cosmosdb/test/cosmos-db.spec.js +339 -0
  62. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  63. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  64. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  65. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  66. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  67. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  68. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  69. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  70. package/lib/azure-dnszone/lib/records/dns-records.js +10 -10
  71. package/lib/azure-functionapp/index.d.ts +1 -0
  72. package/lib/azure-functionapp/index.js +18 -0
  73. package/lib/azure-functionapp/lib/function-app-schemas.d.ts +32 -0
  74. package/lib/azure-functionapp/lib/function-app-schemas.js +303 -0
  75. package/lib/azure-functionapp/lib/function-app.d.ts +367 -0
  76. package/lib/azure-functionapp/lib/function-app.js +223 -0
  77. package/lib/azure-functionapp/lib/index.d.ts +2 -0
  78. package/lib/azure-functionapp/lib/index.js +19 -0
  79. package/lib/azure-functionapp/test/function-app.integ.d.ts +12 -0
  80. package/lib/azure-functionapp/test/function-app.integ.js +134 -0
  81. package/lib/azure-functionapp/test/function-app.spec.d.ts +4 -0
  82. package/lib/azure-functionapp/test/function-app.spec.js +566 -0
  83. package/lib/azure-keyvault/index.d.ts +1 -0
  84. package/lib/azure-keyvault/index.js +18 -0
  85. package/lib/azure-keyvault/lib/index.d.ts +2 -0
  86. package/lib/azure-keyvault/lib/index.js +19 -0
  87. package/lib/azure-keyvault/lib/key-vault-schemas.d.ts +40 -0
  88. package/lib/azure-keyvault/lib/key-vault-schemas.js +312 -0
  89. package/lib/azure-keyvault/lib/key-vault.d.ts +344 -0
  90. package/lib/azure-keyvault/lib/key-vault.js +243 -0
  91. package/lib/azure-keyvault/test/key-vault.integ.d.ts +9 -0
  92. package/lib/azure-keyvault/test/key-vault.integ.js +108 -0
  93. package/lib/azure-keyvault/test/key-vault.spec.d.ts +4 -0
  94. package/lib/azure-keyvault/test/key-vault.spec.js +264 -0
  95. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +1 -1
  96. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  97. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  98. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  99. package/lib/azure-networkwatcher/lib/network-watcher.js +1 -1
  100. package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
  101. package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
  102. package/lib/azure-policysetdefinition/lib/policy-set-definition.js +1 -1
  103. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  104. package/lib/azure-privatednszone/lib/records/private-dns-records.js +8 -8
  105. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  106. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  107. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  108. package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
  109. package/lib/azure-roledefinition/lib/role-definition.js +1 -1
  110. package/lib/azure-sreagent/index.d.ts +1 -0
  111. package/lib/azure-sreagent/index.js +18 -0
  112. package/lib/azure-sreagent/lib/index.d.ts +2 -0
  113. package/lib/azure-sreagent/lib/index.js +19 -0
  114. package/lib/azure-sreagent/lib/sre-agent-schemas.d.ts +29 -0
  115. package/lib/azure-sreagent/lib/sre-agent-schemas.js +296 -0
  116. package/lib/azure-sreagent/lib/sre-agent.d.ts +208 -0
  117. package/lib/azure-sreagent/lib/sre-agent.js +217 -0
  118. package/lib/azure-sreagent/test/sre-agent.integ.d.ts +9 -0
  119. package/lib/azure-sreagent/test/sre-agent.integ.js +78 -0
  120. package/lib/azure-sreagent/test/sre-agent.spec.d.ts +4 -0
  121. package/lib/azure-sreagent/test/sre-agent.spec.js +216 -0
  122. package/lib/azure-staticwebapp/index.d.ts +1 -0
  123. package/lib/azure-staticwebapp/index.js +18 -0
  124. package/lib/azure-staticwebapp/lib/index.d.ts +2 -0
  125. package/lib/azure-staticwebapp/lib/index.js +19 -0
  126. package/lib/azure-staticwebapp/lib/static-web-app-schemas.d.ts +40 -0
  127. package/lib/azure-staticwebapp/lib/static-web-app-schemas.js +236 -0
  128. package/lib/azure-staticwebapp/lib/static-web-app.d.ts +242 -0
  129. package/lib/azure-staticwebapp/lib/static-web-app.js +232 -0
  130. package/lib/azure-staticwebapp/test/static-web-app.integ.d.ts +9 -0
  131. package/lib/azure-staticwebapp/test/static-web-app.integ.js +76 -0
  132. package/lib/azure-staticwebapp/test/static-web-app.spec.d.ts +15 -0
  133. package/lib/azure-staticwebapp/test/static-web-app.spec.js +293 -0
  134. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  135. package/lib/azure-subnet/lib/subnet.js +1 -1
  136. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  137. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  138. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +1 -1
  139. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +1 -1
  140. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  141. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
  142. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
  143. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  144. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  145. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  146. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  147. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  148. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
  149. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  150. package/lib/core-azure/lib/azapi/azapi-resource.js +2 -2
  151. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  152. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  153. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  154. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  155. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  156. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  157. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  158. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  159. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  160. package/lib/index.d.ts +16 -0
  161. package/lib/index.js +18 -2
  162. package/lib/testing/index.js +2 -2
  163. package/lib/testing/lib/cleanup.js +1 -1
  164. package/lib/testing/lib/metadata.js +1 -1
  165. package/package.json +1 -1
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Integration test for Azure Cosmos DB Account
4
+ *
5
+ * This test demonstrates basic usage of the CosmosDbAccount construct
6
+ * and validates deployment, idempotency, and cleanup.
7
+ *
8
+ * Run with: npm run integration:nostream
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const cdktf_1 = require("cdktf");
12
+ require("cdktf/lib/testing/adapters/jest");
13
+ const azure_resourcegroup_1 = require("../../azure-resourcegroup");
14
+ const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
15
+ const testing_1 = require("../../testing");
16
+ const metadata_1 = require("../../testing/lib/metadata");
17
+ const cosmos_db_1 = require("../lib/cosmos-db");
18
+ // Generate unique test run metadata for this test suite
19
+ const testMetadata = new metadata_1.TestRunMetadata("cosmos-db-integration", {
20
+ maxAgeHours: 4,
21
+ });
22
+ /**
23
+ * Example stack demonstrating Cosmos DB Account usage
24
+ */
25
+ class CosmosDbExampleStack extends testing_1.BaseTestStack {
26
+ constructor(scope, id) {
27
+ super(scope, id, {
28
+ testRunOptions: {
29
+ maxAgeHours: testMetadata.maxAgeHours,
30
+ autoCleanup: testMetadata.autoCleanup,
31
+ cleanupPolicy: testMetadata.cleanupPolicy,
32
+ },
33
+ });
34
+ // Configure AZAPI provider
35
+ new provider_1.AzapiProvider(this, "azapi", {});
36
+ // Create a resource group
37
+ const rgName = this.generateResourceName("Microsoft.Resources/resourceGroups", "cosmos");
38
+ const resourceGroup = new azure_resourcegroup_1.ResourceGroup(this, "example-rg", {
39
+ name: rgName,
40
+ location: "centralus",
41
+ tags: {
42
+ ...this.systemTags(),
43
+ },
44
+ });
45
+ // Generate unique cosmos db account names (must be globally unique)
46
+ const basicName = this.generateResourceName("Microsoft.DocumentDB/databaseAccounts", "basic");
47
+ const versionedName = this.generateResourceName("Microsoft.DocumentDB/databaseAccounts", "vers");
48
+ const serverlessName = this.generateResourceName("Microsoft.DocumentDB/databaseAccounts", "srvls");
49
+ // Example 1: Basic Cosmos DB account (Core SQL API)
50
+ new cosmos_db_1.CosmosDbAccount(this, "basic-cosmos", {
51
+ name: basicName,
52
+ location: resourceGroup.props.location,
53
+ resourceGroupId: resourceGroup.id,
54
+ tags: {
55
+ ...this.systemTags(),
56
+ example: "basic",
57
+ },
58
+ });
59
+ // Example 2: Cosmos DB account with specific API version and Strong consistency
60
+ new cosmos_db_1.CosmosDbAccount(this, "versioned-cosmos", {
61
+ name: versionedName,
62
+ location: resourceGroup.props.location,
63
+ resourceGroupId: resourceGroup.id,
64
+ apiVersion: "2024-05-15",
65
+ consistencyPolicy: {
66
+ defaultConsistencyLevel: "Strong",
67
+ },
68
+ tags: {
69
+ ...this.systemTags(),
70
+ example: "versioned",
71
+ },
72
+ });
73
+ // Example 3: Serverless Cosmos DB account
74
+ new cosmos_db_1.CosmosDbAccount(this, "serverless-cosmos", {
75
+ name: serverlessName,
76
+ location: resourceGroup.props.location,
77
+ resourceGroupId: resourceGroup.id,
78
+ capabilities: [{ name: "EnableServerless" }],
79
+ tags: {
80
+ ...this.systemTags(),
81
+ example: "serverless",
82
+ },
83
+ });
84
+ }
85
+ }
86
+ describe("Cosmos DB Account Integration Test", () => {
87
+ it("should deploy, validate idempotency, and cleanup cosmos db resources", () => {
88
+ const app = cdktf_1.Testing.app();
89
+ const stack = new CosmosDbExampleStack(app, "test-cosmos-db");
90
+ const synthesized = cdktf_1.Testing.fullSynth(stack);
91
+ // This will:
92
+ // 1. Run terraform apply to deploy resources
93
+ // 2. Run terraform plan to check idempotency (no changes expected)
94
+ // 3. Run terraform destroy to cleanup resources
95
+ (0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
96
+ }, 1800000); // 30 minute timeout (Cosmos DB account creation is slow)
97
+ });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zbW9zLWRiLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWNvc21vc2RiL3Rlc3QvY29zbW9zLWRiLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOztBQUVILGlDQUFnQztBQUVoQywyQ0FBeUM7QUFDekMsbUVBQTBEO0FBQzFELGtGQUFvRjtBQUNwRiwyQ0FBNkU7QUFDN0UseURBQTZEO0FBQzdELGdEQUFtRDtBQUVuRCx3REFBd0Q7QUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBZSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hFLFdBQVcsRUFBRSxDQUFDO0NBQ2YsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLG9CQUFxQixTQUFRLHVCQUFhO0lBQzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsY0FBYyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNyQyxhQUFhLEVBQUUsWUFBWSxDQUFDLGFBQWE7YUFDMUM7U0FDRixDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsMEJBQTBCO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDdEMsb0NBQW9DLEVBQ3BDLFFBQVEsQ0FDVCxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQ0FBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDMUQsSUFBSSxFQUFFLE1BQU07WUFDWixRQUFRLEVBQUUsV0FBVztZQUNyQixJQUFJLEVBQUU7Z0JBQ0osR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDekMsdUNBQXVDLEVBQ3ZDLE9BQU8sQ0FDUixDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUM3Qyx1Q0FBdUMsRUFDdkMsTUFBTSxDQUNQLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQzlDLHVDQUF1QyxFQUN2QyxPQUFPLENBQ1IsQ0FBQztRQUVGLG9EQUFvRDtRQUNwRCxJQUFJLDJCQUFlLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN4QyxJQUFJLEVBQUUsU0FBUztZQUNmLFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVM7WUFDdkMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLElBQUksRUFBRTtnQkFDSixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxPQUFPO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0ZBQWdGO1FBQ2hGLElBQUksMkJBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDNUMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUztZQUN2QyxlQUFlLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDakMsVUFBVSxFQUFFLFlBQVk7WUFDeEIsaUJBQWlCLEVBQUU7Z0JBQ2pCLHVCQUF1QixFQUFFLFFBQVE7YUFDbEM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixPQUFPLEVBQUUsV0FBVzthQUNyQjtTQUNGLENBQUMsQ0FBQztRQUVILDBDQUEwQztRQUMxQyxJQUFJLDJCQUFlLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQzdDLElBQUksRUFBRSxjQUFjO1lBQ3BCLFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVM7WUFDdkMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLFlBQVksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLFlBQVk7YUFDdEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQ2xELEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxHQUFHLEVBQUU7UUFDOUUsTUFBTSxHQUFHLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxhQUFhO1FBQ2IsNkNBQTZDO1FBQzdDLG1FQUFtRTtRQUNuRSxnREFBZ0Q7UUFDaEQsSUFBQSx1Q0FBNkIsRUFBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyx5REFBeUQ7QUFDeEUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIHRlc3QgZm9yIEF6dXJlIENvc21vcyBEQiBBY2NvdW50XG4gKlxuICogVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgQ29zbW9zRGJBY2NvdW50IGNvbnN0cnVjdFxuICogYW5kIHZhbGlkYXRlcyBkZXBsb3ltZW50LCBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAuXG4gKlxuICogUnVuIHdpdGg6IG5wbSBydW4gaW50ZWdyYXRpb246bm9zdHJlYW1cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCIuLi8uLi9henVyZS1yZXNvdXJjZWdyb3VwXCI7XG5pbXBvcnQgeyBBemFwaVByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Byb3ZpZGVycy1hemFwaS9wcm92aWRlclwiO1xuaW1wb3J0IHsgQmFzZVRlc3RTdGFjaywgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3kgfSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgVGVzdFJ1bk1ldGFkYXRhIH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmcvbGliL21ldGFkYXRhXCI7XG5pbXBvcnQgeyBDb3Ntb3NEYkFjY291bnQgfSBmcm9tIFwiLi4vbGliL2Nvc21vcy1kYlwiO1xuXG4vLyBHZW5lcmF0ZSB1bmlxdWUgdGVzdCBydW4gbWV0YWRhdGEgZm9yIHRoaXMgdGVzdCBzdWl0ZVxuY29uc3QgdGVzdE1ldGFkYXRhID0gbmV3IFRlc3RSdW5NZXRhZGF0YShcImNvc21vcy1kYi1pbnRlZ3JhdGlvblwiLCB7XG4gIG1heEFnZUhvdXJzOiA0LFxufSk7XG5cbi8qKlxuICogRXhhbXBsZSBzdGFjayBkZW1vbnN0cmF0aW5nIENvc21vcyBEQiBBY2NvdW50IHVzYWdlXG4gKi9cbmNsYXNzIENvc21vc0RiRXhhbXBsZVN0YWNrIGV4dGVuZHMgQmFzZVRlc3RTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlc3RSdW5PcHRpb25zOiB7XG4gICAgICAgIG1heEFnZUhvdXJzOiB0ZXN0TWV0YWRhdGEubWF4QWdlSG91cnMsXG4gICAgICAgIGF1dG9DbGVhbnVwOiB0ZXN0TWV0YWRhdGEuYXV0b0NsZWFudXAsXG4gICAgICAgIGNsZWFudXBQb2xpY3k6IHRlc3RNZXRhZGF0YS5jbGVhbnVwUG9saWN5LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENvbmZpZ3VyZSBBWkFQSSBwcm92aWRlclxuICAgIG5ldyBBemFwaVByb3ZpZGVyKHRoaXMsIFwiYXphcGlcIiwge30pO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZ3JvdXBcbiAgICBjb25zdCByZ05hbWUgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgXCJNaWNyb3NvZnQuUmVzb3VyY2VzL3Jlc291cmNlR3JvdXBzXCIsXG4gICAgICBcImNvc21vc1wiLFxuICAgICk7XG5cbiAgICBjb25zdCByZXNvdXJjZUdyb3VwID0gbmV3IFJlc291cmNlR3JvdXAodGhpcywgXCJleGFtcGxlLXJnXCIsIHtcbiAgICAgIG5hbWU6IHJnTmFtZSxcbiAgICAgIGxvY2F0aW9uOiBcImNlbnRyYWx1c1wiLFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgY29zbW9zIGRiIGFjY291bnQgbmFtZXMgKG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlKVxuICAgIGNvbnN0IGJhc2ljTmFtZSA9IHRoaXMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUoXG4gICAgICBcIk1pY3Jvc29mdC5Eb2N1bWVudERCL2RhdGFiYXNlQWNjb3VudHNcIixcbiAgICAgIFwiYmFzaWNcIixcbiAgICApO1xuICAgIGNvbnN0IHZlcnNpb25lZE5hbWUgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgXCJNaWNyb3NvZnQuRG9jdW1lbnREQi9kYXRhYmFzZUFjY291bnRzXCIsXG4gICAgICBcInZlcnNcIixcbiAgICApO1xuICAgIGNvbnN0IHNlcnZlcmxlc3NOYW1lID0gdGhpcy5nZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgICAgIFwiTWljcm9zb2Z0LkRvY3VtZW50REIvZGF0YWJhc2VBY2NvdW50c1wiLFxuICAgICAgXCJzcnZsc1wiLFxuICAgICk7XG5cbiAgICAvLyBFeGFtcGxlIDE6IEJhc2ljIENvc21vcyBEQiBhY2NvdW50IChDb3JlIFNRTCBBUEkpXG4gICAgbmV3IENvc21vc0RiQWNjb3VudCh0aGlzLCBcImJhc2ljLWNvc21vc1wiLCB7XG4gICAgICBuYW1lOiBiYXNpY05hbWUsXG4gICAgICBsb2NhdGlvbjogcmVzb3VyY2VHcm91cC5wcm9wcy5sb2NhdGlvbiEsXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcImJhc2ljXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRXhhbXBsZSAyOiBDb3Ntb3MgREIgYWNjb3VudCB3aXRoIHNwZWNpZmljIEFQSSB2ZXJzaW9uIGFuZCBTdHJvbmcgY29uc2lzdGVuY3lcbiAgICBuZXcgQ29zbW9zRGJBY2NvdW50KHRoaXMsIFwidmVyc2lvbmVkLWNvc21vc1wiLCB7XG4gICAgICBuYW1lOiB2ZXJzaW9uZWROYW1lLFxuICAgICAgbG9jYXRpb246IHJlc291cmNlR3JvdXAucHJvcHMubG9jYXRpb24hLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgYXBpVmVyc2lvbjogXCIyMDI0LTA1LTE1XCIsXG4gICAgICBjb25zaXN0ZW5jeVBvbGljeToge1xuICAgICAgICBkZWZhdWx0Q29uc2lzdGVuY3lMZXZlbDogXCJTdHJvbmdcIixcbiAgICAgIH0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcInZlcnNpb25lZFwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgMzogU2VydmVybGVzcyBDb3Ntb3MgREIgYWNjb3VudFxuICAgIG5ldyBDb3Ntb3NEYkFjY291bnQodGhpcywgXCJzZXJ2ZXJsZXNzLWNvc21vc1wiLCB7XG4gICAgICBuYW1lOiBzZXJ2ZXJsZXNzTmFtZSxcbiAgICAgIGxvY2F0aW9uOiByZXNvdXJjZUdyb3VwLnByb3BzLmxvY2F0aW9uISxcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIGNhcGFiaWxpdGllczogW3sgbmFtZTogXCJFbmFibGVTZXJ2ZXJsZXNzXCIgfV0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcInNlcnZlcmxlc3NcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJDb3Ntb3MgREIgQWNjb3VudCBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95LCB2YWxpZGF0ZSBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAgY29zbW9zIGRiIHJlc291cmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBDb3Ntb3NEYkV4YW1wbGVTdGFjayhhcHAsIFwidGVzdC1jb3Ntb3MtZGJcIik7XG4gICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7XG5cbiAgICAvLyBUaGlzIHdpbGw6XG4gICAgLy8gMS4gUnVuIHRlcnJhZm9ybSBhcHBseSB0byBkZXBsb3kgcmVzb3VyY2VzXG4gICAgLy8gMi4gUnVuIHRlcnJhZm9ybSBwbGFuIHRvIGNoZWNrIGlkZW1wb3RlbmN5IChubyBjaGFuZ2VzIGV4cGVjdGVkKVxuICAgIC8vIDMuIFJ1biB0ZXJyYWZvcm0gZGVzdHJveSB0byBjbGVhbnVwIHJlc291cmNlc1xuICAgIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95KHN5bnRoZXNpemVkLCB7IHZlcmlmeUNsZWFudXA6IHRydWUgfSk7XG4gIH0sIDE4MDAwMDApOyAvLyAzMCBtaW51dGUgdGltZW91dCAoQ29zbW9zIERCIGFjY291bnQgY3JlYXRpb24gaXMgc2xvdylcbn0pO1xuIl19
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Unit tests for Azure Cosmos DB Account using VersionedAzapiResource framework
3
+ */
4
+ export {};
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for Azure Cosmos DB Account using VersionedAzapiResource framework
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const cdktf_1 = require("cdktf");
7
+ const cdktf = require("cdktf");
8
+ const azure_resourcegroup_1 = require("../../azure-resourcegroup");
9
+ const cosmos_db_1 = require("../lib/cosmos-db");
10
+ describe("CosmosDbAccount", () => {
11
+ let app;
12
+ let stack;
13
+ beforeEach(() => {
14
+ app = cdktf_1.Testing.app();
15
+ stack = new cdktf.TerraformStack(app, "TestStack");
16
+ });
17
+ describe("constructor", () => {
18
+ it("should create a cosmos db account with required properties", () => {
19
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
20
+ name: "test-rg",
21
+ location: "eastus",
22
+ });
23
+ const props = {
24
+ name: "testcosmosaccount",
25
+ location: "eastus",
26
+ resourceGroupId: rg.id,
27
+ };
28
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
29
+ expect(cosmos).toBeInstanceOf(cosmos_db_1.CosmosDbAccount);
30
+ expect(cosmos.props).toBe(props);
31
+ });
32
+ it("should create a cosmos db account with all properties", () => {
33
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
34
+ name: "test-rg",
35
+ location: "eastus",
36
+ });
37
+ const props = {
38
+ name: "testcosmosaccount",
39
+ location: "eastus",
40
+ resourceGroupId: rg.id,
41
+ kind: "GlobalDocumentDB",
42
+ consistencyPolicy: {
43
+ defaultConsistencyLevel: "Strong",
44
+ },
45
+ capabilities: [{ name: "EnableServerless" }],
46
+ publicNetworkAccess: "Enabled",
47
+ enableAutomaticFailover: false,
48
+ minimalTlsVersion: "Tls12",
49
+ tags: {
50
+ environment: "test",
51
+ project: "cdktf-constructs",
52
+ },
53
+ identity: {
54
+ type: "SystemAssigned",
55
+ },
56
+ };
57
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
58
+ expect(cosmos.props).toBe(props);
59
+ expect(cosmos.tags).toEqual(props.tags);
60
+ });
61
+ it("should use default values for optional properties", () => {
62
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
63
+ name: "test-rg",
64
+ location: "eastus",
65
+ });
66
+ const props = {
67
+ name: "testcosmosaccount",
68
+ location: "eastus",
69
+ resourceGroupId: rg.id,
70
+ };
71
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
72
+ expect(cosmos).toBeInstanceOf(cosmos_db_1.CosmosDbAccount);
73
+ });
74
+ it("should create terraform outputs", () => {
75
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
76
+ name: "test-rg",
77
+ location: "eastus",
78
+ });
79
+ const props = {
80
+ name: "testcosmosaccount",
81
+ location: "eastus",
82
+ resourceGroupId: rg.id,
83
+ };
84
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
85
+ expect(cosmos.idOutput).toBeInstanceOf(cdktf.TerraformOutput);
86
+ expect(cosmos.locationOutput).toBeInstanceOf(cdktf.TerraformOutput);
87
+ expect(cosmos.nameOutput).toBeInstanceOf(cdktf.TerraformOutput);
88
+ expect(cosmos.tagsOutput).toBeInstanceOf(cdktf.TerraformOutput);
89
+ expect(cosmos.documentEndpointOutput).toBeInstanceOf(cdktf.TerraformOutput);
90
+ });
91
+ });
92
+ describe("kind configuration", () => {
93
+ it("should accept GlobalDocumentDB kind", () => {
94
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
95
+ name: "test-rg",
96
+ location: "eastus",
97
+ });
98
+ const props = {
99
+ name: "testcosmosaccount",
100
+ location: "eastus",
101
+ resourceGroupId: rg.id,
102
+ kind: "GlobalDocumentDB",
103
+ };
104
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
105
+ expect(cosmos.props.kind).toBe("GlobalDocumentDB");
106
+ });
107
+ it("should accept MongoDB kind", () => {
108
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
109
+ name: "test-rg",
110
+ location: "eastus",
111
+ });
112
+ const props = {
113
+ name: "testcosmosmongo",
114
+ location: "eastus",
115
+ resourceGroupId: rg.id,
116
+ kind: "MongoDB",
117
+ capabilities: [{ name: "EnableMongo" }],
118
+ };
119
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
120
+ expect(cosmos.props.kind).toBe("MongoDB");
121
+ });
122
+ });
123
+ describe("consistency policy", () => {
124
+ it("should configure Session consistency by default when none provided", () => {
125
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
126
+ name: "test-rg",
127
+ location: "eastus",
128
+ });
129
+ const props = {
130
+ name: "testcosmosconsistency",
131
+ location: "eastus",
132
+ resourceGroupId: rg.id,
133
+ };
134
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
135
+ expect(cosmos).toBeInstanceOf(cosmos_db_1.CosmosDbAccount);
136
+ });
137
+ it("should configure Strong consistency when specified", () => {
138
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
139
+ name: "test-rg",
140
+ location: "eastus",
141
+ });
142
+ const props = {
143
+ name: "testcosmosstrong",
144
+ location: "eastus",
145
+ resourceGroupId: rg.id,
146
+ consistencyPolicy: {
147
+ defaultConsistencyLevel: "Strong",
148
+ },
149
+ };
150
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
151
+ expect(cosmos.props.consistencyPolicy?.defaultConsistencyLevel).toBe("Strong");
152
+ });
153
+ it("should configure BoundedStaleness consistency", () => {
154
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
155
+ name: "test-rg",
156
+ location: "eastus",
157
+ });
158
+ const props = {
159
+ name: "testcosmosbounded",
160
+ location: "eastus",
161
+ resourceGroupId: rg.id,
162
+ consistencyPolicy: {
163
+ defaultConsistencyLevel: "BoundedStaleness",
164
+ maxIntervalInSeconds: 86400,
165
+ maxStalenessPrefix: 1000000,
166
+ },
167
+ };
168
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
169
+ expect(cosmos.props.consistencyPolicy?.defaultConsistencyLevel).toBe("BoundedStaleness");
170
+ expect(cosmos.props.consistencyPolicy?.maxIntervalInSeconds).toBe(86400);
171
+ });
172
+ });
173
+ describe("multi-region configuration", () => {
174
+ it("should configure multiple geo locations with failover", () => {
175
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
176
+ name: "test-rg",
177
+ location: "eastus",
178
+ });
179
+ const props = {
180
+ name: "testcosmosgeo",
181
+ location: "eastus",
182
+ resourceGroupId: rg.id,
183
+ enableAutomaticFailover: true,
184
+ geoLocations: [
185
+ {
186
+ locationName: "eastus",
187
+ failoverPriority: 0,
188
+ isZoneRedundant: true,
189
+ },
190
+ { locationName: "westus", failoverPriority: 1 },
191
+ ],
192
+ };
193
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
194
+ expect(cosmos.props.enableAutomaticFailover).toBe(true);
195
+ expect(cosmos.props.geoLocations).toHaveLength(2);
196
+ });
197
+ });
198
+ describe("capabilities", () => {
199
+ it("should configure serverless capability", () => {
200
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
201
+ name: "test-rg",
202
+ location: "eastus",
203
+ });
204
+ const props = {
205
+ name: "testcosmosserverless",
206
+ location: "eastus",
207
+ resourceGroupId: rg.id,
208
+ capabilities: [{ name: "EnableServerless" }],
209
+ };
210
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
211
+ expect(cosmos.props.capabilities).toEqual([{ name: "EnableServerless" }]);
212
+ });
213
+ });
214
+ describe("tag management", () => {
215
+ let cosmos;
216
+ beforeEach(() => {
217
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
218
+ name: "test-rg",
219
+ location: "eastus",
220
+ });
221
+ const props = {
222
+ name: "testcosmostags",
223
+ location: "eastus",
224
+ resourceGroupId: rg.id,
225
+ tags: {
226
+ environment: "test",
227
+ },
228
+ };
229
+ cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
230
+ });
231
+ it("should add a tag", () => {
232
+ cosmos.addTag("newTag", "newValue");
233
+ expect(cosmos.props.tags.newTag).toBe("newValue");
234
+ expect(cosmos.props.tags.environment).toBe("test");
235
+ });
236
+ it("should remove an existing tag", () => {
237
+ cosmos.removeTag("environment");
238
+ expect(cosmos.props.tags.environment).toBeUndefined();
239
+ });
240
+ it("should add a tag when no tags exist", () => {
241
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG2", {
242
+ name: "test-rg2",
243
+ location: "eastus",
244
+ });
245
+ const props = {
246
+ name: "testcosmosnotags",
247
+ location: "eastus",
248
+ resourceGroupId: rg.id,
249
+ };
250
+ const c = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmosNoTags", props);
251
+ c.addTag("firstTag", "firstValue");
252
+ expect(c.props.tags.firstTag).toBe("firstValue");
253
+ });
254
+ });
255
+ describe("API versioning", () => {
256
+ it("should use default version when not specified", () => {
257
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
258
+ name: "test-rg",
259
+ location: "eastus",
260
+ });
261
+ const props = {
262
+ name: "testcosmosdefault",
263
+ location: "eastus",
264
+ resourceGroupId: rg.id,
265
+ };
266
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
267
+ expect(cosmos).toBeInstanceOf(cosmos_db_1.CosmosDbAccount);
268
+ });
269
+ it("should accept specific API version", () => {
270
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
271
+ name: "test-rg",
272
+ location: "eastus",
273
+ });
274
+ const props = {
275
+ name: "testcosmosversioned",
276
+ location: "eastus",
277
+ resourceGroupId: rg.id,
278
+ apiVersion: "2024-05-15",
279
+ };
280
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
281
+ expect(cosmos.props.apiVersion).toBe("2024-05-15");
282
+ });
283
+ });
284
+ describe("CDK Terraform integration", () => {
285
+ it("should synthesize to valid Terraform", () => {
286
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
287
+ name: "test-rg",
288
+ location: "eastus",
289
+ });
290
+ const props = {
291
+ name: "testcosmossynth",
292
+ location: "eastus",
293
+ resourceGroupId: rg.id,
294
+ tags: {
295
+ environment: "test",
296
+ },
297
+ };
298
+ new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
299
+ const synthesized = cdktf_1.Testing.synth(stack);
300
+ expect(synthesized).toBeDefined();
301
+ const stackConfig = JSON.parse(synthesized);
302
+ expect(stackConfig.resource).toBeDefined();
303
+ });
304
+ it("should have correct logical IDs for outputs", () => {
305
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
306
+ name: "test-rg",
307
+ location: "eastus",
308
+ });
309
+ const props = {
310
+ name: "testcosmoslogical",
311
+ location: "eastus",
312
+ resourceGroupId: rg.id,
313
+ };
314
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
315
+ expect(cosmos.idOutput).toBeDefined();
316
+ expect(cosmos.locationOutput).toBeDefined();
317
+ expect(cosmos.nameOutput).toBeDefined();
318
+ expect(cosmos.tagsOutput).toBeDefined();
319
+ expect(cosmos.documentEndpointOutput).toBeDefined();
320
+ });
321
+ });
322
+ describe("endpoint properties", () => {
323
+ it("should provide document endpoint", () => {
324
+ const rg = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
325
+ name: "test-rg",
326
+ location: "eastus",
327
+ });
328
+ const props = {
329
+ name: "testcosmosendpoint",
330
+ location: "eastus",
331
+ resourceGroupId: rg.id,
332
+ };
333
+ const cosmos = new cosmos_db_1.CosmosDbAccount(stack, "TestCosmos", props);
334
+ expect(cosmos.documentEndpoint).toBeDefined();
335
+ expect(cosmos.documentEndpoint).toContain("documentEndpoint");
336
+ });
337
+ });
338
+ });
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zbW9zLWRiLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtY29zbW9zZGIvdGVzdC9jb3Ntb3MtZGIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7O0FBRUgsaUNBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQixtRUFBMEQ7QUFDMUQsZ0RBQXlFO0FBRXpFLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsSUFBSSxHQUFjLENBQUM7SUFDbkIsSUFBSSxLQUEyQixDQUFDO0lBRWhDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLEVBQUUsR0FBRyxJQUFJLG1DQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDNUMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxLQUFLLEdBQXlCO2dCQUNsQyxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2FBQ3ZCLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFlLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUvRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLDJCQUFlLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUss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QUM7WUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFlLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUvRCxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pdCB0ZXN0cyBmb3IgQXp1cmUgQ29zbW9zIERCIEFjY291bnQgdXNpbmcgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IFJlc291cmNlR3JvdXAgfSBmcm9tIFwiLi4vLi4vYXp1cmUtcmVzb3VyY2Vncm91cFwiO1xuaW1wb3J0IHsgQ29zbW9zRGJBY2NvdW50LCBDb3Ntb3NEYkFjY291bnRQcm9wcyB9IGZyb20gXCIuLi9saWIvY29zbW9zLWRiXCI7XG5cbmRlc2NyaWJlKFwiQ29zbW9zRGJBY2NvdW50XCIsICgpID0+IHtcbiAgbGV0IGFwcDogY2RrdGYuQXBwO1xuICBsZXQgc3RhY2s6IGNka3RmLlRlcnJhZm9ybVN0YWNrO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgY2RrdGYuVGVycmFmb3JtU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJjb25zdHJ1Y3RvclwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGEgY29zbW9zIGRiIGFjY291bnQgd2l0aCByZXF1aXJlZCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3BzOiBDb3Ntb3NEYkFjY291bnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0Y29zbW9zYWNjb3VudFwiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZy5pZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvc21vcyA9IG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc1wiLCBwcm9wcyk7XG5cbiAgICAgIGV4cGVjdChjb3Ntb3MpLnRvQmVJbnN0YW5jZU9mKENvc21vc0RiQWNjb3VudCk7XG4gICAgICBleHBlY3QoY29zbW9zLnByb3BzKS50b0JlKHByb3BzKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBhIGNvc21vcyBkYiBhY2NvdW50IHdpdGggYWxsIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJvcHM6IENvc21vc0RiQWNjb3VudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3Rjb3Ntb3NhY2NvdW50XCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgICBraW5kOiBcIkdsb2JhbERvY3VtZW50REJcIixcbiAgICAgICAgY29uc2lzdGVuY3lQb2xpY3k6IHtcbiAgICAgICAgICBkZWZhdWx0Q29uc2lzdGVuY3lMZXZlbDogXCJTdHJvbmdcIixcbiAgICAgICAgfSxcbiAgICAgICAgY2FwYWJpbGl0aWVzOiBbeyBuYW1lOiBcIkVuYWJsZVNlcnZlcmxlc3NcIiB9XSxcbiAgICAgICAgcHVibGljTmV0d29ya0FjY2VzczogXCJFbmFibGVkXCIsXG4gICAgICAgIGVuYWJsZUF1dG9tYXRpY0ZhaWxvdmVyOiBmYWxzZSxcbiAgICAgICAgbWluaW1hbFRsc1ZlcnNpb246IFwiVGxzMTJcIixcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIGVudmlyb25tZW50OiBcInRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0OiBcImNka3RmLWNvbnN0cnVjdHNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaWRlbnRpdHk6IHtcbiAgICAgICAgICB0eXBlOiBcIlN5c3RlbUFzc2lnbmVkXCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb3Ntb3MgPSBuZXcgQ29zbW9zRGJBY2NvdW50KHN0YWNrLCBcIlRlc3RDb3Ntb3NcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoY29zbW9zLnByb3BzKS50b0JlKHByb3BzKTtcbiAgICAgIGV4cGVjdChjb3Ntb3MudGFncykudG9FcXVhbChwcm9wcy50YWdzKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHVzZSBkZWZhdWx0IHZhbHVlcyBmb3Igb3B0aW9uYWwgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwcm9wczogQ29zbW9zRGJBY2NvdW50UHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdGNvc21vc2FjY291bnRcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmcuaWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb3Ntb3MgPSBuZXcgQ29zbW9zRGJBY2NvdW50KHN0YWNrLCBcIlRlc3RDb3Ntb3NcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoY29zbW9zKS50b0JlSW5zdGFuY2VPZihDb3Ntb3NEYkFjY291bnQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHRlcnJhZm9ybSBvdXRwdXRzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3BzOiBDb3Ntb3NEYkFjY291bnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0Y29zbW9zYWNjb3VudFwiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZy5pZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvc21vcyA9IG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc1wiLCBwcm9wcyk7XG5cbiAgICAgIGV4cGVjdChjb3Ntb3MuaWRPdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RmLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgICBleHBlY3QoY29zbW9zLmxvY2F0aW9uT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KGNvc21vcy5uYW1lT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KGNvc21vcy50YWdzT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KGNvc21vcy5kb2N1bWVudEVuZHBvaW50T3V0cHV0KS50b0JlSW5zdGFuY2VPZihcbiAgICAgICAgY2RrdGYuVGVycmFmb3JtT3V0cHV0LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJraW5kIGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGFjY2VwdCBHbG9iYWxEb2N1bWVudERCIGtpbmRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJvcHM6IENvc21vc0RiQWNjb3VudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3Rjb3Ntb3NhY2NvdW50XCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgICBraW5kOiBcIkdsb2JhbERvY3VtZW50REJcIixcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvc21vcyA9IG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc1wiLCBwcm9wcyk7XG5cbiAgICAgIGV4cGVjdChjb3Ntb3MucHJvcHMua2luZCkudG9CZShcIkdsb2JhbERvY3VtZW50REJcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBhY2NlcHQgTW9uZ29EQiBraW5kXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3BzOiBDb3Ntb3NEYkFjY291bnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0Y29zbW9zbW9uZ29cIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmcuaWQsXG4gICAgICAgIGtpbmQ6IFwiTW9uZ29EQlwiLFxuICAgICAgICBjYXBhYmlsaXRpZXM6IFt7IG5hbWU6IFwiRW5hYmxlTW9uZ29cIiB9XSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvc21vcyA9IG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc1wiLCBwcm9wcyk7XG5cbiAgICAgIGV4cGVjdChjb3Ntb3MucHJvcHMua2luZCkudG9CZShcIk1vbmdvREJcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiY29uc2lzdGVuY3kgcG9saWN5XCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjb25maWd1cmUgU2Vzc2lvbiBjb25zaXN0ZW5jeSBieSBkZWZhdWx0IHdoZW4gbm9uZSBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwcm9wczogQ29zbW9zRGJBY2NvdW50UHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdGNvc21vc2NvbnNpc3RlbmN5XCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29zbW9zID0gbmV3IENvc21vc0RiQWNjb3VudChzdGFjaywgXCJUZXN0Q29zbW9zXCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGNvc21vcykudG9CZUluc3RhbmNlT2YoQ29zbW9zRGJBY2NvdW50KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNvbmZpZ3VyZSBTdHJvbmcgY29uc2lzdGVuY3kgd2hlbiBzcGVjaWZpZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJvcHM6IENvc21vc0RiQWNjb3VudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3Rjb3Ntb3NzdHJvbmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmcuaWQsXG4gICAgICAgIGNvbnNpc3RlbmN5UG9saWN5OiB7XG4gICAgICAgICAgZGVmYXVsdENvbnNpc3RlbmN5TGV2ZWw6IFwiU3Ryb25nXCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb3Ntb3MgPSBuZXcgQ29zbW9zRGJBY2NvdW50KHN0YWNrLCBcIlRlc3RDb3Ntb3NcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoY29zbW9zLnByb3BzLmNvbnNpc3RlbmN5UG9saWN5Py5kZWZhdWx0Q29uc2lzdGVuY3lMZXZlbCkudG9CZShcbiAgICAgICAgXCJTdHJvbmdcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjb25maWd1cmUgQm91bmRlZFN0YWxlbmVzcyBjb25zaXN0ZW5jeVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwcm9wczogQ29zbW9zRGJBY2NvdW50UHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdGNvc21vc2JvdW5kZWRcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmcuaWQsXG4gICAgICAgIGNvbnNpc3RlbmN5UG9saWN5OiB7XG4gICAgICAgICAgZGVmYXVsdENvbnNpc3RlbmN5TGV2ZWw6IFwiQm91bmRlZFN0YWxlbmVzc1wiLFxuICAgICAgICAgIG1heEludGVydmFsSW5TZWNvbmRzOiA4NjQwMCxcbiAgICAgICAgICBtYXhTdGFsZW5lc3NQcmVmaXg6IDEwMDAwMDAsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb3Ntb3MgPSBuZXcgQ29zbW9zRGJBY2NvdW50KHN0YWNrLCBcIlRlc3RDb3Ntb3NcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoY29zbW9zLnByb3BzLmNvbnNpc3RlbmN5UG9saWN5Py5kZWZhdWx0Q29uc2lzdGVuY3lMZXZlbCkudG9CZShcbiAgICAgICAgXCJCb3VuZGVkU3RhbGVuZXNzXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNvc21vcy5wcm9wcy5jb25zaXN0ZW5jeVBvbGljeT8ubWF4SW50ZXJ2YWxJblNlY29uZHMpLnRvQmUoODY0MDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIm11bHRpLXJlZ2lvbiBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjb25maWd1cmUgbXVsdGlwbGUgZ2VvIGxvY2F0aW9ucyB3aXRoIGZhaWxvdmVyXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3BzOiBDb3Ntb3NEYkFjY291bnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0Y29zbW9zZ2VvXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgICBlbmFibGVBdXRvbWF0aWNGYWlsb3ZlcjogdHJ1ZSxcbiAgICAgICAgZ2VvTG9jYXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbG9jYXRpb25OYW1lOiBcImVhc3R1c1wiLFxuICAgICAgICAgICAgZmFpbG92ZXJQcmlvcml0eTogMCxcbiAgICAgICAgICAgIGlzWm9uZVJlZHVuZGFudDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgbG9jYXRpb25OYW1lOiBcIndlc3R1c1wiLCBmYWlsb3ZlclByaW9yaXR5OiAxIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb3Ntb3MgPSBuZXcgQ29zbW9zRGJBY2NvdW50KHN0YWNrLCBcIlRlc3RDb3Ntb3NcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoY29zbW9zLnByb3BzLmVuYWJsZUF1dG9tYXRpY0ZhaWxvdmVyKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KGNvc21vcy5wcm9wcy5nZW9Mb2NhdGlvbnMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJjYXBhYmlsaXRpZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGNvbmZpZ3VyZSBzZXJ2ZXJsZXNzIGNhcGFiaWxpdHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJvcHM6IENvc21vc0RiQWNjb3VudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3Rjb3Ntb3NzZXJ2ZXJsZXNzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgICBjYXBhYmlsaXRpZXM6IFt7IG5hbWU6IFwiRW5hYmxlU2VydmVybGVzc1wiIH1dLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29zbW9zID0gbmV3IENvc21vc0RiQWNjb3VudChzdGFjaywgXCJUZXN0Q29zbW9zXCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGNvc21vcy5wcm9wcy5jYXBhYmlsaXRpZXMpLnRvRXF1YWwoW3sgbmFtZTogXCJFbmFibGVTZXJ2ZXJsZXNzXCIgfV0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInRhZyBtYW5hZ2VtZW50XCIsICgpID0+IHtcbiAgICBsZXQgY29zbW9zOiBDb3Ntb3NEYkFjY291bnQ7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3BzOiBDb3Ntb3NEYkFjY291bnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0Y29zbW9zdGFnc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZy5pZCxcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIGVudmlyb25tZW50OiBcInRlc3RcIixcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvc21vcyA9IG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc1wiLCBwcm9wcyk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBhZGQgYSB0YWdcIiwgKCkgPT4ge1xuICAgICAgY29zbW9zLmFkZFRhZyhcIm5ld1RhZ1wiLCBcIm5ld1ZhbHVlXCIpO1xuXG4gICAgICBleHBlY3QoY29zbW9zLnByb3BzLnRhZ3MhLm5ld1RhZykudG9CZShcIm5ld1ZhbHVlXCIpO1xuICAgICAgZXhwZWN0KGNvc21vcy5wcm9wcy50YWdzIS5lbnZpcm9ubWVudCkudG9CZShcInRlc3RcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZW1vdmUgYW4gZXhpc3RpbmcgdGFnXCIsICgpID0+IHtcbiAgICAgIGNvc21vcy5yZW1vdmVUYWcoXCJlbnZpcm9ubWVudFwiKTtcblxuICAgICAgZXhwZWN0KGNvc21vcy5wcm9wcy50YWdzIS5lbnZpcm9ubWVudCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYWRkIGEgdGFnIHdoZW4gbm8gdGFncyBleGlzdFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSRzJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmcyXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3BzOiBDb3Ntb3NEYkFjY291bnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0Y29zbW9zbm90YWdzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYyA9IG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc05vVGFnc1wiLCBwcm9wcyk7XG4gICAgICBjLmFkZFRhZyhcImZpcnN0VGFnXCIsIFwiZmlyc3RWYWx1ZVwiKTtcblxuICAgICAgZXhwZWN0KGMucHJvcHMudGFncyEuZmlyc3RUYWcpLnRvQmUoXCJmaXJzdFZhbHVlXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkFQSSB2ZXJzaW9uaW5nXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCB1c2UgZGVmYXVsdCB2ZXJzaW9uIHdoZW4gbm90IHNwZWNpZmllZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwcm9wczogQ29zbW9zRGJBY2NvdW50UHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdGNvc21vc2RlZmF1bHRcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmcuaWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb3Ntb3MgPSBuZXcgQ29zbW9zRGJBY2NvdW50KHN0YWNrLCBcIlRlc3RDb3Ntb3NcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoY29zbW9zKS50b0JlSW5zdGFuY2VPZihDb3Ntb3NEYkFjY291bnQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYWNjZXB0IHNwZWNpZmljIEFQSSB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJnID0gbmV3IFJlc291cmNlR3JvdXAoc3RhY2ssIFwiVGVzdFJHXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LXJnXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3BzOiBDb3Ntb3NEYkFjY291bnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0Y29zbW9zdmVyc2lvbmVkXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjQtMDUtMTVcIixcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvc21vcyA9IG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc1wiLCBwcm9wcyk7XG5cbiAgICAgIGV4cGVjdChjb3Ntb3MucHJvcHMuYXBpVmVyc2lvbikudG9CZShcIjIwMjQtMDUtMTVcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ0RLIFRlcnJhZm9ybSBpbnRlZ3JhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3ludGhlc2l6ZSB0byB2YWxpZCBUZXJyYWZvcm1cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJvcHM6IENvc21vc0RiQWNjb3VudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3Rjb3Ntb3NzeW50aFwiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZy5pZCxcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIGVudmlyb25tZW50OiBcInRlc3RcIixcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIG5ldyBDb3Ntb3NEYkFjY291bnQoc3RhY2ssIFwiVGVzdENvc21vc1wiLCBwcm9wcyk7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIGNvbnN0IHN0YWNrQ29uZmlnID0gSlNPTi5wYXJzZShzeW50aGVzaXplZCk7XG4gICAgICBleHBlY3Qoc3RhY2tDb25maWcucmVzb3VyY2UpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIGNvcnJlY3QgbG9naWNhbCBJRHMgZm9yIG91dHB1dHNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmcgPSBuZXcgUmVzb3VyY2VHcm91cChzdGFjaywgXCJUZXN0UkdcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJvcHM6IENvc21vc0RiQWNjb3VudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3Rjb3Ntb3Nsb2dpY2FsXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29zbW9zID0gbmV3IENvc21vc0RiQWNjb3VudChzdGFjaywgXCJUZXN0Q29zbW9zXCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGNvc21vcy5pZE91dHB1dCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChjb3Ntb3MubG9jYXRpb25PdXRwdXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoY29zbW9zLm5hbWVPdXRwdXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoY29zbW9zLnRhZ3NPdXRwdXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoY29zbW9zLmRvY3VtZW50RW5kcG9pbnRPdXRwdXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiZW5kcG9pbnQgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcHJvdmlkZSBkb2N1bWVudCBlbmRwb2ludFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCByZyA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1yZ1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwcm9wczogQ29zbW9zRGJBY2NvdW50UHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdGNvc21vc2VuZHBvaW50XCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJnLmlkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29zbW9zID0gbmV3IENvc21vc0RiQWNjb3VudChzdGFjaywgXCJUZXN0Q29zbW9zXCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGNvc21vcy5kb2N1bWVudEVuZHBvaW50KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGNvc21vcy5kb2N1bWVudEVuZHBvaW50KS50b0NvbnRhaW4oXCJkb2N1bWVudEVuZHBvaW50XCIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -167,7 +167,7 @@ class DiagnosticSettings extends azapi_resource_1.AzapiResource {
167
167
  }
168
168
  exports.DiagnosticSettings = DiagnosticSettings;
169
169
  _a = JSII_RTTI_SYMBOL_1;
170
- DiagnosticSettings[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DiagnosticSettings", version: "1.9.0" };
170
+ DiagnosticSettings[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DiagnosticSettings", version: "1.10.0" };
171
171
  (() => {
172
172
  azapi_resource_1.AzapiResource.registerSchemas(diagnostic_settings_schemas_1.DIAGNOSTIC_SETTINGS_TYPE, diagnostic_settings_schemas_1.ALL_DIAGNOSTIC_SETTINGS_VERSIONS);
173
173
  })();
@@ -207,7 +207,7 @@ class DnsForwardingRuleset extends azapi_resource_1.AzapiResource {
207
207
  }
208
208
  exports.DnsForwardingRuleset = DnsForwardingRuleset;
209
209
  _a = JSII_RTTI_SYMBOL_1;
210
- DnsForwardingRuleset[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRuleset", version: "1.9.0" };
210
+ DnsForwardingRuleset[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRuleset", version: "1.10.0" };
211
211
  (() => {
212
212
  azapi_resource_1.AzapiResource.registerSchemas(dns_forwarding_ruleset_schemas_1.DNS_FORWARDING_RULESET_TYPE, dns_forwarding_ruleset_schemas_1.ALL_DNS_FORWARDING_RULESET_VERSIONS);
213
213
  })();
@@ -186,7 +186,7 @@ class ForwardingRule extends azapi_resource_1.AzapiResource {
186
186
  }
187
187
  exports.ForwardingRule = ForwardingRule;
188
188
  _a = JSII_RTTI_SYMBOL_1;
189
- ForwardingRule[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ForwardingRule", version: "1.9.0" };
189
+ ForwardingRule[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ForwardingRule", version: "1.10.0" };
190
190
  (() => {
191
191
  azapi_resource_1.AzapiResource.registerSchemas(forwarding_rule_schemas_1.FORWARDING_RULE_TYPE, forwarding_rule_schemas_1.ALL_FORWARDING_RULE_VERSIONS);
192
192
  })();
@@ -171,7 +171,7 @@ class DnsForwardingRulesetVirtualNetworkLink extends azapi_resource_1.AzapiResou
171
171
  }
172
172
  exports.DnsForwardingRulesetVirtualNetworkLink = DnsForwardingRulesetVirtualNetworkLink;
173
173
  _a = JSII_RTTI_SYMBOL_1;
174
- DnsForwardingRulesetVirtualNetworkLink[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRulesetVirtualNetworkLink", version: "1.9.0" };
174
+ DnsForwardingRulesetVirtualNetworkLink[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRulesetVirtualNetworkLink", version: "1.10.0" };
175
175
  (() => {
176
176
  azapi_resource_1.AzapiResource.registerSchemas(virtual_network_link_schemas_1.VIRTUAL_NETWORK_LINK_TYPE, virtual_network_link_schemas_1.ALL_VIRTUAL_NETWORK_LINK_VERSIONS);
177
177
  })();
@@ -229,7 +229,7 @@ class DnsResolver extends azapi_resource_1.AzapiResource {
229
229
  }
230
230
  exports.DnsResolver = DnsResolver;
231
231
  _a = JSII_RTTI_SYMBOL_1;
232
- DnsResolver[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolver", version: "1.9.0" };
232
+ DnsResolver[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolver", version: "1.10.0" };
233
233
  (() => {
234
234
  azapi_resource_1.AzapiResource.registerSchemas(dns_resolver_schemas_1.DNS_RESOLVER_TYPE, dns_resolver_schemas_1.ALL_DNS_RESOLVER_VERSIONS);
235
235
  })();
@@ -236,7 +236,7 @@ class DnsResolverInboundEndpoint extends azapi_resource_1.AzapiResource {
236
236
  }
237
237
  exports.DnsResolverInboundEndpoint = DnsResolverInboundEndpoint;
238
238
  _a = JSII_RTTI_SYMBOL_1;
239
- DnsResolverInboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverInboundEndpoint", version: "1.9.0" };
239
+ DnsResolverInboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverInboundEndpoint", version: "1.10.0" };
240
240
  (() => {
241
241
  azapi_resource_1.AzapiResource.registerSchemas(inbound_endpoint_schemas_1.DNS_RESOLVER_INBOUND_ENDPOINT_TYPE, inbound_endpoint_schemas_1.ALL_DNS_RESOLVER_INBOUND_ENDPOINT_VERSIONS);
242
242
  })();
@@ -227,7 +227,7 @@ class DnsResolverOutboundEndpoint extends azapi_resource_1.AzapiResource {
227
227
  }
228
228
  exports.DnsResolverOutboundEndpoint = DnsResolverOutboundEndpoint;
229
229
  _a = JSII_RTTI_SYMBOL_1;
230
- DnsResolverOutboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverOutboundEndpoint", version: "1.9.0" };
230
+ DnsResolverOutboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverOutboundEndpoint", version: "1.10.0" };
231
231
  (() => {
232
232
  azapi_resource_1.AzapiResource.registerSchemas(outbound_endpoint_schemas_1.DNS_RESOLVER_OUTBOUND_ENDPOINT_TYPE, outbound_endpoint_schemas_1.ALL_DNS_RESOLVER_OUTBOUND_ENDPOINT_VERSIONS);
233
233
  })();
@@ -221,7 +221,7 @@ class DnsZone extends azapi_resource_1.AzapiResource {
221
221
  }
222
222
  exports.DnsZone = DnsZone;
223
223
  _a = JSII_RTTI_SYMBOL_1;
224
- DnsZone[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsZone", version: "1.9.0" };
224
+ DnsZone[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsZone", version: "1.10.0" };
225
225
  (() => {
226
226
  azapi_resource_1.AzapiResource.registerSchemas(dns_zone_schemas_1.DNS_ZONE_TYPE, dns_zone_schemas_1.ALL_DNS_ZONE_VERSIONS);
227
227
  })();