@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.1

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 (291) hide show
  1. package/.jsii +54630 -26185
  2. package/API.md +72091 -23784
  3. package/lib/azure-actiongroup/index.d.ts +0 -10
  4. package/lib/azure-actiongroup/index.js +1 -11
  5. package/lib/azure-actiongroup/lib/action-group.d.ts +0 -10
  6. package/lib/azure-actiongroup/lib/action-group.js +6 -32
  7. package/lib/azure-actiongroup/lib/index.d.ts +1 -4
  8. package/lib/azure-actiongroup/lib/index.js +2 -5
  9. package/lib/azure-activitylogalert/index.d.ts +0 -10
  10. package/lib/azure-activitylogalert/index.js +1 -11
  11. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +0 -10
  12. package/lib/azure-activitylogalert/lib/activity-log-alert.js +6 -32
  13. package/lib/azure-activitylogalert/lib/index.d.ts +1 -4
  14. package/lib/azure-activitylogalert/lib/index.js +2 -5
  15. package/lib/azure-aks/index.d.ts +0 -8
  16. package/lib/azure-aks/index.js +1 -11
  17. package/lib/azure-aks/lib/aks-cluster.d.ts +4 -13
  18. package/lib/azure-aks/lib/aks-cluster.js +13 -36
  19. package/lib/azure-aks/lib/index.d.ts +1 -10
  20. package/lib/azure-aks/lib/index.js +2 -21
  21. package/lib/azure-diagnosticsettings/index.d.ts +0 -6
  22. package/lib/azure-diagnosticsettings/index.js +1 -7
  23. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +0 -10
  24. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +6 -32
  25. package/lib/azure-diagnosticsettings/lib/index.d.ts +1 -7
  26. package/lib/azure-diagnosticsettings/lib/index.js +2 -8
  27. package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
  28. package/lib/azure-dnsforwardingruleset/index.js +18 -0
  29. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
  30. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
  31. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
  32. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
  33. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
  34. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
  35. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
  36. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
  37. package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
  38. package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
  39. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
  40. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
  41. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
  42. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
  43. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
  44. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
  45. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
  46. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
  47. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
  48. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
  49. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
  50. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
  51. package/lib/azure-dnsresolver/index.d.ts +1 -0
  52. package/lib/azure-dnsresolver/index.js +18 -0
  53. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
  54. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
  55. package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
  56. package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
  57. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
  58. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
  59. package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
  60. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
  61. package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
  62. package/lib/azure-dnsresolver/lib/index.js +23 -0
  63. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
  64. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
  65. package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
  66. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
  67. package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
  68. package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
  69. package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
  70. package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
  71. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
  72. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
  73. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
  74. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
  75. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
  76. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
  77. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
  78. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
  79. package/lib/azure-dnszone/index.d.ts +1 -0
  80. package/lib/azure-dnszone/index.js +18 -0
  81. package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
  82. package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
  83. package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
  84. package/lib/azure-dnszone/lib/dns-zone.js +228 -0
  85. package/lib/azure-dnszone/lib/index.d.ts +2 -0
  86. package/lib/azure-dnszone/lib/index.js +19 -0
  87. package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
  88. package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
  89. package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
  90. package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
  91. package/lib/azure-metricalert/index.d.ts +0 -10
  92. package/lib/azure-metricalert/index.js +1 -11
  93. package/lib/azure-metricalert/lib/index.d.ts +1 -4
  94. package/lib/azure-metricalert/lib/index.js +2 -5
  95. package/lib/azure-metricalert/lib/metric-alert.d.ts +0 -10
  96. package/lib/azure-metricalert/lib/metric-alert.js +6 -32
  97. package/lib/azure-networkinterface/index.d.ts +0 -3
  98. package/lib/azure-networkinterface/index.js +1 -4
  99. package/lib/azure-networkinterface/lib/index.d.ts +1 -5
  100. package/lib/azure-networkinterface/lib/index.js +2 -5
  101. package/lib/azure-networkinterface/lib/network-interface.d.ts +4 -9
  102. package/lib/azure-networkinterface/lib/network-interface.js +14 -29
  103. package/lib/azure-networkinterface/test/network-interface.integ.js +20 -6
  104. package/lib/azure-networksecuritygroup/index.d.ts +0 -5
  105. package/lib/azure-networksecuritygroup/index.js +1 -6
  106. package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -5
  107. package/lib/azure-networksecuritygroup/lib/index.js +17 -14
  108. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +4 -13
  109. package/lib/azure-networksecuritygroup/lib/network-security-group.js +14 -36
  110. package/lib/azure-policyassignment/index.d.ts +1 -0
  111. package/lib/azure-policyassignment/index.js +18 -0
  112. package/lib/azure-policyassignment/lib/index.d.ts +2 -0
  113. package/lib/azure-policyassignment/lib/index.js +19 -0
  114. package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
  115. package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
  116. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +349 -0
  117. package/lib/azure-policyassignment/lib/policy-assignment.js +237 -0
  118. package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
  119. package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
  120. package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
  121. package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
  122. package/lib/azure-policydefinition/index.d.ts +1 -0
  123. package/lib/azure-policydefinition/index.js +18 -0
  124. package/lib/azure-policydefinition/lib/index.d.ts +2 -0
  125. package/lib/azure-policydefinition/lib/index.js +19 -0
  126. package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
  127. package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
  128. package/lib/azure-policydefinition/lib/policy-definition.d.ts +281 -0
  129. package/lib/azure-policydefinition/lib/policy-definition.js +236 -0
  130. package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
  131. package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
  132. package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
  133. package/lib/azure-policydefinition/test/policy-definition.spec.js +806 -0
  134. package/lib/azure-privatednszone/index.d.ts +1 -0
  135. package/lib/azure-privatednszone/index.js +18 -0
  136. package/lib/azure-privatednszone/lib/index.d.ts +2 -0
  137. package/lib/azure-privatednszone/lib/index.js +19 -0
  138. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
  139. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
  140. package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
  141. package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
  142. package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
  143. package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
  144. package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
  145. package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
  146. package/lib/azure-privatednszonelink/index.d.ts +1 -0
  147. package/lib/azure-privatednszonelink/index.js +18 -0
  148. package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
  149. package/lib/azure-privatednszonelink/lib/index.js +19 -0
  150. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
  151. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
  152. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
  153. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
  154. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
  155. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
  156. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
  157. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
  158. package/lib/azure-publicipaddress/index.d.ts +0 -5
  159. package/lib/azure-publicipaddress/index.js +1 -6
  160. package/lib/azure-publicipaddress/lib/index.d.ts +2 -9
  161. package/lib/azure-publicipaddress/lib/index.js +17 -17
  162. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +4 -13
  163. package/lib/azure-publicipaddress/lib/public-ip-address.js +14 -36
  164. package/lib/azure-resourcegroup/index.d.ts +0 -37
  165. package/lib/azure-resourcegroup/index.js +1 -39
  166. package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
  167. package/lib/azure-resourcegroup/lib/index.js +2 -43
  168. package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
  169. package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
  170. package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
  171. package/lib/azure-roleassignment/index.d.ts +1 -0
  172. package/lib/azure-roleassignment/index.js +18 -0
  173. package/lib/azure-roleassignment/lib/index.d.ts +2 -0
  174. package/lib/azure-roleassignment/lib/index.js +19 -0
  175. package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
  176. package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
  177. package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
  178. package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
  179. package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
  180. package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
  181. package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
  182. package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
  183. package/lib/azure-roledefinition/index.d.ts +1 -0
  184. package/lib/azure-roledefinition/index.js +18 -0
  185. package/lib/azure-roledefinition/lib/index.d.ts +2 -0
  186. package/lib/azure-roledefinition/lib/index.js +19 -0
  187. package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
  188. package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
  189. package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
  190. package/lib/azure-roledefinition/lib/role-definition.js +192 -0
  191. package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
  192. package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
  193. package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
  194. package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
  195. package/lib/azure-storageaccount/index.d.ts +0 -19
  196. package/lib/azure-storageaccount/index.js +1 -20
  197. package/lib/azure-storageaccount/lib/index.d.ts +1 -7
  198. package/lib/azure-storageaccount/lib/index.js +2 -8
  199. package/lib/azure-storageaccount/lib/storage-account.d.ts +4 -9
  200. package/lib/azure-storageaccount/lib/storage-account.js +15 -29
  201. package/lib/azure-subnet/index.d.ts +0 -3
  202. package/lib/azure-subnet/index.js +1 -4
  203. package/lib/azure-subnet/lib/index.d.ts +1 -4
  204. package/lib/azure-subnet/lib/index.js +2 -5
  205. package/lib/azure-subnet/lib/subnet.d.ts +3 -14
  206. package/lib/azure-subnet/lib/subnet.js +28 -47
  207. package/lib/azure-subnet/test/subnet.integ.js +19 -7
  208. package/lib/azure-subnet/test/subnet.spec.js +1 -2
  209. package/lib/azure-virtualmachine/index.d.ts +0 -6
  210. package/lib/azure-virtualmachine/index.js +1 -7
  211. package/lib/azure-virtualmachine/lib/index.d.ts +1 -10
  212. package/lib/azure-virtualmachine/lib/index.js +2 -21
  213. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +4 -13
  214. package/lib/azure-virtualmachine/lib/virtual-machine.js +15 -36
  215. package/lib/azure-virtualnetwork/index.d.ts +0 -9
  216. package/lib/azure-virtualnetwork/index.js +1 -11
  217. package/lib/azure-virtualnetwork/lib/index.d.ts +2 -9
  218. package/lib/azure-virtualnetwork/lib/index.js +17 -20
  219. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +4 -13
  220. package/lib/azure-virtualnetwork/lib/virtual-network.js +15 -36
  221. package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
  222. package/lib/azure-virtualnetworkmanager/index.js +18 -0
  223. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
  224. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
  225. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
  226. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
  227. package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
  228. package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
  229. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
  230. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
  231. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
  232. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
  233. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
  234. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
  235. package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
  236. package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
  237. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
  238. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
  239. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
  240. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
  241. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
  242. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
  243. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
  244. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
  245. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
  246. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
  247. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
  248. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
  249. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
  250. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
  251. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
  252. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
  253. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
  254. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
  255. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
  256. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
  257. package/lib/azure-vmss/index.d.ts +0 -5
  258. package/lib/azure-vmss/index.js +1 -6
  259. package/lib/azure-vmss/lib/index.d.ts +0 -7
  260. package/lib/azure-vmss/lib/index.js +1 -21
  261. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +5 -13
  262. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +29 -53
  263. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
  264. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
  265. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +206 -26
  266. package/lib/core-azure/lib/azapi/azapi-resource.js +379 -91
  267. package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
  268. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  269. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  270. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +5 -3
  271. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  272. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  273. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  274. package/lib/core-azure/lib/azapi/resource-schema-validator.d.ts +118 -0
  275. package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
  276. package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
  277. package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
  278. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +11 -6
  279. package/lib/core-azure/lib/index.d.ts +2 -2
  280. package/lib/core-azure/lib/index.js +5 -5
  281. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  282. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  283. package/lib/index.d.ts +19 -0
  284. package/lib/index.js +21 -2
  285. package/lib/testing/index.js +2 -2
  286. package/lib/testing/lib/cleanup.d.ts +1 -0
  287. package/lib/testing/lib/cleanup.js +19 -12
  288. package/lib/testing/lib/metadata.js +19 -16
  289. package/package.json +1 -1
  290. package/scripts/cleanup-test-resources.ts +22 -4
  291. package/scripts/generate-index.js +25 -8
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Azure DNS Resolver Outbound Endpoint implementation using AzapiResource framework
3
+ *
4
+ * This class provides a unified implementation for DNS Resolver Outbound Endpoints.
5
+ * Outbound Endpoints allow Azure resources to forward DNS queries to external DNS servers
6
+ * such as on-premises DNS servers or other external DNS resolvers.
7
+ *
8
+ * Supported API Versions:
9
+ * - 2022-07-01 (Active, Latest)
10
+ *
11
+ * Features:
12
+ * - Automatic latest version resolution when no version is specified
13
+ * - Explicit version pinning for stability requirements
14
+ * - Schema-driven validation and transformation
15
+ * - Full backward compatibility
16
+ * - JSII compliance for multi-language support
17
+ * - Dedicated subnet requirement with delegation
18
+ * - Used with forwarding rules for conditional DNS forwarding
19
+ */
20
+ import * as cdktf from "cdktf";
21
+ import { Construct } from "constructs";
22
+ import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
23
+ import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
24
+ /**
25
+ * Properties for the Azure DNS Resolver Outbound Endpoint
26
+ *
27
+ * Extends AzapiResourceProps with Outbound Endpoint specific properties
28
+ */
29
+ export interface DnsResolverOutboundEndpointProps extends AzapiResourceProps {
30
+ /**
31
+ * Resource ID of the parent DNS Resolver
32
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.Network/dnsResolvers/my-resolver"
33
+ */
34
+ readonly dnsResolverId: string;
35
+ /**
36
+ * Resource ID of the subnet where the Outbound Endpoint will be deployed
37
+ * Must be a dedicated subnet between /28 and /24 with delegation to Microsoft.Network/dnsResolvers
38
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/outbound-subnet"
39
+ */
40
+ readonly subnetId: string;
41
+ /**
42
+ * The lifecycle rules to ignore changes
43
+ * @example ["tags"]
44
+ */
45
+ readonly ignoreChanges?: string[];
46
+ }
47
+ /**
48
+ * The resource body interface for Azure Outbound Endpoint API calls
49
+ * This matches the Azure REST API schema
50
+ */
51
+ export interface DnsResolverOutboundEndpointBody {
52
+ readonly location: string;
53
+ readonly tags?: {
54
+ [key: string]: string;
55
+ };
56
+ readonly properties?: any;
57
+ }
58
+ /**
59
+ * Azure DNS Resolver Outbound Endpoint implementation
60
+ *
61
+ * Outbound Endpoints enable Azure resources to forward DNS queries to external DNS servers
62
+ * (such as on-premises DNS servers). This enables hybrid DNS scenarios where Azure resources
63
+ * need to resolve names from external DNS zones.
64
+ *
65
+ * Requirements:
66
+ * - Dedicated subnet between /28 and /24
67
+ * - Subnet must be delegated to Microsoft.Network/dnsResolvers
68
+ * - Must be in the same VNet as the parent DNS Resolver
69
+ * - Each DNS Resolver can have multiple outbound endpoints
70
+ * - Outbound endpoints are used with forwarding rules to specify which queries to forward
71
+ *
72
+ * @example
73
+ * // Basic outbound endpoint:
74
+ * const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
75
+ * name: "my-outbound-endpoint",
76
+ * location: "eastus",
77
+ * dnsResolverId: dnsResolver.id,
78
+ * subnetId: outboundSubnet.id
79
+ * });
80
+ *
81
+ * @example
82
+ * // Outbound endpoint with tags:
83
+ * const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
84
+ * name: "my-outbound-endpoint",
85
+ * location: "eastus",
86
+ * dnsResolverId: dnsResolver.id,
87
+ * subnetId: outboundSubnet.id,
88
+ * tags: {
89
+ * environment: "production",
90
+ * purpose: "hybrid-dns"
91
+ * }
92
+ * });
93
+ *
94
+ * @example
95
+ * // Outbound endpoint with version pinning:
96
+ * const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
97
+ * name: "my-outbound-endpoint",
98
+ * location: "eastus",
99
+ * dnsResolverId: dnsResolver.id,
100
+ * subnetId: outboundSubnet.id,
101
+ * apiVersion: "2022-07-01"
102
+ * });
103
+ *
104
+ * @stability stable
105
+ */
106
+ export declare class DnsResolverOutboundEndpoint extends AzapiResource {
107
+ /**
108
+ * The input properties for this Outbound Endpoint instance
109
+ */
110
+ readonly props: DnsResolverOutboundEndpointProps;
111
+ readonly idOutput: cdktf.TerraformOutput;
112
+ readonly nameOutput: cdktf.TerraformOutput;
113
+ readonly locationOutput: cdktf.TerraformOutput;
114
+ readonly tagsOutput: cdktf.TerraformOutput;
115
+ readonly provisioningStateOutput: cdktf.TerraformOutput;
116
+ readonly resourceGuidOutput: cdktf.TerraformOutput;
117
+ /**
118
+ * Creates a new Azure DNS Resolver Outbound Endpoint using the AzapiResource framework
119
+ *
120
+ * @param scope - The scope in which to define this construct
121
+ * @param id - The unique identifier for this instance
122
+ * @param props - Configuration properties for the Outbound Endpoint
123
+ */
124
+ constructor(scope: Construct, id: string, props: DnsResolverOutboundEndpointProps);
125
+ /**
126
+ * Resolves the parent resource ID for the Outbound Endpoint
127
+ * Outbound Endpoints are child resources of DNS Resolvers
128
+ */
129
+ protected resolveParentId(props: any): string;
130
+ /**
131
+ * Gets the default API version to use when no explicit version is specified
132
+ */
133
+ protected defaultVersion(): string;
134
+ /**
135
+ * Gets the Azure resource type for Outbound Endpoints
136
+ */
137
+ protected resourceType(): string;
138
+ /**
139
+ * Gets the API schema for the resolved version
140
+ */
141
+ protected apiSchema(): ApiSchema;
142
+ /**
143
+ * Indicates that location is required for Outbound Endpoints
144
+ */
145
+ protected requiresLocation(): boolean;
146
+ /**
147
+ * Creates the resource body for the Azure API call
148
+ */
149
+ protected createResourceBody(props: any): any;
150
+ /**
151
+ * Get the subnet ID
152
+ * Returns the input value as Azure API doesn't return nested subnet structure reliably
153
+ */
154
+ get subnetId(): string;
155
+ /**
156
+ * Get the provisioning state of the Outbound Endpoint
157
+ */
158
+ get provisioningState(): string;
159
+ /**
160
+ * Get the unique identifier for the Outbound Endpoint
161
+ */
162
+ get resourceGuid(): string;
163
+ /**
164
+ * Add a tag to the Outbound Endpoint
165
+ */
166
+ addTag(key: string, value: string): void;
167
+ /**
168
+ * Remove a tag from the Outbound Endpoint
169
+ */
170
+ removeTag(key: string): void;
171
+ /**
172
+ * Applies ignore changes lifecycle rules if specified in props
173
+ */
174
+ private _applyIgnoreChanges;
175
+ }
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DnsResolverOutboundEndpoint = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Azure DNS Resolver Outbound Endpoint implementation using AzapiResource framework
8
+ *
9
+ * This class provides a unified implementation for DNS Resolver Outbound Endpoints.
10
+ * Outbound Endpoints allow Azure resources to forward DNS queries to external DNS servers
11
+ * such as on-premises DNS servers or other external DNS resolvers.
12
+ *
13
+ * Supported API Versions:
14
+ * - 2022-07-01 (Active, Latest)
15
+ *
16
+ * Features:
17
+ * - Automatic latest version resolution when no version is specified
18
+ * - Explicit version pinning for stability requirements
19
+ * - Schema-driven validation and transformation
20
+ * - Full backward compatibility
21
+ * - JSII compliance for multi-language support
22
+ * - Dedicated subnet requirement with delegation
23
+ * - Used with forwarding rules for conditional DNS forwarding
24
+ */
25
+ const cdktf = require("cdktf");
26
+ const outbound_endpoint_schemas_1 = require("./outbound-endpoint-schemas");
27
+ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
28
+ /**
29
+ * Azure DNS Resolver Outbound Endpoint implementation
30
+ *
31
+ * Outbound Endpoints enable Azure resources to forward DNS queries to external DNS servers
32
+ * (such as on-premises DNS servers). This enables hybrid DNS scenarios where Azure resources
33
+ * need to resolve names from external DNS zones.
34
+ *
35
+ * Requirements:
36
+ * - Dedicated subnet between /28 and /24
37
+ * - Subnet must be delegated to Microsoft.Network/dnsResolvers
38
+ * - Must be in the same VNet as the parent DNS Resolver
39
+ * - Each DNS Resolver can have multiple outbound endpoints
40
+ * - Outbound endpoints are used with forwarding rules to specify which queries to forward
41
+ *
42
+ * @example
43
+ * // Basic outbound endpoint:
44
+ * const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
45
+ * name: "my-outbound-endpoint",
46
+ * location: "eastus",
47
+ * dnsResolverId: dnsResolver.id,
48
+ * subnetId: outboundSubnet.id
49
+ * });
50
+ *
51
+ * @example
52
+ * // Outbound endpoint with tags:
53
+ * const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
54
+ * name: "my-outbound-endpoint",
55
+ * location: "eastus",
56
+ * dnsResolverId: dnsResolver.id,
57
+ * subnetId: outboundSubnet.id,
58
+ * tags: {
59
+ * environment: "production",
60
+ * purpose: "hybrid-dns"
61
+ * }
62
+ * });
63
+ *
64
+ * @example
65
+ * // Outbound endpoint with version pinning:
66
+ * const outboundEndpoint = new DnsResolverOutboundEndpoint(this, "outbound-endpoint", {
67
+ * name: "my-outbound-endpoint",
68
+ * location: "eastus",
69
+ * dnsResolverId: dnsResolver.id,
70
+ * subnetId: outboundSubnet.id,
71
+ * apiVersion: "2022-07-01"
72
+ * });
73
+ *
74
+ * @stability stable
75
+ */
76
+ class DnsResolverOutboundEndpoint extends azapi_resource_1.AzapiResource {
77
+ // Public properties
78
+ /**
79
+ * Creates a new Azure DNS Resolver Outbound Endpoint using the AzapiResource framework
80
+ *
81
+ * @param scope - The scope in which to define this construct
82
+ * @param id - The unique identifier for this instance
83
+ * @param props - Configuration properties for the Outbound Endpoint
84
+ */
85
+ constructor(scope, id, props) {
86
+ super(scope, id, props);
87
+ this.props = props;
88
+ // Extract properties from the AZAPI resource outputs using Terraform interpolation
89
+ // Create Terraform outputs for easy access and referencing from other resources
90
+ this.idOutput = new cdktf.TerraformOutput(this, "id", {
91
+ value: this.id,
92
+ description: "The ID of the Outbound Endpoint",
93
+ });
94
+ this.nameOutput = new cdktf.TerraformOutput(this, "name", {
95
+ value: `\${${this.terraformResource.fqn}.name}`,
96
+ description: "The name of the Outbound Endpoint",
97
+ });
98
+ this.locationOutput = new cdktf.TerraformOutput(this, "location", {
99
+ value: `\${${this.terraformResource.fqn}.location}`,
100
+ description: "The location of the Outbound Endpoint",
101
+ });
102
+ this.tagsOutput = new cdktf.TerraformOutput(this, "tags", {
103
+ value: `\${${this.terraformResource.fqn}.tags}`,
104
+ description: "The tags assigned to the Outbound Endpoint",
105
+ });
106
+ this.provisioningStateOutput = new cdktf.TerraformOutput(this, "provisioning_state", {
107
+ value: `\${${this.terraformResource.fqn}.output.properties.provisioningState}`,
108
+ description: "The provisioning state of the Outbound Endpoint",
109
+ });
110
+ this.resourceGuidOutput = new cdktf.TerraformOutput(this, "resource_guid", {
111
+ value: `\${${this.terraformResource.fqn}.output.properties.resourceGuid}`,
112
+ description: "The unique identifier for the Outbound Endpoint",
113
+ });
114
+ // Override logical IDs to match naming convention
115
+ this.idOutput.overrideLogicalId("id");
116
+ this.nameOutput.overrideLogicalId("name");
117
+ this.locationOutput.overrideLogicalId("location");
118
+ this.tagsOutput.overrideLogicalId("tags");
119
+ this.provisioningStateOutput.overrideLogicalId("provisioning_state");
120
+ this.resourceGuidOutput.overrideLogicalId("resource_guid");
121
+ // Apply ignore changes if specified
122
+ this._applyIgnoreChanges();
123
+ }
124
+ // =============================================================================
125
+ // REQUIRED ABSTRACT METHODS FROM AzapiResource
126
+ // =============================================================================
127
+ /**
128
+ * Resolves the parent resource ID for the Outbound Endpoint
129
+ * Outbound Endpoints are child resources of DNS Resolvers
130
+ */
131
+ resolveParentId(props) {
132
+ const typedProps = props;
133
+ return typedProps.dnsResolverId;
134
+ }
135
+ /**
136
+ * Gets the default API version to use when no explicit version is specified
137
+ */
138
+ defaultVersion() {
139
+ return "2022-07-01";
140
+ }
141
+ /**
142
+ * Gets the Azure resource type for Outbound Endpoints
143
+ */
144
+ resourceType() {
145
+ return outbound_endpoint_schemas_1.DNS_RESOLVER_OUTBOUND_ENDPOINT_TYPE;
146
+ }
147
+ /**
148
+ * Gets the API schema for the resolved version
149
+ */
150
+ apiSchema() {
151
+ return this.resolveSchema();
152
+ }
153
+ /**
154
+ * Indicates that location is required for Outbound Endpoints
155
+ */
156
+ requiresLocation() {
157
+ return true;
158
+ }
159
+ /**
160
+ * Creates the resource body for the Azure API call
161
+ */
162
+ createResourceBody(props) {
163
+ const typedProps = props;
164
+ const body = {
165
+ location: this.location,
166
+ tags: this.allTags(),
167
+ properties: {
168
+ subnet: {
169
+ id: typedProps.subnetId,
170
+ },
171
+ },
172
+ };
173
+ return body;
174
+ }
175
+ // =============================================================================
176
+ // PUBLIC METHODS FOR OUTBOUND ENDPOINT OPERATIONS
177
+ // =============================================================================
178
+ /**
179
+ * Get the subnet ID
180
+ * Returns the input value as Azure API doesn't return nested subnet structure reliably
181
+ */
182
+ get subnetId() {
183
+ return this.props.subnetId;
184
+ }
185
+ /**
186
+ * Get the provisioning state of the Outbound Endpoint
187
+ */
188
+ get provisioningState() {
189
+ return `\${${this.terraformResource.fqn}.output.properties.provisioningState}`;
190
+ }
191
+ /**
192
+ * Get the unique identifier for the Outbound Endpoint
193
+ */
194
+ get resourceGuid() {
195
+ return `\${${this.terraformResource.fqn}.output.properties.resourceGuid}`;
196
+ }
197
+ /**
198
+ * Add a tag to the Outbound Endpoint
199
+ */
200
+ addTag(key, value) {
201
+ if (!this.props.tags) {
202
+ this.props.tags = {};
203
+ }
204
+ this.props.tags[key] = value;
205
+ }
206
+ /**
207
+ * Remove a tag from the Outbound Endpoint
208
+ */
209
+ removeTag(key) {
210
+ if (this.props.tags && this.props.tags[key]) {
211
+ delete this.props.tags[key];
212
+ }
213
+ }
214
+ // =============================================================================
215
+ // PRIVATE HELPER METHODS
216
+ // =============================================================================
217
+ /**
218
+ * Applies ignore changes lifecycle rules if specified in props
219
+ */
220
+ _applyIgnoreChanges() {
221
+ if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
222
+ this.terraformResource.addOverride("lifecycle", {
223
+ ignore_changes: this.props.ignoreChanges,
224
+ });
225
+ }
226
+ }
227
+ }
228
+ exports.DnsResolverOutboundEndpoint = DnsResolverOutboundEndpoint;
229
+ _a = JSII_RTTI_SYMBOL_1;
230
+ DnsResolverOutboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverOutboundEndpoint", version: "1.3.1" };
231
+ (() => {
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
+ })();
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtZW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtZG5zcmVzb2x2ZXIvbGliL291dGJvdW5kLWVuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUVILCtCQUErQjtBQUUvQiwyRUFHcUM7QUFDckMsOEVBR21EO0FBdUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ0c7QUFDSCxNQUFhLDJCQUE0QixTQUFRLDhCQUFhO0lBcUI1RCxvQkFBb0I7SUFFcEI7Ozs7OztPQU1HO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBdUM7UUFFdkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsbUZBQW1GO1FBRW5GLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSxpQ0FBaUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSxtQ0FBbUM7U0FDakQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlC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cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBenVyZSBETlMgUmVzb2x2ZXIgT3V0Ym91bmQgRW5kcG9pbnQgaW1wbGVtZW50YXRpb24gdXNpbmcgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdW5pZmllZCBpbXBsZW1lbnRhdGlvbiBmb3IgRE5TIFJlc29sdmVyIE91dGJvdW5kIEVuZHBvaW50cy5cbiAqIE91dGJvdW5kIEVuZHBvaW50cyBhbGxvdyBBenVyZSByZXNvdXJjZXMgdG8gZm9yd2FyZCBETlMgcXVlcmllcyB0byBleHRlcm5hbCBETlMgc2VydmVyc1xuICogc3VjaCBhcyBvbi1wcmVtaXNlcyBETlMgc2VydmVycyBvciBvdGhlciBleHRlcm5hbCBETlMgcmVzb2x2ZXJzLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjItMDctMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiB3aGVuIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gKiAtIEV4cGxpY2l0IHZlcnNpb24gcGlubmluZyBmb3Igc3RhYmlsaXR5IHJlcXVpcmVtZW50c1xuICogLSBTY2hlbWEtZHJpdmVuIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uXG4gKiAtIEZ1bGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqIC0gRGVkaWNhdGVkIHN1Ym5ldCByZXF1aXJlbWVudCB3aXRoIGRlbGVnYXRpb25cbiAqIC0gVXNlZCB3aXRoIGZvcndhcmRpbmcgcnVsZXMgZm9yIGNvbmRpdGlvbmFsIEROUyBmb3J3YXJkaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX0ROU19SRVNPTFZFUl9PVVRCT1VORF9FTkRQT0lOVF9WRVJTSU9OUyxcbiAgRE5TX1JFU09MVkVSX09VVEJPVU5EX0VORFBPSU5UX1RZUEUsXG59IGZyb20gXCIuL291dGJvdW5kLWVuZHBvaW50LXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIEF6dXJlIEROUyBSZXNvbHZlciBPdXRib3VuZCBFbmRwb2ludFxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggT3V0Ym91bmQgRW5kcG9pbnQgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFJlc291cmNlIElEIG9mIHRoZSBwYXJlbnQgRE5TIFJlc29sdmVyXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9kbnNSZXNvbHZlcnMvbXktcmVzb2x2ZXJcIlxuICAgKi9cbiAgcmVhZG9ubHkgZG5zUmVzb2x2ZXJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgc3VibmV0IHdoZXJlIHRoZSBPdXRib3VuZCBFbmRwb2ludCB3aWxsIGJlIGRlcGxveWVkXG4gICAqIE11c3QgYmUgYSBkZWRpY2F0ZWQgc3VibmV0IGJldHdlZW4gLzI4IGFuZCAvMjQgd2l0aCBkZWxlZ2F0aW9uIHRvIE1pY3Jvc29mdC5OZXR3b3JrL2Ruc1Jlc29sdmVyc1xuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy9wcm92aWRlcnMvTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3ZuZXQvc3VibmV0cy9vdXRib3VuZC1zdWJuZXRcIlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBPdXRib3VuZCBFbmRwb2ludCBBUEkgY2FsbHNcbiAqIFRoaXMgbWF0Y2hlcyB0aGUgQXp1cmUgUkVTVCBBUEkgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zUmVzb2x2ZXJPdXRib3VuZEVuZHBvaW50Qm9keSB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogYW55O1xufVxuXG4vKipcbiAqIEF6dXJlIEROUyBSZXNvbHZlciBPdXRib3VuZCBFbmRwb2ludCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIE91dGJvdW5kIEVuZHBvaW50cyBlbmFibGUgQXp1cmUgcmVzb3VyY2VzIHRvIGZvcndhcmQgRE5TIHF1ZXJpZXMgdG8gZXh0ZXJuYWwgRE5TIHNlcnZlcnNcbiAqIChzdWNoIGFzIG9uLXByZW1pc2VzIEROUyBzZXJ2ZXJzKS4gVGhpcyBlbmFibGVzIGh5YnJpZCBETlMgc2NlbmFyaW9zIHdoZXJlIEF6dXJlIHJlc291cmNlc1xuICogbmVlZCB0byByZXNvbHZlIG5hbWVzIGZyb20gZXh0ZXJuYWwgRE5TIHpvbmVzLlxuICpcbiAqIFJlcXVpcmVtZW50czpcbiAqIC0gRGVkaWNhdGVkIHN1Ym5ldCBiZXR3ZWVuIC8yOCBhbmQgLzI0XG4gKiAtIFN1Ym5ldCBtdXN0IGJlIGRlbGVnYXRlZCB0byBNaWNyb3NvZnQuTmV0d29yay9kbnNSZXNvbHZlcnNcbiAqIC0gTXVzdCBiZSBpbiB0aGUgc2FtZSBWTmV0IGFzIHRoZSBwYXJlbnQgRE5TIFJlc29sdmVyXG4gKiAtIEVhY2ggRE5TIFJlc29sdmVyIGNhbiBoYXZlIG11bHRpcGxlIG91dGJvdW5kIGVuZHBvaW50c1xuICogLSBPdXRib3VuZCBlbmRwb2ludHMgYXJlIHVzZWQgd2l0aCBmb3J3YXJkaW5nIHJ1bGVzIHRvIHNwZWNpZnkgd2hpY2ggcXVlcmllcyB0byBmb3J3YXJkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIG91dGJvdW5kIGVuZHBvaW50OlxuICogY29uc3Qgb3V0Ym91bmRFbmRwb2ludCA9IG5ldyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnQodGhpcywgXCJvdXRib3VuZC1lbmRwb2ludFwiLCB7XG4gKiAgIG5hbWU6IFwibXktb3V0Ym91bmQtZW5kcG9pbnRcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIGRuc1Jlc29sdmVySWQ6IGRuc1Jlc29sdmVyLmlkLFxuICogICBzdWJuZXRJZDogb3V0Ym91bmRTdWJuZXQuaWRcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBPdXRib3VuZCBlbmRwb2ludCB3aXRoIHRhZ3M6XG4gKiBjb25zdCBvdXRib3VuZEVuZHBvaW50ID0gbmV3IERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludCh0aGlzLCBcIm91dGJvdW5kLWVuZHBvaW50XCIsIHtcbiAqICAgbmFtZTogXCJteS1vdXRib3VuZC1lbmRwb2ludFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgZG5zUmVzb2x2ZXJJZDogZG5zUmVzb2x2ZXIuaWQsXG4gKiAgIHN1Ym5ldElkOiBvdXRib3VuZFN1Ym5ldC5pZCxcbiAqICAgdGFnczoge1xuICogICAgIGVudmlyb25tZW50OiBcInByb2R1Y3Rpb25cIixcbiAqICAgICBwdXJwb3NlOiBcImh5YnJpZC1kbnNcIlxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3V0Ym91bmQgZW5kcG9pbnQgd2l0aCB2ZXJzaW9uIHBpbm5pbmc6XG4gKiBjb25zdCBvdXRib3VuZEVuZHBvaW50ID0gbmV3IERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludCh0aGlzLCBcIm91dGJvdW5kLWVuZHBvaW50XCIsIHtcbiAqICAgbmFtZTogXCJteS1vdXRib3VuZC1lbmRwb2ludFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgZG5zUmVzb2x2ZXJJZDogZG5zUmVzb2x2ZXIuaWQsXG4gKiAgIHN1Ym5ldElkOiBvdXRib3VuZFN1Ym5ldC5pZCxcbiAqICAgYXBpVmVyc2lvbjogXCIyMDIyLTA3LTAxXCJcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19SRVNPTFZFUl9PVVRCT1VORF9FTkRQT0lOVF9UWVBFLFxuICAgICAgQUxMX0ROU19SRVNPTFZFUl9PVVRCT1VORF9FTkRQT0lOVF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzIE91dGJvdW5kIEVuZHBvaW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc1Jlc29sdmVyT3V0Ym91bmRFbmRwb2ludFByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnc091dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlR3VpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgRE5TIFJlc29sdmVyIE91dGJvdW5kIEVuZHBvaW50IHVzaW5nIHRoZSBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBPdXRib3VuZCBFbmRwb2ludFxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnRQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBPdXRib3VuZCBFbmRwb2ludFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImxvY2F0aW9uXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmxvY2F0aW9ufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbG9jYXRpb24gb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnRhZ3NPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwidGFnc1wiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS50YWdzfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgdGFncyBhc3NpZ25lZCB0byB0aGUgT3V0Ym91bmQgRW5kcG9pbnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMucHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KFxuICAgICAgdGhpcyxcbiAgICAgIFwicHJvdmlzaW9uaW5nX3N0YXRlXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByb3Zpc2lvbmluZ1N0YXRlfWAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XCIsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnJlc291cmNlR3VpZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJyZXNvdXJjZV9ndWlkXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnJlc291cmNlR3VpZH1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgT3V0Ym91bmQgRW5kcG9pbnRcIixcbiAgICB9KTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImxvY2F0aW9uXCIpO1xuICAgIHRoaXMudGFnc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInRhZ3NcIik7XG4gICAgdGhpcy5wcm92aXNpb25pbmdTdGF0ZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInByb3Zpc2lvbmluZ19zdGF0ZVwiKTtcbiAgICB0aGlzLnJlc291cmNlR3VpZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInJlc291cmNlX2d1aWRcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgZm9yIHRoZSBPdXRib3VuZCBFbmRwb2ludFxuICAgKiBPdXRib3VuZCBFbmRwb2ludHMgYXJlIGNoaWxkIHJlc291cmNlcyBvZiBETlMgUmVzb2x2ZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNSZXNvbHZlcklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjItMDctMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBPdXRib3VuZCBFbmRwb2ludHNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX1JFU09MVkVSX09VVEJPVU5EX0VORFBPSU5UX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgbG9jYXRpb24gaXMgcmVxdWlyZWQgZm9yIE91dGJvdW5kIEVuZHBvaW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNSZXNvbHZlck91dGJvdW5kRW5kcG9pbnRQcm9wcztcblxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHtcbiAgICAgIGxvY2F0aW9uOiB0aGlzLmxvY2F0aW9uISxcbiAgICAgIHRhZ3M6IHRoaXMuYWxsVGFncygpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBzdWJuZXQ6IHtcbiAgICAgICAgICBpZDogdHlwZWRQcm9wcy5zdWJuZXRJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIE9VVEJPVU5EIEVORFBPSU5UIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdWJuZXQgSURcbiAgICogUmV0dXJucyB0aGUgaW5wdXQgdmFsdWUgYXMgQXp1cmUgQVBJIGRvZXNuJ3QgcmV0dXJuIG5lc3RlZCBzdWJuZXQgc3RydWN0dXJlIHJlbGlhYmx5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1Ym5ldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VibmV0SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIE91dGJvdW5kIEVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb3Zpc2lvbmluZ1N0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucHJvdmlzaW9uaW5nU3RhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgT3V0Ym91bmQgRW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VHdWlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucmVzb3VyY2VHdWlkfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGFnIHRvIHRoZSBPdXRib3VuZCBFbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGFkZFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcy50YWdzKSB7XG4gICAgICAodGhpcy5wcm9wcyBhcyBhbnkpLnRhZ3MgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy50YWdzIVtrZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgdGFnIGZyb20gdGhlIE91dGJvdW5kIEVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVGFnKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMudGFncyAmJiB0aGlzLnByb3BzLnRhZ3Nba2V5XSkge1xuICAgICAgZGVsZXRlIHRoaXMucHJvcHMudGFnc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCB7XG4gICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Integration test for Azure DNS Private Resolver
3
+ *
4
+ * This test demonstrates usage of the DnsResolver construct with proper
5
+ * VNet and subnet configuration, and validates deployment, idempotency, and cleanup.
6
+ *
7
+ * Key Requirements:
8
+ * - DNS Resolver requires a dedicated subnet
9
+ * - Subnet must be delegated to Microsoft.Network/dnsResolvers
10
+ * - Subnet must be between /28 and /24 in size
11
+ *
12
+ * Run with: npm run integration:nostream
13
+ */
14
+ import "cdktf/lib/testing/adapters/jest";
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Integration test for Azure DNS Private Resolver
4
+ *
5
+ * This test demonstrates usage of the DnsResolver construct with proper
6
+ * VNet and subnet configuration, and validates deployment, idempotency, and cleanup.
7
+ *
8
+ * Key Requirements:
9
+ * - DNS Resolver requires a dedicated subnet
10
+ * - Subnet must be delegated to Microsoft.Network/dnsResolvers
11
+ * - Subnet must be between /28 and /24 in size
12
+ *
13
+ * Run with: npm run integration:nostream
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const cdktf_1 = require("cdktf");
17
+ require("cdktf/lib/testing/adapters/jest");
18
+ const resource_group_1 = require("../../azure-resourcegroup/lib/resource-group");
19
+ const subnet_1 = require("../../azure-subnet/lib/subnet");
20
+ const virtual_network_1 = require("../../azure-virtualnetwork/lib/virtual-network");
21
+ const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
22
+ const testing_1 = require("../../testing");
23
+ const metadata_1 = require("../../testing/lib/metadata");
24
+ const dns_resolver_1 = require("../lib/dns-resolver");
25
+ // Generate unique test run metadata for this test suite
26
+ const testMetadata = new metadata_1.TestRunMetadata("dnsresolver-integration", {
27
+ maxAgeHours: 4,
28
+ });
29
+ /**
30
+ * Example stack demonstrating DNS Resolver usage
31
+ */
32
+ class DnsResolverExampleStack extends testing_1.BaseTestStack {
33
+ constructor(scope, id) {
34
+ super(scope, id, {
35
+ testRunOptions: {
36
+ maxAgeHours: testMetadata.maxAgeHours,
37
+ autoCleanup: testMetadata.autoCleanup,
38
+ cleanupPolicy: testMetadata.cleanupPolicy,
39
+ },
40
+ });
41
+ // Configure AZAPI provider
42
+ new provider_1.AzapiProvider(this, "azapi", {});
43
+ // Generate unique names
44
+ const resourceGroupName = this.generateResourceName("Microsoft.Resources/resourceGroups", "dnsresolver");
45
+ const vnetName = this.generateResourceName("Microsoft.Network/virtualNetworks", "dnsresolver");
46
+ const subnetName = this.generateResourceName("Microsoft.Network/virtualNetworks/subnets", "dnsresolver");
47
+ const dnsResolverName = this.generateResourceName("Microsoft.Network/dnsResolvers", "dnsresolver");
48
+ // Create resource group
49
+ const resourceGroup = new resource_group_1.ResourceGroup(this, "test-rg", {
50
+ name: resourceGroupName,
51
+ location: "eastus",
52
+ tags: {
53
+ ...this.systemTags(),
54
+ purpose: "dns-resolver-testing",
55
+ },
56
+ });
57
+ // Create virtual network for DNS resolver
58
+ const vnet = new virtual_network_1.VirtualNetwork(this, "test-vnet", {
59
+ name: vnetName,
60
+ location: "eastus",
61
+ resourceGroupId: resourceGroup.id,
62
+ addressSpace: {
63
+ addressPrefixes: ["10.0.0.0/16"],
64
+ },
65
+ tags: {
66
+ ...this.systemTags(),
67
+ purpose: "dns-resolver-vnet",
68
+ },
69
+ });
70
+ // Create dedicated subnet for DNS resolver with delegation
71
+ // Subnet must be /28 to /24 in size and delegated to Microsoft.Network/dnsResolvers
72
+ const subnet = new subnet_1.Subnet(this, "dns-resolver-subnet", {
73
+ name: subnetName,
74
+ virtualNetworkName: vnetName,
75
+ virtualNetworkId: vnet.id,
76
+ resourceGroupId: resourceGroup.id,
77
+ addressPrefix: "10.0.1.0/28", // /28 subnet (smallest allowed)
78
+ delegations: [
79
+ {
80
+ name: "Microsoft.Network.dnsResolvers",
81
+ serviceName: "Microsoft.Network/dnsResolvers",
82
+ actions: ["Microsoft.Network/virtualNetworks/subnets/join/action"],
83
+ },
84
+ ],
85
+ });
86
+ // Create DNS resolver with comprehensive configuration
87
+ // Note: Azure only allows one DNS Resolver per Virtual Network
88
+ new dns_resolver_1.DnsResolver(this, "dns-resolver", {
89
+ name: dnsResolverName,
90
+ location: "eastus",
91
+ resourceGroupId: resourceGroup.id,
92
+ virtualNetworkId: vnet.id,
93
+ tags: {
94
+ ...this.systemTags(),
95
+ example: "complete",
96
+ environment: "test",
97
+ purpose: "hybrid-dns",
98
+ },
99
+ });
100
+ // Add dependency to ensure subnet is created before resolvers
101
+ // This ensures the delegation is in place
102
+ subnet;
103
+ }
104
+ }
105
+ describe("DnsResolver Integration Test", () => {
106
+ it("should deploy DNS resolver with VNet and delegated subnet, validate idempotency, and cleanup", () => {
107
+ const app = cdktf_1.Testing.app();
108
+ const stack = new DnsResolverExampleStack(app, "test-dnsresolver");
109
+ const synthesized = cdktf_1.Testing.fullSynth(stack);
110
+ // This will:
111
+ // 1. Run terraform apply to deploy resources (VNet, Subnet with delegation, DNS Resolver)
112
+ // 2. Run terraform plan to check idempotency (no changes expected)
113
+ // 3. Run terraform destroy to cleanup resources
114
+ (0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
115
+ }, 600000); // 10 minute timeout for deployment and cleanup
116
+ });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXJlc29sdmVyLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWRuc3Jlc29sdmVyL3Rlc3QvZG5zLXJlc29sdmVyLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7O0FBRUgsaUNBQWdDO0FBRWhDLDJDQUF5QztBQUN6QyxpRkFBNkU7QUFDN0UsMERBQXVEO0FBQ3ZELG9GQUFnRjtBQUNoRixrRkFBb0Y7QUFDcEYsMkNBQTZFO0FBQzdFLHlEQUE2RDtBQUM3RCxzREFBa0Q7QUFFbEQsd0RBQXdEO0FBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUksMEJBQWUsQ0FBQyx5QkFBeUIsRUFBRTtJQUNsRSxXQUFXLEVBQUUsQ0FBQztDQUNmLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSx1QkFBd0IsU0FBUSx1QkFBYTtJQUNqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLGNBQWMsRUFBRTtnQkFDZCxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7Z0JBQ3JDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhO2FBQzFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQzNCLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLHdCQUF3QjtRQUN4QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDakQsb0NBQW9DLEVBQ3BDLGFBQWEsQ0FDZCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUN4QyxtQ0FBbUMsRUFDbkMsYUFBYSxDQUNkLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQzFDLDJDQUEyQyxFQUMzQyxhQUFhLENBQ2QsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDL0MsZ0NBQWdDLEVBQ2hDLGFBQWEsQ0FDZCxDQUFDO1FBRUYsd0JBQXdCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksOEJBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3ZELElBQUksRUFBRSxpQkFBaUI7WUFDdkIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLHNCQUFzQjthQUNoQztTQUNGLENBQUMsQ0FBQztRQUVILDBDQUEwQztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLGdDQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUNqRCxJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNqQyxZQUFZLEVBQUU7Z0JBQ1osZUFBZSxFQUFFLENBQUMsYUFBYSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLG1CQUFtQjthQUM3QjtTQUNGLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxvRkFBb0Y7UUFDcEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ3JELElBQUksRUFBRSxVQUFVO1lBQ2hCLGtCQUFrQixFQUFFLFFBQVE7WUFDNUIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDekIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0NBQWdDO1lBQzlELFdBQVcsRUFBRTtnQkFDWDtvQkFDRSxJQUFJLEVBQUUsZ0NBQWdDO29CQUN0QyxXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxPQUFPLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQztpQkFDbkU7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCwrREFBK0Q7UUFDL0QsSUFBSSwwQkFBVyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDcEMsSUFBSSxFQUFFLGVBQWU7WUFDckIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3pCLElBQUksRUFBRTtnQkFDSixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixXQUFXLEVBQUUsTUFBTTtnQkFDbkIsT0FBTyxFQUFFLFlBQVk7YUFDdEI7U0FDRixDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsMENBQTBDO1FBQzFDLE1BQU0sQ0FBQztJQUNULENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7SUFDNUMsRUFBRSxDQUFDLDhGQUE4RixFQUFFLEdBQUcsRUFBRTtRQUN0RyxNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLGFBQWE7UUFDYiwwRkFBMEY7UUFDMUYsbUVBQW1FO1FBQ25FLGdEQUFnRDtRQUNoRCxJQUFBLHVDQUE2QixFQUFDLFdBQVcsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLCtDQUErQztBQUM3RCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBmb3IgQXp1cmUgRE5TIFByaXZhdGUgUmVzb2x2ZXJcbiAqXG4gKiBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIHVzYWdlIG9mIHRoZSBEbnNSZXNvbHZlciBjb25zdHJ1Y3Qgd2l0aCBwcm9wZXJcbiAqIFZOZXQgYW5kIHN1Ym5ldCBjb25maWd1cmF0aW9uLCBhbmQgdmFsaWRhdGVzIGRlcGxveW1lbnQsIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cC5cbiAqXG4gKiBLZXkgUmVxdWlyZW1lbnRzOlxuICogLSBETlMgUmVzb2x2ZXIgcmVxdWlyZXMgYSBkZWRpY2F0ZWQgc3VibmV0XG4gKiAtIFN1Ym5ldCBtdXN0IGJlIGRlbGVnYXRlZCB0byBNaWNyb3NvZnQuTmV0d29yay9kbnNSZXNvbHZlcnNcbiAqIC0gU3VibmV0IG11c3QgYmUgYmV0d2VlbiAvMjggYW5kIC8yNCBpbiBzaXplXG4gKlxuICogUnVuIHdpdGg6IG5wbSBydW4gaW50ZWdyYXRpb246bm9zdHJlYW1cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCIuLi8uLi9henVyZS1yZXNvdXJjZWdyb3VwL2xpYi9yZXNvdXJjZS1ncm91cFwiO1xuaW1wb3J0IHsgU3VibmV0IH0gZnJvbSBcIi4uLy4uL2F6dXJlLXN1Ym5ldC9saWIvc3VibmV0XCI7XG5pbXBvcnQgeyBWaXJ0dWFsTmV0d29yayB9IGZyb20gXCIuLi8uLi9henVyZS12aXJ0dWFsbmV0d29yay9saWIvdmlydHVhbC1uZXR3b3JrXCI7XG5pbXBvcnQgeyBBemFwaVByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Byb3ZpZGVycy1hemFwaS9wcm92aWRlclwiO1xuaW1wb3J0IHsgQmFzZVRlc3RTdGFjaywgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3kgfSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgVGVzdFJ1bk1ldGFkYXRhIH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmcvbGliL21ldGFkYXRhXCI7XG5pbXBvcnQgeyBEbnNSZXNvbHZlciB9IGZyb20gXCIuLi9saWIvZG5zLXJlc29sdmVyXCI7XG5cbi8vIEdlbmVyYXRlIHVuaXF1ZSB0ZXN0IHJ1biBtZXRhZGF0YSBmb3IgdGhpcyB0ZXN0IHN1aXRlXG5jb25zdCB0ZXN0TWV0YWRhdGEgPSBuZXcgVGVzdFJ1bk1ldGFkYXRhKFwiZG5zcmVzb2x2ZXItaW50ZWdyYXRpb25cIiwge1xuICBtYXhBZ2VIb3VyczogNCxcbn0pO1xuXG4vKipcbiAqIEV4YW1wbGUgc3RhY2sgZGVtb25zdHJhdGluZyBETlMgUmVzb2x2ZXIgdXNhZ2VcbiAqL1xuY2xhc3MgRG5zUmVzb2x2ZXJFeGFtcGxlU3RhY2sgZXh0ZW5kcyBCYXNlVGVzdFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVzdFJ1bk9wdGlvbnM6IHtcbiAgICAgICAgbWF4QWdlSG91cnM6IHRlc3RNZXRhZGF0YS5tYXhBZ2VIb3VycyxcbiAgICAgICAgYXV0b0NsZWFudXA6IHRlc3RNZXRhZGF0YS5hdXRvQ2xlYW51cCxcbiAgICAgICAgY2xlYW51cFBvbGljeTogdGVzdE1ldGFkYXRhLmNsZWFudXBQb2xpY3ksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ29uZmlndXJlIEFaQVBJIHByb3ZpZGVyXG4gICAgbmV3IEF6YXBpUHJvdmlkZXIodGhpcywgXCJhemFwaVwiLCB7fSk7XG5cbiAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgbmFtZXNcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwTmFtZSA9IHRoaXMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUoXG4gICAgICBcIk1pY3Jvc29mdC5SZXNvdXJjZXMvcmVzb3VyY2VHcm91cHNcIixcbiAgICAgIFwiZG5zcmVzb2x2ZXJcIixcbiAgICApO1xuICAgIGNvbnN0IHZuZXROYW1lID0gdGhpcy5nZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzXCIsXG4gICAgICBcImRuc3Jlc29sdmVyXCIsXG4gICAgKTtcbiAgICBjb25zdCBzdWJuZXROYW1lID0gdGhpcy5nZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3N1Ym5ldHNcIixcbiAgICAgIFwiZG5zcmVzb2x2ZXJcIixcbiAgICApO1xuICAgIGNvbnN0IGRuc1Jlc29sdmVyTmFtZSA9IHRoaXMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUoXG4gICAgICBcIk1pY3Jvc29mdC5OZXR3b3JrL2Ruc1Jlc29sdmVyc1wiLFxuICAgICAgXCJkbnNyZXNvbHZlclwiLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgcmVzb3VyY2UgZ3JvdXBcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwID0gbmV3IFJlc291cmNlR3JvdXAodGhpcywgXCJ0ZXN0LXJnXCIsIHtcbiAgICAgIG5hbWU6IHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBwdXJwb3NlOiBcImRucy1yZXNvbHZlci10ZXN0aW5nXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHZpcnR1YWwgbmV0d29yayBmb3IgRE5TIHJlc29sdmVyXG4gICAgY29uc3Qgdm5ldCA9IG5ldyBWaXJ0dWFsTmV0d29yayh0aGlzLCBcInRlc3Qtdm5ldFwiLCB7XG4gICAgICBuYW1lOiB2bmV0TmFtZSxcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgYWRkcmVzc1NwYWNlOiB7XG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjAvMTZcIl0sXG4gICAgICB9LFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgICAgcHVycG9zZTogXCJkbnMtcmVzb2x2ZXItdm5ldFwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBkZWRpY2F0ZWQgc3VibmV0IGZvciBETlMgcmVzb2x2ZXIgd2l0aCBkZWxlZ2F0aW9uXG4gICAgLy8gU3VibmV0IG11c3QgYmUgLzI4IHRvIC8yNCBpbiBzaXplIGFuZCBkZWxlZ2F0ZWQgdG8gTWljcm9zb2Z0Lk5ldHdvcmsvZG5zUmVzb2x2ZXJzXG4gICAgY29uc3Qgc3VibmV0ID0gbmV3IFN1Ym5ldCh0aGlzLCBcImRucy1yZXNvbHZlci1zdWJuZXRcIiwge1xuICAgICAgbmFtZTogc3VibmV0TmFtZSxcbiAgICAgIHZpcnR1YWxOZXR3b3JrTmFtZTogdm5ldE5hbWUsXG4gICAgICB2aXJ0dWFsTmV0d29ya0lkOiB2bmV0LmlkLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgYWRkcmVzc1ByZWZpeDogXCIxMC4wLjEuMC8yOFwiLCAvLyAvMjggc3VibmV0IChzbWFsbGVzdCBhbGxvd2VkKVxuICAgICAgZGVsZWdhdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiTWljcm9zb2Z0Lk5ldHdvcmsuZG5zUmVzb2x2ZXJzXCIsXG4gICAgICAgICAgc2VydmljZU5hbWU6IFwiTWljcm9zb2Z0Lk5ldHdvcmsvZG5zUmVzb2x2ZXJzXCIsXG4gICAgICAgICAgYWN0aW9uczogW1wiTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3N1Ym5ldHMvam9pbi9hY3Rpb25cIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIEROUyByZXNvbHZlciB3aXRoIGNvbXByZWhlbnNpdmUgY29uZmlndXJhdGlvblxuICAgIC8vIE5vdGU6IEF6dXJlIG9ubHkgYWxsb3dzIG9uZSBETlMgUmVzb2x2ZXIgcGVyIFZpcnR1YWwgTmV0d29ya1xuICAgIG5ldyBEbnNSZXNvbHZlcih0aGlzLCBcImRucy1yZXNvbHZlclwiLCB7XG4gICAgICBuYW1lOiBkbnNSZXNvbHZlck5hbWUsXG4gICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IHZuZXQuaWQsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcImNvbXBsZXRlXCIsXG4gICAgICAgIGVudmlyb25tZW50OiBcInRlc3RcIixcbiAgICAgICAgcHVycG9zZTogXCJoeWJyaWQtZG5zXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGRlcGVuZGVuY3kgdG8gZW5zdXJlIHN1Ym5ldCBpcyBjcmVhdGVkIGJlZm9yZSByZXNvbHZlcnNcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGRlbGVnYXRpb24gaXMgaW4gcGxhY2VcbiAgICBzdWJuZXQ7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJEbnNSZXNvbHZlciBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95IEROUyByZXNvbHZlciB3aXRoIFZOZXQgYW5kIGRlbGVnYXRlZCBzdWJuZXQsIHZhbGlkYXRlIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cFwiLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBEbnNSZXNvbHZlckV4YW1wbGVTdGFjayhhcHAsIFwidGVzdC1kbnNyZXNvbHZlclwiKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXMgKFZOZXQsIFN1Ym5ldCB3aXRoIGRlbGVnYXRpb24sIEROUyBSZXNvbHZlcilcbiAgICAvLyAyLiBSdW4gdGVycmFmb3JtIHBsYW4gdG8gY2hlY2sgaWRlbXBvdGVuY3kgKG5vIGNoYW5nZXMgZXhwZWN0ZWQpXG4gICAgLy8gMy4gUnVuIHRlcnJhZm9ybSBkZXN0cm95IHRvIGNsZWFudXAgcmVzb3VyY2VzXG4gICAgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3koc3ludGhlc2l6ZWQsIHsgdmVyaWZ5Q2xlYW51cDogdHJ1ZSB9KTtcbiAgfSwgNjAwMDAwKTsgLy8gMTAgbWludXRlIHRpbWVvdXQgZm9yIGRlcGxveW1lbnQgYW5kIGNsZWFudXBcbn0pO1xuIl19
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Comprehensive tests for the unified DnsResolver implementation
3
+ *
4
+ * This test suite validates the unified DnsResolver class using the
5
+ * VersionedAzapiResource framework. Tests cover automatic version resolution,
6
+ * explicit version pinning, schema validation, property transformation, and
7
+ * full backward compatibility.
8
+ */
9
+ export {};