@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,236 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PolicyDefinition = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Unified Azure Policy Definition implementation using VersionedAzapiResource framework
8
+ *
9
+ * This class provides a version-aware implementation for managing Azure Policy Definitions
10
+ * using the AZAPI provider. Policy definitions are deployed at subscription or management
11
+ * group scope and define the rules and parameters for policy enforcement.
12
+ *
13
+ * Supported API Versions:
14
+ * - 2021-06-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
+ * - Support for custom policy rules and parameters
21
+ * - JSII compliance for multi-language support
22
+ */
23
+ const cdktf = require("cdktf");
24
+ const policy_definition_schemas_1 = require("./policy-definition-schemas");
25
+ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
26
+ /**
27
+ * Unified Azure Policy Definition implementation
28
+ *
29
+ * This class provides a single, version-aware implementation for managing Azure
30
+ * Policy Definitions. It automatically handles version resolution, schema validation,
31
+ * and property transformation.
32
+ *
33
+ * Note: Policy definitions are deployed at subscription or management group scope.
34
+ * Unlike most Azure resources, they do not have a location property as they are
35
+ * not region-specific.
36
+ *
37
+ * @example
38
+ * // Basic custom policy definition:
39
+ * const policyDefinition = new PolicyDefinition(this, "policy", {
40
+ * name: "require-tag-policy",
41
+ * displayName: "Require tag on resources",
42
+ * description: "Enforces a required tag on resources",
43
+ * policyRule: {
44
+ * if: {
45
+ * field: "tags['Environment']",
46
+ * exists: "false"
47
+ * },
48
+ * then: {
49
+ * effect: "deny"
50
+ * }
51
+ * }
52
+ * });
53
+ *
54
+ * @example
55
+ * // Policy definition with parameters:
56
+ * const policyDefinition = new PolicyDefinition(this, "policy", {
57
+ * name: "require-tag-policy",
58
+ * displayName: "Require tag on resources",
59
+ * policyRule: {
60
+ * if: {
61
+ * field: "[concat('tags[', parameters('tagName'), ']')]",
62
+ * exists: "false"
63
+ * },
64
+ * then: {
65
+ * effect: "deny"
66
+ * }
67
+ * },
68
+ * parameters: {
69
+ * tagName: {
70
+ * type: "String",
71
+ * metadata: {
72
+ * displayName: "Tag Name"
73
+ * }
74
+ * }
75
+ * }
76
+ * });
77
+ *
78
+ * @stability stable
79
+ */
80
+ class PolicyDefinition extends azapi_resource_1.AzapiResource {
81
+ // Public properties
82
+ /**
83
+ * Creates a new Azure Policy Definition using the VersionedAzapiResource framework
84
+ *
85
+ * The constructor automatically handles version resolution, schema registration,
86
+ * validation, and resource creation.
87
+ *
88
+ * @param scope - The scope in which to define this construct
89
+ * @param id - The unique identifier for this instance
90
+ * @param props - Configuration properties for the Policy Definition
91
+ */
92
+ constructor(scope, id, props) {
93
+ super(scope, id, props);
94
+ this.props = props;
95
+ // Extract properties from the AZAPI resource outputs using Terraform interpolation
96
+ // Create Terraform outputs for easy access and referencing from other resources
97
+ this.idOutput = new cdktf.TerraformOutput(this, "id", {
98
+ value: this.id,
99
+ description: "The ID of the Policy Definition",
100
+ });
101
+ this.nameOutput = new cdktf.TerraformOutput(this, "name", {
102
+ value: `\${${this.terraformResource.fqn}.name}`,
103
+ description: "The name of the Policy Definition",
104
+ });
105
+ // Override logical IDs to match original naming convention
106
+ this.idOutput.overrideLogicalId("id");
107
+ this.nameOutput.overrideLogicalId("name");
108
+ // Apply ignore changes if specified
109
+ this._applyIgnoreChanges();
110
+ }
111
+ // =============================================================================
112
+ // REQUIRED ABSTRACT METHODS FROM AzapiResource
113
+ // =============================================================================
114
+ /**
115
+ * Gets the default API version to use when no explicit version is specified
116
+ * Returns the most recent stable version as the default
117
+ */
118
+ defaultVersion() {
119
+ return "2021-06-01";
120
+ }
121
+ /**
122
+ * Gets the Azure resource type for Policy Definitions
123
+ */
124
+ resourceType() {
125
+ return policy_definition_schemas_1.POLICY_DEFINITION_TYPE;
126
+ }
127
+ /**
128
+ * Gets the API schema for the resolved version
129
+ * Uses the framework's schema resolution to get the appropriate schema
130
+ */
131
+ apiSchema() {
132
+ return this.resolveSchema();
133
+ }
134
+ /**
135
+ * Creates the resource body for the Azure API call
136
+ * Transforms the input properties into the JSON format expected by Azure REST API
137
+ *
138
+ * Note: Policy definitions do not have a location property as they are
139
+ * subscription or management group scoped resources.
140
+ */
141
+ createResourceBody(props) {
142
+ const typedProps = props;
143
+ return {
144
+ properties: {
145
+ displayName: typedProps.displayName,
146
+ description: typedProps.description,
147
+ policyType: typedProps.policyType || "Custom",
148
+ mode: typedProps.mode || "All",
149
+ // Deep clone policyRule to preserve all nested objects and Azure Policy expressions
150
+ // This ensures complex DeployIfNotExists policies with ARM templates are fully serialized
151
+ // Azure Policy expressions like [field()], [parameters()], [variables()] are preserved
152
+ policyRule: JSON.parse(JSON.stringify(typedProps.policyRule)),
153
+ parameters: typedProps.parameters,
154
+ metadata: typedProps.metadata,
155
+ },
156
+ };
157
+ }
158
+ /**
159
+ * Policy Definitions do not support tags at the resource level
160
+ * Tags are not a valid property for Microsoft.Authorization/policyDefinitions
161
+ * @returns false - Policy Definitions cannot have tags
162
+ * @override
163
+ */
164
+ supportsTags() {
165
+ return false;
166
+ }
167
+ /**
168
+ * Customizes the AZAPI ResourceConfig for policy-specific requirements
169
+ *
170
+ * Policy definitions require special handling because:
171
+ * 1. They contain complex nested objects (ARM templates in DeployIfNotExists policies)
172
+ * 2. They use Azure Policy expressions like [field()], [parameters()], [variables()]
173
+ * which are NOT Terraform interpolations but Azure-native expressions
174
+ * 3. Schema validation may strip unknown properties from deeply nested structures
175
+ *
176
+ * @param config - The base ResourceConfig
177
+ * @returns Modified ResourceConfig with policy-specific settings
178
+ * @override
179
+ */
180
+ customizeResourceConfig(config) {
181
+ return {
182
+ ...config,
183
+ // Disable schema validation to preserve all nested properties
184
+ // Azure Policy definitions can contain deeply nested ARM templates and expressions
185
+ // that the AZAPI provider's schema validation may not recognize
186
+ schemaValidationEnabled: false,
187
+ // Allow properties not in the schema to prevent stripping of nested content
188
+ // This is essential for DeployIfNotExists policies with ARM template deployments
189
+ ignoreMissingProperty: true,
190
+ };
191
+ }
192
+ // =============================================================================
193
+ // PUBLIC METHODS FOR POLICY DEFINITION OPERATIONS
194
+ // =============================================================================
195
+ /**
196
+ * Get the full resource identifier for use in other Azure resources
197
+ * Alias for the id property
198
+ */
199
+ get resourceId() {
200
+ return this.id;
201
+ }
202
+ /**
203
+ * Get the policy type
204
+ */
205
+ get policyType() {
206
+ return this.props.policyType || "Custom";
207
+ }
208
+ /**
209
+ * Get the policy mode
210
+ */
211
+ get policyMode() {
212
+ return this.props.mode || "All";
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
+ {
224
+ ignore_changes: this.props.ignoreChanges,
225
+ },
226
+ ]);
227
+ }
228
+ }
229
+ }
230
+ exports.PolicyDefinition = PolicyDefinition;
231
+ _a = JSII_RTTI_SYMBOL_1;
232
+ PolicyDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyDefinition", version: "1.3.1" };
233
+ (() => {
234
+ azapi_resource_1.AzapiResource.registerSchemas(policy_definition_schemas_1.POLICY_DEFINITION_TYPE, policy_definition_schemas_1.ALL_POLICY_DEFINITION_VERSIONS);
235
+ })();
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5ZGVmaW5pdGlvbi9saWIvcG9saWN5LWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILCtCQUErQjtBQUUvQiwyRUFHcUM7QUFDckMsOEVBR21EO0FBa0puRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDhCQUFhO0lBaUJqRCxvQkFBb0I7SUFFcEI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLG1DQUFtQztTQUNqRCxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sa0RBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBOEIsQ0FBQztRQUNsRCxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDbkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsSUFBSSxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxLQUFLO2dCQUM5QixvRkFBb0Y7Z0JBQ3BGLDBGQUEwRjtnQkFDMUYsdUZBQXVGO2dCQUN2RixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0QsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2dCQUNqQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7YUFDOUI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTyx1QkFBdUIsQ0FBQyxNQUFXO1FBQzNDLE9BQU87WUFDTCxHQUFHLE1BQU07WUFDVCw4REFBOEQ7WUFDOUQsbUZBQW1GO1lBQ25GLGdFQUFnRTtZQUNoRSx1QkFBdUIsRUFBRSxLQUFLO1lBQzlCLDRFQUE0RTtZQUM1RSxpRkFBaUY7WUFDakYscUJBQXFCLEVBQUUsSUFBSTtTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELGdGQUFnRjtJQUNoRixrREFBa0Q7SUFDbEQsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDO29CQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7aUJBQ3pDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBeExILDRDQXlMQzs7O0FBeExDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLGtEQUFzQixFQUN0QiwwREFBOEIsQ0FDL0IsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uIHVzaW5nIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIG1hbmFnaW5nIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uc1xuICogdXNpbmcgdGhlIEFaQVBJIHByb3ZpZGVyLiBQb2xpY3kgZGVmaW5pdGlvbnMgYXJlIGRlcGxveWVkIGF0IHN1YnNjcmlwdGlvbiBvciBtYW5hZ2VtZW50XG4gKiBncm91cCBzY29wZSBhbmQgZGVmaW5lIHRoZSBydWxlcyBhbmQgcGFyYW1ldGVycyBmb3IgcG9saWN5IGVuZm9yY2VtZW50LlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjEtMDYtMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiB3aGVuIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gKiAtIEV4cGxpY2l0IHZlcnNpb24gcGlubmluZyBmb3Igc3RhYmlsaXR5IHJlcXVpcmVtZW50c1xuICogLSBTY2hlbWEtZHJpdmVuIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uXG4gKiAtIFN1cHBvcnQgZm9yIGN1c3RvbSBwb2xpY3kgcnVsZXMgYW5kIHBhcmFtZXRlcnNcbiAqIC0gSlNJSSBjb21wbGlhbmNlIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX1BPTElDWV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICBQT0xJQ1lfREVGSU5JVElPTl9UWVBFLFxufSBmcm9tIFwiLi9wb2xpY3ktZGVmaW5pdGlvbi1zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uXG4gKlxuICogRXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMgd2l0aCBQb2xpY3kgRGVmaW5pdGlvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvblByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIHBvbGljeVxuICAgKlxuICAgKiBAZXhhbXBsZSBcIlJlcXVpcmUgdGFnIGFuZCBpdHMgdmFsdWUgb24gcmVzb3VyY2VzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gZGVzY3JpcHRpb25cbiAgICogUHJvdmlkZXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgcG9saWN5IGVuZm9yY2VzXG4gICAqXG4gICAqIEBleGFtcGxlIFwiRW5mb3JjZXMgYSByZXF1aXJlZCB0YWcgYW5kIGl0cyB2YWx1ZSBvbiByZXNvdXJjZXNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIEBkZWZhdWx0IFwiQ3VzdG9tXCJcbiAgICogQGV4YW1wbGUgXCJDdXN0b21cIiwgXCJCdWlsdEluXCIsIFwiU3RhdGljXCIsIFwiTm90U3BlY2lmaWVkXCJcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgbW9kZVxuICAgKiBEZXRlcm1pbmVzIHdoaWNoIHJlc291cmNlIHR5cGVzIHdpbGwgYmUgZXZhbHVhdGVkXG4gICAqIEBkZWZhdWx0IFwiQWxsXCJcbiAgICogQGV4YW1wbGUgXCJBbGxcIiwgXCJJbmRleGVkXCIsIFwiTWljcm9zb2Z0LktleVZhdWx0LkRhdGFcIlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBydWxlIGFzIGEgSlNPTiBvYmplY3RcbiAgICogRGVmaW5lcyB0aGUgaWYvdGhlbiBsb2dpYyB0aGF0IGRldGVybWluZXMgcG9saWN5IGVuZm9yY2VtZW50XG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBwb2xpY3kgZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGlmOiB7XG4gICAqICAgICBmaWVsZDogXCJ0YWdzWydFbnZpcm9ubWVudCddXCIsXG4gICAqICAgICBleGlzdHM6IFwiZmFsc2VcIlxuICAgKiAgIH0sXG4gICAqICAgdGhlbjoge1xuICAgKiAgICAgZWZmZWN0OiBcImRlbnlcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UnVsZTogYW55O1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICogQWxsb3dzIHBvbGljeSBhc3NpZ25tZW50cyB0byBwcm92aWRlIHZhbHVlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBwb2xpY3kgcnVsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgdGFnTmFtZToge1xuICAgKiAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAgICogICAgIG1ldGFkYXRhOiB7XG4gICAqICAgICAgIGRpc3BsYXlOYW1lOiBcIlRhZyBOYW1lXCIsXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIHRhZyB0byBlbmZvcmNlXCJcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICogVXNlZCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGxpa2UgY2F0ZWdvcnksIHZlcnNpb24sIGV0Yy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGNhdGVnb3J5OiBcIlRhZ3NcIixcbiAgICogICB2ZXJzaW9uOiBcIjEuMC4wXCJcbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1wibWV0YWRhdGFcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IERlZmluaXRpb25cbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIEpTSUkgY29tcGxpYW5jZSB0byBzdXBwb3J0IG11bHRpLWxhbmd1YWdlIGNvZGUgZ2VuZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeURlZmluaXRpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBydWxlIG9iamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UnVsZTogYW55O1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogYW55O1xufVxuXG4vKipcbiAqIFRoZSByZXNvdXJjZSBib2R5IGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IERlZmluaXRpb24gQVBJIGNhbGxzXG4gKiBUaGlzIG1hdGNoZXMgdGhlIEF6dXJlIFJFU1QgQVBJIHNjaGVtYSBmb3IgcG9saWN5IGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvbkJvZHkge1xuICAvKipcbiAgICogVGhlIHByb3BlcnRpZXMgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBQb2xpY3lEZWZpbml0aW9uUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbmdsZSwgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmVcbiAqIFBvbGljeSBEZWZpbml0aW9ucy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogTm90ZTogUG9saWN5IGRlZmluaXRpb25zIGFyZSBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZS5cbiAqIFVubGlrZSBtb3N0IEF6dXJlIHJlc291cmNlcywgdGhleSBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uIHByb3BlcnR5IGFzIHRoZXkgYXJlXG4gKiBub3QgcmVnaW9uLXNwZWNpZmljLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyBjdXN0b20gcG9saWN5IGRlZmluaXRpb246XG4gKiBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJwb2xpY3lcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLXBvbGljeVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgZGVzY3JpcHRpb246IFwiRW5mb3JjZXMgYSByZXF1aXJlZCB0YWcgb24gcmVzb3VyY2VzXCIsXG4gKiAgIHBvbGljeVJ1bGU6IHtcbiAqICAgICBpZjoge1xuICogICAgICAgZmllbGQ6IFwidGFnc1snRW52aXJvbm1lbnQnXVwiLFxuICogICAgICAgZXhpc3RzOiBcImZhbHNlXCJcbiAqICAgICB9LFxuICogICAgIHRoZW46IHtcbiAqICAgICAgIGVmZmVjdDogXCJkZW55XCJcbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQb2xpY3kgZGVmaW5pdGlvbiB3aXRoIHBhcmFtZXRlcnM6XG4gKiBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJwb2xpY3lcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLXBvbGljeVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgcG9saWN5UnVsZToge1xuICogICAgIGlmOiB7XG4gKiAgICAgICBmaWVsZDogXCJbY29uY2F0KCd0YWdzWycsIHBhcmFtZXRlcnMoJ3RhZ05hbWUnKSwgJ10nKV1cIixcbiAqICAgICAgIGV4aXN0czogXCJmYWxzZVwiXG4gKiAgICAgfSxcbiAqICAgICB0aGVuOiB7XG4gKiAgICAgICBlZmZlY3Q6IFwiZGVueVwiXG4gKiAgICAgfVxuICogICB9LFxuICogICBwYXJhbWV0ZXJzOiB7XG4gKiAgICAgdGFnTmFtZToge1xuICogICAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAqICAgICAgIG1ldGFkYXRhOiB7XG4gKiAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlRhZyBOYW1lXCJcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lEZWZpbml0aW9uIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBQT0xJQ1lfREVGSU5JVElPTl9UWVBFLFxuICAgICAgQUxMX1BPTElDWV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUG9saWN5IERlZmluaXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLy8gUHVibGljIHByb3BlcnRpZXNcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBQb2xpY3kgRGVmaW5pdGlvbiB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUG9saWN5IERlZmluaXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQb2xpY3lEZWZpbml0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgcHJvcGVydGllcyBmcm9tIHRoZSBBWkFQSSByZXNvdXJjZSBvdXRwdXRzIHVzaW5nIFRlcnJhZm9ybSBpbnRlcnBvbGF0aW9uXG5cbiAgICAvLyBDcmVhdGUgVGVycmFmb3JtIG91dHB1dHMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZyBmcm9tIG90aGVyIHJlc291cmNlc1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFBvbGljeSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgUG9saWN5IERlZmluaXRpb25cIixcbiAgICB9KTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjEtMDYtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBQb2xpY3kgRGVmaW5pdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUE9MSUNZX0RFRklOSVRJT05fVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKlxuICAgKiBOb3RlOiBQb2xpY3kgZGVmaW5pdGlvbnMgZG8gbm90IGhhdmUgYSBsb2NhdGlvbiBwcm9wZXJ0eSBhcyB0aGV5IGFyZVxuICAgKiBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZWQgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUG9saWN5RGVmaW5pdGlvblByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiB0eXBlZFByb3BzLmRpc3BsYXlOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZWRQcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgcG9saWN5VHlwZTogdHlwZWRQcm9wcy5wb2xpY3lUeXBlIHx8IFwiQ3VzdG9tXCIsXG4gICAgICAgIG1vZGU6IHR5cGVkUHJvcHMubW9kZSB8fCBcIkFsbFwiLFxuICAgICAgICAvLyBEZWVwIGNsb25lIHBvbGljeVJ1bGUgdG8gcHJlc2VydmUgYWxsIG5lc3RlZCBvYmplY3RzIGFuZCBBenVyZSBQb2xpY3kgZXhwcmVzc2lvbnNcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGNvbXBsZXggRGVwbG95SWZOb3RFeGlzdHMgcG9saWNpZXMgd2l0aCBBUk0gdGVtcGxhdGVzIGFyZSBmdWxseSBzZXJpYWxpemVkXG4gICAgICAgIC8vIEF6dXJlIFBvbGljeSBleHByZXNzaW9ucyBsaWtlIFtmaWVsZCgpXSwgW3BhcmFtZXRlcnMoKV0sIFt2YXJpYWJsZXMoKV0gYXJlIHByZXNlcnZlZFxuICAgICAgICBwb2xpY3lSdWxlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR5cGVkUHJvcHMucG9saWN5UnVsZSkpLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0eXBlZFByb3BzLnBhcmFtZXRlcnMsXG4gICAgICAgIG1ldGFkYXRhOiB0eXBlZFByb3BzLm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGljeSBEZWZpbml0aW9ucyBkbyBub3Qgc3VwcG9ydCB0YWdzIGF0IHRoZSByZXNvdXJjZSBsZXZlbFxuICAgKiBUYWdzIGFyZSBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnNcbiAgICogQHJldHVybnMgZmFsc2UgLSBQb2xpY3kgRGVmaW5pdGlvbnMgY2Fubm90IGhhdmUgdGFnc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6ZXMgdGhlIEFaQVBJIFJlc291cmNlQ29uZmlnIGZvciBwb2xpY3ktc3BlY2lmaWMgcmVxdWlyZW1lbnRzXG4gICAqXG4gICAqIFBvbGljeSBkZWZpbml0aW9ucyByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZTpcbiAgICogMS4gVGhleSBjb250YWluIGNvbXBsZXggbmVzdGVkIG9iamVjdHMgKEFSTSB0ZW1wbGF0ZXMgaW4gRGVwbG95SWZOb3RFeGlzdHMgcG9saWNpZXMpXG4gICAqIDIuIFRoZXkgdXNlIEF6dXJlIFBvbGljeSBleHByZXNzaW9ucyBsaWtlIFtmaWVsZCgpXSwgW3BhcmFtZXRlcnMoKV0sIFt2YXJpYWJsZXMoKV1cbiAgICogICAgd2hpY2ggYXJlIE5PVCBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvbnMgYnV0IEF6dXJlLW5hdGl2ZSBleHByZXNzaW9uc1xuICAgKiAzLiBTY2hlbWEgdmFsaWRhdGlvbiBtYXkgc3RyaXAgdW5rbm93biBwcm9wZXJ0aWVzIGZyb20gZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmVzXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgYmFzZSBSZXNvdXJjZUNvbmZpZ1xuICAgKiBAcmV0dXJucyBNb2RpZmllZCBSZXNvdXJjZUNvbmZpZyB3aXRoIHBvbGljeS1zcGVjaWZpYyBzZXR0aW5nc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBjdXN0b21pemVSZXNvdXJjZUNvbmZpZyhjb25maWc6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIC8vIERpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gdG8gcHJlc2VydmUgYWxsIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAgICAvLyBBenVyZSBQb2xpY3kgZGVmaW5pdGlvbnMgY2FuIGNvbnRhaW4gZGVlcGx5IG5lc3RlZCBBUk0gdGVtcGxhdGVzIGFuZCBleHByZXNzaW9uc1xuICAgICAgLy8gdGhhdCB0aGUgQVpBUEkgcHJvdmlkZXIncyBzY2hlbWEgdmFsaWRhdGlvbiBtYXkgbm90IHJlY29nbml6ZVxuICAgICAgc2NoZW1hVmFsaWRhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgLy8gQWxsb3cgcHJvcGVydGllcyBub3QgaW4gdGhlIHNjaGVtYSB0byBwcmV2ZW50IHN0cmlwcGluZyBvZiBuZXN0ZWQgY29udGVudFxuICAgICAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIERlcGxveUlmTm90RXhpc3RzIHBvbGljaWVzIHdpdGggQVJNIHRlbXBsYXRlIGRlcGxveW1lbnRzXG4gICAgICBpZ25vcmVNaXNzaW5nUHJvcGVydHk6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBQT0xJQ1kgREVGSU5JVElPTiBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCByZXNvdXJjZSBpZGVudGlmaWVyIGZvciB1c2UgaW4gb3RoZXIgQXp1cmUgcmVzb3VyY2VzXG4gICAqIEFsaWFzIGZvciB0aGUgaWQgcHJvcGVydHlcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9saWN5IHR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9saWN5VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBvbGljeVR5cGUgfHwgXCJDdXN0b21cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvbGljeSBtb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvbGljeU1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlIHx8IFwiQWxsXCI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlX2NoYW5nZXM6IHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Integration test for Azure Policy Definition
3
+ *
4
+ * This test demonstrates basic usage of the PolicyDefinition construct
5
+ * and validates deployment, idempotency, and cleanup.
6
+ *
7
+ * Run with: npm run integration:nostream
8
+ */
9
+ import "cdktf/lib/testing/adapters/jest";
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * Integration test for Azure Policy Definition
4
+ *
5
+ * This test demonstrates basic usage of the PolicyDefinition 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 provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
14
+ const testing_1 = require("../../testing");
15
+ const metadata_1 = require("../../testing/lib/metadata");
16
+ const policy_definition_1 = require("../lib/policy-definition");
17
+ // Generate unique test run metadata for this test suite
18
+ const testMetadata = new metadata_1.TestRunMetadata("policy-definition-integration", {
19
+ maxAgeHours: 4,
20
+ });
21
+ /**
22
+ * Example stack demonstrating Policy Definition usage
23
+ */
24
+ class PolicyDefinitionExampleStack extends testing_1.BaseTestStack {
25
+ constructor(scope, id) {
26
+ super(scope, id, {
27
+ testRunOptions: {
28
+ maxAgeHours: testMetadata.maxAgeHours,
29
+ autoCleanup: testMetadata.autoCleanup,
30
+ cleanupPolicy: testMetadata.cleanupPolicy,
31
+ },
32
+ });
33
+ // Configure AZAPI provider
34
+ new provider_1.AzapiProvider(this, "azapi", {});
35
+ // Generate unique names for policy definitions
36
+ const basicPolicyName = this.generateResourceName("Microsoft.Authorization/policyDefinitions", "basic");
37
+ const parameterizedPolicyName = this.generateResourceName("Microsoft.Authorization/policyDefinitions", "param");
38
+ // Example 1: Basic policy definition that denies resources without required tags
39
+ new policy_definition_1.PolicyDefinition(this, "basic-policy", {
40
+ name: basicPolicyName,
41
+ displayName: "Require Environment Tag",
42
+ description: "This policy ensures that resources have an Environment tag",
43
+ policyType: "Custom",
44
+ mode: "Indexed",
45
+ policyRule: {
46
+ if: {
47
+ field: "tags['Environment']",
48
+ exists: "false",
49
+ },
50
+ then: {
51
+ effect: "deny",
52
+ },
53
+ },
54
+ metadata: {
55
+ category: "Tags",
56
+ version: "1.0.0",
57
+ },
58
+ tags: {
59
+ ...this.systemTags(),
60
+ example: "basic",
61
+ },
62
+ });
63
+ // Example 2: Policy definition with parameters for flexible enforcement
64
+ new policy_definition_1.PolicyDefinition(this, "parameterized-policy", {
65
+ name: parameterizedPolicyName,
66
+ displayName: "Require Specific Tag with Allowed Values",
67
+ description: "This policy ensures that resources have a specific tag with a value from an allowed list",
68
+ policyType: "Custom",
69
+ mode: "All",
70
+ policyRule: {
71
+ if: {
72
+ allOf: [
73
+ {
74
+ field: "[concat('tags[', parameters('tagName'), ']')]",
75
+ exists: "true",
76
+ },
77
+ {
78
+ field: "[concat('tags[', parameters('tagName'), ']')]",
79
+ notIn: "[parameters('allowedValues')]",
80
+ },
81
+ ],
82
+ },
83
+ then: {
84
+ effect: "[parameters('effect')]",
85
+ },
86
+ },
87
+ parameters: {
88
+ tagName: {
89
+ type: "String",
90
+ metadata: {
91
+ displayName: "Tag Name",
92
+ description: "Name of the tag to check",
93
+ },
94
+ defaultValue: "CostCenter",
95
+ },
96
+ allowedValues: {
97
+ type: "Array",
98
+ metadata: {
99
+ displayName: "Allowed Tag Values",
100
+ description: "List of allowed values for the tag",
101
+ },
102
+ defaultValue: ["Engineering", "Marketing", "Operations"],
103
+ },
104
+ effect: {
105
+ type: "String",
106
+ metadata: {
107
+ displayName: "Effect",
108
+ description: "The effect of the policy (audit or deny)",
109
+ },
110
+ allowedValues: ["audit", "deny"],
111
+ defaultValue: "audit",
112
+ },
113
+ },
114
+ metadata: {
115
+ category: "Tags",
116
+ version: "1.0.0",
117
+ },
118
+ tags: {
119
+ ...this.systemTags(),
120
+ example: "parameterized",
121
+ },
122
+ });
123
+ }
124
+ }
125
+ describe("Policy Definition Integration Test", () => {
126
+ it("should deploy, validate idempotency, and cleanup policy definition resources", () => {
127
+ const app = cdktf_1.Testing.app();
128
+ const stack = new PolicyDefinitionExampleStack(app, "test-policy-definition");
129
+ const synthesized = cdktf_1.Testing.fullSynth(stack);
130
+ // This will:
131
+ // 1. Run terraform apply to deploy resources
132
+ // 2. Run terraform plan to check idempotency (no changes expected)
133
+ // 3. Run terraform destroy to cleanup resources
134
+ (0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
135
+ }, 600000); // 10 minute timeout for deployment and cleanup
136
+ });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uaW50ZWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5ZGVmaW5pdGlvbi90ZXN0L3BvbGljeS1kZWZpbml0aW9uLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOztBQUVILGlDQUFnQztBQUVoQywyQ0FBeUM7QUFDekMsa0ZBQW9GO0FBQ3BGLDJDQUE2RTtBQUM3RSx5REFBNkQ7QUFDN0QsZ0VBQTREO0FBRTVELHdEQUF3RDtBQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLDBCQUFlLENBQUMsK0JBQStCLEVBQUU7SUFDeEUsV0FBVyxFQUFFLENBQUM7Q0FDZixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sNEJBQTZCLFNBQVEsdUJBQWE7SUFDdEQsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixjQUFjLEVBQUU7Z0JBQ2QsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNyQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7Z0JBQ3JDLGFBQWEsRUFBRSxZQUFZLENBQUMsYUFBYTthQUMxQztTQUNGLENBQUMsQ0FBQztRQUVILDJCQUEyQjtRQUMzQixJQUFJLHdCQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVyQywrQ0FBK0M7UUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUMvQywyQ0FBMkMsRUFDM0MsT0FBTyxDQUNSLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkQsMkNBQTJDLEVBQzNDLE9BQU8sQ0FDUixDQUFDO1FBRUYsaUZBQWlGO1FBQ2pGLElBQUksb0NBQWdCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN6QyxJQUFJLEVBQUUsZUFBZTtZQUNyQixXQUFXLEVBQUUseUJBQXlCO1lBQ3RDLFdBQVcsRUFBRSw0REFBNEQ7WUFDekUsVUFBVSxFQUFFLFFBQVE7WUFDcEIsSUFBSSxFQUFFLFNBQVM7WUFDZixVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFO29CQUNGLEtBQUssRUFBRSxxQkFBcUI7b0JBQzVCLE1BQU0sRUFBRSxPQUFPO2lCQUNoQjtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFLE1BQU07aUJBQ2Y7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLE9BQU87YUFDakI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixPQUFPLEVBQUUsT0FBTzthQUNqQjtTQUNGLENBQUMsQ0FBQztRQUVILHdFQUF3RTtRQUN4RSxJQUFJLG9DQUFnQixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUNqRCxJQUFJLEVBQUUsdUJBQXVCO1lBQzdCLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsV0FBVyxFQUNULDBGQUEwRjtZQUM1RixVQUFVLEVBQUUsUUFBUTtZQUNwQixJQUFJLEVBQUUsS0FBSztZQUNYLFVBQVUsRUFBRTtnQkFDVixFQUFFLEVBQUU7b0JBQ0YsS0FBSyxFQUFFO3dCQUNMOzRCQUNFLEtBQUssRUFBRSwrQ0FBK0M7NEJBQ3RELE1BQU0sRUFBRSxNQUFNO3lCQUNmO3dCQUNEOzRCQUNFLEtBQUssRUFBRSwrQ0FBK0M7NEJBQ3RELEtBQUssRUFBRSwrQkFBK0I7eUJBQ3ZDO3FCQUNGO2lCQUNGO2dCQUNELElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUUsd0JBQXdCO2lCQUNqQzthQUNGO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxRQUFRLEVBQUU7d0JBQ1IsV0FBVyxFQUFFLFVBQVU7d0JBQ3ZCLFdBQVcsRUFBRSwwQkFBMEI7cUJBQ3hDO29CQUNELFlBQVksRUFBRSxZQUFZO2lCQUMzQjtnQkFDRCxhQUFhLEVBQUU7b0JBQ2IsSUFBSSxFQUFFLE9BQU87b0JBQ2IsUUFBUSxFQUFFO3dCQUNSLFdBQVcsRUFBRSxvQkFBb0I7d0JBQ2pDLFdBQVcsRUFBRSxvQ0FBb0M7cUJBQ2xEO29CQUNELFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDO2lCQUN6RDtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFO3dCQUNSLFdBQVcsRUFBRSxRQUFRO3dCQUNyQixXQUFXLEVBQUUsMENBQTBDO3FCQUN4RDtvQkFDRCxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO29CQUNoQyxZQUFZLEVBQUUsT0FBTztpQkFDdEI7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLE9BQU87YUFDakI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixPQUFPLEVBQUUsZUFBZTthQUN6QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7SUFDbEQsRUFBRSxDQUFDLDhFQUE4RSxFQUFFLEdBQUcsRUFBRTtRQUN0RixNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSw0QkFBNEIsQ0FDNUMsR0FBRyxFQUNILHdCQUF3QixDQUN6QixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxhQUFhO1FBQ2IsNkNBQTZDO1FBQzdDLG1FQUFtRTtRQUNuRSxnREFBZ0Q7UUFDaEQsSUFBQSx1Q0FBNkIsRUFBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7QUFDN0QsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIHRlc3QgZm9yIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uXG4gKlxuICogVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgUG9saWN5RGVmaW5pdGlvbiBjb25zdHJ1Y3RcbiAqIGFuZCB2YWxpZGF0ZXMgZGVwbG95bWVudCwgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwLlxuICpcbiAqIFJ1biB3aXRoOiBucG0gcnVuIGludGVncmF0aW9uOm5vc3RyZWFtXG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCBcImNka3RmL2xpYi90ZXN0aW5nL2FkYXB0ZXJzL2plc3RcIjtcbmltcG9ydCB7IEF6YXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBCYXNlVGVzdFN0YWNrLCBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nXCI7XG5pbXBvcnQgeyBUZXN0UnVuTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vdGVzdGluZy9saWIvbWV0YWRhdGFcIjtcbmltcG9ydCB7IFBvbGljeURlZmluaXRpb24gfSBmcm9tIFwiLi4vbGliL3BvbGljeS1kZWZpbml0aW9uXCI7XG5cbi8vIEdlbmVyYXRlIHVuaXF1ZSB0ZXN0IHJ1biBtZXRhZGF0YSBmb3IgdGhpcyB0ZXN0IHN1aXRlXG5jb25zdCB0ZXN0TWV0YWRhdGEgPSBuZXcgVGVzdFJ1bk1ldGFkYXRhKFwicG9saWN5LWRlZmluaXRpb24taW50ZWdyYXRpb25cIiwge1xuICBtYXhBZ2VIb3VyczogNCxcbn0pO1xuXG4vKipcbiAqIEV4YW1wbGUgc3RhY2sgZGVtb25zdHJhdGluZyBQb2xpY3kgRGVmaW5pdGlvbiB1c2FnZVxuICovXG5jbGFzcyBQb2xpY3lEZWZpbml0aW9uRXhhbXBsZVN0YWNrIGV4dGVuZHMgQmFzZVRlc3RTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlc3RSdW5PcHRpb25zOiB7XG4gICAgICAgIG1heEFnZUhvdXJzOiB0ZXN0TWV0YWRhdGEubWF4QWdlSG91cnMsXG4gICAgICAgIGF1dG9DbGVhbnVwOiB0ZXN0TWV0YWRhdGEuYXV0b0NsZWFudXAsXG4gICAgICAgIGNsZWFudXBQb2xpY3k6IHRlc3RNZXRhZGF0YS5jbGVhbnVwUG9saWN5LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENvbmZpZ3VyZSBBWkFQSSBwcm92aWRlclxuICAgIG5ldyBBemFwaVByb3ZpZGVyKHRoaXMsIFwiYXphcGlcIiwge30pO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pcXVlIG5hbWVzIGZvciBwb2xpY3kgZGVmaW5pdGlvbnNcbiAgICBjb25zdCBiYXNpY1BvbGljeU5hbWUgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgXCJNaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9uc1wiLFxuICAgICAgXCJiYXNpY1wiLFxuICAgICk7XG4gICAgY29uc3QgcGFyYW1ldGVyaXplZFBvbGljeU5hbWUgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgXCJNaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9uc1wiLFxuICAgICAgXCJwYXJhbVwiLFxuICAgICk7XG5cbiAgICAvLyBFeGFtcGxlIDE6IEJhc2ljIHBvbGljeSBkZWZpbml0aW9uIHRoYXQgZGVuaWVzIHJlc291cmNlcyB3aXRob3V0IHJlcXVpcmVkIHRhZ3NcbiAgICBuZXcgUG9saWN5RGVmaW5pdGlvbih0aGlzLCBcImJhc2ljLXBvbGljeVwiLCB7XG4gICAgICBuYW1lOiBiYXNpY1BvbGljeU5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIEVudmlyb25tZW50IFRhZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhpcyBwb2xpY3kgZW5zdXJlcyB0aGF0IHJlc291cmNlcyBoYXZlIGFuIEVudmlyb25tZW50IHRhZ1wiLFxuICAgICAgcG9saWN5VHlwZTogXCJDdXN0b21cIixcbiAgICAgIG1vZGU6IFwiSW5kZXhlZFwiLFxuICAgICAgcG9saWN5UnVsZToge1xuICAgICAgICBpZjoge1xuICAgICAgICAgIGZpZWxkOiBcInRhZ3NbJ0Vudmlyb25tZW50J11cIixcbiAgICAgICAgICBleGlzdHM6IFwiZmFsc2VcIixcbiAgICAgICAgfSxcbiAgICAgICAgdGhlbjoge1xuICAgICAgICAgIGVmZmVjdDogXCJkZW55XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgY2F0ZWdvcnk6IFwiVGFnc1wiLFxuICAgICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICB9LFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgICAgZXhhbXBsZTogXCJiYXNpY1wiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgMjogUG9saWN5IGRlZmluaXRpb24gd2l0aCBwYXJhbWV0ZXJzIGZvciBmbGV4aWJsZSBlbmZvcmNlbWVudFxuICAgIG5ldyBQb2xpY3lEZWZpbml0aW9uKHRoaXMsIFwicGFyYW1ldGVyaXplZC1wb2xpY3lcIiwge1xuICAgICAgbmFtZTogcGFyYW1ldGVyaXplZFBvbGljeU5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIFNwZWNpZmljIFRhZyB3aXRoIEFsbG93ZWQgVmFsdWVzXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJUaGlzIHBvbGljeSBlbnN1cmVzIHRoYXQgcmVzb3VyY2VzIGhhdmUgYSBzcGVjaWZpYyB0YWcgd2l0aCBhIHZhbHVlIGZyb20gYW4gYWxsb3dlZCBsaXN0XCIsXG4gICAgICBwb2xpY3lUeXBlOiBcIkN1c3RvbVwiLFxuICAgICAgbW9kZTogXCJBbGxcIixcbiAgICAgIHBvbGljeVJ1bGU6IHtcbiAgICAgICAgaWY6IHtcbiAgICAgICAgICBhbGxPZjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogXCJbY29uY2F0KCd0YWdzWycsIHBhcmFtZXRlcnMoJ3RhZ05hbWUnKSwgJ10nKV1cIixcbiAgICAgICAgICAgICAgZXhpc3RzOiBcInRydWVcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiBcIltjb25jYXQoJ3RhZ3NbJywgcGFyYW1ldGVycygndGFnTmFtZScpLCAnXScpXVwiLFxuICAgICAgICAgICAgICBub3RJbjogXCJbcGFyYW1ldGVycygnYWxsb3dlZFZhbHVlcycpXVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB0aGVuOiB7XG4gICAgICAgICAgZWZmZWN0OiBcIltwYXJhbWV0ZXJzKCdlZmZlY3QnKV1cIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHRhZ05hbWU6IHtcbiAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJUYWcgTmFtZVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTmFtZSBvZiB0aGUgdGFnIHRvIGNoZWNrXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiQ29zdENlbnRlclwiLFxuICAgICAgICB9LFxuICAgICAgICBhbGxvd2VkVmFsdWVzOiB7XG4gICAgICAgICAgdHlwZTogXCJBcnJheVwiLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJBbGxvd2VkIFRhZyBWYWx1ZXNcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkxpc3Qgb2YgYWxsb3dlZCB2YWx1ZXMgZm9yIHRoZSB0YWdcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogW1wiRW5naW5lZXJpbmdcIiwgXCJNYXJrZXRpbmdcIiwgXCJPcGVyYXRpb25zXCJdLFxuICAgICAgICB9LFxuICAgICAgICBlZmZlY3Q6IHtcbiAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJFZmZlY3RcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBlZmZlY3Qgb2YgdGhlIHBvbGljeSAoYXVkaXQgb3IgZGVueSlcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImF1ZGl0XCIsIFwiZGVueVwiXSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXVkaXRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBjYXRlZ29yeTogXCJUYWdzXCIsXG4gICAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIH0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcInBhcmFtZXRlcml6ZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJQb2xpY3kgRGVmaW5pdGlvbiBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95LCB2YWxpZGF0ZSBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAgcG9saWN5IGRlZmluaXRpb24gcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFBvbGljeURlZmluaXRpb25FeGFtcGxlU3RhY2soXG4gICAgICBhcHAsXG4gICAgICBcInRlc3QtcG9saWN5LWRlZmluaXRpb25cIixcbiAgICApO1xuICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5mdWxsU3ludGgoc3RhY2spO1xuXG4gICAgLy8gVGhpcyB3aWxsOlxuICAgIC8vIDEuIFJ1biB0ZXJyYWZvcm0gYXBwbHkgdG8gZGVwbG95IHJlc291cmNlc1xuICAgIC8vIDIuIFJ1biB0ZXJyYWZvcm0gcGxhbiB0byBjaGVjayBpZGVtcG90ZW5jeSAobm8gY2hhbmdlcyBleHBlY3RlZClcbiAgICAvLyAzLiBSdW4gdGVycmFmb3JtIGRlc3Ryb3kgdG8gY2xlYW51cCByZXNvdXJjZXNcbiAgICBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveShzeW50aGVzaXplZCwgeyB2ZXJpZnlDbGVhbnVwOiB0cnVlIH0pO1xuICB9LCA2MDAwMDApOyAvLyAxMCBtaW51dGUgdGltZW91dCBmb3IgZGVwbG95bWVudCBhbmQgY2xlYW51cFxufSk7XG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Comprehensive tests for the unified PolicyDefinition implementation
3
+ *
4
+ * This test suite validates the unified PolicyDefinition class that uses
5
+ * the VersionedAzapiResource framework. Tests cover automatic version resolution,
6
+ * explicit version pinning, schema validation, property transformation, and
7
+ * policy-specific functionality.
8
+ */
9
+ export {};