diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6f841d731..4952c8c19 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x + dotnet-version: 7.0.x - name: Restore Dotnet tools run: dotnet tool restore @@ -36,7 +36,7 @@ jobs: working-directory: src/ - name: Generate Open API documentation - run: dotnet swagger tofile --output ./swagger.json AzureIoTHub.Portal.Server/bin/Debug/net6.0/AzureIoTHub.Portal.Server.dll v1 + run: dotnet swagger tofile --output ./swagger.json AzureIoTHub.Portal.Server/bin/Debug/net7.0/AzureIoTHub.Portal.Server.dll v1 working-directory: src/ # Upload swagger docs to GitHub @@ -47,7 +47,7 @@ jobs: path: ./src/swagger.json - name: Run unit tests - run: dotnet test --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura AzureIoTHub.Portal.Tests.Unit/AzureIoTHub.Portal.Tests.Unit.csproj + run: dotnet test --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" AzureIoTHub.Portal.sln working-directory: src/ # Upload test results as artifact diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 3e76a4599..d778b1639 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -35,7 +35,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x + dotnet-version: 7.0.x # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/src/AzureIoTHub.Portal.Client/AzureIoTHub.Portal.Client.csproj b/src/AzureIoTHub.Portal.Client/AzureIoTHub.Portal.Client.csproj index 5e8069e5a..940e1ecb9 100644 --- a/src/AzureIoTHub.Portal.Client/AzureIoTHub.Portal.Client.csproj +++ b/src/AzureIoTHub.Portal.Client/AzureIoTHub.Portal.Client.csproj @@ -1,63 +1,45 @@ - net6.0 + net7.0 + enable + enable - - - $(NoWarn) - - - - $(NoWarn) - - - - - - - - - - - - - - - - + - - - all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + - + + + + + + diff --git a/src/AzureIoTHub.Portal.Client/Program.cs b/src/AzureIoTHub.Portal.Client/Program.cs index 876b0bc62..6c358e56d 100644 --- a/src/AzureIoTHub.Portal.Client/Program.cs +++ b/src/AzureIoTHub.Portal.Client/Program.cs @@ -1,119 +1,105 @@ // Copyright (c) CGI France. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -namespace AzureIoTHub.Portal.Client +using System.Net.Http.Json; +using AzureIoTHub.Portal.Client; +using AzureIoTHub.Portal.Client.Handlers; +using AzureIoTHub.Portal.Client.Services; +using AzureIoTHub.Portal.Models.v10; +using AzureIoTHub.Portal.Settings; +using Blazored.LocalStorage; +using Blazored.Modal; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using MudBlazor; +using MudBlazor.Services; +using Tewr.Blazor.FileReader; +using Toolbelt.Blazor.Extensions.DependencyInjection; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); + +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); + +_ = builder.Services.AddTransient(); + +_ = builder.Services.AddHttpClient("api", (sp, client) => { - using System; - using System.Net.Http; - using System.Net.Http.Json; - using System.Threading.Tasks; - using Services; - using AzureIoTHub.Portal.Models.v10; - using Settings; - using Blazored.LocalStorage; - using Blazored.Modal; - using Microsoft.AspNetCore.Components.WebAssembly.Authentication; - using Handlers; - using Microsoft.AspNetCore.Components.WebAssembly.Hosting; - using Microsoft.Extensions.DependencyInjection; - using MudBlazor; - using MudBlazor.Services; - using Tewr.Blazor.FileReader; - using Toolbelt.Blazor.Extensions.DependencyInjection; - - public static class Program - { - public static async Task Main(string[] args) - { - var builder = WebAssemblyHostBuilder.CreateDefault(args); - builder.RootComponents.Add("#app"); - - _ = builder.Services.AddTransient(); - - _ = builder.Services.AddHttpClient("api", (sp, client) => - { - client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress); - client.DefaultRequestHeaders.Add("X-Version", "1.0"); - _ = client.EnableIntercept(sp); - }).AddHttpMessageHandler() - .AddHttpMessageHandler(); - - _ = builder.Services.AddFileReaderService(o => o.UseWasmSharedBuffer = true); - - // Supply HttpClient instances that include access tokens when making requests to the server project - _ = builder.Services.AddScoped(sp => sp.GetRequiredService().CreateClient("api")) - .AddScoped(); - - _ = builder.Services.AddBlazoredLocalStorage(); - _ = builder.Services.AddBlazoredModal(); - _ = builder.Services.AddMudServices(config => - { - config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomLeft; - config.SnackbarConfiguration.PreventDuplicates = false; - }); - - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddSingleton(); - _ = builder.Services.AddSingleton(); - - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - _ = builder.Services.AddScoped(); - - await ConfigureOidc(builder); - await ConfigurePortalSettings(builder); - - // Enable loading bar - builder.Services.AddLoadingBar(options => - { - options.LoadingBarColor = "#D3E24A"; - }); - _ = builder.UseLoadingBar(); - - await builder.Build().RunAsync(); - } - - private static async Task ConfigureOidc(WebAssemblyHostBuilder builder) - { - using var httpClient = new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }; - var settings = await httpClient.GetFromJsonAsync("api/settings/oidc"); - - _ = builder.Services.AddOidcAuthentication(options => - { - options.ProviderOptions.Authority = settings.Authority; - options.ProviderOptions.MetadataUrl = settings.MetadataUrl.ToString(); - options.ProviderOptions.ClientId = settings.ClientId; - - options.ProviderOptions.DefaultScopes.Add(settings.Scope); - options.ProviderOptions.ResponseType = "code"; - }); - - _ = builder.Services.Configure(opts => - { - opts.ClientId = settings.ClientId; - opts.MetadataUrl = settings.MetadataUrl; - opts.Authority = settings.Authority; - opts.Scope = settings.Scope; - }); - } - - private static async Task ConfigurePortalSettings(WebAssemblyHostBuilder builder) - { - using var httpClient = new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }; - var settings = await httpClient.GetFromJsonAsync("api/settings/portal"); - - _ = builder.Services.AddSingleton(settings); - } - - } + client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress); + client.DefaultRequestHeaders.Add("X-Version", "1.0"); +}).AddHttpMessageHandler() + .AddHttpMessageHandler(); + +_ = builder.Services.AddScoped(sp => sp.GetRequiredService().CreateClient("api")); + +using var httpClient = new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }; +var settings = await httpClient.GetFromJsonAsync("api/settings/oidc"); + +_ = builder.Services.Configure(opts => +{ + opts.ClientId = settings.ClientId; + opts.MetadataUrl = settings.MetadataUrl; + opts.Authority = settings.Authority; + opts.Scope = settings.Scope; +}); + +builder.Services.AddOidcAuthentication(options => +{ + options.ProviderOptions.Authority = settings.Authority; + options.ProviderOptions.MetadataUrl = settings.MetadataUrl.ToString(); + options.ProviderOptions.ClientId = settings.ClientId; + options.ProviderOptions.ResponseType = "code"; + + options.ProviderOptions.DefaultScopes.Add(settings.Scope); +}); + +builder.Services.AddApiAuthorization(); + +_ = builder.Services.AddFileReaderService(o => o.UseWasmSharedBuffer = true); + +_ = builder.Services.AddBlazoredLocalStorage(); +_ = builder.Services.AddBlazoredModal(); +_ = builder.Services.AddMudServices(config => +{ + config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomLeft; + config.SnackbarConfiguration.PreventDuplicates = false; +}); + +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddSingleton(); +_ = builder.Services.AddSingleton(); + +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); +_ = builder.Services.AddScoped(); + +await ConfigurePortalSettings(builder); + +// Enable loading bar +builder.Services.AddLoadingBar(options => +{ + options.LoadingBarColor = "#D3E24A"; +}); +_ = builder.UseLoadingBar(); + +await builder.Build().RunAsync(); + +static async Task ConfigurePortalSettings(WebAssemblyHostBuilder builder) +{ + using var httpClient = new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }; + var settings = await httpClient.GetFromJsonAsync("api/settings/portal"); + + _ = builder.Services.AddSingleton(settings); } diff --git a/src/AzureIoTHub.Portal.Client/Shared/MainLayout.razor b/src/AzureIoTHub.Portal.Client/Shared/MainLayout.razor index fe5f4e77d..114ecb62d 100644 --- a/src/AzureIoTHub.Portal.Client/Shared/MainLayout.razor +++ b/src/AzureIoTHub.Portal.Client/Shared/MainLayout.razor @@ -1,7 +1,6 @@ @inherits LayoutComponentBase @using AzureIoTHub.Portal.Models.v10 -@using Microsoft.AspNetCore.Components.Web.Extensions.Head @inject PortalSettings Portal @inject ILayoutService LayoutService @@ -12,7 +11,7 @@ - +<PageTitle>@Portal.PortalName</PageTitle> <MudLayout> diff --git a/src/AzureIoTHub.Portal.Client/Shared/RedirectToLogin.razor b/src/AzureIoTHub.Portal.Client/Shared/RedirectToLogin.razor index 62db7206e..bd1d66924 100644 --- a/src/AzureIoTHub.Portal.Client/Shared/RedirectToLogin.razor +++ b/src/AzureIoTHub.Portal.Client/Shared/RedirectToLogin.razor @@ -1,8 +1,14 @@ @inject NavigationManager Navigation @using Microsoft.AspNetCore.Components.WebAssembly.Authentication +@using Microsoft.Extensions.Options; + +@inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> Options + @code { protected override void OnInitialized() { - Navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}"); + Navigation.NavigateToLogin(Options.Get( + Microsoft.Extensions.Options.Options.DefaultName) + .AuthenticationPaths.LogInPath); } } diff --git a/src/AzureIoTHub.Portal.Client/assets/babel.config.json b/src/AzureIoTHub.Portal.Client/assets/babel.config.json deleted file mode 100644 index d4b96717c..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/babel.config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { "targets": { "node": true } } - ] - ] -} diff --git a/src/AzureIoTHub.Portal.Client/assets/package-lock.json b/src/AzureIoTHub.Portal.Client/assets/package-lock.json deleted file mode 100644 index b011759ba..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/package-lock.json +++ /dev/null @@ -1,2307 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/node": { - "version": "18.6.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz", - "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": 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" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001375", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz", - "integrity": "sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "core-js": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz", - "integrity": "sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.4.213", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.213.tgz", - "integrity": "sha512-+3DbGHGOCHTVB/Ms63bGqbyC1b8y7Fk86+7ltssB8NQrZtSCvZG6eooSl9U2Q0yw++fL2DpHKOdTU0NVEkFObg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "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==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "fp-ts": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.12.2.tgz", - "integrity": "sha512-v8J7ud+nTkP5Zz17GhpCsY19wiRbB9miuj61nBcCJyDpu52zs9Z4O7OLDfYoKFQMJ9EsSZA7W1vRgC1d3jy5qw==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "inspectpack": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/inspectpack/-/inspectpack-4.7.1.tgz", - "integrity": "sha512-XoDJbKSM9I2KA+8+OLFJHm8m4NM2pMEgsDD2hze6swVfynEed9ngCx36mRR+otzOsskwnxIZWXjI23FTW1uHqA==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "fp-ts": "^2.6.1", - "io-ts": "^2.2.13", - "io-ts-reporters": "^1.2.2", - "pify": "^5.0.0", - "semver-compare": "^1.0.0", - "yargs": "^16.2.0" - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "io-ts": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-2.2.17.tgz", - "integrity": "sha512-RkQY06h6rRyADVEI46OCAUYTP2p18Vdtz9Movi19Mmj7SJ1NhN/yGyW7CxlcBVxh95WKg2YSbTmcUPqqeLuhXw==", - "dev": true - }, - "io-ts-reporters": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/io-ts-reporters/-/io-ts-reporters-1.2.2.tgz", - "integrity": "sha512-igASwWWkDY757OutNcM6zTtdJf/eTZYkoe2ymsX2qpm5bKZLo74FJYjsCtMQOEdY7dRHLLEulCyFQwdN69GBCg==", - "dev": true - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "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==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "oidc-client": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/oidc-client/-/oidc-client-1.11.5.tgz", - "integrity": "sha512-LcKrKC8Av0m/KD/4EFmo9Sg8fSQ+WFJWBrmtWd+tZkNn3WT/sQG3REmPANE9tzzhbjW6VkTNy4xhAXCfPApAOg==", - "requires": { - "acorn": "^7.4.1", - "base64-js": "^1.5.1", - "core-js": "^3.8.3", - "crypto-js": "^4.0.0", - "serialize-javascript": "^4.0.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": 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==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", - "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.7", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-loader": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", - "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } -} diff --git a/src/AzureIoTHub.Portal.Client/assets/package.json b/src/AzureIoTHub.Portal.Client/assets/package.json deleted file mode 100644 index 542ab0716..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "private": true, - "scripts": { - "preclean": "yarn install --mutex network --frozen-lockfile", - "clean": "node node_modules/rimraf/bin.js ./dist/Debug ./dist/Release", - "prebuild": "yarn run clean && yarn install --mutex network --frozen-lockfile", - "build": "yarn run build:debug && yarn run build:production", - "build:Debug": "node node_modules/webpack-cli/bin/cli.js --mode development --config ./webpack.config.js", - "build:Release": "node node_modules/webpack-cli/bin/cli.js --mode production --config ./webpack.config.js" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^4.29.3", - "@typescript-eslint/parser": "^4.29.3", - "acorn": "^8.8.0", - "eslint": "^7.32.0", - "inspectpack": "^4.7.1", - "ts-loader": "^9.2.5", - "typescript": "^4.4.2", - "webpack": "5.74.0", - "webpack-cli": "^4.10.0" - }, - "dependencies": { - "oidc-client": "1.11.5" - } -} diff --git a/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.js b/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.js deleted file mode 100644 index 12692320f..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.js +++ /dev/null @@ -1,331 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthenticationService = exports.AuthenticationResultStatus = exports.AccessTokenResultStatus = void 0; -const oidc_client_1 = require("oidc-client"); -oidc_client_1.Log.level = oidc_client_1.Log.DEBUG; -oidc_client_1.Log.logger = console; -function isApiAuthorizationSettings(settings) { - return settings.hasOwnProperty('configurationEndpoint'); -} -var AccessTokenResultStatus; -(function (AccessTokenResultStatus) { - AccessTokenResultStatus["Success"] = "success"; - AccessTokenResultStatus["RequiresRedirect"] = "requiresRedirect"; -})(AccessTokenResultStatus = exports.AccessTokenResultStatus || (exports.AccessTokenResultStatus = {})); -var AuthenticationResultStatus; -(function (AuthenticationResultStatus) { - AuthenticationResultStatus["Redirect"] = "redirect"; - AuthenticationResultStatus["Success"] = "success"; - AuthenticationResultStatus["Failure"] = "failure"; - AuthenticationResultStatus["OperationCompleted"] = "operationCompleted"; -})(AuthenticationResultStatus = exports.AuthenticationResultStatus || (exports.AuthenticationResultStatus = {})); -; -class OidcAuthorizeService { - constructor(userManager) { - this._userManager = userManager; - } - async trySilentSignIn() { - if (!this._intialSilentSignIn) { - this._intialSilentSignIn = (async () => { - try { - await this._userManager.signinSilent(); - } - catch (e) { - // It is ok to swallow the exception here. - // The user might not be logged in and in that case it - // is expected for signinSilent to fail and throw - } - })(); - } - return this._intialSilentSignIn; - } - async getUser() { - if (window.parent === window && !window.opener && !window.frameElement && this._userManager.settings.redirect_uri && - !location.href.startsWith(this._userManager.settings.redirect_uri)) { - // If we are not inside a hidden iframe, try authenticating silently. - await AuthenticationService.instance.trySilentSignIn(); - } - const user = await this._userManager.getUser(); - return user && user.profile; - } - async getAccessToken(request) { - const user = await this._userManager.getUser(); - if (hasValidAccessToken(user) && hasAllScopes(request, user.scopes)) { - return { - status: AccessTokenResultStatus.Success, - token: { - grantedScopes: user.scopes, - expires: getExpiration(user.expires_in), - value: user.access_token - } - }; - } - else { - try { - const parameters = request && request.scopes ? - { scope: request.scopes.join(' ') } : undefined; - const newUser = await this._userManager.signinSilent(parameters); - return { - status: AccessTokenResultStatus.Success, - token: { - grantedScopes: newUser.scopes, - expires: getExpiration(newUser.expires_in), - value: newUser.access_token - } - }; - } - catch (e) { - return { - status: AccessTokenResultStatus.RequiresRedirect - }; - } - } - function hasValidAccessToken(user) { - return !!(user && user.access_token && !user.expired && user.scopes); - } - function getExpiration(expiresIn) { - const now = new Date(); - now.setTime(now.getTime() + expiresIn * 1000); - return now; - } - function hasAllScopes(request, currentScopes) { - const set = new Set(currentScopes); - if (request && request.scopes) { - for (const current of request.scopes) { - if (!set.has(current)) { - return false; - } - } - } - return true; - } - } - async signIn(state) { - try { - await this._userManager.clearStaleState(); - await this._userManager.signinSilent(this.createArguments()); - return this.success(state); - } - catch (silentError) { - try { - await this._userManager.clearStaleState(); - await this._userManager.signinRedirect(this.createArguments(state)); - return this.redirect(); - } - catch (redirectError) { - return this.error(this.getExceptionMessage(redirectError)); - } - } - } - async completeSignIn(url) { - const requiresLogin = await this.loginRequired(url); - const stateExists = await this.stateExists(url); - try { - const user = await this._userManager.signinCallback(url); - if (window.self !== window.top) { - return this.operationCompleted(); - } - else { - return this.success(user && user.state); - } - } - catch (error) { - if (requiresLogin || window.self !== window.top || !stateExists) { - return this.operationCompleted(); - } - return this.error('There was an error signing in.'); - } - } - async signOut(state) { - try { - if (!(await this._userManager.metadataService.getEndSessionEndpoint())) { - await this._userManager.removeUser(); - return this.success(state); - } - await this._userManager.signoutRedirect(this.createArguments(state)); - return this.redirect(); - } - catch (redirectSignOutError) { - return this.error(this.getExceptionMessage(redirectSignOutError)); - } - } - async completeSignOut(url) { - try { - if (await this.stateExists(url)) { - const response = await this._userManager.signoutCallback(url); - return this.success(response && response.state); - } - else { - return this.operationCompleted(); - } - } - catch (error) { - return this.error(this.getExceptionMessage(error)); - } - } - getExceptionMessage(error) { - if (isOidcError(error)) { - return error.error_description; - } - else if (isRegularError(error)) { - return error.message; - } - else { - return error.toString(); - } - function isOidcError(error) { - return error && error.error_description; - } - function isRegularError(error) { - return error && error.message; - } - } - async stateExists(url) { - const stateParam = new URLSearchParams(new URL(url).search).get('state'); - if (stateParam && this._userManager.settings.stateStore) { - return await this._userManager.settings.stateStore.get(stateParam); - } - else { - return undefined; - } - } - async loginRequired(url) { - const errorParameter = new URLSearchParams(new URL(url).search).get('error'); - if (errorParameter && this._userManager.settings.stateStore) { - const error = await this._userManager.settings.stateStore.get(errorParameter); - return error === 'login_required'; - } - else { - return false; - } - } - createArguments(state) { - return { useReplaceToNavigate: true, data: state }; - } - error(message) { - return { status: AuthenticationResultStatus.Failure, errorMessage: message }; - } - success(state) { - return { status: AuthenticationResultStatus.Success, state }; - } - redirect() { - return { status: AuthenticationResultStatus.Redirect }; - } - operationCompleted() { - return { status: AuthenticationResultStatus.OperationCompleted }; - } -} -class AuthenticationService { - static init(settings) { - // Multiple initializations can start concurrently and we want to avoid that. - // In order to do so, we create an initialization promise and the first call to init - // tries to initialize the app and sets up a promise other calls can await on. - if (!AuthenticationService._initialized) { - AuthenticationService._initialized = AuthenticationService.initializeCore(Object.assign({}, { - loadUserInfo: false - }, settings)); - } - return AuthenticationService._initialized; - } - static handleCallback() { - return AuthenticationService.initializeCore(); - } - static async initializeCore(settings) { - const finalSettings = settings || AuthenticationService.resolveCachedSettings(); - if (!settings && finalSettings) { - const userManager = AuthenticationService.createUserManagerCore(finalSettings); - if (window.parent !== window && !window.opener && (window.frameElement && userManager.settings.redirect_uri && - location.href.startsWith(userManager.settings.redirect_uri))) { - // If we are inside a hidden iframe, try completing the sign in early. - // This prevents loading the blazor app inside a hidden iframe, which speeds up the authentication operations - // and avoids wasting resources (CPU and memory from bootstrapping the Blazor app) - AuthenticationService.instance = new OidcAuthorizeService(userManager); - // This makes sure that if the blazor app has time to load inside the hidden iframe, - // it is not able to perform another auth operation until this operation has completed. - AuthenticationService._initialized = (async () => { - await AuthenticationService.instance.completeSignIn(location.href); - return; - })(); - } - } - else if (settings) { - const userManager = await AuthenticationService.createUserManager(settings); - AuthenticationService.instance = new OidcAuthorizeService(userManager); - } - else { - // HandleCallback gets called unconditionally, so we do nothing for normal paths. - // Cached settings are only used on handling the redirect_uri path and if the settings are not there - // the app will fallback to the default logic for handling the redirect. - } - } - static resolveCachedSettings() { - const cachedSettings = window.sessionStorage.getItem(`${AuthenticationService._infrastructureKey}.CachedAuthSettings`); - return cachedSettings ? JSON.parse(cachedSettings) : undefined; - } - static getUser() { - return AuthenticationService.instance.getUser(); - } - static getAccessToken(options) { - return AuthenticationService.instance.getAccessToken(options); - } - static signIn(state) { - return AuthenticationService.instance.signIn(state); - } - static async completeSignIn(url) { - let operation = this._pendingOperations[url]; - if (!operation) { - operation = AuthenticationService.instance.completeSignIn(url); - await operation; - delete this._pendingOperations[url]; - } - return operation; - } - static signOut(state) { - return AuthenticationService.instance.signOut(state); - } - static async completeSignOut(url) { - let operation = this._pendingOperations[url]; - if (!operation) { - operation = AuthenticationService.instance.completeSignOut(url); - await operation; - delete this._pendingOperations[url]; - } - return operation; - } - static async createUserManager(settings) { - let finalSettings; - if (isApiAuthorizationSettings(settings)) { - const response = await fetch(settings.configurationEndpoint); - if (!response.ok) { - throw new Error(`Could not load settings from '${settings.configurationEndpoint}'`); - } - const downloadedSettings = await response.json(); - finalSettings = downloadedSettings; - } - else { - if (!settings.scope) { - settings.scope = settings.defaultScopes.join(' '); - } - if (settings.response_type === null) { - // If the response type is not set, it gets serialized as null. OIDC-client behaves differently than when the value is undefined, so we explicitly check for a null value and remove the property instead. - delete settings.response_type; - } - finalSettings = settings; - } - window.sessionStorage.setItem(`${AuthenticationService._infrastructureKey}.CachedAuthSettings`, JSON.stringify(finalSettings)); - return AuthenticationService.createUserManagerCore(finalSettings); - } - static createUserManagerCore(finalSettings) { - const userManager = new oidc_client_1.UserManager(finalSettings); - userManager.events.addUserSignedOut(async () => { - userManager.removeUser(); - }); - return userManager; - } -} -exports.AuthenticationService = AuthenticationService; -AuthenticationService._infrastructureKey = 'Microsoft.AspNetCore.Components.WebAssembly.Authentication'; -AuthenticationService._pendingOperations = {}; -AuthenticationService.handleCallback(); -window.AuthenticationService = AuthenticationService; -//# sourceMappingURL=AuthenticationService.js.map \ No newline at end of file diff --git a/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.js.map b/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.js.map deleted file mode 100644 index 3d5c3dacb..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AuthenticationService.js","sourceRoot":"","sources":["AuthenticationService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.ts b/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.ts deleted file mode 100644 index 0ea31ac00..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/src/AuthenticationService.ts +++ /dev/null @@ -1,418 +0,0 @@ -import { UserManager, UserManagerSettings, User, Log } from 'oidc-client' - -type Writeable<T> = { -readonly [P in keyof T]: T[P] }; - -type ExtendedUserManagerSettings = Writeable<UserManagerSettings & AuthorizeServiceSettings> - -type OidcAuthorizeServiceSettings = ExtendedUserManagerSettings | ApiAuthorizationSettings; - -Log.level = Log.DEBUG; -Log.logger = console; - -function isApiAuthorizationSettings(settings: OidcAuthorizeServiceSettings): settings is ApiAuthorizationSettings { - return settings.hasOwnProperty('configurationEndpoint'); -} - -interface AuthorizeServiceSettings { - defaultScopes: string[]; -} - -interface ApiAuthorizationSettings { - configurationEndpoint: string; -} - -export interface AccessTokenRequestOptions { - scopes: string[]; - returnUrl: string; -} - -export interface AccessTokenResult { - status: AccessTokenResultStatus; - token?: AccessToken; -} - -export interface AccessToken { - value: string; - expires: Date; - grantedScopes: string[]; -} - -export enum AccessTokenResultStatus { - Success = 'success', - RequiresRedirect = 'requiresRedirect' -} - -export enum AuthenticationResultStatus { - Redirect = 'redirect', - Success = 'success', - Failure = 'failure', - OperationCompleted = 'operationCompleted' -}; - -export interface AuthenticationResult { - status: AuthenticationResultStatus; - state?: unknown; - message?: string; -} - -export interface AuthorizeService { - getUser(): Promise<unknown>; - getAccessToken(request?: AccessTokenRequestOptions): Promise<AccessTokenResult>; - signIn(state: unknown): Promise<AuthenticationResult>; - completeSignIn(state: unknown): Promise<AuthenticationResult>; - signOut(state: unknown): Promise<AuthenticationResult>; - completeSignOut(url: string): Promise<AuthenticationResult>; -} - -class OidcAuthorizeService implements AuthorizeService { - private _userManager: UserManager; - private _intialSilentSignIn: Promise<void> | undefined; - constructor(userManager: UserManager) { - this._userManager = userManager; - } - - async trySilentSignIn() { - if (!this._intialSilentSignIn) { - this._intialSilentSignIn = (async () => { - try { - await this._userManager.signinSilent(); - } catch (e) { - // It is ok to swallow the exception here. - // The user might not be logged in and in that case it - // is expected for signinSilent to fail and throw - } - })(); - } - - return this._intialSilentSignIn; - } - - async getUser() { - if (window.parent === window && !window.opener && !window.frameElement && this._userManager.settings.redirect_uri && - !location.href.startsWith(this._userManager.settings.redirect_uri)) { - // If we are not inside a hidden iframe, try authenticating silently. - await AuthenticationService.instance.trySilentSignIn(); - } - - const user = await this._userManager.getUser(); - return user && user.profile; - } - - async getAccessToken(request?: AccessTokenRequestOptions): Promise<AccessTokenResult> { - const user = await this._userManager.getUser(); - if (hasValidAccessToken(user) && hasAllScopes(request, user.scopes)) { - return { - status: AccessTokenResultStatus.Success, - token: { - grantedScopes: user.scopes, - expires: getExpiration(user.expires_in), - value: user.access_token - } - }; - } else { - try { - const parameters = request && request.scopes ? - { scope: request.scopes.join(' ') } : undefined; - - const newUser = await this._userManager.signinSilent(parameters); - - return { - status: AccessTokenResultStatus.Success, - token: { - grantedScopes: newUser.scopes, - expires: getExpiration(newUser.expires_in), - value: newUser.access_token - } - }; - - } catch (e) { - return { - status: AccessTokenResultStatus.RequiresRedirect - }; - } - } - - function hasValidAccessToken(user: User | null): user is User { - return !!(user && user.access_token && !user.expired && user.scopes); - } - - function getExpiration(expiresIn: number) { - const now = new Date(); - now.setTime(now.getTime() + expiresIn * 1000); - return now; - } - - function hasAllScopes(request: AccessTokenRequestOptions | undefined, currentScopes: string[]) { - const set = new Set(currentScopes); - if (request && request.scopes) { - for (const current of request.scopes) { - if (!set.has(current)) { - return false; - } - } - } - - return true; - } - } - - async signIn(state: unknown) { - try { - await this._userManager.clearStaleState(); - await this._userManager.signinSilent(this.createArguments()); - return this.success(state); - } catch (silentError) { - try { - await this._userManager.clearStaleState(); - await this._userManager.signinRedirect(this.createArguments(state)); - return this.redirect(); - } catch (redirectError) { - return this.error(this.getExceptionMessage(redirectError)); - } - } - } - - async completeSignIn(url: string) { - const requiresLogin = await this.loginRequired(url); - const stateExists = await this.stateExists(url); - try { - const user = await this._userManager.signinCallback(url); - if (window.self !== window.top) { - return this.operationCompleted(); - } else { - return this.success(user && user.state); - } - } catch (error) { - if (requiresLogin || window.self !== window.top || !stateExists) { - return this.operationCompleted(); - } - - return this.error('There was an error signing in.'); - } - } - - async signOut(state: unknown) { - try { - if (!(await this._userManager.metadataService.getEndSessionEndpoint())) { - await this._userManager.removeUser(); - return this.success(state); - } - await this._userManager.signoutRedirect(this.createArguments(state)); - return this.redirect(); - } catch (redirectSignOutError) { - return this.error(this.getExceptionMessage(redirectSignOutError)); - } - } - - async completeSignOut(url: string) { - try { - if (await this.stateExists(url)) { - const response = await this._userManager.signoutCallback(url); - return this.success(response && response.state); - } else { - return this.operationCompleted(); - } - } catch (error) { - return this.error(this.getExceptionMessage(error)); - } - } - - private getExceptionMessage(error: any) { - if (isOidcError(error)) { - return error.error_description; - } else if (isRegularError(error)) { - return error.message; - } else { - return error.toString(); - } - - function isOidcError(error: any): error is (Oidc.SigninResponse & Oidc.SignoutResponse) { - return error && error.error_description; - } - - function isRegularError(error: any): error is Error { - return error && error.message; - } - } - - private async stateExists(url: string) { - const stateParam = new URLSearchParams(new URL(url).search).get('state'); - if (stateParam && this._userManager.settings.stateStore) { - return await this._userManager.settings.stateStore.get(stateParam); - } else { - return undefined; - } - } - - private async loginRequired(url: string) { - const errorParameter = new URLSearchParams(new URL(url).search).get('error'); - if (errorParameter && this._userManager.settings.stateStore) { - const error = await this._userManager.settings.stateStore.get(errorParameter); - return error === 'login_required'; - } else { - return false; - } - } - - private createArguments(state?: unknown) { - return { useReplaceToNavigate: true, data: state }; - } - - private error(message: string) { - return { status: AuthenticationResultStatus.Failure, errorMessage: message }; - } - - private success(state: unknown) { - return { status: AuthenticationResultStatus.Success, state }; - } - - private redirect() { - return { status: AuthenticationResultStatus.Redirect }; - } - - private operationCompleted() { - return { status: AuthenticationResultStatus.OperationCompleted }; - } -} - -export class AuthenticationService { - - static _infrastructureKey = 'Microsoft.AspNetCore.Components.WebAssembly.Authentication'; - static _initialized: Promise<void>; - static instance: OidcAuthorizeService; - static _pendingOperations: { [key: string]: Promise<AuthenticationResult> | undefined } = {} - - public static init(settings: UserManagerSettings & AuthorizeServiceSettings) { - // Multiple initializations can start concurrently and we want to avoid that. - // In order to do so, we create an initialization promise and the first call to init - // tries to initialize the app and sets up a promise other calls can await on. - if (!AuthenticationService._initialized) { - AuthenticationService._initialized = AuthenticationService.initializeCore(Object.assign({}, { - loadUserInfo: false - }, settings)); - } - - return AuthenticationService._initialized; - } - - public static handleCallback() { - return AuthenticationService.initializeCore(); - } - - private static async initializeCore(settings?: UserManagerSettings & AuthorizeServiceSettings) { - const finalSettings = settings || AuthenticationService.resolveCachedSettings(); - if (!settings && finalSettings) { - const userManager = AuthenticationService.createUserManagerCore(finalSettings); - - if (window.parent !== window && !window.opener && (window.frameElement && userManager.settings.redirect_uri && - location.href.startsWith(userManager.settings.redirect_uri))) { - // If we are inside a hidden iframe, try completing the sign in early. - // This prevents loading the blazor app inside a hidden iframe, which speeds up the authentication operations - // and avoids wasting resources (CPU and memory from bootstrapping the Blazor app) - AuthenticationService.instance = new OidcAuthorizeService(userManager); - - // This makes sure that if the blazor app has time to load inside the hidden iframe, - // it is not able to perform another auth operation until this operation has completed. - AuthenticationService._initialized = (async (): Promise<void> => { - await AuthenticationService.instance.completeSignIn(location.href); - return; - })(); - } - } else if (settings) { - const userManager = await AuthenticationService.createUserManager(settings); - AuthenticationService.instance = new OidcAuthorizeService(userManager); - } else { - // HandleCallback gets called unconditionally, so we do nothing for normal paths. - // Cached settings are only used on handling the redirect_uri path and if the settings are not there - // the app will fallback to the default logic for handling the redirect. - } - } - - private static resolveCachedSettings(): UserManagerSettings | undefined { - const cachedSettings = window.sessionStorage.getItem(`${AuthenticationService._infrastructureKey}.CachedAuthSettings`); - return cachedSettings ? JSON.parse(cachedSettings) : undefined; - } - - public static getUser() { - return AuthenticationService.instance.getUser(); - } - - public static getAccessToken(options: AccessTokenRequestOptions) { - return AuthenticationService.instance.getAccessToken(options); - } - - public static signIn(state: unknown) { - return AuthenticationService.instance.signIn(state); - } - - public static async completeSignIn(url: string) { - let operation = this._pendingOperations[url]; - if (!operation) { - operation = AuthenticationService.instance.completeSignIn(url); - await operation; - delete this._pendingOperations[url]; - } - - return operation; - } - - public static signOut(state: unknown) { - return AuthenticationService.instance.signOut(state); - } - - public static async completeSignOut(url: string) { - let operation = this._pendingOperations[url]; - if (!operation) { - operation = AuthenticationService.instance.completeSignOut(url); - await operation; - delete this._pendingOperations[url]; - } - - return operation; - } - - private static async createUserManager(settings: OidcAuthorizeServiceSettings): Promise<UserManager> { - let finalSettings: UserManagerSettings; - if (isApiAuthorizationSettings(settings)) { - const response = await fetch(settings.configurationEndpoint); - if (!response.ok) { - throw new Error(`Could not load settings from '${settings.configurationEndpoint}'`); - } - - const downloadedSettings = await response.json(); - - finalSettings = downloadedSettings; - } else { - if (!settings.scope) { - settings.scope = settings.defaultScopes.join(' '); - } - - if (settings.response_type === null) { - // If the response type is not set, it gets serialized as null. OIDC-client behaves differently than when the value is undefined, so we explicitly check for a null value and remove the property instead. - delete settings.response_type; - } - - finalSettings = settings; - } - - window.sessionStorage.setItem(`${AuthenticationService._infrastructureKey}.CachedAuthSettings`, JSON.stringify(finalSettings)); - - return AuthenticationService.createUserManagerCore(finalSettings); - } - - private static createUserManagerCore(finalSettings: UserManagerSettings) { - const userManager = new UserManager(finalSettings); - userManager.events.addUserSignedOut(async () => { - userManager.removeUser(); - }); - return userManager; - } -} - -declare global { - interface Window { AuthenticationService: AuthenticationService } -} - -AuthenticationService.handleCallback(); - -window.AuthenticationService = AuthenticationService; diff --git a/src/AzureIoTHub.Portal.Client/assets/src/index.js b/src/AzureIoTHub.Portal.Client/assets/src/index.js deleted file mode 100644 index eba3f27d9..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/src/index.js +++ /dev/null @@ -1,4 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -require("./AuthenticationService"); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/AzureIoTHub.Portal.Client/assets/src/index.js.map b/src/AzureIoTHub.Portal.Client/assets/src/index.js.map deleted file mode 100644 index 4077cf446..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;AAAA,mCAAiC"} \ No newline at end of file diff --git a/src/AzureIoTHub.Portal.Client/assets/src/index.ts b/src/AzureIoTHub.Portal.Client/assets/src/index.ts deleted file mode 100644 index 357803743..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -import './AuthenticationService'; diff --git a/src/AzureIoTHub.Portal.Client/assets/tsconfig.json b/src/AzureIoTHub.Portal.Client/assets/tsconfig.json deleted file mode 100644 index 13316f2a9..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2019", - "module": "commonjs", - "lib": [ "DOM", "ES2019" ], - "sourceMap": true, - "strict": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true - } -} diff --git a/src/AzureIoTHub.Portal.Client/assets/webpack.config.js b/src/AzureIoTHub.Portal.Client/assets/webpack.config.js deleted file mode 100644 index 76504df2e..000000000 --- a/src/AzureIoTHub.Portal.Client/assets/webpack.config.js +++ /dev/null @@ -1,67 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const TerserJsPlugin = require("terser-webpack-plugin"); -const { DuplicatesPlugin } = require("inspectpack/plugin"); - -module.exports = (env, args) => ({ - resolve: { - extensions: ['.ts', '.js'], - }, - devtool: false, // Source maps configured below - module: { - rules: [{ test: /\.ts?$/, loader: 'ts-loader' }] - }, - output: { path: path.join(__dirname, 'dist', args.mode == 'development' ? 'Debug' : 'Release'), filename: '[name].js' }, - performance: { - maxAssetSize: 122880, - }, - optimization: { - sideEffects: true, - concatenateModules: true, - providedExports: true, - usedExports: true, - innerGraph: true, - minimize: true, - minimizer: [new TerserJsPlugin({ - terserOptions: { - ecma: 2019, - compress: { - passes: 3 - }, - mangle: { - }, - module: false, - format: { - ecma: 2019 - }, - keep_classnames: false, - keep_fnames: false, - toplevel: true - } - })] - }, - plugins: Array.prototype.concat.apply([ - new webpack.DefinePlugin({ - 'process.env.NODE_DEBUG': false, - 'Platform.isNode': false - }), - new DuplicatesPlugin({ - emitErrors: false, - emitHandler: undefined, - ignoredPackages: undefined, - verbose: false - }), - ], args.mode !== 'development' ? [] : [ - // In most cases we want to use external source map files - new webpack.SourceMapDevToolPlugin({ - filename: '[name].js.map', - exclude: 'blazor.webview.js', - }) - ]), - stats: { - warnings: true, - errors: true, - performance: true, - optimizationBailout: true - } -}); diff --git a/src/AzureIoTHub.Portal.Client/libman.json b/src/AzureIoTHub.Portal.Client/libman.json deleted file mode 100644 index 515b725d3..000000000 --- a/src/AzureIoTHub.Portal.Client/libman.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": "1.0", - "defaultProvider": "cdnjs", - "libraries": [ - { "library": "mdbootstrap@4.1.1", "destination": "wwwroot/node_modules/"} - ] -} \ No newline at end of file diff --git a/src/AzureIoTHub.Portal.Client/package-lock.json b/src/AzureIoTHub.Portal.Client/package-lock.json deleted file mode 100644 index 48e341a09..000000000 --- a/src/AzureIoTHub.Portal.Client/package-lock.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lockfileVersion": 1 -} diff --git a/src/AzureIoTHub.Portal.Client/package.json b/src/AzureIoTHub.Portal.Client/package.json deleted file mode 100644 index b5715f7ec..000000000 --- a/src/AzureIoTHub.Portal.Client/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "iot-hub-portal.client", - "version": "1.0.0", - "description": "", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "json-schema": ">=0.4.0", - "trim-newlines": ">=3.0.1" - }, - "author": "", - "license": "MIT" -} diff --git a/src/AzureIoTHub.Portal.Client/wwwroot/index.html b/src/AzureIoTHub.Portal.Client/wwwroot/index.html index f3303bcd7..db96ffbf6 100644 --- a/src/AzureIoTHub.Portal.Client/wwwroot/index.html +++ b/src/AzureIoTHub.Portal.Client/wwwroot/index.html @@ -26,15 +26,24 @@ <div style="height:100%;width:100%;margin:0;position:fixed;"> <div style="display: flex; flex-direction: column; justify-content: center; align-items: center; height: 100%; width: 100%; "> - <svg xmlns="http://www.w3.org/2000/svg" height="150" viewBox="0 0 122.88 111.48"><defs><style>.cls-1{fill-rule:evenodd;}</style></defs><path fill="#594ae2ff" class="cls-1" d="M50.21,38.57A17.17,17.17,0,1,1,33,55.74,17.17,17.17,0,0,1,50.21,38.57ZM91.31,94V85.28H67.46a44,44,0,0,0,5.64-6.17H94.38a3.09,3.09,0,0,1,3.08,3.07V94A9,9,0,1,1,91.31,94ZM89.16,30.71H75.51A44.78,44.78,0,0,0,71,24.55H86.09v-7a9,9,0,1,1,6.15-.06V27.64a3.07,3.07,0,0,1-3.08,3.07ZM122.88,15a9,9,0,1,0-12.65,8.25v18H80.12a43.4,43.4,0,0,1,1.27,6.16H113.3a3.09,3.09,0,0,0,3.07-3.08V23.67A9,9,0,0,0,122.88,15Zm-.15,49.93a9,9,0,0,0-17.49-3.08H80.88A42.08,42.08,0,0,1,79.14,68h26.1a9,9,0,0,0,17.49-3.07ZM49.56,105.3H46a6.13,6.13,0,0,1-6.12-6.11V92.93a38.11,38.11,0,0,1-10-3.78l-4.18,4.18a6.13,6.13,0,0,1-8.65,0L12,88.24a6.14,6.14,0,0,1,0-8.65l3.81-3.81a38,38,0,0,1-4.47-10.33H6.12A6.13,6.13,0,0,1,0,59.34v-7.2A6.13,6.13,0,0,1,6.12,46h5.12a38,38,0,0,1,4.44-10.44L12,31.88a6.14,6.14,0,0,1,0-8.64l5.09-5.09a6.13,6.13,0,0,1,8.65,0l4,4a38,38,0,0,1,10.13-3.87v-6A6.13,6.13,0,0,1,46,6.18h7.19A6.13,6.13,0,0,1,59.27,12V32.48A24.54,24.54,0,0,0,50.84,31c-.43,0-.86,0-1.28,0s-.85,0-1.27,0a24.61,24.61,0,1,0,0,49.21c.42,0,.85,0,1.27,0s.85,0,1.28,0a24.54,24.54,0,0,0,8.43-1.48V99.48a6.13,6.13,0,0,1-6.11,5.82Z"/></svg> - + <svg xmlns="http://www.w3.org/2000/svg" height="150" viewBox="0 0 122.88 111.48"> + <defs> + <style> + .cls-1 { + fill-rule: evenodd; + } + </style> + </defs> + <path fill="#594ae2ff" class="cls-1" d="M50.21,38.57A17.17,17.17,0,1,1,33,55.74,17.17,17.17,0,0,1,50.21,38.57ZM91.31,94V85.28H67.46a44,44,0,0,0,5.64-6.17H94.38a3.09,3.09,0,0,1,3.08,3.07V94A9,9,0,1,1,91.31,94ZM89.16,30.71H75.51A44.78,44.78,0,0,0,71,24.55H86.09v-7a9,9,0,1,1,6.15-.06V27.64a3.07,3.07,0,0,1-3.08,3.07ZM122.88,15a9,9,0,1,0-12.65,8.25v18H80.12a43.4,43.4,0,0,1,1.27,6.16H113.3a3.09,3.09,0,0,0,3.07-3.08V23.67A9,9,0,0,0,122.88,15Zm-.15,49.93a9,9,0,0,0-17.49-3.08H80.88A42.08,42.08,0,0,1,79.14,68h26.1a9,9,0,0,0,17.49-3.07ZM49.56,105.3H46a6.13,6.13,0,0,1-6.12-6.11V92.93a38.11,38.11,0,0,1-10-3.78l-4.18,4.18a6.13,6.13,0,0,1-8.65,0L12,88.24a6.14,6.14,0,0,1,0-8.65l3.81-3.81a38,38,0,0,1-4.47-10.33H6.12A6.13,6.13,0,0,1,0,59.34v-7.2A6.13,6.13,0,0,1,6.12,46h5.12a38,38,0,0,1,4.44-10.44L12,31.88a6.14,6.14,0,0,1,0-8.64l5.09-5.09a6.13,6.13,0,0,1,8.65,0l4,4a38,38,0,0,1,10.13-3.87v-6A6.13,6.13,0,0,1,46,6.18h7.19A6.13,6.13,0,0,1,59.27,12V32.48A24.54,24.54,0,0,0,50.84,31c-.43,0-.86,0-1.28,0s-.85,0-1.27,0a24.61,24.61,0,1,0,0,49.21c.42,0,.85,0,1.27,0s.85,0,1.28,0a24.54,24.54,0,0,0,8.43-1.48V99.48a6.13,6.13,0,0,1-6.11,5.82Z" /> + </svg> + <div class="mud-progress-linear mud-progress-indeterminate mud-progress-linear-small horizontal mud-flip-x-rtl my-10" style="width: 20%" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"> <div class="mud-progress-linear-bars"> <div class="mud-progress-linear-bar" style="background-color: #3299ff"></div> <div class="mud-progress-linear-bar" style="background-color: #3299ff"></div> </div> </div> - + </div> </div> </div> @@ -45,8 +54,7 @@ <a class="dismiss">🗙</a> </div> - <script src="main.js"></script> - + <script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script> <script src="_content/Blazored.Modal/blazored.modal.js"></script> <script src="_framework/blazor.webassembly.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/core.js"></script> diff --git a/src/AzureIoTHub.Portal.Domain/AzureIoTHub.Portal.Domain.csproj b/src/AzureIoTHub.Portal.Domain/AzureIoTHub.Portal.Domain.csproj index 671ed681b..c3e349e52 100644 --- a/src/AzureIoTHub.Portal.Domain/AzureIoTHub.Portal.Domain.csproj +++ b/src/AzureIoTHub.Portal.Domain/AzureIoTHub.Portal.Domain.csproj @@ -1,11 +1,18 @@ -<Project Sdk="Microsoft.NET.Sdk"> +<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> - <TargetFramework>net6.0</TargetFramework> + <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> + <ItemGroup> + <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.0-preview1.22518.1"> + <PrivateAssets>all</PrivateAssets> + <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> + </PackageReference> + </ItemGroup> + <ItemGroup> <ProjectReference Include="..\AzureIoTHub.Portal.Shared\AzureIoTHub.Portal.Shared.csproj" /> </ItemGroup> diff --git a/src/AzureIoTHub.Portal.Infrastructure/AzureIoTHub.Portal.Infrastructure.csproj b/src/AzureIoTHub.Portal.Infrastructure/AzureIoTHub.Portal.Infrastructure.csproj index d3386d8a8..2fb685081 100644 --- a/src/AzureIoTHub.Portal.Infrastructure/AzureIoTHub.Portal.Infrastructure.csproj +++ b/src/AzureIoTHub.Portal.Infrastructure/AzureIoTHub.Portal.Infrastructure.csproj @@ -1,24 +1,31 @@ <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> - <TargetFramework>net6.0</TargetFramework> + <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Azure.Data.Tables" Version="12.7.1" /> - <PackageReference Include="EntityFrameworkCore.Exceptions.PostgreSQL" Version="6.0.3" /> <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" /> <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Hosting.Server.Abstractions" Version="2.2.0" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.9" /> - <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" /> - <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="6.0.9" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.9" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.9" /> - <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.7" /> - <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.21" /> + <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.0-preview1.22518.1"> + <PrivateAssets>all</PrivateAssets> + <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> + </PackageReference> + <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.0" /> + <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.0" /> + <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="7.0.0" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0"> + <PrivateAssets>all</PrivateAssets> + <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> + </PackageReference> + <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" /> + <PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> + <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.0" /> + <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.23" /> </ItemGroup> <ItemGroup> diff --git a/src/AzureIoTHub.Portal.Server/AzureIoTHub.Portal.Server.csproj b/src/AzureIoTHub.Portal.Server/AzureIoTHub.Portal.Server.csproj index af1d1df14..ec881a89e 100644 --- a/src/AzureIoTHub.Portal.Server/AzureIoTHub.Portal.Server.csproj +++ b/src/AzureIoTHub.Portal.Server/AzureIoTHub.Portal.Server.csproj @@ -1,7 +1,7 @@ <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> - <TargetFramework>net6.0</TargetFramework> + <TargetFramework>net7.0</TargetFramework> <UserSecretsId>AzureIoTHub.Portal.Server-DDED92B6-DADB-4B27-88BD-450D1F21395C</UserSecretsId> <WebProject_DirectoryAccessLevelKey>0</WebProject_DirectoryAccessLevelKey> <GenerateDocumentationFile>true</GenerateDocumentationFile> @@ -26,32 +26,39 @@ <PackageReference Include="AutoMapper" Version="12.0.0" /> <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" /> <PackageReference Include="Azure.Data.Tables" Version="12.7.1" /> - <PackageReference Include="Azure.Messaging.EventHubs" Version="5.7.4" /> - <PackageReference Include="Azure.Messaging.EventHubs.Processor" Version="5.7.4" /> + <PackageReference Include="Azure.Messaging.EventHubs" Version="5.7.5" /> + <PackageReference Include="Azure.Messaging.EventHubs.Processor" Version="5.7.5" /> <PackageReference Include="Azure.Storage.Blobs" Version="12.14.1" /> + <PackageReference Include="FluentValidation" Version="11.4.0" /> <PackageReference Include="EntityFrameworkCore.Exceptions.PostgreSQL" Version="6.0.3" /> <PackageReference Include="CsvHelper" Version="30.0.1" /> <PackageReference Include="Hellang.Middleware.ProblemDetails" Version="6.5.1" /> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" /> - <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.10" NoWarn="NU1605" /> - <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.10" NoWarn="NU1605" /> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="6.0.10" /> + <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.0" NoWarn="NU1605" /> + <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="7.0.0" NoWarn="NU1605" /> + <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="7.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" /> <PackageReference Include="Microsoft.Azure.Devices" Version="1.38.2" /> <PackageReference Include="Microsoft.Azure.Devices.Provisioning.Service" Version="1.18.2" /> <PackageReference Include="Microsoft.Azure.Devices.Shared" Version="1.30.2" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" /> - <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.9" /> + <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.0-preview1.22518.1"> + <PrivateAssets>all</PrivateAssets> + <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> + </PackageReference> + <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0"> + <PrivateAssets>all</PrivateAssets> + <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> + </PackageReference> <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="7.0.0" /> <PackageReference Include="Microsoft.Graph" Version="4.48.0" /> - <PackageReference Include="Microsoft.OpenApi" Version="1.4.3" /> + <PackageReference Include="Microsoft.OpenApi" Version="1.4.4" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" /> - <PackageReference Include="Microsoft.Identity.Web" Version="1.25.5" /> - <PackageReference Include="Microsoft.Identity.Web.UI" Version="1.25.5" /> + <PackageReference Include="Microsoft.Identity.Web" Version="1.25.8" /> + <PackageReference Include="Microsoft.Identity.Web.UI" Version="1.25.8" /> <PackageReference Include="MudBlazor" Version="6.1.2" /> <PackageReference Include="NetEscapades.AspNetCore.SecurityHeaders" Version="0.17.0" /> - <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> + <PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="prometheus-net.AspNetCore" Version="7.0.0" /> <PackageReference Include="Quartz" Version="3.5.0" /> <PackageReference Include="Quartz.Extensions.Hosting" Version="3.5.0" /> diff --git a/src/AzureIoTHub.Portal.Server/Dockerfile b/src/AzureIoTHub.Portal.Server/Dockerfile index d3594ad42..03a1b2090 100644 --- a/src/AzureIoTHub.Portal.Server/Dockerfile +++ b/src/AzureIoTHub.Portal.Server/Dockerfile @@ -2,7 +2,7 @@ ARG BUILD_VERSION=1.0.0-dev -FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base WORKDIR /app ENV ASPNETCORE_URLS=http://+:80;https://+:443 @@ -17,7 +17,7 @@ RUN rm packages-microsoft-prod.deb RUN apt-get update; \ apt-get install -y apt-transport-https && \ apt-get update && \ - apt-get install -y dotnet-sdk-6.0 + apt-get install -y dotnet-sdk-7.0 FROM build AS builder WORKDIR /src diff --git a/src/AzureIoTHub.Portal.Shared/AzureIoTHub.Portal.Shared.csproj b/src/AzureIoTHub.Portal.Shared/AzureIoTHub.Portal.Shared.csproj index 9e1d3d6f3..68da68434 100644 --- a/src/AzureIoTHub.Portal.Shared/AzureIoTHub.Portal.Shared.csproj +++ b/src/AzureIoTHub.Portal.Shared/AzureIoTHub.Portal.Shared.csproj @@ -1,7 +1,7 @@ <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> - <TargetFramework>net6.0</TargetFramework> + <TargetFramework>net7.0</TargetFramework> <GenerateDocumentationFile>True</GenerateDocumentationFile> </PropertyGroup> @@ -23,7 +23,7 @@ <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> - <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0"> + <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.0-preview1.22518.1"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> diff --git a/src/AzureIoTHub.Portal.Tests.Unit/AzureIoTHub.Portal.Tests.Unit.csproj b/src/AzureIoTHub.Portal.Tests.Unit/AzureIoTHub.Portal.Tests.Unit.csproj index 2e47e2cbf..f87c207b2 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/AzureIoTHub.Portal.Tests.Unit.csproj +++ b/src/AzureIoTHub.Portal.Tests.Unit/AzureIoTHub.Portal.Tests.Unit.csproj @@ -1,16 +1,16 @@ <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> - <TargetFramework>net6.0</TargetFramework> + <TargetFramework>net7.0</TargetFramework> <IsPackable>false</IsPackable> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> - <NoWarn>$(NoWarn)</NoWarn> + <NoWarn>$(NoWarn);CS0854</NoWarn> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> - <NoWarn>$(NoWarn)</NoWarn> + <NoWarn>$(NoWarn);CS0854</NoWarn> </PropertyGroup> <ItemGroup> @@ -22,12 +22,12 @@ <PackageReference Include="bunit.web.testcomponents" Version="1.12.6" /> <PackageReference Include="Docker.DotNet" Version="3.125.12" /> <PackageReference Include="FluentAssertions" Version="6.8.0" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.10" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.0" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> - <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0"> + <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.0-preview1.22518.1"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricCounterTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricCounterTests.cs index c438dcec9..d38dde5c4 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricCounterTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricCounterTests.cs @@ -4,12 +4,12 @@ namespace AzureIoTHub.Portal.Tests.Unit.Components.Dashboard { using System.Globalization; - using UnitTests.Bases; + using AzureIoTHub.Portal.Client.Components.Dashboard; using Bunit; using FluentAssertions; using MudBlazor; using NUnit.Framework; - using AzureIoTHub.Portal.Client.Components.Dashboard; + using UnitTests.Bases; [TestFixture] public class DashboardMetricCounterTests : BlazorUnitTest diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricsTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricsTests.cs index 7dcabfcfd..802e5bbf6 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricsTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Dashboard/DashboardMetricsTests.cs @@ -4,17 +4,17 @@ namespace AzureIoTHub.Portal.Tests.Unit.Components.Dashboard { using System.Globalization; + using AzureIoTHub.Portal.Client.Components.Dashboard; using AzureIoTHub.Portal.Client.Exceptions; using AzureIoTHub.Portal.Client.Models; using AzureIoTHub.Portal.Client.Services; using AzureIoTHub.Portal.Shared.Models.v1._0; - using UnitTests.Bases; using Bunit; using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using Moq; using NUnit.Framework; - using AzureIoTHub.Portal.Client.Components.Dashboard; + using UnitTests.Bases; [TestFixture] public class DashboardMetricsTests : BlazorUnitTest diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/DeviceToDuplicateSelectorTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/DeviceToDuplicateSelectorTests.cs index 378453301..f7bcb2bf1 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/DeviceToDuplicateSelectorTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/DeviceToDuplicateSelectorTests.cs @@ -6,19 +6,19 @@ namespace AzureIoTHub.Portal.Tests.Unit.Components.Devices using System.Collections.Generic; using AngleSharp.Dom; using AutoFixture; + using AzureIoTHub.Portal.Client.Components.Devices; using AzureIoTHub.Portal.Client.Exceptions; using AzureIoTHub.Portal.Client.Models; using AzureIoTHub.Portal.Client.Services; - using Models.v10; - using UnitTests.Bases; using Bunit; using FluentAssertions; using Microsoft.Extensions.DependencyInjection; + using Models.v10; using Models.v10.LoRaWAN; using Moq; using MudBlazor; using NUnit.Framework; - using AzureIoTHub.Portal.Client.Components.Devices; + using UnitTests.Bases; [TestFixture] public class DeviceToDuplicateSelectorTests : BlazorUnitTest diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/LoRaDeviceTelemetryTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/LoRaDeviceTelemetryTests.cs index 84545c823..dbdcf62d1 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/LoRaDeviceTelemetryTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/Devices/LoRaDeviceTelemetryTests.cs @@ -3,19 +3,19 @@ namespace AzureIoTHub.Portal.Tests.Unit.Client.Components.Devices { + using System.Linq; using AutoFixture; + using AzureIoTHub.Portal.Client.Components.Devices; + using AzureIoTHub.Portal.Client.Exceptions; + using AzureIoTHub.Portal.Client.Models; using AzureIoTHub.Portal.Client.Services; - using UnitTests.Bases; + using AzureIoTHub.Portal.Shared.Models.v10; using Bunit; + using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using Moq; using NUnit.Framework; - using System.Linq; - using AzureIoTHub.Portal.Client.Models; - using FluentAssertions; - using AzureIoTHub.Portal.Client.Exceptions; - using AzureIoTHub.Portal.Client.Components.Devices; - using AzureIoTHub.Portal.Shared.Models.v10; + using UnitTests.Bases; [TestFixture] public class LoRaDeviceTelemetryTests : BlazorUnitTest diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/DevicesModels/LoRaWAN/EditLoraDeviceModelPageTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/DevicesModels/LoRaWAN/EditLoraDeviceModelPageTests.cs index d3520e426..8f75631ee 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/DevicesModels/LoRaWAN/EditLoraDeviceModelPageTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/DevicesModels/LoRaWAN/EditLoraDeviceModelPageTests.cs @@ -4,12 +4,12 @@ namespace AzureIoTHub.Portal.Tests.Unit.Client.Pages.DevicesModels.LoRaWAN { using System.Collections.Generic; + using AzureIoTHub.Portal.Client.Components.DeviceModels.LoRaWAN; using AzureIoTHub.Portal.Models.v10.LoRaWAN; - using UnitTests.Bases; using Bunit; using FluentAssertions; using NUnit.Framework; - using AzureIoTHub.Portal.Client.Components.DeviceModels.LoRaWAN; + using UnitTests.Bases; public class EditLoraDeviceModelPageTests : BlazorUnitTest { diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/EdgeDevices/EdgeDeviceToDuplicateSelectorTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/EdgeDevices/EdgeDeviceToDuplicateSelectorTests.cs index d68c3e123..851eba617 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/EdgeDevices/EdgeDeviceToDuplicateSelectorTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Components/EdgeDevices/EdgeDeviceToDuplicateSelectorTests.cs @@ -6,18 +6,18 @@ namespace AzureIoTHub.Portal.Tests.Unit.Client.Components.EdgeDevices using System.Collections.Generic; using AngleSharp.Dom; using AutoFixture; + using AzureIoTHub.Portal.Client.Components.EdgeDevices; using AzureIoTHub.Portal.Client.Exceptions; using AzureIoTHub.Portal.Client.Models; using AzureIoTHub.Portal.Client.Services; - using Models.v10; - using UnitTests.Bases; using Bunit; using FluentAssertions; using Microsoft.Extensions.DependencyInjection; + using Models.v10; using Moq; using MudBlazor; using NUnit.Framework; - using AzureIoTHub.Portal.Client.Components.EdgeDevices; + using UnitTests.Bases; [TestFixture] public class EdgeDeviceToDuplicateSelectorTests : BlazorUnitTest diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/ErrorTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/ErrorTests.cs index 55820fc61..b38bcb900 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/ErrorTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/ErrorTests.cs @@ -44,7 +44,6 @@ public void ProcessProblemDetailsShouldSnackBar() var errorSnackBar = snackBars.First(); - _ = errorSnackBar.Message.Should().Be(problemDetailsException.ProblemDetailsWithExceptionDetails.Detail); _ = errorSnackBar.Severity.Should().Be(Severity.Error); } } diff --git a/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/MainLayoutTests.cs b/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/MainLayoutTests.cs index f17e7f15e..0ec8744d0 100644 --- a/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/MainLayoutTests.cs +++ b/src/AzureIoTHub.Portal.Tests.Unit/Client/Pages/Shared/MainLayoutTests.cs @@ -16,6 +16,7 @@ namespace AzureIoTHub.Portal.Tests.Unit.Client.Pages.Shared using MudBlazor; using NUnit.Framework; using Portal.Client.Constants; + using Microsoft.AspNetCore.Components.Web; [TestFixture] public class MainLayoutTests : BlazorUnitTest @@ -51,7 +52,7 @@ public void MainLayoutShouldRenderCorrectly() cut.WaitForAssertion(() => cut.FindComponent<MudThemeProvider>().Instance.Should().NotBeNull()); cut.WaitForAssertion(() => cut.FindComponent<MudDialogProvider>().Instance.Should().NotBeNull()); cut.WaitForAssertion(() => cut.FindComponent<MudSnackbarProvider>().Instance.Should().NotBeNull()); - cut.WaitForAssertion(() => cut.FindComponent<Title>().Instance.Value.Should().Be("TEST")); + cut.WaitForAssertion(() => cut.FindComponent<PageTitle>().Instance.Should().NotBeNull()); cut.WaitForAssertion(() => cut.FindComponents<MudAppBar>().Count.Should().Be(2)); cut.WaitForAssertion(() => cut.FindComponent<Appbar>().Instance.Should().NotBeNull()); cut.WaitForAssertion(() => cut.FindComponent<MudDrawer>().Instance.Should().NotBeNull()); diff --git a/src/AzureIoTHub.Portal.sln b/src/AzureIoTHub.Portal.sln index 4459186ea..19408bef5 100644 --- a/src/AzureIoTHub.Portal.sln +++ b/src/AzureIoTHub.Portal.sln @@ -11,6 +11,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00. Solution Items", "00. S ..\codecov.yml = ..\codecov.yml Directory.Build.props = Directory.Build.props Dockerfile = Dockerfile + global.json = global.json ..\LICENSE = ..\LICENSE ..\README.md = ..\README.md EndProjectSection @@ -54,8 +55,6 @@ Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-co EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureIoTHub.Portal.Server", "AzureIoTHub.Portal.Server\AzureIoTHub.Portal.Server.csproj", "{EF219BC4-0C53-4DE7-92D1-F970C6E56E71}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureIoTHub.Portal.Client", "AzureIoTHub.Portal.Client\AzureIoTHub.Portal.Client.csproj", "{24B26D0B-F293-484E-8175-1CF69FBEE992}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureIoTHub.Portal.Shared", "AzureIoTHub.Portal.Shared\AzureIoTHub.Portal.Shared.csproj", "{9F0A43D6-D7C2-4C92-AE22-BE48B7F83ACB}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureIoTHub.Portal.Domain", "AzureIoTHub.Portal.Domain\AzureIoTHub.Portal.Domain.csproj", "{BC1E7AEF-393D-4771-8AD2-C0BE7E5C405F}" @@ -64,6 +63,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureIoTHub.Portal.Infrastr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureIoTHub.Portal.Tests.Unit", "AzureIoTHub.Portal.Tests.Unit\AzureIoTHub.Portal.Tests.Unit.csproj", "{51FD5B90-B422-47BF-83F2-516520CFB124}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureIoTHub.Portal.Client", "AzureIoTHub.Portal.Client\AzureIoTHub.Portal.Client.csproj", "{45DE395D-1403-41D8-87B9-6196AEB17518}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -78,10 +79,6 @@ Global {EF219BC4-0C53-4DE7-92D1-F970C6E56E71}.Debug|Any CPU.Build.0 = Debug|Any CPU {EF219BC4-0C53-4DE7-92D1-F970C6E56E71}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF219BC4-0C53-4DE7-92D1-F970C6E56E71}.Release|Any CPU.Build.0 = Release|Any CPU - {24B26D0B-F293-484E-8175-1CF69FBEE992}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {24B26D0B-F293-484E-8175-1CF69FBEE992}.Debug|Any CPU.Build.0 = Debug|Any CPU - {24B26D0B-F293-484E-8175-1CF69FBEE992}.Release|Any CPU.ActiveCfg = Release|Any CPU - {24B26D0B-F293-484E-8175-1CF69FBEE992}.Release|Any CPU.Build.0 = Release|Any CPU {9F0A43D6-D7C2-4C92-AE22-BE48B7F83ACB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9F0A43D6-D7C2-4C92-AE22-BE48B7F83ACB}.Debug|Any CPU.Build.0 = Debug|Any CPU {9F0A43D6-D7C2-4C92-AE22-BE48B7F83ACB}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -98,6 +95,10 @@ Global {51FD5B90-B422-47BF-83F2-516520CFB124}.Debug|Any CPU.Build.0 = Debug|Any CPU {51FD5B90-B422-47BF-83F2-516520CFB124}.Release|Any CPU.ActiveCfg = Release|Any CPU {51FD5B90-B422-47BF-83F2-516520CFB124}.Release|Any CPU.Build.0 = Release|Any CPU + {45DE395D-1403-41D8-87B9-6196AEB17518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {45DE395D-1403-41D8-87B9-6196AEB17518}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45DE395D-1403-41D8-87B9-6196AEB17518}.Release|Any CPU.ActiveCfg = Release|Any CPU + {45DE395D-1403-41D8-87B9-6196AEB17518}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Dockerfile b/src/Dockerfile index 1a841fc12..04c64470c 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,8 +1,5 @@ #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. - - - -FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 @@ -14,7 +11,7 @@ RUN rm packages-microsoft-prod.deb RUN apt-get update; \ apt-get install -y apt-transport-https && \ apt-get update && \ - apt-get install -y dotnet-sdk-6.0 + apt-get install -y dotnet-sdk-7.0 FROM build AS builder WORKDIR /src diff --git a/src/global.json b/src/global.json index 0b738cd89..70e3dcc50 100644 --- a/src/global.json +++ b/src/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "6.0.400" + "version": "7.0.100" } }