diff --git a/AISKU/scripts/listAzCdnVersions.ps1 b/AISKU/scripts/listAzCdnVersions.ps1 new file mode 100644 index 000000000..b22c184db --- /dev/null +++ b/AISKU/scripts/listAzCdnVersions.ps1 @@ -0,0 +1,118 @@ +param ( + [string] $container = $null, # Identify the container that you want to check blank == all + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $showFiles = $false, # Show the individual files with details as well + [switch] $inclExt = $false, # Include the extensions + [switch] $activeOnly = $false, # Only show the active (deployed) versions + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../common/publish/Logging" +Import-Module -Force -Name "../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Container : $container" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $cdnStorePath" + Write-Log "Write-LogPath : $logDir" + Write-Log "Show Files : $showFiles" + Write-Log "Test Mode : $testOnly" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + # Validate parameters + if ([string]::IsNullOrWhiteSpace($container) -ne $true -and "beta","next","public", "dev", "nightly" -NotContains $container) { + Write-LogFailure "[$($container)] is not a valid value, must be beta, next or public" + } +} + +Function Get-AllVersionFiles( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [string] $storagePath +) { + Get-VersionFiles $files $storagePath "ai." $null + if ($inclExt -eq $true) { + Get-VersionFiles $files "$storagePath/ext" "ai.*" $null + } +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "listCdnVersionsLog" + +Write-LogParams +Validate-Params + +# Don't try and list anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + +# Get the public files (scripts/b) +if ([string]::IsNullOrWhiteSpace($container) -eq $true) { + Get-AllVersionFiles $files "scripts/b" + Get-AllVersionFiles $files "beta" + Get-AllVersionFiles $files "next" + Get-AllVersionFiles $files "dev" + Get-AllVersionFiles $files "nightly" +} + +if ([string]::IsNullOrWhiteSpace($container) -ne $true) { + if ($container -eq "public") { + Get-AllVersionFiles $files "scripts/b" + } elseif ($container -eq "beta" -or $container -eq "next" -or $container -eq "dev" -or $container -eq "nightly") { + Get-AllVersionFiles $files "$container" + } else { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + Get-AllVersionFiles $files "$container" + } +} + +ListVersions $files $activeOnly $showFiles + +Write-Log "======================================================================" diff --git a/AISKU/scripts/publishAzReleaseToCdn.ps1 b/AISKU/scripts/publishAzReleaseToCdn.ps1 new file mode 100644 index 000000000..1f9650e41 --- /dev/null +++ b/AISKU/scripts/publishAzReleaseToCdn.ps1 @@ -0,0 +1,150 @@ +param ( + [string] $releaseFrom = $null, # The root path for where to find the files to be released + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $overwrite = $false, # Overwrite any existing files + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../common/publish/Logging" +Import-Module -Force -Name "../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +$global:cacheValue = $null + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Overwrite : $overwrite" + Write-Log "Test Mode : $testOnly" + Write-Log "SourcePath : $jsSdkDir" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function GetReleaseFiles ( + [hashtable] $verDetails +) +{ + $version = $verDetails.full + Write-Log "Version : $($verDetails.full)" + Write-Log " Number : $($verDetails.ver)" + Write-Log " Type : $($verDetails.type)" + Write-Log " BldNum : $($verDetails.bldNum)" + + # check if the minified dir exists + $jsSdkSrcDir = Join-Path $jssdkDir -ChildPath "browser\es5\"; + + if (-Not (Test-Path $jsSdkSrcDir)) { + Write-LogWarning "'$jsSdkSrcDir' directory doesn't exist. Compile JSSDK first."; + exit + } + + $files = New-Object 'system.collections.generic.dictionary[string,string]' + + Write-Log "Adding files"; + AddReleaseFile $files $jsSdkSrcDir "ai.$version.integrity.json" $true + AddReleaseFile $files $jsSdkSrcDir "ai.$version.js" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.cjs.js" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.cjs.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.cjs.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.cjs.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.gbl.js" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.gbl.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.gbl.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.$version.gbl.min.js.map" + + return $files +} + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "publishReleaseCdnLog" + +$jsSdkDir = $releaseFrom +if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) { + $jsSdkDir = Split-Path (Split-Path $MyInvocation.MyCommand.Path) -Parent +} + +$cacheControl1Year = "public, max-age=31536000, immutable, no-transform"; +$contentType = "text/javascript; charset=utf-8"; + +Write-LogParams + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +$version = GetPackageVersion $jsSdkDir + +$releaseFiles = GetReleaseFiles $version # Get the versioned files only +if ($null -eq $releaseFiles -or $releaseFiles.Count -eq 0) { + Write-LogFailure "Unable to find any release files" +} + +Write-Log "Release Files : $($releaseFiles.Count)" + +Write-Log "----------------------------------------------------------------------" + +# Publish the full versioned files to all release folders +if ($version.type -eq "release") { + # Normal publishing deployment + PublishFiles $releaseFiles "beta" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "scripts/b" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "rc") { + PublishFiles $releaseFiles "beta" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + # Publish to release type folder folder + PublishFiles $releaseFiles "$($version.type)" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + # Publish to release nightly folder folder + PublishFiles $releaseFiles "nightly" $cacheControl1Year $contentType $overwrite +} +else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + PublishFiles $releaseFiles "$($version.type)" $cacheControl1Year $contentType $overwrite +} + +Write-Log "======================================================================" diff --git a/AISKU/scripts/setAzActiveCdnVersion.ps1 b/AISKU/scripts/setAzActiveCdnVersion.ps1 new file mode 100644 index 000000000..34ab4f2dd --- /dev/null +++ b/AISKU/scripts/setAzActiveCdnVersion.ps1 @@ -0,0 +1,162 @@ +[CmdletBinding()] +param ( + [string] $container = "", # The container to update + [string] $activeVersion = "", # The version to copy as the active version + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $minorOnly = $false, # Only set the active minor version (v2.x) and not the major version (v2) + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../common/publish/Logging" +Import-Module -Force -Name "../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + Write-Log "Container : $container" + Write-Log "Version : $activeVersion" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Test Mode : $testOnly" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + if ([string]::IsNullOrWhiteSpace($activeVersion) -eq $true) { + Write-LogFailure "The Active version is not specified" + exit + } + + $version = Get-VersionDetails $activeVersion + + if ([string]::IsNullOrWhiteSpace($version.type) -eq $true) { + Write-LogFailure "Unknown release type" + } + + $versionParts = $version.ver.Split(".") + if ($versionParts.Length -ne 3) { + Write-LogFailure "Active Version [$activeVersion] is not a valid version number" + } + + foreach ($verNum in $versionParts) { + [int]$value = 0 + if ([int32]::TryParse($verNum, [ref]$value) -ne $true) { + Write-LogFailure "[$($verNum)] is not a valid number within the version[$activeVersion]" + } + } + + # Publish the full versioned files to all release folders + if ($version.type -eq "release") { + # Normal publishing deployment + if ("beta","next","public" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "rc") { + if ("beta","next" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + if ("nightly" -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } else { + Write-LogWarning "Non-Standard release type using tst/$container as the destination" + } + } + + return $version; +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "setActiveCdnVersionLog" + +Write-LogParams +$version = Validate-Params + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + +$storePath = "$container" +if ($container -eq "public") { + $storePath = "scripts/b" +} elseif ($container -ne "beta" -and $container -ne "next" -and $container -ne "dev" -and $container -ne "nightly") { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" +} + +Get-VersionFiles $files $storePath "ai." $activeVersion + +if ($files.ContainsKey($activeVersion) -ne $true) { + Write-LogFailure "Version [$activeVersion] does not appear to be deployed to [$container]" +} elseif ($files[$activeVersion].Count -ne 4 -and # Prior to 2.5.8 + $files[$activeVersion].Count -ne 8 -and # Since 2.5.8 + $files[$activeVersion].Count -ne 9 -and # Since 2.6.5 + $files[$activeVersion].Count -ne 12 -and # Since 2.5.8 + $files[$activeVersion].Count -ne 13) { # Since 2.6.5 + Write-LogFailure "Version [$activeVersion] does not fully deployed to [$container] -- only found [$($files[$activeVersion].Count)] file(s)" +} + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +SetActiveVersion $files[$activeVersion] $storePath $minorOnly + +Write-Log "======================================================================" diff --git a/common/config/rush/npm-shrinkwrap.json b/common/config/rush/npm-shrinkwrap.json index edb7e501e..1f6d3d2ab 100644 --- a/common/config/rush/npm-shrinkwrap.json +++ b/common/config/rush/npm-shrinkwrap.json @@ -96,19 +96,19 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -197,9 +197,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -228,6 +228,28 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -288,17 +310,17 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@microsoft/api-extractor": { - "version": "7.43.3", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.3.tgz", - "integrity": "sha512-F9jYo/CPrBLeDUUFma36sDmLy0WsvJfLs2an6P+NSruths020fLUFZE3YOH/mlpt3QOhzu+026B9PjFVC83dIQ==", - "dependencies": { - "@microsoft/api-extractor-model": "7.28.15", - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.2.0", + "version": "7.47.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.47.0.tgz", + "integrity": "sha512-LT8yvcWNf76EpDC+8/ArTVSYePvuDQ+YbAUrsTcpg3ptiZ93HIcMCozP/JOxDt+rrsFfFHcpfoselKfPyRI0GQ==", + "dependencies": { + "@microsoft/api-extractor-model": "7.29.2", + "@microsoft/tsdoc": "~0.15.0", + "@microsoft/tsdoc-config": "~0.17.0", + "@rushstack/node-core-library": "5.4.1", "@rushstack/rig-package": "0.5.2", - "@rushstack/terminal": "0.10.2", - "@rushstack/ts-command-line": "4.19.4", + "@rushstack/terminal": "0.13.0", + "@rushstack/ts-command-line": "4.22.0", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", @@ -311,13 +333,13 @@ } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.28.15", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.15.tgz", - "integrity": "sha512-kAFX0c1+N+2WpZaiksy8H4RZ1sytJb2ZFVEmil5Rt6IK8UExU80f0/4kegXIs1KF8a/YyRW0Pybc7svlT9j/wQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.29.2.tgz", + "integrity": "sha512-hAYajOjQan3uslhKJRwvvHIdLJ+ZByKqdSsJ/dgHFxPtEbdKpzMDO8zuW4K5gkSMYl5D0LbNwxkhxr51P2zsmw==", "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.2.0" + "@microsoft/tsdoc": "~0.15.0", + "@microsoft/tsdoc-config": "~0.17.0", + "@rushstack/node-core-library": "5.4.1" } }, "node_modules/@microsoft/api-extractor/node_modules/typescript": { @@ -341,31 +363,19 @@ } }, "node_modules/@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==" + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", + "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==" }, "node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz", + "integrity": "sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==", "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", + "@microsoft/tsdoc": "0.15.0", + "ajv": "~8.12.0", "jju": "~1.4.0", - "resolve": "~1.19.0" - } - }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "resolve": "~1.22.2" } }, "node_modules/@nevware21/grunt-eslint-ts": { @@ -504,9 +514,9 @@ } }, "node_modules/@rollup/plugin-replace": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz", - "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz", + "integrity": "sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==", "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" @@ -555,7 +565,7 @@ "node_modules/@rush-temp/1ds-core-js": { "version": "0.0.0", "resolved": "file:projects/1ds-core-js.tgz", - "integrity": "sha512-/Yn79SncrgzhGMHlOl/nGgScwGVo7fDzp21tAHDsb+3iZgfGiwRrDZP43qwzqWDtP4Bb52QN4gv1Ho0hvukd6g==", + "integrity": "sha512-wqTWM5FfPlt1VaWHtPrfJsWhwtHO0f0JgkM2O7kPNosZHB4/h6oUT2/8wrQMa9kht8BXujZe0mgSArIY2fTX5A==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -583,7 +593,7 @@ "node_modules/@rush-temp/1ds-post-js": { "version": "0.0.0", "resolved": "file:projects/1ds-post-js.tgz", - "integrity": "sha512-hB2tfsRGZPlfqUUu+MJW0am1S/IryLmiS2XOtFBIcMTl9Y7+9Cj+8Cv8aDat4jGMphVHrTKuEsjatVe0m3+X/A==", + "integrity": "sha512-Tv2PCInJemZ7aZqFuAmbLOv1cqIgz4yuyjI2WTJ1k1ybrraRUNQd2e/ZYc3cw3dqNQvBDYT9QfHHmo+/4s2rSA==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -605,7 +615,7 @@ "node_modules/@rush-temp/ai-test-framework": { "version": "0.0.0", "resolved": "file:projects/ai-test-framework.tgz", - "integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==", + "integrity": "sha512-Bg6MiDIoWkKtTwDm8A66wZZ1t+09mx8u8SVJyFHcHZB0DptQQ1HoQamfkOA0JzS4oT3cd3bYYjTNJkE5cpYC1w==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-ts-plugin": "^0.4.3", @@ -631,7 +641,7 @@ "node_modules/@rush-temp/applicationinsights-analytics-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-analytics-js.tgz", - "integrity": "sha512-KtNJ0vXfw47B6ORqA1wtgXfSIWA7LQ2LUNMAokNDr6vC/lLjLWPveg8adZo5ptFh5beffzt5n3yQWllvJVGV/A==", + "integrity": "sha512-i2CZyUTYgDZ+B2rhSMhHaUYEhFWBDwhHqUbh9n1Dy77S+ZxFi6+nmC6VmW5Z8nM/I5QZ24lKTkrCiI+xRuzuAg==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -659,7 +669,7 @@ "node_modules/@rush-temp/applicationinsights-cfgsync-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-cfgsync-js.tgz", - "integrity": "sha512-TVH5b9aeaKtBgp/afYUHE+2vYuVbuA4Cqewaqu6r/Qds3eQOvUzAfKlur1T+N54gVhcdKkC2aUXUaba23PPRcg==", + "integrity": "sha512-ZaF4qcLxoRQEL3q8YsNgjKLXNjk9crt8eOueSfD3yRpxzSIavkxWPkKqE2eMIKoGrXX+Pg4pL9e7rEx3e3pWUw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -688,7 +698,7 @@ "node_modules/@rush-temp/applicationinsights-channel-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-channel-js.tgz", - "integrity": "sha512-Egx+Qwpb56RzxVSkcB4xR2FvgbJ55gTCzGN6tSOAUz1n34sWlTdV2zBqJjzrTYrhy/7Y/W6Q/VVuocwH9XzubA==", + "integrity": "sha512-vygsnOvKJS3Io+Ewp+mt2Bqhl8Rg9de77w3epIX14kuwRI0QUUxZud176RGoetOZwBFActvbh0Nk36gKkiY/xA==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -715,7 +725,7 @@ "node_modules/@rush-temp/applicationinsights-chrome-debug-extension": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-chrome-debug-extension.tgz", - "integrity": "sha512-RCdFP4mjd5pIjglQIfWH8Yls+QiEdioYS5ziHDEZWyIbd+fYx7iHHRVaqKutMb7/T/LqCDUur0Rm/Ah+do+yYw==", + "integrity": "sha512-30AR1ZiaoNfwF8CjbkcWh2g8w8ECYRFNFhnNmJAjhTcqFyUbdBTifTNBKb4AOeog6DDkN6NWZx9qojQLGoFYbg==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -749,7 +759,7 @@ "node_modules/@rush-temp/applicationinsights-clickanalytics-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-clickanalytics-js.tgz", - "integrity": "sha512-AUkKc2bEuPomktpadeO/7nHAww9m+0bDefWkbEZZHvK+KgrG97ZhxzRpl/GGrnb43GujFyl0Hzot0OaPHtYBOA==", + "integrity": "sha512-aXu0vdb+HNR6M+X5JoefcwwMFiQ03DE0St6cM1MEVONpvBC0s17rk245opy65aIulc/7wCPSLYMl4RLSWu+Q0w==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -774,7 +784,7 @@ "node_modules/@rush-temp/applicationinsights-common": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-common.tgz", - "integrity": "sha512-d0f4wTojw+nPN+xTB38NH6M6q4xhIVOH15t+HxRLRlWiR/mCxUa/Dsy1dnsRiAZRtNqxD+iFfGYLA9LEDZlwwg==", + "integrity": "sha512-8m3iJe1Aa8lPzAJoDiyALTrDh4m89HcoGXGkjrq47wQ1d+GxIF0x/qPO6YvcRErPYDlBO9IzcWRQojCcH0IIlA==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -800,7 +810,7 @@ "node_modules/@rush-temp/applicationinsights-core-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-core-js.tgz", - "integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==", + "integrity": "sha512-CFC50QjPVur2gnlZxwcZ2Trd6pwxegt8ndiqTRYK6eGsskVcAeDvMi94hZjmh3LLDPSbUbjmw0TBoTM/+F7bJQ==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -829,7 +839,7 @@ "node_modules/@rush-temp/applicationinsights-debugplugin-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-debugplugin-js.tgz", - "integrity": "sha512-Tqm3AbMzBpweY1J7oDz8NKU1kfVLw73rS4hHsVkAIECepRsrCQVwHjk1H6N1Yf+08H2pdeXmBRGQ90CFX4SEvQ==", + "integrity": "sha512-7wOjfBVjhxxmCvj3zF63fqCkqGdKTY8xsjomMRBYpM33NM7rN872gqScYWPMvIzxJsw/o996pfWF51upKc2Ojw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -854,7 +864,7 @@ "node_modules/@rush-temp/applicationinsights-dependencies-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-dependencies-js.tgz", - "integrity": "sha512-vUGGj1dW27capHkHArIKwz79gnpLZaRtW11Tf9OZj6odeP/2wiH+zZzyS09/NPvcQrA1bUjE+npc5Nj4Sm+1Bg==", + "integrity": "sha512-Jrqd+HFn/DhAlQGvBp4xHnBg/sPj6dcJshUCKs9uoqIitA0rRS9W4D27kJ+GpzAfTe+eDFY3NfkYOj4+ON3nMg==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -882,7 +892,7 @@ "node_modules/@rush-temp/applicationinsights-example-aisku": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-aisku.tgz", - "integrity": "sha512-gC6YuoTK9qfasA5LcgZXNmqkKBxbRFqENuJEkGC8GLh/ooC/02BDei+31deefPQNVPw6cP9V+kDrlLfRwMVCtQ==", + "integrity": "sha512-nC6XEmHj3+zwP9lfg0SG7U6K38THNl7v1NRJlb9KKjWWy1PptK4kJrAxpezF3ttkid9TFHkUdbXafJPHPXEcGA==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-utils": ">= 0.11.1 < 2.x", @@ -900,7 +910,7 @@ "node_modules/@rush-temp/applicationinsights-example-cfgsync": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-cfgsync.tgz", - "integrity": "sha512-782hbmCrD723J2N8X5CtJR5bVuivwCzaKaYe/zn23WvuciexMgu5FpbbnpSfbOERlQ9ONN8yZMcjWf/jjj2t/g==", + "integrity": "sha512-VxuKglaA0xhHc18AYgFDotTve6vPc0Zx2f1dPD+Gc6WXFDKOS6XOQyoG1tyjJ+UUXrwVxz+WGJCFKOtK92W1tw==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -926,7 +936,7 @@ "node_modules/@rush-temp/applicationinsights-example-dependencies": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-dependencies.tgz", - "integrity": "sha512-urNbNsZocNRYLyxGWjsclCReYj77rspXuwlmlEbcPPDG17B/b/G5oSpMX+LLE9OeLWgiWWTjnZ75txcCN1YhVA==", + "integrity": "sha512-VjBR3vTtdeL2xYAkhJstxsvBaCjjLSX66JngFZd9Shb5OKVQvq9mDlTjqAVPNlJsA9l4mY7zpLdvqjdhopgERg==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-utils": ">= 0.11.1 < 2.x", @@ -944,7 +954,7 @@ "node_modules/@rush-temp/applicationinsights-example-shared-worker": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-shared-worker.tgz", - "integrity": "sha512-vQ7vS5mfy2666gOjFCAVlq0xvu6WGD0/gXO0yfD8UFOmmQVFtQDIYZHQut19xOXbEiEts4nRIpttd7bb5mOuag==", + "integrity": "sha512-fgmYRe9TyA102FTrq1/RC1bniA6BTBLNxD5nmQArbjBOCQjuLBDa+m0Y8jxeLS3EznS8w94+P4Dio4H/0ehnxA==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -970,7 +980,7 @@ "node_modules/@rush-temp/applicationinsights-js-release-tools": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-js-release-tools.tgz", - "integrity": "sha512-6sVB5NMzKj/P9v9UvZlA/IjQSkGeupaDliSt2IZqy+SlR59Hv335Ekz/5f54xMHu+QiARXJATbjX7lDfCMG8qw==", + "integrity": "sha512-e9jw61D/jeRuLlSL+dQ2bFp8iqw6Q9ZMeboqX0CX0iYwjAPRiN/59ZK66D0UOgggNkqYgSEqgDi+ycw9XRtGnA==", "dependencies": { "globby": "^11.0.0", "grunt": "^1.5.3" @@ -979,7 +989,7 @@ "node_modules/@rush-temp/applicationinsights-offlinechannel-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-offlinechannel-js.tgz", - "integrity": "sha512-19H5/5rpWyCkvQ0VAAm5i8DM4K8AyiXdzYlH1TtzgnPquOUxMrnWXEU2evMmTRgOOrbHBi1h6yPe39CpWQbWBA==", + "integrity": "sha512-2BKj2pwDwoosAH1HKMT9qtYLWEWacTNlYXS2esaw0AbQmfgOWkqU7r5SJ1UuX3elQxjqvwLRMCinzsSL5D98KQ==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1006,7 +1016,7 @@ "node_modules/@rush-temp/applicationinsights-osplugin-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-osplugin-js.tgz", - "integrity": "sha512-dBwAyZkE0XuRSYaVrqUP2yEDeysqU+2PgMJHXxQeM2yfiET+mtP7ufFAkXt/ug3+spyS43Ds2E5af+1JGp09+A==", + "integrity": "sha512-JI1bAUBrqo8lPhUw2GA4+5ZIx9MSfE47+E6S9e4FE+RiPfbXnJ0GnRLOClfqhqYLktl+1k7AFR1JXBtOyACOew==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1027,7 +1037,7 @@ "node_modules/@rush-temp/applicationinsights-perfmarkmeasure-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-perfmarkmeasure-js.tgz", - "integrity": "sha512-4IsPweGTnoCgjAr5uhng81pPT/g1vAG35Lw6vKVBtAliEAt0JlFpGg5IpB8pMjKJXEY9SkDtV8QKgCw/O5u11Q==", + "integrity": "sha512-9XvAQfbB2UmBBn3SRA4Ze+kp8OXLROmH5rHPQsZwOirC7Nu/THzsd3ByvvVuz4WwoRXnm8zCbHPhNVaCT+ep+A==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1052,7 +1062,7 @@ "node_modules/@rush-temp/applicationinsights-properties-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-properties-js.tgz", - "integrity": "sha512-ZLaIPMK/oaABTzNZGdIjJHNyToOvB3gbkXsyhfZ0fVCS9kXvnhRa06kxuD8oiWUYP5PaOnhW4MGpB6CrWO6MQQ==", + "integrity": "sha512-DUUFwf4dwjNjMGYnYfBHrWNGccl9nuwmipWuADtvEfEjRDSX7wC7+ZAuJKTGmaUe6z58sRL+fv03WTK85S4Osg==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1080,7 +1090,7 @@ "node_modules/@rush-temp/applicationinsights-rollup-es5": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-rollup-es5.tgz", - "integrity": "sha512-pZV3ytRYW9T6XrXLTRqAt5c23vrywlwfWQ1rrGVh78hlig+Ns/ZJw+jM4JwgSyvce8hcZiR+z1rm0xpKju+oJA==", + "integrity": "sha512-1Yw2QKlul+WlTRAHhchUxteaSDaeZjskW1H4R3BT7xv7yGZPi0dp4KtKdKAJZQ+/Z+Zxg4XXOWpuDmv/FYmFtQ==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -1104,7 +1114,7 @@ "node_modules/@rush-temp/applicationinsights-rollup-plugin-uglify3-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-rollup-plugin-uglify3-js.tgz", - "integrity": "sha512-WtYrHtc+6IgVGmHIahhl2aYUGuloDq9xCX6VuwObLmccrAqmYq0LYbCanjHi8ugorx/zwwQB37yY3y2WfaDGmw==", + "integrity": "sha512-gp8gJ52kIbJpkT406+PBS7rtyCSUnc72otGxnwywqWCuBJvO1O+qaOCIJBYL/wYk1lDpMKejDqG94vPSSQtnFg==", "dependencies": { "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", @@ -1125,7 +1135,7 @@ "node_modules/@rush-temp/applicationinsights-shims": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-shims.tgz", - "integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==", + "integrity": "sha512-z9owAp7EJeQwsnWQTjZPV9eEs/8r0w0kqx9YqUK5KmH+8qYOlMnw+Aaw/pQgW2JeMybLSzkRrL4DmIUTxRivew==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -1147,7 +1157,7 @@ "node_modules/@rush-temp/applicationinsights-teechannel-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-teechannel-js.tgz", - "integrity": "sha512-hRYwJycPiRggIiGwWHmKDWaWouV09B6ee5Vpdeqr/dFKdgA7s6ezaJwynziWrjKBuuyMW+rLIi3rdOaWSDDjLw==", + "integrity": "sha512-YmUVgNnGCZp/Xi/6MMfhUSX0O4pnRZeQcKlZHlVieBUlQC0hgzNFnft0reOISROi8JYlr9tuRbXP3TCzt/1vzw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1174,7 +1184,7 @@ "node_modules/@rush-temp/applicationinsights-test-module-type-check": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-test-module-type-check.tgz", - "integrity": "sha512-Dmp/qykXtLR3sMzRIE/qlbolEvpZpWfGH/2jakzqEc/jlB98IFMjqxmj4wPhIj0upPSdxrBek4WKNtuasl91gA==", + "integrity": "sha512-8Oa38KhNm/nQDfJtUeOc5itb2WDLJDin8pEygF+ct6u+bBaf20gJcRHayEL1kE+xqAyiZVBkuHagUXfD9nUALA==", "dependencies": { "tslib": "*", "typescript": "^4.9.3" @@ -1183,7 +1193,7 @@ "node_modules/@rush-temp/applicationinsights-web": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-web.tgz", - "integrity": "sha512-g6cksI5J8CPaH7yVlj5RbL2nBjXQFqEcnaXwt1ItA17uRwN5XNi96TGbBuums79A7pfjb93JDJDT296EL+HItg==", + "integrity": "sha512-oGvg1xTmeV5N3Rwb05IWs0UvgvB1wMXVbk+nb1+CKJkwzbRv29qkz7louDAA0mu/uh//yGsZPE/72uysBkmJmA==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1215,7 +1225,7 @@ "node_modules/@rush-temp/applicationinsights-web-basic": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-web-basic.tgz", - "integrity": "sha512-jkN5S684ogV45t3FnA9nuy0jO3n8J7tz2OQtqLuoIOLqsIG/bkw5piezq5ppKFMhbXpsDNcWj4DX7i/2YCuPSA==", + "integrity": "sha512-ThqfxrDC9icmMwShueGd5TbNSb3hoUT1747h+YVSWS0RtAPcfEzWciQbA2v8M5njrRIbuPpcAC/WFtvSR/kMpg==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1242,12 +1252,12 @@ "node_modules/@rush-temp/applicationinsights-web-config": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-web-config.tgz", - "integrity": "sha512-WwlTM/noixyLMqKFBLKa9o88N/2Z3dA9m0R6Qc9UvBNseZqPIpvl1vRMDnmwjMMV6lV3FsmeSmjD7LCJphXF2Q==" + "integrity": "sha512-FwPOZ+esirRqdKg9s7VTxtWqGJ9CQ/gIJ0PfUvTolAF9JZCVw5wQeHD4Tv/KiziZhB50CNaGshnPmLpWGVzo9g==" }, "node_modules/@rush-temp/applicationinsights-web-snippet": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-web-snippet.tgz", - "integrity": "sha512-CwWhN4T+KwfgP5b2ZVkGz4EGS73Lsxf7lcb4CWxcG0V9m8Cfi1z0HO5C458vxSrZkj/G7YAnBggiMi0p4MsIhw==", + "integrity": "sha512-i3Pey5xpQ9I89tUduEeqEddndOPC9aatmIx94yPhgDdMek3S8hydq9qJNCA3Ql4B52JvHi881rrSCQnVwp6/SQ==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1269,16 +1279,18 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.2.0.tgz", - "integrity": "sha512-y2+m9bbkl1Xe5pt+8gouzRXtXoA2r7B2xkGDT4lpSCpiAU7HNHmhmqxOz+vTmoCamuTj1zqQbgyuoZ1z9cGdag==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.4.1.tgz", + "integrity": "sha512-WNnwdS8r9NZ/2K3u29tNoSRldscFa7SxU0RT+82B6Dy2I4Hl2MeCSKm4EXLXPKeNzLGvJ1cqbUhTLviSF8E6iA==", "dependencies": { + "ajv": "~8.13.0", + "ajv-draft-04": "~1.0.0", + "ajv-formats": "~3.0.1", "fs-extra": "~7.0.1", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", - "semver": "~7.5.4", - "z-schema": "~5.0.2" + "semver": "~7.5.4" }, "peerDependencies": { "@types/node": "*" @@ -1289,6 +1301,21 @@ } } }, + "node_modules/@rushstack/node-core-library/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@rushstack/rig-package": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.2.tgz", @@ -1299,11 +1326,11 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.2.tgz", - "integrity": "sha512-oMN4uoz6WUeLR9yWHSR4gEEii+8vjIJXPLp7U0k6zccgmOCJXYPKBK30FGpWfDRmqrcCIJi828SKV9V5FB1a0Q==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.13.0.tgz", + "integrity": "sha512-Ou44Q2s81BqJu3dpYedAX54am9vn245F0HzqVrfJCMQk5pGgoKKOBOjkbfZC9QKcGNaECh6pwH2s5noJt7X6ew==", "dependencies": { - "@rushstack/node-core-library": "4.2.0", + "@rushstack/node-core-library": "5.4.1", "supports-color": "~8.1.1" }, "peerDependencies": { @@ -1316,11 +1343,11 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.19.4", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.4.tgz", - "integrity": "sha512-OH7SPCTjEus/KNDBZ2RbsbVQZ9/H/TJI+TcuiiQjxZ3beMTcQLGaPt5BuXk/c0AS0FQbOGT+2+AJmTZZq6Fhtw==", + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.0.tgz", + "integrity": "sha512-Qj28t6MO3HRgAZ72FDeFsrpdE6wBWxF3VENgvrXh7JF2qIT+CrXiOJIesW80VFZB9QwObSpkB1ilx794fGQg6g==", "dependencies": { - "@rushstack/terminal": "0.10.2", + "@rushstack/terminal": "0.13.0", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -1455,12 +1482,6 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "peer": true - }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -1470,9 +1491,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", - "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==" + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==" }, "node_modules/@types/minimatch": { "version": "5.1.2", @@ -1535,12 +1556,6 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "peer": true - }, "node_modules/@types/sinon": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.3.3.tgz", @@ -1556,21 +1571,19 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", - "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.12.0.tgz", + "integrity": "sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==", "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/type-utils": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/type-utils": "7.12.0", + "@typescript-eslint/utils": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { @@ -1590,28 +1603,16 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/typescript-estree": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "debug": "^4.3.4" }, "engines": { @@ -1631,13 +1632,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.12.0.tgz", + "integrity": "sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1648,13 +1649,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", - "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.12.0.tgz", + "integrity": "sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==", "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/typescript-estree": "7.12.0", + "@typescript-eslint/utils": "7.12.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1675,9 +1676,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.12.0.tgz", + "integrity": "sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==", "peer": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1688,13 +1689,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.12.0.tgz", + "integrity": "sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1752,18 +1753,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.12.0.tgz", + "integrity": "sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/typescript-estree": "7.12.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1776,25 +1774,13 @@ "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.12.0.tgz", + "integrity": "sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/types": "7.12.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1849,13 +1835,13 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -1863,6 +1849,35 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -1934,6 +1949,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2097,11 +2113,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2227,9 +2243,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001617", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", - "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", + "version": "1.0.30001629", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001629.tgz", + "integrity": "sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==", "funding": [ { "type": "opencollective", @@ -2494,9 +2510,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -2623,9 +2639,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.761", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.761.tgz", - "integrity": "sha512-PIbxpiJGx6Bb8dQaonNc6CGTRlVntdLg/2nMa1YhnrwYOORY9a3ZgGN0UQYE6lAcj/lkyduJN7BPt/JiY+jAQQ==" + "version": "1.4.795", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.795.tgz", + "integrity": "sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -2783,6 +2799,28 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2969,7 +3007,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -3011,9 +3050,9 @@ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3122,6 +3161,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "peer": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -3154,6 +3194,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "peer": true, "dependencies": { "glob": "^7.1.3" @@ -3221,19 +3262,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3268,6 +3296,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3533,6 +3562,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3563,7 +3593,7 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-9.1.1.tgz", "integrity": "sha512-W+nOulP2tYd/ZG99WuZC/I5ljjQQ7EUw/jQGcIb9eu8mDlZxNY2SgcJXTLG9h5gRvqA3uJOe4hZXYsd3EqioMw==", - "deprecated": "< 21.9.0 is no longer supported", + "deprecated": "< 22.5.0 is no longer supported", "hasInstallScript": true, "dependencies": { "debug": "^4.1.0", @@ -3587,6 +3617,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -3672,6 +3703,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3855,6 +3887,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4077,9 +4110,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -4249,16 +4282,6 @@ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -4362,11 +4385,11 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -4634,6 +4657,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -4837,9 +4861,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -4985,7 +5009,7 @@ "version": "19.2.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.2.0.tgz", "integrity": "sha512-rhr5ery8htpOTikmm/wrDU707wtmJ7ccX2WLkBf0A8eYYpscck5/iz04/fHOiIRWMFfnYOvaO9wNb4jcO3Mjyg==", - "deprecated": "< 21.9.0 is no longer supported", + "deprecated": "< 22.5.0 is no longer supported", "hasInstallScript": true, "dependencies": { "cosmiconfig": "7.0.1", @@ -5019,6 +5043,22 @@ "node": ">=14.1.0" } }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/puppeteer-core/node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -5042,6 +5082,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5072,6 +5113,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -5113,9 +5155,9 @@ } }, "node_modules/qunit": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.20.1.tgz", - "integrity": "sha512-scZfyhX8mmP3u/CN2y3CutQb+ppalbpqmm7g/X62M2yOt8ofzsxrRaC+MPmYm/tXxpzs9HGrVeCxZwLoP0tuAA==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.21.0.tgz", + "integrity": "sha512-kJJ+uzx5xDWk0oRrbOZ3zsm+imPULE58ZMIrNl+3POZl4a1k6VXj2E4OiqTmZ9j6hh9egE3kNgnAti9Q+BG6Yw==", "dependencies": { "commander": "7.2.0", "node-watch": "0.7.3", @@ -5235,6 +5277,14 @@ "regexp-tree": "bin/regexp-tree" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -5300,6 +5350,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -5311,6 +5362,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5399,6 +5451,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5899,9 +5952,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/tunnel": { "version": "0.0.6", @@ -6085,9 +6138,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", - "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "funding": [ { "type": "opencollective", @@ -6104,7 +6157,7 @@ ], "dependencies": { "escalade": "^3.1.2", - "picocolors": "^1.0.0" + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -6137,14 +6190,6 @@ "node": ">= 0.10" } }, - "node_modules/validator": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", - "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", @@ -6251,34 +6296,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" - } - }, - "node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, "node_modules/zip-stream": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", @@ -6316,6 +6333,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6353,16 +6371,16 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" }, "@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "requires": { - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -6429,9 +6447,9 @@ } }, "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "peer": true }, "@eslint/eslintrc": { @@ -6451,6 +6469,24 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6497,17 +6533,17 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@microsoft/api-extractor": { - "version": "7.43.3", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.3.tgz", - "integrity": "sha512-F9jYo/CPrBLeDUUFma36sDmLy0WsvJfLs2an6P+NSruths020fLUFZE3YOH/mlpt3QOhzu+026B9PjFVC83dIQ==", - "requires": { - "@microsoft/api-extractor-model": "7.28.15", - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.2.0", + "version": "7.47.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.47.0.tgz", + "integrity": "sha512-LT8yvcWNf76EpDC+8/ArTVSYePvuDQ+YbAUrsTcpg3ptiZ93HIcMCozP/JOxDt+rrsFfFHcpfoselKfPyRI0GQ==", + "requires": { + "@microsoft/api-extractor-model": "7.29.2", + "@microsoft/tsdoc": "~0.15.0", + "@microsoft/tsdoc-config": "~0.17.0", + "@rushstack/node-core-library": "5.4.1", "@rushstack/rig-package": "0.5.2", - "@rushstack/terminal": "0.10.2", - "@rushstack/ts-command-line": "4.19.4", + "@rushstack/terminal": "0.13.0", + "@rushstack/ts-command-line": "4.22.0", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", @@ -6524,13 +6560,13 @@ } }, "@microsoft/api-extractor-model": { - "version": "7.28.15", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.15.tgz", - "integrity": "sha512-kAFX0c1+N+2WpZaiksy8H4RZ1sytJb2ZFVEmil5Rt6IK8UExU80f0/4kegXIs1KF8a/YyRW0Pybc7svlT9j/wQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.29.2.tgz", + "integrity": "sha512-hAYajOjQan3uslhKJRwvvHIdLJ+ZByKqdSsJ/dgHFxPtEbdKpzMDO8zuW4K5gkSMYl5D0LbNwxkhxr51P2zsmw==", "requires": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.2.0" + "@microsoft/tsdoc": "~0.15.0", + "@microsoft/tsdoc-config": "~0.17.0", + "@rushstack/node-core-library": "5.4.1" } }, "@microsoft/dynamicproto-js": { @@ -6542,30 +6578,19 @@ } }, "@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==" + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", + "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==" }, "@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz", + "integrity": "sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==", "requires": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", + "@microsoft/tsdoc": "0.15.0", + "ajv": "~8.12.0", "jju": "~1.4.0", - "resolve": "~1.19.0" - }, - "dependencies": { - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - } + "resolve": "~1.22.2" } }, "@nevware21/grunt-eslint-ts": { @@ -6655,9 +6680,9 @@ } }, "@rollup/plugin-replace": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz", - "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz", + "integrity": "sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==", "requires": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" @@ -6685,7 +6710,7 @@ }, "@rush-temp/1ds-core-js": { "version": "file:projects\\1ds-core-js.tgz", - "integrity": "sha512-/Yn79SncrgzhGMHlOl/nGgScwGVo7fDzp21tAHDsb+3iZgfGiwRrDZP43qwzqWDtP4Bb52QN4gv1Ho0hvukd6g==", + "integrity": "sha512-wqTWM5FfPlt1VaWHtPrfJsWhwtHO0f0JgkM2O7kPNosZHB4/h6oUT2/8wrQMa9kht8BXujZe0mgSArIY2fTX5A==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6712,7 +6737,7 @@ }, "@rush-temp/1ds-post-js": { "version": "file:projects\\1ds-post-js.tgz", - "integrity": "sha512-hB2tfsRGZPlfqUUu+MJW0am1S/IryLmiS2XOtFBIcMTl9Y7+9Cj+8Cv8aDat4jGMphVHrTKuEsjatVe0m3+X/A==", + "integrity": "sha512-Tv2PCInJemZ7aZqFuAmbLOv1cqIgz4yuyjI2WTJ1k1ybrraRUNQd2e/ZYc3cw3dqNQvBDYT9QfHHmo+/4s2rSA==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6733,7 +6758,7 @@ }, "@rush-temp/ai-test-framework": { "version": "file:projects\\ai-test-framework.tgz", - "integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==", + "integrity": "sha512-Bg6MiDIoWkKtTwDm8A66wZZ1t+09mx8u8SVJyFHcHZB0DptQQ1HoQamfkOA0JzS4oT3cd3bYYjTNJkE5cpYC1w==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-ts-plugin": "^0.4.3", @@ -6758,7 +6783,7 @@ }, "@rush-temp/applicationinsights-analytics-js": { "version": "file:projects\\applicationinsights-analytics-js.tgz", - "integrity": "sha512-KtNJ0vXfw47B6ORqA1wtgXfSIWA7LQ2LUNMAokNDr6vC/lLjLWPveg8adZo5ptFh5beffzt5n3yQWllvJVGV/A==", + "integrity": "sha512-i2CZyUTYgDZ+B2rhSMhHaUYEhFWBDwhHqUbh9n1Dy77S+ZxFi6+nmC6VmW5Z8nM/I5QZ24lKTkrCiI+xRuzuAg==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6785,7 +6810,7 @@ }, "@rush-temp/applicationinsights-cfgsync-js": { "version": "file:projects\\applicationinsights-cfgsync-js.tgz", - "integrity": "sha512-TVH5b9aeaKtBgp/afYUHE+2vYuVbuA4Cqewaqu6r/Qds3eQOvUzAfKlur1T+N54gVhcdKkC2aUXUaba23PPRcg==", + "integrity": "sha512-ZaF4qcLxoRQEL3q8YsNgjKLXNjk9crt8eOueSfD3yRpxzSIavkxWPkKqE2eMIKoGrXX+Pg4pL9e7rEx3e3pWUw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6813,7 +6838,7 @@ }, "@rush-temp/applicationinsights-channel-js": { "version": "file:projects\\applicationinsights-channel-js.tgz", - "integrity": "sha512-Egx+Qwpb56RzxVSkcB4xR2FvgbJ55gTCzGN6tSOAUz1n34sWlTdV2zBqJjzrTYrhy/7Y/W6Q/VVuocwH9XzubA==", + "integrity": "sha512-vygsnOvKJS3Io+Ewp+mt2Bqhl8Rg9de77w3epIX14kuwRI0QUUxZud176RGoetOZwBFActvbh0Nk36gKkiY/xA==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6839,7 +6864,7 @@ }, "@rush-temp/applicationinsights-chrome-debug-extension": { "version": "file:projects\\applicationinsights-chrome-debug-extension.tgz", - "integrity": "sha512-RCdFP4mjd5pIjglQIfWH8Yls+QiEdioYS5ziHDEZWyIbd+fYx7iHHRVaqKutMb7/T/LqCDUur0Rm/Ah+do+yYw==", + "integrity": "sha512-30AR1ZiaoNfwF8CjbkcWh2g8w8ECYRFNFhnNmJAjhTcqFyUbdBTifTNBKb4AOeog6DDkN6NWZx9qojQLGoFYbg==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -6872,7 +6897,7 @@ }, "@rush-temp/applicationinsights-clickanalytics-js": { "version": "file:projects\\applicationinsights-clickanalytics-js.tgz", - "integrity": "sha512-AUkKc2bEuPomktpadeO/7nHAww9m+0bDefWkbEZZHvK+KgrG97ZhxzRpl/GGrnb43GujFyl0Hzot0OaPHtYBOA==", + "integrity": "sha512-aXu0vdb+HNR6M+X5JoefcwwMFiQ03DE0St6cM1MEVONpvBC0s17rk245opy65aIulc/7wCPSLYMl4RLSWu+Q0w==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6896,7 +6921,7 @@ }, "@rush-temp/applicationinsights-common": { "version": "file:projects\\applicationinsights-common.tgz", - "integrity": "sha512-d0f4wTojw+nPN+xTB38NH6M6q4xhIVOH15t+HxRLRlWiR/mCxUa/Dsy1dnsRiAZRtNqxD+iFfGYLA9LEDZlwwg==", + "integrity": "sha512-8m3iJe1Aa8lPzAJoDiyALTrDh4m89HcoGXGkjrq47wQ1d+GxIF0x/qPO6YvcRErPYDlBO9IzcWRQojCcH0IIlA==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6921,7 +6946,7 @@ }, "@rush-temp/applicationinsights-core-js": { "version": "file:projects\\applicationinsights-core-js.tgz", - "integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==", + "integrity": "sha512-CFC50QjPVur2gnlZxwcZ2Trd6pwxegt8ndiqTRYK6eGsskVcAeDvMi94hZjmh3LLDPSbUbjmw0TBoTM/+F7bJQ==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6949,7 +6974,7 @@ }, "@rush-temp/applicationinsights-debugplugin-js": { "version": "file:projects\\applicationinsights-debugplugin-js.tgz", - "integrity": "sha512-Tqm3AbMzBpweY1J7oDz8NKU1kfVLw73rS4hHsVkAIECepRsrCQVwHjk1H6N1Yf+08H2pdeXmBRGQ90CFX4SEvQ==", + "integrity": "sha512-7wOjfBVjhxxmCvj3zF63fqCkqGdKTY8xsjomMRBYpM33NM7rN872gqScYWPMvIzxJsw/o996pfWF51upKc2Ojw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -6973,7 +6998,7 @@ }, "@rush-temp/applicationinsights-dependencies-js": { "version": "file:projects\\applicationinsights-dependencies-js.tgz", - "integrity": "sha512-vUGGj1dW27capHkHArIKwz79gnpLZaRtW11Tf9OZj6odeP/2wiH+zZzyS09/NPvcQrA1bUjE+npc5Nj4Sm+1Bg==", + "integrity": "sha512-Jrqd+HFn/DhAlQGvBp4xHnBg/sPj6dcJshUCKs9uoqIitA0rRS9W4D27kJ+GpzAfTe+eDFY3NfkYOj4+ON3nMg==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7000,7 +7025,7 @@ }, "@rush-temp/applicationinsights-example-aisku": { "version": "file:projects\\applicationinsights-example-aisku.tgz", - "integrity": "sha512-gC6YuoTK9qfasA5LcgZXNmqkKBxbRFqENuJEkGC8GLh/ooC/02BDei+31deefPQNVPw6cP9V+kDrlLfRwMVCtQ==", + "integrity": "sha512-nC6XEmHj3+zwP9lfg0SG7U6K38THNl7v1NRJlb9KKjWWy1PptK4kJrAxpezF3ttkid9TFHkUdbXafJPHPXEcGA==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-utils": ">= 0.11.1 < 2.x", @@ -7017,7 +7042,7 @@ }, "@rush-temp/applicationinsights-example-cfgsync": { "version": "file:projects\\applicationinsights-example-cfgsync.tgz", - "integrity": "sha512-782hbmCrD723J2N8X5CtJR5bVuivwCzaKaYe/zn23WvuciexMgu5FpbbnpSfbOERlQ9ONN8yZMcjWf/jjj2t/g==", + "integrity": "sha512-VxuKglaA0xhHc18AYgFDotTve6vPc0Zx2f1dPD+Gc6WXFDKOS6XOQyoG1tyjJ+UUXrwVxz+WGJCFKOtK92W1tw==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -7042,7 +7067,7 @@ }, "@rush-temp/applicationinsights-example-dependencies": { "version": "file:projects\\applicationinsights-example-dependencies.tgz", - "integrity": "sha512-urNbNsZocNRYLyxGWjsclCReYj77rspXuwlmlEbcPPDG17B/b/G5oSpMX+LLE9OeLWgiWWTjnZ75txcCN1YhVA==", + "integrity": "sha512-VjBR3vTtdeL2xYAkhJstxsvBaCjjLSX66JngFZd9Shb5OKVQvq9mDlTjqAVPNlJsA9l4mY7zpLdvqjdhopgERg==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-utils": ">= 0.11.1 < 2.x", @@ -7059,7 +7084,7 @@ }, "@rush-temp/applicationinsights-example-shared-worker": { "version": "file:projects\\applicationinsights-example-shared-worker.tgz", - "integrity": "sha512-vQ7vS5mfy2666gOjFCAVlq0xvu6WGD0/gXO0yfD8UFOmmQVFtQDIYZHQut19xOXbEiEts4nRIpttd7bb5mOuag==", + "integrity": "sha512-fgmYRe9TyA102FTrq1/RC1bniA6BTBLNxD5nmQArbjBOCQjuLBDa+m0Y8jxeLS3EznS8w94+P4Dio4H/0ehnxA==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -7084,7 +7109,7 @@ }, "@rush-temp/applicationinsights-js-release-tools": { "version": "file:projects\\applicationinsights-js-release-tools.tgz", - "integrity": "sha512-6sVB5NMzKj/P9v9UvZlA/IjQSkGeupaDliSt2IZqy+SlR59Hv335Ekz/5f54xMHu+QiARXJATbjX7lDfCMG8qw==", + "integrity": "sha512-e9jw61D/jeRuLlSL+dQ2bFp8iqw6Q9ZMeboqX0CX0iYwjAPRiN/59ZK66D0UOgggNkqYgSEqgDi+ycw9XRtGnA==", "requires": { "globby": "^11.0.0", "grunt": "^1.5.3" @@ -7092,7 +7117,7 @@ }, "@rush-temp/applicationinsights-offlinechannel-js": { "version": "file:projects\\applicationinsights-offlinechannel-js.tgz", - "integrity": "sha512-19H5/5rpWyCkvQ0VAAm5i8DM4K8AyiXdzYlH1TtzgnPquOUxMrnWXEU2evMmTRgOOrbHBi1h6yPe39CpWQbWBA==", + "integrity": "sha512-2BKj2pwDwoosAH1HKMT9qtYLWEWacTNlYXS2esaw0AbQmfgOWkqU7r5SJ1UuX3elQxjqvwLRMCinzsSL5D98KQ==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7118,7 +7143,7 @@ }, "@rush-temp/applicationinsights-osplugin-js": { "version": "file:projects\\applicationinsights-osplugin-js.tgz", - "integrity": "sha512-dBwAyZkE0XuRSYaVrqUP2yEDeysqU+2PgMJHXxQeM2yfiET+mtP7ufFAkXt/ug3+spyS43Ds2E5af+1JGp09+A==", + "integrity": "sha512-JI1bAUBrqo8lPhUw2GA4+5ZIx9MSfE47+E6S9e4FE+RiPfbXnJ0GnRLOClfqhqYLktl+1k7AFR1JXBtOyACOew==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7138,7 +7163,7 @@ }, "@rush-temp/applicationinsights-perfmarkmeasure-js": { "version": "file:projects\\applicationinsights-perfmarkmeasure-js.tgz", - "integrity": "sha512-4IsPweGTnoCgjAr5uhng81pPT/g1vAG35Lw6vKVBtAliEAt0JlFpGg5IpB8pMjKJXEY9SkDtV8QKgCw/O5u11Q==", + "integrity": "sha512-9XvAQfbB2UmBBn3SRA4Ze+kp8OXLROmH5rHPQsZwOirC7Nu/THzsd3ByvvVuz4WwoRXnm8zCbHPhNVaCT+ep+A==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7162,7 +7187,7 @@ }, "@rush-temp/applicationinsights-properties-js": { "version": "file:projects\\applicationinsights-properties-js.tgz", - "integrity": "sha512-ZLaIPMK/oaABTzNZGdIjJHNyToOvB3gbkXsyhfZ0fVCS9kXvnhRa06kxuD8oiWUYP5PaOnhW4MGpB6CrWO6MQQ==", + "integrity": "sha512-DUUFwf4dwjNjMGYnYfBHrWNGccl9nuwmipWuADtvEfEjRDSX7wC7+ZAuJKTGmaUe6z58sRL+fv03WTK85S4Osg==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7189,7 +7214,7 @@ }, "@rush-temp/applicationinsights-rollup-es5": { "version": "file:projects\\applicationinsights-rollup-es5.tgz", - "integrity": "sha512-pZV3ytRYW9T6XrXLTRqAt5c23vrywlwfWQ1rrGVh78hlig+Ns/ZJw+jM4JwgSyvce8hcZiR+z1rm0xpKju+oJA==", + "integrity": "sha512-1Yw2QKlul+WlTRAHhchUxteaSDaeZjskW1H4R3BT7xv7yGZPi0dp4KtKdKAJZQ+/Z+Zxg4XXOWpuDmv/FYmFtQ==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -7212,7 +7237,7 @@ }, "@rush-temp/applicationinsights-rollup-plugin-uglify3-js": { "version": "file:projects\\applicationinsights-rollup-plugin-uglify3-js.tgz", - "integrity": "sha512-WtYrHtc+6IgVGmHIahhl2aYUGuloDq9xCX6VuwObLmccrAqmYq0LYbCanjHi8ugorx/zwwQB37yY3y2WfaDGmw==", + "integrity": "sha512-gp8gJ52kIbJpkT406+PBS7rtyCSUnc72otGxnwywqWCuBJvO1O+qaOCIJBYL/wYk1lDpMKejDqG94vPSSQtnFg==", "requires": { "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", @@ -7232,7 +7257,7 @@ }, "@rush-temp/applicationinsights-shims": { "version": "file:projects\\applicationinsights-shims.tgz", - "integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==", + "integrity": "sha512-z9owAp7EJeQwsnWQTjZPV9eEs/8r0w0kqx9YqUK5KmH+8qYOlMnw+Aaw/pQgW2JeMybLSzkRrL4DmIUTxRivew==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", @@ -7253,7 +7278,7 @@ }, "@rush-temp/applicationinsights-teechannel-js": { "version": "file:projects\\applicationinsights-teechannel-js.tgz", - "integrity": "sha512-hRYwJycPiRggIiGwWHmKDWaWouV09B6ee5Vpdeqr/dFKdgA7s6ezaJwynziWrjKBuuyMW+rLIi3rdOaWSDDjLw==", + "integrity": "sha512-YmUVgNnGCZp/Xi/6MMfhUSX0O4pnRZeQcKlZHlVieBUlQC0hgzNFnft0reOISROi8JYlr9tuRbXP3TCzt/1vzw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7279,7 +7304,7 @@ }, "@rush-temp/applicationinsights-test-module-type-check": { "version": "file:projects\\applicationinsights-test-module-type-check.tgz", - "integrity": "sha512-Dmp/qykXtLR3sMzRIE/qlbolEvpZpWfGH/2jakzqEc/jlB98IFMjqxmj4wPhIj0upPSdxrBek4WKNtuasl91gA==", + "integrity": "sha512-8Oa38KhNm/nQDfJtUeOc5itb2WDLJDin8pEygF+ct6u+bBaf20gJcRHayEL1kE+xqAyiZVBkuHagUXfD9nUALA==", "requires": { "tslib": "*", "typescript": "^4.9.3" @@ -7287,7 +7312,7 @@ }, "@rush-temp/applicationinsights-web": { "version": "file:projects\\applicationinsights-web.tgz", - "integrity": "sha512-g6cksI5J8CPaH7yVlj5RbL2nBjXQFqEcnaXwt1ItA17uRwN5XNi96TGbBuums79A7pfjb93JDJDT296EL+HItg==", + "integrity": "sha512-oGvg1xTmeV5N3Rwb05IWs0UvgvB1wMXVbk+nb1+CKJkwzbRv29qkz7louDAA0mu/uh//yGsZPE/72uysBkmJmA==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7318,7 +7343,7 @@ }, "@rush-temp/applicationinsights-web-basic": { "version": "file:projects\\applicationinsights-web-basic.tgz", - "integrity": "sha512-jkN5S684ogV45t3FnA9nuy0jO3n8J7tz2OQtqLuoIOLqsIG/bkw5piezq5ppKFMhbXpsDNcWj4DX7i/2YCuPSA==", + "integrity": "sha512-ThqfxrDC9icmMwShueGd5TbNSb3hoUT1747h+YVSWS0RtAPcfEzWciQbA2v8M5njrRIbuPpcAC/WFtvSR/kMpg==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7344,11 +7369,11 @@ }, "@rush-temp/applicationinsights-web-config": { "version": "file:projects\\applicationinsights-web-config.tgz", - "integrity": "sha512-WwlTM/noixyLMqKFBLKa9o88N/2Z3dA9m0R6Qc9UvBNseZqPIpvl1vRMDnmwjMMV6lV3FsmeSmjD7LCJphXF2Q==" + "integrity": "sha512-FwPOZ+esirRqdKg9s7VTxtWqGJ9CQ/gIJ0PfUvTolAF9JZCVw5wQeHD4Tv/KiziZhB50CNaGshnPmLpWGVzo9g==" }, "@rush-temp/applicationinsights-web-snippet": { "version": "file:projects\\applicationinsights-web-snippet.tgz", - "integrity": "sha512-CwWhN4T+KwfgP5b2ZVkGz4EGS73Lsxf7lcb4CWxcG0V9m8Cfi1z0HO5C458vxSrZkj/G7YAnBggiMi0p4MsIhw==", + "integrity": "sha512-i3Pey5xpQ9I89tUduEeqEddndOPC9aatmIx94yPhgDdMek3S8hydq9qJNCA3Ql4B52JvHi881rrSCQnVwp6/SQ==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7370,16 +7395,31 @@ } }, "@rushstack/node-core-library": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.2.0.tgz", - "integrity": "sha512-y2+m9bbkl1Xe5pt+8gouzRXtXoA2r7B2xkGDT4lpSCpiAU7HNHmhmqxOz+vTmoCamuTj1zqQbgyuoZ1z9cGdag==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.4.1.tgz", + "integrity": "sha512-WNnwdS8r9NZ/2K3u29tNoSRldscFa7SxU0RT+82B6Dy2I4Hl2MeCSKm4EXLXPKeNzLGvJ1cqbUhTLviSF8E6iA==", "requires": { + "ajv": "~8.13.0", + "ajv-draft-04": "~1.0.0", + "ajv-formats": "~3.0.1", "fs-extra": "~7.0.1", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", - "semver": "~7.5.4", - "z-schema": "~5.0.2" + "semver": "~7.5.4" + }, + "dependencies": { + "ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "requires": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + } + } } }, "@rushstack/rig-package": { @@ -7392,20 +7432,20 @@ } }, "@rushstack/terminal": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.2.tgz", - "integrity": "sha512-oMN4uoz6WUeLR9yWHSR4gEEii+8vjIJXPLp7U0k6zccgmOCJXYPKBK30FGpWfDRmqrcCIJi828SKV9V5FB1a0Q==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.13.0.tgz", + "integrity": "sha512-Ou44Q2s81BqJu3dpYedAX54am9vn245F0HzqVrfJCMQk5pGgoKKOBOjkbfZC9QKcGNaECh6pwH2s5noJt7X6ew==", "requires": { - "@rushstack/node-core-library": "4.2.0", + "@rushstack/node-core-library": "5.4.1", "supports-color": "~8.1.1" } }, "@rushstack/ts-command-line": { - "version": "4.19.4", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.4.tgz", - "integrity": "sha512-OH7SPCTjEus/KNDBZ2RbsbVQZ9/H/TJI+TcuiiQjxZ3beMTcQLGaPt5BuXk/c0AS0FQbOGT+2+AJmTZZq6Fhtw==", + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.0.tgz", + "integrity": "sha512-Qj28t6MO3HRgAZ72FDeFsrpdE6wBWxF3VENgvrXh7JF2qIT+CrXiOJIesW80VFZB9QwObSpkB1ilx794fGQg6g==", "requires": { - "@rushstack/terminal": "0.10.2", + "@rushstack/terminal": "0.13.0", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -7531,12 +7571,6 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "peer": true - }, "@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -7546,9 +7580,9 @@ } }, "@types/lodash": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", - "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==" + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==" }, "@types/minimatch": { "version": "5.1.2", @@ -7611,12 +7645,6 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, - "@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "peer": true - }, "@types/sinon": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.3.3.tgz", @@ -7632,81 +7660,71 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", - "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.12.0.tgz", + "integrity": "sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==", "peer": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/type-utils": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/type-utils": "7.12.0", + "@typescript-eslint/utils": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.6.0", "ts-api-utils": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "peer": true - } } }, "@typescript-eslint/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==", "peer": true, "requires": { - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/typescript-estree": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.12.0.tgz", + "integrity": "sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==", "peer": true, "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0" } }, "@typescript-eslint/type-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", - "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.12.0.tgz", + "integrity": "sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==", "peer": true, "requires": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/typescript-estree": "7.12.0", + "@typescript-eslint/utils": "7.12.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.12.0.tgz", + "integrity": "sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==", "peer": true }, "@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.12.0.tgz", + "integrity": "sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==", "peer": true, "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7742,35 +7760,24 @@ } }, "@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.12.0.tgz", + "integrity": "sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==", "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" - }, - "dependencies": { - "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "peer": true - } + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/typescript-estree": "7.12.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.12.0.tgz", + "integrity": "sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==", "peer": true, "requires": { - "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/types": "7.12.0", "eslint-visitor-keys": "^3.4.3" } }, @@ -7807,16 +7814,30 @@ } }, "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, + "ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "requires": {} + }, + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "requires": { + "ajv": "^8.0.0" + } + }, "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -7997,11 +8018,11 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -8069,9 +8090,9 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "caniuse-lite": { - "version": "1.0.30001617", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", - "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==" + "version": "1.0.30001629", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001629.tgz", + "integrity": "sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==" }, "chalk": { "version": "4.1.2", @@ -8275,9 +8296,9 @@ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "requires": { "ms": "2.1.2" } @@ -8361,9 +8382,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.761", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.761.tgz", - "integrity": "sha512-PIbxpiJGx6Bb8dQaonNc6CGTRlVntdLg/2nMa1YhnrwYOORY9a3ZgGN0UQYE6lAcj/lkyduJN7BPt/JiY+jAQQ==" + "version": "1.4.795", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.795.tgz", + "integrity": "sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw==" }, "encodeurl": { "version": "1.0.2", @@ -8448,6 +8469,24 @@ "text-table": "^0.2.0" }, "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8628,7 +8667,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true }, "fast-levenshtein": { "version": "2.0.6", @@ -8667,9 +8707,9 @@ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "requires": { "to-regex-range": "^5.0.1" } @@ -8830,12 +8870,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "optional": true - }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -9461,9 +9495,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -9616,16 +9650,6 @@ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -9705,11 +9729,11 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -10045,9 +10069,9 @@ "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==" }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "picomatch": { "version": "2.3.1", @@ -10183,6 +10207,14 @@ "ws": "8.10.0" }, "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -10236,9 +10268,9 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, "qunit": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.20.1.tgz", - "integrity": "sha512-scZfyhX8mmP3u/CN2y3CutQb+ppalbpqmm7g/X62M2yOt8ofzsxrRaC+MPmYm/tXxpzs9HGrVeCxZwLoP0tuAA==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.21.0.tgz", + "integrity": "sha512-kJJ+uzx5xDWk0oRrbOZ3zsm+imPULE58ZMIrNl+3POZl4a1k6VXj2E4OiqTmZ9j6hh9egE3kNgnAti9Q+BG6Yw==", "requires": { "commander": "7.2.0", "node-watch": "0.7.3", @@ -10335,6 +10367,11 @@ "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "peer": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -10836,9 +10873,9 @@ "requires": {} }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "tunnel": { "version": "0.0.6", @@ -10966,12 +11003,12 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "update-browserslist-db": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", - "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "requires": { "escalade": "^3.1.2", - "picocolors": "^1.0.0" + "picocolors": "^1.0.1" } }, "uri-js": { @@ -10995,11 +11032,6 @@ "homedir-polyfill": "^1.0.1" } }, - "validator": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", - "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==" - }, "vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", @@ -11074,25 +11106,6 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "peer": true }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true - } - } - }, "zip-stream": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", diff --git a/common/publish/AzStorageHelper/AzStorageHelper.psm1 b/common/publish/AzStorageHelper/AzStorageHelper.psm1 new file mode 100644 index 000000000..6be49fc87 --- /dev/null +++ b/common/publish/AzStorageHelper/AzStorageHelper.psm1 @@ -0,0 +1,926 @@ + +if (Test-Path "../../common/publish/Logging") { + Import-Module -Name "../../common/publish/Logging" +} else { + Import-Module -Name "../../../common/publish/Logging" +} + +$cacheControl30Min = "public, max-age=1800, immutable, no-transform"; + +$metaSdkVer = "aijssdkver" +$metaSdkSrc = "aijssdksrc" +$jsContentType = "text/javascript; charset=utf-8"; +$contentTypeMap = @{ + "js" = $jsContentType; + "map" = "application/json"; + "json" = "application/json"; + "zip" = "application/zip"; + "htm" = "text/html; charset=utf-8"; + "html" = "text/html; charset=utf-8"; +}; + +## Function: InstallRequiredModules +## Purpose: Checks and attempts to install the required Azure Modules +Function InstallRequiredModules ( + [int32] $retry = 1 +) { + if ($retry -le 0) { + Write-LogWarning "--------------------------------------" + Write-LogWarning "Failed to install the required Modules" + Write-LogWarning "--------------------------------------" + Write-Log "" + Write-Log "Please install / run the following from an administrator powershell window" + Write-Log "Install-Module Az.Accounts" + Write-Log "Install-Module Az.Storage" + Write-Log "" + Write-Log "Additional Notes for Internal Application Insights Team" + Write-Log "Please review the 'Release to CDN Failures' Page on the teams documentation for further assistance" + + exit + } + + $commandsExist = $true + $c = Get-Command Connect-AzAccount -errorAction SilentlyContinue + if ($null -eq $c) { + $commandsExist = $false + } else { + Write-Log "Importing Module $($c.Source) for Connect-AzAccount" + Import-Module $c.Source + $c = Get-Command Get-AzStorageAccount -errorAction SilentlyContinue + if ($null -eq $c) { + $commandsExist = $false + } else { + Write-Log "Importing Module $($c.Source) for Get-AzStorageAccount" + Import-Module $c.Source + } + } + + if ($commandsExist -eq $false) { + # You will need to at least have the Az.Storage module installed + $m = Get-Module -ListAvailable -Name "Az.Storage" + if ($null -eq $m) { + Write-Log "The Az.Storage module is not currently installed -- it needs to be" + Write-Log "Attempting to Install Az.Storage Module" + + InstallRequiredModules $($retry-1) + } + } +} + +Function IsGuid( + [string] $value +) { + $guid = New-Object 'System.Guid' + return [System.Guid]::TryParse($value, [ref]$guid) +} + +Function CheckLogin( + [hashtable] $connectDetails +) +{ + $loggedIn = $false + $attempt = 1 + + Try { + Write-Log "Checking Logged in status. $connectDetails" + while ($loggedIn -eq $false) { + $global:Error.Clear() + + if ($attempt -ge 6) { + Write-LogFailure "Unable to login..." + exit 100; + } + + $loggedIn = $true + if ([string]::IsNullOrWhiteSpace($($connectDetails.resourceGroup)) -ne $true) { + if ([string]::IsNullOrWhiteSpace($connectDetails.storeName) -ne $true) { + Write-Log "Attempting to get default storage account for $($connectDetails.resourceGroup) account $($connectDetails.storeName)" + Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -Name $connectDetails.storeName -ErrorAction SilentlyContinue | Out-Null + } else { + Write-Log "Attempting to get default storage account for $($connectDetails.resourceGroup)" + Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -ErrorAction SilentlyContinue | Out-Null + } + } else { + Write-Log "Attempting to get default storage account" + Get-AzStorageAccount -ErrorAction SilentlyContinue | Out-Null + } + + Write-LogErrors $false + + foreach ($eacherror in $global:Error) { + Write-LogWarning "Not Logged in..." + $loggedIn = $false + if ($eacherror.Exception.ToString() -like "* Connect-AzAccount*") { + Write-Log "Logging in... Atempt #$attempt" + $global:Error.Clear() + Login-AzAccount -ErrorAction SilentlyContinue + Write-LogErrors $false + break + } elseif ($eacherror.Exception.ToString() -like "* Connect-AzAccount*") { + Write-Log "Connecting... Atempt #$attempt" + $global:Error.Clear() + if ([string]::IsNullOrWhiteSpace($connectDetails.subscriptionId) -ne $true -and (IsGuid($connectDetails.subscriptionId) -eq $true)) { + Connect-AzAccount -ErrorAction SilentlyContinue -SubscriptionId $connectDetails.subscriptionId | Out-Null + } else { + Connect-AzAccount -ErrorAction SilentlyContinue | Out-Null + } + + Write-LogErrors $false + break + } else { + Write-LogWarning "Unexpected failure $($eacherror.Exception)" + } + } + + $attempt ++ + } + + $global:Error.Clear() + } + Catch [error] + { + Write-LogException error + } +} + +Function ParseCdnStorePath ( + [hashtable] $connectDetails +) +{ + if ([string]::IsNullOrWhiteSpace($connectDetails.cdnStorePath) -eq $true) { + Write-LogFailure "Invalid Store Path ($($connectDetails.cdnStorePath))" + exit 10 + } + + $connectDetails.storeName = $connectDetails.cdnStorePath + $splitOptions = [System.StringSplitOptions]::RemoveEmptyEntries + $parts = $connectDetails.cdnStorePath.split(":", $splitOptions) + if ($parts.Length -eq 3) { + $connectDetails.subscriptionId = $parts[0] + $connectDetails.resourceGroup = $parts[1] + $connectDetails.storeName = $parts[2] + } elseif ($parts.Length -eq 2) { + $connectDetails.subscriptionId = $parts[0] + $connectDetails.storeName = $parts[1] + } elseif ($parts.Length -ne 1) { + Write-LogFailure "Invalid Store Path ($($connectDetails.cdnStorePath))" + exit 11 + } + + if ([string]::IsNullOrWhiteSpace($connectDetails.storeName) -eq $true) { + Write-LogFailure "Missing Storage name from Path ($($connectDetails.cdnStorePath))" + exit 12 + } + + Write-Log "----------------------------------------------------------------------" + if ([string]::IsNullOrWhiteSpace($connectDetails.subscriptionId) -ne $true) { + Write-Log "Subscription: $($connectDetails.subscriptionId)" + } + + if ([string]::IsNullOrWhiteSpace($connectDetails.resourceGroup) -ne $true) { + Write-Log "Group : $($connectDetails.resourceGroup)" + } + + Write-Log "StoreName : $($connectDetails.storeName)" + Write-Log "----------------------------------------------------------------------" + + return $connectDetails +} + +Function ValidateAccess ( + [hashtable] $connectDetails +) +{ + if ($null -eq $connectDetails) { + $connectDetails = @{} + } + + CheckLogin($connectDetails) | Out-Null + if (Get-HasErrors -eq $true) { + exit 2 + } + + $store = $null + $subs = $null + if ([string]::IsNullOrWhiteSpace($connectDetails.subscriptionId) -ne $true -and (IsGuid($connectDetails.subscriptionId) -eq $true)) { + Select-AzSubscription -SubscriptionId $connectDetails.subscriptionId | Out-Null + if ([string]::IsNullOrWhiteSpace($connectDetails.resourceGroup) -ne $true -and [string]::IsNullOrWhiteSpace($connectDetails.storeName) -ne $true) { + Write-Log " Getting Storage Account" + $accounts = Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -Name $connectDetails.storeName + if ($null -ne $accounts -and $accounts.Length -eq 1) { + $store = $accounts[0] + } + } + + if ($null -eq $store) { + Write-Log " Selecting Subscription" + $subs = Get-AzSubscription -SubscriptionId $connectDetails.subscriptionId | Where-Object State -eq "Enabled" + } + } else { + Write-Log " Finding Subscriptions" + $subs = Get-AzSubscription | Where-Object State -eq "Enabled" + } + + if ($null -eq $store -and $null -ne $subs) { + if ($null -eq $subs -or $subs.Length -eq 0) { + Write-LogFailure " - No Active Subscriptions" + exit 500; + } + + # Limit to the defined subscription + if ([string]::IsNullOrWhiteSpace($connectDetails.subscriptionId) -ne $true) { + $subs = $subs | Where-Object Id -like $("*$($connectDetails.subscriptionId)*") + } + + Write-Log " Finding Storage Account" + $accounts = $null + foreach ($id in $subs) { + Write-Log " Checking Subscription $($id.Id)" + Select-AzSubscription -SubscriptionId $id.Id | Out-Null + $accounts = $null + if ([string]::IsNullOrWhiteSpace($connectDetails.resourceGroup) -ne $true) { + if ([string]::IsNullOrWhiteSpace($connectDetails.storeName) -eq $true) { + $accounts = Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -Name $connectDetails.storeName + } else { + $accounts = Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup + } + } else { + $accounts = Get-AzStorageAccount + } + + if ($null -ne $accounts -and $accounts.Length -ge 1) { + # If a resource group has been supplied limit to just that group + if ([string]::IsNullOrWhiteSpace($connectDetails.resourceGroup) -ne $true) { + $accounts = $accounts | Where-Object ResourceGroupName -eq $connectDetails.resourceGroup + } + + $accounts = $accounts | Where-Object StorageAccountName -eq $connectDetails.storeName + + if ($accounts.Length -gt 1) { + Write-LogFailure " - Too many [$($accounts.Length)] matching storage accounts located for $($connectDetails.cdnStorePath) please specify the resource group as a prefix for the store name parameter '[:[:]]" + exit 300; + } elseif ($accounts.Length -eq 1 -and $null -eq $store) { + Write-Log " - Found Candidate Subscription $($id.Id)" + $connectDetails.subscriptionId = $id.Id + $store = $accounts[0] + } elseif ($accounts.Length -ne 0 -or $null -ne $store) { + Write-LogFailure " - More than 1 storage account was located for $($connectDetails.cdnStorePath) please specify the resource group as a prefix for the store name parameter '[:[:]]" + exit 300; + } else { + Write-Log " - No Matching Accounts" + } + } else { + Write-Log " - No Storage Accounts" + } + } + } + + if ($null -eq $store) { + Write-LogFailure " Unable to access or locate a storage account $($connectDetails.cdnStorePath)" + exit 300; + } + + $connectDetails.storeName = $store.StorageAccountName + $connectDetails.resourceGroup = $store.ResourceGroupName + + Write-Log "Getting StorageContext for" + if ([string]::IsNullOrWhiteSpace($connectDetails.subscriptionId) -ne $true) { + Write-Log " Subscription: $($connectDetails.subscriptionId)" + } + + if ([string]::IsNullOrWhiteSpace($connectDetails.resourceGroup) -ne $true) { + Write-Log " Group : $($connectDetails.resourceGroup)" + } + + Write-Log " StoreName : $storeName" + $connectDetails.storageContext = $store.context + if ($null -eq $connectDetails.storageContext) { + Write-LogFailure " - Unable to access or locate a storage account $($connectDetails.cdnStorePath)" + exit 301; + } + + return $connectDetails +} + +Function GetContainerContext( + [hashtable] $connectDetails, + [string] $storagePath +) { + # Don't try and publish anything if any errors have been logged + if (Get-HasErrors -eq $true) { + exit 2 + } + + while($storagePath.endsWith("/") -eq $true) { + $storagePath = $storagePath.Substring(0, $storagePath.Length-1) + } + + $blobPrefix = "" + $storageContainer = "" + + $tokens = $storagePath.split("/", 2) + if ($tokens.length -eq 0) { + Write-LogWarning "Invalid storage path - $storagePath" + exit + } + + $storageContainer = $tokens[0] + if ($tokens.Length -eq 2) { + $blobPrefix = $tokens[1] + "/" + } + + if ($connectDetails.storeContainer.Length -gt 0) { + $blobPrefix = $storageContainer + "/" + $blobPrefix + $storageContainer = $connectDetails.storeContainer + } + + if ($connectDetails.testOnly -eq $true) { + $blobPrefix = $storageContainer + "/" + $blobPrefix + $storageContainer = "tst" + } + + Write-Log "Container : $storageContainer Prefix: $blobPrefix" + + # Use the Users Storage Context credentials + $azureContext = $connectDetails.storageContext + if ([string]::IsNullOrWhiteSpace($connectDetails.sasToken) -ne $true) { + # Use the Sas token + $azureContext = New-AzStorageContext -StorageAccountName $connectDetails.storeName -Sastoken $connectDetails.sasToken -ErrorAction SilentlyContinue + } + + $azContainer = Get-AzStorageContainer -Name $storageContainer -Context $azureContext -ErrorAction SilentlyContinue + if ($null -eq $azContainer) { + Write-Log "Container [$storageContainer] does not exist" + return + } + + if (Get-HasErrors -eq $true) { + exit 3 + } + + [hashtable]$return = @{} + $return.azureContext = $azureContext + $return.container = $azContainer + $return.storageContainer = $storageContainer + $return.blobPrefix = $blobPrefix + + return $return +} + +Function Get-VersionDetails ( + [string] $ver +) { + [hashtable] $version = @{} + $version.full = $ver + + $parts = $ver -split "\+", 2 + if ($parts.Length -eq 2) { + $version.bldNum = $parts[1] + $ver = $parts[0] + } else { + $version.bldNum = "" + } + + $parts = $ver -split "-", 2 + $version.ver = $parts[0] + if ($parts.Length -eq 2) { + $version.preRel = $parts[1] + $version.type = ((($parts[1] -split "\+")[0] -split "\.")[0] -split "-")[0] + } else { + $version.preRel = "" + $version.type = "release" + } + + return $version; +} + + +Function Get-FileVersion ( + [string] $name +) { + $regMatch = '^(.*\/)*([^\/\d]*\.)(\d+(\.\d+)*(-[\w\d\-\+]+\.?[\w\d\-\+]*)?)(\.(?:gbl\.js|gbl\.min\.js|cjs\.js|cjs\.min\.js|js|min\.js|integrity\.json|cfg\.json|zip)(?:\.map)?)$' + $match = ($name | select-string $regMatch -AllMatches).matches + $contentType = $jsContentType + + if ($null -eq $match) { + return $null + } + + $ext = $match.groups[6].value + $tokens = $ext.split(".") + if ($tokens.length -gt 0) { + $theExt = $tokens[$tokens.Count - 1] + $contentType = $contentTypeMap[$theExt] + } + + [hashtable]$return = @{} + $return.path = $match.groups[1].value + $return.prefix = $match.groups[2].value + $return.ver = $match.groups[3].value + $return.verType = $match.groups[5].value + $return.ext = $match.groups[6].value + $return.contentType = $contentType + + return $return +} + +Function Get-VersionFiles( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [string] $storagePath, + [string] $filePrefix, + [string] $activeVersion +) { + $context = GetContainerContext $global:connectDetails $storagePath + if ($null -eq $context) { + return + } + + $wildCard = $false + if ($filePrefix.EndsWith('*') -eq $true) { + $wildCard = $true + $filePrefix = $filePrefix.Substring(0, $filePrefix.Length - 1) + } + + $blobs = Get-AzStorageBlob -Container $context.storageContainer -Context $context.azureContext -Prefix "$($context.blobPrefix)$filePrefix" -ErrorAction SilentlyContinue + foreach ($blob in $blobs) { + $version = Get-FileVersion $blob.Name + if ($null -ne $version -and [string]::IsNullOrWhiteSpace($version.ver) -ne $true -and + ([string]::IsNullOrWhiteSpace($activeVersion) -eq $true -or $version.ver -eq $activeVersion)) { + + $isMatch = $false + if ($wildCard -ne $true -and $version.prefix -eq $filePrefix) { + $isMatch = $true + } elseif ($wildCard -eq $true -and $version.prefix.StartsWith($filePrefix) -eq $true) { + $isMatch = $true + } + + if ($isMatch -eq $true) { + $fileList = $null + if ($files.ContainsKey($version.ver) -ne $true) { + $fileList = New-Object 'system.collections.generic.list[hashtable]' + $files.Add($version.ver, $fileList) + } else { + $fileList = $files[$version.ver] + } + + $theBlob = [hashtable]@{} + $theBlob.path = "$($context.storageContainer)/$($version.path)" + $theBlob.blob = $blob + $theBlob.context = $context + $fileList.Add($theBlob) + } + } + } +} + +Function HasMetaTag( + $blob, + [string] $metaKey +) { + foreach ($dataKey in $blob.ICloudBlob.Metadata.Keys) { + if ($dataKey -ieq $metaKey) { + return $true + } + } + + return $false +} + +Function GetMetaTagValue( + $blob, + [string] $metaKey +) { + $value = "" + + foreach ($dataKey in $blob.ICloudBlob.Metadata.Keys) { + if ($dataKey -ieq $metaKey) { + $value = $blob.ICloudBlob.Metadata[$dataKey] + break + } + } + + return $value +} + +Function RemoveMetadata( + $cloudBlob, + [string] $dataKey +) { + # Removing and adding the attribute to avoid duplication of values when the key case is different + $changed = $true + while ($changed -eq $true) { + $changed = $false + foreach ($dstKey in $cloudBlob.Metadata.Keys) { + if ($dstKey -ieq $dataKey) { + $cloudBlob.Metadata.Remove($dstKey) | Out-Null + $changed = $true + break + } + } + } +} + +Function CopyBlob( + $blobContext, + $blob, + $destContext, + $destName +) { + Write-LogErrors + + # Don't perform any copyies if if any errors have been logged as we want to make sure the attributes have been set + if (Get-HasErrors -eq $true) { + exit 2 + } + + Write-Log " - $($blob.Name) ==> $destName" + + $srcCloudBlob = $blob.ICloudBlob.FetchAttributes() + + $blobResult = Start-AzStorageBlobCopy -Context $blobContext -SrcContainer $blob.ICloudBlob.Container.Name -SrcBlob $blob.ICloudBlob.Name -DestContext $destContext.azureContext -DestContainer "$($destContext.storageContainer)" -DestBlob $destName -Force + Write-LogErrors + + # Don't try and publish anything if any errors have been logged + if (Get-HasErrors -eq $true) { + exit 2 + } + + $status = $blobResult | Get-AzStorageBlobCopyState + while ($status.Status -eq "Pending") { + $status = $blobResult | Get-AzStorageBlobCopyState + Write-Log $status + Start-Sleep 10 + } + + # Don't try and publish anything if any errors have been logged + if (Get-HasErrors -eq $true) { + exit 2 + } + + # Make sure the metadata and properties are set correctly + # - When destination did not exist then the properties and metadata are set correctly + # - But when overwriting an existing blob the properties and metadata are not updated + $newBlob = Get-AzStorageBlob -Context $destContext.azureContext -Container "$($destContext.storageContainer)" -Blob $destName + $cloudBlob = $newBlob.ICloudBlob + $cloudBlob.FetchAttributes() + $cloudBlob.Properties.CacheControl = $blob.ICloudBlob.Properties.CacheControl + foreach ($dataKey in $blob.ICloudBlob.Metadata.Keys) { + RemoveMetadata $cloudBlob $dataKey + $cloudBlob.Metadata.Add($dataKey, $blob.ICloudBlob.Metadata[$dataKey]) | Out-Null + } + + $cloudBlob.SetProperties() + $cloudBlob.SetMetadata() +} + +Function SetProperties( + $stagedBlob, + $srcName, + $ver, + $cacheControl +) { + $cloudBlob = $stagedBlob.ICloudBlob + $cloudBlob.FetchAttributes() + $cloudBlob.Properties.CacheControl = $cacheControl + RemoveMetadata $cloudBlob $metaSdkSrc + $cloudBlob.Metadata.Add($metaSdkSrc, $srcName) | Out-Null + + # Make sure the version metadata is set + if ($cloudBlob.Metadata.ContainsKey($metaSdkVer) -eq $false -or + [string]::IsNullOrWhiteSpace($cloudBlob.Metadata[$metaSdkVer]) -eq $true) { + RemoveMetadata $cloudBlob $metaSdkVer + $cloudBlob.Metadata.Add($metaSdkVer, $ver) | Out-Null + } + $cloudBlob.SetProperties() + $cloudBlob.SetMetadata() + + Write-LogErrors + # Don't try and publish anything if any errors have been logged + if (Get-HasErrors -eq $true) { + exit 2 + } +} + +Function PublishFiles( + $files, + [string] $storagePath, + [string] $cacheControlValue, + [string] $defaultContentType, + [bool] $overwrite +) { + + # Don't try and publish anything if any errors have been logged + if (Get-HasErrors -eq $true) { + exit 2 + } + + while($storagePath.endsWith("/") -eq $true) { + $storagePath = $storagePath.Substring(0, $storagePath.Length-1) + } + + $blobPrefix = "" + $storageContainer = "" + + $tokens = $storagePath.split("/", 2) + if ($tokens.length -eq 0) { + Write-LogWarning "Invalid storage path - $storagePath" + exit + } + + $storageContainer = $tokens[0] + if ($tokens.Length -eq 2) { + $blobPrefix = $tokens[1] + "/" + } + + if ($global:connectDetails.storeContainer.Length -gt 0) { + $blobPrefix = $storageContainer + "/" + $blobPrefix + $storageContainer = $global:connectDetails.storeContainer + } + + if ($global:connectDetails.testOnly -eq $true) { + $blobPrefix = $storageContainer + "/" + $blobPrefix + $storageContainer = "tst" + } + + Write-Log "Container : $storageContainer Prefix: $blobPrefix" + Write-Log " Using Cache Control: $cacheControlValue" + + # Use the Users Storage Context credentials + $azureContext = $global:connectDetails.storageContext + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -ne $true) { + # Use the Sas token + $azureContext = New-AzStorageContext -StorageAccountName $global:connectDetails.storeName -Sastoken $global:connectDetails.sasToken + } + + $container = Get-AzStorageContainer -Name $storageContainer -Context $azureContext -ErrorAction SilentlyContinue + if ($null -eq $container) { + $Error.Clear() + New-AzStorageContainer -Name $storageContainer -Context $azureContext -Permission Blob -ErrorAction SilentlyContinue | Out-Null + Write-LogErrors + } + + if (Get-HasErrors -eq $true) { + exit 3 + } + + # upload files to Azure Storage + foreach($name in $files.Keys) { + $path = $files[$name] + + $metadata = [hashtable]@{} + $version = Get-FileVersion $name + if ($null -ne $version) { + $metadata[$metaSdkVer] = $version.ver + } + + $contentType = $defaultContentType + if ($null -ne $version.contentType) { + $contentType = $version.contentType + } + + $newBlob = $null + $blob = Get-AzStorageBlob -Container $storageContainer -Blob ($blobPrefix + $name) -Context $azureContext -ErrorAction SilentlyContinue + if ($null -ne $blob -and $blob.Count -ne 0) { + if ($overwrite -eq $true) { + Write-Log " Overwriting $($blobPrefix + $name) as [$($version.ext) -> ($contentType)] with version $($version.ver)" + $newBlob = Set-AzStorageBlobContent -Force -Container $storageContainer -File $path -Blob ($blobPrefix + $name) -Context $azureContext -Properties @{CacheControl = $cacheControlValue; ContentType = $contentType} -Metadata $metadata + if ($null -eq $newBlob) { + Write-LogFailure " Failed to overwrite/upload $($blobPrefix + $name)" + } + } else { + Write-LogWarning " $($blobPrefix + $name) is already present" + } + } else { + Write-Log " Uploading $($blobPrefix + $name) as [$($version.ext) -> ($contentType)] with version $($version.ver)" + $newBlob = Set-AzStorageBlobContent -Container $storageContainer -File $path -Blob ($blobPrefix + $name) -Context $azureContext -Properties @{CacheControl = $cacheControlValue; ContentType = $contentType} -Metadata $metadata + if ($null -eq $newBlob) { + Write-LogFailure " Failed to upload $($blobPrefix + $name)" + } + } + + # Stop publishing if any errors have been logged + if (Get-HasErrors -eq $true) { + exit 5 + } + } +} + +Function AddReleaseFile( + $files, + [string] $releaseDir, + [string] $name, + [boolean] $optional = $false +) { + $sourcePath = (Join-Path $releaseDir -ChildPath ($name)) + + if (-Not (Test-Path $sourcePath)) { + if ($false -eq $optional) { + Write-LogWarning "Missing expected source file '$sourcePath'"; + exit + } else { + return + } + } + + Write-Log " - $sourcePath" + $files.Add($name, $sourcePath) +} + +Function GetPackageVersion( + [string] $jsSdkDir +) +{ + if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) { + Write-LogWarning "Invalid JS Sdk Path" + exit + } + + Write-Log "Releasing from : $jsSdkDir" + + # find version number + $packageJsonPath = Join-Path $jsSdkDir -ChildPath "package.json" + if (-Not (Test-Path $packageJsonPath)) { + Write-LogWarning "'$packageJsonPath' file not found, please enter the top JSSDK directory."; + exit + } + + $packagesJson = (Get-Content $packageJsonPath -Raw) | ConvertFrom-Json + + return Get-VersionDetails $packagesJson.version +} + +Function ListVersions( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [boolean] $activeOnly, + [boolean] $showFiles +) { + + $sortedKeys = $files.Keys | Sort-Object + $orderedKeys = New-Object 'system.collections.generic.list[string]' + foreach ($key in $sortedKeys) { + $verParts = $key.split("."); + if ($verParts.Length -ge 3) { + continue + } + $orderedKeys.Add($key) + } + + if ($activeOnly -ne $true) { + foreach ($key in $sortedKeys) { + $verParts = $key.split("."); + if ($verParts.Length -lt 3) { + continue + } + $orderedKeys.Add($key) + } + } + + foreach ($key in $orderedKeys) { + $verParts = $key.split("."); + if ($activeOnly -eq $true -and $verParts.Length -gt 2) { + continue + } + + $fileList = $files[$key] + $paths = [hashtable]@{} + if ($showFiles -ne $true) { + Write-Log $("v{0,-12} ({1,2})" -f $key,$($fileList.Count)) + $pathList = "" + foreach ($theBlob in $fileList) { + $thePath = $theBlob.path + if (HasMetaTag($theBlob, $metaSdkSrc)) { + $sdkVer = GetMetaTagValue $theBlob $metaSdkSrc + $version = Get-FileVersion $sdkVer + $thePath = "$($version.path)$($version.prefix)$($version.ver)" + } + + if ($paths.ContainsKey($thePath) -ne $true) { + $paths[$thePath] = 1 + $value = "{0,-20}" -f $thePath + $pathList = "$pathList$value " + } else { + $paths[$thePath] = ($paths[$thePath] + 1) + } + } + + foreach ($thePath in $paths.Keys | Sort-Object) { + Write-Log $(" - {1,-40} ({0})" -f $paths[$thePath],$thePath) + } + + #Write-Log $("v{0,-8} ({1,2}) - {2}" -f $key,$($fileList.Count),$pathList.Trim()) + } else { + Write-Log $("v{0,-12} ({1,2})" -f $key,$($fileList.Count)) + foreach ($theBlob in $fileList) { + $blob = $theBlob.blob + $blob.ICloudBlob.FetchAttributes() + $sdkVersion = GetMetaTagValue $blob $metaSdkVer + if ([string]::IsNullOrWhiteSpace($sdkVersion) -ne $true) { + $sdkVersion = "v$sdkVersion" + } else { + $sdkVersion = "---" + } + + $metaTags = "" + foreach ($dataKey in $blob.ICloudBlob.Metadata.Keys) { + if ($dataKey -ine $metaSdkVer) { + $metaTags = "$metaTags$dataKey=$($blob.ICloudBlob.Metadata[$dataKey]); " + } + } + + $cacheControl = $blob.ICloudBlob.Properties.CacheControl + $cacheControl = $cacheControl -replace "public","pub" + $cacheControl = $cacheControl -replace "max-age=31536000","1yr" + $cacheControl = $cacheControl -replace "max-age=1800","30m" + $cacheControl = $cacheControl -replace "max-age=900","15m" + $cacheControl = $cacheControl -replace "max-age=300"," 5m" + $cacheControl = $cacheControl -replace "immutable","im" + $cacheControl = $cacheControl -replace "no-transform","no-trns" + $cacheControl = $cacheControl -replace ", "," " + + Write-Log $(" - {0,-64}{3,-26}{1,8:N1} Kb {2:yyyy-MM-dd HH:mm:ss} {4,10} {5}" -f $($blob.ICloudBlob.Container.Name + "/" + $blob.Name),($blob.Length/1kb),$blob.LastModified,$sdkVersion,$cacheControl,$metaTags) + } + } + } +} + +Function SetActiveVersion( + [system.collections.generic.list[hashtable]] $fileList, + [string] $storePath, + [boolean] $minorOnly, + [boolean] $setUnversioned = $false +) { + + $destContext = GetContainerContext $global:connectDetails $storePath + + Write-Log "Storage Path : $storePath" + Write-Log "Container : $($destContext.storageContainer)" + Write-Log "BlobPrefix: $($destContext.blobPrefix)" + + # Stage the version updates + foreach ($theBlob in $fileList) { + $blob = $theBlob.blob + $blobContext = $theBlob.context.azureContext + Write-Log $("Copying: {0,-40} {1,6:N1} Kb {2:yyyy-MM-dd HH:mm:ss}" -f $($blob.ICloudBlob.Container.Name + "/" + $blob.Name),($blob.Length/1kb),$blob.LastModified) + + $version = Get-FileVersion $blob.Name + if ($null -ne $version) { + $verDetails = Get-VersionDetails $version.ver + $verParts = $verDetails.ver.Split(".") + if ($verParts.Length -ne 3) { + Write-LogFailure "ScriptError: Invalid Version! [$activeVersion]" + } + + $preRel = "" + if ($verDetails.type -ne "release") { + $preRel = "-" + $verDetails.type + } + + # Don't try and publish anything if any errors have been logged + if (Get-HasErrors -eq $true) { + exit 2 + } + + $stageName = "$($version.path)$($version.prefix)$($verParts[0]).$($verParts[1])$($preRel)$($version.ext).stage" + CopyBlob $blobContext $blob $destContext $stageName + + $stagedBlob = Get-AzStorageBlob -Context $destContext.azureContext -Container $destContext.storageContainer -Blob $stageName + SetProperties $stagedBlob "[$($destContext.storageContainer)]/$($blob.Name)" $version.ver $cacheControl30Min + + $minorName = "$($version.path)$($version.prefix)$($verParts[0]).$($verParts[1])$($preRel)$($version.ext)" + CopyBlob $blobContext $stagedBlob $destContext $minorName + + if ($minorOnly -eq $false) { + $majorName = "$($version.path)$($version.prefix)$($verParts[0])$($preRel)$($version.ext)" + CopyBlob $blobContext $stagedBlob $destContext $majorName + } + + if ($setUnversioned -eq $true) { + $unVerName = "$($version.path)$($version.prefix)$($preRel)$($version.ext)" -Replace "\.\.", "." -Replace "\.-", "." + CopyBlob $blobContext $stagedBlob $destContext $unVerName + } + + # Remove the staged files + $stagedBlob | Remove-AzStorageBlob -Force + } + } +} + +Export-ModuleMember -Function InstallRequiredModules +Export-ModuleMember -Function IsGuid +Export-ModuleMember -Function CheckLogin +Export-ModuleMember -Function ParseCdnStorePath +Export-ModuleMember -Function ValidateAccess +Export-ModuleMember -Function GetContainerContext +Export-ModuleMember -Function Get-VersionDetails +Export-ModuleMember -Function Get-FileVersion +Export-ModuleMember -Function Get-VersionFiles +Export-ModuleMember -Function HasMetaTag +Export-ModuleMember -Function GetMetaTagValue +Export-ModuleMember -Function RemoveMetadata +Export-ModuleMember -Function CopyBlob +Export-ModuleMember -Function SetProperties +Export-ModuleMember -Function PublishFiles +Export-ModuleMember -Function AddReleaseFile +Export-ModuleMember -Function GetPackageVersion +Export-ModuleMember -Function ListVersions +Export-ModuleMember -Function SetActiveVersion \ No newline at end of file diff --git a/extensions/applicationinsights-clickanalytics-js/scripts/listAzCdnVersions.ps1 b/extensions/applicationinsights-clickanalytics-js/scripts/listAzCdnVersions.ps1 new file mode 100644 index 000000000..4b3fcbe7e --- /dev/null +++ b/extensions/applicationinsights-clickanalytics-js/scripts/listAzCdnVersions.ps1 @@ -0,0 +1,114 @@ +param ( + [string] $container = $null, # Identify the container that you want to check blank == all + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $showFiles = $false, # Show the individual files with details as well + [switch] $activeOnly = $false, # Only show the active (deployed) versions + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Container : $container" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Log Path : $logDir" + Write-Log "Show Files : $showFiles" + Write-Log "Test Mode : $testOnly" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + # Validate parameters + if ([string]::IsNullOrWhiteSpace($container) -ne $true -and "beta","next","public", "dev", "nightly" -NotContains $container) { + Write-LogFailure "[$($container)] is not a valid value, must be beta, next or public" + } +} + +Function Get-AllVersionFiles( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [string] $storagePath +) { + Get-VersionFiles $files "$storagePath/ext" "ai.clck." $null +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath, "listCdnVersionsLog" +Write-LogParams +Validate-Params + +# Don't try and list anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + + +# Get the public files (scripts/b) +if ([string]::IsNullOrWhiteSpace($container) -eq $true) { + Get-AllVersionFiles $files "scripts/b" + Get-AllVersionFiles $files "beta" + Get-AllVersionFiles $files "next" + Get-AllVersionFiles $files "dev" + Get-AllVersionFiles $files "nightly" +} + +if ([string]::IsNullOrWhiteSpace($container) -ne $true) { + if ($container -eq "public") { + Get-AllVersionFiles $files "scripts/b" + } elseif ($container -eq "beta" -or $container -eq "next" -or $container -eq "dev" -or $container -eq "nightly") { + Get-AllVersionFiles $files "$container" + } else { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + Get-AllVersionFiles $files "$container" + } +} + +ListVersions $files $activeOnly $showFiles + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-clickanalytics-js/scripts/publishAzReleaseToCdn.ps1 b/extensions/applicationinsights-clickanalytics-js/scripts/publishAzReleaseToCdn.ps1 new file mode 100644 index 000000000..f761df45b --- /dev/null +++ b/extensions/applicationinsights-clickanalytics-js/scripts/publishAzReleaseToCdn.ps1 @@ -0,0 +1,149 @@ +param ( + [string] $releaseFrom = $null, # The root path for where to find the files to be released + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $overwrite = $false, # Overwrite any existing files + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +$global:cacheValue = $null + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Overwrite : $overwrite" + Write-Log "Test Mode : $testOnly" + Write-Log "SourcePath : $jsSdkDir" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function GetReleaseFiles ( + [hashtable] $verDetails +) +{ + $version = $verDetails.full + Write-Log "Version : $($verDetails.full)" + Write-Log " Number : $($verDetails.ver)" + Write-Log " Type : $($verDetails.type)" + Write-Log " BldNum : $($verDetails.bldNum)" + + # check if the minified dir exists + $jsSdkSrcDir = Join-Path $jssdkDir -ChildPath "browser\es5\"; + + if (-Not (Test-Path $jsSdkSrcDir)) { + Write-LogWarning "'$jsSdkSrcDir' directory doesn't exist. Compile JSSDK first."; + exit + } + + $files = New-Object 'system.collections.generic.dictionary[string,string]' + + Write-Log "Adding files"; + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.integrity.json" $true + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.js" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.cjs.js" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.cjs.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.cjs.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.cjs.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.gbl.js" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.gbl.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.gbl.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.clck.$version.gbl.min.js.map" + + return $files +} + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "publishReleaseCdnLog" + +$jsSdkDir = $releaseFrom +if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) { + $jsSdkDir = Split-Path (Split-Path $MyInvocation.MyCommand.Path) -Parent +} + +$cacheControl1Year = "public, max-age=31536000, immutable, no-transform"; +$contentType = "text/javascript; charset=utf-8"; + +Write-LogParams + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +$version = GetPackageVersion $jsSdkDir + +$releaseFiles = GetReleaseFiles $version # Get the versioned files only +if ($null -eq $releaseFiles -or $releaseFiles.Count -eq 0) { + Write-LogFailure "Unable to find any release files" +} + +Write-Log "Release Files : $($releaseFiles.Count)" +Write-Log "----------------------------------------------------------------------" + +# Publish the full versioned files to all release folders +if ($version.type -eq "release") { + # Normal publishing deployment + PublishFiles $releaseFiles "beta/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "scripts/b/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "rc") { + PublishFiles $releaseFiles "beta/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + # Publish to release type folder folder + PublishFiles $releaseFiles "$($version.type)/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + # Publish to release nightly folder folder + PublishFiles $releaseFiles "nightly/ext" $cacheControl1Year $contentType $overwrite +} +else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + PublishFiles $releaseFiles "$($version.type)/ext" $cacheControl1Year $contentType $overwrite +} + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-clickanalytics-js/scripts/setAzActiveCdnVersion.ps1 b/extensions/applicationinsights-clickanalytics-js/scripts/setAzActiveCdnVersion.ps1 new file mode 100644 index 000000000..7376278ca --- /dev/null +++ b/extensions/applicationinsights-clickanalytics-js/scripts/setAzActiveCdnVersion.ps1 @@ -0,0 +1,160 @@ +[CmdletBinding()] +param ( + [string] $container = "", # The container to update + [string] $activeVersion = "", # The version to copy as the active version + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $minorOnly = $false, # Only set the active minor version (v2.x) and not the major version (v2) + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + Write-Log "Container : $container" + Write-Log "Version : $activeVersion" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Test Mode : $testOnly" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + if ([string]::IsNullOrWhiteSpace($activeVersion) -eq $true) { + Write-LogFailure "The Active version is not specified" + exit + } + + $version = Get-VersionDetails $activeVersion + + if ([string]::IsNullOrWhiteSpace($version.type) -eq $true) { + Write-LogFailure "Unknown release type" + } + + $versionParts = $version.ver.Split(".") + if ($versionParts.Length -ne 3) { + Write-LogFailure "Active Version [$activeVersion] is not a valid version number" + } + + foreach ($verNum in $versionParts) { + [int]$value = 0 + if ([int32]::TryParse($verNum, [ref]$value) -ne $true) { + Write-LogFailure "[$($verNum)] is not a valid number within the version[$activeVersion]" + } + } + + # Publish the full versioned files to all release folders + if ($version.type -eq "release") { + # Normal publishing deployment + if ("beta","next","public" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "rc") { + if ("beta","next" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + if ("nightly" -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } else { + Write-LogWarning "Non-Standard release type using tst/$container as the destination" + } + } + + return $version; +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "setActiveCdnVersionLog" + +Write-LogParams +$version = Validate-Params + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + +$storePath = "$container/ext" +if ($container -eq "public") { + $storePath = "scripts/b/ext" +} elseif ($container -ne "beta" -and $container -ne "next" -and $container -ne "dev" -and $container -ne "nightly") { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst/ext" +} + +Get-VersionFiles $files $storePath "ai.clck." $activeVersion + +if ($files.ContainsKey($activeVersion) -ne $true) { + Write-LogFailure "Version [$activeVersion] does not appear to be deployed to [$container]" +} elseif ($files[$activeVersion].Count -ne 12 -and + $files[$activeVersion].Count -ne 13) { # Since 2.6.5 + Write-LogFailure "Version [$activeVersion] does not fully deployed to [$container] -- only found [$($files[$activeVersion].Count)] file(s)" +} + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +SetActiveVersion $files[$activeVersion] $storePath $minorOnly + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-debugplugin-js/scripts/listAzCdnVersions.ps1 b/extensions/applicationinsights-debugplugin-js/scripts/listAzCdnVersions.ps1 new file mode 100644 index 000000000..90a2f6266 --- /dev/null +++ b/extensions/applicationinsights-debugplugin-js/scripts/listAzCdnVersions.ps1 @@ -0,0 +1,114 @@ +param ( + [string] $container = $null, # Identify the container that you want to check blank == all + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $showFiles = $false, # Show the individual files with details as well + [switch] $activeOnly = $false, # Only show the active (deployed) versions + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Container : $container" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Log Path : $logDir" + Write-Log "Show Files : $showFiles" + Write-Log "Test Mode : $testOnly" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + # Validate parameters + if ([string]::IsNullOrWhiteSpace($container) -ne $true -and "beta","next","public", "dev", "nightly" -NotContains $container) { + Write-LogFailure "[$($container)] is not a valid value, must be beta, next or public" + } +} + +Function Get-AllVersionFiles( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [string] $storagePath +) { + Get-VersionFiles $files "$storagePath/ext" "ai.dbg." $null +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath, "listCdnVersionsLog" +Write-LogParams +Validate-Params + +# Don't try and list anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + + +# Get the public files (scripts/b) +if ([string]::IsNullOrWhiteSpace($container) -eq $true) { + Get-AllVersionFiles $files "scripts/b" + Get-AllVersionFiles $files "beta" + Get-AllVersionFiles $files "next" + Get-AllVersionFiles $files "dev" + Get-AllVersionFiles $files "nightly" +} + +if ([string]::IsNullOrWhiteSpace($container) -ne $true) { + if ($container -eq "public") { + Get-AllVersionFiles $files "scripts/b" + } elseif ($container -eq "beta" -or $container -eq "next" -or $container -eq "dev" -or $container -eq "nightly") { + Get-AllVersionFiles $files "$container" + } else { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + Get-AllVersionFiles $files "$container" + } +} + +ListVersions $files $activeOnly $showFiles + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-debugplugin-js/scripts/publishAzReleaseToCdn.ps1 b/extensions/applicationinsights-debugplugin-js/scripts/publishAzReleaseToCdn.ps1 new file mode 100644 index 000000000..8466aafc4 --- /dev/null +++ b/extensions/applicationinsights-debugplugin-js/scripts/publishAzReleaseToCdn.ps1 @@ -0,0 +1,149 @@ +param ( + [string] $releaseFrom = $null, # The root path for where to find the files to be released + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $overwrite = $false, # Overwrite any existing files + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +$global:cacheValue = $null + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Overwrite : $overwrite" + Write-Log "Test Mode : $testOnly" + Write-Log "SourcePath : $jsSdkDir" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function GetReleaseFiles ( + [hashtable] $verDetails +) +{ + $version = $verDetails.full + Write-Log "Version : $($verDetails.full)" + Write-Log " Number : $($verDetails.ver)" + Write-Log " Type : $($verDetails.type)" + Write-Log " BldNum : $($verDetails.bldNum)" + + # check if the minified dir exists + $jsSdkSrcDir = Join-Path $jssdkDir -ChildPath "browser\es5\"; + + if (-Not (Test-Path $jsSdkSrcDir)) { + Write-LogWarning "'$jsSdkSrcDir' directory doesn't exist. Compile JSSDK first."; + exit + } + + $files = New-Object 'system.collections.generic.dictionary[string,string]' + + Write-Log "Adding files"; + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.integrity.json" $true + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.js" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.cjs.js" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.cjs.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.cjs.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.cjs.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.gbl.js" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.gbl.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.gbl.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.dbg.$version.gbl.min.js.map" + + return $files +} + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "publishReleaseCdnLog" + +$jsSdkDir = $releaseFrom +if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) { + $jsSdkDir = Split-Path (Split-Path $MyInvocation.MyCommand.Path) -Parent +} + +$cacheControl1Year = "public, max-age=31536000, immutable, no-transform"; +$contentType = "text/javascript; charset=utf-8"; + +Write-LogParams + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +$version = GetPackageVersion $jsSdkDir + +$releaseFiles = GetReleaseFiles $version # Get the versioned files only +if ($null -eq $releaseFiles -or $releaseFiles.Count -eq 0) { + Write-LogFailure "Unable to find any release files" +} + +Write-Log "Release Files : $($releaseFiles.Count)" +Write-Log "----------------------------------------------------------------------" + +# Publish the full versioned files to all release folders +if ($version.type -eq "release") { + # Normal publishing deployment + PublishFiles $releaseFiles "beta/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "scripts/b/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "rc") { + PublishFiles $releaseFiles "beta/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + # Publish to release type folder folder + PublishFiles $releaseFiles "$($version.type)/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + # Publish to release nightly folder folder + PublishFiles $releaseFiles "nightly/ext" $cacheControl1Year $contentType $overwrite +} +else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + PublishFiles $releaseFiles "$($version.type)/ext" $cacheControl1Year $contentType $overwrite +} + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-debugplugin-js/scripts/setAzActiveCdnVersion.ps1 b/extensions/applicationinsights-debugplugin-js/scripts/setAzActiveCdnVersion.ps1 new file mode 100644 index 000000000..019139ef2 --- /dev/null +++ b/extensions/applicationinsights-debugplugin-js/scripts/setAzActiveCdnVersion.ps1 @@ -0,0 +1,161 @@ +[CmdletBinding()] +param ( + [string] $container = "", # The container to update + [string] $activeVersion = "", # The version to copy as the active version + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $minorOnly = $false, # Only set the active minor version (v2.x) and not the major version (v2) + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + Write-Log "Container : $container" + Write-Log "Version : $activeVersion" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Test Mode : $testOnly" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + if ([string]::IsNullOrWhiteSpace($activeVersion) -eq $true) { + Write-LogFailure "The Active version is not specified" + exit + } + + $version = Get-VersionDetails $activeVersion + + if ([string]::IsNullOrWhiteSpace($version.type) -eq $true) { + Write-LogFailure "Unknown release type" + } + + $versionParts = $version.ver.Split(".") + if ($versionParts.Length -ne 3) { + Write-LogFailure "Active Version [$activeVersion] is not a valid version number" + } + + foreach ($verNum in $versionParts) { + [int]$value = 0 + if ([int32]::TryParse($verNum, [ref]$value) -ne $true) { + Write-LogFailure "[$($verNum)] is not a valid number within the version[$activeVersion]" + } + } + + # Publish the full versioned files to all release folders + if ($version.type -eq "release") { + # Normal publishing deployment + if ("beta","next","public" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "rc") { + if ("beta","next" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + if ("nightly" -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } else { + Write-LogWarning "Non-Standard release type using tst/$container as the destination" + } + } + + return $version; +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "setActiveCdnVersionLog" + +Write-LogParams +$version = Validate-Params + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + +$storePath = "$container/ext" +if ($container -eq "public") { + $storePath = "scripts/b/ext" +} elseif ($container -ne "beta" -and $container -ne "next" -and $container -ne "dev" -and $container -ne "nightly") { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst/ext" +} + +Get-VersionFiles $files $storePath "ai.dbg." $activeVersion + +if ($files.ContainsKey($activeVersion) -ne $true) { + Write-LogFailure "Version [$activeVersion] does not appear to be deployed to [$container]" +} elseif ($files[$activeVersion].Count -ne 4 -and + $files[$activeVersion].Count -ne 12 -and + $files[$activeVersion].Count -ne 13) { # Since 2.6.5 + Write-LogFailure "Version [$activeVersion] does not fully deployed to [$container] -- only found [$($files[$activeVersion].Count)] file(s)" +} + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +SetActiveVersion $files[$activeVersion] $storePath $minorOnly + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-perfmarkmeasure-js/scripts/listAzCdnVersions.ps1 b/extensions/applicationinsights-perfmarkmeasure-js/scripts/listAzCdnVersions.ps1 new file mode 100644 index 000000000..5ace03264 --- /dev/null +++ b/extensions/applicationinsights-perfmarkmeasure-js/scripts/listAzCdnVersions.ps1 @@ -0,0 +1,114 @@ +param ( + [string] $container = $null, # Identify the container that you want to check blank == all + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $showFiles = $false, # Show the individual files with details as well + [switch] $activeOnly = $false, # Only show the active (deployed) versions + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Container : $container" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Log Path : $logDir" + Write-Log "Show Files : $showFiles" + Write-Log "Test Mode : $testOnly" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + # Validate parameters + if ([string]::IsNullOrWhiteSpace($container) -ne $true -and "beta","next","public", "dev", "nightly" -NotContains $container) { + Write-LogFailure "[$($container)] is not a valid value, must be beta, next or public" + } +} + +Function Get-AllVersionFiles( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [string] $storagePath +) { + Get-VersionFiles $files "$storagePath/ext" "ai.prfmm-mgr." $null +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath, "listCdnVersionsLog" +Write-LogParams +Validate-Params + +# Don't try and list anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + + +# Get the public files (scripts/b) +if ([string]::IsNullOrWhiteSpace($container) -eq $true) { + Get-AllVersionFiles $files "scripts/b" + Get-AllVersionFiles $files "beta" + Get-AllVersionFiles $files "next" + Get-AllVersionFiles $files "dev" + Get-AllVersionFiles $files "nightly" +} + +if ([string]::IsNullOrWhiteSpace($container) -ne $true) { + if ($container -eq "public") { + Get-AllVersionFiles $files "scripts/b" + } elseif ($container -eq "beta" -or $container -eq "next" -or $container -eq "dev" -or $container -eq "nightly") { + Get-AllVersionFiles $files "$container" + } else { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + Get-AllVersionFiles $files "$container" + } +} + +ListVersions $files $activeOnly $showFiles + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-perfmarkmeasure-js/scripts/publishAzReleaseToCdn.ps1 b/extensions/applicationinsights-perfmarkmeasure-js/scripts/publishAzReleaseToCdn.ps1 new file mode 100644 index 000000000..7bd7167c0 --- /dev/null +++ b/extensions/applicationinsights-perfmarkmeasure-js/scripts/publishAzReleaseToCdn.ps1 @@ -0,0 +1,149 @@ +param ( + [string] $releaseFrom = $null, # The root path for where to find the files to be released + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $overwrite = $false, # Overwrite any existing files + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +$global:cacheValue = $null + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Overwrite : $overwrite" + Write-Log "Test Mode : $testOnly" + Write-Log "SourcePath : $jsSdkDir" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function GetReleaseFiles ( + [hashtable] $verDetails +) +{ + $version = $verDetails.full + Write-Log "Version : $($verDetails.full)" + Write-Log " Number : $($verDetails.ver)" + Write-Log " Type : $($verDetails.type)" + Write-Log " BldNum : $($verDetails.bldNum)" + + # check if the minified dir exists + $jsSdkSrcDir = Join-Path $jssdkDir -ChildPath "browser\es5\"; + + if (-Not (Test-Path $jsSdkSrcDir)) { + Write-LogWarning "'$jsSdkSrcDir' directory doesn't exist. Compile JSSDK first."; + exit + } + + $files = New-Object 'system.collections.generic.dictionary[string,string]' + + Write-Log "Adding files"; + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.integrity.json" $true + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.js" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.cjs.js" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.cjs.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.cjs.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.cjs.min.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.gbl.js" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.gbl.js.map" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.gbl.min.js" + AddReleaseFile $files $jsSdkSrcDir "ai.prfmm-mgr.$version.gbl.min.js.map" + + return $files +} + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "publishReleaseCdnLog" + +$jsSdkDir = $releaseFrom +if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) { + $jsSdkDir = Split-Path (Split-Path $MyInvocation.MyCommand.Path) -Parent +} + +$cacheControl1Year = "public, max-age=31536000, immutable, no-transform"; +$contentType = "text/javascript; charset=utf-8"; + +Write-LogParams + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +$version = GetPackageVersion $jsSdkDir + +$releaseFiles = GetReleaseFiles $version # Get the versioned files only +if ($null -eq $releaseFiles -or $releaseFiles.Count -eq 0) { + Write-LogFailure "Unable to find any release files" +} + +Write-Log "Release Files : $($releaseFiles.Count)" +Write-Log "----------------------------------------------------------------------" + +# Publish the full versioned files to all release folders +if ($version.type -eq "release") { + # Normal publishing deployment + PublishFiles $releaseFiles "beta/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "scripts/b/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "rc") { + PublishFiles $releaseFiles "beta/ext" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + # Publish to release type folder folder + PublishFiles $releaseFiles "$($version.type)/ext" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + # Publish to release nightly folder folder + PublishFiles $releaseFiles "nightly/ext" $cacheControl1Year $contentType $overwrite +} +else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + PublishFiles $releaseFiles "$($version.type)/ext" $cacheControl1Year $contentType $overwrite +} + +Write-Log "======================================================================" diff --git a/extensions/applicationinsights-perfmarkmeasure-js/scripts/setAzActiveCdnVersion.ps1 b/extensions/applicationinsights-perfmarkmeasure-js/scripts/setAzActiveCdnVersion.ps1 new file mode 100644 index 000000000..81fa16474 --- /dev/null +++ b/extensions/applicationinsights-perfmarkmeasure-js/scripts/setAzActiveCdnVersion.ps1 @@ -0,0 +1,160 @@ +[CmdletBinding()] +param ( + [string] $container = "", # The container to update + [string] $activeVersion = "", # The version to copy as the active version + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $minorOnly = $false, # Only set the active minor version (v2.x) and not the major version (v2) + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + Write-Log "Container : $container" + Write-Log "Version : $activeVersion" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Test Mode : $testOnly" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + if ([string]::IsNullOrWhiteSpace($activeVersion) -eq $true) { + Write-LogFailure "The Active version is not specified" + exit + } + + $version = Get-VersionDetails $activeVersion + + if ([string]::IsNullOrWhiteSpace($version.type) -eq $true) { + Write-LogFailure "Unknown release type" + } + + $versionParts = $version.ver.Split(".") + if ($versionParts.Length -ne 3) { + Write-LogFailure "Active Version [$activeVersion] is not a valid version number" + } + + foreach ($verNum in $versionParts) { + [int]$value = 0 + if ([int32]::TryParse($verNum, [ref]$value) -ne $true) { + Write-LogFailure "[$($verNum)] is not a valid number within the version[$activeVersion]" + } + } + + # Publish the full versioned files to all release folders + if ($version.type -eq "release") { + # Normal publishing deployment + if ("beta","next","public" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "rc") { + if ("beta","next" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + if ("nightly" -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } else { + Write-LogWarning "Non-Standard release type using tst/$container as the destination" + } + } + + return $version; +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "setActiveCdnVersionLog" + +Write-LogParams +$version = Validate-Params + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + +$storePath = "$container/ext" +if ($container -eq "public") { + $storePath = "scripts/b/ext" +} elseif ($container -ne "beta" -and $container -ne "next" -and $container -ne "dev" -and $container -ne "nightly") { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst/ext" +} + +Get-VersionFiles $files $storePath "ai.prfmm-mgr." $activeVersion + +if ($files.ContainsKey($activeVersion) -ne $true) { + Write-LogFailure "Version [$activeVersion] does not appear to be deployed to [$container]" +} elseif ($files[$activeVersion].Count -ne 12 -and + $files[$activeVersion].Count -ne 13) { # Since 2.6.5 + Write-LogFailure "Version [$activeVersion] does not fully deployed to [$container] -- only found [$($files[$activeVersion].Count)] file(s)" +} + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +SetActiveVersion $files[$activeVersion] $storePath $minorOnly + +Write-Log "======================================================================" diff --git a/tools/chrome-debug-extension/scripts/listAzCdnVersions.ps1 b/tools/chrome-debug-extension/scripts/listAzCdnVersions.ps1 new file mode 100644 index 000000000..ac62f3095 --- /dev/null +++ b/tools/chrome-debug-extension/scripts/listAzCdnVersions.ps1 @@ -0,0 +1,114 @@ +param ( + [string] $container = $null, # Identify the container that you want to check blank == all + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $showFiles = $false, # Show the individual files with details as well + [switch] $activeOnly = $false, # Only show the active (deployed) versions + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Container : $container" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Log Path : $logDir" + Write-Log "Show Files : $showFiles" + Write-Log "Test Mode : $testOnly" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + # Validate parameters + if ([string]::IsNullOrWhiteSpace($container) -ne $true -and "beta","next","public", "dev", "nightly" -NotContains $container) { + Write-LogFailure "[$($container)] is not a valid value, must be beta, next or public" + } +} + +Function Get-AllVersionFiles( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [string] $storagePath +) { + Get-VersionFiles $files "$storagePath/ext" "ai.chrome-ext." $null +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath, "listCdnVersionsLog" +Write-LogParams +Validate-Params + +# Don't try and list anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + + +# Get the public files (scripts/b) +if ([string]::IsNullOrWhiteSpace($container) -eq $true) { + Get-AllVersionFiles $files "release/tools" + Get-AllVersionFiles $files "beta/tools" + Get-AllVersionFiles $files "next/tools" + Get-AllVersionFiles $files "dev/tools" + Get-AllVersionFiles $files "nightly/tools" +} + +if ([string]::IsNullOrWhiteSpace($container) -ne $true) { + if ($container -eq "public") { + Get-AllVersionFiles $files "release/tools" + } elseif ($container -eq "beta" -or $container -eq "next" -or $container -eq "dev" -or $container -eq "nightly") { + Get-AllVersionFiles $files "$container/tools" + } else { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + Get-AllVersionFiles $files "$container/tools" + } +} + +ListVersions $files $activeOnly $showFiles + +Write-Log "======================================================================" diff --git a/tools/chrome-debug-extension/scripts/publishAzReleaseToCdn.ps1 b/tools/chrome-debug-extension/scripts/publishAzReleaseToCdn.ps1 new file mode 100644 index 000000000..004953992 --- /dev/null +++ b/tools/chrome-debug-extension/scripts/publishAzReleaseToCdn.ps1 @@ -0,0 +1,138 @@ +param ( + [string] $releaseFrom = $null, # The root path for where to find the files to be released + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $overwrite = $false, # Overwrite any existing files + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +$global:cacheValue = $null + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Overwrite : $overwrite" + Write-Log "Test Mode : $testOnly" + Write-Log "SourcePath : $jsSdkDir" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function GetReleaseFiles ( + [hashtable] $verDetails +) +{ + $version = $verDetails.full + Write-Log "Version : $($verDetails.full)" + Write-Log " Number : $($verDetails.ver)" + Write-Log " Type : $($verDetails.type)" + Write-Log " BldNum : $($verDetails.bldNum)" + + # check if the minified dir exists + $jsSdkSrcDir = Join-Path $jssdkDir -ChildPath "dist\"; + + if (-Not (Test-Path $jsSdkSrcDir)) { + Write-LogWarning "'$jsSdkSrcDir' directory doesn't exist. Compile JSSDK first."; + exit + } + + $files = New-Object 'system.collections.generic.dictionary[string,string]' + + Write-Log "Adding files"; + AddReleaseFile $files $jsSdkSrcDir "ai.chrome-ext.$version.integrity.json" $true + AddReleaseFile $files $jsSdkSrcDir "ai.chrome-ext.$version.zip" + + return $files +} + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "publishReleaseCdnLog" + +$jsSdkDir = $releaseFrom +if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) { + $jsSdkDir = Split-Path (Split-Path $MyInvocation.MyCommand.Path) -Parent +} + +$cacheControl1Year = "public, max-age=31536000, immutable, no-transform"; +$contentType = "application/zip"; + +Write-LogParams + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +$version = GetPackageVersion $jsSdkDir + +$releaseFiles = GetReleaseFiles $version # Get the versioned files only +if ($null -eq $releaseFiles -or $releaseFiles.Count -eq 0) { + Write-LogFailure "Unable to find any release files" +} + +Write-Log "Release Files : $($releaseFiles.Count)" +Write-Log "----------------------------------------------------------------------" + +# Publish the full versioned files to all release folders +if ($version.type -eq "release") { + # Normal publishing deployment + PublishFiles $releaseFiles "beta/tools" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/tools" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "release/tools" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "rc") { + PublishFiles $releaseFiles "beta/tools" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next/tools" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + # Publish to release type folder folder + PublishFiles $releaseFiles "$($version.type)/tools" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + # Publish to release nightly folder folder + PublishFiles $releaseFiles "nightly/tools" $cacheControl1Year $contentType $overwrite +} +else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + PublishFiles $releaseFiles "$($version.type)/tools" $cacheControl1Year $contentType $overwrite +} + +Write-Log "======================================================================" diff --git a/tools/chrome-debug-extension/scripts/setAzActiveCdnVersion.ps1 b/tools/chrome-debug-extension/scripts/setAzActiveCdnVersion.ps1 new file mode 100644 index 000000000..0e0c1fe49 --- /dev/null +++ b/tools/chrome-debug-extension/scripts/setAzActiveCdnVersion.ps1 @@ -0,0 +1,159 @@ +[CmdletBinding()] +param ( + [string] $container = "", # The container to update + [string] $activeVersion = "", # The version to copy as the active version + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $minorOnly = $false, # Only set the active minor version (v2.x) and not the major version (v2) + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + Write-Log "Container : $container" + Write-Log "Version : $activeVersion" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Test Mode : $testOnly" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + if ([string]::IsNullOrWhiteSpace($activeVersion) -eq $true) { + Write-LogFailure "The Active version is not specified" + exit + } + + $version = Get-VersionDetails $activeVersion + + if ([string]::IsNullOrWhiteSpace($version.type) -eq $true) { + Write-LogFailure "Unknown release type" + } + + $versionParts = $version.ver.Split(".") + if ($versionParts.Length -ne 3) { + Write-LogFailure "Active Version [$activeVersion] is not a valid version number" + } + + foreach ($verNum in $versionParts) { + [int]$value = 0 + if ([int32]::TryParse($verNum, [ref]$value) -ne $true) { + Write-LogFailure "[$($verNum)] is not a valid number within the version[$activeVersion]" + } + } + + # Publish the full versioned files to all release folders + if ($version.type -eq "release") { + # Normal publishing deployment + if ("beta","next","public" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "rc") { + if ("beta","next" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + if ("nightly" -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } else { + Write-LogWarning "Non-Standard release type using tst/$container as the destination" + } + } + + return $version; +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "setActiveCdnVersionLog" + +Write-LogParams +$version = Validate-Params + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + +$storePath = "$container/tools" +if ($container -eq "public") { + $storePath = "release/tools" +} elseif ($container -ne "beta" -and $container -ne "next" -and $container -ne "dev" -and $container -ne "nightly") { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst/tools" +} + +Get-VersionFiles $files $storePath "ai.chrome-ext." $activeVersion + +if ($files.ContainsKey($activeVersion) -ne $true) { + Write-LogFailure "Version [$activeVersion] does not appear to be deployed to [$container]" +} elseif ($files[$activeVersion].Count -ne 2) { + Write-LogFailure "Version [$activeVersion] does not fully deployed to [$container] -- only found [$($files[$activeVersion].Count)] file(s)" +} + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +SetActiveVersion $files[$activeVersion] $storePath $minorOnly $true + +Write-Log "======================================================================" diff --git a/tools/config/scripts/listAzCdnVersions.ps1 b/tools/config/scripts/listAzCdnVersions.ps1 new file mode 100644 index 000000000..eace53843 --- /dev/null +++ b/tools/config/scripts/listAzCdnVersions.ps1 @@ -0,0 +1,114 @@ +param ( + [string] $container = $null, # Identify the container that you want to check blank == all + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $showFiles = $false, # Show the individual files with details as well + [switch] $activeOnly = $false, # Only show the active (deployed) versions + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Container : $container" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Log Path : $logDir" + Write-Log "Show Files : $showFiles" + Write-Log "Test Mode : $testOnly" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + # Validate parameters + if ([string]::IsNullOrWhiteSpace($container) -ne $true -and "beta","next","public", "dev", "nightly" -NotContains $container) { + Write-LogFailure "[$($container)] is not a valid value, must be beta, next or public" + } +} + +Function Get-AllVersionFiles( + [system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]] $files, + [string] $storagePath +) { + Get-VersionFiles $files "$storagePath" "ai.config." $null +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath, "listCdnVersionsLog" +Write-LogParams +Validate-Params + +# Don't try and list anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + + +# Get the public files (scripts/b) +if ([string]::IsNullOrWhiteSpace($container) -eq $true) { + Get-AllVersionFiles $files "scripts/b" + Get-AllVersionFiles $files "beta" + Get-AllVersionFiles $files "next" + Get-AllVersionFiles $files "dev" + Get-AllVersionFiles $files "nightly" +} + +if ([string]::IsNullOrWhiteSpace($container) -ne $true) { + if ($container -eq "public") { + Get-AllVersionFiles $files "scripts/b" + } elseif ($container -eq "beta" -or $container -eq "next" -or $container -eq "dev" -or $container -eq "nightly") { + Get-AllVersionFiles $files "$container" + } else { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + Get-AllVersionFiles $files "$container" + } +} + +ListVersions $files $activeOnly $showFiles + +Write-Log "======================================================================" diff --git a/tools/config/scripts/publishAzReleaseToCdn.ps1 b/tools/config/scripts/publishAzReleaseToCdn.ps1 new file mode 100644 index 000000000..c6b310161 --- /dev/null +++ b/tools/config/scripts/publishAzReleaseToCdn.ps1 @@ -0,0 +1,137 @@ +param ( + [string] $releaseFrom = $null, # The root path for where to find the files to be released + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $overwrite = $false, # Overwrite any existing files + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +$global:cacheValue = $null + +Function Write-LogParams +{ + $logDir = Get-LogPath + + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Overwrite : $overwrite" + Write-Log "Test Mode : $testOnly" + Write-Log "SourcePath : $jsSdkDir" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function GetReleaseFiles ( + [hashtable] $verDetails +) +{ + $version = $verDetails.full + Write-Log "Version : $($verDetails.full)" + Write-Log " Number : $($verDetails.ver)" + Write-Log " Type : $($verDetails.type)" + Write-Log " BldNum : $($verDetails.bldNum)" + + # check if the minified dir exists + $jsSdkSrcDir = Join-Path $jssdkDir -ChildPath "browser\es5\"; + + if (-Not (Test-Path $jsSdkSrcDir)) { + Write-LogWarning "'$jsSdkSrcDir' directory doesn't exist. Compile JSSDK first."; + exit + } + + $files = New-Object 'system.collections.generic.dictionary[string,string]' + + Write-Log "Adding files"; + AddReleaseFile $files $jsSdkSrcDir "ai.config.$version.cfg.json" + return $files +} + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "publishReleaseCdnLog" + +$jsSdkDir = $releaseFrom +if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) { + $jsSdkDir = Split-Path (Split-Path $MyInvocation.MyCommand.Path) -Parent +} + +$cacheControl1Year = "public, max-age=31536000, immutable, no-transform"; +$contentType = "text/javascript; charset=utf-8"; +$cacheControl30Min = "public, max-age=1800, immutable, no-transform"; + +Write-LogParams + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +$version = GetPackageVersion $jsSdkDir + +$releaseFiles = GetReleaseFiles $version # Get the versioned files only +if ($null -eq $releaseFiles -or $releaseFiles.Count -eq 0) { + Write-LogFailure "Unable to find any release files" +} + +Write-Log "Release Files : $($releaseFiles.Count)" +Write-Log "----------------------------------------------------------------------" + +# Publish the full versioned files to all release folders +if ($version.type -eq "release") { + # Normal publishing deployment + PublishFiles $releaseFiles "beta" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "scripts/b" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "rc") { + PublishFiles $releaseFiles "beta" $cacheControl1Year $contentType $overwrite + PublishFiles $releaseFiles "next" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + # Publish to release type folder folder + PublishFiles $releaseFiles "$($version.type)" $cacheControl1Year $contentType $overwrite +} +elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + # Publish to release nightly folder folder + PublishFiles $releaseFiles "nightly" $cacheControl1Year $contentType $overwrite +} +else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" + PublishFiles $releaseFiles "$($version.type)" $cacheControl1Year $contentType $overwrite +} + +Write-Log "======================================================================" diff --git a/tools/config/scripts/setAzActiveCdnVersion.ps1 b/tools/config/scripts/setAzActiveCdnVersion.ps1 new file mode 100644 index 000000000..84099cf56 --- /dev/null +++ b/tools/config/scripts/setAzActiveCdnVersion.ps1 @@ -0,0 +1,159 @@ +[CmdletBinding()] +param ( + [string] $container = "", # The container to update + [string] $activeVersion = "", # The version to copy as the active version + [string] $storeContainer = "cdn", # Identifies the destination storage account container + [string] $cdnStorePath = "cdnstoragename", # Identifies the target Azure Storage account (by name) + [string] $subscriptionId = $null, # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath) + [string] $resourceGroup = $null, # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath) + [string] $sasToken = $null, # The SAS Token to use rather than using or attempting to login + [string] $logPath = $null, # The location where logs should be written + [switch] $minorOnly = $false, # Only set the active minor version (v2.x) and not the major version (v2) + [switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account + [switch] $cdn = $false # (No longer used -- kept for now for backward compatibility) +) + +Import-Module -Force -Name "../../../common/publish/Logging" +Import-Module -Force -Name "../../../common/publish/AzStorageHelper" + +[hashtable]$global:connectDetails = @{} +$global:connectDetails.storeContainer = $storeContainer +$global:connectDetails.cdnStorePath = $cdnStorePath +$global:connectDetails.resourceGroup = $resourceGroup +$global:connectDetails.storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”) +$global:connectDetails.subscriptionId = $subscriptionId +$global:connectDetails.sasToken = $sasToken +$global:connectDetails.storageContext = $null +$global:connectDetails.testOnly = $testOnly + +Function Write-LogParams +{ + Write-Log "Container : $container" + Write-Log "Version : $activeVersion" + Write-Log "Storage Container : $storeContainer" + Write-Log "Store Path : $($global:connectDetails.cdnStorePath)" + Write-Log "Test Mode : $testOnly" + Write-Log "Log Path : $logDir" + + if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "Mode : User-Credentials" + } else { + Write-Log "Mode : Sas-Token" + } +} + +Function Validate-Params +{ + if ([string]::IsNullOrWhiteSpace($activeVersion) -eq $true) { + Write-LogFailure "The Active version is not specified" + exit + } + + $version = Get-VersionDetails $activeVersion + + if ([string]::IsNullOrWhiteSpace($version.type) -eq $true) { + Write-LogFailure "Unknown release type" + } + + $versionParts = $version.ver.Split(".") + if ($versionParts.Length -ne 3) { + Write-LogFailure "Active Version [$activeVersion] is not a valid version number" + } + + foreach ($verNum in $versionParts) { + [int]$value = 0 + if ([int32]::TryParse($verNum, [ref]$value) -ne $true) { + Write-LogFailure "[$($verNum)] is not a valid number within the version[$activeVersion]" + } + } + + # Publish the full versioned files to all release folders + if ($version.type -eq "release") { + # Normal publishing deployment + if ("beta","next","public" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "rc") { + if ("beta","next" -NotContains $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "dev" -or $version.type -eq "beta") { + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + elseif ($version.type -eq "nightly" -or $version.type -eq "nightly3") { + if ("nightly" -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } + } + else { + # Upload to the test container rather than the supplied one + $global:connectDetails.testOnly = $true + if ($version.type -ne $container) { + Write-LogFailure "Container [$container] is not valid for version type [$($version.type)]" + } else { + Write-LogWarning "Non-Standard release type using tst/$container as the destination" + } + } + + return $version; +} + +$Error.Clear() + +#----------------------------------------------------------------------------- +# Start of Script +#----------------------------------------------------------------------------- +Set-LogPath $logPath "setActiveCdnVersionLog" + +Write-LogParams +$version = Validate-Params + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +# You will need to at least have the Az modules installed +InstallRequiredModules +$global:connectDetails = ParseCdnStorePath $global:connectDetails + +if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) { + Write-Log "**********************************************************************" + Write-Log "Validating user access" + Write-Log "**********************************************************************" + $global:connectDetails = ValidateAccess $global:connectDetails +} + +Write-Log "======================================================================" + +# List the files for each container +$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]' + +$storePath = "$container" +if ($container -eq "public") { + $storePath = "scripts/b" +} elseif ($container -ne "beta" -and $container -ne "next" -and $container -ne "dev" -and $container -ne "nightly") { + $global:connectDetails.testOnly = $true + $global:connectDetails.storeContainer = "tst" +} + +Get-VersionFiles $files $storePath "ai.config." $activeVersion + +if ($files.ContainsKey($activeVersion) -ne $true) { + Write-LogFailure "Version [$activeVersion] does not appear to be deployed to [$container]" +} elseif ($files[$activeVersion].Count -ne 1) { # Since 2.6.5 + Write-LogFailure "Version [$activeVersion] does not fully deployed to [$container] -- only found [$($files[$activeVersion].Count)] file(s)" +} + +# Don't try and publish anything if any errors have been logged +if (Get-HasErrors -eq $true) { + exit 2 +} + +SetActiveVersion $files[$activeVersion] $storePath $minorOnly + +Write-Log "======================================================================"