@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,192 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RoleDefinition = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Unified Azure Role Definition implementation using VersionedAzapiResource framework
8
+ *
9
+ * This class provides a version-aware implementation for managing Azure Role Definitions
10
+ * using the AZAPI provider. Role definitions define custom RBAC roles with specific
11
+ * permissions that can be assigned to users, groups, or service principals.
12
+ *
13
+ * Supported API Versions:
14
+ * - 2022-04-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 role permissions (actions, notActions, dataActions, notDataActions)
21
+ * - Assignable scopes configuration (subscription, resource group, management group)
22
+ * - JSII compliance for multi-language support
23
+ */
24
+ const crypto_1 = require("crypto");
25
+ const cdktf = require("cdktf");
26
+ const role_definition_schemas_1 = require("./role-definition-schemas");
27
+ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
28
+ /**
29
+ * Unified Azure Role Definition implementation
30
+ *
31
+ * This class provides a single, version-aware implementation for managing Azure
32
+ * Role Definitions. It automatically handles version resolution, schema validation,
33
+ * and property transformation.
34
+ *
35
+ * Note: Role definitions are tenant-specific resources deployed at subscription or
36
+ * management group scope. Unlike most Azure resources, they do not have a location
37
+ * property as they are not region-specific.
38
+ *
39
+ * @example
40
+ * Basic custom role definition for read-only access to compute resources
41
+ *
42
+ * Advanced features like data plane actions and complex permissions are supported
43
+ *
44
+ * @stability stable
45
+ */
46
+ class RoleDefinition extends azapi_resource_1.AzapiResource {
47
+ // Public properties
48
+ /**
49
+ * Creates a new Azure Role Definition using the VersionedAzapiResource framework
50
+ *
51
+ * The constructor automatically handles version resolution, schema registration,
52
+ * validation, and resource creation.
53
+ *
54
+ * @param scope - The scope in which to define this construct
55
+ * @param id - The unique identifier for this instance
56
+ * @param props - Configuration properties for the Role Definition
57
+ */
58
+ constructor(scope, id, props) {
59
+ super(scope, id, props);
60
+ this.props = props;
61
+ // Extract properties from the AZAPI resource outputs using Terraform interpolation
62
+ // Create Terraform outputs for easy access and referencing from other resources
63
+ this.idOutput = new cdktf.TerraformOutput(this, "id", {
64
+ value: this.id,
65
+ description: "The ID of the Role Definition",
66
+ });
67
+ this.nameOutput = new cdktf.TerraformOutput(this, "name", {
68
+ value: `\${${this.terraformResource.fqn}.name}`,
69
+ description: "The name of the Role Definition",
70
+ });
71
+ // Override logical IDs to match original naming convention
72
+ this.idOutput.overrideLogicalId("id");
73
+ this.nameOutput.overrideLogicalId("name");
74
+ // Apply ignore changes if specified
75
+ this._applyIgnoreChanges();
76
+ }
77
+ // =============================================================================
78
+ // REQUIRED ABSTRACT METHODS FROM AzapiResource
79
+ // =============================================================================
80
+ /**
81
+ * Gets the default API version to use when no explicit version is specified
82
+ * Returns the most recent stable version as the default
83
+ */
84
+ defaultVersion() {
85
+ return "2022-04-01";
86
+ }
87
+ /**
88
+ * Gets the Azure resource type for Role Definitions
89
+ */
90
+ resourceType() {
91
+ return role_definition_schemas_1.ROLE_DEFINITION_TYPE;
92
+ }
93
+ /**
94
+ * Gets the API schema for the resolved version
95
+ * Uses the framework's schema resolution to get the appropriate schema
96
+ */
97
+ apiSchema() {
98
+ return this.resolveSchema();
99
+ }
100
+ /**
101
+ * Overrides the name resolution to generate deterministic GUIDs for role definitions
102
+ *
103
+ * Role definitions require GUID format IDs. This implementation generates a deterministic
104
+ * UUID based on the role definition's key properties to ensure:
105
+ * - Same GUID is generated on re-deployments with same parameters
106
+ * - Idempotent deployments (no duplicate role definitions)
107
+ * - Consistent behavior across deployment runs
108
+ */
109
+ resolveName(props) {
110
+ const typedProps = props;
111
+ // Create a deterministic hash from key role definition properties
112
+ const hashInput = [
113
+ typedProps.roleName,
114
+ JSON.stringify(typedProps.assignableScopes),
115
+ ].join("|");
116
+ const hash = (0, crypto_1.createHash)("sha256").update(hashInput).digest("hex");
117
+ // Convert hash to UUID format (8-4-4-4-12)
118
+ return [
119
+ hash.substring(0, 8),
120
+ hash.substring(8, 12),
121
+ hash.substring(12, 16),
122
+ hash.substring(16, 20),
123
+ hash.substring(20, 32),
124
+ ].join("-");
125
+ }
126
+ /**
127
+ * Creates the resource body for the Azure API call
128
+ * Transforms the input properties into the JSON format expected by Azure REST API
129
+ *
130
+ * Note: Role definitions do not have a location property as they are
131
+ * tenant-specific resources deployed at subscription or management group scope.
132
+ */
133
+ createResourceBody(props) {
134
+ const typedProps = props;
135
+ return {
136
+ properties: {
137
+ roleName: typedProps.roleName,
138
+ description: typedProps.description,
139
+ type: typedProps.type || "CustomRole",
140
+ permissions: typedProps.permissions,
141
+ assignableScopes: typedProps.assignableScopes,
142
+ },
143
+ };
144
+ }
145
+ // =============================================================================
146
+ // PUBLIC METHODS FOR ROLE DEFINITION OPERATIONS
147
+ // =============================================================================
148
+ /**
149
+ * Get the full resource identifier for use in other Azure resources
150
+ * Alias for the id property
151
+ */
152
+ get resourceId() {
153
+ return this.id;
154
+ }
155
+ /**
156
+ * Get the role name
157
+ */
158
+ get roleName() {
159
+ return this.props.roleName;
160
+ }
161
+ /**
162
+ * Get the role type
163
+ */
164
+ get roleType() {
165
+ return this.props.type || "CustomRole";
166
+ }
167
+ // =============================================================================
168
+ // PRIVATE HELPER METHODS
169
+ // =============================================================================
170
+ /**
171
+ * Applies ignore changes lifecycle rules if specified in props
172
+ * Always includes body.properties.assignableScopes to handle Azure API format normalization
173
+ */
174
+ _applyIgnoreChanges() {
175
+ // Always ignore assignableScopes format changes due to Azure API normalization
176
+ // Azure may return subscription-qualified format but accepts non-qualified format
177
+ const ignoreChanges = [
178
+ "body.properties.assignableScopes",
179
+ ...(this.props.ignoreChanges || []),
180
+ ];
181
+ this.terraformResource.addOverride("lifecycle", {
182
+ ignore_changes: ignoreChanges,
183
+ });
184
+ }
185
+ }
186
+ exports.RoleDefinition = RoleDefinition;
187
+ _a = JSII_RTTI_SYMBOL_1;
188
+ RoleDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.RoleDefinition", version: "1.3.1" };
189
+ (() => {
190
+ azapi_resource_1.AzapiResource.registerSchemas(role_definition_schemas_1.ROLE_DEFINITION_TYPE, role_definition_schemas_1.ALL_ROLE_DEFINITION_VERSIONS);
191
+ })();
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXJvbGVkZWZpbml0aW9uL2xpYi9yb2xlLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxtQ0FBb0M7QUFDcEMsK0JBQStCO0FBRS9CLHVFQUdtQztBQUNuQyw4RUFHbUQ7QUFrSm5EOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsY0FBZSxTQUFRLDhCQUFhO0lBaUIvQyxvQkFBb0I7SUFFcEI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLCtCQUErQjtTQUM3QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sOENBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ08sV0FBVyxDQUFDLEtBQXlCO1FBQzdDLE1BQU0sVUFBVSxHQUFHLEtBQTRCLENBQUM7UUFFaEQsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLFVBQVUsQ0FBQyxRQUFRO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1NBQzVDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVosTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsMkNBQTJDO1FBQzNDLE9BQU87WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3ZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBNEIsQ0FBQztRQUNoRCxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtnQkFDN0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxZQUFZO2dCQUNyQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7Z0JBQ25DLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7YUFDOUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdGQUFnRjtJQUNoRixnREFBZ0Q7SUFDaEQsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYseUJBQXlCO0lBQ3pCLGdGQUFnRjtJQUVoRjs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsK0VBQStFO1FBQy9FLGtGQUFrRjtRQUNsRixNQUFNLGFBQWEsR0FBRztZQUNwQixrQ0FBa0M7WUFDbEMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztTQUNwQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDOUMsY0FBYyxFQUFFLGFBQWE7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFqTEgsd0NBa0xDOzs7QUFqTEM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0IsOENBQW9CLEVBQ3BCLHNEQUE0QixDQUM3QixDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgQXp1cmUgUm9sZSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uIHVzaW5nIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIG1hbmFnaW5nIEF6dXJlIFJvbGUgRGVmaW5pdGlvbnNcbiAqIHVzaW5nIHRoZSBBWkFQSSBwcm92aWRlci4gUm9sZSBkZWZpbml0aW9ucyBkZWZpbmUgY3VzdG9tIFJCQUMgcm9sZXMgd2l0aCBzcGVjaWZpY1xuICogcGVybWlzc2lvbnMgdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gdXNlcnMsIGdyb3Vwcywgb3Igc2VydmljZSBwcmluY2lwYWxzLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjItMDQtMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiB3aGVuIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gKiAtIEV4cGxpY2l0IHZlcnNpb24gcGlubmluZyBmb3Igc3RhYmlsaXR5IHJlcXVpcmVtZW50c1xuICogLSBTY2hlbWEtZHJpdmVuIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uXG4gKiAtIFN1cHBvcnQgZm9yIGN1c3RvbSByb2xlIHBlcm1pc3Npb25zIChhY3Rpb25zLCBub3RBY3Rpb25zLCBkYXRhQWN0aW9ucywgbm90RGF0YUFjdGlvbnMpXG4gKiAtIEFzc2lnbmFibGUgc2NvcGVzIGNvbmZpZ3VyYXRpb24gKHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG1hbmFnZW1lbnQgZ3JvdXApXG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfUk9MRV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICBST0xFX0RFRklOSVRJT05fVFlQRSxcbn0gZnJvbSBcIi4vcm9sZS1kZWZpbml0aW9uLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUGVybWlzc2lvbiBjb25maWd1cmF0aW9uIGZvciByb2xlIGRlZmluaXRpb25zXG4gKiBEZWZpbmVzIHdoYXQgYWN0aW9ucyB0aGUgcm9sZSBjYW4gcGVyZm9ybSBvbiBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZURlZmluaXRpb25QZXJtaXNzaW9uIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGFsbG93ZWQgY29udHJvbCBwbGFuZSBhY3Rpb25zXG4gICAqIEFjdGlvbnMgYXJlIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIG9uIEF6dXJlIHJlc291cmNlc1xuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJNaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXMvcmVhZFwiLCBcIk1pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lcy9zdGFydC9hY3Rpb25cIl1cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgZXhjbHVkZWQgY29udHJvbCBwbGFuZSBhY3Rpb25zXG4gICAqIEFjdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBkZW5pZWQgZXZlbiBpZiBpbmNsdWRlZCBpbiBhY3Rpb25zIGFycmF5XG4gICAqXG4gICAqIEBleGFtcGxlIFtcIk1pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lcy9kZWxldGVcIl1cbiAgICovXG4gIHJlYWRvbmx5IG5vdEFjdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWxsb3dlZCBkYXRhIHBsYW5lIGFjdGlvbnNcbiAgICogRGF0YSBhY3Rpb25zIGFyZSBvcGVyYXRpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBkYXRhIHdpdGhpbiByZXNvdXJjZXNcbiAgICpcbiAgICogQGV4YW1wbGUgW1wiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL3JlYWRcIl1cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFBY3Rpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGV4Y2x1ZGVkIGRhdGEgcGxhbmUgYWN0aW9uc1xuICAgKiBEYXRhIGFjdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBkZW5pZWRcbiAgICpcbiAgICogQGV4YW1wbGUgW1wiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL2RlbGV0ZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgbm90RGF0YUFjdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgdW5pZmllZCBBenVyZSBSb2xlIERlZmluaXRpb25cbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFJvbGUgRGVmaW5pdGlvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZURlZmluaXRpb25Qcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm9sZSBkZWZpbml0aW9uXG4gICAqIFRoaXMgaXMgdGhlIGRpc3BsYXkgbmFtZSBzaG93biBpbiB0aGUgQXp1cmUgcG9ydGFsXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiVmlydHVhbCBNYWNoaW5lIFJlYWRlclwiXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBkZWZpbml0aW9uIGRlc2NyaXB0aW9uXG4gICAqIFByb3ZpZGVzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIHJvbGUgYWxsb3dzXG4gICAqXG4gICAqIEBleGFtcGxlIFwiQ2FuIHZpZXcgdmlydHVhbCBtYWNoaW5lcyBhbmQgdGhlaXIgcHJvcGVydGllc1wiXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm9sZSBkZWZpbml0aW9uXG4gICAqIEBkZWZhdWx0IFwiQ3VzdG9tUm9sZVwiXG4gICAqIEBleGFtcGxlIFwiQ3VzdG9tUm9sZVwiLCBcIkJ1aWx0SW5Sb2xlXCJcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHBlcm1pc3Npb25zIG9iamVjdHMgdGhhdCBkZWZpbmUgd2hhdCBhY3Rpb25zIHRoZSByb2xlIGNhbiBwZXJmb3JtXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFtcbiAgICogICB7XG4gICAqICAgICBhY3Rpb25zOiBbXCJNaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXMvcmVhZFwiXSxcbiAgICogICAgIG5vdEFjdGlvbnM6IFtdLFxuICAgKiAgICAgZGF0YUFjdGlvbnM6IFtdLFxuICAgKiAgICAgbm90RGF0YUFjdGlvbnM6IFtdXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uczogUm9sZURlZmluaXRpb25QZXJtaXNzaW9uW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHNjb3BlcyB3aGVyZSB0aGlzIHJvbGUgY2FuIGJlIGFzc2lnbmVkXG4gICAqIENhbiBpbmNsdWRlIHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGVzXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFtcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiXVxuICAgKiBAZXhhbXBsZSBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmctbmFtZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduYWJsZVNjb3Blczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1wiZGVzY3JpcHRpb25cIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGludGVyZmFjZSBmb3IgQXp1cmUgUm9sZSBEZWZpbml0aW9uXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBKU0lJIGNvbXBsaWFuY2UgdG8gc3VwcG9ydCBtdWx0aS1sYW5ndWFnZSBjb2RlIGdlbmVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb2xlRGVmaW5pdGlvblByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJvbGUgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvbGUgZGVmaW5pdGlvbiBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvbGUgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgcGVybWlzc2lvbnMgb2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM6IFJvbGVEZWZpbml0aW9uUGVybWlzc2lvbltdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBhc3NpZ25hYmxlIHNjb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduYWJsZVNjb3Blczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBSb2xlIERlZmluaXRpb24gQVBJIGNhbGxzXG4gKiBUaGlzIG1hdGNoZXMgdGhlIEF6dXJlIFJFU1QgQVBJIHNjaGVtYSBmb3Igcm9sZSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVEZWZpbml0aW9uQm9keSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgcm9sZSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBSb2xlRGVmaW5pdGlvblByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogVW5pZmllZCBBenVyZSBSb2xlIERlZmluaXRpb24gaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZVxuICogUm9sZSBEZWZpbml0aW9ucy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogTm90ZTogUm9sZSBkZWZpbml0aW9ucyBhcmUgdGVuYW50LXNwZWNpZmljIHJlc291cmNlcyBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3JcbiAqIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGUuIFVubGlrZSBtb3N0IEF6dXJlIHJlc291cmNlcywgdGhleSBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uXG4gKiBwcm9wZXJ0eSBhcyB0aGV5IGFyZSBub3QgcmVnaW9uLXNwZWNpZmljLlxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyBjdXN0b20gcm9sZSBkZWZpbml0aW9uIGZvciByZWFkLW9ubHkgYWNjZXNzIHRvIGNvbXB1dGUgcmVzb3VyY2VzXG4gKlxuICogQWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBkYXRhIHBsYW5lIGFjdGlvbnMgYW5kIGNvbXBsZXggcGVybWlzc2lvbnMgYXJlIHN1cHBvcnRlZFxuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBSb2xlRGVmaW5pdGlvbiBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgUk9MRV9ERUZJTklUSU9OX1RZUEUsXG4gICAgICBBTExfUk9MRV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUm9sZSBEZWZpbml0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFJvbGVEZWZpbml0aW9uUHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIFJvbGUgRGVmaW5pdGlvbiB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUm9sZSBEZWZpbml0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZURlZmluaXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgLy8gRXh0cmFjdCBwcm9wZXJ0aWVzIGZyb20gdGhlIEFaQVBJIHJlc291cmNlIG91dHB1dHMgdXNpbmcgVGVycmFmb3JtIGludGVycG9sYXRpb25cblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgUm9sZSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgUm9sZSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSBsb2dpY2FsIElEcyB0byBtYXRjaCBvcmlnaW5hbCBuYW1pbmcgY29udmVudGlvblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDIyLTA0LTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgUm9sZSBEZWZpbml0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBST0xFX0RFRklOSVRJT05fVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIG5hbWUgcmVzb2x1dGlvbiB0byBnZW5lcmF0ZSBkZXRlcm1pbmlzdGljIEdVSURzIGZvciByb2xlIGRlZmluaXRpb25zXG4gICAqXG4gICAqIFJvbGUgZGVmaW5pdGlvbnMgcmVxdWlyZSBHVUlEIGZvcm1hdCBJRHMuIFRoaXMgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpY1xuICAgKiBVVUlEIGJhc2VkIG9uIHRoZSByb2xlIGRlZmluaXRpb24ncyBrZXkgcHJvcGVydGllcyB0byBlbnN1cmU6XG4gICAqIC0gU2FtZSBHVUlEIGlzIGdlbmVyYXRlZCBvbiByZS1kZXBsb3ltZW50cyB3aXRoIHNhbWUgcGFyYW1ldGVyc1xuICAgKiAtIElkZW1wb3RlbnQgZGVwbG95bWVudHMgKG5vIGR1cGxpY2F0ZSByb2xlIGRlZmluaXRpb25zKVxuICAgKiAtIENvbnNpc3RlbnQgYmVoYXZpb3IgYWNyb3NzIGRlcGxveW1lbnQgcnVuc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVOYW1lKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBSb2xlRGVmaW5pdGlvblByb3BzO1xuXG4gICAgLy8gQ3JlYXRlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIGZyb20ga2V5IHJvbGUgZGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gICAgY29uc3QgaGFzaElucHV0ID0gW1xuICAgICAgdHlwZWRQcm9wcy5yb2xlTmFtZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHR5cGVkUHJvcHMuYXNzaWduYWJsZVNjb3BlcyksXG4gICAgXS5qb2luKFwifFwiKTtcblxuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShoYXNoSW5wdXQpLmRpZ2VzdChcImhleFwiKTtcblxuICAgIC8vIENvbnZlcnQgaGFzaCB0byBVVUlEIGZvcm1hdCAoOC00LTQtNC0xMilcbiAgICByZXR1cm4gW1xuICAgICAgaGFzaC5zdWJzdHJpbmcoMCwgOCksXG4gICAgICBoYXNoLnN1YnN0cmluZyg4LCAxMiksXG4gICAgICBoYXNoLnN1YnN0cmluZygxMiwgMTYpLFxuICAgICAgaGFzaC5zdWJzdHJpbmcoMTYsIDIwKSxcbiAgICAgIGhhc2guc3Vic3RyaW5nKDIwLCAzMiksXG4gICAgXS5qb2luKFwiLVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKlxuICAgKiBOb3RlOiBSb2xlIGRlZmluaXRpb25zIGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmVcbiAgICogdGVuYW50LXNwZWNpZmljIHJlc291cmNlcyBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZS5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFJvbGVEZWZpbml0aW9uUHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgcm9sZU5hbWU6IHR5cGVkUHJvcHMucm9sZU5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0eXBlZFByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICB0eXBlOiB0eXBlZFByb3BzLnR5cGUgfHwgXCJDdXN0b21Sb2xlXCIsXG4gICAgICAgIHBlcm1pc3Npb25zOiB0eXBlZFByb3BzLnBlcm1pc3Npb25zLFxuICAgICAgICBhc3NpZ25hYmxlU2NvcGVzOiB0eXBlZFByb3BzLmFzc2lnbmFibGVTY29wZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgUk9MRSBERUZJTklUSU9OIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHVzZSBpbiBvdGhlciBBenVyZSByZXNvdXJjZXNcbiAgICogQWxpYXMgZm9yIHRoZSBpZCBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByb2xlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgcm9sZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb2xlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJvbGUgdHlwZVxuICAgKi9cbiAgcHVibGljIGdldCByb2xlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnR5cGUgfHwgXCJDdXN0b21Sb2xlXCI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKiBBbHdheXMgaW5jbHVkZXMgYm9keS5wcm9wZXJ0aWVzLmFzc2lnbmFibGVTY29wZXMgdG8gaGFuZGxlIEF6dXJlIEFQSSBmb3JtYXQgbm9ybWFsaXphdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBpZ25vcmUgYXNzaWduYWJsZVNjb3BlcyBmb3JtYXQgY2hhbmdlcyBkdWUgdG8gQXp1cmUgQVBJIG5vcm1hbGl6YXRpb25cbiAgICAvLyBBenVyZSBtYXkgcmV0dXJuIHN1YnNjcmlwdGlvbi1xdWFsaWZpZWQgZm9ybWF0IGJ1dCBhY2NlcHRzIG5vbi1xdWFsaWZpZWQgZm9ybWF0XG4gICAgY29uc3QgaWdub3JlQ2hhbmdlcyA9IFtcbiAgICAgIFwiYm9keS5wcm9wZXJ0aWVzLmFzc2lnbmFibGVTY29wZXNcIixcbiAgICAgIC4uLih0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgfHwgW10pLFxuICAgIF07XG5cbiAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmFkZE92ZXJyaWRlKFwibGlmZWN5Y2xlXCIsIHtcbiAgICAgIGlnbm9yZV9jaGFuZ2VzOiBpZ25vcmVDaGFuZ2VzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Integration test for Azure Role Definition
3
+ *
4
+ * This test demonstrates basic usage of the RoleDefinition construct
5
+ * and validates deployment, idempotency, and cleanup.
6
+ *
7
+ * The test creates custom RBAC roles with various permission configurations
8
+ * at subscription scope.
9
+ *
10
+ * Run with: npm run integration:nostream
11
+ */
12
+ import "cdktf/lib/testing/adapters/jest";
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * Integration test for Azure Role Definition
4
+ *
5
+ * This test demonstrates basic usage of the RoleDefinition construct
6
+ * and validates deployment, idempotency, and cleanup.
7
+ *
8
+ * The test creates custom RBAC roles with various permission configurations
9
+ * at subscription scope.
10
+ *
11
+ * Run with: npm run integration:nostream
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const cdktf_1 = require("cdktf");
15
+ require("cdktf/lib/testing/adapters/jest");
16
+ const child_process_1 = require("child_process");
17
+ const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
18
+ const testing_1 = require("../../testing");
19
+ const metadata_1 = require("../../testing/lib/metadata");
20
+ const role_definition_1 = require("../lib/role-definition");
21
+ // Generate unique test run metadata for this test suite
22
+ const testMetadata = new metadata_1.TestRunMetadata("role-definition-integration", {
23
+ maxAgeHours: 4,
24
+ });
25
+ /**
26
+ * Example stack demonstrating Role Definition usage
27
+ */
28
+ class RoleDefinitionExampleStack extends testing_1.BaseTestStack {
29
+ constructor(scope, id) {
30
+ super(scope, id, {
31
+ testRunOptions: {
32
+ maxAgeHours: testMetadata.maxAgeHours,
33
+ autoCleanup: testMetadata.autoCleanup,
34
+ cleanupPolicy: testMetadata.cleanupPolicy,
35
+ },
36
+ });
37
+ // Configure AZAPI provider
38
+ new provider_1.AzapiProvider(this, "azapi", {});
39
+ // Get the subscription ID dynamically from Azure CLI or environment variable
40
+ let subscriptionId;
41
+ try {
42
+ subscriptionId =
43
+ process.env.ARM_SUBSCRIPTION_ID ||
44
+ (0, child_process_1.execSync)("az account show --query id -o tsv", {
45
+ encoding: "utf-8",
46
+ }).trim();
47
+ }
48
+ catch (error) {
49
+ throw new Error("Failed to get Azure subscription ID. Please ensure you are logged in with 'az login' or set ARM_SUBSCRIPTION_ID environment variable.");
50
+ }
51
+ const subscriptionScope = `/subscriptions/${subscriptionId}`;
52
+ // Note: Role definition IDs are auto-generated as GUIDs by Azure.
53
+ // The 'name' parameter is not needed - Azure uses guid() to generate
54
+ // deterministic IDs based on deployment context for idempotency.
55
+ // Use 'roleName' for the human-readable display name and 'description'
56
+ // for additional context.
57
+ // Example 1: Basic read-only role for compute resources
58
+ new role_definition_1.RoleDefinition(this, "vm-reader-role", {
59
+ roleName: "Virtual Machine Reader",
60
+ description: "Can view virtual machines and their properties but cannot perform any actions",
61
+ type: "CustomRole",
62
+ permissions: [
63
+ {
64
+ actions: [
65
+ "Microsoft.Compute/virtualMachines/read",
66
+ "Microsoft.Compute/virtualMachines/instanceView/read",
67
+ "Microsoft.Compute/disks/read",
68
+ "Microsoft.Compute/snapshots/read",
69
+ "Microsoft.Network/networkInterfaces/read",
70
+ "Microsoft.Network/publicIPAddresses/read",
71
+ ],
72
+ notActions: [],
73
+ dataActions: [],
74
+ notDataActions: [],
75
+ },
76
+ ],
77
+ assignableScopes: [subscriptionScope],
78
+ tags: {
79
+ ...this.systemTags(),
80
+ example: "basic",
81
+ purpose: "read-only-compute",
82
+ },
83
+ });
84
+ // Example 2: Advanced role with control plane and data plane permissions
85
+ new role_definition_1.RoleDefinition(this, "storage-operator-role", {
86
+ roleName: "Storage Operator",
87
+ description: "Can manage storage accounts and read/write blob data but cannot delete resources",
88
+ type: "CustomRole",
89
+ permissions: [
90
+ {
91
+ // Control plane actions - manage storage accounts
92
+ actions: [
93
+ "Microsoft.Storage/storageAccounts/read",
94
+ "Microsoft.Storage/storageAccounts/write",
95
+ "Microsoft.Storage/storageAccounts/listkeys/action",
96
+ "Microsoft.Storage/storageAccounts/regeneratekey/action",
97
+ "Microsoft.Storage/storageAccounts/blobServices/containers/read",
98
+ "Microsoft.Storage/storageAccounts/blobServices/containers/write",
99
+ ],
100
+ // Explicitly deny delete operations
101
+ notActions: [
102
+ "Microsoft.Storage/storageAccounts/delete",
103
+ "Microsoft.Storage/storageAccounts/blobServices/containers/delete",
104
+ ],
105
+ // Data plane actions - read and write blobs
106
+ dataActions: [
107
+ "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read",
108
+ "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write",
109
+ "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action",
110
+ ],
111
+ // Explicitly deny delete operations on data plane
112
+ notDataActions: [
113
+ "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete",
114
+ ],
115
+ },
116
+ ],
117
+ assignableScopes: [
118
+ subscriptionScope,
119
+ // Can also be assigned at resource group level
120
+ `${subscriptionScope}/resourceGroups/storage-rg`,
121
+ ],
122
+ tags: {
123
+ ...this.systemTags(),
124
+ example: "advanced",
125
+ purpose: "storage-operations",
126
+ },
127
+ });
128
+ }
129
+ }
130
+ describe("Role Definition Integration Test", () => {
131
+ it("should deploy, validate idempotency, and cleanup role definition resources", () => {
132
+ const app = cdktf_1.Testing.app();
133
+ const stack = new RoleDefinitionExampleStack(app, "test-role-definition");
134
+ const synthesized = cdktf_1.Testing.fullSynth(stack);
135
+ // This will:
136
+ // 1. Run terraform apply to deploy resources (custom role definitions)
137
+ // 2. Run terraform plan to check idempotency (no changes expected)
138
+ // 3. Run terraform destroy to cleanup resources
139
+ (0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
140
+ }, 600000); // 10 minute timeout for deployment and cleanup
141
+ });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1kZWZpbml0aW9uLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXJvbGVkZWZpbml0aW9uL3Rlc3Qvcm9sZS1kZWZpbml0aW9uLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQUVILGlDQUFnQztBQUVoQywyQ0FBeUM7QUFDekMsaURBQXlDO0FBQ3pDLGtGQUFvRjtBQUNwRiwyQ0FBNkU7QUFDN0UseURBQTZEO0FBQzdELDREQUF3RDtBQUV4RCx3REFBd0Q7QUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBZSxDQUFDLDZCQUE2QixFQUFFO0lBQ3RFLFdBQVcsRUFBRSxDQUFDO0NBQ2YsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLDBCQUEyQixTQUFRLHVCQUFhO0lBQ3BELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsY0FBYyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNyQyxhQUFhLEVBQUUsWUFBWSxDQUFDLGFBQWE7YUFDMUM7U0FDRixDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsNkVBQTZFO1FBQzdFLElBQUksY0FBc0IsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxjQUFjO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO29CQUMvQixJQUFBLHdCQUFRLEVBQUMsbUNBQW1DLEVBQUU7d0JBQzVDLFFBQVEsRUFBRSxPQUFPO3FCQUNsQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUlBQXVJLENBQ3hJLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsY0FBYyxFQUFFLENBQUM7UUFFN0Qsa0VBQWtFO1FBQ2xFLHFFQUFxRTtRQUNyRSxpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLDBCQUEwQjtRQUUxQix3REFBd0Q7UUFDeEQsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN6QyxRQUFRLEVBQUUsd0JBQXdCO1lBQ2xDLFdBQVcsRUFDVCwrRUFBK0U7WUFDakYsSUFBSSxFQUFFLFlBQVk7WUFDbEIsV0FBVyxFQUFFO2dCQUNYO29CQUNFLE9BQU8sRUFBRTt3QkFDUCx3Q0FBd0M7d0JBQ3hDLHFEQUFxRDt3QkFDckQsOEJBQThCO3dCQUM5QixrQ0FBa0M7d0JBQ2xDLDBDQUEwQzt3QkFDMUMsMENBQTBDO3FCQUMzQztvQkFDRCxVQUFVLEVBQUUsRUFBRTtvQkFDZCxXQUFXLEVBQUUsRUFBRTtvQkFDZixjQUFjLEVBQUUsRUFBRTtpQkFDbkI7YUFDRjtZQUNELGdCQUFnQixFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDckMsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxtQkFBbUI7YUFDN0I7U0FDRixDQUFDLENBQUM7UUFFSCx5RUFBeUU7UUFDekUsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRTtZQUNoRCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFdBQVcsRUFDVCxrRkFBa0Y7WUFDcEYsSUFBSSxFQUFFLFlBQVk7WUFDbEIsV0FBVyxFQUFFO2dCQUNYO29CQUNFLGtEQUFrRDtvQkFDbEQsT0FBTyxFQUFFO3dCQUNQLHdDQUF3Qzt3QkFDeEMseUNBQXlDO3dCQUN6QyxtREFBbUQ7d0JBQ25ELHdEQUF3RDt3QkFDeEQsZ0VBQWdFO3dCQUNoRSxpRUFBaUU7cUJBQ2xFO29CQUNELG9DQUFvQztvQkFDcEMsVUFBVSxFQUFFO3dCQUNWLDBDQUEwQzt3QkFDMUMsa0VBQWtFO3FCQUNuRTtvQkFDRCw0Q0FBNEM7b0JBQzVDLFdBQVcsRUFBRTt3QkFDWCxzRUFBc0U7d0JBQ3RFLHVFQUF1RTt3QkFDdkUsNEVBQTRFO3FCQUM3RTtvQkFDRCxrREFBa0Q7b0JBQ2xELGNBQWMsRUFBRTt3QkFDZCx3RUFBd0U7cUJBQ3pFO2lCQUNGO2FBQ0Y7WUFDRCxnQkFBZ0IsRUFBRTtnQkFDaEIsaUJBQWlCO2dCQUNqQiwrQ0FBK0M7Z0JBQy9DLEdBQUcsaUJBQWlCLDRCQUE0QjthQUNqRDtZQUNELElBQUksRUFBRTtnQkFDSixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixPQUFPLEVBQUUsb0JBQW9CO2FBQzlCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsYUFBYTtRQUNiLHVFQUF1RTtRQUN2RSxtRUFBbUU7UUFDbkUsZ0RBQWdEO1FBQ2hELElBQUEsdUNBQTZCLEVBQUMsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0NBQStDO0FBQzdELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGZvciBBenVyZSBSb2xlIERlZmluaXRpb25cbiAqXG4gKiBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBSb2xlRGVmaW5pdGlvbiBjb25zdHJ1Y3RcbiAqIGFuZCB2YWxpZGF0ZXMgZGVwbG95bWVudCwgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwLlxuICpcbiAqIFRoZSB0ZXN0IGNyZWF0ZXMgY3VzdG9tIFJCQUMgcm9sZXMgd2l0aCB2YXJpb3VzIHBlcm1pc3Npb24gY29uZmlndXJhdGlvbnNcbiAqIGF0IHN1YnNjcmlwdGlvbiBzY29wZS5cbiAqXG4gKiBSdW4gd2l0aDogbnBtIHJ1biBpbnRlZ3JhdGlvbjpub3N0cmVhbVxuICovXG5cbmltcG9ydCB7IFRlc3RpbmcgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgXCJjZGt0Zi9saWIvdGVzdGluZy9hZGFwdGVycy9qZXN0XCI7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBBemFwaVByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Byb3ZpZGVycy1hemFwaS9wcm92aWRlclwiO1xuaW1wb3J0IHsgQmFzZVRlc3RTdGFjaywgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3kgfSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgVGVzdFJ1bk1ldGFkYXRhIH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmcvbGliL21ldGFkYXRhXCI7XG5pbXBvcnQgeyBSb2xlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9saWIvcm9sZS1kZWZpbml0aW9uXCI7XG5cbi8vIEdlbmVyYXRlIHVuaXF1ZSB0ZXN0IHJ1biBtZXRhZGF0YSBmb3IgdGhpcyB0ZXN0IHN1aXRlXG5jb25zdCB0ZXN0TWV0YWRhdGEgPSBuZXcgVGVzdFJ1bk1ldGFkYXRhKFwicm9sZS1kZWZpbml0aW9uLWludGVncmF0aW9uXCIsIHtcbiAgbWF4QWdlSG91cnM6IDQsXG59KTtcblxuLyoqXG4gKiBFeGFtcGxlIHN0YWNrIGRlbW9uc3RyYXRpbmcgUm9sZSBEZWZpbml0aW9uIHVzYWdlXG4gKi9cbmNsYXNzIFJvbGVEZWZpbml0aW9uRXhhbXBsZVN0YWNrIGV4dGVuZHMgQmFzZVRlc3RTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlc3RSdW5PcHRpb25zOiB7XG4gICAgICAgIG1heEFnZUhvdXJzOiB0ZXN0TWV0YWRhdGEubWF4QWdlSG91cnMsXG4gICAgICAgIGF1dG9DbGVhbnVwOiB0ZXN0TWV0YWRhdGEuYXV0b0NsZWFudXAsXG4gICAgICAgIGNsZWFudXBQb2xpY3k6IHRlc3RNZXRhZGF0YS5jbGVhbnVwUG9saWN5LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENvbmZpZ3VyZSBBWkFQSSBwcm92aWRlclxuICAgIG5ldyBBemFwaVByb3ZpZGVyKHRoaXMsIFwiYXphcGlcIiwge30pO1xuXG4gICAgLy8gR2V0IHRoZSBzdWJzY3JpcHRpb24gSUQgZHluYW1pY2FsbHkgZnJvbSBBenVyZSBDTEkgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICBsZXQgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaXB0aW9uSWQgPVxuICAgICAgICBwcm9jZXNzLmVudi5BUk1fU1VCU0NSSVBUSU9OX0lEIHx8XG4gICAgICAgIGV4ZWNTeW5jKFwiYXogYWNjb3VudCBzaG93IC0tcXVlcnkgaWQgLW8gdHN2XCIsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICB9KS50cmltKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZ2V0IEF6dXJlIHN1YnNjcmlwdGlvbiBJRC4gUGxlYXNlIGVuc3VyZSB5b3UgYXJlIGxvZ2dlZCBpbiB3aXRoICdheiBsb2dpbicgb3Igc2V0IEFSTV9TVUJTQ1JJUFRJT05fSUQgZW52aXJvbm1lbnQgdmFyaWFibGUuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzdWJzY3JpcHRpb25TY29wZSA9IGAvc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbklkfWA7XG5cbiAgICAvLyBOb3RlOiBSb2xlIGRlZmluaXRpb24gSURzIGFyZSBhdXRvLWdlbmVyYXRlZCBhcyBHVUlEcyBieSBBenVyZS5cbiAgICAvLyBUaGUgJ25hbWUnIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIC0gQXp1cmUgdXNlcyBndWlkKCkgdG8gZ2VuZXJhdGVcbiAgICAvLyBkZXRlcm1pbmlzdGljIElEcyBiYXNlZCBvbiBkZXBsb3ltZW50IGNvbnRleHQgZm9yIGlkZW1wb3RlbmN5LlxuICAgIC8vIFVzZSAncm9sZU5hbWUnIGZvciB0aGUgaHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIGFuZCAnZGVzY3JpcHRpb24nXG4gICAgLy8gZm9yIGFkZGl0aW9uYWwgY29udGV4dC5cblxuICAgIC8vIEV4YW1wbGUgMTogQmFzaWMgcmVhZC1vbmx5IHJvbGUgZm9yIGNvbXB1dGUgcmVzb3VyY2VzXG4gICAgbmV3IFJvbGVEZWZpbml0aW9uKHRoaXMsIFwidm0tcmVhZGVyLXJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IFwiVmlydHVhbCBNYWNoaW5lIFJlYWRlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQ2FuIHZpZXcgdmlydHVhbCBtYWNoaW5lcyBhbmQgdGhlaXIgcHJvcGVydGllcyBidXQgY2Fubm90IHBlcmZvcm0gYW55IGFjdGlvbnNcIixcbiAgICAgIHR5cGU6IFwiQ3VzdG9tUm9sZVwiLFxuICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzL2luc3RhbmNlVmlldy9yZWFkXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5Db21wdXRlL2Rpc2tzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LkNvbXB1dGUvc25hcHNob3RzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvbmV0d29ya0ludGVyZmFjZXMvcmVhZFwiLFxuICAgICAgICAgICAgXCJNaWNyb3NvZnQuTmV0d29yay9wdWJsaWNJUEFkZHJlc3Nlcy9yZWFkXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBub3RBY3Rpb25zOiBbXSxcbiAgICAgICAgICBkYXRhQWN0aW9uczogW10sXG4gICAgICAgICAgbm90RGF0YUFjdGlvbnM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFzc2lnbmFibGVTY29wZXM6IFtzdWJzY3JpcHRpb25TY29wZV0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcImJhc2ljXCIsXG4gICAgICAgIHB1cnBvc2U6IFwicmVhZC1vbmx5LWNvbXB1dGVcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFeGFtcGxlIDI6IEFkdmFuY2VkIHJvbGUgd2l0aCBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIHBlcm1pc3Npb25zXG4gICAgbmV3IFJvbGVEZWZpbml0aW9uKHRoaXMsIFwic3RvcmFnZS1vcGVyYXRvci1yb2xlXCIsIHtcbiAgICAgIHJvbGVOYW1lOiBcIlN0b3JhZ2UgT3BlcmF0b3JcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkNhbiBtYW5hZ2Ugc3RvcmFnZSBhY2NvdW50cyBhbmQgcmVhZC93cml0ZSBibG9iIGRhdGEgYnV0IGNhbm5vdCBkZWxldGUgcmVzb3VyY2VzXCIsXG4gICAgICB0eXBlOiBcIkN1c3RvbVJvbGVcIixcbiAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBDb250cm9sIHBsYW5lIGFjdGlvbnMgLSBtYW5hZ2Ugc3RvcmFnZSBhY2NvdW50c1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3dyaXRlXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9saXN0a2V5cy9hY3Rpb25cIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3JlZ2VuZXJhdGVrZXkvYWN0aW9uXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9yZWFkXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy93cml0ZVwiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLy8gRXhwbGljaXRseSBkZW55IGRlbGV0ZSBvcGVyYXRpb25zXG4gICAgICAgICAgbm90QWN0aW9uczogW1xuICAgICAgICAgICAgXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHMvZGVsZXRlXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9kZWxldGVcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIC8vIERhdGEgcGxhbmUgYWN0aW9ucyAtIHJlYWQgYW5kIHdyaXRlIGJsb2JzXG4gICAgICAgICAgZGF0YUFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL3JlYWRcIixcbiAgICAgICAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL2Jsb2JTZXJ2aWNlcy9jb250YWluZXJzL2Jsb2JzL3dyaXRlXCIsXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9ibG9icy9hZGQvYWN0aW9uXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICAvLyBFeHBsaWNpdGx5IGRlbnkgZGVsZXRlIG9wZXJhdGlvbnMgb24gZGF0YSBwbGFuZVxuICAgICAgICAgIG5vdERhdGFBY3Rpb25zOiBbXG4gICAgICAgICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9ibG9iU2VydmljZXMvY29udGFpbmVycy9ibG9icy9kZWxldGVcIixcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFzc2lnbmFibGVTY29wZXM6IFtcbiAgICAgICAgc3Vic2NyaXB0aW9uU2NvcGUsXG4gICAgICAgIC8vIENhbiBhbHNvIGJlIGFzc2lnbmVkIGF0IHJlc291cmNlIGdyb3VwIGxldmVsXG4gICAgICAgIGAke3N1YnNjcmlwdGlvblNjb3BlfS9yZXNvdXJjZUdyb3Vwcy9zdG9yYWdlLXJnYCxcbiAgICAgIF0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIC4uLnRoaXMuc3lzdGVtVGFncygpLFxuICAgICAgICBleGFtcGxlOiBcImFkdmFuY2VkXCIsXG4gICAgICAgIHB1cnBvc2U6IFwic3RvcmFnZS1vcGVyYXRpb25zXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmRlc2NyaWJlKFwiUm9sZSBEZWZpbml0aW9uIEludGVncmF0aW9uIFRlc3RcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBkZXBsb3ksIHZhbGlkYXRlIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cCByb2xlIGRlZmluaXRpb24gcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFJvbGVEZWZpbml0aW9uRXhhbXBsZVN0YWNrKGFwcCwgXCJ0ZXN0LXJvbGUtZGVmaW5pdGlvblwiKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXMgKGN1c3RvbSByb2xlIGRlZmluaXRpb25zKVxuICAgIC8vIDIuIFJ1biB0ZXJyYWZvcm0gcGxhbiB0byBjaGVjayBpZGVtcG90ZW5jeSAobm8gY2hhbmdlcyBleHBlY3RlZClcbiAgICAvLyAzLiBSdW4gdGVycmFmb3JtIGRlc3Ryb3kgdG8gY2xlYW51cCByZXNvdXJjZXNcbiAgICBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveShzeW50aGVzaXplZCwgeyB2ZXJpZnlDbGVhbnVwOiB0cnVlIH0pO1xuICB9LCA2MDAwMDApOyAvLyAxMCBtaW51dGUgdGltZW91dCBmb3IgZGVwbG95bWVudCBhbmQgY2xlYW51cFxufSk7XG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Comprehensive tests for the unified RoleDefinition implementation
3
+ *
4
+ * This test suite validates the unified RoleDefinition class that uses
5
+ * the VersionedAzapiResource framework. Tests cover automatic version resolution,
6
+ * explicit version pinning, schema validation, property transformation, and
7
+ * role definition-specific functionality.
8
+ */
9
+ export {};