@microsoft/terraform-cdk-constructs 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/.jsii +60999 -15780
  2. package/API.md +54947 -10610
  3. package/README.md +72 -36
  4. package/docs/monitoring-guide.md +206 -0
  5. package/docs/testing.md +84 -1
  6. package/lib/azure-actiongroup/index.d.ts +11 -0
  7. package/lib/azure-actiongroup/index.js +28 -0
  8. package/lib/azure-actiongroup/lib/action-group-schemas.d.ts +24 -0
  9. package/lib/azure-actiongroup/lib/action-group-schemas.js +201 -0
  10. package/lib/azure-actiongroup/lib/action-group.d.ts +312 -0
  11. package/lib/azure-actiongroup/lib/action-group.js +201 -0
  12. package/lib/azure-actiongroup/lib/index.d.ts +5 -0
  13. package/lib/azure-actiongroup/lib/index.js +22 -0
  14. package/lib/azure-actiongroup/test/action-group.integ.d.ts +9 -0
  15. package/lib/azure-actiongroup/test/action-group.integ.js +79 -0
  16. package/lib/azure-actiongroup/test/action-group.spec.d.ts +8 -0
  17. package/lib/azure-actiongroup/test/action-group.spec.js +602 -0
  18. package/lib/azure-activitylogalert/index.d.ts +11 -0
  19. package/lib/azure-activitylogalert/index.js +28 -0
  20. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.d.ts +24 -0
  21. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.js +182 -0
  22. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +236 -0
  23. package/lib/azure-activitylogalert/lib/activity-log-alert.js +212 -0
  24. package/lib/azure-activitylogalert/lib/index.d.ts +5 -0
  25. package/lib/azure-activitylogalert/lib/index.js +22 -0
  26. package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +9 -0
  27. package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +98 -0
  28. package/lib/azure-activitylogalert/test/activity-log-alert.spec.d.ts +9 -0
  29. package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +1101 -0
  30. package/lib/azure-aks/index.d.ts +9 -0
  31. package/lib/azure-aks/index.js +28 -0
  32. package/lib/azure-aks/lib/aks-cluster-schemas.d.ts +505 -0
  33. package/lib/azure-aks/lib/aks-cluster-schemas.js +572 -0
  34. package/lib/azure-aks/lib/aks-cluster.d.ts +395 -0
  35. package/lib/azure-aks/lib/aks-cluster.js +489 -0
  36. package/lib/azure-aks/lib/index.d.ts +11 -0
  37. package/lib/azure-aks/lib/index.js +38 -0
  38. package/lib/azure-aks/test/aks-cluster.integ.d.ts +9 -0
  39. package/lib/azure-aks/test/aks-cluster.integ.js +260 -0
  40. package/lib/azure-aks/test/aks-cluster.spec.d.ts +8 -0
  41. package/lib/azure-aks/test/aks-cluster.spec.js +1396 -0
  42. package/lib/azure-diagnosticsettings/index.d.ts +7 -0
  43. package/lib/azure-diagnosticsettings/index.js +24 -0
  44. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.d.ts +50 -0
  45. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.js +207 -0
  46. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +193 -0
  47. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +200 -0
  48. package/lib/azure-diagnosticsettings/lib/index.d.ts +8 -0
  49. package/lib/azure-diagnosticsettings/lib/index.js +25 -0
  50. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.d.ts +8 -0
  51. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +432 -0
  52. package/lib/azure-metricalert/index.d.ts +11 -0
  53. package/lib/azure-metricalert/index.js +28 -0
  54. package/lib/azure-metricalert/lib/index.d.ts +5 -0
  55. package/lib/azure-metricalert/lib/index.js +22 -0
  56. package/lib/azure-metricalert/lib/metric-alert-schemas.d.ts +24 -0
  57. package/lib/azure-metricalert/lib/metric-alert-schemas.js +242 -0
  58. package/lib/azure-metricalert/lib/metric-alert.d.ts +344 -0
  59. package/lib/azure-metricalert/lib/metric-alert.js +252 -0
  60. package/lib/azure-metricalert/test/metric-alert.integ.d.ts +9 -0
  61. package/lib/azure-metricalert/test/metric-alert.integ.js +123 -0
  62. package/lib/azure-metricalert/test/metric-alert.spec.d.ts +9 -0
  63. package/lib/azure-metricalert/test/metric-alert.spec.js +1266 -0
  64. package/lib/azure-networkinterface/index.d.ts +4 -0
  65. package/lib/azure-networkinterface/index.js +21 -0
  66. package/lib/azure-networkinterface/lib/index.d.ts +6 -0
  67. package/lib/azure-networkinterface/lib/index.js +22 -0
  68. package/lib/azure-networkinterface/lib/network-interface-schemas.d.ts +32 -0
  69. package/lib/azure-networkinterface/lib/network-interface-schemas.js +222 -0
  70. package/lib/azure-networkinterface/lib/network-interface.d.ts +265 -0
  71. package/lib/azure-networkinterface/lib/network-interface.js +228 -0
  72. package/lib/azure-networkinterface/test/network-interface.integ.d.ts +9 -0
  73. package/lib/azure-networkinterface/test/network-interface.integ.js +102 -0
  74. package/lib/azure-networkinterface/test/network-interface.spec.d.ts +8 -0
  75. package/lib/azure-networkinterface/test/network-interface.spec.js +655 -0
  76. package/lib/azure-networksecuritygroup/index.d.ts +6 -0
  77. package/lib/azure-networksecuritygroup/index.js +23 -0
  78. package/lib/azure-networksecuritygroup/lib/index.d.ts +5 -0
  79. package/lib/azure-networksecuritygroup/lib/index.js +16 -0
  80. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.d.ts +32 -0
  81. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.js +198 -0
  82. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +268 -0
  83. package/lib/azure-networksecuritygroup/lib/network-security-group.js +248 -0
  84. package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +9 -0
  85. package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +151 -0
  86. package/lib/azure-networksecuritygroup/test/network-security-group.spec.d.ts +8 -0
  87. package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +652 -0
  88. package/lib/azure-publicipaddress/index.d.ts +6 -0
  89. package/lib/azure-publicipaddress/index.js +23 -0
  90. package/lib/azure-publicipaddress/lib/index.d.ts +9 -0
  91. package/lib/azure-publicipaddress/lib/index.js +19 -0
  92. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.d.ts +32 -0
  93. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.js +227 -0
  94. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +256 -0
  95. package/lib/azure-publicipaddress/lib/public-ip-address.js +267 -0
  96. package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +9 -0
  97. package/lib/azure-publicipaddress/test/public-ip-address.integ.js +75 -0
  98. package/lib/azure-publicipaddress/test/public-ip-address.spec.d.ts +15 -0
  99. package/lib/azure-publicipaddress/test/public-ip-address.spec.js +498 -0
  100. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  101. package/lib/azure-resourcegroup/test/resource-group.integ.js +23 -11
  102. package/lib/azure-storageaccount/lib/storage-account-schemas.d.ts +98 -0
  103. package/lib/azure-storageaccount/lib/storage-account-schemas.js +1 -1
  104. package/lib/azure-storageaccount/lib/storage-account.d.ts +38 -1
  105. package/lib/azure-storageaccount/lib/storage-account.js +138 -2
  106. package/lib/azure-storageaccount/test/storage-account.integ.js +91 -12
  107. package/lib/azure-subnet/index.d.ts +4 -0
  108. package/lib/azure-subnet/index.js +21 -0
  109. package/lib/azure-subnet/lib/index.d.ts +5 -0
  110. package/lib/azure-subnet/lib/index.js +22 -0
  111. package/lib/azure-subnet/lib/subnet-schemas.d.ts +32 -0
  112. package/lib/azure-subnet/lib/subnet-schemas.js +237 -0
  113. package/lib/azure-subnet/lib/subnet.d.ts +285 -0
  114. package/lib/azure-subnet/lib/subnet.js +254 -0
  115. package/lib/azure-subnet/test/subnet.integ.d.ts +11 -0
  116. package/lib/azure-subnet/test/subnet.integ.js +80 -0
  117. package/lib/azure-subnet/test/subnet.spec.d.ts +8 -0
  118. package/lib/azure-subnet/test/subnet.spec.js +396 -0
  119. package/lib/azure-virtualmachine/index.d.ts +7 -0
  120. package/lib/azure-virtualmachine/index.js +24 -0
  121. package/lib/azure-virtualmachine/lib/index.d.ts +11 -0
  122. package/lib/azure-virtualmachine/lib/index.js +38 -0
  123. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.d.ts +327 -0
  124. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.js +544 -0
  125. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +377 -0
  126. package/lib/azure-virtualmachine/lib/virtual-machine.js +462 -0
  127. package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +9 -0
  128. package/lib/azure-virtualmachine/test/virtual-machine.integ.js +220 -0
  129. package/lib/azure-virtualmachine/test/virtual-machine.spec.d.ts +9 -0
  130. package/lib/azure-virtualmachine/test/virtual-machine.spec.js +1032 -0
  131. package/lib/azure-virtualnetwork/index.d.ts +10 -0
  132. package/lib/azure-virtualnetwork/index.js +28 -0
  133. package/lib/azure-virtualnetwork/lib/index.d.ts +9 -0
  134. package/lib/azure-virtualnetwork/lib/index.js +22 -0
  135. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.d.ts +32 -0
  136. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.js +236 -0
  137. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +213 -0
  138. package/lib/azure-virtualnetwork/lib/virtual-network.js +245 -0
  139. package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +9 -0
  140. package/lib/azure-virtualnetwork/test/virtual-network.integ.js +91 -0
  141. package/lib/azure-virtualnetwork/test/virtual-network.spec.d.ts +8 -0
  142. package/lib/azure-virtualnetwork/test/virtual-network.spec.js +398 -0
  143. package/lib/azure-vmss/index.d.ts +6 -0
  144. package/lib/azure-vmss/index.js +23 -0
  145. package/lib/azure-vmss/lib/index.d.ts +9 -0
  146. package/lib/azure-vmss/lib/index.js +39 -0
  147. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +258 -0
  148. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +503 -0
  149. package/lib/azure-vmss/lib/vmss-schemas.d.ts +472 -0
  150. package/lib/azure-vmss/lib/vmss-schemas.js +444 -0
  151. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +15 -0
  152. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +261 -0
  153. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.d.ts +8 -0
  154. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +997 -0
  155. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +95 -27
  156. package/lib/core-azure/lib/azapi/azapi-resource.js +95 -58
  157. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +33 -21
  158. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +69 -27
  159. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +134 -120
  160. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +209 -59
  161. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +141 -128
  162. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +183 -36
  163. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +55 -43
  164. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +94 -26
  165. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +129 -116
  166. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +155 -32
  167. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +187 -174
  168. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +267 -48
  169. package/lib/core-azure/lib/azapi/providers-azapi/index.d.ts +10 -10
  170. package/lib/core-azure/lib/azapi/providers-azapi/index.js +1 -1
  171. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.d.ts +0 -0
  172. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +13 -0
  173. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +174 -162
  174. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +274 -14
  175. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +239 -225
  176. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +360 -76
  177. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +163 -150
  178. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +221 -46
  179. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +162 -149
  180. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +249 -50
  181. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +4 -2
  182. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  183. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  184. package/lib/index.d.ts +37 -0
  185. package/lib/index.js +40 -2
  186. package/lib/testing/index.d.ts +92 -2
  187. package/lib/testing/index.js +258 -18
  188. package/lib/testing/lib/cleanup.d.ts +229 -0
  189. package/lib/testing/lib/cleanup.js +331 -0
  190. package/lib/testing/lib/metadata.d.ts +151 -0
  191. package/lib/testing/lib/metadata.js +180 -0
  192. package/lib/testing/lib/naming.d.ts +96 -0
  193. package/lib/testing/lib/naming.js +336 -0
  194. package/node_modules/uuid/LICENSE.md +9 -0
  195. package/node_modules/uuid/README.md +510 -0
  196. package/node_modules/uuid/dist/cjs/index.d.ts +15 -0
  197. package/node_modules/uuid/dist/cjs/index.js +31 -0
  198. package/node_modules/uuid/dist/cjs/max.d.ts +2 -0
  199. package/node_modules/uuid/dist/cjs/max.js +3 -0
  200. package/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
  201. package/node_modules/uuid/dist/cjs/md5.js +13 -0
  202. package/node_modules/uuid/dist/cjs/native.d.ts +6 -0
  203. package/node_modules/uuid/dist/cjs/native.js +4 -0
  204. package/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
  205. package/node_modules/uuid/dist/cjs/nil.js +3 -0
  206. package/node_modules/uuid/dist/cjs/package.json +1 -0
  207. package/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
  208. package/node_modules/uuid/dist/cjs/parse.js +11 -0
  209. package/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
  210. package/node_modules/uuid/dist/cjs/regex.js +3 -0
  211. package/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
  212. package/node_modules/uuid/dist/cjs/rng.js +13 -0
  213. package/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
  214. package/node_modules/uuid/dist/cjs/sha1.js +13 -0
  215. package/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
  216. package/node_modules/uuid/dist/cjs/stringify.js +39 -0
  217. package/node_modules/uuid/dist/cjs/types.d.ts +21 -0
  218. package/node_modules/uuid/dist/cjs/types.js +2 -0
  219. package/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
  220. package/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
  221. package/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
  222. package/node_modules/uuid/dist/cjs/v1.js +87 -0
  223. package/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
  224. package/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
  225. package/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
  226. package/node_modules/uuid/dist/cjs/v3.js +14 -0
  227. package/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
  228. package/node_modules/uuid/dist/cjs/v35.js +41 -0
  229. package/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
  230. package/node_modules/uuid/dist/cjs/v4.js +29 -0
  231. package/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
  232. package/node_modules/uuid/dist/cjs/v5.js +14 -0
  233. package/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
  234. package/node_modules/uuid/dist/cjs/v6.js +19 -0
  235. package/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
  236. package/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
  237. package/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
  238. package/node_modules/uuid/dist/cjs/v7.js +69 -0
  239. package/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
  240. package/node_modules/uuid/dist/cjs/validate.js +7 -0
  241. package/node_modules/uuid/dist/cjs/version.d.ts +2 -0
  242. package/node_modules/uuid/dist/cjs/version.js +10 -0
  243. package/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
  244. package/node_modules/uuid/dist/cjs-browser/index.js +31 -0
  245. package/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
  246. package/node_modules/uuid/dist/cjs-browser/max.js +3 -0
  247. package/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
  248. package/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
  249. package/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
  250. package/node_modules/uuid/dist/cjs-browser/native.js +4 -0
  251. package/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
  252. package/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
  253. package/node_modules/uuid/dist/cjs-browser/package.json +1 -0
  254. package/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
  255. package/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
  256. package/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
  257. package/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
  258. package/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
  259. package/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
  260. package/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
  261. package/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
  262. package/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
  263. package/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
  264. package/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
  265. package/node_modules/uuid/dist/cjs-browser/types.js +2 -0
  266. package/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
  267. package/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
  268. package/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
  269. package/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
  270. package/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
  271. package/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
  272. package/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
  273. package/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
  274. package/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
  275. package/node_modules/uuid/dist/cjs-browser/v35.js +41 -0
  276. package/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
  277. package/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
  278. package/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
  279. package/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
  280. package/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
  281. package/node_modules/uuid/dist/cjs-browser/v6.js +19 -0
  282. package/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
  283. package/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
  284. package/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
  285. package/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
  286. package/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
  287. package/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
  288. package/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
  289. package/node_modules/uuid/dist/cjs-browser/version.js +10 -0
  290. package/node_modules/uuid/dist/esm/bin/uuid +2 -0
  291. package/node_modules/uuid/dist/esm/index.d.ts +15 -0
  292. package/node_modules/uuid/dist/esm/index.js +14 -0
  293. package/node_modules/uuid/dist/esm/max.d.ts +2 -0
  294. package/node_modules/uuid/dist/esm/max.js +1 -0
  295. package/node_modules/uuid/dist/esm/md5.d.ts +4 -0
  296. package/node_modules/uuid/dist/esm/md5.js +11 -0
  297. package/node_modules/uuid/dist/esm/native.d.ts +6 -0
  298. package/node_modules/uuid/dist/esm/native.js +2 -0
  299. package/node_modules/uuid/dist/esm/nil.d.ts +2 -0
  300. package/node_modules/uuid/dist/esm/nil.js +1 -0
  301. package/node_modules/uuid/dist/esm/parse.d.ts +2 -0
  302. package/node_modules/uuid/dist/esm/parse.js +9 -0
  303. package/node_modules/uuid/dist/esm/regex.d.ts +2 -0
  304. package/node_modules/uuid/dist/esm/regex.js +1 -0
  305. package/node_modules/uuid/dist/esm/rng.d.ts +1 -0
  306. package/node_modules/uuid/dist/esm/rng.js +10 -0
  307. package/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
  308. package/node_modules/uuid/dist/esm/sha1.js +11 -0
  309. package/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
  310. package/node_modules/uuid/dist/esm/stringify.js +35 -0
  311. package/node_modules/uuid/dist/esm/types.d.ts +21 -0
  312. package/node_modules/uuid/dist/esm/types.js +1 -0
  313. package/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
  314. package/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
  315. package/node_modules/uuid/dist/esm/v1.d.ts +11 -0
  316. package/node_modules/uuid/dist/esm/v1.js +83 -0
  317. package/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
  318. package/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
  319. package/node_modules/uuid/dist/esm/v3.d.ts +9 -0
  320. package/node_modules/uuid/dist/esm/v3.js +9 -0
  321. package/node_modules/uuid/dist/esm/v35.d.ts +7 -0
  322. package/node_modules/uuid/dist/esm/v35.js +36 -0
  323. package/node_modules/uuid/dist/esm/v4.d.ts +4 -0
  324. package/node_modules/uuid/dist/esm/v4.js +27 -0
  325. package/node_modules/uuid/dist/esm/v5.d.ts +9 -0
  326. package/node_modules/uuid/dist/esm/v5.js +9 -0
  327. package/node_modules/uuid/dist/esm/v6.d.ts +4 -0
  328. package/node_modules/uuid/dist/esm/v6.js +17 -0
  329. package/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
  330. package/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
  331. package/node_modules/uuid/dist/esm/v7.d.ts +9 -0
  332. package/node_modules/uuid/dist/esm/v7.js +65 -0
  333. package/node_modules/uuid/dist/esm/validate.d.ts +2 -0
  334. package/node_modules/uuid/dist/esm/validate.js +5 -0
  335. package/node_modules/uuid/dist/esm/version.d.ts +2 -0
  336. package/node_modules/uuid/dist/esm/version.js +8 -0
  337. package/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
  338. package/node_modules/uuid/dist/esm-browser/index.js +14 -0
  339. package/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
  340. package/node_modules/uuid/dist/esm-browser/max.js +1 -0
  341. package/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
  342. package/node_modules/uuid/dist/esm-browser/md5.js +135 -0
  343. package/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
  344. package/node_modules/uuid/dist/esm-browser/native.js +2 -0
  345. package/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
  346. package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
  347. package/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
  348. package/node_modules/uuid/dist/esm-browser/parse.js +9 -0
  349. package/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
  350. package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
  351. package/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
  352. package/node_modules/uuid/dist/esm-browser/rng.js +11 -0
  353. package/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
  354. package/node_modules/uuid/dist/esm-browser/sha1.js +70 -0
  355. package/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
  356. package/node_modules/uuid/dist/esm-browser/stringify.js +35 -0
  357. package/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
  358. package/node_modules/uuid/dist/esm-browser/types.js +1 -0
  359. package/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
  360. package/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
  361. package/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
  362. package/node_modules/uuid/dist/esm-browser/v1.js +83 -0
  363. package/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
  364. package/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
  365. package/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
  366. package/node_modules/uuid/dist/esm-browser/v3.js +9 -0
  367. package/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
  368. package/node_modules/uuid/dist/esm-browser/v35.js +36 -0
  369. package/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
  370. package/node_modules/uuid/dist/esm-browser/v4.js +27 -0
  371. package/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
  372. package/node_modules/uuid/dist/esm-browser/v5.js +9 -0
  373. package/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
  374. package/node_modules/uuid/dist/esm-browser/v6.js +17 -0
  375. package/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
  376. package/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
  377. package/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
  378. package/node_modules/uuid/dist/esm-browser/v7.js +65 -0
  379. package/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
  380. package/node_modules/uuid/dist/esm-browser/validate.js +5 -0
  381. package/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
  382. package/node_modules/uuid/dist/esm-browser/version.js +8 -0
  383. package/node_modules/uuid/package.json +132 -0
  384. package/package.json +17 -12
  385. package/scripts/cleanup-test-resources.ts +369 -0
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Test run metadata management
3
+ *
4
+ * Provides classes and utilities for generating and managing
5
+ * integration test metadata including unique IDs, timestamps,
6
+ * CI context, and system tags.
7
+ */
8
+ /**
9
+ * CI/CD pipeline context
10
+ *
11
+ * Extracted from environment variables during test execution.
12
+ * Enables tracing resources back to specific pipeline runs.
13
+ */
14
+ export interface CIContext {
15
+ /**
16
+ * CI platform ('github-actions', 'azure-devops', 'generic-ci', 'local')
17
+ */
18
+ readonly platform: string;
19
+ /**
20
+ * GitHub Actions workflow ID or equivalent
21
+ */
22
+ readonly pipelineId?: string;
23
+ /**
24
+ * GitHub Actions run ID or equivalent
25
+ */
26
+ readonly runId?: string;
27
+ /**
28
+ * GitHub Actions run number or equivalent
29
+ */
30
+ readonly runNumber?: string;
31
+ /**
32
+ * Git commit SHA (full)
33
+ */
34
+ readonly commitSha?: string;
35
+ /**
36
+ * Git commit SHA (short, 7 chars)
37
+ */
38
+ readonly commitShaShort?: string;
39
+ /**
40
+ * Git branch name
41
+ */
42
+ readonly branch?: string;
43
+ /**
44
+ * Git repository name
45
+ */
46
+ readonly repository?: string;
47
+ }
48
+ /**
49
+ * Integration test system tags
50
+ *
51
+ * Returns a record of tag key-value pairs for Azure resources.
52
+ * Uses Azure tag naming conventions with colons and hyphens.
53
+ */
54
+ export type IntegrationTestTags = Record<string, string>;
55
+ /**
56
+ * Test run configuration options
57
+ */
58
+ export interface TestRunOptions {
59
+ /**
60
+ * Maximum age in hours before cleanup eligible (default: 4)
61
+ */
62
+ readonly maxAgeHours?: number;
63
+ /**
64
+ * Enable automated cleanup (default: true)
65
+ */
66
+ readonly autoCleanup?: boolean;
67
+ /**
68
+ * Cleanup policy (default: 'immediate')
69
+ */
70
+ readonly cleanupPolicy?: "immediate" | "delayed" | "manual";
71
+ }
72
+ /**
73
+ * Metadata for an integration test run
74
+ *
75
+ * Generated once per test execution and shared across all resources
76
+ * in that test. Provides unique identification, temporal tracking,
77
+ * and CI/CD context.
78
+ */
79
+ export declare class TestRunMetadata {
80
+ /**
81
+ * Unique identifier for this test run (UUID v4)
82
+ */
83
+ readonly runId: string;
84
+ /**
85
+ * Sanitized test name from the describe block
86
+ */
87
+ readonly testName: string;
88
+ /**
89
+ * Timestamp when the test run started
90
+ */
91
+ readonly createdAt: Date;
92
+ /**
93
+ * Cleanup after timestamp (createdAt + maxAgeHours)
94
+ */
95
+ readonly cleanupAfter: Date;
96
+ /**
97
+ * Maximum age in hours before cleanup eligible
98
+ */
99
+ readonly maxAgeHours: number;
100
+ /**
101
+ * Enable automated cleanup
102
+ */
103
+ readonly autoCleanup: boolean;
104
+ /**
105
+ * Cleanup policy
106
+ */
107
+ readonly cleanupPolicy: "immediate" | "delayed" | "manual";
108
+ /**
109
+ * CI/CD context (populated from environment variables)
110
+ */
111
+ readonly ciContext?: CIContext;
112
+ /**
113
+ * Creates new test run metadata
114
+ *
115
+ * @param testName - Test name (will be sanitized)
116
+ * @param options - Optional configuration
117
+ */
118
+ constructor(testName: string, options?: TestRunOptions);
119
+ /**
120
+ * Generates system tags for resources
121
+ *
122
+ * @returns Integration test system tags
123
+ */
124
+ generateSystemTags(): Record<string, string>;
125
+ /**
126
+ * Checks if resources from this run are eligible for cleanup
127
+ *
128
+ * @param now - Current time (defaults to now)
129
+ * @returns Whether cleanup is eligible
130
+ */
131
+ isCleanupEligible(now?: Date): boolean;
132
+ /**
133
+ * Serializes metadata to JSON for logging
134
+ *
135
+ * @returns JSON-serializable object
136
+ */
137
+ toJSON(): Record<string, any>;
138
+ /**
139
+ * Sanitizes test name to be Azure-compliant
140
+ *
141
+ * @param name - Raw test name
142
+ * @returns Sanitized name
143
+ */
144
+ private sanitizeTestName;
145
+ }
146
+ /**
147
+ * Detects and extracts CI context from environment
148
+ *
149
+ * @returns CI context or undefined if not in CI
150
+ */
151
+ export declare function detectCIContext(): CIContext | undefined;
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TestRunMetadata = void 0;
5
+ exports.detectCIContext = detectCIContext;
6
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
+ /**
8
+ * Test run metadata management
9
+ *
10
+ * Provides classes and utilities for generating and managing
11
+ * integration test metadata including unique IDs, timestamps,
12
+ * CI context, and system tags.
13
+ */
14
+ const uuid_1 = require("uuid");
15
+ /**
16
+ * Metadata for an integration test run
17
+ *
18
+ * Generated once per test execution and shared across all resources
19
+ * in that test. Provides unique identification, temporal tracking,
20
+ * and CI/CD context.
21
+ */
22
+ class TestRunMetadata {
23
+ /**
24
+ * Creates new test run metadata
25
+ *
26
+ * @param testName - Test name (will be sanitized)
27
+ * @param options - Optional configuration
28
+ */
29
+ constructor(testName, options) {
30
+ this.runId = (0, uuid_1.v4)();
31
+ this.testName = this.sanitizeTestName(testName);
32
+ this.createdAt = new Date();
33
+ this.maxAgeHours = options?.maxAgeHours ?? 4;
34
+ this.autoCleanup = options?.autoCleanup ?? true;
35
+ this.cleanupPolicy = options?.cleanupPolicy ?? "immediate";
36
+ this.cleanupAfter = new Date(this.createdAt.getTime() + this.maxAgeHours * 60 * 60 * 1000);
37
+ this.ciContext = detectCIContext();
38
+ }
39
+ /**
40
+ * Generates system tags for resources
41
+ *
42
+ * @returns Integration test system tags
43
+ */
44
+ generateSystemTags() {
45
+ // Build tags object with all properties
46
+ const tags = {
47
+ // Resource Identification
48
+ "test:run-id": this.runId,
49
+ "test:name": this.testName,
50
+ "test:resource-type": "integration-test",
51
+ // Temporal Tracking
52
+ "test:created-at": this.createdAt.toISOString(),
53
+ "test:cleanup-after": this.cleanupAfter.toISOString(),
54
+ "test:max-age-hours": this.maxAgeHours.toString(),
55
+ // Lifecycle Management
56
+ "test:managed-by": "terraform-cdk-constructs-tests",
57
+ "test:auto-cleanup": this.autoCleanup.toString(),
58
+ "test:cleanup-policy": this.cleanupPolicy,
59
+ // Backward Compatibility
60
+ environment: "integration-test",
61
+ purpose: "integration-test",
62
+ };
63
+ // Add CI/CD context if available
64
+ if (this.ciContext) {
65
+ if (this.ciContext.pipelineId) {
66
+ tags["test:ci-pipeline"] = this.ciContext.pipelineId;
67
+ }
68
+ if (this.ciContext.runId) {
69
+ tags["test:ci-run-id"] = this.ciContext.runId;
70
+ }
71
+ if (this.ciContext.runNumber) {
72
+ tags["test:ci-run-number"] = this.ciContext.runNumber;
73
+ }
74
+ if (this.ciContext.commitShaShort) {
75
+ tags["test:git-commit"] = this.ciContext.commitShaShort;
76
+ }
77
+ if (this.ciContext.branch) {
78
+ tags["test:git-branch"] = this.ciContext.branch;
79
+ }
80
+ }
81
+ return tags;
82
+ }
83
+ /**
84
+ * Checks if resources from this run are eligible for cleanup
85
+ *
86
+ * @param now - Current time (defaults to now)
87
+ * @returns Whether cleanup is eligible
88
+ */
89
+ isCleanupEligible(now) {
90
+ const currentTime = now || new Date();
91
+ return currentTime >= this.cleanupAfter;
92
+ }
93
+ /**
94
+ * Serializes metadata to JSON for logging
95
+ *
96
+ * @returns JSON-serializable object
97
+ */
98
+ toJSON() {
99
+ return {
100
+ runId: this.runId,
101
+ testName: this.testName,
102
+ createdAt: this.createdAt.toISOString(),
103
+ cleanupAfter: this.cleanupAfter.toISOString(),
104
+ maxAgeHours: this.maxAgeHours,
105
+ autoCleanup: this.autoCleanup,
106
+ cleanupPolicy: this.cleanupPolicy,
107
+ ciContext: this.ciContext,
108
+ };
109
+ }
110
+ /**
111
+ * Sanitizes test name to be Azure-compliant
112
+ *
113
+ * @param name - Raw test name
114
+ * @returns Sanitized name
115
+ */
116
+ sanitizeTestName(name) {
117
+ let sanitized = name
118
+ .toLowerCase()
119
+ // Replace spaces and special characters with hyphens
120
+ .replace(/[^a-z0-9-]/g, "-")
121
+ // Remove consecutive hyphens
122
+ .replace(/-+/g, "-")
123
+ // Remove leading/trailing hyphens
124
+ .replace(/^-+|-+$/g, "");
125
+ // Truncate to 63 characters (DNS label limit)
126
+ if (sanitized.length > 63) {
127
+ sanitized = sanitized.substring(0, 63).replace(/-+$/, "");
128
+ }
129
+ return sanitized;
130
+ }
131
+ }
132
+ exports.TestRunMetadata = TestRunMetadata;
133
+ _a = JSII_RTTI_SYMBOL_1;
134
+ TestRunMetadata[_a] = { fqn: "@microsoft/terraform-cdk-constructs.TestRunMetadata", version: "1.2.0" };
135
+ /**
136
+ * Detects and extracts CI context from environment
137
+ *
138
+ * @returns CI context or undefined if not in CI
139
+ */
140
+ function detectCIContext() {
141
+ // Detect GitHub Actions
142
+ if (process.env.GITHUB_ACTIONS === "true") {
143
+ return {
144
+ platform: "github-actions",
145
+ pipelineId: process.env.GITHUB_WORKFLOW,
146
+ runId: process.env.GITHUB_RUN_ID,
147
+ runNumber: process.env.GITHUB_RUN_NUMBER,
148
+ commitSha: process.env.GITHUB_SHA,
149
+ commitShaShort: process.env.GITHUB_SHA?.substring(0, 7),
150
+ branch: process.env.GITHUB_REF_NAME,
151
+ repository: process.env.GITHUB_REPOSITORY,
152
+ };
153
+ }
154
+ // Detect Azure DevOps
155
+ if (process.env.TF_BUILD === "True") {
156
+ return {
157
+ platform: "azure-devops",
158
+ pipelineId: process.env.BUILD_DEFINITIONNAME,
159
+ runId: process.env.BUILD_BUILDID,
160
+ runNumber: process.env.BUILD_BUILDNUMBER,
161
+ commitSha: process.env.BUILD_SOURCEVERSION,
162
+ commitShaShort: process.env.BUILD_SOURCEVERSION?.substring(0, 7),
163
+ branch: process.env.BUILD_SOURCEBRANCHNAME,
164
+ repository: process.env.BUILD_REPOSITORY_NAME,
165
+ };
166
+ }
167
+ // Detect generic CI
168
+ if (process.env.CI === "true") {
169
+ return {
170
+ platform: "generic-ci",
171
+ commitShaShort: "ci",
172
+ };
173
+ }
174
+ // Local execution
175
+ return {
176
+ platform: "local",
177
+ commitShaShort: "local",
178
+ };
179
+ }
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9saWIvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXNRQSwwQ0EwQ0M7O0FBaFREOzs7Ozs7R0FNRztBQUVILCtCQUFvQztBQThFcEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxlQUFlO0lBeUMxQjs7Ozs7T0FLRztJQUNILFlBQVksUUFBZ0IsRUFBRSxPQUF3QjtRQUNwRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUEsU0FBTSxHQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxhQUFhLElBQUksV0FBVyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FDN0QsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxrQkFBa0I7UUFDdkIsd0NBQXdDO1FBQ3hDLE1BQU0sSUFBSSxHQUEyQjtZQUNuQywwQkFBMEI7WUFDMUIsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUMxQixvQkFBb0Is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LG1CQUFtQjtZQUMxQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0I7WUFDMUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCO1NBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU87UUFDTCxRQUFRLEVBQUUsT0FBTztRQUNqQixjQUFjLEVBQUUsT0FBTztLQUN4QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdCBydW4gbWV0YWRhdGEgbWFuYWdlbWVudFxuICpcbiAqIFByb3ZpZGVzIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBmb3IgZ2VuZXJhdGluZyBhbmQgbWFuYWdpbmdcbiAqIGludGVncmF0aW9uIHRlc3QgbWV0YWRhdGEgaW5jbHVkaW5nIHVuaXF1ZSBJRHMsIHRpbWVzdGFtcHMsXG4gKiBDSSBjb250ZXh0LCBhbmQgc3lzdGVtIHRhZ3MuXG4gKi9cblxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcblxuLyoqXG4gKiBDSS9DRCBwaXBlbGluZSBjb250ZXh0XG4gKlxuICogRXh0cmFjdGVkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGR1cmluZyB0ZXN0IGV4ZWN1dGlvbi5cbiAqIEVuYWJsZXMgdHJhY2luZyByZXNvdXJjZXMgYmFjayB0byBzcGVjaWZpYyBwaXBlbGluZSBydW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENJQ29udGV4dCB7XG4gIC8qKlxuICAgKiBDSSBwbGF0Zm9ybSAoJ2dpdGh1Yi1hY3Rpb25zJywgJ2F6dXJlLWRldm9wcycsICdnZW5lcmljLWNpJywgJ2xvY2FsJylcbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93IElEIG9yIGVxdWl2YWxlbnRcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIHJ1biBJRCBvciBlcXVpdmFsZW50XG4gICAqL1xuICByZWFkb25seSBydW5JZD86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIEFjdGlvbnMgcnVuIG51bWJlciBvciBlcXVpdmFsZW50XG4gICAqL1xuICByZWFkb25seSBydW5OdW1iZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCBjb21taXQgU0hBIChmdWxsKVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0U2hhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXQgY29tbWl0IFNIQSAoc2hvcnQsIDcgY2hhcnMpXG4gICAqL1xuICByZWFkb25seSBjb21taXRTaGFTaG9ydD86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0IGJyYW5jaCBuYW1lXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCByZXBvc2l0b3J5IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBzeXN0ZW0gdGFnc1xuICpcbiAqIFJldHVybnMgYSByZWNvcmQgb2YgdGFnIGtleS12YWx1ZSBwYWlycyBmb3IgQXp1cmUgcmVzb3VyY2VzLlxuICogVXNlcyBBenVyZSB0YWcgbmFtaW5nIGNvbnZlbnRpb25zIHdpdGggY29sb25zIGFuZCBoeXBoZW5zLlxuICovXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvblRlc3RUYWdzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuLyoqXG4gKiBUZXN0IHJ1biBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0UnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGFnZSBpbiBob3VycyBiZWZvcmUgY2xlYW51cCBlbGlnaWJsZSAoZGVmYXVsdDogNClcbiAgICovXG4gIHJlYWRvbmx5IG1heEFnZUhvdXJzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgYXV0b21hdGVkIGNsZWFudXAgKGRlZmF1bHQ6IHRydWUpXG4gICAqL1xuICByZWFkb25seSBhdXRvQ2xlYW51cD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENsZWFudXAgcG9saWN5IChkZWZhdWx0OiAnaW1tZWRpYXRlJylcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFudXBQb2xpY3k/OiBcImltbWVkaWF0ZVwiIHwgXCJkZWxheWVkXCIgfCBcIm1hbnVhbFwiO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhbiBpbnRlZ3JhdGlvbiB0ZXN0IHJ1blxuICpcbiAqIEdlbmVyYXRlZCBvbmNlIHBlciB0ZXN0IGV4ZWN1dGlvbiBhbmQgc2hhcmVkIGFjcm9zcyBhbGwgcmVzb3VyY2VzXG4gKiBpbiB0aGF0IHRlc3QuIFByb3ZpZGVzIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiwgdGVtcG9yYWwgdHJhY2tpbmcsXG4gKiBhbmQgQ0kvQ0QgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlc3RSdW5NZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyB0ZXN0IHJ1biAoVVVJRCB2NClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZWQgdGVzdCBuYW1lIGZyb20gdGhlIGRlc2NyaWJlIGJsb2NrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIHRlc3QgcnVuIHN0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ6IERhdGU7XG5cbiAgLyoqXG4gICAqIENsZWFudXAgYWZ0ZXIgdGltZXN0YW1wIChjcmVhdGVkQXQgKyBtYXhBZ2VIb3VycylcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjbGVhbnVwQWZ0ZXI6IERhdGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gYWdlIGluIGhvdXJzIGJlZm9yZSBjbGVhbnVwIGVsaWdpYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4QWdlSG91cnM6IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGF1dG9tYXRlZCBjbGVhbnVwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b0NsZWFudXA6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENsZWFudXAgcG9saWN5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYW51cFBvbGljeTogXCJpbW1lZGlhdGVcIiB8IFwiZGVsYXllZFwiIHwgXCJtYW51YWxcIjtcblxuICAvKipcbiAgICogQ0kvQ0QgY29udGV4dCAocG9wdWxhdGVkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpQ29udGV4dD86IENJQ29udGV4dDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBuZXcgdGVzdCBydW4gbWV0YWRhdGFcbiAgICpcbiAgICogQHBhcmFtIHRlc3ROYW1lIC0gVGVzdCBuYW1lICh3aWxsIGJlIHNhbml0aXplZClcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0ZXN0TmFtZTogc3RyaW5nLCBvcHRpb25zPzogVGVzdFJ1bk9wdGlvbnMpIHtcbiAgICB0aGlzLnJ1bklkID0gdXVpZHY0KCk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMuc2FuaXRpemVUZXN0TmFtZSh0ZXN0TmFtZSk7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMubWF4QWdlSG91cnMgPSBvcHRpb25zPy5tYXhBZ2VIb3VycyA/PyA0O1xuICAgIHRoaXMuYXV0b0NsZWFudXAgPSBvcHRpb25zPy5hdXRvQ2xlYW51cCA/PyB0cnVlO1xuICAgIHRoaXMuY2xlYW51cFBvbGljeSA9IG9wdGlvbnM/LmNsZWFudXBQb2xpY3kgPz8gXCJpbW1lZGlhdGVcIjtcbiAgICB0aGlzLmNsZWFudXBBZnRlciA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5jcmVhdGVkQXQuZ2V0VGltZSgpICsgdGhpcy5tYXhBZ2VIb3VycyAqIDYwICogNjAgKiAxMDAwLFxuICAgICk7XG4gICAgdGhpcy5jaUNvbnRleHQgPSBkZXRlY3RDSUNvbnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgc3lzdGVtIHRhZ3MgZm9yIHJlc291cmNlc1xuICAgKlxuICAgKiBAcmV0dXJucyBJbnRlZ3JhdGlvbiB0ZXN0IHN5c3RlbSB0YWdzXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVTeXN0ZW1UYWdzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIC8vIEJ1aWxkIHRhZ3Mgb2JqZWN0IHdpdGggYWxsIHByb3BlcnRpZXNcbiAgICBjb25zdCB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLy8gUmVzb3VyY2UgSWRlbnRpZmljYXRpb25cbiAgICAgIFwidGVzdDpydW4taWRcIjogdGhpcy5ydW5JZCxcbiAgICAgIFwidGVzdDpuYW1lXCI6IHRoaXMudGVzdE5hbWUsXG4gICAgICBcInRlc3Q6cmVzb3VyY2UtdHlwZVwiOiBcImludGVncmF0aW9uLXRlc3RcIixcblxuICAgICAgLy8gVGVtcG9yYWwgVHJhY2tpbmdcbiAgICAgIFwidGVzdDpjcmVhdGVkLWF0XCI6IHRoaXMuY3JlYXRlZEF0LnRvSVNPU3RyaW5nKCksXG4gICAgICBcInRlc3Q6Y2xlYW51cC1hZnRlclwiOiB0aGlzLmNsZWFudXBBZnRlci50b0lTT1N0cmluZygpLFxuICAgICAgXCJ0ZXN0Om1heC1hZ2UtaG91cnNcIjogdGhpcy5tYXhBZ2VIb3Vycy50b1N0cmluZygpLFxuXG4gICAgICAvLyBMaWZlY3ljbGUgTWFuYWdlbWVudFxuICAgICAgXCJ0ZXN0Om1hbmFnZWQtYnlcIjogXCJ0ZXJyYWZvcm0tY2RrLWNvbnN0cnVjdHMtdGVzdHNcIixcbiAgICAgIFwidGVzdDphdXRvLWNsZWFudXBcIjogdGhpcy5hdXRvQ2xlYW51cC50b1N0cmluZygpLFxuICAgICAgXCJ0ZXN0OmNsZWFudXAtcG9saWN5XCI6IHRoaXMuY2xlYW51cFBvbGljeSxcblxuICAgICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eVxuICAgICAgZW52aXJvbm1lbnQ6IFwiaW50ZWdyYXRpb24tdGVzdFwiLFxuICAgICAgcHVycG9zZTogXCJpbnRlZ3JhdGlvbi10ZXN0XCIsXG4gICAgfTtcblxuICAgIC8vIEFkZCBDSS9DRCBjb250ZXh0IGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmNpQ29udGV4dCkge1xuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LnBpcGVsaW5lSWQpIHtcbiAgICAgICAgdGFnc1tcInRlc3Q6Y2ktcGlwZWxpbmVcIl0gPSB0aGlzLmNpQ29udGV4dC5waXBlbGluZUlkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LnJ1bklkKSB7XG4gICAgICAgIHRhZ3NbXCJ0ZXN0OmNpLXJ1bi1pZFwiXSA9IHRoaXMuY2lDb250ZXh0LnJ1bklkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LnJ1bk51bWJlcikge1xuICAgICAgICB0YWdzW1widGVzdDpjaS1ydW4tbnVtYmVyXCJdID0gdGhpcy5jaUNvbnRleHQucnVuTnVtYmVyO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LmNvbW1pdFNoYVNob3J0KSB7XG4gICAgICAgIHRhZ3NbXCJ0ZXN0OmdpdC1jb21taXRcIl0gPSB0aGlzLmNpQ29udGV4dC5jb21taXRTaGFTaG9ydDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNpQ29udGV4dC5icmFuY2gpIHtcbiAgICAgICAgdGFnc1tcInRlc3Q6Z2l0LWJyYW5jaFwiXSA9IHRoaXMuY2lDb250ZXh0LmJyYW5jaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFncyBhcyBJbnRlZ3JhdGlvblRlc3RUYWdzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiByZXNvdXJjZXMgZnJvbSB0aGlzIHJ1biBhcmUgZWxpZ2libGUgZm9yIGNsZWFudXBcbiAgICpcbiAgICogQHBhcmFtIG5vdyAtIEN1cnJlbnQgdGltZSAoZGVmYXVsdHMgdG8gbm93KVxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGNsZWFudXAgaXMgZWxpZ2libGVcbiAgICovXG4gIHB1YmxpYyBpc0NsZWFudXBFbGlnaWJsZShub3c/OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cgfHwgbmV3IERhdGUoKTtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgPj0gdGhpcy5jbGVhbnVwQWZ0ZXI7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBtZXRhZGF0YSB0byBKU09OIGZvciBsb2dnaW5nXG4gICAqXG4gICAqIEByZXR1cm5zIEpTT04tc2VyaWFsaXphYmxlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuSWQ6IHRoaXMucnVuSWQsXG4gICAgICB0ZXN0TmFtZTogdGhpcy50ZXN0TmFtZSxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQudG9JU09TdHJpbmcoKSxcbiAgICAgIGNsZWFudXBBZnRlcjogdGhpcy5jbGVhbnVwQWZ0ZXIudG9JU09TdHJpbmcoKSxcbiAgICAgIG1heEFnZUhvdXJzOiB0aGlzLm1heEFnZUhvdXJzLFxuICAgICAgYXV0b0NsZWFudXA6IHRoaXMuYXV0b0NsZWFudXAsXG4gICAgICBjbGVhbnVwUG9saWN5OiB0aGlzLmNsZWFudXBQb2xpY3ksXG4gICAgICBjaUNvbnRleHQ6IHRoaXMuY2lDb250ZXh0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemVzIHRlc3QgbmFtZSB0byBiZSBBenVyZS1jb21wbGlhbnRcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBSYXcgdGVzdCBuYW1lXG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBuYW1lXG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplVGVzdE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgc2FuaXRpemVkID0gbmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC8vIFJlcGxhY2Ugc3BhY2VzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgd2l0aCBoeXBoZW5zXG4gICAgICAucmVwbGFjZSgvW15hLXowLTktXS9nLCBcIi1cIilcbiAgICAgIC8vIFJlbW92ZSBjb25zZWN1dGl2ZSBoeXBoZW5zXG4gICAgICAucmVwbGFjZSgvLSsvZywgXCItXCIpXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZy90cmFpbGluZyBoeXBoZW5zXG4gICAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKTtcblxuICAgIC8vIFRydW5jYXRlIHRvIDYzIGNoYXJhY3RlcnMgKEROUyBsYWJlbCBsaW1pdClcbiAgICBpZiAoc2FuaXRpemVkLmxlbmd0aCA+IDYzKSB7XG4gICAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKDAsIDYzKS5yZXBsYWNlKC8tKyQvLCBcIlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0cyBhbmQgZXh0cmFjdHMgQ0kgY29udGV4dCBmcm9tIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybnMgQ0kgY29udGV4dCBvciB1bmRlZmluZWQgaWYgbm90IGluIENJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RDSUNvbnRleHQoKTogQ0lDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgLy8gRGV0ZWN0IEdpdEh1YiBBY3Rpb25zXG4gIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OUyA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IFwiZ2l0aHViLWFjdGlvbnNcIixcbiAgICAgIHBpcGVsaW5lSWQ6IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVyxcbiAgICAgIHJ1bklkOiBwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lELFxuICAgICAgcnVuTnVtYmVyOiBwcm9jZXNzLmVudi5HSVRIVUJfUlVOX05VTUJFUixcbiAgICAgIGNvbW1pdFNoYTogcHJvY2Vzcy5lbnYuR0lUSFVCX1NIQSxcbiAgICAgIGNvbW1pdFNoYVNob3J0OiBwcm9jZXNzLmVudi5HSVRIVUJfU0hBPy5zdWJzdHJpbmcoMCwgNyksXG4gICAgICBicmFuY2g6IHByb2Nlc3MuZW52LkdJVEhVQl9SRUZfTkFNRSxcbiAgICAgIHJlcG9zaXRvcnk6IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLFxuICAgIH07XG4gIH1cblxuICAvLyBEZXRlY3QgQXp1cmUgRGV2T3BzXG4gIGlmIChwcm9jZXNzLmVudi5URl9CVUlMRCA9PT0gXCJUcnVlXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IFwiYXp1cmUtZGV2b3BzXCIsXG4gICAgICBwaXBlbGluZUlkOiBwcm9jZXNzLmVudi5CVUlMRF9ERUZJTklUSU9OTkFNRSxcbiAgICAgIHJ1bklkOiBwcm9jZXNzLmVudi5CVUlMRF9CVUlMRElELFxuICAgICAgcnVuTnVtYmVyOiBwcm9jZXNzLmVudi5CVUlMRF9CVUlMRE5VTUJFUixcbiAgICAgIGNvbW1pdFNoYTogcHJvY2Vzcy5lbnYuQlVJTERfU09VUkNFVkVSU0lPTixcbiAgICAgIGNvbW1pdFNoYVNob3J0OiBwcm9jZXNzLmVudi5CVUlMRF9TT1VSQ0VWRVJTSU9OPy5zdWJzdHJpbmcoMCwgNyksXG4gICAgICBicmFuY2g6IHByb2Nlc3MuZW52LkJVSUxEX1NPVVJDRUJSQU5DSE5BTUUsXG4gICAgICByZXBvc2l0b3J5OiBwcm9jZXNzLmVudi5CVUlMRF9SRVBPU0lUT1JZX05BTUUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIERldGVjdCBnZW5lcmljIENJXG4gIGlmIChwcm9jZXNzLmVudi5DSSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IFwiZ2VuZXJpYy1jaVwiLFxuICAgICAgY29tbWl0U2hhU2hvcnQ6IFwiY2lcIixcbiAgICB9O1xuICB9XG5cbiAgLy8gTG9jYWwgZXhlY3V0aW9uXG4gIHJldHVybiB7XG4gICAgcGxhdGZvcm06IFwibG9jYWxcIixcbiAgICBjb21taXRTaGFTaG9ydDogXCJsb2NhbFwiLFxuICB9O1xufVxuIl19
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Resource naming utilities for integration tests
3
+ *
4
+ * Provides functions for generating unique, Azure-compliant
5
+ * resource names with proper length constraints and character restrictions.
6
+ */
7
+ /**
8
+ * Azure resource naming constraints
9
+ */
10
+ interface ResourceConstraints {
11
+ maxLength: number;
12
+ allowHyphens: boolean;
13
+ allowUnderscores: boolean;
14
+ allowPeriods: boolean;
15
+ casePolicy: "lower" | "upper" | "any";
16
+ allowedPattern?: RegExp;
17
+ }
18
+ /**
19
+ * Options for generating resource names
20
+ */
21
+ export interface NameGenerationOptions {
22
+ /**
23
+ * Azure resource type (e.g., 'Microsoft.Resources/resourceGroups')
24
+ */
25
+ resourceType: string;
26
+ /**
27
+ * Test name or identifier
28
+ */
29
+ testName: string;
30
+ /**
31
+ * Test run UUID
32
+ */
33
+ runId: string;
34
+ /**
35
+ * Optional custom identifier to include in name
36
+ */
37
+ customIdentifier?: string;
38
+ }
39
+ /**
40
+ * Generates a unique, Azure-compliant resource name
41
+ *
42
+ * Creates names in format: {prefix}-{identifier}-{suffix} or
43
+ * {prefix}{identifier}{suffix} depending on resource constraints.
44
+ *
45
+ * @param options - Name generation options
46
+ * @returns Azure-compliant resource name
47
+ *
48
+ * @example
49
+ * generateResourceName({
50
+ * resourceType: 'Microsoft.Resources/resourceGroups',
51
+ * testName: 'storage-test',
52
+ * runId: 'a1b2c3d4-e5f6-4789-b012-3456789abcde'
53
+ * });
54
+ * // Returns: 'rg-storage-test-a1b2c3'
55
+ *
56
+ * generateResourceName({
57
+ * resourceType: 'Microsoft.Storage/storageAccounts',
58
+ * testName: 'basic-test',
59
+ * runId: 'a1b2c3d4-e5f6-4789-b012-3456789abcde'
60
+ * });
61
+ * // Returns: 'stbasictesta1b2c3'
62
+ */
63
+ export declare function generateResourceName(options: NameGenerationOptions): string;
64
+ /**
65
+ * Gets the resource type prefix
66
+ *
67
+ * @param resourceType - Azure resource type
68
+ * @returns Short prefix for the resource type
69
+ */
70
+ export declare function getResourcePrefix(resourceType: string): string;
71
+ /**
72
+ * Sanitizes a test identifier to be Azure-compliant
73
+ *
74
+ * @param identifier - Raw identifier
75
+ * @param constraints - Resource naming constraints
76
+ * @returns Sanitized identifier
77
+ */
78
+ export declare function sanitizeIdentifier(identifier: string, constraints: ResourceConstraints): string;
79
+ /**
80
+ * Generates a short unique ID from a UUID
81
+ *
82
+ * Takes the first 6 characters of the UUID (without hyphens)
83
+ * to create a short, unique suffix.
84
+ *
85
+ * @param runId - UUID v4 run ID
86
+ * @returns Short ID (6 characters)
87
+ */
88
+ export declare function generateShortId(runId: string): string;
89
+ /**
90
+ * Gets resource naming constraints for a resource type
91
+ *
92
+ * @param resourceType - Azure resource type
93
+ * @returns Naming constraints for the resource type
94
+ */
95
+ export declare function getResourceConstraints(resourceType: string): ResourceConstraints;
96
+ export {};