@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.
- package/.jsii +60999 -15780
- package/API.md +54947 -10610
- package/README.md +72 -36
- package/docs/monitoring-guide.md +206 -0
- package/docs/testing.md +84 -1
- package/lib/azure-actiongroup/index.d.ts +11 -0
- package/lib/azure-actiongroup/index.js +28 -0
- package/lib/azure-actiongroup/lib/action-group-schemas.d.ts +24 -0
- package/lib/azure-actiongroup/lib/action-group-schemas.js +201 -0
- package/lib/azure-actiongroup/lib/action-group.d.ts +312 -0
- package/lib/azure-actiongroup/lib/action-group.js +201 -0
- package/lib/azure-actiongroup/lib/index.d.ts +5 -0
- package/lib/azure-actiongroup/lib/index.js +22 -0
- package/lib/azure-actiongroup/test/action-group.integ.d.ts +9 -0
- package/lib/azure-actiongroup/test/action-group.integ.js +79 -0
- package/lib/azure-actiongroup/test/action-group.spec.d.ts +8 -0
- package/lib/azure-actiongroup/test/action-group.spec.js +602 -0
- package/lib/azure-activitylogalert/index.d.ts +11 -0
- package/lib/azure-activitylogalert/index.js +28 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.d.ts +24 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.js +182 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +236 -0
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +212 -0
- package/lib/azure-activitylogalert/lib/index.d.ts +5 -0
- package/lib/azure-activitylogalert/lib/index.js +22 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +9 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +98 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.spec.d.ts +9 -0
- package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +1101 -0
- package/lib/azure-aks/index.d.ts +9 -0
- package/lib/azure-aks/index.js +28 -0
- package/lib/azure-aks/lib/aks-cluster-schemas.d.ts +505 -0
- package/lib/azure-aks/lib/aks-cluster-schemas.js +572 -0
- package/lib/azure-aks/lib/aks-cluster.d.ts +395 -0
- package/lib/azure-aks/lib/aks-cluster.js +489 -0
- package/lib/azure-aks/lib/index.d.ts +11 -0
- package/lib/azure-aks/lib/index.js +38 -0
- package/lib/azure-aks/test/aks-cluster.integ.d.ts +9 -0
- package/lib/azure-aks/test/aks-cluster.integ.js +260 -0
- package/lib/azure-aks/test/aks-cluster.spec.d.ts +8 -0
- package/lib/azure-aks/test/aks-cluster.spec.js +1396 -0
- package/lib/azure-diagnosticsettings/index.d.ts +7 -0
- package/lib/azure-diagnosticsettings/index.js +24 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.d.ts +50 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.js +207 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +193 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +200 -0
- package/lib/azure-diagnosticsettings/lib/index.d.ts +8 -0
- package/lib/azure-diagnosticsettings/lib/index.js +25 -0
- package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.d.ts +8 -0
- package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +432 -0
- package/lib/azure-metricalert/index.d.ts +11 -0
- package/lib/azure-metricalert/index.js +28 -0
- package/lib/azure-metricalert/lib/index.d.ts +5 -0
- package/lib/azure-metricalert/lib/index.js +22 -0
- package/lib/azure-metricalert/lib/metric-alert-schemas.d.ts +24 -0
- package/lib/azure-metricalert/lib/metric-alert-schemas.js +242 -0
- package/lib/azure-metricalert/lib/metric-alert.d.ts +344 -0
- package/lib/azure-metricalert/lib/metric-alert.js +252 -0
- package/lib/azure-metricalert/test/metric-alert.integ.d.ts +9 -0
- package/lib/azure-metricalert/test/metric-alert.integ.js +123 -0
- package/lib/azure-metricalert/test/metric-alert.spec.d.ts +9 -0
- package/lib/azure-metricalert/test/metric-alert.spec.js +1266 -0
- package/lib/azure-networkinterface/index.d.ts +4 -0
- package/lib/azure-networkinterface/index.js +21 -0
- package/lib/azure-networkinterface/lib/index.d.ts +6 -0
- package/lib/azure-networkinterface/lib/index.js +22 -0
- package/lib/azure-networkinterface/lib/network-interface-schemas.d.ts +32 -0
- package/lib/azure-networkinterface/lib/network-interface-schemas.js +222 -0
- package/lib/azure-networkinterface/lib/network-interface.d.ts +265 -0
- package/lib/azure-networkinterface/lib/network-interface.js +228 -0
- package/lib/azure-networkinterface/test/network-interface.integ.d.ts +9 -0
- package/lib/azure-networkinterface/test/network-interface.integ.js +102 -0
- package/lib/azure-networkinterface/test/network-interface.spec.d.ts +8 -0
- package/lib/azure-networkinterface/test/network-interface.spec.js +655 -0
- package/lib/azure-networksecuritygroup/index.d.ts +6 -0
- package/lib/azure-networksecuritygroup/index.js +23 -0
- package/lib/azure-networksecuritygroup/lib/index.d.ts +5 -0
- package/lib/azure-networksecuritygroup/lib/index.js +16 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.d.ts +32 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.js +198 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +268 -0
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +248 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +9 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +151 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.spec.d.ts +8 -0
- package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +652 -0
- package/lib/azure-publicipaddress/index.d.ts +6 -0
- package/lib/azure-publicipaddress/index.js +23 -0
- package/lib/azure-publicipaddress/lib/index.d.ts +9 -0
- package/lib/azure-publicipaddress/lib/index.js +19 -0
- package/lib/azure-publicipaddress/lib/public-ip-address-schemas.d.ts +32 -0
- package/lib/azure-publicipaddress/lib/public-ip-address-schemas.js +227 -0
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +256 -0
- package/lib/azure-publicipaddress/lib/public-ip-address.js +267 -0
- package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +9 -0
- package/lib/azure-publicipaddress/test/public-ip-address.integ.js +75 -0
- package/lib/azure-publicipaddress/test/public-ip-address.spec.d.ts +15 -0
- package/lib/azure-publicipaddress/test/public-ip-address.spec.js +498 -0
- package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
- package/lib/azure-resourcegroup/test/resource-group.integ.js +23 -11
- package/lib/azure-storageaccount/lib/storage-account-schemas.d.ts +98 -0
- package/lib/azure-storageaccount/lib/storage-account-schemas.js +1 -1
- package/lib/azure-storageaccount/lib/storage-account.d.ts +38 -1
- package/lib/azure-storageaccount/lib/storage-account.js +138 -2
- package/lib/azure-storageaccount/test/storage-account.integ.js +91 -12
- package/lib/azure-subnet/index.d.ts +4 -0
- package/lib/azure-subnet/index.js +21 -0
- package/lib/azure-subnet/lib/index.d.ts +5 -0
- package/lib/azure-subnet/lib/index.js +22 -0
- package/lib/azure-subnet/lib/subnet-schemas.d.ts +32 -0
- package/lib/azure-subnet/lib/subnet-schemas.js +237 -0
- package/lib/azure-subnet/lib/subnet.d.ts +285 -0
- package/lib/azure-subnet/lib/subnet.js +254 -0
- package/lib/azure-subnet/test/subnet.integ.d.ts +11 -0
- package/lib/azure-subnet/test/subnet.integ.js +80 -0
- package/lib/azure-subnet/test/subnet.spec.d.ts +8 -0
- package/lib/azure-subnet/test/subnet.spec.js +396 -0
- package/lib/azure-virtualmachine/index.d.ts +7 -0
- package/lib/azure-virtualmachine/index.js +24 -0
- package/lib/azure-virtualmachine/lib/index.d.ts +11 -0
- package/lib/azure-virtualmachine/lib/index.js +38 -0
- package/lib/azure-virtualmachine/lib/virtual-machine-schemas.d.ts +327 -0
- package/lib/azure-virtualmachine/lib/virtual-machine-schemas.js +544 -0
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +377 -0
- package/lib/azure-virtualmachine/lib/virtual-machine.js +462 -0
- package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +9 -0
- package/lib/azure-virtualmachine/test/virtual-machine.integ.js +220 -0
- package/lib/azure-virtualmachine/test/virtual-machine.spec.d.ts +9 -0
- package/lib/azure-virtualmachine/test/virtual-machine.spec.js +1032 -0
- package/lib/azure-virtualnetwork/index.d.ts +10 -0
- package/lib/azure-virtualnetwork/index.js +28 -0
- package/lib/azure-virtualnetwork/lib/index.d.ts +9 -0
- package/lib/azure-virtualnetwork/lib/index.js +22 -0
- package/lib/azure-virtualnetwork/lib/virtual-network-schemas.d.ts +32 -0
- package/lib/azure-virtualnetwork/lib/virtual-network-schemas.js +236 -0
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +213 -0
- package/lib/azure-virtualnetwork/lib/virtual-network.js +245 -0
- package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +9 -0
- package/lib/azure-virtualnetwork/test/virtual-network.integ.js +91 -0
- package/lib/azure-virtualnetwork/test/virtual-network.spec.d.ts +8 -0
- package/lib/azure-virtualnetwork/test/virtual-network.spec.js +398 -0
- package/lib/azure-vmss/index.d.ts +6 -0
- package/lib/azure-vmss/index.js +23 -0
- package/lib/azure-vmss/lib/index.d.ts +9 -0
- package/lib/azure-vmss/lib/index.js +39 -0
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +258 -0
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +503 -0
- package/lib/azure-vmss/lib/vmss-schemas.d.ts +472 -0
- package/lib/azure-vmss/lib/vmss-schemas.js +444 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +15 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +261 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.spec.d.ts +8 -0
- package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +997 -0
- package/lib/core-azure/lib/azapi/azapi-resource.d.ts +95 -27
- package/lib/core-azure/lib/azapi/azapi-resource.js +95 -58
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +33 -21
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +69 -27
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +134 -120
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +209 -59
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +141 -128
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +183 -36
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +55 -43
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +94 -26
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +129 -116
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +155 -32
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +187 -174
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +267 -48
- package/lib/core-azure/lib/azapi/providers-azapi/index.d.ts +10 -10
- package/lib/core-azure/lib/azapi/providers-azapi/index.js +1 -1
- package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.d.ts +0 -0
- package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +13 -0
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +174 -162
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +274 -14
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +239 -225
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +360 -76
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +163 -150
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +221 -46
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +162 -149
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +249 -50
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +4 -2
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +37 -0
- package/lib/index.js +40 -2
- package/lib/testing/index.d.ts +92 -2
- package/lib/testing/index.js +258 -18
- package/lib/testing/lib/cleanup.d.ts +229 -0
- package/lib/testing/lib/cleanup.js +331 -0
- package/lib/testing/lib/metadata.d.ts +151 -0
- package/lib/testing/lib/metadata.js +180 -0
- package/lib/testing/lib/naming.d.ts +96 -0
- package/lib/testing/lib/naming.js +336 -0
- package/node_modules/uuid/LICENSE.md +9 -0
- package/node_modules/uuid/README.md +510 -0
- package/node_modules/uuid/dist/cjs/index.d.ts +15 -0
- package/node_modules/uuid/dist/cjs/index.js +31 -0
- package/node_modules/uuid/dist/cjs/max.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/max.js +3 -0
- package/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/md5.js +13 -0
- package/node_modules/uuid/dist/cjs/native.d.ts +6 -0
- package/node_modules/uuid/dist/cjs/native.js +4 -0
- package/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/nil.js +3 -0
- package/node_modules/uuid/dist/cjs/package.json +1 -0
- package/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/parse.js +11 -0
- package/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/regex.js +3 -0
- package/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
- package/node_modules/uuid/dist/cjs/rng.js +13 -0
- package/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/sha1.js +13 -0
- package/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/cjs/stringify.js +39 -0
- package/node_modules/uuid/dist/cjs/types.d.ts +21 -0
- package/node_modules/uuid/dist/cjs/types.js +2 -0
- package/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
- package/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
- package/node_modules/uuid/dist/cjs/v1.js +87 -0
- package/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
- package/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
- package/node_modules/uuid/dist/cjs/v3.js +14 -0
- package/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
- package/node_modules/uuid/dist/cjs/v35.js +41 -0
- package/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/v4.js +29 -0
- package/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
- package/node_modules/uuid/dist/cjs/v5.js +14 -0
- package/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
- package/node_modules/uuid/dist/cjs/v6.js +19 -0
- package/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
- package/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
- package/node_modules/uuid/dist/cjs/v7.js +69 -0
- package/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/validate.js +7 -0
- package/node_modules/uuid/dist/cjs/version.d.ts +2 -0
- package/node_modules/uuid/dist/cjs/version.js +10 -0
- package/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
- package/node_modules/uuid/dist/cjs-browser/index.js +31 -0
- package/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/max.js +3 -0
- package/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
- package/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
- package/node_modules/uuid/dist/cjs-browser/native.js +4 -0
- package/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
- package/node_modules/uuid/dist/cjs-browser/package.json +1 -0
- package/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
- package/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
- package/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
- package/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
- package/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
- package/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
- package/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
- package/node_modules/uuid/dist/cjs-browser/types.js +2 -0
- package/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
- package/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
- package/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
- package/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
- package/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
- package/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
- package/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
- package/node_modules/uuid/dist/cjs-browser/v35.js +41 -0
- package/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
- package/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
- package/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
- package/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
- package/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
- package/node_modules/uuid/dist/cjs-browser/v6.js +19 -0
- package/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
- package/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
- package/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
- package/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
- package/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
- package/node_modules/uuid/dist/cjs-browser/version.js +10 -0
- package/node_modules/uuid/dist/esm/bin/uuid +2 -0
- package/node_modules/uuid/dist/esm/index.d.ts +15 -0
- package/node_modules/uuid/dist/esm/index.js +14 -0
- package/node_modules/uuid/dist/esm/max.d.ts +2 -0
- package/node_modules/uuid/dist/esm/max.js +1 -0
- package/node_modules/uuid/dist/esm/md5.d.ts +4 -0
- package/node_modules/uuid/dist/esm/md5.js +11 -0
- package/node_modules/uuid/dist/esm/native.d.ts +6 -0
- package/node_modules/uuid/dist/esm/native.js +2 -0
- package/node_modules/uuid/dist/esm/nil.d.ts +2 -0
- package/node_modules/uuid/dist/esm/nil.js +1 -0
- package/node_modules/uuid/dist/esm/parse.d.ts +2 -0
- package/node_modules/uuid/dist/esm/parse.js +9 -0
- package/node_modules/uuid/dist/esm/regex.d.ts +2 -0
- package/node_modules/uuid/dist/esm/regex.js +1 -0
- package/node_modules/uuid/dist/esm/rng.d.ts +1 -0
- package/node_modules/uuid/dist/esm/rng.js +10 -0
- package/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
- package/node_modules/uuid/dist/esm/sha1.js +11 -0
- package/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/esm/stringify.js +35 -0
- package/node_modules/uuid/dist/esm/types.d.ts +21 -0
- package/node_modules/uuid/dist/esm/types.js +1 -0
- package/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
- package/node_modules/uuid/dist/esm/v1.d.ts +11 -0
- package/node_modules/uuid/dist/esm/v1.js +83 -0
- package/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
- package/node_modules/uuid/dist/esm/v3.d.ts +9 -0
- package/node_modules/uuid/dist/esm/v3.js +9 -0
- package/node_modules/uuid/dist/esm/v35.d.ts +7 -0
- package/node_modules/uuid/dist/esm/v35.js +36 -0
- package/node_modules/uuid/dist/esm/v4.d.ts +4 -0
- package/node_modules/uuid/dist/esm/v4.js +27 -0
- package/node_modules/uuid/dist/esm/v5.d.ts +9 -0
- package/node_modules/uuid/dist/esm/v5.js +9 -0
- package/node_modules/uuid/dist/esm/v6.d.ts +4 -0
- package/node_modules/uuid/dist/esm/v6.js +17 -0
- package/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
- package/node_modules/uuid/dist/esm/v7.d.ts +9 -0
- package/node_modules/uuid/dist/esm/v7.js +65 -0
- package/node_modules/uuid/dist/esm/validate.d.ts +2 -0
- package/node_modules/uuid/dist/esm/validate.js +5 -0
- package/node_modules/uuid/dist/esm/version.d.ts +2 -0
- package/node_modules/uuid/dist/esm/version.js +8 -0
- package/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
- package/node_modules/uuid/dist/esm-browser/index.js +14 -0
- package/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/max.js +1 -0
- package/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/md5.js +135 -0
- package/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
- package/node_modules/uuid/dist/esm-browser/native.js +2 -0
- package/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
- package/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/parse.js +9 -0
- package/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
- package/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
- package/node_modules/uuid/dist/esm-browser/rng.js +11 -0
- package/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/sha1.js +70 -0
- package/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
- package/node_modules/uuid/dist/esm-browser/stringify.js +35 -0
- package/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
- package/node_modules/uuid/dist/esm-browser/types.js +1 -0
- package/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
- package/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
- package/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
- package/node_modules/uuid/dist/esm-browser/v1.js +83 -0
- package/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
- package/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
- package/node_modules/uuid/dist/esm-browser/v3.js +9 -0
- package/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
- package/node_modules/uuid/dist/esm-browser/v35.js +36 -0
- package/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
- package/node_modules/uuid/dist/esm-browser/v4.js +27 -0
- package/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
- package/node_modules/uuid/dist/esm-browser/v5.js +9 -0
- package/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
- package/node_modules/uuid/dist/esm-browser/v6.js +17 -0
- package/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
- package/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
- package/node_modules/uuid/dist/esm-browser/v7.js +65 -0
- package/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/validate.js +5 -0
- package/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
- package/node_modules/uuid/dist/esm-browser/version.js +8 -0
- package/node_modules/uuid/package.json +132 -0
- package/package.json +17 -12
- 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 {};
|