@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,118 @@
1
+ /**
2
+ * ResourceSchemaValidator - Helper class for schema validation
3
+ *
4
+ * This helper class extracts validation logic from AzapiResource to follow
5
+ * the Single Responsibility Principle. It handles property validation against
6
+ * API schemas and provides detailed error reporting.
7
+ *
8
+ * @internal
9
+ * @packageDocumentation
10
+ */
11
+ import { ApiSchema, ValidationResult } from "../version-manager/interfaces/version-interfaces";
12
+ /**
13
+ * Helper class for validating resource properties against API schemas
14
+ *
15
+ * This class encapsulates all validation-related operations including:
16
+ * - Schema-based property validation
17
+ * - Default value application
18
+ * - Validation error formatting
19
+ * - Integration with SchemaMapper
20
+ *
21
+ * @internal
22
+ */
23
+ export declare class ResourceSchemaValidator {
24
+ private readonly _schema;
25
+ private readonly _schemaMapper;
26
+ /**
27
+ * Creates a new ResourceSchemaValidator instance
28
+ *
29
+ * @param schema - The API schema to validate against
30
+ */
31
+ constructor(schema: ApiSchema);
32
+ /**
33
+ * Validates properties against the configured schema
34
+ *
35
+ * This method performs comprehensive validation including:
36
+ * - Required property checks
37
+ * - Type validation
38
+ * - Custom validation rules
39
+ * - Deprecation warnings
40
+ *
41
+ * @param properties - The properties to validate
42
+ * @returns Detailed validation results with errors and warnings
43
+ */
44
+ validateProps(properties: any): ValidationResult;
45
+ /**
46
+ * Validates the schema structure itself
47
+ *
48
+ * This method checks if the schema is properly configured and has all
49
+ * required fields for validation to work correctly.
50
+ *
51
+ * @returns Validation result indicating if schema is valid
52
+ */
53
+ validateSchema(): ValidationResult;
54
+ /**
55
+ * Applies default values to properties based on schema definitions
56
+ *
57
+ * This method injects default values for properties that are not provided
58
+ * but have defaults defined in the schema.
59
+ *
60
+ * @param properties - The properties to apply defaults to
61
+ * @returns New properties object with default values applied
62
+ */
63
+ applyDefaults(properties: any): any;
64
+ /**
65
+ * Formats validation errors into user-friendly messages
66
+ *
67
+ * This method takes a validation result and formats the errors
68
+ * into clear, actionable error messages.
69
+ *
70
+ * @param validationResult - The validation result to format
71
+ * @returns Array of formatted error messages
72
+ */
73
+ formatValidationErrors(validationResult: ValidationResult): string[];
74
+ /**
75
+ * Gets the schema this validator is configured for
76
+ *
77
+ * @returns The API schema being used for validation
78
+ */
79
+ get schema(): ApiSchema;
80
+ /**
81
+ * Gets the resource type from the schema
82
+ *
83
+ * @returns The Azure resource type string
84
+ */
85
+ get resourceType(): string;
86
+ /**
87
+ * Gets the API version from the schema
88
+ *
89
+ * @returns The API version string
90
+ */
91
+ get version(): string;
92
+ /**
93
+ * Checks if a specific property is required
94
+ *
95
+ * @param propertyName - The name of the property to check
96
+ * @returns True if the property is required, false otherwise
97
+ */
98
+ isPropertyRequired(propertyName: string): boolean;
99
+ /**
100
+ * Checks if a specific property is deprecated
101
+ *
102
+ * @param propertyName - The name of the property to check
103
+ * @returns True if the property is deprecated, false otherwise
104
+ */
105
+ isPropertyDeprecated(propertyName: string): boolean;
106
+ /**
107
+ * Gets the list of all required properties
108
+ *
109
+ * @returns Array of required property names
110
+ */
111
+ getRequiredProperties(): string[];
112
+ /**
113
+ * Gets the list of all deprecated properties
114
+ *
115
+ * @returns Array of deprecated property names
116
+ */
117
+ getDeprecatedProperties(): string[];
118
+ }
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ /**
3
+ * ResourceSchemaValidator - Helper class for schema validation
4
+ *
5
+ * This helper class extracts validation logic from AzapiResource to follow
6
+ * the Single Responsibility Principle. It handles property validation against
7
+ * API schemas and provides detailed error reporting.
8
+ *
9
+ * @internal
10
+ * @packageDocumentation
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ResourceSchemaValidator = void 0;
14
+ const schema_mapper_1 = require("./schema-mapper/schema-mapper");
15
+ /**
16
+ * Helper class for validating resource properties against API schemas
17
+ *
18
+ * This class encapsulates all validation-related operations including:
19
+ * - Schema-based property validation
20
+ * - Default value application
21
+ * - Validation error formatting
22
+ * - Integration with SchemaMapper
23
+ *
24
+ * @internal
25
+ */
26
+ class ResourceSchemaValidator {
27
+ /**
28
+ * Creates a new ResourceSchemaValidator instance
29
+ *
30
+ * @param schema - The API schema to validate against
31
+ */
32
+ constructor(schema) {
33
+ if (!schema) {
34
+ throw new Error("Schema cannot be undefined or null");
35
+ }
36
+ if (!schema.resourceType || schema.resourceType.trim().length === 0) {
37
+ throw new Error("Schema must have a valid resourceType");
38
+ }
39
+ if (!schema.version || schema.version.trim().length === 0) {
40
+ throw new Error("Schema must have a valid version");
41
+ }
42
+ this._schema = schema;
43
+ this._schemaMapper = schema_mapper_1.SchemaMapper.create(schema);
44
+ }
45
+ /**
46
+ * Validates properties against the configured schema
47
+ *
48
+ * This method performs comprehensive validation including:
49
+ * - Required property checks
50
+ * - Type validation
51
+ * - Custom validation rules
52
+ * - Deprecation warnings
53
+ *
54
+ * @param properties - The properties to validate
55
+ * @returns Detailed validation results with errors and warnings
56
+ */
57
+ validateProps(properties) {
58
+ if (!properties) {
59
+ return {
60
+ valid: false,
61
+ errors: ["Properties cannot be undefined or null"],
62
+ warnings: [],
63
+ };
64
+ }
65
+ try {
66
+ return this._schemaMapper.validateProperties(properties);
67
+ }
68
+ catch (error) {
69
+ return {
70
+ valid: false,
71
+ errors: [
72
+ `Validation failed: ${error instanceof Error ? error.message : "Unknown error"}`,
73
+ ],
74
+ warnings: [],
75
+ };
76
+ }
77
+ }
78
+ /**
79
+ * Validates the schema structure itself
80
+ *
81
+ * This method checks if the schema is properly configured and has all
82
+ * required fields for validation to work correctly.
83
+ *
84
+ * @returns Validation result indicating if schema is valid
85
+ */
86
+ validateSchema() {
87
+ const errors = [];
88
+ const warnings = [];
89
+ // Check for required schema fields
90
+ if (!this._schema.resourceType) {
91
+ errors.push("Schema is missing resourceType");
92
+ }
93
+ if (!this._schema.version) {
94
+ errors.push("Schema is missing version");
95
+ }
96
+ if (!this._schema.properties) {
97
+ errors.push("Schema is missing properties definition");
98
+ }
99
+ if (!this._schema.required) {
100
+ errors.push("Schema is missing required properties array");
101
+ }
102
+ // Check for potential issues
103
+ if (this._schema.required &&
104
+ Array.isArray(this._schema.required) &&
105
+ this._schema.required.length === 0) {
106
+ warnings.push("Schema has no required properties defined");
107
+ }
108
+ if (this._schema.properties &&
109
+ Object.keys(this._schema.properties).length === 0) {
110
+ warnings.push("Schema has no properties defined");
111
+ }
112
+ return {
113
+ valid: errors.length === 0,
114
+ errors,
115
+ warnings,
116
+ };
117
+ }
118
+ /**
119
+ * Applies default values to properties based on schema definitions
120
+ *
121
+ * This method injects default values for properties that are not provided
122
+ * but have defaults defined in the schema.
123
+ *
124
+ * @param properties - The properties to apply defaults to
125
+ * @returns New properties object with default values applied
126
+ */
127
+ applyDefaults(properties) {
128
+ if (!properties) {
129
+ properties = {};
130
+ }
131
+ try {
132
+ return this._schemaMapper.applyDefaults(properties);
133
+ }
134
+ catch (error) {
135
+ throw new Error(`Failed to apply defaults: ${error instanceof Error ? error.message : "Unknown error"}`);
136
+ }
137
+ }
138
+ /**
139
+ * Formats validation errors into user-friendly messages
140
+ *
141
+ * This method takes a validation result and formats the errors
142
+ * into clear, actionable error messages.
143
+ *
144
+ * @param validationResult - The validation result to format
145
+ * @returns Array of formatted error messages
146
+ */
147
+ formatValidationErrors(validationResult) {
148
+ const formattedErrors = [];
149
+ // Add general errors
150
+ formattedErrors.push(...validationResult.errors);
151
+ // Add property-specific errors with context
152
+ if (validationResult.propertyErrors) {
153
+ for (const [property, errors] of Object.entries(validationResult.propertyErrors)) {
154
+ for (const error of errors) {
155
+ formattedErrors.push(`[${property}] ${error}`);
156
+ }
157
+ }
158
+ }
159
+ return formattedErrors;
160
+ }
161
+ /**
162
+ * Gets the schema this validator is configured for
163
+ *
164
+ * @returns The API schema being used for validation
165
+ */
166
+ get schema() {
167
+ return this._schema;
168
+ }
169
+ /**
170
+ * Gets the resource type from the schema
171
+ *
172
+ * @returns The Azure resource type string
173
+ */
174
+ get resourceType() {
175
+ return this._schema.resourceType;
176
+ }
177
+ /**
178
+ * Gets the API version from the schema
179
+ *
180
+ * @returns The API version string
181
+ */
182
+ get version() {
183
+ return this._schema.version;
184
+ }
185
+ /**
186
+ * Checks if a specific property is required
187
+ *
188
+ * @param propertyName - The name of the property to check
189
+ * @returns True if the property is required, false otherwise
190
+ */
191
+ isPropertyRequired(propertyName) {
192
+ if (!this._schema.required || !Array.isArray(this._schema.required)) {
193
+ return false;
194
+ }
195
+ return this._schema.required.includes(propertyName);
196
+ }
197
+ /**
198
+ * Checks if a specific property is deprecated
199
+ *
200
+ * @param propertyName - The name of the property to check
201
+ * @returns True if the property is deprecated, false otherwise
202
+ */
203
+ isPropertyDeprecated(propertyName) {
204
+ if (!this._schema.properties) {
205
+ return false;
206
+ }
207
+ const propDef = this._schema.properties[propertyName];
208
+ return propDef ? propDef.deprecated === true : false;
209
+ }
210
+ /**
211
+ * Gets the list of all required properties
212
+ *
213
+ * @returns Array of required property names
214
+ */
215
+ getRequiredProperties() {
216
+ if (!this._schema.required || !Array.isArray(this._schema.required)) {
217
+ return [];
218
+ }
219
+ return [...this._schema.required];
220
+ }
221
+ /**
222
+ * Gets the list of all deprecated properties
223
+ *
224
+ * @returns Array of deprecated property names
225
+ */
226
+ getDeprecatedProperties() {
227
+ if (!this._schema.properties) {
228
+ return [];
229
+ }
230
+ return Object.entries(this._schema.properties)
231
+ .filter(([_, propDef]) => propDef.deprecated === true)
232
+ .map(([propName]) => propName);
233
+ }
234
+ }
235
+ exports.ResourceSchemaValidator = ResourceSchemaValidator;
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utc2NoZW1hLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlLWF6dXJlL2xpYi9hemFwaS9yZXNvdXJjZS1zY2hlbWEtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQUVILGlFQUE2RDtBQU03RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSx1QkFBdUI7SUFJbEM7Ozs7T0FJRztJQUNILFlBQVksTUFBaUI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyw0QkFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxhQUFhLENBQUMsVUFBZTtRQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsS0FBSztnQkFDWixNQUFNLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztnQkFD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QVUsRUFBRSxDQUFDO1lBQzdCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7OztPQUlHO0lBQ0kscUJBQXFCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx1QkFBdUI7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0IsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2FBQzNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQzthQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUF2UEQsMERBdVBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciAtIEhlbHBlciBjbGFzcyBmb3Igc2NoZW1hIHZhbGlkYXRpb25cbiAqXG4gKiBUaGlzIGhlbHBlciBjbGFzcyBleHRyYWN0cyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gQXphcGlSZXNvdXJjZSB0byBmb2xsb3dcbiAqIHRoZSBTaW5nbGUgUmVzcG9uc2liaWxpdHkgUHJpbmNpcGxlLiBJdCBoYW5kbGVzIHByb3BlcnR5IHZhbGlkYXRpb24gYWdhaW5zdFxuICogQVBJIHNjaGVtYXMgYW5kIHByb3ZpZGVzIGRldGFpbGVkIGVycm9yIHJlcG9ydGluZy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmltcG9ydCB7IFNjaGVtYU1hcHBlciB9IGZyb20gXCIuL3NjaGVtYS1tYXBwZXIvc2NoZW1hLW1hcHBlclwiO1xuaW1wb3J0IHtcbiAgQXBpU2NoZW1hLFxuICBWYWxpZGF0aW9uUmVzdWx0LFxufSBmcm9tIFwiLi4vdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciB2YWxpZGF0aW5nIHJlc291cmNlIHByb3BlcnRpZXMgYWdhaW5zdCBBUEkgc2NoZW1hc1xuICpcbiAqIFRoaXMgY2xhc3MgZW5jYXBzdWxhdGVzIGFsbCB2YWxpZGF0aW9uLXJlbGF0ZWQgb3BlcmF0aW9ucyBpbmNsdWRpbmc6XG4gKiAtIFNjaGVtYS1iYXNlZCBwcm9wZXJ0eSB2YWxpZGF0aW9uXG4gKiAtIERlZmF1bHQgdmFsdWUgYXBwbGljYXRpb25cbiAqIC0gVmFsaWRhdGlvbiBlcnJvciBmb3JtYXR0aW5nXG4gKiAtIEludGVncmF0aW9uIHdpdGggU2NoZW1hTWFwcGVyXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NjaGVtYTogQXBpU2NoZW1hO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zY2hlbWFNYXBwZXI6IFNjaGVtYU1hcHBlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0gc2NoZW1hIC0gVGhlIEFQSSBzY2hlbWEgdG8gdmFsaWRhdGUgYWdhaW5zdFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NoZW1hOiBBcGlTY2hlbWEpIHtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIGNhbm5vdCBiZSB1bmRlZmluZWQgb3IgbnVsbFwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXNjaGVtYS5yZXNvdXJjZVR5cGUgfHwgc2NoZW1hLnJlc291cmNlVHlwZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY2hlbWEgbXVzdCBoYXZlIGEgdmFsaWQgcmVzb3VyY2VUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmICghc2NoZW1hLnZlcnNpb24gfHwgc2NoZW1hLnZlcnNpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIG11c3QgaGF2ZSBhIHZhbGlkIHZlcnNpb25cIik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMuX3NjaGVtYU1hcHBlciA9IFNjaGVtYU1hcHBlci5jcmVhdGUoc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIHNjaGVtYVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gaW5jbHVkaW5nOlxuICAgKiAtIFJlcXVpcmVkIHByb3BlcnR5IGNoZWNrc1xuICAgKiAtIFR5cGUgdmFsaWRhdGlvblxuICAgKiAtIEN1c3RvbSB2YWxpZGF0aW9uIHJ1bGVzXG4gICAqIC0gRGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBUaGUgcHJvcGVydGllcyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBEZXRhaWxlZCB2YWxpZGF0aW9uIHJlc3VsdHMgd2l0aCBlcnJvcnMgYW5kIHdhcm5pbmdzXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVQcm9wcyhwcm9wZXJ0aWVzOiBhbnkpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3JzOiBbXCJQcm9wZXJ0aWVzIGNhbm5vdCBiZSB1bmRlZmluZWQgb3IgbnVsbFwiXSxcbiAgICAgICAgd2FybmluZ3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtYU1hcHBlci52YWxpZGF0ZVByb3BlcnRpZXMocHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgYFZhbGlkYXRpb24gZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJ9YCxcbiAgICAgICAgXSxcbiAgICAgICAgd2FybmluZ3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBzY2hlbWEgc3RydWN0dXJlIGl0c2VsZlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHNjaGVtYSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBoYXMgYWxsXG4gICAqIHJlcXVpcmVkIGZpZWxkcyBmb3IgdmFsaWRhdGlvbiB0byB3b3JrIGNvcnJlY3RseS5cbiAgICpcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHQgaW5kaWNhdGluZyBpZiBzY2hlbWEgaXMgdmFsaWRcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZVNjaGVtYSgpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDaGVjayBmb3IgcmVxdWlyZWQgc2NoZW1hIGZpZWxkc1xuICAgIGlmICghdGhpcy5fc2NoZW1hLnJlc291cmNlVHlwZSkge1xuICAgICAgZXJyb3JzLnB1c2goXCJTY2hlbWEgaXMgbWlzc2luZyByZXNvdXJjZVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zY2hlbWEudmVyc2lvbikge1xuICAgICAgZXJyb3JzLnB1c2goXCJTY2hlbWEgaXMgbWlzc2luZyB2ZXJzaW9uXCIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgIGVycm9ycy5wdXNoKFwiU2NoZW1hIGlzIG1pc3NpbmcgcHJvcGVydGllcyBkZWZpbml0aW9uXCIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2NoZW1hLnJlcXVpcmVkKSB7XG4gICAgICBlcnJvcnMucHVzaChcIlNjaGVtYSBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXMgYXJyYXlcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHBvdGVudGlhbCBpc3N1ZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLl9zY2hlbWEucmVxdWlyZWQgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fc2NoZW1hLnJlcXVpcmVkKSAmJlxuICAgICAgdGhpcy5fc2NoZW1hLnJlcXVpcmVkLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgd2FybmluZ3MucHVzaChcIlNjaGVtYSBoYXMgbm8gcmVxdWlyZWQgcHJvcGVydGllcyBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuX3NjaGVtYS5wcm9wZXJ0aWVzICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLl9zY2hlbWEucHJvcGVydGllcykubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiU2NoZW1hIGhhcyBubyBwcm9wZXJ0aWVzIGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzLFxuICAgICAgd2FybmluZ3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGRlZmF1bHQgdmFsdWVzIHRvIHByb3BlcnRpZXMgYmFzZWQgb24gc2NoZW1hIGRlZmluaXRpb25zXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGluamVjdHMgZGVmYXVsdCB2YWx1ZXMgZm9yIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVkXG4gICAqIGJ1dCBoYXZlIGRlZmF1bHRzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBUaGUgcHJvcGVydGllcyB0byBhcHBseSBkZWZhdWx0cyB0b1xuICAgKiBAcmV0dXJucyBOZXcgcHJvcGVydGllcyBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcyBhcHBsaWVkXG4gICAqL1xuICBwdWJsaWMgYXBwbHlEZWZhdWx0cyhwcm9wZXJ0aWVzOiBhbnkpOiBhbnkge1xuICAgIGlmICghcHJvcGVydGllcykge1xuICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2NoZW1hTWFwcGVyLmFwcGx5RGVmYXVsdHMocHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBhcHBseSBkZWZhdWx0czogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwifWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIHZhbGlkYXRpb24gZXJyb3JzIGludG8gdXNlci1mcmllbmRseSBtZXNzYWdlc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIHZhbGlkYXRpb24gcmVzdWx0IGFuZCBmb3JtYXRzIHRoZSBlcnJvcnNcbiAgICogaW50byBjbGVhciwgYWN0aW9uYWJsZSBlcnJvciBtZXNzYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbGlkYXRpb25SZXN1bHQgLSBUaGUgdmFsaWRhdGlvbiByZXN1bHQgdG8gZm9ybWF0XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlc1xuICAgKi9cbiAgcHVibGljIGZvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGlvblJlc3VsdDogVmFsaWRhdGlvblJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmb3JtYXR0ZWRFcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBBZGQgZ2VuZXJhbCBlcnJvcnNcbiAgICBmb3JtYXR0ZWRFcnJvcnMucHVzaCguLi52YWxpZGF0aW9uUmVzdWx0LmVycm9ycyk7XG5cbiAgICAvLyBBZGQgcHJvcGVydHktc3BlY2lmaWMgZXJyb3JzIHdpdGggY29udGV4dFxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LnByb3BlcnR5RXJyb3JzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgZXJyb3JzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0eUVycm9ycyxcbiAgICAgICkpIHtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRFcnJvcnMucHVzaChgWyR7cHJvcGVydHl9XSAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZEVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzY2hlbWEgdGhpcyB2YWxpZGF0b3IgaXMgY29uZmlndXJlZCBmb3JcbiAgICpcbiAgICogQHJldHVybnMgVGhlIEFQSSBzY2hlbWEgYmVpbmcgdXNlZCBmb3IgdmFsaWRhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBzY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlc291cmNlIHR5cGUgZnJvbSB0aGUgc2NoZW1hXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBBenVyZSByZXNvdXJjZSB0eXBlIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hLnJlc291cmNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgdmVyc2lvbiBmcm9tIHRoZSBzY2hlbWFcbiAgICpcbiAgICogQHJldHVybnMgVGhlIEFQSSB2ZXJzaW9uIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NjaGVtYS52ZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHNwZWNpZmljIHByb3BlcnR5IGlzIHJlcXVpcmVkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2tcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIGlzUHJvcGVydHlSZXF1aXJlZChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fc2NoZW1hLnJlcXVpcmVkIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuX3NjaGVtYS5yZXF1aXJlZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIGlzUHJvcGVydHlEZXByZWNhdGVkKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9zY2hlbWEucHJvcGVydGllcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BEZWYgPSB0aGlzLl9zY2hlbWEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgIHJldHVybiBwcm9wRGVmID8gcHJvcERlZi5kZXByZWNhdGVkID09PSB0cnVlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhbGwgcmVxdWlyZWQgcHJvcGVydGllc1xuICAgKlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiByZXF1aXJlZCBwcm9wZXJ0eSBuYW1lc1xuICAgKi9cbiAgcHVibGljIGdldFJlcXVpcmVkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLl9zY2hlbWEucmVxdWlyZWQgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5fc2NoZW1hLnJlcXVpcmVkKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBbLi4udGhpcy5fc2NoZW1hLnJlcXVpcmVkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFsbCBkZXByZWNhdGVkIHByb3BlcnRpZXNcbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZGVwcmVjYXRlZCBwcm9wZXJ0eSBuYW1lc1xuICAgKi9cbiAgcHVibGljIGdldERlcHJlY2F0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuX3NjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX3NjaGVtYS5wcm9wZXJ0aWVzKVxuICAgICAgLmZpbHRlcigoW18sIHByb3BEZWZdKSA9PiBwcm9wRGVmLmRlcHJlY2F0ZWQgPT09IHRydWUpXG4gICAgICAubWFwKChbcHJvcE5hbWVdKSA9PiBwcm9wTmFtZSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,103 @@
1
+ /**
2
+ * ResourceVersionManager - Helper class for managing API version resolution
3
+ *
4
+ * This helper class extracts version management logic from AzapiResource to follow
5
+ * the Single Responsibility Principle. It handles version resolution, validation,
6
+ * and configuration retrieval.
7
+ *
8
+ * @internal
9
+ * @packageDocumentation
10
+ */
11
+ import { ApiSchema, VersionConfig } from "../version-manager/interfaces/version-interfaces";
12
+ /**
13
+ * Helper class for managing API version resolution and configuration
14
+ *
15
+ * This class encapsulates all version-related operations including:
16
+ * - API version resolution (explicit or automatic)
17
+ * - Version validation against registered versions
18
+ * - Schema and configuration retrieval
19
+ * - Latest version resolution
20
+ *
21
+ * @internal
22
+ */
23
+ export declare class ResourceVersionManager {
24
+ private readonly _apiVersionManager;
25
+ private readonly _resourceType;
26
+ private readonly _defaultVersion;
27
+ /**
28
+ * Creates a new ResourceVersionManager instance
29
+ *
30
+ * @param resourceType - The Azure resource type (e.g., "Microsoft.Resources/resourceGroups")
31
+ * @param defaultVersion - The default version to use as fallback
32
+ */
33
+ constructor(resourceType: string, defaultVersion: string);
34
+ /**
35
+ * Resolves the API version to use for a resource instance
36
+ *
37
+ * This method implements the version resolution logic:
38
+ * 1. If explicitVersion is provided, validate and use it
39
+ * 2. Otherwise, try to get the latest version from ApiVersionManager
40
+ * 3. If no versions registered, fall back to defaultVersion
41
+ *
42
+ * @param explicitVersion - Optional explicit version specified by user
43
+ * @returns The resolved API version string
44
+ * @throws Error if explicit version is provided but not supported
45
+ */
46
+ resolveApiVersion(explicitVersion?: string): string;
47
+ /**
48
+ * Retrieves the version configuration for a specific version
49
+ *
50
+ * @param version - The version to retrieve configuration for
51
+ * @returns The version configuration, or undefined if not found
52
+ */
53
+ versionConfig(version: string): VersionConfig | undefined;
54
+ /**
55
+ * Retrieves the API schema for a specific version
56
+ *
57
+ * @param version - The version to retrieve schema for
58
+ * @returns The API schema for the version
59
+ * @throws Error if version configuration or schema cannot be found
60
+ */
61
+ schemaForVersion(version: string): ApiSchema;
62
+ /**
63
+ * Validates whether a version is supported for the resource type
64
+ *
65
+ * @param version - The version to validate
66
+ * @returns True if the version is supported, false otherwise
67
+ */
68
+ validateVersion(version: string): boolean;
69
+ /**
70
+ * Retrieves the latest available version for the resource type
71
+ *
72
+ * @returns The latest version string, or undefined if none found
73
+ */
74
+ latestVersion(): string | undefined;
75
+ /**
76
+ * Retrieves all supported versions for the resource type
77
+ *
78
+ * @returns Array of supported version strings, sorted by release date (newest first)
79
+ */
80
+ supportedVersions(): string[];
81
+ /**
82
+ * Checks if the version is deprecated
83
+ *
84
+ * @param version - The version to check
85
+ * @returns True if the version is deprecated or sunset, false otherwise
86
+ */
87
+ isDeprecated(version: string): boolean;
88
+ /**
89
+ * Checks if the version has reached sunset
90
+ *
91
+ * @param version - The version to check
92
+ * @returns True if the version has reached sunset, false otherwise
93
+ */
94
+ isSunset(version: string): boolean;
95
+ /**
96
+ * The resource type this manager is configured for
97
+ */
98
+ get resourceType(): string;
99
+ /**
100
+ * The default version configured for this manager
101
+ */
102
+ get defaultVersion(): string;
103
+ }
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * ResourceVersionManager - Helper class for managing API version resolution
4
+ *
5
+ * This helper class extracts version management logic from AzapiResource to follow
6
+ * the Single Responsibility Principle. It handles version resolution, validation,
7
+ * and configuration retrieval.
8
+ *
9
+ * @internal
10
+ * @packageDocumentation
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ResourceVersionManager = void 0;
14
+ const api_version_manager_1 = require("../version-manager/api-version-manager");
15
+ const version_interfaces_1 = require("../version-manager/interfaces/version-interfaces");
16
+ /**
17
+ * Helper class for managing API version resolution and configuration
18
+ *
19
+ * This class encapsulates all version-related operations including:
20
+ * - API version resolution (explicit or automatic)
21
+ * - Version validation against registered versions
22
+ * - Schema and configuration retrieval
23
+ * - Latest version resolution
24
+ *
25
+ * @internal
26
+ */
27
+ class ResourceVersionManager {
28
+ /**
29
+ * Creates a new ResourceVersionManager instance
30
+ *
31
+ * @param resourceType - The Azure resource type (e.g., "Microsoft.Resources/resourceGroups")
32
+ * @param defaultVersion - The default version to use as fallback
33
+ */
34
+ constructor(resourceType, defaultVersion) {
35
+ if (!resourceType || resourceType.trim().length === 0) {
36
+ throw new Error("Resource type cannot be empty");
37
+ }
38
+ if (!defaultVersion || defaultVersion.trim().length === 0) {
39
+ throw new Error("Default version cannot be empty");
40
+ }
41
+ this._resourceType = resourceType;
42
+ this._defaultVersion = defaultVersion;
43
+ this._apiVersionManager = api_version_manager_1.ApiVersionManager.instance();
44
+ }
45
+ /**
46
+ * Resolves the API version to use for a resource instance
47
+ *
48
+ * This method implements the version resolution logic:
49
+ * 1. If explicitVersion is provided, validate and use it
50
+ * 2. Otherwise, try to get the latest version from ApiVersionManager
51
+ * 3. If no versions registered, fall back to defaultVersion
52
+ *
53
+ * @param explicitVersion - Optional explicit version specified by user
54
+ * @returns The resolved API version string
55
+ * @throws Error if explicit version is provided but not supported
56
+ */
57
+ resolveApiVersion(explicitVersion) {
58
+ if (explicitVersion) {
59
+ // Validate that the explicit version is supported
60
+ if (!this.validateVersion(explicitVersion)) {
61
+ const supportedVersions = this.supportedVersions();
62
+ throw new Error(`Unsupported API version '${explicitVersion}' for resource type '${this._resourceType}'. ` +
63
+ `Supported versions: ${supportedVersions.join(", ")}`);
64
+ }
65
+ return explicitVersion;
66
+ }
67
+ // Try to get the latest version from the manager
68
+ const latestVersion = this.latestVersion();
69
+ if (latestVersion) {
70
+ return latestVersion;
71
+ }
72
+ // Fall back to the default version
73
+ console.warn(`No versions registered for ${this._resourceType}. ` +
74
+ `Using default version: ${this._defaultVersion}. ` +
75
+ `Consider registering versions with ApiVersionManager for better version management.`);
76
+ return this._defaultVersion;
77
+ }
78
+ /**
79
+ * Retrieves the version configuration for a specific version
80
+ *
81
+ * @param version - The version to retrieve configuration for
82
+ * @returns The version configuration, or undefined if not found
83
+ */
84
+ versionConfig(version) {
85
+ return this._apiVersionManager.versionConfig(this._resourceType, version);
86
+ }
87
+ /**
88
+ * Retrieves the API schema for a specific version
89
+ *
90
+ * @param version - The version to retrieve schema for
91
+ * @returns The API schema for the version
92
+ * @throws Error if version configuration or schema cannot be found
93
+ */
94
+ schemaForVersion(version) {
95
+ const versionConfig = this.versionConfig(version);
96
+ if (!versionConfig) {
97
+ throw new Error(`Cannot resolve schema: version configuration not found for ` +
98
+ `${this._resourceType}@${version}`);
99
+ }
100
+ return versionConfig.schema;
101
+ }
102
+ /**
103
+ * Validates whether a version is supported for the resource type
104
+ *
105
+ * @param version - The version to validate
106
+ * @returns True if the version is supported, false otherwise
107
+ */
108
+ validateVersion(version) {
109
+ return this._apiVersionManager.validateVersionSupport(this._resourceType, version);
110
+ }
111
+ /**
112
+ * Retrieves the latest available version for the resource type
113
+ *
114
+ * @returns The latest version string, or undefined if none found
115
+ */
116
+ latestVersion() {
117
+ return this._apiVersionManager.latestVersion(this._resourceType);
118
+ }
119
+ /**
120
+ * Retrieves all supported versions for the resource type
121
+ *
122
+ * @returns Array of supported version strings, sorted by release date (newest first)
123
+ */
124
+ supportedVersions() {
125
+ return this._apiVersionManager.supportedVersions(this._resourceType);
126
+ }
127
+ /**
128
+ * Checks if the version is deprecated
129
+ *
130
+ * @param version - The version to check
131
+ * @returns True if the version is deprecated or sunset, false otherwise
132
+ */
133
+ isDeprecated(version) {
134
+ const config = this.versionConfig(version);
135
+ if (!config) {
136
+ return false;
137
+ }
138
+ return (config.supportLevel === version_interfaces_1.VersionSupportLevel.DEPRECATED ||
139
+ config.supportLevel === version_interfaces_1.VersionSupportLevel.SUNSET);
140
+ }
141
+ /**
142
+ * Checks if the version has reached sunset
143
+ *
144
+ * @param version - The version to check
145
+ * @returns True if the version has reached sunset, false otherwise
146
+ */
147
+ isSunset(version) {
148
+ const config = this.versionConfig(version);
149
+ if (!config) {
150
+ return false;
151
+ }
152
+ return config.supportLevel === version_interfaces_1.VersionSupportLevel.SUNSET;
153
+ }
154
+ /**
155
+ * The resource type this manager is configured for
156
+ */
157
+ get resourceType() {
158
+ return this._resourceType;
159
+ }
160
+ /**
161
+ * The default version configured for this manager
162
+ */
163
+ get defaultVersion() {
164
+ return this._defaultVersion;
165
+ }
166
+ }
167
+ exports.ResourceVersionManager = ResourceVersionManager;
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtdmVyc2lvbi1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Jlc291cmNlLXZlcnNpb24tbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7QUFFSCxnRkFBMkU7QUFDM0UseUZBSTBEO0FBRTFEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLHNCQUFzQjtJQUtqQzs7Ozs7T0FLRztJQUNILFlBQVksWUFBb0IsRUFBRSxjQUFzQjtRQUN0RCxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsdUNBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksaUJBQWlCLENBQUMsZUFBd0I7UUFDL0MsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEtBQUss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KipcbiAqIFJlc291cmNlVmVyc2lvbk1hbmFnZXIgLSBIZWxwZXIgY2xhc3MgZm9yIG1hbmFnaW5nIEFQSSB2ZXJzaW9uIHJlc29sdXRpb25cbiAqXG4gKiBUaGlzIGhlbHBlciBjbGFzcyBleHRyYWN0cyB2ZXJzaW9uIG1hbmFnZW1lbnQgbG9naWMgZnJvbSBBemFwaVJlc291cmNlIHRvIGZvbGxvd1xuICogdGhlIFNpbmdsZSBSZXNwb25zaWJpbGl0eSBQcmluY2lwbGUuIEl0IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCB2YWxpZGF0aW9uLFxuICogYW5kIGNvbmZpZ3VyYXRpb24gcmV0cmlldmFsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuaW1wb3J0IHsgQXBpVmVyc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi4vdmVyc2lvbi1tYW5hZ2VyL2FwaS12ZXJzaW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFwaVNjaGVtYSxcbiAgVmVyc2lvbkNvbmZpZyxcbiAgVmVyc2lvblN1cHBvcnRMZXZlbCxcbn0gZnJvbSBcIi4uL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgbWFuYWdpbmcgQVBJIHZlcnNpb24gcmVzb2x1dGlvbiBhbmQgY29uZmlndXJhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgZW5jYXBzdWxhdGVzIGFsbCB2ZXJzaW9uLXJlbGF0ZWQgb3BlcmF0aW9ucyBpbmNsdWRpbmc6XG4gKiAtIEFQSSB2ZXJzaW9uIHJlc29sdXRpb24gKGV4cGxpY2l0IG9yIGF1dG9tYXRpYylcbiAqIC0gVmVyc2lvbiB2YWxpZGF0aW9uIGFnYWluc3QgcmVnaXN0ZXJlZCB2ZXJzaW9uc1xuICogLSBTY2hlbWEgYW5kIGNvbmZpZ3VyYXRpb24gcmV0cmlldmFsXG4gKiAtIExhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb25cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc291cmNlVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcGlWZXJzaW9uTWFuYWdlcjogQXBpVmVyc2lvbk1hbmFnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFJlc291cmNlVmVyc2lvbk1hbmFnZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHJlc291cmNlVHlwZSAtIFRoZSBBenVyZSByZXNvdXJjZSB0eXBlIChlLmcuLCBcIk1pY3Jvc29mdC5SZXNvdXJjZXMvcmVzb3VyY2VHcm91cHNcIilcbiAgICogQHBhcmFtIGRlZmF1bHRWZXJzaW9uIC0gVGhlIGRlZmF1bHQgdmVyc2lvbiB0byB1c2UgYXMgZmFsbGJhY2tcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJlc291cmNlVHlwZTogc3RyaW5nLCBkZWZhdWx0VmVyc2lvbjogc3RyaW5nKSB7XG4gICAgaWYgKCFyZXNvdXJjZVR5cGUgfHwgcmVzb3VyY2VUeXBlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlc291cmNlIHR5cGUgY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgIH1cblxuICAgIGlmICghZGVmYXVsdFZlcnNpb24gfHwgZGVmYXVsdFZlcnNpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVmYXVsdCB2ZXJzaW9uIGNhbm5vdCBiZSBlbXB0eVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXNvdXJjZVR5cGUgPSByZXNvdXJjZVR5cGU7XG4gICAgdGhpcy5fZGVmYXVsdFZlcnNpb24gPSBkZWZhdWx0VmVyc2lvbjtcbiAgICB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlciA9IEFwaVZlcnNpb25NYW5hZ2VyLmluc3RhbmNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIEFQSSB2ZXJzaW9uIHRvIHVzZSBmb3IgYSByZXNvdXJjZSBpbnN0YW5jZVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSB2ZXJzaW9uIHJlc29sdXRpb24gbG9naWM6XG4gICAqIDEuIElmIGV4cGxpY2l0VmVyc2lvbiBpcyBwcm92aWRlZCwgdmFsaWRhdGUgYW5kIHVzZSBpdFxuICAgKiAyLiBPdGhlcndpc2UsIHRyeSB0byBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gQXBpVmVyc2lvbk1hbmFnZXJcbiAgICogMy4gSWYgbm8gdmVyc2lvbnMgcmVnaXN0ZXJlZCwgZmFsbCBiYWNrIHRvIGRlZmF1bHRWZXJzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBleHBsaWNpdFZlcnNpb24gLSBPcHRpb25hbCBleHBsaWNpdCB2ZXJzaW9uIHNwZWNpZmllZCBieSB1c2VyXG4gICAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBBUEkgdmVyc2lvbiBzdHJpbmdcbiAgICogQHRocm93cyBFcnJvciBpZiBleHBsaWNpdCB2ZXJzaW9uIGlzIHByb3ZpZGVkIGJ1dCBub3Qgc3VwcG9ydGVkXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZUFwaVZlcnNpb24oZXhwbGljaXRWZXJzaW9uPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZXhwbGljaXRWZXJzaW9uKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBleHBsaWNpdCB2ZXJzaW9uIGlzIHN1cHBvcnRlZFxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlVmVyc2lvbihleHBsaWNpdFZlcnNpb24pKSB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZFZlcnNpb25zID0gdGhpcy5zdXBwb3J0ZWRWZXJzaW9ucygpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIEFQSSB2ZXJzaW9uICcke2V4cGxpY2l0VmVyc2lvbn0nIGZvciByZXNvdXJjZSB0eXBlICcke3RoaXMuX3Jlc291cmNlVHlwZX0nLiBgICtcbiAgICAgICAgICAgIGBTdXBwb3J0ZWQgdmVyc2lvbnM6ICR7c3VwcG9ydGVkVmVyc2lvbnMuam9pbihcIiwgXCIpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwbGljaXRWZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gdGhlIG1hbmFnZXJcbiAgICBjb25zdCBsYXRlc3RWZXJzaW9uID0gdGhpcy5sYXRlc3RWZXJzaW9uKCk7XG4gICAgaWYgKGxhdGVzdFZlcnNpb24pIHtcbiAgICAgIHJldHVybiBsYXRlc3RWZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCB2ZXJzaW9uXG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYE5vIHZlcnNpb25zIHJlZ2lzdGVyZWQgZm9yICR7dGhpcy5fcmVzb3VyY2VUeXBlfS4gYCArXG4gICAgICAgIGBVc2luZyBkZWZhdWx0IHZlcnNpb246ICR7dGhpcy5fZGVmYXVsdFZlcnNpb259LiBgICtcbiAgICAgICAgYENvbnNpZGVyIHJlZ2lzdGVyaW5nIHZlcnNpb25zIHdpdGggQXBpVmVyc2lvbk1hbmFnZXIgZm9yIGJldHRlciB2ZXJzaW9uIG1hbmFnZW1lbnQuYCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdmVyc2lvbiBjb25maWd1cmF0aW9uIGZvciBhIHNwZWNpZmljIHZlcnNpb25cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiB0byByZXRyaWV2ZSBjb25maWd1cmF0aW9uIGZvclxuICAgKiBAcmV0dXJucyBUaGUgdmVyc2lvbiBjb25maWd1cmF0aW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgdmVyc2lvbkNvbmZpZyh2ZXJzaW9uOiBzdHJpbmcpOiBWZXJzaW9uQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYXBpVmVyc2lvbk1hbmFnZXIudmVyc2lvbkNvbmZpZyh0aGlzLl9yZXNvdXJjZVR5cGUsIHZlcnNpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQVBJIHNjaGVtYSBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHZlcnNpb24gdG8gcmV0cmlldmUgc2NoZW1hIGZvclxuICAgKiBAcmV0dXJucyBUaGUgQVBJIHNjaGVtYSBmb3IgdGhlIHZlcnNpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB2ZXJzaW9uIGNvbmZpZ3VyYXRpb24gb3Igc2NoZW1hIGNhbm5vdCBiZSBmb3VuZFxuICAgKi9cbiAgcHVibGljIHNjaGVtYUZvclZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogQXBpU2NoZW1hIHtcbiAgICBjb25zdCB2ZXJzaW9uQ29uZmlnID0gdGhpcy52ZXJzaW9uQ29uZmlnKHZlcnNpb24pO1xuXG4gICAgaWYgKCF2ZXJzaW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzb2x2ZSBzY2hlbWE6IHZlcnNpb24gY29uZmlndXJhdGlvbiBub3QgZm91bmQgZm9yIGAgK1xuICAgICAgICAgIGAke3RoaXMuX3Jlc291cmNlVHlwZX1AJHt2ZXJzaW9ufWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9uQ29uZmlnLnNjaGVtYTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHZlcnNpb24gaXMgc3VwcG9ydGVkIGZvciB0aGUgcmVzb3VyY2UgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSB2ZXJzaW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZlcnNpb24gaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaVZlcnNpb25NYW5hZ2VyLnZhbGlkYXRlVmVyc2lvblN1cHBvcnQoXG4gICAgICB0aGlzLl9yZXNvdXJjZVR5cGUsXG4gICAgICB2ZXJzaW9uLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYXRlc3QgYXZhaWxhYmxlIHZlcnNpb24gZm9yIHRoZSByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsYXRlc3QgdmVyc2lvbiBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBub25lIGZvdW5kXG4gICAqL1xuICBwdWJsaWMgbGF0ZXN0VmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5sYXRlc3RWZXJzaW9uKHRoaXMuX3Jlc291cmNlVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBzdXBwb3J0ZWQgdmVyc2lvbnMgZm9yIHRoZSByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHN1cHBvcnRlZCB2ZXJzaW9uIHN0cmluZ3MsIHNvcnRlZCBieSByZWxlYXNlIGRhdGUgKG5ld2VzdCBmaXJzdClcbiAgICovXG4gIHB1YmxpYyBzdXBwb3J0ZWRWZXJzaW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaVZlcnNpb25NYW5hZ2VyLnN1cHBvcnRlZFZlcnNpb25zKHRoaXMuX3Jlc291cmNlVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB2ZXJzaW9uIGlzIGRlcHJlY2F0ZWRcbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2ZXJzaW9uIGlzIGRlcHJlY2F0ZWQgb3Igc3Vuc2V0LCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBpc0RlcHJlY2F0ZWQodmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy52ZXJzaW9uQ29uZmlnKHZlcnNpb24pO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIGNvbmZpZy5zdXBwb3J0TGV2ZWwgPT09IFZlcnNpb25TdXBwb3J0TGV2ZWwuREVQUkVDQVRFRCB8fFxuICAgICAgY29uZmlnLnN1cHBvcnRMZXZlbCA9PT0gVmVyc2lvblN1cHBvcnRMZXZlbC5TVU5TRVRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdmVyc2lvbiBoYXMgcmVhY2hlZCBzdW5zZXRcbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2ZXJzaW9uIGhhcyByZWFjaGVkIHN1bnNldCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgaXNTdW5zZXQodmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy52ZXJzaW9uQ29uZmlnKHZlcnNpb24pO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZy5zdXBwb3J0TGV2ZWwgPT09IFZlcnNpb25TdXBwb3J0TGV2ZWwuU1VOU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSB0eXBlIHRoaXMgbWFuYWdlciBpcyBjb25maWd1cmVkIGZvclxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZlcnNpb24gY29uZmlndXJlZCBmb3IgdGhpcyBtYW5hZ2VyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICB9XG59XG4iXX0=