From 4a8ed1e01c41705a052ef0ce979df7a1d2de87c6 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Tue, 17 Dec 2024 13:58:26 +0100 Subject: [PATCH 01/11] wip --- .vscode/projects.code-workspace | 14 + .../.vscode/extensions.json | 5 + .../.vscode/launch.json | 23 + .../.vscode/msEntraSampleConfig.json | 1 + .../.vscode/msEntraSampleLaunch.js | 24 + .../.vscode/vsCodeLaunchAngularSample.js | 12 + .../AppCreationScripts/AppCreationScripts.md | 137 + .../AppCreationScripts/Cleanup.ps1 | 152 + .../AppCreationScripts/Configure.ps1 | 329 + .../AppCreationScripts/apps.json | 47 + .../AppCreationScripts/quickstart.md | 31 + .../AppCreationScripts/sample.json | 63 + .../CIAM-JSAngular-SPA-AuthCode/README.md | 415 + .../ReadmeFiles/screenshot.png | Bin 0 -> 31735 bytes .../ReadmeFiles/topology.png | Bin 0 -> 45846 bytes .../SPA/.browserslistrc | 16 + .../SPA/.editorconfig | 16 + .../SPA/.gitignore | 42 + .../SPA/angular.json | 106 + .../SPA/karma.conf.js | 46 + .../SPA/package-lock.json | 13548 ++++++++++++++++ .../SPA/package.json | 43 + .../SPA/src/app/app-routing.module.ts | 40 + .../SPA/src/app/app.component.css | 22 + .../SPA/src/app/app.component.html | 19 + .../SPA/src/app/app.component.ts | 148 + .../SPA/src/app/app.module.ts | 99 + .../SPA/src/app/auth-config.ts | 48 + .../SPA/src/app/claim-utils.ts | 194 + .../SPA/src/app/guarded/guarded.component.css | 0 .../src/app/guarded/guarded.component.html | 1 + .../SPA/src/app/guarded/guarded.component.ts | 15 + .../SPA/src/app/home/home.component.css | 26 + .../SPA/src/app/home/home.component.html | 34 + .../SPA/src/app/home/home.component.ts | 77 + .../SPA/src/app/sample.spec.ts | 108 + .../SPA/src/assets/.gitkeep | 0 .../SPA/src/environments/environment.prod.ts | 3 + .../SPA/src/environments/environment.ts | 16 + .../SPA/src/favicon.svg | 23 + .../SPA/src/index.html | 17 + .../SPA/src/main.ts | 12 + .../SPA/src/polyfills.ts | 53 + .../SPA/src/styles.css | 3 + .../SPA/src/test.ts | 21 + .../SPA/tsconfig.app.json | 15 + .../SPA/tsconfig.json | 32 + .../SPA/tsconfig.spec.json | 18 + 48 files changed, 16114 insertions(+) create mode 100644 .vscode/projects.code-workspace create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/topology.png create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json diff --git a/.vscode/projects.code-workspace b/.vscode/projects.code-workspace new file mode 100644 index 0000000..a5ff267 --- /dev/null +++ b/.vscode/projects.code-workspace @@ -0,0 +1,14 @@ +{ + "folders": [ + { + "path": ".." + }, + { + "path": "../src/MSAL_Example" + }, + { + "path": "../src/WebApp_Example" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json new file mode 100644 index 0000000..cd45074 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["ms-azuretools.ms-entra"] +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json new file mode 100644 index 0000000..05b8664 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json @@ -0,0 +1,23 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "id": "ms-entra.launchSample", + "type": "node", + "request": "launch", + "name": "Launch Program", + "program": "${workspaceFolder}/.vscode/msEntraSampleLaunch.js", + "args": [ + "${input:taskDelay}" + ] + } + ], + "inputs": [ + { + "id": "taskDelay", + "type": "command", + "command": "ms-entra.getScenarioEndTime", + "args": "UserFlowDelay" + } + ] +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json new file mode 100644 index 0000000..1412bda --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json @@ -0,0 +1 @@ +{"workingDir":"SPA","command":"npm install && npm run start"} \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js new file mode 100644 index 0000000..dddd99a --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js @@ -0,0 +1,24 @@ +const { exec } = require('child_process'); +const path = require('path'); +const config = require('./msEntraSampleConfig.json'); + +// Read the UserFlowDelay from the args. +// @see launch.json +const startDelay = Math.max(0, Number(process.argv[2] || 0) - Date.now()); + +if (startDelay > 0) { + console.log(`Waiting for the user flow setup to finish before launching sample...`); +} + +setTimeout(() => { + console.log('Running Sample...'); + console.log('This may take some time.'); + + exec(config.command, { cwd: path.resolve(config.workingDir) }, (err, output) => { + if (err) { + console.error(err); + return; + } + console.log(output); + }); +}, startDelay); diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js new file mode 100644 index 0000000..b6090a2 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js @@ -0,0 +1,12 @@ +const {exec} = require('child_process'); +const path = require("path"); +exec('npm install && npm start',{cwd:path.resolve('.\\SPA')}, (err, output) => { + // once the command has completed, the callback function is called + if (err) { + // log and return if we encounter an error + console.error("Error on running commands: ", err) + return + } + // log the output received from the command + console.log("Output: \n", output) +}) \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md new file mode 100644 index 0000000..a977f6e --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md @@ -0,0 +1,137 @@ +# Registering sample apps with the Microsoft identity platform and updating configuration files using PowerShell + +## Overview + +### Quick summary + +1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. + + ```PowerShell + cd .\AppCreationScripts\ + .\Configure.ps1 -TenantId "your test tenant's id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" + ``` + +### More details + +- [Goal of the provided scripts](#goal-of-the-provided-scripts) + - [Presentation of the scripts](#presentation-of-the-scripts) + - [Usage pattern for tests and DevOps scenarios](#usage-pattern-for-tests-and-DevOps-scenarios) +- [How to use the app creation scripts?](#how-to-use-the-app-creation-scripts) + - [Pre-requisites](#pre-requisites) + - [Run the script and start running](#run-the-script-and-start-running) + - [Four ways to run the script](#four-ways-to-run-the-script) + - [Option 1 (interactive)](#option-1-interactive) + - [Option 2 (Interactive, but create apps in a specified tenant)](#option-3-Interactive-but-create-apps-in-a-specified-tenant) + - [Running the script on Azure Sovereign clouds](#running-the-script-on-Azure-Sovereign-clouds) + +## Goal of the provided scripts + +### Presentation of the scripts + +This sample comes with two PowerShell scripts, which automate the creation of the Microsoft Entra applications, and the configuration of the code for this sample. Once you run them, you will only need to build the solution and you are good to test. + +These scripts are: + +- `Configure.ps1` which: + - creates Microsoft Entra applications and their related objects (permissions, dependencies, secrets, app roles), + - changes the configuration files in the sample projects. + - creates a summary file named `createdApps.html` in the folder from which you ran the script, and containing, for each Azure AD application it created: + - the identifier of the application + - the AppId of the application + - the url of its registration in the [Microsoft Entra admin center](https://entra.microsoft.com/). + +- `Cleanup.ps1` which cleans-up the Azure AD objects created by `Configure.ps1`. Note that this script does not revert the changes done in the configuration files, though. You will need to undo the change from source control (from Visual Studio, or from the command line using, for instance, `git reset`). + +> :information_source: If the sample supports using certificates instead of client secrets, this folder will contain an additional set of scripts: `Configure-WithCertificates.ps1` and `Cleanup-WithCertificates.ps1`. You can use them in the same way to register app(s) that use certificates instead of client secrets. + +### Usage pattern for tests and DevOps scenarios + +The `Configure.ps1` will stop if it tries to create an Azure AD application which already exists in the tenant. For this, if you are using the script to try/test the sample, or in DevOps scenarios, you might want to run `Cleanup.ps1` just before `Configure.ps1`. This is what is shown in the steps below. + +## How to use the app creation scripts? + +### Pre-requisites + +1. PowerShell 7 or later (see: [installing PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)) +1. Open PowerShell (On Windows, press `Windows-R` and type `PowerShell` in the search window) + +### (Optionally) install Microsoft.Graph.Applications PowerShell modules + +The scripts install the required PowerShell module (Microsoft.Graph.Applications) for the current user if needed. However, if you want to install if for all users on the machine, you can follow the following steps: + +1. If you have never done it already, in the PowerShell window, install the Microsoft.Graph.Applications PowerShell modules. For this: + + 1. Open PowerShell + 2. Type: + + ```PowerShell + Install-Module Microsoft.Graph.Applications + ``` + + or if you want the modules to be installed for the current user only, run: + + ```PowerShell + Install-Module Microsoft.Graph.Applications -Scope CurrentUser + ``` + +### Run the script and start running + +1. Go to the `AppCreationScripts` sub-folder. From the folder where you cloned the repo, + + ```PowerShell + cd AppCreationScripts + ``` + +1. Run the scripts. See below for the [four options](#four-ways-to-run-the-script) to do that. +1. Open the Visual Studio solution, and in the solution's context menu, choose **Set Startup Projects**. +1. select **Start** for the projects + +You're done! + +### Two ways to run the script + +We advise four ways of running the script: + +- Interactive: you will be prompted for credentials, and the scripts decide in which tenant to create the objects, +- Interactive in specific tenant: you will provide the tenant in which you want to create the objects and then you will be prompted for credentials, and the scripts will create the objects, + +Here are the details on how to do this. + +#### Option 1 (interactive) + +- Just run ``.\Configure.ps1``, and you will be prompted to sign-in (email address, password, and if needed MFA). +- The script will be run as the signed-in user and will use the tenant in which the user is defined. + +Note that the script will choose the tenant in which to create the applications, based on the user. Also to run the `Cleanup.ps1` script, you will need to re-sign-in. + +#### Option 2 (Interactive, but create apps in a specified tenant) + + if you want to create the apps in a particular tenant, you can use the following option: + +- Open the [Microsoft Entra admin center](https://entra.microsoft.com/) +- Select the Microsoft Entra tenant you are interested in (in the combo-box below your name on the top right of the browser window) +- Select **Overview** on the left side menu and then select the **Overview** tab. Copy the content of the **Tenant Id** property +- Then use the full syntax to run the scripts: + +```PowerShell +$tenantId = "yourTenantIdGuid" +. .\Cleanup.ps1 -TenantId $tenantId +. .\Configure.ps1 -TenantId $tenantId +``` + +### Running the script on Azure Sovereign clouds + +All the four options listed above can be used on any Azure Sovereign clouds. By default, the script targets `AzureCloud`, but it can be changed using the parameter `-AzureEnvironmentName`. + +The acceptable values for this parameter are: + +- AzureCloud +- AzureChinaCloud +- AzureUSGovernment + +Example: + + ```PowerShell + . .\Cleanup.ps1 -AzureEnvironmentName "AzureUSGovernment" + . .\Configure.ps1 -AzureEnvironmentName "AzureUSGovernment" + ``` diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 new file mode 100644 index 0000000..d209690 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 @@ -0,0 +1,152 @@ +#Requires -Version 7 + +[CmdletBinding()] +param( + [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] + [string] $tenantId, + [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] + [string] $azureEnvironmentName +) + + +Function Cleanup +{ + if (!$azureEnvironmentName) + { + $azureEnvironmentName = "Global" + } + + <# + .Description + This function removes the Microsoft Entra applications for the sample. These applications were created by the Configure.ps1 script + #> + + # $tenantId is the Microsoft Entra Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant + # into which you want to create the apps. Look it up in the Microsoft Entra admin center in the "Properties" of the Azure AD. + + # Connect to the Microsoft Graph API + Write-Host "Connecting to Microsoft Graph" + + + if ($tenantId -eq "") + { + Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + else + { + Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + + $context = Get-MgContext + $tenantId = $context.TenantId + + # Get the user running the script + $currentUserPrincipalName = $context.Account + $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" + + # get the tenant we signed in to + $Tenant = Get-MgOrganization + $tenantName = $Tenant.DisplayName + + $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} + $verifiedDomainName = $verifiedDomain.Name + $tenantId = $Tenant.Id + + Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) + + # Removes the applications + Write-Host "Cleaning-up applications from tenant '$tenantId'" + + Write-Host "Removing 'spa' (ciam-msal-angular-spa) if needed" + try + { + Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } + } + catch + { + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to remove the application 'ciam-msal-angular-spa'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red + } + + Write-Host "Making sure there are no more (ciam-msal-angular-spa) applications found, will remove if needed..." + $apps = Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain + + if ($apps) + { + Remove-MgApplication -ApplicationId $apps.Id + } + + foreach ($app in $apps) + { + Remove-MgApplication -ApplicationId $app.Id + Write-Host "Removed ciam-msal-angular-spa.." + } + + # also remove service principals of this app + try + { + Get-MgServicePrincipal -filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} + } + catch + { + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to remove ServicePrincipal 'ciam-msal-angular-spa'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red + } +} + +# Pre-requisites +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { + Install-Module "Microsoft.Graph" -Scope CurrentUser +} + +#Import-Module Microsoft.Graph + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { + Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Authentication + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { + Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Identity.DirectoryManagement + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { + Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Applications + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { + Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Groups + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { + Install-Module "Microsoft.Graph.Users" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Users + +$ErrorActionPreference = "Stop" + + +try +{ + Cleanup -tenantId $tenantId -environment $azureEnvironmentName +} +catch +{ + $_.Exception.ToString() | out-host + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red +} + +Write-Host "Disconnecting from tenant" +Disconnect-MgGraph diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 new file mode 100644 index 0000000..dcd334b --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 @@ -0,0 +1,329 @@ +#Requires -Version 7 + +[CmdletBinding()] +param( + [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] + [string] $tenantId, + [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] + [string] $azureEnvironmentName +) + +<# + This script creates the Microsoft Entra applications needed for this sample and updates the configuration files + for the visual Studio projects from the data in the Microsoft Entra applications. + + In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user + + There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. +#> + +# Adds the requiredAccesses (expressed as a pipe separated string) to the requiredAccess structure +# The exposed permissions are in the $exposedPermissions collection, and the type of permission (Scope | Role) is +# described in $permissionType +Function AddResourcePermission($requiredAccess, ` + $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) +{ + foreach($permission in $requiredAccesses.Trim().Split("|")) + { + foreach($exposedPermission in $exposedPermissions) + { + if ($exposedPermission.Value -eq $permission) + { + $resourceAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess + $resourceAccess.Type = $permissionType # Scope = Delegated permissions | Role = Application permissions + $resourceAccess.Id = $exposedPermission.Id # Read directory data + $requiredAccess.ResourceAccess += $resourceAccess + } + } + } +} + +# +# Example: GetRequiredPermissions "Microsoft Graph" "Graph.Read|User.Read" +# See also: http://stackoverflow.com/questions/42164581/how-to-configure-a-new-azure-ad-application-through-powershell +Function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) +{ + # If we are passed the service principal we use it directly, otherwise we find it from the display name (which might not be unique) + if ($servicePrincipal) + { + $sp = $servicePrincipal + } + else + { + $sp = Get-MgServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'" + } + $appid = $sp.AppId + $requiredAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess + $requiredAccess.ResourceAppId = $appid + $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess] + + # $sp.Oauth2Permissions | Select Id,AdminConsentDisplayName,Value: To see the list of all the Delegated permissions for the application: + if ($requiredDelegatedPermissions) + { + AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2PermissionScopes -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope" + } + + # $sp.AppRoles | Select Id,AdminConsentDisplayName,Value: To see the list of all the Application permissions for the application + if ($requiredApplicationPermissions) + { + AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role" + } + return $requiredAccess +} + + +<#.Description + This function takes a string input as a single line, matches a key value and replaces with the replacement value +#> +Function UpdateLine([string] $line, [string] $value) +{ + $index = $line.IndexOf(':') + $lineEnd = '' + + if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } + + if ($index -ige 0) + { + $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd + } + return $line +} + +<#.Description + This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file +#> +Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) +{ + $lines = Get-Content $configFilePath + $index = 0 + while($index -lt $lines.Length) + { + $line = $lines[$index] + foreach($key in $dictionary.Keys) + { + if ($line.Contains($key)) + { + $lines[$index] = UpdateLine $line $dictionary[$key] + } + } + $index++ + } + + Set-Content -Path $configFilePath -Value $lines -Force +} + +<#.Description + This function takes a string input as a single line, matches a key value and replaces with the replacement value +#> +Function ReplaceInLine([string] $line, [string] $key, [string] $value) +{ + $index = $line.IndexOf($key) + if ($index -ige 0) + { + $index2 = $index+$key.Length + $line = $line.Substring(0, $index) + $value + $line.Substring($index2) + } + return $line +} + +<#.Description + This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file +#> +Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) +{ + $lines = Get-Content $configFilePath + $index = 0 + while($index -lt $lines.Length) + { + $line = $lines[$index] + foreach($key in $dictionary.Keys) + { + if ($line.Contains($key)) + { + $lines[$index] = ReplaceInLine $line $key $dictionary[$key] + } + } + $index++ + } + + Set-Content -Path $configFilePath -Value $lines -Force +} + + +<#.Description + Primary entry method to create and configure app registrations +#> +Function ConfigureApplications +{ + <#.Description + This function creates the Microsoft Entra applications for the sample in the provided external tenant and updates the + configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) + so that they are consistent with the Applications parameters + #> + + if (!$azureEnvironmentName) + { + $azureEnvironmentName = "Global" + } + + # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) + Write-Host "Connecting to Microsoft Graph" + if ($tenantId -eq "") { + Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + else { + Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + + $context = Get-MgContext + $tenantId = $context.TenantId + + # Get the user running the script + $currentUserPrincipalName = $context.Account + $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" + + # get the tenant we signed in to + $Tenant = Get-MgOrganization + $tenantName = $Tenant.DisplayName + + $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} + $verifiedDomainName = $verifiedDomain.Name + $tenantId = $Tenant.Id + + Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) + + # Create the spa AAD application + Write-Host "Creating the AAD application (ciam-msal-angular-spa)" + # create the application + $spaAadApplication = New-MgApplication -DisplayName "ciam-msal-angular-spa" ` + -Spa ` + @{ ` + RedirectUris = "http://localhost:4200"; ` + } ` + -SignInAudience AzureADMyOrg ` + #end of command + + $currentAppId = $spaAadApplication.AppId + $currentAppObjectId = $spaAadApplication.Id + + $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain + #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/ciam-msal-angular-spa") + + # create the service principal of the newly created application + $spaServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} + + # add the user running the script as an app owner if needed + $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId + if ($owner -eq $null) + { + New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} + Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($spaServicePrincipal.DisplayName)'" + } + Write-Host "Done creating the spa application (ciam-msal-angular-spa)" + + # URL of the AAD application in the Microsoft Entra admin center + # Future? $spaPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" + $spaPortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" + + Add-Content -Value "spa$currentAppIdciam-msal-angular-spa" -Path createdApps.html + # Declare a list to hold RRA items + $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess] + + # Add Required Resources Access (from 'spa' to 'Microsoft Graph') + Write-Host "Getting access from 'spa' to 'Microsoft Graph'" + $requiredPermission = GetRequiredPermissions -applicationDisplayName "Microsoft Graph"` + -requiredDelegatedPermissions "openid|offline_access" + + $requiredResourcesAccess.Add($requiredPermission) + Write-Host "Added 'Microsoft Graph' to the RRA list." + # Useful for RRA additions troubleshooting + # $requiredResourcesAccess.Count + # $requiredResourcesAccess + + Update-MgApplication -ApplicationId $currentAppObjectId -RequiredResourceAccess $requiredResourcesAccess + Write-Host "Granted permissions." + + + # print the registered app portal URL for any further navigation + Write-Host "Successfully registered and configured that app registration for 'ciam-msal-angular-spa' at `n $spaPortalUrl" -ForegroundColor Green + + # Update config file for 'spa' + # $configFile = $pwd.Path + "\..\SPA\src\app\auth-config.ts" + $configFile = $(Resolve-Path ($pwd.Path + "\..\SPA\src\app\auth-config.ts")) + + $dictionary = @{ "Enter_the_Application_Id_Here" = $spaAadApplication.AppId; "Enter_the_Tenant_Subdomain_Here" = $tenantName.Split(".onmicrosoft.com")[0] }; + + Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow + $dictionary + Write-Host "-----------------" + + ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary + Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" + Write-Host "IMPORTANT: Please follow the instructions below to complete a few manual step(s) in the Microsoft Entra admin center": + Write-Host "- For spa" + Write-Host " - Navigate to $spaPortalUrl" + Write-Host " - Navigate to your tenant and create user flows to allow users to sign up for the application." -ForegroundColor Red + Write-Host " - The delegated permissions for the 'spa' application require admin consent. Do remember to navigate to the application registration in the app portal and consent for those." -ForegroundColor Red + Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" + +Add-Content -Value "" -Path createdApps.html +} # end of ConfigureApplications function + +# Pre-requisites + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { + Install-Module "Microsoft.Graph" -Scope CurrentUser +} + +#Import-Module Microsoft.Graph + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { + Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Authentication + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { + Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Identity.DirectoryManagement + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { + Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Applications + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { + Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Groups + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { + Install-Module "Microsoft.Graph.Users" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Users + +Set-Content -Value "" -Path createdApps.html +Add-Content -Value "" -Path createdApps.html + +$ErrorActionPreference = "Stop" + +# Run interactively (will ask you for the tenant ID) + +try +{ + ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName +} +catch +{ + $_.Exception.ToString() | out-host + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red +} +Write-Host "Disconnecting from tenant" +Disconnect-MgGraph \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json new file mode 100644 index 0000000..7fefcda --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json @@ -0,0 +1,47 @@ +{ + "Sample": { + "Title": "An Angular single-page application using MSAL Angular to authenticate users against Microsoft Entra External ID", + "Client": "SinglePageApplication", + "Level": 100 + }, + "AppRegistrations": [ + { + "x-ms-id": "ciam-angular-spa", + "x-ms-name": "ms-identity-ciam-angular-spa", + "x-ms-version": "2.0", + "replyUrlsWithType": [ + { + "url": "http://localhost:4200/", + "type": "Spa" + } + ], + "requiredResourceAccess": [ + { + "x-ms-resourceAppName": "Microsoft Graph", + "resourceAppId": "00000003-0000-0000-c000-000000000000", + "resourceAccess": [ + { + "id": "37f7f235-527c-4136-accd-4a02d197296e", + "type": "Scope", + "x-ms-name": "openid" + }, + { + "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182", + "type": "Scope", + "x-ms-name": "offline_access" + } + ] + } + ], + "codeConfigurations": [ + { + "settingFile": "SPA/src/app/auth-config.ts", + "replaceTokens": { + "appId": "Enter_the_Application_Id_Here", + "tenantName": "Enter_the_Tenant_Subdomain_Here" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md new file mode 100644 index 0000000..ac776c5 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md @@ -0,0 +1,31 @@ +--- +title: "Portal quickstart for Angular SPA" +description: Learn how to run an sample Angular single-page application to sign in users +services: active-directory +author: kengaderdus +manager: mwongerapk +ms.author: kengaderdus +ms.service: active-directory +ms.workload: identity +ROBOTS: NOINDEX +ms.subservice: ciam +ms.topic: portal +ms.date: 04/19/2023 +--- +# Portal quickstart for Angular SPA + +> In this quickstart, you download and run a code sample that demonstrates how an Angular SPA that can sign in users with Microsoft Entra External ID. +> +> [!div renderon="portal" id="display-on-portal" class="sxs-lookup"] +> +> 1. Make sure you've installed [Node.js](https://nodejs.org/download/). +> 1. Unzip the sample. +> 1. Locate the sample folder in your terminal, then run the following commands: +> +> ```console +> cd SPA && npm install && npm start +> ``` +> +> 1. Visit `http://localhost:4200` in your browser. +> 1. Select **Sign-in** on the navigation bar, then follow the prompts. +> \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json new file mode 100644 index 0000000..924aaaa --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json @@ -0,0 +1,63 @@ +{ + "Sample": { + "Title": "Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID", + "Level": 100, + "Client": "Angular SPA", + "Languages": [ + "javascript", + "typescript" + ], + "Products": [ + "azure-active-directory", + "msal-angular" + ], + "RepositoryUrl": "ms-identity-ciam-javascript-tutorial", + "Platform": "JavaScript", + "Endpoint": "AAD v2.0", + "Provider": "CIAM", + "description": "This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra and calls Microsoft Graph Api" + }, + "AADApps": [ + { + "Id": "spa", + "Name": "ciam-msal-angular-spa", + "Kind": "SinglePageApplication", + "Audience": "AzureADMyOrg", + "SDK": "MsalAngular", + "SampleSubPath": "1-Authentication\\1-sign-in-angular\\SPA", + "HomePage": "http://localhost:4200", + "ReplyUrls": "http://localhost:4200", + "RequiredResourcesAccess": [ + { + "Resource": "Microsoft Graph", + "DelegatedPermissions": [ + "openid", + "offline_access" + ] + } + ], + "ManualSteps": [ + { + "Comment": "Navigate to your tenant and create user flows to allow users to sign up for the application." + } + ] + } + ], + "CodeConfiguration": [ + { + "App": "spa", + "SettingKind": "Replace", + "SettingFile": "\\..\\SPA\\src\\app\\auth-config.ts", + "Mappings": [ + { + "key": "Enter_the_Application_Id_Here", + "value": ".AppId" + }, + { + "key": "Enter_the_Tenant_Subdomain_Here", + "value": "$tenantName" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md new file mode 100644 index 0000000..8dd2cfa --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md @@ -0,0 +1,415 @@ +--- +page_type: sample +name: Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID +description: This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra Consumers Identity and Access Management (Microsoft Entra External ID) +languages: + - javascript + - typescript +products: + - entra-external-id + - msal-angular +urlFragment: ms-identity-ciam-javascript-tutorial-2-sign-in-angular +extensions: + services: + - ms-identity + platform: + - JavaScript + endpoint: + - AAD v2.0 + level: + - 100 + client: + - Angular SPA +--- + +# Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID + +* [Overview](#overview) +* [Scenario](#scenario) +* [Contents](#contents) +* [Prerequisites](#prerequisites) +* [Setup the sample](#setup-the-sample) +* [Explore the sample](#explore-the-sample) +* [Troubleshooting](#troubleshooting) +* [About the code](#about-the-code) +* [Contributing](#contributing) +* [Learn More](#learn-more) + +## Overview + +This sample demonstrates an Angular single-page application (SPA) that lets users sign-in with Microsoft Entra External ID using the [Microsoft Authentication Library for Angular](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular) (MSAL Angular). + +Here you'll learn about [ID Tokens](https://docs.microsoft.com/azure/active-directory/develop/id-tokens), [OIDC scopes](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes), [single-sign on](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso), **silent requests** and more. + +## Scenario + +1. The client Angular SPA uses the to sign-in a user and obtain a JWT [ID Token](https://aka.ms/id-tokens) from **Microsoft Entra External ID**. +1. The **ID Token** proves that the user has successfully authenticated against **Microsoft Entra External ID**. + +![Scenario Image](./ReadmeFiles/topology.png) + +## Contents + +| File/folder | Description | +|---------------------------------|-----------------------------------------------------------| +| `src/app/auth-config.ts` | Authentication parameters reside here. | +| `src/app/app.module.ts` | MSAL Angular configuration parameters reside here. | +| `src/app/app-routing.module.ts` | Configure your MSAL-Guard here. | + +## Prerequisites + +* [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. +* [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. +* [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. +* A modern web browser. +* An external tenant. To create one, choose from the following methods: + * (Recommended) Use the [Microsoft Entra External ID extension](https://aka.ms/ciamvscode/readme/marketplace) to set up an external tenant directly in Visual Studio Code. + * [Create a new external tenant](https://learn.microsoft.com/entra/external-id/customers/how-to-create-external-tenant-portal) in the Microsoft Entra admin center. +* A user account in your external tenant. + +>This sample will not work with a **personal Microsoft account**. If you're signed in to the [Microsoft Entra admin center](https://entra.microsoft.com/) with a personal Microsoft account and have not created a user account in your directory before, you will need to create one before proceeding. + +## Setup the sample + +### Step 1: Clone or download this repository + +From your shell or command line: + +```console +git clone https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial.git +``` + +or download and extract the repository *.zip* file. + +> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. + +### Step 2: Install project dependencies + +```console + cd 1-Authentication\1-sign-in-angular\SPA + npm install +``` + +### Step 3: Register the sample application(s) in your tenant + +There is one project in this sample. To register it, you can: + +- follow the steps below for manually register your apps +- or use PowerShell scripts that: + - **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. + - modify the projects' configuration files. + +
+ Expand this section if you want to use this automation: + + > :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. + + 1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory + 1. In PowerShell run: + + ```PowerShell + Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force + ``` + + 1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. + 1. For interactive process -in PowerShell, run: + + ```PowerShell + cd .\AppCreationScripts\ + .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" + ``` + + > Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. +
+ +#### Choose the external tenant where you want to create your applications + +To manually register the apps, as a first step you'll need to: + +1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/). +1. If your account is present in more than one external tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired external tenant. + +#### Create User Flows + +Please refer to: [Tutorial: Create a sign-up and sign-in user flow](https://learn.microsoft.com/entra/external-id/customers/how-to-user-flow-sign-up-sign-in-customers) + +> :information_source: To enable password reset in an external tenant, please refer to: [Tutorial: Enable users to unlock their account or reset passwords using Microsoft Entra self-service password reset](https://learn.microsoft.com/entra/identity/authentication/tutorial-enable-sspr) + +#### Add External Identity Providers + +Please refer to: + +* [Tutorial: Add Google as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-google-federation-customers) +* [Tutorial: Add Facebook as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-facebook-federation-customers) + +#### Register the spa app (ciam-msal-angular-spa) + +1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com/) and select the CIAM service. +1. Select the **App Registrations** blade on the left, then select **New registration**. +1. In the **Register an application page** that appears, enter your application's registration information: + 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ciam-msal-angular-spa`. + 1. Under **Supported account types**, select **Accounts in this organizational directory only** + 1. Select **Register** to create the application. +1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. +1. In the app's registration screen, select the **Authentication** blade to the left. +1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. + 1. In the **Redirect URI** section enter the following redirect URI: + 1. `http://localhost:4200` + 1. Click **Save** to save your changes. +1. Since this app signs-in users, we will now proceed to select **delegated permissions**, which is is required by apps signing-in users. + 1. In the app's registration screen, select the **API permissions** blade in the left to open the page where we add access to the APIs that your application needs: + 1. Select the **Add a permission** button and then: + 1. Ensure that the **Microsoft APIs** tab is selected. + 1. In the *Commonly used Microsoft APIs* section, select **Microsoft Graph** + 1. In the **Delegated permissions** section, select **openid**, **offline_access** in the list. Use the search box if necessary. + 1. Select the **Add permissions** button at the bottom. +1. At this stage, the permissions are assigned correctly, but since it's an external tenant, the users themselves cannot consent to these permissions. To get around this problem, we'd let the [tenant administrator consent on behalf of all users in the tenant](https://docs.microsoft.com/azure/active-directory/develop/v2-admin-consent). Select the **Grant admin consent for {tenant}** button, and then select **Yes** when you are asked if you want to grant consent for the requested permissions for all accounts in the tenant. You need to be a tenant admin to be able to carry out this operation. + +##### Configure the spa app (ciam-msal-angular-spa) to use your app registration + +Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. + +> In the steps below, "ClientID" is the same as "Application ID" or "AppId". + +1. Open the `SPA\src\app\auth-config.ts` file. +1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ciam-msal-angular-spa` app copied from the Microsoft Entra admin center. +1. Find the placeholder `Enter_the_Tenant_Subdomain_Here` and replace it with the Directory (tenant) subdomain. For instance, if your tenant primary domain is `contoso.onmicrosoft.com`, use `contoso`. If you don't have your tenant domain name, learn how to [read your tenant details](https://review.learn.microsoft.com/azure/active-directory/external-identities/customers/how-to-create-customer-tenant-portal#get-the-customer-tenant-details). + +### Step 4: Running the sample + +```console + cd 1-Authentication\1-sign-in-angular\SPA + npm start +``` + +## Explore the sample + +1. Open your browser and navigate to `http://localhost:4200`. +1. Select the **Sign-in** button on the top right corner. Once you sign-in, you will see some of the important claims in your ID token. + +![Screenshot](./ReadmeFiles/screenshot.png) + +> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. + +## We'd love your feedback! + +Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR_ivMYEeUKlEq8CxnMPgdNZUNDlUTTk2NVNYQkZSSjdaTk5KT1o4V1VVNS4u). + +## Troubleshooting + +
+ Expand for troubleshooting info + +> * Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. +Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. +Make sure that your questions or comments are tagged with [`azure-active-directory-b2c` `node` `ms-identity` `adal` `msal-js` `msal`]. + +To provide feedback on or suggest features for Microsoft Entra, visit [User Voice page](https://feedback.azure.com/d365community/forum/79b1327d-d925-ec11-b6e6-000d3a4f06a4). +
+ +## About the code + +MSAL Angular is a wrapper around MSAL.js (i.e. *msal-browser*). As such, many of MSAL.js's public APIs are also available to use with MSAL Angular, while MSAL Angular itself offers additional [public APIs](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/public-apis.md). + +### Configuration + +You can initialize your application in several ways, for instance, by loading the configuration parameters from another server. See [Configuration options](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md) for more information. + +In the sample, authentication parameters reside in [auth-config.ts](./SPA/src/app/auth-config.ts). These parameters then are used for initializing MSAL Angular configuration options in [app.module.ts](./SPA/src/app/app.module.ts). + +### Sign-in + +**MSAL Angular** exposes 3 login methods: `loginPopup()`, `loginRedirect()` and `ssoSilent()`. First, setup your default interaction type in [app.module.ts](./SPA/src/app/app.module.ts): + +```typescript +export function MSALGuardConfigFactory(): MsalGuardConfiguration { + return { + interactionType: InteractionType.Redirect, + }; +} +``` + +Then, define a login method in [app.component.ts](./SPA/src/app/app.component.ts) as follows: + +```typescript +export class AppComponent implements OnInit { + + constructor( + @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, + private authService: MsalService, + private msalBroadcastService: MsalBroadcastService + ) {} + + ngOnInit(): void { + + login() { + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + if (this.msalGuardConfig.authRequest) { + this.authService.loginPopup({...this.msalGuardConfig.authRequest} as PopupRequest) + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } else { + this.authService.loginPopup() + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } + } else { + if (this.msalGuardConfig.authRequest) { + this.authService.loginRedirect({...this.msalGuardConfig.authRequest} as RedirectRequest); + } else { + this.authService.loginRedirect(); + } + } + } +} +``` + +If you already have a session that exists with the authentication server, you can use the `ssoSilent()` API to make a request for tokens without interaction. You will need to pass a [loginHint](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso#automatically-select-account-on-azure-ad) in the request object in order to successfully obtain a token silently. + +```typescript +export class AppComponent implements OnInit { + + constructor( + private authService: MsalService, + ) {} + + ngOnInit(): void { + const silentRequest: SsoSilentRequest = { + scopes: ["User.Read"], + loginHint: "user@contoso.com" + } + + this.authService.ssoSilent(silentRequest) + .subscribe({ + next: (result: AuthenticationResult) => { + console.log("SsoSilent succeeded!"); + }, + error: (error) => { + this.authService.loginRedirect(); + } + }); + } +} +``` + +### ID Token Validation + +When you receive an [ID token](https://docs.microsoft.com/azure/active-directory/develop/id-tokens) directly from the IdP on a secure channel (e.g. HTTPS), such is the case with SPAs, there’s no need to validate it. If you were to do it, you would validate it by asking the same server that gave you the ID token to give you the keys needed to validate it, which renders it pointless, as if one is compromised so is the other. + +### Sign-out + +The application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. For more information, see: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request). + +### Securing Routes + +You can add authentication to secure specific routes in your application by just adding `canActivate: [MsalGuard]` to your route definition. It can be added at the parent or child routes. This ensures that the user must be signed-in to access the secured route. + +```typescript + const routes: Routes = [ + { + path: 'guarded', + component: GuardedComponent, + canActivate: [ + MsalGuard + ] + } + ] +``` + +### Events API + +Using the event API, you can register an event callback that will do something when an event is emitted. When registering an event callback in an Angular component you will need to make sure you do 2 things. + +1. The callback is registered only once +2. The callback is unregistered before the component unmounts. + +```typescript +export class HomeComponent implements OnInit { + + private readonly _destroying$ = new Subject(); + + constructor(private authService: MsalService, private msalBroadcastService: MsalBroadcastService) { } + + ngOnInit(): void { + this.msalBroadcastService.msalSubject$ + .pipe( + filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS), + takeUntil(this._destroying$) + ) + .subscribe((result: EventMessage) => { + // do something with the result, such as accessing ID token + }); + } + + ngOnDestroy(): void { + this._destroying$.next(undefined); + this._destroying$.complete(); + } +} +``` + +For more information, see: [Events in MSAL Angular v2](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md). + +### Deploying SPA to Azure Storage + +There is one single-page application in this sample. To deploy it to **Azure Storage**, you'll need to: + +- create an Azure Storage blob and obtain website coordinates +- build your project and upload it to Azure Storage blob +- update config files with website coordinates + +> :information_source: If you would like to use **VS Code Azure Tools** extension for deployment, [watch the tutorial](https://docs.microsoft.com/azure/developer/javascript/tutorial-vscode-static-website-node-01) offered by Microsoft Docs. + +#### Build and upload (ciam-msal-angular-spa) to an Azure Storage blob + +Build your project to get a distributable files folder, where your built `html`, `css` and `javascript` files will be generated. Then follow the steps below: + +> :warning: When uploading, make sure you upload the contents of your distributable files folder and **not** the entire folder itself. + +> :information_source: If you don't have an account already, see: [How to create a storage account](https://docs.microsoft.com/azure/storage/common/storage-account-create). + +1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/). +1. Locate your storage account and display the account overview. +1. Select **Static website** to display the configuration page for static websites. +1. Select **Enabled** to enable static website hosting for the storage account. +1. In the **Index document name** field, specify a default index page (For example: `index.html`). +1. The default **index page** is displayed when a user navigates to the root of your static website. +1. Select **Save**. The Microsoft Entra admin center now displays your static website endpoint. Make a note of the **Primary endpoint field**. +1. In the `ciam-msal-angular-spa` project source code, update your configuration file with the **Primary endpoint field** as your new **Redirect URI** (you will register this URI later). +1. Next, select **Storage Explorer**. +1. Expand the **BLOB CONTAINERS** node, and then select the `$web` container. +1. Choose the **Upload** button to upload files. +1. If you intend for the browser to display the contents of file, make sure that the content type of that file is set to `text/html`. +1. In the pane that appears beside the **account overview page** of your storage account, select **Static Website**. The URL of your site appears in the **Primary endpoint field**. In the next section, you will register this URI. + +#### Update the CIAM app registration for ciam-msal-angular-spa + +1. Navigate back to to the [Microsoft Entra admin center](https://entra.microsoft.com/). +1. In the left-hand navigation pane, select the **Microsoft Entra** service, and then select **App registrations**. +1. In the resulting screen, select `ciam-msal-angular-spa`. +1. In the app's registration screen, select **Authentication** in the menu. + 1. In the **Redirect URIs** section, update the reply URLs to match the site URL of your Azure deployment. For example: + 1. `https://ciam-msal-angular-spa.azurewebsites.net/` + + +## Contributing + +If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +## Learn More + +* [Configure your company branding](https://learn.microsoft.com/entra/fundamentals/how-to-customize-branding) +* [OAuth 2.0 authorization with Microsoft Entra ID](https://learn.microsoft.com/entra/architecture/auth-oauth2) +* [Language customization in Microsoft Entra External ID](https://learn.microsoft.com/entra/external-id/user-flow-customize-language) +* [Building Zero Trust ready apps](https://aka.ms/ztdevsession) +* [Initialize client applications using MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-initializing-client-applications) +* [Single sign-on with MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-sso) +* [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) +* [Logging in MSAL.js applications](https://learn.microsoft.com/entra/identity-platform/msal-logging-js) +* [Pass custom state in authentication requests using MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-pass-custom-state-authentication-request) +* [Prompt behavior in MSAL.js interactive requests](https://learn.microsoft.com/entra/identity-platform/msal-js-prompt-behavior) +* [Use the Microsoft Authentication Library for JavaScript to work with Azure AD B2C](https://learn.microsoft.com/entra/identity-platform/msal-b2c-overview) diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..27add1e25def9119a0fe504eb588eaf1709fcb0f GIT binary patch literal 31735 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%0Ax8^}kJ4@ixd{pW3W*bAL>+0C(E8^?N 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 Qz;)%3oa%!j8KZ#z0b7^-r~m)} literal 0 HcmV?d00001 diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc new file mode 100644 index 0000000..4f9ac26 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore new file mode 100644 index 0000000..0711527 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json new file mode 100644 index 0000000..027f33c --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json @@ -0,0 +1,106 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "1-sign-in-angular": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/1-sign-in-angular", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "1-sign-in-angular:build:production" + }, + "development": { + "buildTarget": "1-sign-in-angular:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "1-sign-in-angular:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.css" + ], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js new file mode 100644 index 0000000..039ebc5 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js @@ -0,0 +1,46 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/1-sign-in-angular'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + browsers: ['Chrome'], + customLaunchers: { + ChromeHeadlessCI: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'] + } + }, + restartOnFileChange: true, + singleRun: true + }); +}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json new file mode 100644 index 0000000..3eddc30 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json @@ -0,0 +1,13548 @@ +{ + "name": "1-sign-in-angular", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "1-sign-in-angular", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^18.0.2", + "@angular/cdk": "^18.0.2", + "@angular/common": "^18.0.2", + "@angular/compiler": "^18.0.2", + "@angular/core": "^18.0.2", + "@angular/forms": "^18.0.2", + "@angular/material": "^18.0.2", + "@angular/platform-browser": "^18.0.2", + "@angular/platform-browser-dynamic": "^18.0.2", + "@angular/router": "^18.0.2", + "@azure/msal-angular": "^3.0.20", + "@azure/msal-browser": "^3.17.0", + "rxjs": "~7.8.1", + "tslib": "^2.6.3", + "zone.js": "~0.14.7" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.0.3", + "@angular/cli": "~18.0.3", + "@angular/compiler-cli": "^18.0.2", + "@types/jasmine": "~5.1.4", + "jasmine-core": "~5.1.2", + "karma": "~6.4.3", + "karma-chrome-launcher": "^3.2.0", + "karma-coverage": "~2.2.1", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.3.tgz", + "integrity": "sha512-4yba7x315GKim7OuBgv89ZtG50hE3hw64KuRLSGuW+RvwcwLV24VanmdWmFiLC4RKYNSH13E0wZqDNJkrMQepw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.1.3", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.1.3.tgz", + "integrity": "sha512-1avnneitUEfC2A9HX24X6a7Ag8sHkxomVEBsggITFNQoGnZAZHCOBRzm3b9QiqTi1c1eH3p8teW8EAufEjFPKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1801.3", + "@angular-devkit/build-webpack": "0.1801.3", + "@angular-devkit/core": "18.1.3", + "@angular/build": "18.1.3", + "@babel/core": "7.24.7", + "@babel/generator": "7.24.7", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.24.7", + "@babel/plugin-transform-async-to-generator": "7.24.7", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.24.7", + "@babel/runtime": "7.24.7", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "18.1.3", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.19", + "babel-loader": "9.1.3", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "12.0.2", + "critters": "0.0.24", + "css-loader": "7.1.2", + "esbuild-wasm": "0.21.5", + "fast-glob": "3.3.2", + "http-proxy-middleware": "3.0.0", + "https-proxy-agent": "7.0.5", + "istanbul-lib-instrument": "6.0.2", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "12.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "magic-string": "0.30.10", + "mini-css-extract-plugin": "2.9.0", + "mrmime": "2.0.0", + "open": "10.1.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "postcss": "8.4.38", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.77.6", + "sass-loader": "14.2.1", + "semver": "7.6.2", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.29.2", + "tree-kill": "1.2.2", + "tslib": "2.6.3", + "undici": "6.19.2", + "vite": "5.3.2", + "watchpack": "2.4.1", + "webpack": "5.92.1", + "webpack-dev-middleware": "7.2.1", + "webpack-dev-server": "5.0.4", + "webpack-merge": "5.10.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.21.5" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^18.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1801.3.tgz", + "integrity": "sha512-JezRR72P4QAc4mnkT60/+kVANCYNKcr2sZyX0/9aBHJsR7lIqgOKz5Dft3FgWHwAJcQFtsZ7OLGVOW3P1LpFkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1801.3", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/core": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.3.tgz", + "integrity": "sha512-S0UzNNVLbHPaiSVXHjCd2wX+eERj/YR7jJCc40PHs1gINA7Gtd2q3VDm3bUEWe4P6fP6GNp43qSXmWJFQD0+Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.16.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.7.tgz", + "integrity": "sha512-U0lYPjhOaxdw+0UwVsv5y+wJdZ6DD+0ASiommB7j9kEmrPp53MhSvYNYWvwbIWwJceDa3eNq3fAmQOlVXvFCVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.0.7", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.10", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", + "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.13.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/animations": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.1.3.tgz", + "integrity": "sha512-jF4jGHZxV/REnymB11wg5q/DMXewJ0byihmvNQ3OPLHGkWnvE9MdrX44vUzI7RkzqO0suaAg8shxJlkY3OHjeA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.1.3" + } + }, + "node_modules/@angular/build": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.1.3.tgz", + "integrity": "sha512-jmTQC7lecJ6c2mJobb5nY2CN6jvdeFFHXN/jif0RkNI8dP60uV1QdMKJtTGbxEtAKXdMgOTReYICVYl6m9Q56Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1801.3", + "@babel/core": "7.24.7", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.24.7", + "@inquirer/confirm": "3.1.11", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "browserslist": "^4.23.0", + "critters": "0.0.24", + "esbuild": "0.21.5", + "fast-glob": "3.3.2", + "https-proxy-agent": "7.0.5", + "lmdb": "3.0.12", + "magic-string": "0.30.10", + "mrmime": "2.0.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "rollup": "4.18.0", + "sass": "1.77.6", + "semver": "7.6.2", + "undici": "6.19.2", + "vite": "5.3.2", + "watchpack": "2.4.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "less": "^4.2.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/cdk": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.3.tgz", + "integrity": "sha512-u14xbuXQz+36nBeHSwRcwRoS64WNhOdK97H47nI1WaIZZaGGvKHR1Wwk2XletDRtIHv2622sJm8h+dbaBNeTGQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^18.0.0 || ^19.0.0", + "@angular/core": "^18.0.0 || ^19.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.0.7.tgz", + "integrity": "sha512-CHnpI6d6MpXFsx3750jN4IX3oeieIMKzUPVZUMvPgDbhGFfChHKdxdJStDjYsH47pORb2pMHULw0RJCAPvtB9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1800.7", + "@angular-devkit/core": "18.0.7", + "@angular-devkit/schematics": "18.0.7", + "@schematics/angular": "18.0.7", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.2", + "inquirer": "9.2.22", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.2", + "npm-pick-manifest": "9.0.1", + "ora": "5.4.1", + "pacote": "18.0.6", + "resolve": "1.22.8", + "semver": "7.6.2", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1800.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.7.tgz", + "integrity": "sha512-ZYIjdngUOjY6G2XJGHtATLr+HhJWdo7Z3ATlzQTGI9D1a02kW3UFlELQBhFIn+1o78FU6W0STZgyfBH8M7wD2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.0.7", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", + "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.13.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/cli/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular/cli/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/common": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.1.3.tgz", + "integrity": "sha512-TC71jVph4L+QaXlyJTrW27nbqis4sWwr9hD/RDSNkfY9XCvYDb2MjYjKrpbN03FWiv7lmcKT9zgse1fYENFsKQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.1.3.tgz", + "integrity": "sha512-Mrcd+YGsz02GVnVlVbzYp7EJIVoPOIHMvhll1OiylhjQElNVeJCLPIvjVYdylzOUDctXNlchkGf/LbA7BYMbXg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.1.3" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.1.3.tgz", + "integrity": "sha512-e9t5v/L1KqPLUQL+WU+d70MBBFcSRuwqbkluZgdDjdW5VelYjzlVzXdrzV6jFElP48T3kQCxJN1dAJkAvKjdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.24.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "18.1.3", + "typescript": ">=5.4 <5.6" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/core": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.1.3.tgz", + "integrity": "sha512-1tFTyGLwio5oYAP2sMVDiOvy5wl/v0a4om7RTCpP2Bjro0ynuYe8FK7ilcmdyPXR1DF7GVdo/0R/eCIQJZ2PwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.0" + } + }, + "node_modules/@angular/forms": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.1.3.tgz", + "integrity": "sha512-4kic/9hpS0HkbTORIkrdox7K40EcVT9VIbBruPoxX7jbfiW5jFaJ/05hLRvRt9RF8Sd9G+g5Uohmkcq/5hmsng==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.1.3", + "@angular/core": "18.1.3", + "@angular/platform-browser": "18.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.1.3.tgz", + "integrity": "sha512-4xsn84orqtJwE9c2kgHeMxP/rOEvs8XrUOcyA89WE025uDXk69lAsm7XsCpwOL9iDjTBFPTOXFIbR+s9jvU39w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^18.0.0 || ^19.0.0", + "@angular/cdk": "18.1.3", + "@angular/common": "^18.0.0 || ^19.0.0", + "@angular/core": "^18.0.0 || ^19.0.0", + "@angular/forms": "^18.0.0 || ^19.0.0", + "@angular/platform-browser": "^18.0.0 || ^19.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.3.tgz", + "integrity": "sha512-/k5Xt/WjOk6OlRqb1Wd0ZUQ3NjSbafQyDC9Icy0Mb8qJtiXZjA4VCMkZIiQD7cBxO0F/BsAiYnYNjWrIkCZICA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "18.1.3", + "@angular/common": "18.1.3", + "@angular/core": "18.1.3" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.1.3.tgz", + "integrity": "sha512-VhYfyPcdKrsLrkd5Lq7W+pqE49DZBpUeCqM/Q+s9rhTSiCCKe9Ikktq8yPZ9iHDpFr203P+T1EMHmILnLvf+gQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.1.3", + "@angular/compiler": "18.1.3", + "@angular/core": "18.1.3", + "@angular/platform-browser": "18.1.3" + } + }, + "node_modules/@angular/router": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.1.3.tgz", + "integrity": "sha512-6fXiTgdUnaGGF32Un4+7LttG1N9rziansigvLBzFG//qYU0Ihk49phqDdWxz11iaJ+uK1YVafkjSFvV7z9cgDA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.1.3", + "@angular/core": "18.1.3", + "@angular/platform-browser": "18.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@azure/msal-angular": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@azure/msal-angular/-/msal-angular-3.0.23.tgz", + "integrity": "sha512-RTJSDCVFNVs7SNQC9wlKE8xoYzPiNoCatTlCI8m3pOd1AtWdDAwj2LI6NkrK5zZ/GCHgFUVSc3GO2pTQS5I+JA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@azure/msal-browser": "^3.20.0", + "rxjs": "^7.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.20.0.tgz", + "integrity": "sha512-ErsxbfCGIwdqD8jipqdxpfAGiUEQS7MWUe39Rjhl0ZVPsb1JEe9bZCe2+0g23HDH6DGyCAtnTNN9scPtievrMQ==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.14.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.14.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.0.tgz", + "integrity": "sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@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, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz", + "integrity": "sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^8.2.4", + "@inquirer/type": "^1.3.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.4.tgz", + "integrity": "sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.3", + "@inquirer/type": "^1.3.3", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.9", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "picocolors": "^1.0.1", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", + "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", + "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.12.tgz", + "integrity": "sha512-vgTwzNUD3Hy4aqtGhX2+nV/usI0mwy3hDRuTjs8VcK0BLiMVEpNQXgzwlWEgPmA8AAPloUgyOs2nK5clJF5oIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.12.tgz", + "integrity": "sha512-qOt0hAhj2ZLY6aEWu85rzt5zcyCAQITMhCMEPNlo1tuYekpVAdkQNiwXxEkCjBYvwTskvXuwXOOUpjuSc+aJnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.12.tgz", + "integrity": "sha512-Ggd/UXpE+alMncbELCXA3OKpDj9bDBR3qVO7WRTxstloDglRAHfZmUJgTkeaNKjFO1JHqS7AKy0jba9XebZB1w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.12.tgz", + "integrity": "sha512-Qy4cFXFe9h1wAWMsojex8x1ifvw2kqiZv686YiRTdQEzAfc3vJASHFcD/QejHUCx7YHMYdnUoCS45rG2AiGDTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.12.tgz", + "integrity": "sha512-c+noT9IofktxktFllKHFmci8ka2SYGSLN17pj/KSl1hg7mmfAiGp4xxFxEwMLTb+SX95vP1DFiR++1I3WLVxvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.12.tgz", + "integrity": "sha512-CO3MFV8gUx16NU/CyyuumAKblESwvoGVA2XhQKZ976OTOxaTbb8F8D3f0iiZ4MYqsN74jIrFuCmXpPnpjbhfOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ngtools/webpack": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.3.tgz", + "integrity": "sha512-VmqOO8CcXKL06anNYlL0OkrqIuBNZQu5n0YVP4z8oneJhDBqwK2++dK0WpcNyIFcg3HsQ7w3BuqUWJ4iPiWxEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "typescript": ">=5.4 <5.6", + "webpack": "^5.54.0" + } + }, + "node_modules/@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, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.0.7.tgz", + "integrity": "sha512-46jcRDnMYfnwN5CAXimbptbrBdLrNhG3NFGNT1B2O9DzmlXwLclK/z7lz/v70RcBNWMnOcnsYMFB4IbLhN/Fog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.0.7", + "@angular-devkit/schematics": "18.0.7", + "jsonc-parser": "3.2.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", + "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.13.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@schematics/angular/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.14.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", + "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@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, + "license": "BSD-3-Clause" + }, + "node_modules/@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, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001650", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001650.tgz", + "integrity": "sha512-fgEc7hP/LB7iicdXHUI9VsBsMZmUmlVJeQP2qqQW+3lkqVhbmjEU8zp+h5stWeilX+G7uXuIUIIlWlDw9jdt8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT" + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/critters": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", + "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT" + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz", + "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==", + "dev": true, + "license": "ISC" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.21.5.tgz", + "integrity": "sha512-L/FlOPMMFtw+6qPAbuPvJXdrOYOp9yx/PEwSrIZW0qghY4vgV003evdYDwqQ/9ENMQI0B6RMod9xT4FHtto6OQ==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/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, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/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, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/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, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.22", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.22.tgz", + "integrity": "sha512-SqLLa/Oe5rZUagTR9z+Zd6izyatHglbmbvVofo1KzuVB54YHleWzeHNLoR7FOICGOeQSqeLh1cordb3MzhGcEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.2", + "@ljharb/through": "^2.3.13", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", + "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/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, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT" + }, + "node_modules/karma/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/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, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", + "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/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, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lmdb": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.12.tgz", + "integrity": "sha512-JnoEulTgveoC64vlYJ9sufGLuNkk6TcxSYpKxSC9aM42I61jIv3pQH0fgb6qW7HV0+FNqA3g1WCQQYfhfawGoQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.10.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.0.12", + "@lmdb/lmdb-darwin-x64": "3.0.12", + "@lmdb/lmdb-linux-arm": "3.0.12", + "@lmdb/lmdb-linux-arm64": "3.0.12", + "@lmdb/lmdb-linux-x64": "3.0.12", + "@lmdb/lmdb-win32-x64": "3.0.12" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", + "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/nice-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", + "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT" + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ordered-binary": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", + "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/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, + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", + "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", + "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", + "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/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, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", + "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.2.tgz", + "integrity": "sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz", + "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "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.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/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, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/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, + "license": "MIT" + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/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, + "license": "MIT" + }, + "node_modules/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, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", + "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", + "license": "MIT" + } + } +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json new file mode 100644 index 0000000..8f74dd6 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json @@ -0,0 +1,43 @@ +{ + "name": "1-sign-in-angular", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test --watch=false --no-progress --browsers=ChromeHeadlessCI", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^18.0.2", + "@angular/cdk": "^18.0.2", + "@angular/common": "^18.0.2", + "@angular/compiler": "^18.0.2", + "@angular/core": "^18.0.2", + "@angular/forms": "^18.0.2", + "@angular/material": "^18.0.2", + "@angular/platform-browser": "^18.0.2", + "@angular/platform-browser-dynamic": "^18.0.2", + "@angular/router": "^18.0.2", + "@azure/msal-angular": "^3.0.20", + "@azure/msal-browser": "^3.17.0", + "rxjs": "~7.8.1", + "tslib": "^2.6.3", + "zone.js": "~0.14.7" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.0.3", + "@angular/cli": "~18.0.3", + "@angular/compiler-cli": "^18.0.2", + "@types/jasmine": "~5.1.4", + "jasmine-core": "~5.1.2", + "karma": "~6.4.3", + "karma-chrome-launcher": "^3.2.0", + "karma-coverage": "~2.2.1", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.5" + } +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts new file mode 100644 index 0000000..dcd054b --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts @@ -0,0 +1,40 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { BrowserUtils } from '@azure/msal-browser'; +import { MsalGuard } from '@azure/msal-angular'; + +import { HomeComponent } from './home/home.component'; +import { GuardedComponent } from './guarded/guarded.component'; + +/** + * MSAL Angular can protect routes in your application + * using MsalGuard. For more info, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/initialization.md#secure-the-routes-in-your-application + */ +const routes: Routes = [ + { + path: 'guarded', + component: GuardedComponent, + canActivate: [ + MsalGuard + ] + }, + { + path: '', + component: HomeComponent, + }, +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { + // Don't perform initial navigation in iframes or popups + initialNavigation: + !BrowserUtils.isInIframe() && !BrowserUtils.isInPopup() + ? 'enabledNonBlocking' + : 'disabled', // Set to enabledBlocking to use Angular Universal + }), + ], + exports: [RouterModule], +}) +export class AppRoutingModule { } diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css new file mode 100644 index 0000000..ecdc1e2 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css @@ -0,0 +1,22 @@ +.toolbar-spacer { + flex: 1 1 auto; +} + +a.title { + color: white; +} + +footer { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + color: white; + text-align: center; +} + +.footer-text { + font-size: small; + text-align: center; + flex: 1 1 auto; +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html new file mode 100644 index 0000000..535543e --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html @@ -0,0 +1,19 @@ + + {{ title }} +
+ Guarded Component + + +
+
+ + +
+ diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts new file mode 100644 index 0000000..6322cd5 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts @@ -0,0 +1,148 @@ +import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; +import { + MsalService, + MsalBroadcastService, + MSAL_GUARD_CONFIG, + MsalGuardConfiguration, +} from '@azure/msal-angular'; +import { + AuthenticationResult, + InteractionStatus, + InteractionType, + PopupRequest, + RedirectRequest, + EventMessage, + EventType +} from '@azure/msal-browser'; +import { Subject } from 'rxjs'; +import { filter, takeUntil } from 'rxjs/operators'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'], +}) +export class AppComponent implements OnInit, OnDestroy { + title = 'Microsoft identity platform'; + loginDisplay = false; + isIframe = false; + + private readonly _destroying$ = new Subject(); + + constructor( + @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, + private authService: MsalService, + private msalBroadcastService: MsalBroadcastService, + ) { } + + ngOnInit(): void { + this.isIframe = window !== window.parent && !window.opener; + this.setLoginDisplay(); + this.authService.instance.enableAccountStorageEvents(); // Optional - This will enable ACCOUNT_ADDED and ACCOUNT_REMOVED events emitted when a user logs in or out of another tab or window + + /** + * You can subscribe to MSAL events as shown below. For more info, + * visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md + */ + this.msalBroadcastService.inProgress$ + .pipe( + filter( + (status: InteractionStatus) => status === InteractionStatus.None + ), + takeUntil(this._destroying$) + ) + .subscribe(() => { + this.setLoginDisplay(); + this.checkAndSetActiveAccount(); + }); + + this.msalBroadcastService.msalSubject$ + .pipe( + filter( + (msg: EventMessage) => msg.eventType === EventType.LOGOUT_SUCCESS + ), + takeUntil(this._destroying$) + ) + .subscribe((result: EventMessage) => { + this.setLoginDisplay(); + this.checkAndSetActiveAccount(); + }); + + + this.msalBroadcastService.msalSubject$ + .pipe( + filter( + (msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS + ), + takeUntil(this._destroying$) + ) + .subscribe((result: EventMessage) => { + const payload = result.payload as AuthenticationResult; + this.authService.instance.setActiveAccount(payload.account); + }); + } + + setLoginDisplay() { + this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; + } + + checkAndSetActiveAccount() { + /** + * If no active account set but there are accounts signed in, sets first account to active account + * To use active account set here, subscribe to inProgress$ first in your component + * Note: Basic usage demonstrated. Your app may require more complicated account selection logic + */ + let activeAccount = this.authService.instance.getActiveAccount(); + + if (!activeAccount && this.authService.instance.getAllAccounts().length > 0) { + let accounts = this.authService.instance.getAllAccounts(); + // add your code for handling multiple accounts here + this.authService.instance.setActiveAccount(accounts[0]); + } + } + + login() { + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + if (this.msalGuardConfig.authRequest) { + this.authService.loginPopup({ + ...this.msalGuardConfig.authRequest, + } as PopupRequest) + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } else { + this.authService.loginPopup() + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } + } else { + if (this.msalGuardConfig.authRequest) { + this.authService.loginRedirect({ + ...this.msalGuardConfig.authRequest, + } as RedirectRequest); + } else { + this.authService.loginRedirect(); + } + } + } + + logout() { + + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + this.authService.logoutPopup({ + account: this.authService.instance.getActiveAccount(), + }); + } else { + this.authService.logoutRedirect({ + account: this.authService.instance.getActiveAccount(), + }); + } + } + + // unsubscribe to events when component is destroyed + ngOnDestroy(): void { + this._destroying$.next(undefined); + this._destroying$.complete(); + } +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts new file mode 100644 index 0000000..799ca2e --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts @@ -0,0 +1,99 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; + +import { MatToolbarModule } from "@angular/material/toolbar"; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatTableModule } from '@angular/material/table'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatDialogModule } from '@angular/material/dialog'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MatIconModule } from '@angular/material/icon'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { HomeComponent } from './home/home.component'; +import { GuardedComponent } from './guarded/guarded.component'; + +import { + IPublicClientApplication, + PublicClientApplication, + InteractionType, +} from '@azure/msal-browser'; + +import { + MSAL_INSTANCE, + MsalGuardConfiguration, + MSAL_GUARD_CONFIG, + MsalService, + MsalBroadcastService, + MsalGuard, + MsalRedirectComponent, + MsalInterceptor, + MsalModule, +} from '@azure/msal-angular'; + +import { msalConfig, loginRequest } from './auth-config'; + +/** + * Here we pass the configuration parameters to create an MSAL instance. + * For more info, visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md + */ +export function MSALInstanceFactory(): IPublicClientApplication { + return new PublicClientApplication(msalConfig); +} + +/** + * Set your default interaction type for MSALGuard here. If you have any + * additional scopes you want the user to consent upon login, add them here as well. + */ +export function MsalGuardConfigurationFactory(): MsalGuardConfiguration { + return { + interactionType: InteractionType.Redirect, + authRequest: loginRequest + }; +} + +@NgModule({ + declarations: [ + AppComponent, + HomeComponent, + GuardedComponent, + ], + imports: [ + BrowserModule, + BrowserAnimationsModule, + AppRoutingModule, + MatToolbarModule, + MatButtonModule, + MatCardModule, + MatTableModule, + MatMenuModule, + HttpClientModule, + BrowserAnimationsModule, + MatDialogModule, + MatIconModule, + MsalModule, + ], + providers: [ + { + provide: HTTP_INTERCEPTORS, + useClass: MsalInterceptor, + multi: true, + }, + { + provide: MSAL_INSTANCE, + useFactory: MSALInstanceFactory, + }, + { + provide: MSAL_GUARD_CONFIG, + useFactory: MsalGuardConfigurationFactory, + }, + MsalService, + MsalBroadcastService, + MsalGuard, + ], + bootstrap: [AppComponent, MsalRedirectComponent], +}) +export class AppModule { } diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts new file mode 100644 index 0000000..33d5ebc --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts @@ -0,0 +1,48 @@ +/** + * This file contains authentication parameters. Contents of this file + * is roughly the same across other MSAL.js libraries. These parameters + * are used to initialize Angular and MSAL Angular configurations in + * in app.module.ts file. + */ + +import { + LogLevel, + Configuration, + BrowserCacheLocation, +} from '@azure/msal-browser'; + +/** + * Configuration object to be passed to MSAL instance on creation. + * For a full list of MSAL.js configuration parameters, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md + */ +export const msalConfig: Configuration = { + auth: { + clientId: 'd40f3188-3369-4f79-94b9-f1504a0e4c5b', // This is the ONLY mandatory field that you need to supply. + authority: 'https://justrebldemo.ciamlogin.com/', // Replace the placeholder with your tenant subdomain + redirectUri: '/', // Points to window.location.origin by default. You must register this URI on Microsoft Entra admin center/App Registration. + postLogoutRedirectUri: '/', // Points to window.location.origin by default. + }, + cache: { + cacheLocation: BrowserCacheLocation.LocalStorage, // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO between tabs. + }, + system: { + loggerOptions: { + loggerCallback(logLevel: LogLevel, message: string) { + console.log(message); + }, + logLevel: LogLevel.Verbose, + piiLoggingEnabled: false, + }, + }, +}; + +/** + * Scopes you add here will be prompted for user consent during sign-in. + * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. + * For more information about OIDC scopes, visit: + * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes + */ +export const loginRequest = { + scopes: [], +}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts new file mode 100644 index 0000000..3d1c2fd --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts @@ -0,0 +1,194 @@ +/** + * Populate claims table with appropriate description + * @param {Record} claims ID token claims + * @returns claimsTable + */ +export const createClaimsTable = (claims: Record): any[] => { + const claimsTable: any[] = []; + + Object.keys(claims).map((key) => { + switch (key) { + case 'aud': + populateClaim( + key, + claims[key], + "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Microsoft Entra admin center.", + claimsTable + ); + break; + case 'iss': + populateClaim( + key, + claims[key], + 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the external tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0.', + claimsTable + ); + break; + case 'iat': + populateClaim( + key, + changeDateFormat(+claims[key]), + '"Issued At" indicates the timestamp (UNIX timestamp) when the authentication for this user occurred.', + claimsTable + ); + break; + case 'nbf': + populateClaim( + key, + changeDateFormat(+claims[key]), + 'The nbf (not before) claim dictates the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', + claimsTable + ); + break; + case 'exp': + populateClaim( + key, + changeDateFormat(+claims[key]), + "The exp (expiration time) claim dictates the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", + claimsTable + ); + break; + case 'name': + populateClaim( + key, + claims[key], + "The name claim provides a human-readable value that identifies the subject of the token. The value isn't guaranteed to be unique, it can be changed, and it's designed to be used only for display purposes. The 'profile' scope is required to receive this claim.", + claimsTable + ); + break; + case 'preferred_username': + populateClaim( + key, + claims[key], + 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', + claimsTable + ); + break; + case 'nonce': + populateClaim( + key, + claims[key], + 'The nonce matches the parameter included in the original /authorize request to the IDP.', + claimsTable + ); + break; + case 'oid': + populateClaim( + key, + claims[key], + 'The oid (user object id) is the only claim that should be used to uniquely identify a user in an external tenant.', + claimsTable + ); + break; + case 'tid': + populateClaim( + key, + claims[key], + 'The id of the tenant where this application resides. You can use this claim to ensure that only users from the current external tenant can access this app.', + claimsTable + ); + break; + case 'upn': + populateClaim( + key, + claims[key], + 'upn (user principal name) might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', + claimsTable + ); + break; + case 'email': + populateClaim( + key, + claims[key], + 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', + claimsTable + ); + break; + case 'acct': + populateClaim( + key, + claims[key], + 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', + claimsTable + ); + break; + case 'sid': + populateClaim( + key, + claims[key], + 'Session ID, used for per-session user sign-out.', + claimsTable + ); + break; + case 'sub': + populateClaim( + key, + claims[key], + 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', + claimsTable + ); + break; + case 'ver': + populateClaim( + key, + claims[key], + 'Version of the token issued by the Microsoft identity platform', + claimsTable + ); + break; + case 'login_hint': + populateClaim( + key, + claims[key], + 'An opaque, reliable login hint claim. This claim is the best value to use for the login_hint OAuth parameter in all flows to get SSO.', + claimsTable + ); + break; + case 'idtyp': + populateClaim( + key, + claims[key], + 'Value is app when the token is an app-only token. This is the most accurate way for an API to determine if a token is an app token or an app+user token', + claimsTable + ); + break; + case 'uti': + case 'rh': + break; + default: + populateClaim(key, claims[key], '', claimsTable); + } + }); + + return claimsTable; +}; + +/** + * Populates claim, description, and value into an claimsObject + * @param {String} claim + * @param {String} value + * @param {String} description + * @param {Array} claimsObject + */ +const populateClaim = ( + claim: string, + value: string, + description: string, + claimsTable: any[] +): void => { + claimsTable.push({ + claim: claim, + value: value, + description: description, + }); +}; + +/** + * Transforms Unix timestamp to date and returns a string value of that date + * @param {number} date Unix timestamp + * @returns + */ +const changeDateFormat = (date: number) => { + let dateObj = new Date(date * 1000); + return `${date} - [${dateObj.toString()}]`; +}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html new file mode 100644 index 0000000..6a5e109 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html @@ -0,0 +1 @@ +

This component is guarded. You can see this because you're signed-in.

diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts new file mode 100644 index 0000000..90e9903 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-guarded', + templateUrl: './guarded.component.html', + styleUrls: ['./guarded.component.css'] +}) +export class GuardedComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css new file mode 100644 index 0000000..8f48484 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css @@ -0,0 +1,26 @@ +#table-container { + height: '100vh'; + overflow: auto; +} + +table { + margin: 3% auto 1% auto; + width: 70%; +} + +.mat-row { + height: auto; +} + +.mat-cell { + padding: 8px 8px 8px 0; +} + +p { + text-align: center; +} + +.card-section { + margin: 10%; + padding: 5%; +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html new file mode 100644 index 0000000..fe23f91 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html @@ -0,0 +1,34 @@ + + Angular single-page application built with MSAL Angular + Sign-in with Microsoft Entra External ID + This sample demonstrates how to configure MSAL Angular to sign-up, sign-in and sign-out with Microsoft Entra External ID + + +
+

See below the claims in your ID token . For more + information, visit: + + docs.microsoft.com + +

+
+
ApplicationAppIdUrl in the Microsoft Entra admin center
+ + + + + + + + + + + + + + + + + +
Claim {{element.claim}} Value {{element.value}} Description {{element.description}}
+ diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts new file mode 100644 index 0000000..dcde911 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts @@ -0,0 +1,77 @@ +import { Component, Inject, OnInit } from '@angular/core'; +import { Subject } from 'rxjs'; +import { filter } from 'rxjs/operators'; + +import { MsalBroadcastService, MsalGuardConfiguration, MsalService, MSAL_GUARD_CONFIG } from '@azure/msal-angular'; +import { AuthenticationResult, InteractionStatus, InteractionType } from '@azure/msal-browser'; + +import { createClaimsTable } from '../claim-utils'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.css'], +}) +export class HomeComponent implements OnInit { + loginDisplay = false; + dataSource: any = []; + displayedColumns: string[] = ['claim', 'value', 'description']; + + private readonly _destroying$ = new Subject(); + + constructor( + @Inject(MSAL_GUARD_CONFIG) + private msalGuardConfig: MsalGuardConfiguration, + private authService: MsalService, + private msalBroadcastService: MsalBroadcastService + ) { } + + ngOnInit(): void { + + this.msalBroadcastService.inProgress$ + .pipe( + filter((status: InteractionStatus) => status === InteractionStatus.None) + ) + .subscribe(() => { + this.setLoginDisplay(); + this.getClaims( + this.authService.instance.getActiveAccount()?.idTokenClaims + ); + }); + } + + setLoginDisplay() { + this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; + } + + getClaims(claims: any) { + if (claims) { + const claimsTable = createClaimsTable(claims); + this.dataSource = [...claimsTable]; + } + } + + signUp() { + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + this.authService.loginPopup({ + scopes: [], + prompt: 'create', + }) + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } else { + this.authService.loginRedirect({ + scopes: [], + prompt: 'create', + }); + } + + } + + // unsubscribe to events when component is destroyed + ngOnDestroy(): void { + this._destroying$.next(undefined); + this._destroying$.complete(); + } +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts new file mode 100644 index 0000000..281c0a7 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts @@ -0,0 +1,108 @@ +import { Router, RouterModule } from '@angular/router'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MSAL_GUARD_CONFIG, MsalGuardConfiguration } from '@azure/msal-angular'; +import { InteractionType } from '@azure/msal-browser'; + +import { msalConfig } from './auth-config'; +import { AppComponent } from './app.component'; +import { AppModule } from './app.module'; + +describe('Sanitize the configuration object', () => { + + it('should define the config object', () => { + expect(msalConfig).toBeDefined(); + expect(msalConfig.auth.clientId).toBeDefined(); + expect(msalConfig.auth.authority).toBeDefined(); + expect(msalConfig.auth.redirectUri).toBeDefined(); + }); + + it('should not contain client id', () => { + const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + expect(regexGuid.test(msalConfig.auth.clientId)).toBe(false); + }); + + it('should not contain tenant id', () => { + const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + expect(regexGuid.test(msalConfig.auth.authority!.split(".com/")[1])).toBe(false); + }); +}); + +describe('Ensure that the app starts', () => { + it('should boot the app', () => { + const bootApplication = () => { + const { router, run } = setup(); + + run(() => router.initialNavigation()); + }; + + expect(bootApplication).not.toThrow(); + }); + + it(`should have as title 'Microsoft identity platform'`, async () => { + const { fixture } = setup(); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('Microsoft identity platform'); + }); + + it('should navigate to unguarded route', async () => { + const { router, run } = setup(); + + const canNavigate = await run(() => router.navigateByUrl('/')); + + expect(canNavigate).toBe(true); + }); + + it('should not navigate to guarded component', async () => { + const { router, run } = setup(); + + const canNavigate = await run(() => router.navigateByUrl('/guarded')); + + expect(canNavigate).toBe(false); + }); +}); + +function setup() { + + function MSALGuardConfigFactory(): MsalGuardConfiguration { + return { + interactionType: InteractionType.Redirect, + }; + } + + TestBed.configureTestingModule({ + imports: [ + AppModule, + RouterModule.forRoot([]), + ], + providers: [ + { + provide: MSAL_GUARD_CONFIG, + useFactory: MSALGuardConfigFactory + } + ] + }).compileComponents(); + + let rootFixture: ComponentFixture; + const initializeRootFixture = () => { + if (rootFixture == null) { + rootFixture = TestBed.createComponent(AppComponent); + } + }; + + return { + get router() { + initializeRootFixture(); + + return TestBed.inject(Router); + }, + run(task: () => TResult) { + initializeRootFixture(); + + return rootFixture.ngZone == null + ? task() + : rootFixture.ngZone.run(task); + }, + fixture: TestBed.createComponent(AppComponent) + }; +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts new file mode 100644 index 0000000..f56ff47 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg new file mode 100644 index 0000000..1284553 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + Icon-identity-221 + + + + + + + + diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html new file mode 100644 index 0000000..2ca15fa --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html @@ -0,0 +1,17 @@ + + + + + Microsoft identity platform + + + + + + + + + + + + diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts new file mode 100644 index 0000000..429bb9e --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts @@ -0,0 +1,53 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css new file mode 100644 index 0000000..de5d5b9 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css @@ -0,0 +1,3 @@ +@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts new file mode 100644 index 0000000..064ebac --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts @@ -0,0 +1,21 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json new file mode 100644 index 0000000..dbf360d --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json @@ -0,0 +1,32 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2022", + "module": "es2022", + "lib": [ + "es2020", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} From 7a29c6435ae2ac173ee678d073cd6e575845549d Mon Sep 17 00:00:00 2001 From: Justrebl Date: Tue, 17 Dec 2024 15:07:38 +0000 Subject: [PATCH 02/11] Wip : SSSU --- .devcontainer/devcontainer.json | 42 ++- .../SSSU_DomainValidation_AzTable-/.gitignore | 354 ++++++++++++++++++ .../.vscode/extensions.json | 6 + .../.vscode/launch.json | 11 + .../.vscode/settings.json | 7 + .../.vscode/tasks.json | 69 ++++ .../CODE_OF_CONDUCT.md | 9 + .../SSSU_DomainValidation_AzTable-/LICENSE | 21 ++ .../SSSU_DomainValidation_AzTable-/README.md | 137 +++++++ .../ResponseContent.cs | 44 +++ .../SECURITY.md | 41 ++ .../SignUpValidation.cs | 115 ++++++ .../csharp.csproj | 18 + .../SSSU_DomainValidation_AzTable-/host.json | 11 + .../media/api-connector-configuration.png | Bin 0 -> 106862 bytes .../media/api-connector-selected.png | Bin 0 -> 83552 bytes .../media/create-function-app-project.png | Bin 0 -> 13569 bytes 17 files changed, 875 insertions(+), 10 deletions(-) create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/.gitignore create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/extensions.json create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/launch.json create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/settings.json create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/tasks.json create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/CODE_OF_CONDUCT.md create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/LICENSE create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/README.md create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/ResponseContent.cs create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/SECURITY.md create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/SignUpValidation.cs create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/csharp.csproj create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/host.json create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-configuration.png create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-selected.png create mode 100644 src/sssu_sample/SSSU_DomainValidation_AzTable-/media/create-function-app-project.png diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 09b9142..19ab0c3 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,15 +6,30 @@ "image": "mcr.microsoft.com/devcontainers/dotnet:1-8.0-bookworm", // Features to add to the dev container. More info: https://containers.dev/features. - // "features": {}, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [5000, 5001], - // "portsAttributes": { - // "5001": { - // "protocol": "https" - // } - // } + "features": { + //Az CLI install + "azure-cli": { + "version": "latest" + }, + //Terraform + tflint install + "ghcr.io/devcontainers/features/terraform:latest": { + "version": "latest", + "tflint": "latest" + }, + // Azure Function Core tools + Visual Studio Extension install + "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {}, + // Node JS : + "ghcr.io/devcontainers/features/node:1": { + "version": "lts", + "nvmVersion": "latest" + } + }, + "forwardPorts": [ + 7071, + 10000, + 10001, + 10002 + ], // Use 'postCreateCommand' to run commands after the container is created. // "postCreateCommand": "dotnet restore", @@ -23,6 +38,13 @@ "customizations": { "vscode": { "extensions": [ + // Azurite : Storage Account Emulator for local Azure Function Debug + "azurite.azurite", + "humao.rest-client", + // Terraform + "hashicorp.terraform", + + // Language Specifics "ms-dotnettools.csharp", "ms-dotnettools.vscodeintellicode-csharp", "ms-dotnettools.csdevkit", @@ -34,5 +56,5 @@ }, // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "root" + "remoteUser": "root" } \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.gitignore b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.gitignore new file mode 100644 index 0000000..615324a --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.gitignore @@ -0,0 +1,354 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates +*.ds_store + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Local settings +local.settings.json \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/extensions.json b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/extensions.json new file mode 100644 index 0000000..de991f4 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "ms-azuretools.vscode-azurefunctions", + "ms-dotnettools.csharp" + ] +} diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/launch.json b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/launch.json new file mode 100644 index 0000000..894cbe6 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to .NET Functions", + "type": "coreclr", + "request": "attach", + "processId": "${command:azureFunctions.pickProcess}" + } + ] +} \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/settings.json b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/settings.json new file mode 100644 index 0000000..9977b0e --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "azureFunctions.deploySubpath": "bin/Release/netcoreapp3.1/publish", + "azureFunctions.projectLanguage": "C#", + "azureFunctions.projectRuntime": "~3", + "debug.internalConsoleOptions": "neverOpen", + "azureFunctions.preDeployTask": "publish" +} \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/tasks.json b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/tasks.json new file mode 100644 index 0000000..5b873bd --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/tasks.json @@ -0,0 +1,69 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "clean", + "command": "dotnet", + "args": [ + "clean", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "type": "process", + "problemMatcher": "$msCompile" + }, + { + "label": "build", + "command": "dotnet", + "args": [ + "build", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "type": "process", + "dependsOn": "clean", + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": "$msCompile" + }, + { + "label": "clean release", + "command": "dotnet", + "args": [ + "clean", + "--configuration", + "Release", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "type": "process", + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "args": [ + "publish", + "--configuration", + "Release", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "type": "process", + "dependsOn": "clean release", + "problemMatcher": "$msCompile" + }, + { + "type": "func", + "dependsOn": "build", + "options": { + "cwd": "${workspaceFolder}/bin/Debug/netcoreapp3.1" + }, + "command": "host start", + "isBackground": true, + "problemMatcher": "$func-watch" + } + ] +} \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/CODE_OF_CONDUCT.md b/src/sssu_sample/SSSU_DomainValidation_AzTable-/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f9ba8cf --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/CODE_OF_CONDUCT.md @@ -0,0 +1,9 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/LICENSE b/src/sssu_sample/SSSU_DomainValidation_AzTable-/LICENSE new file mode 100644 index 0000000..9e841e7 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/README.md b/src/sssu_sample/SSSU_DomainValidation_AzTable-/README.md new file mode 100644 index 0000000..c546992 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/README.md @@ -0,0 +1,137 @@ +--- +page_type: sample +languages: + - C# + - .Net core +products: + - azure-active-directory +description: "A sample to demonstrate how to validating a sign-up user flow using a C# Azure Function and API connectors" +urlFragment: "active-directory-dotnet-external-identities-api-connector-azure-function-validate" +--- + +# User flow sign-up customization using C# .NET Core Azure Function and API connectors + +This sample demonstrates how to use API connectors to customize sign-up for Azure AD [guest user self-service sign-up](https://docs.microsoft.com/azure/active-directory/b2b/self-service-sign-up-overview) and [Azure AD B2C sign-up user flows](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-user-flows). +In particular, the sample demonstrates how to: + +1. Limit external user sign-ups to only a particular federated Azure Active Directory tenant. In this example, it's a fictitious `fabrikam.com` and `fabricam.com`. +1. Validate a user-provided value `Display Name` against a validation rule. + +The API is implemented using an Azure Function HTTP trigger in C# .NET Core. + +## Contents + +| File/folder | Description | +| --------------------------- | ------------------------------------------ | +| [SignUpValidation.cs](SignUpValidation.cs) | Sample source code for HTTP trigger. | +| [ResponseContent.cs](ResponseContent.cs) | HTTP response content. | +| `.gitignore` | Define what to ignore at commit time. | +| `CHANGELOG.md` | List of changes to the sample. | +| `CONTRIBUTING.md` | Guidelines for contributing to the sample. | +| `README.md` | This README file. | +| `LICENSE` | The license for the sample. | + +## Key concepts + +API connectors provide you with a way to modify and extend sign-up flows by leveraging web APIs. API connectors are available in both [guest user self-service sign up](https://docs.microsoft.com/azure/active-directory/external-identities/api-connectors-overview) and [Azure AD B2C sign-up user flows](https://docs.microsoft.com/azure/active-directory-b2c/api-connectors-overview?pivots=b2c-user-flow). + +This examples uses an API connector to limit sign-ups to only specific email domains, fabrikam.com and fabricam.com. This is easily modifiable in `SignUpValidation.cs` and can be extended limit sign ups to any particular email domain or set of email domains. Further, the API connector in this sample is used to perform input validation on `Display Name` by ensuring a user provides a value of at least 4 characters. + +This sample uses an Azure Function as the web API endpoint but you can alternatively edit the `.cs` files in your preferred IDE and deploy that code in any web service. If so, environment variables used for authentication may work differently. + +## Prerequisites + +Before you get started, make sure you have the following requirements in place: + +- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?ref=microsoft.com&utm_source=microsoft.com&utm_medium=docs&utm_campaign=visualstudio). +- A [self-service sign-up user flow](https://docs.microsoft.com/azure/active-directory/b2b/self-service-sign-up-user-flow) in an Azure AD tenant or a [sign-up or sign-in user flow](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-user-flows) in an Azure AD B2C tenant. +- Install [.NET Core 3.1](https://dotnet.microsoft.com/download/dotnet-core/3.1). The ASP.NET Core Runtime enables you to run existing web/server applications. +- Install [Visual Studio code](https://code.visualstudio.com). A free source-code editor made by Microsoft for Windows, Linux and macOS. Features include support for debugging, syntax highlighting, intelligent code completion, snippets, code refactoring, and embedded Git. +- The [Azure Functions extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions) for Visual Studio Code. + +## Setting up your Azure Function + +### Steps to run locally + +1. Clone the repository + +```console +git clone https://github.com/Azure-Samples/active-directory-dotnet-external-identities-api-connector-azure-function-validate +``` + +1. Navigate to the **Azure extension** in Visual Studio code on the left navigation bar. You should see a 'Local Project' folder representing your local Azure Function. +1. Press **F5** (or use the **Debug > Start Debugging** menu command) to launch the debugger and attach to the Azure Functions host. (This command automatically uses the single debug configuration that Azure Functions created.) +1. The Azure Function extension will automatically generate a few files for local development, install dependencies, and install the Function Core tools if not already present. These tools help with the debugging experience. +1. Output from the Functions Core tools appears in the VS Code **Terminal** panel. Once the host has started, **Alt+click** the local URL shown in the output to open the browser and run the function. You can also see the url of the Local Function by right clicking on the function on the Azure Functions explorer. +1. To redeploy the local instance during testing, just repeat these steps. + +### Add authentication + +Authentication is stored in environment variables, so they're not stored as part of the repository and should never be stored in checked in code. Read more about the [local.settings.json](https://docs.microsoft.com/azure/azure-functions/functions-run-local?tabs=macos%2Ccsharp%2Cbash#local-settings-file) file. + +1. Create a [local.settings.json](local.settings.json) file +1. Add the `BASIC_AUTH_USERNAME` and the `BASIC_AUTH_PASSWORD` setting. +1. You final local.settings.json should look like following one: + +```json +{ + "IsEncrypted": false, + "Values": { + "AzureWebJobsStorage": "", + "FUNCTIONS_WORKER_RUNTIME": "dotnet", + "BASIC_AUTH_USERNAME": "", + "BASIC_AUTH_PASSWORD": "" + } +} +``` + +Specify a **Username** and **Password**. This will be what your Azure Function uses to authenticate incoming requests. + +### Deploy the application + +1. Follow steps of [this](https://docs.microsoft.com/azure/azure-functions/functions-develop-vs-code?tabs=csharp#publish-to-azure) guide to deploy your Azure Function to the cloud. Copy the endpoint web URL of your Azure Function. +1. Once deployed, you'll see a **'Upload settings'** option. Select this. It will upload your environment variables onto the [Application settings](https://docs.microsoft.com/azure/azure-functions/functions-develop-vs-code?tabs=csharp#application-settings-in-azure) of the cloud. + +To learn more about Visual Studio Code development for Azure Functions, see [this](https://docs.microsoft.com/azure/azure-functions/functions-dotnet-class-library). + +## Configure and enable the API connector + +Follow the steps outlined in "Add an API connector" for [guest user self-service sign-up](https://docs.microsoft.com/azure/active-directory/external-identities/self-service-sign-up-add-api-connector) or for [Azure AD B2C](https://docs.microsoft.com/azure/active-directory-b2c/add-api-connector) to create an API connector and enable it your user flow. The end result is shown below. + +### API connector configuration + +Your API connector configuration should look like the following: + +API connector configuration + +- **Endpoint URL** is the Function URL you copied earlier. +- **Username** and **Password** are the Username and Passwords you defined as environment variables earlier. + +### Enable the API connector + +In the **API connector** settings for your user flow, you can select the API connector to be invoked at either step: + +API connector select + +- **After signing in with an identity provider** - if enabled for this step, the API connector will only allow users with an email ending in `@fabrikam.com`. Note that for Azure AD B2C, this does not apply to local accounts. +- **Before creating the user** - if enabled for this step, the API connector will only allow users with an email ending in `@fabrikam.com` _and_ check whether the `Display Name` attribute is of at least length 5. Note, the `Display Name` has to be selected in **User attributes** for the user flow. + +## Customizing the Azure Function + +This sample provides a quick way to get started using API connectors. By modifying the source code and leveraging all the capabilities of a web API you're used to, you'll be able to accomplish many more complex scenarios including integration with other web APIs and services. + +## Contributing + +This project welcomes contributions and suggestions. Most contributions require you to agree to a +Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us +the rights to use your contribution. For details, visit + +When you submit a pull request, a CLA bot will automatically determine whether you need to provide +a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions +provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or +contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/ResponseContent.cs b/src/sssu_sample/SSSU_DomainValidation_AzTable-/ResponseContent.cs new file mode 100644 index 0000000..8374de5 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/ResponseContent.cs @@ -0,0 +1,44 @@ +using Newtonsoft.Json; + +namespace Sample.ExternalIdentities +{ + public class ResponseContent + { + public const string ApiVersion = "1.0.0"; + + public ResponseContent() + { + this.version = ResponseContent.ApiVersion; + this.action = "Continue"; + } + + public ResponseContent(string action, string userMessage) + { + this.version = ResponseContent.ApiVersion; + this.action = action; + this.userMessage = userMessage; + if (action == "ValidationError") + { + this.status = "400"; + } + } + + public string version { get; } + public string action { get; set; } + + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public string userMessage { get; set; } + + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public string status { get; set; } + + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public string jobTitle { get; set; } + + //[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + //public string extension_CustomClaim { get; set; } + } +} diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/SECURITY.md b/src/sssu_sample/SSSU_DomainValidation_AzTable-/SECURITY.md new file mode 100644 index 0000000..9842a84 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/msrc/pgp-key-msrc). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/msrc/cvd). + + \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/SignUpValidation.cs b/src/sssu_sample/SSSU_DomainValidation_AzTable-/SignUpValidation.cs new file mode 100644 index 0000000..48e8efb --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/SignUpValidation.cs @@ -0,0 +1,115 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Azure.WebJobs; +using Microsoft.Azure.WebJobs.Extensions.Http; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using System.Linq; + +namespace Sample.ExternalIdentities +{ + public static class SignUpValidation + { + [FunctionName("SignUpValidation")] + public static async Task Run( + [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, + ILogger log) + { + // Allowed domains + string[] allowedDomain = { "fabrikam.com", "fabricam.com" }; + + // Check HTTP basic authorization + if (!Authorize(req, log)) + { + log.LogWarning("HTTP basic authentication validation failed."); + return (ActionResult)new UnauthorizedResult(); + } + + // Get the request body + string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); + dynamic data = JsonConvert.DeserializeObject(requestBody); + + // If input data is null, show block page + if (data == null) + { + return (ActionResult)new OkObjectResult(new ResponseContent("ShowBlockPage", "There was a problem with your request.")); + } + + // Print out the request body + log.LogInformation("Request body: " + requestBody); + + // Get the current user language + string language = (data.ui_locales == null || data.ui_locales.ToString() == "") ? "default" : data.ui_locales.ToString(); + log.LogInformation($"Current language: {language}"); + + // If email claim not found, show block page. Email is required and sent by default. + if (data.email == null || data.email.ToString() == "" || data.email.ToString().Contains("@") == false) + { + return (ActionResult)new OkObjectResult(new ResponseContent("ShowBlockPage", "Email name is mandatory.")); + } + + // Get domain of email address + string domain = data.email.ToString().Split("@")[1]; + + // Check the domain in the allowed list + if (!allowedDomain.Contains(domain.ToLower())) + { + return (ActionResult)new OkObjectResult(new ResponseContent("ShowBlockPage", $"You must have an account from '{string.Join(", ", allowedDomain)}' to register as an external user for Contoso.")); + } + + // If displayName claim doesn't exist, or it is too short, show validation error message. So, user can fix the input data. + if (data.displayName == null || data.displayName.ToString().Length < 5) + { + return (ActionResult)new BadRequestObjectResult(new ResponseContent("ValidationError", "Please provide a Display Name with at least five characters.")); + } + + // Input validation passed successfully, return `Allow` response. + // TO DO: Configure the claims you want to return + return (ActionResult)new OkObjectResult(new ResponseContent() { + jobTitle = "This value return by the API Connector"//, + // You can also return custom claims using extension properties. + //extension_CustomClaim = "my custom claim response" + }); + } + + private static bool Authorize(HttpRequest req, ILogger log) + { + // Get the environment's credentials + string username = System.Environment.GetEnvironmentVariable("BASIC_AUTH_USERNAME", EnvironmentVariableTarget.Process); + string password = System.Environment.GetEnvironmentVariable("BASIC_AUTH_PASSWORD", EnvironmentVariableTarget.Process); + + // Returns authorized if the username is empty or not exists. + if (string.IsNullOrEmpty(username)) + { + log.LogInformation("HTTP basic authentication is not set."); + return true; + } + + // Check if the HTTP Authorization header exist + if (!req.Headers.ContainsKey("Authorization")) + { + log.LogWarning("Missing HTTP basic authentication header."); + return false; + } + + // Read the authorization header + var auth = req.Headers["Authorization"].ToString(); + + // Ensure the type of the authorization header id `Basic` + if (!auth.StartsWith("Basic ")) + { + log.LogWarning("HTTP basic authentication header must start with 'Basic '."); + return false; + } + + // Get the the HTTP basinc authorization credentials + var cred = System.Text.UTF8Encoding.UTF8.GetString(Convert.FromBase64String(auth.Substring(6))).Split(':'); + + // Evaluate the credentials and return the result + return (cred[0] == username && cred[1] == password); + } + } +} diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/csharp.csproj b/src/sssu_sample/SSSU_DomainValidation_AzTable-/csharp.csproj new file mode 100644 index 0000000..2189ee7 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/csharp.csproj @@ -0,0 +1,18 @@ + + + netcoreapp3.1 + v3 + + + + + + + PreserveNewest + + + PreserveNewest + Never + + + \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/host.json b/src/sssu_sample/SSSU_DomainValidation_AzTable-/host.json new file mode 100644 index 0000000..2685784 --- /dev/null +++ b/src/sssu_sample/SSSU_DomainValidation_AzTable-/host.json @@ -0,0 +1,11 @@ +{ + "version": "2.0", + "logging": { + "applicationInsights": { + "samplingExcludedTypes": "Request", + "samplingSettings": { + "isEnabled": true + } + } + } +} \ No newline at end of file diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-configuration.png b/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..4324e6a218b0e334f61cedbd5e879bba90dd10da GIT binary patch literal 106862 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 literal 0 HcmV?d00001 diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-selected.png b/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-selected.png new file mode 100644 index 0000000000000000000000000000000000000000..189041eafb5ad1d7f36cc2e09c162ba5cfb0562a GIT binary patch literal 83552 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 My85}Sb4q9e0PTO(YXATM literal 0 HcmV?d00001 diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/create-function-app-project.png b/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/create-function-app-project.png new file mode 100644 index 0000000000000000000000000000000000000000..3f1d6f65f629e5053c1b5cb935dc4859a230a961 GIT binary patch literal 13569 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 literal 0 HcmV?d00001 From 1f34043b0a8cd67fb1b9ff6a77e021c6062c90c7 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Wed, 15 Jan 2025 15:10:14 +0000 Subject: [PATCH 03/11] Adding a new quickstart app to test --- .../.vscode/extensions.json | 5 + .../.vscode/launch.json | 23 + .../.vscode/msEntraSampleConfig.json | 1 + .../.vscode/msEntraSampleLaunch.js | 24 + .../.vscode/vsCodeLaunchAngularSample.js | 12 + .../AppCreationScripts/AppCreationScripts.md | 137 + .../AppCreationScripts/Cleanup.ps1 | 152 + .../AppCreationScripts/Configure.ps1 | 329 + .../AppCreationScripts/apps.json | 47 + .../AppCreationScripts/quickstart.md | 31 + .../AppCreationScripts/sample.json | 63 + .../CIAM-JSAngular-SPA-AuthCode/README.md | 415 + .../ReadmeFiles/screenshot.png | Bin 0 -> 31735 bytes .../ReadmeFiles/topology.png | Bin 0 -> 45846 bytes .../SPA/.browserslistrc | 16 + .../SPA/.editorconfig | 16 + .../SPA/.gitignore | 42 + .../SPA/angular.json | 106 + .../SPA/karma.conf.js | 46 + .../SPA/package-lock.json | 13548 ++++++++++++++++ .../SPA/package.json | 43 + .../SPA/src/app/app-routing.module.ts | 40 + .../SPA/src/app/app.component.css | 22 + .../SPA/src/app/app.component.html | 19 + .../SPA/src/app/app.component.ts | 148 + .../SPA/src/app/app.module.ts | 99 + .../SPA/src/app/auth-config.ts | 48 + .../SPA/src/app/claim-utils.ts | 194 + .../SPA/src/app/guarded/guarded.component.css | 0 .../src/app/guarded/guarded.component.html | 1 + .../SPA/src/app/guarded/guarded.component.ts | 15 + .../SPA/src/app/home/home.component.css | 26 + .../SPA/src/app/home/home.component.html | 34 + .../SPA/src/app/home/home.component.ts | 77 + .../SPA/src/app/sample.spec.ts | 108 + .../SPA/src/assets/.gitkeep | 0 .../SPA/src/environments/environment.prod.ts | 3 + .../SPA/src/environments/environment.ts | 16 + .../SPA/src/favicon.svg | 23 + .../SPA/src/index.html | 17 + .../SPA/src/main.ts | 12 + .../SPA/src/polyfills.ts | 53 + .../SPA/src/styles.css | 3 + .../SPA/src/test.ts | 21 + .../SPA/tsconfig.app.json | 15 + .../SPA/tsconfig.json | 32 + .../SPA/tsconfig.spec.json | 18 + .../package-lock.json | 6 + 48 files changed, 16106 insertions(+) create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/README.md create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/topology.png create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json create mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json create mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json new file mode 100644 index 0000000..cd45074 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["ms-azuretools.ms-entra"] +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json new file mode 100644 index 0000000..05b8664 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json @@ -0,0 +1,23 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "id": "ms-entra.launchSample", + "type": "node", + "request": "launch", + "name": "Launch Program", + "program": "${workspaceFolder}/.vscode/msEntraSampleLaunch.js", + "args": [ + "${input:taskDelay}" + ] + } + ], + "inputs": [ + { + "id": "taskDelay", + "type": "command", + "command": "ms-entra.getScenarioEndTime", + "args": "UserFlowDelay" + } + ] +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json new file mode 100644 index 0000000..1412bda --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json @@ -0,0 +1 @@ +{"workingDir":"SPA","command":"npm install && npm run start"} \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js new file mode 100644 index 0000000..dddd99a --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js @@ -0,0 +1,24 @@ +const { exec } = require('child_process'); +const path = require('path'); +const config = require('./msEntraSampleConfig.json'); + +// Read the UserFlowDelay from the args. +// @see launch.json +const startDelay = Math.max(0, Number(process.argv[2] || 0) - Date.now()); + +if (startDelay > 0) { + console.log(`Waiting for the user flow setup to finish before launching sample...`); +} + +setTimeout(() => { + console.log('Running Sample...'); + console.log('This may take some time.'); + + exec(config.command, { cwd: path.resolve(config.workingDir) }, (err, output) => { + if (err) { + console.error(err); + return; + } + console.log(output); + }); +}, startDelay); diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js new file mode 100644 index 0000000..b6090a2 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js @@ -0,0 +1,12 @@ +const {exec} = require('child_process'); +const path = require("path"); +exec('npm install && npm start',{cwd:path.resolve('.\\SPA')}, (err, output) => { + // once the command has completed, the callback function is called + if (err) { + // log and return if we encounter an error + console.error("Error on running commands: ", err) + return + } + // log the output received from the command + console.log("Output: \n", output) +}) \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md new file mode 100644 index 0000000..a977f6e --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md @@ -0,0 +1,137 @@ +# Registering sample apps with the Microsoft identity platform and updating configuration files using PowerShell + +## Overview + +### Quick summary + +1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. + + ```PowerShell + cd .\AppCreationScripts\ + .\Configure.ps1 -TenantId "your test tenant's id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" + ``` + +### More details + +- [Goal of the provided scripts](#goal-of-the-provided-scripts) + - [Presentation of the scripts](#presentation-of-the-scripts) + - [Usage pattern for tests and DevOps scenarios](#usage-pattern-for-tests-and-DevOps-scenarios) +- [How to use the app creation scripts?](#how-to-use-the-app-creation-scripts) + - [Pre-requisites](#pre-requisites) + - [Run the script and start running](#run-the-script-and-start-running) + - [Four ways to run the script](#four-ways-to-run-the-script) + - [Option 1 (interactive)](#option-1-interactive) + - [Option 2 (Interactive, but create apps in a specified tenant)](#option-3-Interactive-but-create-apps-in-a-specified-tenant) + - [Running the script on Azure Sovereign clouds](#running-the-script-on-Azure-Sovereign-clouds) + +## Goal of the provided scripts + +### Presentation of the scripts + +This sample comes with two PowerShell scripts, which automate the creation of the Microsoft Entra applications, and the configuration of the code for this sample. Once you run them, you will only need to build the solution and you are good to test. + +These scripts are: + +- `Configure.ps1` which: + - creates Microsoft Entra applications and their related objects (permissions, dependencies, secrets, app roles), + - changes the configuration files in the sample projects. + - creates a summary file named `createdApps.html` in the folder from which you ran the script, and containing, for each Azure AD application it created: + - the identifier of the application + - the AppId of the application + - the url of its registration in the [Microsoft Entra admin center](https://entra.microsoft.com/). + +- `Cleanup.ps1` which cleans-up the Azure AD objects created by `Configure.ps1`. Note that this script does not revert the changes done in the configuration files, though. You will need to undo the change from source control (from Visual Studio, or from the command line using, for instance, `git reset`). + +> :information_source: If the sample supports using certificates instead of client secrets, this folder will contain an additional set of scripts: `Configure-WithCertificates.ps1` and `Cleanup-WithCertificates.ps1`. You can use them in the same way to register app(s) that use certificates instead of client secrets. + +### Usage pattern for tests and DevOps scenarios + +The `Configure.ps1` will stop if it tries to create an Azure AD application which already exists in the tenant. For this, if you are using the script to try/test the sample, or in DevOps scenarios, you might want to run `Cleanup.ps1` just before `Configure.ps1`. This is what is shown in the steps below. + +## How to use the app creation scripts? + +### Pre-requisites + +1. PowerShell 7 or later (see: [installing PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)) +1. Open PowerShell (On Windows, press `Windows-R` and type `PowerShell` in the search window) + +### (Optionally) install Microsoft.Graph.Applications PowerShell modules + +The scripts install the required PowerShell module (Microsoft.Graph.Applications) for the current user if needed. However, if you want to install if for all users on the machine, you can follow the following steps: + +1. If you have never done it already, in the PowerShell window, install the Microsoft.Graph.Applications PowerShell modules. For this: + + 1. Open PowerShell + 2. Type: + + ```PowerShell + Install-Module Microsoft.Graph.Applications + ``` + + or if you want the modules to be installed for the current user only, run: + + ```PowerShell + Install-Module Microsoft.Graph.Applications -Scope CurrentUser + ``` + +### Run the script and start running + +1. Go to the `AppCreationScripts` sub-folder. From the folder where you cloned the repo, + + ```PowerShell + cd AppCreationScripts + ``` + +1. Run the scripts. See below for the [four options](#four-ways-to-run-the-script) to do that. +1. Open the Visual Studio solution, and in the solution's context menu, choose **Set Startup Projects**. +1. select **Start** for the projects + +You're done! + +### Two ways to run the script + +We advise four ways of running the script: + +- Interactive: you will be prompted for credentials, and the scripts decide in which tenant to create the objects, +- Interactive in specific tenant: you will provide the tenant in which you want to create the objects and then you will be prompted for credentials, and the scripts will create the objects, + +Here are the details on how to do this. + +#### Option 1 (interactive) + +- Just run ``.\Configure.ps1``, and you will be prompted to sign-in (email address, password, and if needed MFA). +- The script will be run as the signed-in user and will use the tenant in which the user is defined. + +Note that the script will choose the tenant in which to create the applications, based on the user. Also to run the `Cleanup.ps1` script, you will need to re-sign-in. + +#### Option 2 (Interactive, but create apps in a specified tenant) + + if you want to create the apps in a particular tenant, you can use the following option: + +- Open the [Microsoft Entra admin center](https://entra.microsoft.com/) +- Select the Microsoft Entra tenant you are interested in (in the combo-box below your name on the top right of the browser window) +- Select **Overview** on the left side menu and then select the **Overview** tab. Copy the content of the **Tenant Id** property +- Then use the full syntax to run the scripts: + +```PowerShell +$tenantId = "yourTenantIdGuid" +. .\Cleanup.ps1 -TenantId $tenantId +. .\Configure.ps1 -TenantId $tenantId +``` + +### Running the script on Azure Sovereign clouds + +All the four options listed above can be used on any Azure Sovereign clouds. By default, the script targets `AzureCloud`, but it can be changed using the parameter `-AzureEnvironmentName`. + +The acceptable values for this parameter are: + +- AzureCloud +- AzureChinaCloud +- AzureUSGovernment + +Example: + + ```PowerShell + . .\Cleanup.ps1 -AzureEnvironmentName "AzureUSGovernment" + . .\Configure.ps1 -AzureEnvironmentName "AzureUSGovernment" + ``` diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 new file mode 100644 index 0000000..d209690 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 @@ -0,0 +1,152 @@ +#Requires -Version 7 + +[CmdletBinding()] +param( + [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] + [string] $tenantId, + [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] + [string] $azureEnvironmentName +) + + +Function Cleanup +{ + if (!$azureEnvironmentName) + { + $azureEnvironmentName = "Global" + } + + <# + .Description + This function removes the Microsoft Entra applications for the sample. These applications were created by the Configure.ps1 script + #> + + # $tenantId is the Microsoft Entra Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant + # into which you want to create the apps. Look it up in the Microsoft Entra admin center in the "Properties" of the Azure AD. + + # Connect to the Microsoft Graph API + Write-Host "Connecting to Microsoft Graph" + + + if ($tenantId -eq "") + { + Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + else + { + Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + + $context = Get-MgContext + $tenantId = $context.TenantId + + # Get the user running the script + $currentUserPrincipalName = $context.Account + $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" + + # get the tenant we signed in to + $Tenant = Get-MgOrganization + $tenantName = $Tenant.DisplayName + + $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} + $verifiedDomainName = $verifiedDomain.Name + $tenantId = $Tenant.Id + + Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) + + # Removes the applications + Write-Host "Cleaning-up applications from tenant '$tenantId'" + + Write-Host "Removing 'spa' (ciam-msal-angular-spa) if needed" + try + { + Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } + } + catch + { + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to remove the application 'ciam-msal-angular-spa'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red + } + + Write-Host "Making sure there are no more (ciam-msal-angular-spa) applications found, will remove if needed..." + $apps = Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain + + if ($apps) + { + Remove-MgApplication -ApplicationId $apps.Id + } + + foreach ($app in $apps) + { + Remove-MgApplication -ApplicationId $app.Id + Write-Host "Removed ciam-msal-angular-spa.." + } + + # also remove service principals of this app + try + { + Get-MgServicePrincipal -filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} + } + catch + { + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to remove ServicePrincipal 'ciam-msal-angular-spa'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red + } +} + +# Pre-requisites +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { + Install-Module "Microsoft.Graph" -Scope CurrentUser +} + +#Import-Module Microsoft.Graph + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { + Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Authentication + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { + Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Identity.DirectoryManagement + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { + Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Applications + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { + Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Groups + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { + Install-Module "Microsoft.Graph.Users" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Users + +$ErrorActionPreference = "Stop" + + +try +{ + Cleanup -tenantId $tenantId -environment $azureEnvironmentName +} +catch +{ + $_.Exception.ToString() | out-host + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red +} + +Write-Host "Disconnecting from tenant" +Disconnect-MgGraph diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 new file mode 100644 index 0000000..dcd334b --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 @@ -0,0 +1,329 @@ +#Requires -Version 7 + +[CmdletBinding()] +param( + [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] + [string] $tenantId, + [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] + [string] $azureEnvironmentName +) + +<# + This script creates the Microsoft Entra applications needed for this sample and updates the configuration files + for the visual Studio projects from the data in the Microsoft Entra applications. + + In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user + + There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. +#> + +# Adds the requiredAccesses (expressed as a pipe separated string) to the requiredAccess structure +# The exposed permissions are in the $exposedPermissions collection, and the type of permission (Scope | Role) is +# described in $permissionType +Function AddResourcePermission($requiredAccess, ` + $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) +{ + foreach($permission in $requiredAccesses.Trim().Split("|")) + { + foreach($exposedPermission in $exposedPermissions) + { + if ($exposedPermission.Value -eq $permission) + { + $resourceAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess + $resourceAccess.Type = $permissionType # Scope = Delegated permissions | Role = Application permissions + $resourceAccess.Id = $exposedPermission.Id # Read directory data + $requiredAccess.ResourceAccess += $resourceAccess + } + } + } +} + +# +# Example: GetRequiredPermissions "Microsoft Graph" "Graph.Read|User.Read" +# See also: http://stackoverflow.com/questions/42164581/how-to-configure-a-new-azure-ad-application-through-powershell +Function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) +{ + # If we are passed the service principal we use it directly, otherwise we find it from the display name (which might not be unique) + if ($servicePrincipal) + { + $sp = $servicePrincipal + } + else + { + $sp = Get-MgServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'" + } + $appid = $sp.AppId + $requiredAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess + $requiredAccess.ResourceAppId = $appid + $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess] + + # $sp.Oauth2Permissions | Select Id,AdminConsentDisplayName,Value: To see the list of all the Delegated permissions for the application: + if ($requiredDelegatedPermissions) + { + AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2PermissionScopes -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope" + } + + # $sp.AppRoles | Select Id,AdminConsentDisplayName,Value: To see the list of all the Application permissions for the application + if ($requiredApplicationPermissions) + { + AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role" + } + return $requiredAccess +} + + +<#.Description + This function takes a string input as a single line, matches a key value and replaces with the replacement value +#> +Function UpdateLine([string] $line, [string] $value) +{ + $index = $line.IndexOf(':') + $lineEnd = '' + + if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } + + if ($index -ige 0) + { + $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd + } + return $line +} + +<#.Description + This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file +#> +Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) +{ + $lines = Get-Content $configFilePath + $index = 0 + while($index -lt $lines.Length) + { + $line = $lines[$index] + foreach($key in $dictionary.Keys) + { + if ($line.Contains($key)) + { + $lines[$index] = UpdateLine $line $dictionary[$key] + } + } + $index++ + } + + Set-Content -Path $configFilePath -Value $lines -Force +} + +<#.Description + This function takes a string input as a single line, matches a key value and replaces with the replacement value +#> +Function ReplaceInLine([string] $line, [string] $key, [string] $value) +{ + $index = $line.IndexOf($key) + if ($index -ige 0) + { + $index2 = $index+$key.Length + $line = $line.Substring(0, $index) + $value + $line.Substring($index2) + } + return $line +} + +<#.Description + This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file +#> +Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) +{ + $lines = Get-Content $configFilePath + $index = 0 + while($index -lt $lines.Length) + { + $line = $lines[$index] + foreach($key in $dictionary.Keys) + { + if ($line.Contains($key)) + { + $lines[$index] = ReplaceInLine $line $key $dictionary[$key] + } + } + $index++ + } + + Set-Content -Path $configFilePath -Value $lines -Force +} + + +<#.Description + Primary entry method to create and configure app registrations +#> +Function ConfigureApplications +{ + <#.Description + This function creates the Microsoft Entra applications for the sample in the provided external tenant and updates the + configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) + so that they are consistent with the Applications parameters + #> + + if (!$azureEnvironmentName) + { + $azureEnvironmentName = "Global" + } + + # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) + Write-Host "Connecting to Microsoft Graph" + if ($tenantId -eq "") { + Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + else { + Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName + } + + $context = Get-MgContext + $tenantId = $context.TenantId + + # Get the user running the script + $currentUserPrincipalName = $context.Account + $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" + + # get the tenant we signed in to + $Tenant = Get-MgOrganization + $tenantName = $Tenant.DisplayName + + $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} + $verifiedDomainName = $verifiedDomain.Name + $tenantId = $Tenant.Id + + Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) + + # Create the spa AAD application + Write-Host "Creating the AAD application (ciam-msal-angular-spa)" + # create the application + $spaAadApplication = New-MgApplication -DisplayName "ciam-msal-angular-spa" ` + -Spa ` + @{ ` + RedirectUris = "http://localhost:4200"; ` + } ` + -SignInAudience AzureADMyOrg ` + #end of command + + $currentAppId = $spaAadApplication.AppId + $currentAppObjectId = $spaAadApplication.Id + + $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain + #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/ciam-msal-angular-spa") + + # create the service principal of the newly created application + $spaServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} + + # add the user running the script as an app owner if needed + $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId + if ($owner -eq $null) + { + New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} + Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($spaServicePrincipal.DisplayName)'" + } + Write-Host "Done creating the spa application (ciam-msal-angular-spa)" + + # URL of the AAD application in the Microsoft Entra admin center + # Future? $spaPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" + $spaPortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" + + Add-Content -Value "spa$currentAppIdciam-msal-angular-spa" -Path createdApps.html + # Declare a list to hold RRA items + $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess] + + # Add Required Resources Access (from 'spa' to 'Microsoft Graph') + Write-Host "Getting access from 'spa' to 'Microsoft Graph'" + $requiredPermission = GetRequiredPermissions -applicationDisplayName "Microsoft Graph"` + -requiredDelegatedPermissions "openid|offline_access" + + $requiredResourcesAccess.Add($requiredPermission) + Write-Host "Added 'Microsoft Graph' to the RRA list." + # Useful for RRA additions troubleshooting + # $requiredResourcesAccess.Count + # $requiredResourcesAccess + + Update-MgApplication -ApplicationId $currentAppObjectId -RequiredResourceAccess $requiredResourcesAccess + Write-Host "Granted permissions." + + + # print the registered app portal URL for any further navigation + Write-Host "Successfully registered and configured that app registration for 'ciam-msal-angular-spa' at `n $spaPortalUrl" -ForegroundColor Green + + # Update config file for 'spa' + # $configFile = $pwd.Path + "\..\SPA\src\app\auth-config.ts" + $configFile = $(Resolve-Path ($pwd.Path + "\..\SPA\src\app\auth-config.ts")) + + $dictionary = @{ "Enter_the_Application_Id_Here" = $spaAadApplication.AppId; "Enter_the_Tenant_Subdomain_Here" = $tenantName.Split(".onmicrosoft.com")[0] }; + + Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow + $dictionary + Write-Host "-----------------" + + ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary + Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" + Write-Host "IMPORTANT: Please follow the instructions below to complete a few manual step(s) in the Microsoft Entra admin center": + Write-Host "- For spa" + Write-Host " - Navigate to $spaPortalUrl" + Write-Host " - Navigate to your tenant and create user flows to allow users to sign up for the application." -ForegroundColor Red + Write-Host " - The delegated permissions for the 'spa' application require admin consent. Do remember to navigate to the application registration in the app portal and consent for those." -ForegroundColor Red + Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" + +Add-Content -Value "" -Path createdApps.html +} # end of ConfigureApplications function + +# Pre-requisites + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { + Install-Module "Microsoft.Graph" -Scope CurrentUser +} + +#Import-Module Microsoft.Graph + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { + Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Authentication + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { + Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Identity.DirectoryManagement + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { + Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Applications + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { + Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Groups + +if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { + Install-Module "Microsoft.Graph.Users" -Scope CurrentUser +} + +Import-Module Microsoft.Graph.Users + +Set-Content -Value "" -Path createdApps.html +Add-Content -Value "" -Path createdApps.html + +$ErrorActionPreference = "Stop" + +# Run interactively (will ask you for the tenant ID) + +try +{ + ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName +} +catch +{ + $_.Exception.ToString() | out-host + $message = $_ + Write-Warning $Error[0] + Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red +} +Write-Host "Disconnecting from tenant" +Disconnect-MgGraph \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json new file mode 100644 index 0000000..7fefcda --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json @@ -0,0 +1,47 @@ +{ + "Sample": { + "Title": "An Angular single-page application using MSAL Angular to authenticate users against Microsoft Entra External ID", + "Client": "SinglePageApplication", + "Level": 100 + }, + "AppRegistrations": [ + { + "x-ms-id": "ciam-angular-spa", + "x-ms-name": "ms-identity-ciam-angular-spa", + "x-ms-version": "2.0", + "replyUrlsWithType": [ + { + "url": "http://localhost:4200/", + "type": "Spa" + } + ], + "requiredResourceAccess": [ + { + "x-ms-resourceAppName": "Microsoft Graph", + "resourceAppId": "00000003-0000-0000-c000-000000000000", + "resourceAccess": [ + { + "id": "37f7f235-527c-4136-accd-4a02d197296e", + "type": "Scope", + "x-ms-name": "openid" + }, + { + "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182", + "type": "Scope", + "x-ms-name": "offline_access" + } + ] + } + ], + "codeConfigurations": [ + { + "settingFile": "SPA/src/app/auth-config.ts", + "replaceTokens": { + "appId": "Enter_the_Application_Id_Here", + "tenantName": "Enter_the_Tenant_Subdomain_Here" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md new file mode 100644 index 0000000..ac776c5 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md @@ -0,0 +1,31 @@ +--- +title: "Portal quickstart for Angular SPA" +description: Learn how to run an sample Angular single-page application to sign in users +services: active-directory +author: kengaderdus +manager: mwongerapk +ms.author: kengaderdus +ms.service: active-directory +ms.workload: identity +ROBOTS: NOINDEX +ms.subservice: ciam +ms.topic: portal +ms.date: 04/19/2023 +--- +# Portal quickstart for Angular SPA + +> In this quickstart, you download and run a code sample that demonstrates how an Angular SPA that can sign in users with Microsoft Entra External ID. +> +> [!div renderon="portal" id="display-on-portal" class="sxs-lookup"] +> +> 1. Make sure you've installed [Node.js](https://nodejs.org/download/). +> 1. Unzip the sample. +> 1. Locate the sample folder in your terminal, then run the following commands: +> +> ```console +> cd SPA && npm install && npm start +> ``` +> +> 1. Visit `http://localhost:4200` in your browser. +> 1. Select **Sign-in** on the navigation bar, then follow the prompts. +> \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json new file mode 100644 index 0000000..924aaaa --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json @@ -0,0 +1,63 @@ +{ + "Sample": { + "Title": "Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID", + "Level": 100, + "Client": "Angular SPA", + "Languages": [ + "javascript", + "typescript" + ], + "Products": [ + "azure-active-directory", + "msal-angular" + ], + "RepositoryUrl": "ms-identity-ciam-javascript-tutorial", + "Platform": "JavaScript", + "Endpoint": "AAD v2.0", + "Provider": "CIAM", + "description": "This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra and calls Microsoft Graph Api" + }, + "AADApps": [ + { + "Id": "spa", + "Name": "ciam-msal-angular-spa", + "Kind": "SinglePageApplication", + "Audience": "AzureADMyOrg", + "SDK": "MsalAngular", + "SampleSubPath": "1-Authentication\\1-sign-in-angular\\SPA", + "HomePage": "http://localhost:4200", + "ReplyUrls": "http://localhost:4200", + "RequiredResourcesAccess": [ + { + "Resource": "Microsoft Graph", + "DelegatedPermissions": [ + "openid", + "offline_access" + ] + } + ], + "ManualSteps": [ + { + "Comment": "Navigate to your tenant and create user flows to allow users to sign up for the application." + } + ] + } + ], + "CodeConfiguration": [ + { + "App": "spa", + "SettingKind": "Replace", + "SettingFile": "\\..\\SPA\\src\\app\\auth-config.ts", + "Mappings": [ + { + "key": "Enter_the_Application_Id_Here", + "value": ".AppId" + }, + { + "key": "Enter_the_Tenant_Subdomain_Here", + "value": "$tenantName" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/README.md b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/README.md new file mode 100644 index 0000000..8dd2cfa --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/README.md @@ -0,0 +1,415 @@ +--- +page_type: sample +name: Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID +description: This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra Consumers Identity and Access Management (Microsoft Entra External ID) +languages: + - javascript + - typescript +products: + - entra-external-id + - msal-angular +urlFragment: ms-identity-ciam-javascript-tutorial-2-sign-in-angular +extensions: + services: + - ms-identity + platform: + - JavaScript + endpoint: + - AAD v2.0 + level: + - 100 + client: + - Angular SPA +--- + +# Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID + +* [Overview](#overview) +* [Scenario](#scenario) +* [Contents](#contents) +* [Prerequisites](#prerequisites) +* [Setup the sample](#setup-the-sample) +* [Explore the sample](#explore-the-sample) +* [Troubleshooting](#troubleshooting) +* [About the code](#about-the-code) +* [Contributing](#contributing) +* [Learn More](#learn-more) + +## Overview + +This sample demonstrates an Angular single-page application (SPA) that lets users sign-in with Microsoft Entra External ID using the [Microsoft Authentication Library for Angular](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular) (MSAL Angular). + +Here you'll learn about [ID Tokens](https://docs.microsoft.com/azure/active-directory/develop/id-tokens), [OIDC scopes](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes), [single-sign on](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso), **silent requests** and more. + +## Scenario + +1. The client Angular SPA uses the to sign-in a user and obtain a JWT [ID Token](https://aka.ms/id-tokens) from **Microsoft Entra External ID**. +1. The **ID Token** proves that the user has successfully authenticated against **Microsoft Entra External ID**. + +![Scenario Image](./ReadmeFiles/topology.png) + +## Contents + +| File/folder | Description | +|---------------------------------|-----------------------------------------------------------| +| `src/app/auth-config.ts` | Authentication parameters reside here. | +| `src/app/app.module.ts` | MSAL Angular configuration parameters reside here. | +| `src/app/app-routing.module.ts` | Configure your MSAL-Guard here. | + +## Prerequisites + +* [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. +* [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. +* [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. +* A modern web browser. +* An external tenant. To create one, choose from the following methods: + * (Recommended) Use the [Microsoft Entra External ID extension](https://aka.ms/ciamvscode/readme/marketplace) to set up an external tenant directly in Visual Studio Code. + * [Create a new external tenant](https://learn.microsoft.com/entra/external-id/customers/how-to-create-external-tenant-portal) in the Microsoft Entra admin center. +* A user account in your external tenant. + +>This sample will not work with a **personal Microsoft account**. If you're signed in to the [Microsoft Entra admin center](https://entra.microsoft.com/) with a personal Microsoft account and have not created a user account in your directory before, you will need to create one before proceeding. + +## Setup the sample + +### Step 1: Clone or download this repository + +From your shell or command line: + +```console +git clone https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial.git +``` + +or download and extract the repository *.zip* file. + +> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. + +### Step 2: Install project dependencies + +```console + cd 1-Authentication\1-sign-in-angular\SPA + npm install +``` + +### Step 3: Register the sample application(s) in your tenant + +There is one project in this sample. To register it, you can: + +- follow the steps below for manually register your apps +- or use PowerShell scripts that: + - **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. + - modify the projects' configuration files. + +
+ Expand this section if you want to use this automation: + + > :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. + + 1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory + 1. In PowerShell run: + + ```PowerShell + Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force + ``` + + 1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. + 1. For interactive process -in PowerShell, run: + + ```PowerShell + cd .\AppCreationScripts\ + .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" + ``` + + > Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. +
+ +#### Choose the external tenant where you want to create your applications + +To manually register the apps, as a first step you'll need to: + +1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/). +1. If your account is present in more than one external tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired external tenant. + +#### Create User Flows + +Please refer to: [Tutorial: Create a sign-up and sign-in user flow](https://learn.microsoft.com/entra/external-id/customers/how-to-user-flow-sign-up-sign-in-customers) + +> :information_source: To enable password reset in an external tenant, please refer to: [Tutorial: Enable users to unlock their account or reset passwords using Microsoft Entra self-service password reset](https://learn.microsoft.com/entra/identity/authentication/tutorial-enable-sspr) + +#### Add External Identity Providers + +Please refer to: + +* [Tutorial: Add Google as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-google-federation-customers) +* [Tutorial: Add Facebook as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-facebook-federation-customers) + +#### Register the spa app (ciam-msal-angular-spa) + +1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com/) and select the CIAM service. +1. Select the **App Registrations** blade on the left, then select **New registration**. +1. In the **Register an application page** that appears, enter your application's registration information: + 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ciam-msal-angular-spa`. + 1. Under **Supported account types**, select **Accounts in this organizational directory only** + 1. Select **Register** to create the application. +1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. +1. In the app's registration screen, select the **Authentication** blade to the left. +1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. + 1. In the **Redirect URI** section enter the following redirect URI: + 1. `http://localhost:4200` + 1. Click **Save** to save your changes. +1. Since this app signs-in users, we will now proceed to select **delegated permissions**, which is is required by apps signing-in users. + 1. In the app's registration screen, select the **API permissions** blade in the left to open the page where we add access to the APIs that your application needs: + 1. Select the **Add a permission** button and then: + 1. Ensure that the **Microsoft APIs** tab is selected. + 1. In the *Commonly used Microsoft APIs* section, select **Microsoft Graph** + 1. In the **Delegated permissions** section, select **openid**, **offline_access** in the list. Use the search box if necessary. + 1. Select the **Add permissions** button at the bottom. +1. At this stage, the permissions are assigned correctly, but since it's an external tenant, the users themselves cannot consent to these permissions. To get around this problem, we'd let the [tenant administrator consent on behalf of all users in the tenant](https://docs.microsoft.com/azure/active-directory/develop/v2-admin-consent). Select the **Grant admin consent for {tenant}** button, and then select **Yes** when you are asked if you want to grant consent for the requested permissions for all accounts in the tenant. You need to be a tenant admin to be able to carry out this operation. + +##### Configure the spa app (ciam-msal-angular-spa) to use your app registration + +Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. + +> In the steps below, "ClientID" is the same as "Application ID" or "AppId". + +1. Open the `SPA\src\app\auth-config.ts` file. +1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ciam-msal-angular-spa` app copied from the Microsoft Entra admin center. +1. Find the placeholder `Enter_the_Tenant_Subdomain_Here` and replace it with the Directory (tenant) subdomain. For instance, if your tenant primary domain is `contoso.onmicrosoft.com`, use `contoso`. If you don't have your tenant domain name, learn how to [read your tenant details](https://review.learn.microsoft.com/azure/active-directory/external-identities/customers/how-to-create-customer-tenant-portal#get-the-customer-tenant-details). + +### Step 4: Running the sample + +```console + cd 1-Authentication\1-sign-in-angular\SPA + npm start +``` + +## Explore the sample + +1. Open your browser and navigate to `http://localhost:4200`. +1. Select the **Sign-in** button on the top right corner. Once you sign-in, you will see some of the important claims in your ID token. + +![Screenshot](./ReadmeFiles/screenshot.png) + +> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. + +## We'd love your feedback! + +Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR_ivMYEeUKlEq8CxnMPgdNZUNDlUTTk2NVNYQkZSSjdaTk5KT1o4V1VVNS4u). + +## Troubleshooting + +
+ Expand for troubleshooting info + +> * Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. +Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. +Make sure that your questions or comments are tagged with [`azure-active-directory-b2c` `node` `ms-identity` `adal` `msal-js` `msal`]. + +To provide feedback on or suggest features for Microsoft Entra, visit [User Voice page](https://feedback.azure.com/d365community/forum/79b1327d-d925-ec11-b6e6-000d3a4f06a4). +
+ +## About the code + +MSAL Angular is a wrapper around MSAL.js (i.e. *msal-browser*). As such, many of MSAL.js's public APIs are also available to use with MSAL Angular, while MSAL Angular itself offers additional [public APIs](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/public-apis.md). + +### Configuration + +You can initialize your application in several ways, for instance, by loading the configuration parameters from another server. See [Configuration options](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md) for more information. + +In the sample, authentication parameters reside in [auth-config.ts](./SPA/src/app/auth-config.ts). These parameters then are used for initializing MSAL Angular configuration options in [app.module.ts](./SPA/src/app/app.module.ts). + +### Sign-in + +**MSAL Angular** exposes 3 login methods: `loginPopup()`, `loginRedirect()` and `ssoSilent()`. First, setup your default interaction type in [app.module.ts](./SPA/src/app/app.module.ts): + +```typescript +export function MSALGuardConfigFactory(): MsalGuardConfiguration { + return { + interactionType: InteractionType.Redirect, + }; +} +``` + +Then, define a login method in [app.component.ts](./SPA/src/app/app.component.ts) as follows: + +```typescript +export class AppComponent implements OnInit { + + constructor( + @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, + private authService: MsalService, + private msalBroadcastService: MsalBroadcastService + ) {} + + ngOnInit(): void { + + login() { + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + if (this.msalGuardConfig.authRequest) { + this.authService.loginPopup({...this.msalGuardConfig.authRequest} as PopupRequest) + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } else { + this.authService.loginPopup() + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } + } else { + if (this.msalGuardConfig.authRequest) { + this.authService.loginRedirect({...this.msalGuardConfig.authRequest} as RedirectRequest); + } else { + this.authService.loginRedirect(); + } + } + } +} +``` + +If you already have a session that exists with the authentication server, you can use the `ssoSilent()` API to make a request for tokens without interaction. You will need to pass a [loginHint](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso#automatically-select-account-on-azure-ad) in the request object in order to successfully obtain a token silently. + +```typescript +export class AppComponent implements OnInit { + + constructor( + private authService: MsalService, + ) {} + + ngOnInit(): void { + const silentRequest: SsoSilentRequest = { + scopes: ["User.Read"], + loginHint: "user@contoso.com" + } + + this.authService.ssoSilent(silentRequest) + .subscribe({ + next: (result: AuthenticationResult) => { + console.log("SsoSilent succeeded!"); + }, + error: (error) => { + this.authService.loginRedirect(); + } + }); + } +} +``` + +### ID Token Validation + +When you receive an [ID token](https://docs.microsoft.com/azure/active-directory/develop/id-tokens) directly from the IdP on a secure channel (e.g. HTTPS), such is the case with SPAs, there’s no need to validate it. If you were to do it, you would validate it by asking the same server that gave you the ID token to give you the keys needed to validate it, which renders it pointless, as if one is compromised so is the other. + +### Sign-out + +The application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. For more information, see: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request). + +### Securing Routes + +You can add authentication to secure specific routes in your application by just adding `canActivate: [MsalGuard]` to your route definition. It can be added at the parent or child routes. This ensures that the user must be signed-in to access the secured route. + +```typescript + const routes: Routes = [ + { + path: 'guarded', + component: GuardedComponent, + canActivate: [ + MsalGuard + ] + } + ] +``` + +### Events API + +Using the event API, you can register an event callback that will do something when an event is emitted. When registering an event callback in an Angular component you will need to make sure you do 2 things. + +1. The callback is registered only once +2. The callback is unregistered before the component unmounts. + +```typescript +export class HomeComponent implements OnInit { + + private readonly _destroying$ = new Subject(); + + constructor(private authService: MsalService, private msalBroadcastService: MsalBroadcastService) { } + + ngOnInit(): void { + this.msalBroadcastService.msalSubject$ + .pipe( + filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS), + takeUntil(this._destroying$) + ) + .subscribe((result: EventMessage) => { + // do something with the result, such as accessing ID token + }); + } + + ngOnDestroy(): void { + this._destroying$.next(undefined); + this._destroying$.complete(); + } +} +``` + +For more information, see: [Events in MSAL Angular v2](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md). + +### Deploying SPA to Azure Storage + +There is one single-page application in this sample. To deploy it to **Azure Storage**, you'll need to: + +- create an Azure Storage blob and obtain website coordinates +- build your project and upload it to Azure Storage blob +- update config files with website coordinates + +> :information_source: If you would like to use **VS Code Azure Tools** extension for deployment, [watch the tutorial](https://docs.microsoft.com/azure/developer/javascript/tutorial-vscode-static-website-node-01) offered by Microsoft Docs. + +#### Build and upload (ciam-msal-angular-spa) to an Azure Storage blob + +Build your project to get a distributable files folder, where your built `html`, `css` and `javascript` files will be generated. Then follow the steps below: + +> :warning: When uploading, make sure you upload the contents of your distributable files folder and **not** the entire folder itself. + +> :information_source: If you don't have an account already, see: [How to create a storage account](https://docs.microsoft.com/azure/storage/common/storage-account-create). + +1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/). +1. Locate your storage account and display the account overview. +1. Select **Static website** to display the configuration page for static websites. +1. Select **Enabled** to enable static website hosting for the storage account. +1. In the **Index document name** field, specify a default index page (For example: `index.html`). +1. The default **index page** is displayed when a user navigates to the root of your static website. +1. Select **Save**. The Microsoft Entra admin center now displays your static website endpoint. Make a note of the **Primary endpoint field**. +1. In the `ciam-msal-angular-spa` project source code, update your configuration file with the **Primary endpoint field** as your new **Redirect URI** (you will register this URI later). +1. Next, select **Storage Explorer**. +1. Expand the **BLOB CONTAINERS** node, and then select the `$web` container. +1. Choose the **Upload** button to upload files. +1. If you intend for the browser to display the contents of file, make sure that the content type of that file is set to `text/html`. +1. In the pane that appears beside the **account overview page** of your storage account, select **Static Website**. The URL of your site appears in the **Primary endpoint field**. In the next section, you will register this URI. + +#### Update the CIAM app registration for ciam-msal-angular-spa + +1. Navigate back to to the [Microsoft Entra admin center](https://entra.microsoft.com/). +1. In the left-hand navigation pane, select the **Microsoft Entra** service, and then select **App registrations**. +1. In the resulting screen, select `ciam-msal-angular-spa`. +1. In the app's registration screen, select **Authentication** in the menu. + 1. In the **Redirect URIs** section, update the reply URLs to match the site URL of your Azure deployment. For example: + 1. `https://ciam-msal-angular-spa.azurewebsites.net/` + + +## Contributing + +If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +## Learn More + +* [Configure your company branding](https://learn.microsoft.com/entra/fundamentals/how-to-customize-branding) +* [OAuth 2.0 authorization with Microsoft Entra ID](https://learn.microsoft.com/entra/architecture/auth-oauth2) +* [Language customization in Microsoft Entra External ID](https://learn.microsoft.com/entra/external-id/user-flow-customize-language) +* [Building Zero Trust ready apps](https://aka.ms/ztdevsession) +* [Initialize client applications using MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-initializing-client-applications) +* [Single sign-on with MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-sso) +* [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) +* [Logging in MSAL.js applications](https://learn.microsoft.com/entra/identity-platform/msal-logging-js) +* [Pass custom state in authentication requests using MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-pass-custom-state-authentication-request) +* [Prompt behavior in MSAL.js interactive requests](https://learn.microsoft.com/entra/identity-platform/msal-js-prompt-behavior) +* [Use the Microsoft Authentication Library for JavaScript to work with Azure AD B2C](https://learn.microsoft.com/entra/identity-platform/msal-b2c-overview) diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..27add1e25def9119a0fe504eb588eaf1709fcb0f GIT binary patch literal 31735 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%0Ax8^}kJ4@ixd{pW3W*bAL>+0C(E8^?N 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 Qz;)%3oa%!j8KZ#z0b7^-r~m)} literal 0 HcmV?d00001 diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc new file mode 100644 index 0000000..4f9ac26 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore new file mode 100644 index 0000000..0711527 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json new file mode 100644 index 0000000..027f33c --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json @@ -0,0 +1,106 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "1-sign-in-angular": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/1-sign-in-angular", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "1-sign-in-angular:build:production" + }, + "development": { + "buildTarget": "1-sign-in-angular:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "1-sign-in-angular:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.css" + ], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js new file mode 100644 index 0000000..039ebc5 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js @@ -0,0 +1,46 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/1-sign-in-angular'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + browsers: ['Chrome'], + customLaunchers: { + ChromeHeadlessCI: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'] + } + }, + restartOnFileChange: true, + singleRun: true + }); +}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json new file mode 100644 index 0000000..3eddc30 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json @@ -0,0 +1,13548 @@ +{ + "name": "1-sign-in-angular", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "1-sign-in-angular", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^18.0.2", + "@angular/cdk": "^18.0.2", + "@angular/common": "^18.0.2", + "@angular/compiler": "^18.0.2", + "@angular/core": "^18.0.2", + "@angular/forms": "^18.0.2", + "@angular/material": "^18.0.2", + "@angular/platform-browser": "^18.0.2", + "@angular/platform-browser-dynamic": "^18.0.2", + "@angular/router": "^18.0.2", + "@azure/msal-angular": "^3.0.20", + "@azure/msal-browser": "^3.17.0", + "rxjs": "~7.8.1", + "tslib": "^2.6.3", + "zone.js": "~0.14.7" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.0.3", + "@angular/cli": "~18.0.3", + "@angular/compiler-cli": "^18.0.2", + "@types/jasmine": "~5.1.4", + "jasmine-core": "~5.1.2", + "karma": "~6.4.3", + "karma-chrome-launcher": "^3.2.0", + "karma-coverage": "~2.2.1", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.3.tgz", + "integrity": "sha512-4yba7x315GKim7OuBgv89ZtG50hE3hw64KuRLSGuW+RvwcwLV24VanmdWmFiLC4RKYNSH13E0wZqDNJkrMQepw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.1.3", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.1.3.tgz", + "integrity": "sha512-1avnneitUEfC2A9HX24X6a7Ag8sHkxomVEBsggITFNQoGnZAZHCOBRzm3b9QiqTi1c1eH3p8teW8EAufEjFPKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1801.3", + "@angular-devkit/build-webpack": "0.1801.3", + "@angular-devkit/core": "18.1.3", + "@angular/build": "18.1.3", + "@babel/core": "7.24.7", + "@babel/generator": "7.24.7", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.24.7", + "@babel/plugin-transform-async-to-generator": "7.24.7", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.24.7", + "@babel/runtime": "7.24.7", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "18.1.3", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.19", + "babel-loader": "9.1.3", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "12.0.2", + "critters": "0.0.24", + "css-loader": "7.1.2", + "esbuild-wasm": "0.21.5", + "fast-glob": "3.3.2", + "http-proxy-middleware": "3.0.0", + "https-proxy-agent": "7.0.5", + "istanbul-lib-instrument": "6.0.2", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "12.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "magic-string": "0.30.10", + "mini-css-extract-plugin": "2.9.0", + "mrmime": "2.0.0", + "open": "10.1.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "postcss": "8.4.38", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.77.6", + "sass-loader": "14.2.1", + "semver": "7.6.2", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.29.2", + "tree-kill": "1.2.2", + "tslib": "2.6.3", + "undici": "6.19.2", + "vite": "5.3.2", + "watchpack": "2.4.1", + "webpack": "5.92.1", + "webpack-dev-middleware": "7.2.1", + "webpack-dev-server": "5.0.4", + "webpack-merge": "5.10.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.21.5" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^18.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1801.3.tgz", + "integrity": "sha512-JezRR72P4QAc4mnkT60/+kVANCYNKcr2sZyX0/9aBHJsR7lIqgOKz5Dft3FgWHwAJcQFtsZ7OLGVOW3P1LpFkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1801.3", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/core": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.3.tgz", + "integrity": "sha512-S0UzNNVLbHPaiSVXHjCd2wX+eERj/YR7jJCc40PHs1gINA7Gtd2q3VDm3bUEWe4P6fP6GNp43qSXmWJFQD0+Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.16.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.7.tgz", + "integrity": "sha512-U0lYPjhOaxdw+0UwVsv5y+wJdZ6DD+0ASiommB7j9kEmrPp53MhSvYNYWvwbIWwJceDa3eNq3fAmQOlVXvFCVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.0.7", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.10", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", + "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.13.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/animations": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.1.3.tgz", + "integrity": "sha512-jF4jGHZxV/REnymB11wg5q/DMXewJ0byihmvNQ3OPLHGkWnvE9MdrX44vUzI7RkzqO0suaAg8shxJlkY3OHjeA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.1.3" + } + }, + "node_modules/@angular/build": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.1.3.tgz", + "integrity": "sha512-jmTQC7lecJ6c2mJobb5nY2CN6jvdeFFHXN/jif0RkNI8dP60uV1QdMKJtTGbxEtAKXdMgOTReYICVYl6m9Q56Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1801.3", + "@babel/core": "7.24.7", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.24.7", + "@inquirer/confirm": "3.1.11", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "browserslist": "^4.23.0", + "critters": "0.0.24", + "esbuild": "0.21.5", + "fast-glob": "3.3.2", + "https-proxy-agent": "7.0.5", + "lmdb": "3.0.12", + "magic-string": "0.30.10", + "mrmime": "2.0.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "rollup": "4.18.0", + "sass": "1.77.6", + "semver": "7.6.2", + "undici": "6.19.2", + "vite": "5.3.2", + "watchpack": "2.4.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "less": "^4.2.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/cdk": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.3.tgz", + "integrity": "sha512-u14xbuXQz+36nBeHSwRcwRoS64WNhOdK97H47nI1WaIZZaGGvKHR1Wwk2XletDRtIHv2622sJm8h+dbaBNeTGQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^18.0.0 || ^19.0.0", + "@angular/core": "^18.0.0 || ^19.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.0.7.tgz", + "integrity": "sha512-CHnpI6d6MpXFsx3750jN4IX3oeieIMKzUPVZUMvPgDbhGFfChHKdxdJStDjYsH47pORb2pMHULw0RJCAPvtB9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1800.7", + "@angular-devkit/core": "18.0.7", + "@angular-devkit/schematics": "18.0.7", + "@schematics/angular": "18.0.7", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.2", + "inquirer": "9.2.22", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.2", + "npm-pick-manifest": "9.0.1", + "ora": "5.4.1", + "pacote": "18.0.6", + "resolve": "1.22.8", + "semver": "7.6.2", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1800.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.7.tgz", + "integrity": "sha512-ZYIjdngUOjY6G2XJGHtATLr+HhJWdo7Z3ATlzQTGI9D1a02kW3UFlELQBhFIn+1o78FU6W0STZgyfBH8M7wD2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.0.7", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", + "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.13.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/cli/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular/cli/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/common": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.1.3.tgz", + "integrity": "sha512-TC71jVph4L+QaXlyJTrW27nbqis4sWwr9hD/RDSNkfY9XCvYDb2MjYjKrpbN03FWiv7lmcKT9zgse1fYENFsKQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.1.3.tgz", + "integrity": "sha512-Mrcd+YGsz02GVnVlVbzYp7EJIVoPOIHMvhll1OiylhjQElNVeJCLPIvjVYdylzOUDctXNlchkGf/LbA7BYMbXg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.1.3" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.1.3.tgz", + "integrity": "sha512-e9t5v/L1KqPLUQL+WU+d70MBBFcSRuwqbkluZgdDjdW5VelYjzlVzXdrzV6jFElP48T3kQCxJN1dAJkAvKjdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.24.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "18.1.3", + "typescript": ">=5.4 <5.6" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/core": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.1.3.tgz", + "integrity": "sha512-1tFTyGLwio5oYAP2sMVDiOvy5wl/v0a4om7RTCpP2Bjro0ynuYe8FK7ilcmdyPXR1DF7GVdo/0R/eCIQJZ2PwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.0" + } + }, + "node_modules/@angular/forms": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.1.3.tgz", + "integrity": "sha512-4kic/9hpS0HkbTORIkrdox7K40EcVT9VIbBruPoxX7jbfiW5jFaJ/05hLRvRt9RF8Sd9G+g5Uohmkcq/5hmsng==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.1.3", + "@angular/core": "18.1.3", + "@angular/platform-browser": "18.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.1.3.tgz", + "integrity": "sha512-4xsn84orqtJwE9c2kgHeMxP/rOEvs8XrUOcyA89WE025uDXk69lAsm7XsCpwOL9iDjTBFPTOXFIbR+s9jvU39w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^18.0.0 || ^19.0.0", + "@angular/cdk": "18.1.3", + "@angular/common": "^18.0.0 || ^19.0.0", + "@angular/core": "^18.0.0 || ^19.0.0", + "@angular/forms": "^18.0.0 || ^19.0.0", + "@angular/platform-browser": "^18.0.0 || ^19.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.3.tgz", + "integrity": "sha512-/k5Xt/WjOk6OlRqb1Wd0ZUQ3NjSbafQyDC9Icy0Mb8qJtiXZjA4VCMkZIiQD7cBxO0F/BsAiYnYNjWrIkCZICA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "18.1.3", + "@angular/common": "18.1.3", + "@angular/core": "18.1.3" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.1.3.tgz", + "integrity": "sha512-VhYfyPcdKrsLrkd5Lq7W+pqE49DZBpUeCqM/Q+s9rhTSiCCKe9Ikktq8yPZ9iHDpFr203P+T1EMHmILnLvf+gQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.1.3", + "@angular/compiler": "18.1.3", + "@angular/core": "18.1.3", + "@angular/platform-browser": "18.1.3" + } + }, + "node_modules/@angular/router": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.1.3.tgz", + "integrity": "sha512-6fXiTgdUnaGGF32Un4+7LttG1N9rziansigvLBzFG//qYU0Ihk49phqDdWxz11iaJ+uK1YVafkjSFvV7z9cgDA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.1.3", + "@angular/core": "18.1.3", + "@angular/platform-browser": "18.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@azure/msal-angular": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@azure/msal-angular/-/msal-angular-3.0.23.tgz", + "integrity": "sha512-RTJSDCVFNVs7SNQC9wlKE8xoYzPiNoCatTlCI8m3pOd1AtWdDAwj2LI6NkrK5zZ/GCHgFUVSc3GO2pTQS5I+JA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@azure/msal-browser": "^3.20.0", + "rxjs": "^7.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.20.0.tgz", + "integrity": "sha512-ErsxbfCGIwdqD8jipqdxpfAGiUEQS7MWUe39Rjhl0ZVPsb1JEe9bZCe2+0g23HDH6DGyCAtnTNN9scPtievrMQ==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.14.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.14.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.0.tgz", + "integrity": "sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@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, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz", + "integrity": "sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^8.2.4", + "@inquirer/type": "^1.3.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.4.tgz", + "integrity": "sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.3", + "@inquirer/type": "^1.3.3", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.9", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "picocolors": "^1.0.1", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", + "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", + "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.12.tgz", + "integrity": "sha512-vgTwzNUD3Hy4aqtGhX2+nV/usI0mwy3hDRuTjs8VcK0BLiMVEpNQXgzwlWEgPmA8AAPloUgyOs2nK5clJF5oIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.12.tgz", + "integrity": "sha512-qOt0hAhj2ZLY6aEWu85rzt5zcyCAQITMhCMEPNlo1tuYekpVAdkQNiwXxEkCjBYvwTskvXuwXOOUpjuSc+aJnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.12.tgz", + "integrity": "sha512-Ggd/UXpE+alMncbELCXA3OKpDj9bDBR3qVO7WRTxstloDglRAHfZmUJgTkeaNKjFO1JHqS7AKy0jba9XebZB1w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.12.tgz", + "integrity": "sha512-Qy4cFXFe9h1wAWMsojex8x1ifvw2kqiZv686YiRTdQEzAfc3vJASHFcD/QejHUCx7YHMYdnUoCS45rG2AiGDTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.12.tgz", + "integrity": "sha512-c+noT9IofktxktFllKHFmci8ka2SYGSLN17pj/KSl1hg7mmfAiGp4xxFxEwMLTb+SX95vP1DFiR++1I3WLVxvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.12.tgz", + "integrity": "sha512-CO3MFV8gUx16NU/CyyuumAKblESwvoGVA2XhQKZ976OTOxaTbb8F8D3f0iiZ4MYqsN74jIrFuCmXpPnpjbhfOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ngtools/webpack": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.3.tgz", + "integrity": "sha512-VmqOO8CcXKL06anNYlL0OkrqIuBNZQu5n0YVP4z8oneJhDBqwK2++dK0WpcNyIFcg3HsQ7w3BuqUWJ4iPiWxEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "typescript": ">=5.4 <5.6", + "webpack": "^5.54.0" + } + }, + "node_modules/@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, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.0.7.tgz", + "integrity": "sha512-46jcRDnMYfnwN5CAXimbptbrBdLrNhG3NFGNT1B2O9DzmlXwLclK/z7lz/v70RcBNWMnOcnsYMFB4IbLhN/Fog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.0.7", + "@angular-devkit/schematics": "18.0.7", + "jsonc-parser": "3.2.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", + "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.13.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@schematics/angular/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.14.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", + "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@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, + "license": "BSD-3-Clause" + }, + "node_modules/@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, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001650", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001650.tgz", + "integrity": "sha512-fgEc7hP/LB7iicdXHUI9VsBsMZmUmlVJeQP2qqQW+3lkqVhbmjEU8zp+h5stWeilX+G7uXuIUIIlWlDw9jdt8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT" + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/critters": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", + "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT" + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz", + "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==", + "dev": true, + "license": "ISC" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.21.5.tgz", + "integrity": "sha512-L/FlOPMMFtw+6qPAbuPvJXdrOYOp9yx/PEwSrIZW0qghY4vgV003evdYDwqQ/9ENMQI0B6RMod9xT4FHtto6OQ==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/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, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/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, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/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, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.22", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.22.tgz", + "integrity": "sha512-SqLLa/Oe5rZUagTR9z+Zd6izyatHglbmbvVofo1KzuVB54YHleWzeHNLoR7FOICGOeQSqeLh1cordb3MzhGcEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.2", + "@ljharb/through": "^2.3.13", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", + "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/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, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT" + }, + "node_modules/karma/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/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, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", + "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/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, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lmdb": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.12.tgz", + "integrity": "sha512-JnoEulTgveoC64vlYJ9sufGLuNkk6TcxSYpKxSC9aM42I61jIv3pQH0fgb6qW7HV0+FNqA3g1WCQQYfhfawGoQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.10.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.0.12", + "@lmdb/lmdb-darwin-x64": "3.0.12", + "@lmdb/lmdb-linux-arm": "3.0.12", + "@lmdb/lmdb-linux-arm64": "3.0.12", + "@lmdb/lmdb-linux-x64": "3.0.12", + "@lmdb/lmdb-win32-x64": "3.0.12" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", + "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/nice-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", + "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT" + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ordered-binary": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", + "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/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, + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", + "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", + "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", + "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/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, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", + "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.2.tgz", + "integrity": "sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz", + "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "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.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/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, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/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, + "license": "MIT" + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/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, + "license": "MIT" + }, + "node_modules/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, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", + "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", + "license": "MIT" + } + } +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json new file mode 100644 index 0000000..8f74dd6 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json @@ -0,0 +1,43 @@ +{ + "name": "1-sign-in-angular", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test --watch=false --no-progress --browsers=ChromeHeadlessCI", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^18.0.2", + "@angular/cdk": "^18.0.2", + "@angular/common": "^18.0.2", + "@angular/compiler": "^18.0.2", + "@angular/core": "^18.0.2", + "@angular/forms": "^18.0.2", + "@angular/material": "^18.0.2", + "@angular/platform-browser": "^18.0.2", + "@angular/platform-browser-dynamic": "^18.0.2", + "@angular/router": "^18.0.2", + "@azure/msal-angular": "^3.0.20", + "@azure/msal-browser": "^3.17.0", + "rxjs": "~7.8.1", + "tslib": "^2.6.3", + "zone.js": "~0.14.7" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.0.3", + "@angular/cli": "~18.0.3", + "@angular/compiler-cli": "^18.0.2", + "@types/jasmine": "~5.1.4", + "jasmine-core": "~5.1.2", + "karma": "~6.4.3", + "karma-chrome-launcher": "^3.2.0", + "karma-coverage": "~2.2.1", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.5" + } +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts new file mode 100644 index 0000000..dcd054b --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts @@ -0,0 +1,40 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { BrowserUtils } from '@azure/msal-browser'; +import { MsalGuard } from '@azure/msal-angular'; + +import { HomeComponent } from './home/home.component'; +import { GuardedComponent } from './guarded/guarded.component'; + +/** + * MSAL Angular can protect routes in your application + * using MsalGuard. For more info, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/initialization.md#secure-the-routes-in-your-application + */ +const routes: Routes = [ + { + path: 'guarded', + component: GuardedComponent, + canActivate: [ + MsalGuard + ] + }, + { + path: '', + component: HomeComponent, + }, +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { + // Don't perform initial navigation in iframes or popups + initialNavigation: + !BrowserUtils.isInIframe() && !BrowserUtils.isInPopup() + ? 'enabledNonBlocking' + : 'disabled', // Set to enabledBlocking to use Angular Universal + }), + ], + exports: [RouterModule], +}) +export class AppRoutingModule { } diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css new file mode 100644 index 0000000..ecdc1e2 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css @@ -0,0 +1,22 @@ +.toolbar-spacer { + flex: 1 1 auto; +} + +a.title { + color: white; +} + +footer { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + color: white; + text-align: center; +} + +.footer-text { + font-size: small; + text-align: center; + flex: 1 1 auto; +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html new file mode 100644 index 0000000..535543e --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html @@ -0,0 +1,19 @@ + + {{ title }} +
+ Guarded Component + + +
+
+ + +
+ diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts new file mode 100644 index 0000000..6322cd5 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts @@ -0,0 +1,148 @@ +import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; +import { + MsalService, + MsalBroadcastService, + MSAL_GUARD_CONFIG, + MsalGuardConfiguration, +} from '@azure/msal-angular'; +import { + AuthenticationResult, + InteractionStatus, + InteractionType, + PopupRequest, + RedirectRequest, + EventMessage, + EventType +} from '@azure/msal-browser'; +import { Subject } from 'rxjs'; +import { filter, takeUntil } from 'rxjs/operators'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'], +}) +export class AppComponent implements OnInit, OnDestroy { + title = 'Microsoft identity platform'; + loginDisplay = false; + isIframe = false; + + private readonly _destroying$ = new Subject(); + + constructor( + @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, + private authService: MsalService, + private msalBroadcastService: MsalBroadcastService, + ) { } + + ngOnInit(): void { + this.isIframe = window !== window.parent && !window.opener; + this.setLoginDisplay(); + this.authService.instance.enableAccountStorageEvents(); // Optional - This will enable ACCOUNT_ADDED and ACCOUNT_REMOVED events emitted when a user logs in or out of another tab or window + + /** + * You can subscribe to MSAL events as shown below. For more info, + * visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md + */ + this.msalBroadcastService.inProgress$ + .pipe( + filter( + (status: InteractionStatus) => status === InteractionStatus.None + ), + takeUntil(this._destroying$) + ) + .subscribe(() => { + this.setLoginDisplay(); + this.checkAndSetActiveAccount(); + }); + + this.msalBroadcastService.msalSubject$ + .pipe( + filter( + (msg: EventMessage) => msg.eventType === EventType.LOGOUT_SUCCESS + ), + takeUntil(this._destroying$) + ) + .subscribe((result: EventMessage) => { + this.setLoginDisplay(); + this.checkAndSetActiveAccount(); + }); + + + this.msalBroadcastService.msalSubject$ + .pipe( + filter( + (msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS + ), + takeUntil(this._destroying$) + ) + .subscribe((result: EventMessage) => { + const payload = result.payload as AuthenticationResult; + this.authService.instance.setActiveAccount(payload.account); + }); + } + + setLoginDisplay() { + this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; + } + + checkAndSetActiveAccount() { + /** + * If no active account set but there are accounts signed in, sets first account to active account + * To use active account set here, subscribe to inProgress$ first in your component + * Note: Basic usage demonstrated. Your app may require more complicated account selection logic + */ + let activeAccount = this.authService.instance.getActiveAccount(); + + if (!activeAccount && this.authService.instance.getAllAccounts().length > 0) { + let accounts = this.authService.instance.getAllAccounts(); + // add your code for handling multiple accounts here + this.authService.instance.setActiveAccount(accounts[0]); + } + } + + login() { + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + if (this.msalGuardConfig.authRequest) { + this.authService.loginPopup({ + ...this.msalGuardConfig.authRequest, + } as PopupRequest) + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } else { + this.authService.loginPopup() + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } + } else { + if (this.msalGuardConfig.authRequest) { + this.authService.loginRedirect({ + ...this.msalGuardConfig.authRequest, + } as RedirectRequest); + } else { + this.authService.loginRedirect(); + } + } + } + + logout() { + + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + this.authService.logoutPopup({ + account: this.authService.instance.getActiveAccount(), + }); + } else { + this.authService.logoutRedirect({ + account: this.authService.instance.getActiveAccount(), + }); + } + } + + // unsubscribe to events when component is destroyed + ngOnDestroy(): void { + this._destroying$.next(undefined); + this._destroying$.complete(); + } +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts new file mode 100644 index 0000000..799ca2e --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts @@ -0,0 +1,99 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; + +import { MatToolbarModule } from "@angular/material/toolbar"; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatTableModule } from '@angular/material/table'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatDialogModule } from '@angular/material/dialog'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MatIconModule } from '@angular/material/icon'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { HomeComponent } from './home/home.component'; +import { GuardedComponent } from './guarded/guarded.component'; + +import { + IPublicClientApplication, + PublicClientApplication, + InteractionType, +} from '@azure/msal-browser'; + +import { + MSAL_INSTANCE, + MsalGuardConfiguration, + MSAL_GUARD_CONFIG, + MsalService, + MsalBroadcastService, + MsalGuard, + MsalRedirectComponent, + MsalInterceptor, + MsalModule, +} from '@azure/msal-angular'; + +import { msalConfig, loginRequest } from './auth-config'; + +/** + * Here we pass the configuration parameters to create an MSAL instance. + * For more info, visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md + */ +export function MSALInstanceFactory(): IPublicClientApplication { + return new PublicClientApplication(msalConfig); +} + +/** + * Set your default interaction type for MSALGuard here. If you have any + * additional scopes you want the user to consent upon login, add them here as well. + */ +export function MsalGuardConfigurationFactory(): MsalGuardConfiguration { + return { + interactionType: InteractionType.Redirect, + authRequest: loginRequest + }; +} + +@NgModule({ + declarations: [ + AppComponent, + HomeComponent, + GuardedComponent, + ], + imports: [ + BrowserModule, + BrowserAnimationsModule, + AppRoutingModule, + MatToolbarModule, + MatButtonModule, + MatCardModule, + MatTableModule, + MatMenuModule, + HttpClientModule, + BrowserAnimationsModule, + MatDialogModule, + MatIconModule, + MsalModule, + ], + providers: [ + { + provide: HTTP_INTERCEPTORS, + useClass: MsalInterceptor, + multi: true, + }, + { + provide: MSAL_INSTANCE, + useFactory: MSALInstanceFactory, + }, + { + provide: MSAL_GUARD_CONFIG, + useFactory: MsalGuardConfigurationFactory, + }, + MsalService, + MsalBroadcastService, + MsalGuard, + ], + bootstrap: [AppComponent, MsalRedirectComponent], +}) +export class AppModule { } diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts new file mode 100644 index 0000000..33d5ebc --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts @@ -0,0 +1,48 @@ +/** + * This file contains authentication parameters. Contents of this file + * is roughly the same across other MSAL.js libraries. These parameters + * are used to initialize Angular and MSAL Angular configurations in + * in app.module.ts file. + */ + +import { + LogLevel, + Configuration, + BrowserCacheLocation, +} from '@azure/msal-browser'; + +/** + * Configuration object to be passed to MSAL instance on creation. + * For a full list of MSAL.js configuration parameters, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md + */ +export const msalConfig: Configuration = { + auth: { + clientId: 'd40f3188-3369-4f79-94b9-f1504a0e4c5b', // This is the ONLY mandatory field that you need to supply. + authority: 'https://justrebldemo.ciamlogin.com/', // Replace the placeholder with your tenant subdomain + redirectUri: '/', // Points to window.location.origin by default. You must register this URI on Microsoft Entra admin center/App Registration. + postLogoutRedirectUri: '/', // Points to window.location.origin by default. + }, + cache: { + cacheLocation: BrowserCacheLocation.LocalStorage, // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO between tabs. + }, + system: { + loggerOptions: { + loggerCallback(logLevel: LogLevel, message: string) { + console.log(message); + }, + logLevel: LogLevel.Verbose, + piiLoggingEnabled: false, + }, + }, +}; + +/** + * Scopes you add here will be prompted for user consent during sign-in. + * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. + * For more information about OIDC scopes, visit: + * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes + */ +export const loginRequest = { + scopes: [], +}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts new file mode 100644 index 0000000..3d1c2fd --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts @@ -0,0 +1,194 @@ +/** + * Populate claims table with appropriate description + * @param {Record} claims ID token claims + * @returns claimsTable + */ +export const createClaimsTable = (claims: Record): any[] => { + const claimsTable: any[] = []; + + Object.keys(claims).map((key) => { + switch (key) { + case 'aud': + populateClaim( + key, + claims[key], + "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Microsoft Entra admin center.", + claimsTable + ); + break; + case 'iss': + populateClaim( + key, + claims[key], + 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the external tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0.', + claimsTable + ); + break; + case 'iat': + populateClaim( + key, + changeDateFormat(+claims[key]), + '"Issued At" indicates the timestamp (UNIX timestamp) when the authentication for this user occurred.', + claimsTable + ); + break; + case 'nbf': + populateClaim( + key, + changeDateFormat(+claims[key]), + 'The nbf (not before) claim dictates the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', + claimsTable + ); + break; + case 'exp': + populateClaim( + key, + changeDateFormat(+claims[key]), + "The exp (expiration time) claim dictates the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", + claimsTable + ); + break; + case 'name': + populateClaim( + key, + claims[key], + "The name claim provides a human-readable value that identifies the subject of the token. The value isn't guaranteed to be unique, it can be changed, and it's designed to be used only for display purposes. The 'profile' scope is required to receive this claim.", + claimsTable + ); + break; + case 'preferred_username': + populateClaim( + key, + claims[key], + 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', + claimsTable + ); + break; + case 'nonce': + populateClaim( + key, + claims[key], + 'The nonce matches the parameter included in the original /authorize request to the IDP.', + claimsTable + ); + break; + case 'oid': + populateClaim( + key, + claims[key], + 'The oid (user object id) is the only claim that should be used to uniquely identify a user in an external tenant.', + claimsTable + ); + break; + case 'tid': + populateClaim( + key, + claims[key], + 'The id of the tenant where this application resides. You can use this claim to ensure that only users from the current external tenant can access this app.', + claimsTable + ); + break; + case 'upn': + populateClaim( + key, + claims[key], + 'upn (user principal name) might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', + claimsTable + ); + break; + case 'email': + populateClaim( + key, + claims[key], + 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', + claimsTable + ); + break; + case 'acct': + populateClaim( + key, + claims[key], + 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', + claimsTable + ); + break; + case 'sid': + populateClaim( + key, + claims[key], + 'Session ID, used for per-session user sign-out.', + claimsTable + ); + break; + case 'sub': + populateClaim( + key, + claims[key], + 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', + claimsTable + ); + break; + case 'ver': + populateClaim( + key, + claims[key], + 'Version of the token issued by the Microsoft identity platform', + claimsTable + ); + break; + case 'login_hint': + populateClaim( + key, + claims[key], + 'An opaque, reliable login hint claim. This claim is the best value to use for the login_hint OAuth parameter in all flows to get SSO.', + claimsTable + ); + break; + case 'idtyp': + populateClaim( + key, + claims[key], + 'Value is app when the token is an app-only token. This is the most accurate way for an API to determine if a token is an app token or an app+user token', + claimsTable + ); + break; + case 'uti': + case 'rh': + break; + default: + populateClaim(key, claims[key], '', claimsTable); + } + }); + + return claimsTable; +}; + +/** + * Populates claim, description, and value into an claimsObject + * @param {String} claim + * @param {String} value + * @param {String} description + * @param {Array} claimsObject + */ +const populateClaim = ( + claim: string, + value: string, + description: string, + claimsTable: any[] +): void => { + claimsTable.push({ + claim: claim, + value: value, + description: description, + }); +}; + +/** + * Transforms Unix timestamp to date and returns a string value of that date + * @param {number} date Unix timestamp + * @returns + */ +const changeDateFormat = (date: number) => { + let dateObj = new Date(date * 1000); + return `${date} - [${dateObj.toString()}]`; +}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html new file mode 100644 index 0000000..6a5e109 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html @@ -0,0 +1 @@ +

This component is guarded. You can see this because you're signed-in.

diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts new file mode 100644 index 0000000..90e9903 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-guarded', + templateUrl: './guarded.component.html', + styleUrls: ['./guarded.component.css'] +}) +export class GuardedComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css new file mode 100644 index 0000000..8f48484 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css @@ -0,0 +1,26 @@ +#table-container { + height: '100vh'; + overflow: auto; +} + +table { + margin: 3% auto 1% auto; + width: 70%; +} + +.mat-row { + height: auto; +} + +.mat-cell { + padding: 8px 8px 8px 0; +} + +p { + text-align: center; +} + +.card-section { + margin: 10%; + padding: 5%; +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html new file mode 100644 index 0000000..fe23f91 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html @@ -0,0 +1,34 @@ + + Angular single-page application built with MSAL Angular + Sign-in with Microsoft Entra External ID + This sample demonstrates how to configure MSAL Angular to sign-up, sign-in and sign-out with Microsoft Entra External ID + + +
+

See below the claims in your ID token . For more + information, visit: + + docs.microsoft.com + +

+
+
ApplicationAppIdUrl in the Microsoft Entra admin center
+ + + + + + + + + + + + + + + + + +
Claim {{element.claim}} Value {{element.value}} Description {{element.description}}
+ diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts new file mode 100644 index 0000000..dcde911 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts @@ -0,0 +1,77 @@ +import { Component, Inject, OnInit } from '@angular/core'; +import { Subject } from 'rxjs'; +import { filter } from 'rxjs/operators'; + +import { MsalBroadcastService, MsalGuardConfiguration, MsalService, MSAL_GUARD_CONFIG } from '@azure/msal-angular'; +import { AuthenticationResult, InteractionStatus, InteractionType } from '@azure/msal-browser'; + +import { createClaimsTable } from '../claim-utils'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.css'], +}) +export class HomeComponent implements OnInit { + loginDisplay = false; + dataSource: any = []; + displayedColumns: string[] = ['claim', 'value', 'description']; + + private readonly _destroying$ = new Subject(); + + constructor( + @Inject(MSAL_GUARD_CONFIG) + private msalGuardConfig: MsalGuardConfiguration, + private authService: MsalService, + private msalBroadcastService: MsalBroadcastService + ) { } + + ngOnInit(): void { + + this.msalBroadcastService.inProgress$ + .pipe( + filter((status: InteractionStatus) => status === InteractionStatus.None) + ) + .subscribe(() => { + this.setLoginDisplay(); + this.getClaims( + this.authService.instance.getActiveAccount()?.idTokenClaims + ); + }); + } + + setLoginDisplay() { + this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; + } + + getClaims(claims: any) { + if (claims) { + const claimsTable = createClaimsTable(claims); + this.dataSource = [...claimsTable]; + } + } + + signUp() { + if (this.msalGuardConfig.interactionType === InteractionType.Popup) { + this.authService.loginPopup({ + scopes: [], + prompt: 'create', + }) + .subscribe((response: AuthenticationResult) => { + this.authService.instance.setActiveAccount(response.account); + }); + } else { + this.authService.loginRedirect({ + scopes: [], + prompt: 'create', + }); + } + + } + + // unsubscribe to events when component is destroyed + ngOnDestroy(): void { + this._destroying$.next(undefined); + this._destroying$.complete(); + } +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts new file mode 100644 index 0000000..281c0a7 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts @@ -0,0 +1,108 @@ +import { Router, RouterModule } from '@angular/router'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MSAL_GUARD_CONFIG, MsalGuardConfiguration } from '@azure/msal-angular'; +import { InteractionType } from '@azure/msal-browser'; + +import { msalConfig } from './auth-config'; +import { AppComponent } from './app.component'; +import { AppModule } from './app.module'; + +describe('Sanitize the configuration object', () => { + + it('should define the config object', () => { + expect(msalConfig).toBeDefined(); + expect(msalConfig.auth.clientId).toBeDefined(); + expect(msalConfig.auth.authority).toBeDefined(); + expect(msalConfig.auth.redirectUri).toBeDefined(); + }); + + it('should not contain client id', () => { + const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + expect(regexGuid.test(msalConfig.auth.clientId)).toBe(false); + }); + + it('should not contain tenant id', () => { + const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + expect(regexGuid.test(msalConfig.auth.authority!.split(".com/")[1])).toBe(false); + }); +}); + +describe('Ensure that the app starts', () => { + it('should boot the app', () => { + const bootApplication = () => { + const { router, run } = setup(); + + run(() => router.initialNavigation()); + }; + + expect(bootApplication).not.toThrow(); + }); + + it(`should have as title 'Microsoft identity platform'`, async () => { + const { fixture } = setup(); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('Microsoft identity platform'); + }); + + it('should navigate to unguarded route', async () => { + const { router, run } = setup(); + + const canNavigate = await run(() => router.navigateByUrl('/')); + + expect(canNavigate).toBe(true); + }); + + it('should not navigate to guarded component', async () => { + const { router, run } = setup(); + + const canNavigate = await run(() => router.navigateByUrl('/guarded')); + + expect(canNavigate).toBe(false); + }); +}); + +function setup() { + + function MSALGuardConfigFactory(): MsalGuardConfiguration { + return { + interactionType: InteractionType.Redirect, + }; + } + + TestBed.configureTestingModule({ + imports: [ + AppModule, + RouterModule.forRoot([]), + ], + providers: [ + { + provide: MSAL_GUARD_CONFIG, + useFactory: MSALGuardConfigFactory + } + ] + }).compileComponents(); + + let rootFixture: ComponentFixture; + const initializeRootFixture = () => { + if (rootFixture == null) { + rootFixture = TestBed.createComponent(AppComponent); + } + }; + + return { + get router() { + initializeRootFixture(); + + return TestBed.inject(Router); + }, + run(task: () => TResult) { + initializeRootFixture(); + + return rootFixture.ngZone == null + ? task() + : rootFixture.ngZone.run(task); + }, + fixture: TestBed.createComponent(AppComponent) + }; +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts new file mode 100644 index 0000000..f56ff47 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg new file mode 100644 index 0000000..1284553 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + Icon-identity-221 + + + + + + + + diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html new file mode 100644 index 0000000..2ca15fa --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html @@ -0,0 +1,17 @@ + + + + + Microsoft identity platform + + + + + + + + + + + + diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts new file mode 100644 index 0000000..429bb9e --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts @@ -0,0 +1,53 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css new file mode 100644 index 0000000..de5d5b9 --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css @@ -0,0 +1,3 @@ +@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts new file mode 100644 index 0000000..064ebac --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts @@ -0,0 +1,21 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json new file mode 100644 index 0000000..dbf360d --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json @@ -0,0 +1,32 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2022", + "module": "es2022", + "lib": [ + "es2020", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json new file mode 100644 index 0000000..4a1ffa9 --- /dev/null +++ b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "CIAM-JSAngular-SPA-AuthCode", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From 39402a36fe7d08876aa2e0692dacb78afc647514 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Wed, 15 Jan 2025 17:21:45 +0000 Subject: [PATCH 04/11] working JS Vanilla --- .devcontainer/devcontainer.json | 7 +- .vscode/projects.code-workspace | 2 +- .../.vscode/extensions.json | 0 src/SPA_JS_Vanilla/App/package-lock.json | 5393 ++++++ src/SPA_JS_Vanilla/App/package.json | 23 + src/SPA_JS_Vanilla/App/public/authConfig.js | 68 + src/SPA_JS_Vanilla/App/public/authPopup.js | 99 + src/SPA_JS_Vanilla/App/public/authRedirect.js | 103 + src/SPA_JS_Vanilla/App/public/claimUtils.js | 224 + .../App/public}/favicon.svg | 0 src/SPA_JS_Vanilla/App/public/index.html | 68 + src/SPA_JS_Vanilla/App/public/redirect.html | 6 + src/SPA_JS_Vanilla/App/public/signout.html | 19 + src/SPA_JS_Vanilla/App/public/styles.css | 8 + src/SPA_JS_Vanilla/App/public/ui.js | 32 + src/SPA_JS_Vanilla/App/sample.test.js | 58 + src/SPA_JS_Vanilla/App/server.js | 38 + .../README.md | 284 +- .../.vscode/launch.json | 23 - .../.vscode/msEntraSampleConfig.json | 1 - .../.vscode/msEntraSampleLaunch.js | 24 - .../.vscode/vsCodeLaunchAngularSample.js | 12 - .../AppCreationScripts/AppCreationScripts.md | 137 - .../AppCreationScripts/Cleanup.ps1 | 152 - .../AppCreationScripts/Configure.ps1 | 329 - .../AppCreationScripts/apps.json | 47 - .../AppCreationScripts/quickstart.md | 31 - .../AppCreationScripts/sample.json | 63 - .../ReadmeFiles/screenshot.png | Bin 31735 -> 0 bytes .../ReadmeFiles/topology.png | Bin 45846 -> 0 bytes .../SPA/.browserslistrc | 16 - .../SPA/.editorconfig | 16 - .../SPA/.gitignore | 42 - .../SPA/angular.json | 106 - .../SPA/karma.conf.js | 46 - .../SPA/package-lock.json | 13548 ---------------- .../SPA/package.json | 43 - .../SPA/src/app/app-routing.module.ts | 40 - .../SPA/src/app/app.component.css | 22 - .../SPA/src/app/app.component.html | 19 - .../SPA/src/app/app.component.ts | 148 - .../SPA/src/app/app.module.ts | 99 - .../SPA/src/app/auth-config.ts | 48 - .../SPA/src/app/claim-utils.ts | 194 - .../SPA/src/app/guarded/guarded.component.css | 0 .../src/app/guarded/guarded.component.html | 1 - .../SPA/src/app/guarded/guarded.component.ts | 15 - .../SPA/src/app/home/home.component.css | 26 - .../SPA/src/app/home/home.component.html | 34 - .../SPA/src/app/home/home.component.ts | 77 - .../SPA/src/app/sample.spec.ts | 108 - .../SPA/src/assets/.gitkeep | 0 .../SPA/src/environments/environment.prod.ts | 3 - .../SPA/src/environments/environment.ts | 16 - .../SPA/src/index.html | 17 - .../SPA/src/main.ts | 12 - .../SPA/src/polyfills.ts | 53 - .../SPA/src/styles.css | 3 - .../SPA/src/test.ts | 21 - .../SPA/tsconfig.app.json | 15 - .../SPA/tsconfig.json | 32 - .../SPA/tsconfig.spec.json | 18 - .../.vscode/extensions.json | 5 - .../.vscode/launch.json | 23 - .../.vscode/msEntraSampleConfig.json | 1 - .../.vscode/msEntraSampleLaunch.js | 24 - .../.vscode/vsCodeLaunchAngularSample.js | 12 - .../AppCreationScripts/AppCreationScripts.md | 137 - .../AppCreationScripts/Cleanup.ps1 | 152 - .../AppCreationScripts/Configure.ps1 | 329 - .../AppCreationScripts/apps.json | 47 - .../AppCreationScripts/quickstart.md | 31 - .../AppCreationScripts/sample.json | 63 - .../CIAM-JSAngular-SPA-AuthCode/README.md | 415 - .../ReadmeFiles/screenshot.png | Bin 31735 -> 0 bytes .../ReadmeFiles/topology.png | Bin 45846 -> 0 bytes .../SPA/.browserslistrc | 16 - .../SPA/.editorconfig | 16 - .../SPA/.gitignore | 42 - .../SPA/angular.json | 106 - .../SPA/karma.conf.js | 46 - .../SPA/package-lock.json | 13548 ---------------- .../SPA/package.json | 43 - .../SPA/src/app/app-routing.module.ts | 40 - .../SPA/src/app/app.component.css | 22 - .../SPA/src/app/app.component.html | 19 - .../SPA/src/app/app.component.ts | 148 - .../SPA/src/app/app.module.ts | 99 - .../SPA/src/app/auth-config.ts | 48 - .../SPA/src/app/claim-utils.ts | 194 - .../SPA/src/app/guarded/guarded.component.css | 0 .../src/app/guarded/guarded.component.html | 1 - .../SPA/src/app/guarded/guarded.component.ts | 15 - .../SPA/src/app/home/home.component.css | 26 - .../SPA/src/app/home/home.component.html | 34 - .../SPA/src/app/home/home.component.ts | 77 - .../SPA/src/app/sample.spec.ts | 108 - .../SPA/src/assets/.gitkeep | 0 .../SPA/src/environments/environment.prod.ts | 3 - .../SPA/src/environments/environment.ts | 16 - .../SPA/src/favicon.svg | 23 - .../SPA/src/index.html | 17 - .../SPA/src/main.ts | 12 - .../SPA/src/polyfills.ts | 53 - .../SPA/src/styles.css | 3 - .../SPA/src/test.ts | 21 - .../SPA/tsconfig.app.json | 15 - .../SPA/tsconfig.json | 32 - .../SPA/tsconfig.spec.json | 18 - .../package-lock.json | 6 - .../.gitignore | 0 .../.vscode/extensions.json | 0 .../.vscode/launch.json | 0 .../.vscode/settings.json | 0 .../.vscode/tasks.json | 0 .../CODE_OF_CONDUCT.md | 0 .../LICENSE | 0 .../README.md | 0 .../ResponseContent.cs | 0 .../SECURITY.md | 0 .../SignUpValidation.cs | 0 .../csharp.csproj | 0 .../host.json | 0 .../media/api-connector-configuration.png | Bin .../media/api-connector-selected.png | Bin .../media/create-function-app-project.png | Bin 126 files changed, 6243 insertions(+), 31952 deletions(-) rename src/{SPA_Sample/CIAM-JSAngular-SPA-AuthCode => SPA_JS_Vanilla}/.vscode/extensions.json (100%) create mode 100644 src/SPA_JS_Vanilla/App/package-lock.json create mode 100644 src/SPA_JS_Vanilla/App/package.json create mode 100644 src/SPA_JS_Vanilla/App/public/authConfig.js create mode 100644 src/SPA_JS_Vanilla/App/public/authPopup.js create mode 100644 src/SPA_JS_Vanilla/App/public/authRedirect.js create mode 100644 src/SPA_JS_Vanilla/App/public/claimUtils.js rename src/{SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src => SPA_JS_Vanilla/App/public}/favicon.svg (100%) create mode 100644 src/SPA_JS_Vanilla/App/public/index.html create mode 100644 src/SPA_JS_Vanilla/App/public/redirect.html create mode 100644 src/SPA_JS_Vanilla/App/public/signout.html create mode 100644 src/SPA_JS_Vanilla/App/public/styles.css create mode 100644 src/SPA_JS_Vanilla/App/public/ui.js create mode 100644 src/SPA_JS_Vanilla/App/sample.test.js create mode 100644 src/SPA_JS_Vanilla/App/server.js rename src/{SPA_Sample/CIAM-JSAngular-SPA-AuthCode => SPA_JS_Vanilla}/README.md (55%) delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/topology.png delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json delete mode 100644 src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/topology.png delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json delete mode 100644 src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/.gitignore (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/.vscode/extensions.json (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/.vscode/launch.json (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/.vscode/settings.json (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/.vscode/tasks.json (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/CODE_OF_CONDUCT.md (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/LICENSE (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/README.md (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/ResponseContent.cs (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/SECURITY.md (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/SignUpValidation.cs (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/csharp.csproj (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/host.json (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/media/api-connector-configuration.png (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/media/api-connector-selected.png (100%) rename src/sssu_sample/{SSSU_DomainValidation_AzTable- => }/media/create-function-app-project.png (100%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 19ab0c3..c141f2b 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -21,7 +21,8 @@ // Node JS : "ghcr.io/devcontainers/features/node:1": { "version": "lts", - "nvmVersion": "latest" + "nvmVersion": "latest", + "installYarn": true } }, "forwardPorts": [ @@ -50,7 +51,9 @@ "ms-dotnettools.csdevkit", "ms-azuretools.ms-entra", "ms-vscode.vscode-node-azure-pack", - "ms-vscode.azure-account" + "ms-vscode.azure-account", + "devondcarew.bazel-code", + "ms-vscode.vscode-typescript-tslint-plugin" ] } }, diff --git a/.vscode/projects.code-workspace b/.vscode/projects.code-workspace index a5ff267..711b2db 100644 --- a/.vscode/projects.code-workspace +++ b/.vscode/projects.code-workspace @@ -7,7 +7,7 @@ "path": "../src/MSAL_Example" }, { - "path": "../src/WebApp_Example" + "path": "../src/SPA_JS_Vanilla" } ], "settings": {} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json b/src/SPA_JS_Vanilla/.vscode/extensions.json similarity index 100% rename from src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json rename to src/SPA_JS_Vanilla/.vscode/extensions.json diff --git a/src/SPA_JS_Vanilla/App/package-lock.json b/src/SPA_JS_Vanilla/App/package-lock.json new file mode 100644 index 0000000..f897be9 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/package-lock.json @@ -0,0 +1,5393 @@ +{ + "name": "ciam-sign-in-javascript", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ciam-sign-in-javascript", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@azure/msal-browser": "^3.16.0", + "ciam-sign-in-javascript": "file:", + "express": "^4.19.2", + "morgan": "^1.10.0" + }, + "devDependencies": { + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "supertest": "^7.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.20.0.tgz", + "integrity": "sha512-ErsxbfCGIwdqD8jipqdxpfAGiUEQS7MWUe39Rjhl0ZVPsb1JEe9bZCe2+0g23HDH6DGyCAtnTNN9scPtievrMQ==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.14.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.14.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.0.tgz", + "integrity": "sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/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, + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/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, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/node": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.13.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/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, + "license": "MIT" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001650", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001650.tgz", + "integrity": "sha512-fgEc7hP/LB7iicdXHUI9VsBsMZmUmlVJeQP2qqQW+3lkqVhbmjEU8zp+h5stWeilX+G7uXuIUIIlWlDw9jdt8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ciam-sign-in-javascript": { + "resolved": "", + "link": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz", + "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/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, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/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, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/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, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/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, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/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, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/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, + "license": "MIT" + }, + "node_modules/supertest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/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, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/SPA_JS_Vanilla/App/package.json b/src/SPA_JS_Vanilla/App/package.json new file mode 100644 index 0000000..3fdace3 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/package.json @@ -0,0 +1,23 @@ +{ + "name": "ciam-sign-in-javascript", + "version": "1.0.0", + "description": "Vanilla JavaScript single-page application using MSAL.js to authenticate users against Microsoft Entra External ID", + "main": "server.js", + "scripts": { + "start": "node server.js", + "test": "jest --forceExit" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@azure/msal-browser": "^3.16.0", + "ciam-sign-in-javascript": "file:", + "express": "^4.19.2", + "morgan": "^1.10.0" + }, + "devDependencies": { + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "supertest": "^7.0.0" + } +} diff --git a/src/SPA_JS_Vanilla/App/public/authConfig.js b/src/SPA_JS_Vanilla/App/public/authConfig.js new file mode 100644 index 0000000..3bca56a --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/authConfig.js @@ -0,0 +1,68 @@ +/** + * Configuration object to be passed to MSAL instance on creation. + * For a full list of MSAL.js configuration parameters, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md + */ +const msalConfig = { + auth: { + clientId: '82df21ba-d942-4ad7-b75f-4ee95cae533e', // This is the ONLY mandatory field that you need to supply. + authority: 'https://justrebldemo.ciamlogin.com/', // Replace the placeholder with your tenant subdomain + redirectUri: 'http://localhost:3000', // You must register this URI on Microsoft Entra admin center/App Registration. Defaults to window.location.href e.g. http://localhost:3000/ + navigateToLoginRequestUrl: true, // If "true", will navigate back to the original request location before processing the auth code response. + }, + cache: { + cacheLocation: 'sessionStorage', // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO. + storeAuthStateInCookie: false, // set this to true if you have to support IE + }, + system: { + loggerOptions: { + loggerCallback: (level, message, containsPii) => { + if (containsPii) { + return; + } + switch (level) { + case msal.LogLevel.Error: + console.error(message); + return; + case msal.LogLevel.Info: + console.info(message); + return; + case msal.LogLevel.Verbose: + console.debug(message); + return; + case msal.LogLevel.Warning: + console.warn(message); + return; + } + }, + }, + }, +}; + +/** + * Scopes you add here will be prompted for user consent during sign-in. + * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. + * For more information about OIDC scopes, visit: + * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes + */ +const loginRequest = { + scopes: [], +}; + +/** + * An optional silentRequest object can be used to achieve silent SSO + * between applications by providing a "login_hint" property. + */ + +// const silentRequest = { +// scopes: ["openid", "profile"], +// loginHint: "example@domain.net" +// }; + +// exporting config object for jest +if (typeof exports !== 'undefined') { + module.exports = { + msalConfig: msalConfig, + loginRequest: loginRequest, + }; +} \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/public/authPopup.js b/src/SPA_JS_Vanilla/App/public/authPopup.js new file mode 100644 index 0000000..9d58aba --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/authPopup.js @@ -0,0 +1,99 @@ +// Create the main myMSALObj instance +// configuration parameters are located at authConfig.js +let myMSALObj; + +msal.PublicClientApplication.createPublicClientApplication(msalConfig) + .then((obj) => { + myMSALObj = obj; + }) + .catch((error) => { + console.error("Error creating MSAL PublicClientApplication:", error); + }); + +let username = ""; + +function selectAccount () { + + /** + * See here for more info on account retrieval: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md + */ + + const currentAccounts = myMSALObj.getAllAccounts(); + + if (!currentAccounts || currentAccounts.length < 1) { + return; + } else if (currentAccounts.length > 1) { + // Add your account choosing logic here + console.warn("Multiple accounts detected."); + } else if (currentAccounts.length === 1) { + username = currentAccounts[0].username + welcomeUser(currentAccounts[0].username); + updateTable(currentAccounts[0]); + } +} + +function handleResponse(response) { + + /** + * To see the full list of response object properties, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response + */ + + if (response !== null) { + username = response.account.username + welcomeUser(username); + updateTable(response.account); + } else { + selectAccount(); + + /** + * If you already have a session that exists with the authentication server, you can use the ssoSilent() API + * to make request for tokens without interaction, by providing a "login_hint" property. To try this, comment the + * line above and uncomment the section below. + */ + + // myMSALObj.ssoSilent(silentRequest). + // then((response) => { + // welcomeUser(response.account.username); + // updateTable(response.account); + // }).catch(error => { + // console.error("Silent Error: " + error); + // if (error instanceof msal.InteractionRequiredAuthError) { + // signIn(); + // } + // }); + } +} + +function signIn() { + + /** + * You can pass a custom request object below. This will override the initial configuration. For more information, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request + */ + loginRequest.redirectUri = "/redirect"; + myMSALObj.loginPopup(loginRequest) + .then(handleResponse) + .catch(error => { + console.error(error); + }); +} + +function signOut() { + + /** + * You can pass a custom request object below. This will override the initial configuration. For more information, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request + */ + + // Choose which account to logout from by passing a username. + const logoutRequest = { + account: myMSALObj.getAccount({ username: username }), + mainWindowRedirectUri: '/signout' + }; + + myMSALObj.logoutPopup(logoutRequest); +} + +selectAccount(); \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/public/authRedirect.js b/src/SPA_JS_Vanilla/App/public/authRedirect.js new file mode 100644 index 0000000..4c1ea0c --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/authRedirect.js @@ -0,0 +1,103 @@ +// Create the main myMSALObj instance +// configuration parameters are located at authConfig.js +msal.PublicClientApplication.createPublicClientApplication(msalConfig) + .then((obj) => { + myMSALObj = obj; + /** + * A promise handler needs to be registered for handling the + * response returned from redirect flow. For more information, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/initialization.md#redirect-apis + */ + myMSALObj.handleRedirectPromise() + .then(handleResponse) + .catch((error) => { + console.error(error); + }); + }) + .catch((error) => { + console.error("Error creating MSAL PublicClientApplication:", error); + }); + +let username = ""; + + +function selectAccount() { + + /** + * See here for more info on account retrieval: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md + */ + + const currentAccounts = myMSALObj.getAllAccounts(); + + if (!currentAccounts) { + return; + } else if (currentAccounts.length > 1) { + // Add your account choosing logic here + console.warn("Multiple accounts detected."); + } else if (currentAccounts.length === 1) { + username = currentAccounts[0].username + welcomeUser(currentAccounts[0].username); + updateTable(currentAccounts[0]); + } +} + +function handleResponse(response) { + + /** + * To see the full list of response object properties, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#response + */ + + if (response !== null) { + username = response.account.username + welcomeUser(username); + updateTable(response.account); + } else { + selectAccount(); + + /** + * If you already have a session that exists with the authentication server, you can use the ssoSilent() API + * to make request for tokens without interaction, by providing a "login_hint" property. To try this, comment the + * line above and uncomment the section below. + */ + + // myMSALObj.ssoSilent(silentRequest). + // then((response) => { + // welcomeUser(response.account.username); + // updateTable(response.account); + // }).catch(error => { + // console.error("Silent Error: " + error); + // if (error instanceof msal.InteractionRequiredAuthError) { + // signIn(); + // } + // }); + } +} + +function signIn() { + + /** + * You can pass a custom request object below. This will override the initial configuration. For more information, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request + */ + + myMSALObj.loginRedirect(loginRequest); +} + +function signOut() { + + /** + * You can pass a custom request object below. This will override the initial configuration. For more information, visit: + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/request-response-object.md#request + */ + + // Choose which account to logout from by passing a username. + const logoutRequest = { + account: myMSALObj.getAccount({ username: username }), + postLogoutRedirectUri: '/signout', // remove this line if you would like navigate to index page after logout. + + }; + + myMSALObj.logoutRedirect(logoutRequest); +} diff --git a/src/SPA_JS_Vanilla/App/public/claimUtils.js b/src/SPA_JS_Vanilla/App/public/claimUtils.js new file mode 100644 index 0000000..f7243d3 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/claimUtils.js @@ -0,0 +1,224 @@ +/** + * Populate claims table with appropriate description + * @param {Object} claims ID token claims + * @returns claimsObject + */ +const createClaimsTable = (claims) => { + let claimsObj = {}; + let index = 0; + + Object.keys(claims).forEach((key) => { + if (typeof claims[key] !== 'string' && typeof claims[key] !== 'number') return; + switch (key) { + case 'aud': + populateClaim( + key, + claims[key], + "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Microsoft Entra admin center.", + index, + claimsObj + ); + index++; + break; + case 'iss': + populateClaim( + key, + claims[key], + 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the external tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. The GUID that indicates that the user is a consumer user from a Microsoft account is 9188040d-6c67-4c5b-b112-36a304b66dad.', + index, + claimsObj + ); + index++; + break; + case 'iat': + populateClaim( + key, + changeDateFormat(claims[key]), + 'Issued At indicates when the authentication for this token occurred.', + index, + claimsObj + ); + index++; + break; + case 'nbf': + populateClaim( + key, + changeDateFormat(claims[key]), + 'The nbf (not before) claim identifies the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', + index, + claimsObj + ); + index++; + break; + case 'exp': + populateClaim( + key, + changeDateFormat(claims[key]), + "The exp (expiration time) claim identifies the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", + index, + claimsObj + ); + index++; + break; + case 'name': + populateClaim( + key, + claims[key], + "The principal about which the token asserts information, such as the user of an application. This value is immutable and can't be reassigned or reused. It can be used to perform authorization checks safely, such as when the token is used to access a resource. By default, the subject claim is populated with the object ID of the user in the directory", + index, + claimsObj + ); + index++; + break; + case 'preferred_username': + populateClaim( + key, + claims[key], + 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', + index, + claimsObj + ); + index++; + break; + case 'nonce': + populateClaim( + key, + claims[key], + 'The nonce matches the parameter included in the original /authorize request to the IDP. If it does not match, your application should reject the token.', + index, + claimsObj + ); + index++; + break; + case 'oid': + populateClaim( + key, + claims[key], + 'The oid (user’s object id) is the only claim that should be used to uniquely identify a user in an external tenant. The token might have one or more of the following claim, that might seem like a unique identifier, but is not and should not be used as such.', + index, + claimsObj + ); + index++; + break; + case 'tid': + populateClaim( + key, + claims[key], + 'The tenant ID. You will use this claim to ensure that only users from the current external tenant can access this app.', + index, + claimsObj + ); + index++; + break; + case 'upn': + populateClaim( + key, + claims[key], + '(user principal name) – might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', + index, + claimsObj + ); + index++; + break; + case 'email': + populateClaim( + key, + claims[key], + 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', + index, + claimsObj + ); + index++; + break; + case 'acct': + populateClaim( + key, + claims[key], + 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', + index, + claimsObj + ); + index++; + break; + case 'sid': + populateClaim(key, claims[key], 'Session ID, used for per-session user sign-out.', index, claimsObj); + index++; + break; + case 'sub': + populateClaim( + key, + claims[key], + 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', + index, + claimsObj + ); + index++; + break; + case 'ver': + populateClaim( + key, + claims[key], + 'Version of the token issued by the Microsoft identity platform', + index, + claimsObj + ); + index++; + break; + case 'auth_time': + populateClaim( + key, + claims[key], + 'The time at which a user last entered credentials, represented in epoch time. There is no discrimination between that authentication being a fresh sign-in, a single sign-on (SSO) session, or another sign-in type.', + index, + claimsObj + ); + index++; + break; + case 'at_hash': + populateClaim( + key, + claims[key], + 'An access token hash included in an ID token only when the token is issued together with an OAuth 2.0 access token. An access token hash can be used to validate the authenticity of an access token', + index, + claimsObj + ); + index++; + break; + case 'uti': + case 'rh': + index++; + break; + default: + populateClaim(key, claims[key], '', index, claimsObj); + index++; + } + }); + + return claimsObj; +}; + +/** + * Populates claim, description, and value into an claimsObject + * @param {string} claim + * @param {string} value + * @param {string} description + * @param {number} index + * @param {Object} claimsObject + */ +const populateClaim = (claim, value, description, index, claimsObject) => { + let claimsArray = []; + claimsArray[0] = claim; + claimsArray[1] = value; + claimsArray[2] = description; + claimsObject[index] = claimsArray; +}; + +/** + * Transforms Unix timestamp to date and returns a string value of that date + * @param {string} date Unix timestamp + * @returns + */ +const changeDateFormat = (date) => { + let dateObj = new Date(date * 1000); + return `${date} - [${dateObj.toString()}]`; +}; \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg b/src/SPA_JS_Vanilla/App/public/favicon.svg similarity index 100% rename from src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg rename to src/SPA_JS_Vanilla/App/public/favicon.svg diff --git a/src/SPA_JS_Vanilla/App/public/index.html b/src/SPA_JS_Vanilla/App/public/index.html new file mode 100644 index 0000000..ef104f7 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/index.html @@ -0,0 +1,68 @@ + + + + + + + Microsoft identity platform + + + + + + + + + + + + +
+
+
+
+
+ Vanilla JavaScript single-page application secured with MSAL.js +
+
+
+ + + + + + + + + +
Claim TypeValueDescription
+
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/public/redirect.html b/src/SPA_JS_Vanilla/App/public/redirect.html new file mode 100644 index 0000000..dcc8b0e --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/redirect.html @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/public/signout.html b/src/SPA_JS_Vanilla/App/public/signout.html new file mode 100644 index 0000000..973acc2 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/signout.html @@ -0,0 +1,19 @@ + + + + + + Microsoft Entra External ID | Vanilla JavaScript SPA + + + + + + +
+

Goodbye!

+

You have signed out and your cache has been cleared.

+ Take me back +
+ + \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/public/styles.css b/src/SPA_JS_Vanilla/App/public/styles.css new file mode 100644 index 0000000..b895048 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/styles.css @@ -0,0 +1,8 @@ +.navbarStyle { + padding: .5rem 1rem !important; +} + +td { + word-break: break-word; + max-width: 20rem; +} \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/public/ui.js b/src/SPA_JS_Vanilla/App/public/ui.js new file mode 100644 index 0000000..d327694 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/public/ui.js @@ -0,0 +1,32 @@ +// Select DOM elements to work with +const signInButton = document.getElementById('signIn'); +const signOutButton = document.getElementById('signOut'); +const titleDiv = document.getElementById('title-div'); +const welcomeDiv = document.getElementById('welcome-div'); +const tableDiv = document.getElementById('table-div'); +const tableBody = document.getElementById('table-body-div'); + +function welcomeUser(username) { + console.log('welcome called'); + signInButton.classList.add('d-none'); + signOutButton.classList.remove('d-none'); + titleDiv.classList.add('d-none'); + welcomeDiv.classList.remove('d-none'); + welcomeDiv.innerHTML = `Welcome ${username}!`; +}; + +function updateTable(account) { + tableDiv.classList.remove('d-none'); + + const tokenClaims = createClaimsTable(account.idTokenClaims); + + Object.keys(tokenClaims).forEach((key) => { + let row = tableBody.insertRow(0); + let cell1 = row.insertCell(0); + let cell2 = row.insertCell(1); + let cell3 = row.insertCell(2); + cell1.innerHTML = tokenClaims[key][0]; + cell2.innerHTML = tokenClaims[key][1]; + cell3.innerHTML = tokenClaims[key][2]; + }); +}; \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/sample.test.js b/src/SPA_JS_Vanilla/App/sample.test.js new file mode 100644 index 0000000..78fda76 --- /dev/null +++ b/src/SPA_JS_Vanilla/App/sample.test.js @@ -0,0 +1,58 @@ +/** + * @jest-environment jsdom + */ + +const request = require('supertest'); +const path = require('path'); +const fs = require('fs'); + +const app = require('./server.js'); + +jest.dontMock('fs'); + +const html = fs.readFileSync(path.resolve(__dirname, './public/index.html'), 'utf8'); + +describe('Sanitize configuration object', () => { + beforeAll(() => { + global.msalConfig = require('./public/authConfig.js').msalConfig; + }); + + it('should define the config object', () => { + expect(msalConfig).toBeDefined(); + }); + + it('should not contain credentials', () => { + const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + expect(regexGuid.test(msalConfig.auth.clientId)).toBe(false); + }); + + it('should contain authority URI', () => { + const regexUri = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi; + expect(regexUri.test(msalConfig.auth.authority)).toBe(true); + }); +}); + +describe('Ensure pages served', () => { + + beforeAll(() => { + process.env.NODE_ENV = 'test'; + }); + + it('should serve index page', async () => { + const res = await request(app) + .get('/'); + + const data = await fs.promises.readFile(path.join(__dirname, './public/index.html'), 'utf8'); + expect(res.statusCode).toEqual(200); + expect(res.text).toEqual(data); + }); + + it('should serve signout page', async () => { + const res = await request(app) + .get('/signout'); + + const data = await fs.promises.readFile(path.join(__dirname, './public/signout.html'), 'utf8'); + expect(res.statusCode).toEqual(200); + expect(res.text).toEqual(data); + }); +}); \ No newline at end of file diff --git a/src/SPA_JS_Vanilla/App/server.js b/src/SPA_JS_Vanilla/App/server.js new file mode 100644 index 0000000..33ead3b --- /dev/null +++ b/src/SPA_JS_Vanilla/App/server.js @@ -0,0 +1,38 @@ +const express = require('express'); +const morgan = require('morgan'); +const path = require('path'); + +const DEFAULT_PORT = process.env.PORT || 3000; + +// initialize express. +const app = express(); + +// Configure morgan module to log all requests. +app.use(morgan('dev')); + +// serve public assets. +app.use(express.static('public')); + +// serve msal-browser module +app.use(express.static(path.join(__dirname, "node_modules/@azure/msal-browser/lib"))); + +// set up a route for signout.html +app.get('/signout', (req, res) => { + res.sendFile(path.join(__dirname + '/public/signout.html')); +}); + +// set up a route for redirect.html +app.get('/redirect', (req, res) => { + res.sendFile(path.join(__dirname + '/public/redirect.html')); +}); + +// set up a route for index.html +app.get('/', (req, res) => { + res.sendFile(path.join(__dirname + '/index.html')); +}); + +app.listen(DEFAULT_PORT, () => { + console.log(`Sample app listening on port ${DEFAULT_PORT}!`); +}); + +module.exports = app; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/README.md b/src/SPA_JS_Vanilla/README.md similarity index 55% rename from src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/README.md rename to src/SPA_JS_Vanilla/README.md index 8dd2cfa..4845a9a 100644 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/README.md +++ b/src/SPA_JS_Vanilla/README.md @@ -1,14 +1,13 @@ --- page_type: sample -name: Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID -description: This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra Consumers Identity and Access Management (Microsoft Entra External ID) +name: Vanilla JavaScript single-page application using MSAL.js to authenticate users against Microsoft Entra External ID +description: This sample demonstrates a Vanilla JavaScript single-page application using MSAL.js to authenticate users against Microsoft Entra External ID languages: - javascript - - typescript products: - entra-external-id - - msal-angular -urlFragment: ms-identity-ciam-javascript-tutorial-2-sign-in-angular + - msal-js +urlFragment: ms-identity-ciam-javascript-tutorial-0-sign-in-vanillajs extensions: services: - ms-identity @@ -19,10 +18,10 @@ extensions: level: - 100 client: - - Angular SPA + - Vanilla JavaScript SPA --- -# Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID +# Vanilla JavaScript single-page application using MSAL.js to authenticate users against Microsoft Entra External ID * [Overview](#overview) * [Scenario](#scenario) @@ -37,24 +36,26 @@ extensions: ## Overview -This sample demonstrates an Angular single-page application (SPA) that lets users sign-in with Microsoft Entra External ID using the [Microsoft Authentication Library for Angular](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular) (MSAL Angular). - +This sample demonstrates a vanilla JavaScript single-page application (SPA) that lets users authenticate to [Microsoft Entra External ID](https://learn.microsoft.com/entra/external-id/customers/how-to-create-external-tenant-portal) using the [Microsoft Authentication Library for JavaScript](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL.js). Here you'll learn about [ID Tokens](https://docs.microsoft.com/azure/active-directory/develop/id-tokens), [OIDC scopes](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes), [single-sign on](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso), **silent requests** and more. ## Scenario -1. The client Angular SPA uses the to sign-in a user and obtain a JWT [ID Token](https://aka.ms/id-tokens) from **Microsoft Entra External ID**. +1. The client JavaScript SPA uses the to sign-in a user and obtain a JWT [ID Token](https://aka.ms/id-tokens) from **Microsoft Entra External ID**. 1. The **ID Token** proves that the user has successfully authenticated against **Microsoft Entra External ID**. ![Scenario Image](./ReadmeFiles/topology.png) ## Contents -| File/folder | Description | -|---------------------------------|-----------------------------------------------------------| -| `src/app/auth-config.ts` | Authentication parameters reside here. | -| `src/app/app.module.ts` | MSAL Angular configuration parameters reside here. | -| `src/app/app-routing.module.ts` | Configure your MSAL-Guard here. | +| File/folder | Description | +|-----------------------|---------------------------------------------------------------------------| +| `AppCreationScripts/` | Contains Powershell scripts to automate app registration. | +| `public/authPopup.js` | Main authentication logic resides here (using Popup flow). | +| `public/authRedirect.js` | Use this instead of `authPopup.js` for authentication with redirect flow. | +| `public/authConfig.js` | Contains configuration parameters for the sample. | +| `public/ui.js` | Contains UI logic. | +| `server.js` | Simple Express server for `index.html`. | ## Prerequisites @@ -65,9 +66,7 @@ Here you'll learn about [ID Tokens](https://docs.microsoft.com/azure/active-dire * An external tenant. To create one, choose from the following methods: * (Recommended) Use the [Microsoft Entra External ID extension](https://aka.ms/ciamvscode/readme/marketplace) to set up an external tenant directly in Visual Studio Code. * [Create a new external tenant](https://learn.microsoft.com/entra/external-id/customers/how-to-create-external-tenant-portal) in the Microsoft Entra admin center. -* A user account in your external tenant. - ->This sample will not work with a **personal Microsoft account**. If you're signed in to the [Microsoft Entra admin center](https://entra.microsoft.com/) with a personal Microsoft account and have not created a user account in your directory before, you will need to create one before proceeding. +* A user account with permissions to an external tenant. ## Setup the sample @@ -76,7 +75,7 @@ Here you'll learn about [ID Tokens](https://docs.microsoft.com/azure/active-dire From your shell or command line: ```console -git clone https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial.git +git clone https://github.com/Azure-Samples/ms-identity-ciam-javascript-tutorial.git ``` or download and extract the repository *.zip* file. @@ -86,7 +85,7 @@ or download and extract the repository *.zip* file. ### Step 2: Install project dependencies ```console - cd 1-Authentication\1-sign-in-angular\SPA + cd 1-Authorization\0-sign-in-vanillajs\App npm install ``` @@ -94,40 +93,36 @@ or download and extract the repository *.zip* file. There is one project in this sample. To register it, you can: -- follow the steps below for manually register your apps -- or use PowerShell scripts that: - - **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. - - modify the projects' configuration files. +* follow the steps below for manually register your apps +* or use PowerShell scripts that: + * **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. + * modify the projects' configuration files.
Expand this section if you want to use this automation: - > :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. +> :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. - 1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory - 1. In PowerShell run: +1. Ensure that you have PowerShell 7 or later installed. - ```PowerShell - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force - ``` +1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. +1. For interactive process -in PowerShell, run: - 1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. - 1. For interactive process -in PowerShell, run: + ```PowerShell + cd .\AppCreationScripts\ + .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" + ``` - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` +> Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. - > Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios.
-#### Choose the external tenant where you want to create your applications +#### Choose the Microsoft Entra External ID tenant where you want to create your applications To manually register the apps, as a first step you'll need to: 1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/). -1. If your account is present in more than one external tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired external tenant. +1. If your account is present in more than one Microsoft Entra External ID tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Microsoft Entra External ID tenant. #### Create User Flows @@ -142,19 +137,20 @@ Please refer to: * [Tutorial: Add Google as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-google-federation-customers) * [Tutorial: Add Facebook as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-facebook-federation-customers) -#### Register the spa app (ciam-msal-angular-spa) +#### Register the client app (ciam-msal-javascript-spa) -1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com/) and select the CIAM service. +1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com/) and select the **Microsoft Entra External ID** service. 1. Select the **App Registrations** blade on the left, then select **New registration**. 1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ciam-msal-angular-spa`. + 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ciam-msal-javascript-spa`. 1. Under **Supported account types**, select **Accounts in this organizational directory only** 1. Select **Register** to create the application. 1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. 1. In the app's registration screen, select the **Authentication** blade to the left. 1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. - 1. In the **Redirect URI** section enter the following redirect URI: - 1. `http://localhost:4200` + 1. In the **Redirect URI** section enter the following redirect URIs: + 1. `http://localhost:3000` + 1. `http://localhost:3000/redirect` 1. Click **Save** to save your changes. 1. Since this app signs-in users, we will now proceed to select **delegated permissions**, which is is required by apps signing-in users. 1. In the app's registration screen, select the **API permissions** blade in the left to open the page where we add access to the APIs that your application needs: @@ -165,29 +161,27 @@ Please refer to: 1. Select the **Add permissions** button at the bottom. 1. At this stage, the permissions are assigned correctly, but since it's an external tenant, the users themselves cannot consent to these permissions. To get around this problem, we'd let the [tenant administrator consent on behalf of all users in the tenant](https://docs.microsoft.com/azure/active-directory/develop/v2-admin-consent). Select the **Grant admin consent for {tenant}** button, and then select **Yes** when you are asked if you want to grant consent for the requested permissions for all accounts in the tenant. You need to be a tenant admin to be able to carry out this operation. -##### Configure the spa app (ciam-msal-angular-spa) to use your app registration +##### Configure the client app (ciam-msal-javascript-spa) to use your app registration Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. > In the steps below, "ClientID" is the same as "Application ID" or "AppId". -1. Open the `SPA\src\app\auth-config.ts` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ciam-msal-angular-spa` app copied from the Microsoft Entra admin center. +1. Open the `App\public\authConfig.js` file. +1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ciam-msal-javascript-spa` app copied from the Microsoft Entra admin center. 1. Find the placeholder `Enter_the_Tenant_Subdomain_Here` and replace it with the Directory (tenant) subdomain. For instance, if your tenant primary domain is `contoso.onmicrosoft.com`, use `contoso`. If you don't have your tenant domain name, learn how to [read your tenant details](https://review.learn.microsoft.com/azure/active-directory/external-identities/customers/how-to-create-customer-tenant-portal#get-the-customer-tenant-details). ### Step 4: Running the sample ```console - cd 1-Authentication\1-sign-in-angular\SPA + cd 1-Authorization\0-sign-in-vanillajs\App npm start ``` ## Explore the sample -1. Open your browser and navigate to `http://localhost:4200`. -1. Select the **Sign-in** button on the top right corner. Once you sign-in, you will see some of the important claims in your ID token. - -![Screenshot](./ReadmeFiles/screenshot.png) +1. Open your browser and navigate to `http://localhost:3000`. +1. Click the **sign-in** button on the top right corner. > :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. @@ -209,148 +203,69 @@ To provide feedback on or suggest features for Microsoft Entra, visit [User Voic ## About the code -MSAL Angular is a wrapper around MSAL.js (i.e. *msal-browser*). As such, many of MSAL.js's public APIs are also available to use with MSAL Angular, while MSAL Angular itself offers additional [public APIs](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/public-apis.md). - -### Configuration - -You can initialize your application in several ways, for instance, by loading the configuration parameters from another server. See [Configuration options](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md) for more information. - -In the sample, authentication parameters reside in [auth-config.ts](./SPA/src/app/auth-config.ts). These parameters then are used for initializing MSAL Angular configuration options in [app.module.ts](./SPA/src/app/app.module.ts). - -### Sign-in +## Sign-in -**MSAL Angular** exposes 3 login methods: `loginPopup()`, `loginRedirect()` and `ssoSilent()`. First, setup your default interaction type in [app.module.ts](./SPA/src/app/app.module.ts): +MSAL.js provides 3 login APIs: `loginPopup()`, `loginRedirect()` and `ssoSilent()`: -```typescript -export function MSALGuardConfigFactory(): MsalGuardConfiguration { - return { - interactionType: InteractionType.Redirect, - }; -} +```javascript + myMSALObj.loginPopup(loginRequest) + .then((response) => { + // your logic + }) + .catch(error => { + console.error(error); + }); ``` -Then, define a login method in [app.component.ts](./SPA/src/app/app.component.ts) as follows: - -```typescript -export class AppComponent implements OnInit { - - constructor( - @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, - private authService: MsalService, - private msalBroadcastService: MsalBroadcastService - ) {} - - ngOnInit(): void { - - login() { - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - if (this.msalGuardConfig.authRequest) { - this.authService.loginPopup({...this.msalGuardConfig.authRequest} as PopupRequest) - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } else { - this.authService.loginPopup() - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } - } else { - if (this.msalGuardConfig.authRequest) { - this.authService.loginRedirect({...this.msalGuardConfig.authRequest} as RedirectRequest); - } else { - this.authService.loginRedirect(); - } - } - } -} -``` - -If you already have a session that exists with the authentication server, you can use the `ssoSilent()` API to make a request for tokens without interaction. You will need to pass a [loginHint](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso#automatically-select-account-on-azure-ad) in the request object in order to successfully obtain a token silently. - -```typescript -export class AppComponent implements OnInit { - - constructor( - private authService: MsalService, - ) {} - - ngOnInit(): void { - const silentRequest: SsoSilentRequest = { - scopes: ["User.Read"], - loginHint: "user@contoso.com" - } - - this.authService.ssoSilent(silentRequest) - .subscribe({ - next: (result: AuthenticationResult) => { - console.log("SsoSilent succeeded!"); - }, - error: (error) => { - this.authService.loginRedirect(); - } - }); - } -} -``` +To use the redirect flow, you must register a handler for redirect promise. **MSAL.js** provides`handleRedirectPromise()` API: -### ID Token Validation - -When you receive an [ID token](https://docs.microsoft.com/azure/active-directory/develop/id-tokens) directly from the IdP on a secure channel (e.g. HTTPS), such is the case with SPAs, there’s no need to validate it. If you were to do it, you would validate it by asking the same server that gave you the ID token to give you the keys needed to validate it, which renders it pointless, as if one is compromised so is the other. +```javascript + myMSALObj.handleRedirectPromise() + .then((response) => { + // your logic + }) + .catch(err => { + console.error(err); + }); -### Sign-out + myMSALObj.loginRedirect(loginRequest); +``` -The application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. For more information, see: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request). +The recommended pattern is that you fallback to an **interactive method** should the silent SSO fails. -### Securing Routes +```javascript -You can add authentication to secure specific routes in your application by just adding `canActivate: [MsalGuard]` to your route definition. It can be added at the parent or child routes. This ensures that the user must be signed-in to access the secured route. + const silentRequest = { + scopes: ["openid", "profile"], + loginHint: "example@domain.net" + }; -```typescript - const routes: Routes = [ - { - path: 'guarded', - component: GuardedComponent, - canActivate: [ - MsalGuard - ] - } - ] + myMSALObj.ssoSilent(silentRequest) + .then((response) => { + // your logic + }).catch(error => { + console.error("Silent Error: " + error); + if (error instanceof msal.InteractionRequiredAuthError) { + myMSALObj.loginRedirect(loginRequest); + } + }); ``` -### Events API - -Using the event API, you can register an event callback that will do something when an event is emitted. When registering an event callback in an Angular component you will need to make sure you do 2 things. +You can get all the active accounts of a user with the get `getAllAccounts()` API. If you know the **username** or **home ID** of an account, you can select it by: -1. The callback is registered only once -2. The callback is unregistered before the component unmounts. - -```typescript -export class HomeComponent implements OnInit { - - private readonly _destroying$ = new Subject(); +```javascript + myMSALObj.getAccountByUsername(username); + // or + myMSALObj.getAccountByHomeId(homeId); +``` - constructor(private authService: MsalService, private msalBroadcastService: MsalBroadcastService) { } +### Sign-out - ngOnInit(): void { - this.msalBroadcastService.msalSubject$ - .pipe( - filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS), - takeUntil(this._destroying$) - ) - .subscribe((result: EventMessage) => { - // do something with the result, such as accessing ID token - }); - } +The Application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. For more, see: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request) - ngOnDestroy(): void { - this._destroying$.next(undefined); - this._destroying$.complete(); - } -} -``` +### ID Token Validation -For more information, see: [Events in MSAL Angular v2](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md). +When you receive an [ID token](https://docs.microsoft.com/azure/active-directory/develop/id-tokens) directly from the IdP on a secure channel (e.g. HTTPS), such is the case with SPAs, there’s no need to validate it. If you were to do it, you would validate it by asking the same server that gave you the ID token to give you the keys needed to validate it, which renders it pointless, as if one is compromised so is the other. ### Deploying SPA to Azure Storage @@ -362,11 +277,7 @@ There is one single-page application in this sample. To deploy it to **Azure Sto > :information_source: If you would like to use **VS Code Azure Tools** extension for deployment, [watch the tutorial](https://docs.microsoft.com/azure/developer/javascript/tutorial-vscode-static-website-node-01) offered by Microsoft Docs. -#### Build and upload (ciam-msal-angular-spa) to an Azure Storage blob - -Build your project to get a distributable files folder, where your built `html`, `css` and `javascript` files will be generated. Then follow the steps below: - -> :warning: When uploading, make sure you upload the contents of your distributable files folder and **not** the entire folder itself. +#### Build and upload (ciam-msal-javascript-spa) to an Azure Storage blob > :information_source: If you don't have an account already, see: [How to create a storage account](https://docs.microsoft.com/azure/storage/common/storage-account-create). @@ -377,21 +288,22 @@ Build your project to get a distributable files folder, where your built `html`, 1. In the **Index document name** field, specify a default index page (For example: `index.html`). 1. The default **index page** is displayed when a user navigates to the root of your static website. 1. Select **Save**. The Microsoft Entra admin center now displays your static website endpoint. Make a note of the **Primary endpoint field**. -1. In the `ciam-msal-angular-spa` project source code, update your configuration file with the **Primary endpoint field** as your new **Redirect URI** (you will register this URI later). +1. In the `ciam-msal-javascript-spa` project source code, update your configuration file with the **Primary endpoint field** as your new **Redirect URI** (you will register this URI later). 1. Next, select **Storage Explorer**. 1. Expand the **BLOB CONTAINERS** node, and then select the `$web` container. 1. Choose the **Upload** button to upload files. 1. If you intend for the browser to display the contents of file, make sure that the content type of that file is set to `text/html`. 1. In the pane that appears beside the **account overview page** of your storage account, select **Static Website**. The URL of your site appears in the **Primary endpoint field**. In the next section, you will register this URI. -#### Update the CIAM app registration for ciam-msal-angular-spa +#### Update the CIAM app registration for ciam-msal-javascript-spa 1. Navigate back to to the [Microsoft Entra admin center](https://entra.microsoft.com/). 1. In the left-hand navigation pane, select the **Microsoft Entra** service, and then select **App registrations**. -1. In the resulting screen, select `ciam-msal-angular-spa`. +1. In the resulting screen, select `ciam-msal-javascript-spa`. 1. In the app's registration screen, select **Authentication** in the menu. 1. In the **Redirect URIs** section, update the reply URLs to match the site URL of your Azure deployment. For example: - 1. `https://ciam-msal-angular-spa.azurewebsites.net/` + 1. `https://ciam-msal-javascript-spa.azurewebsites.net/` + 1. `https://ciam-msal-javascript-spa.azurewebsites.net/redirect` ## Contributing diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json deleted file mode 100644 index 05b8664..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "id": "ms-entra.launchSample", - "type": "node", - "request": "launch", - "name": "Launch Program", - "program": "${workspaceFolder}/.vscode/msEntraSampleLaunch.js", - "args": [ - "${input:taskDelay}" - ] - } - ], - "inputs": [ - { - "id": "taskDelay", - "type": "command", - "command": "ms-entra.getScenarioEndTime", - "args": "UserFlowDelay" - } - ] -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json deleted file mode 100644 index 1412bda..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json +++ /dev/null @@ -1 +0,0 @@ -{"workingDir":"SPA","command":"npm install && npm run start"} \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js deleted file mode 100644 index dddd99a..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js +++ /dev/null @@ -1,24 +0,0 @@ -const { exec } = require('child_process'); -const path = require('path'); -const config = require('./msEntraSampleConfig.json'); - -// Read the UserFlowDelay from the args. -// @see launch.json -const startDelay = Math.max(0, Number(process.argv[2] || 0) - Date.now()); - -if (startDelay > 0) { - console.log(`Waiting for the user flow setup to finish before launching sample...`); -} - -setTimeout(() => { - console.log('Running Sample...'); - console.log('This may take some time.'); - - exec(config.command, { cwd: path.resolve(config.workingDir) }, (err, output) => { - if (err) { - console.error(err); - return; - } - console.log(output); - }); -}, startDelay); diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js deleted file mode 100644 index b6090a2..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js +++ /dev/null @@ -1,12 +0,0 @@ -const {exec} = require('child_process'); -const path = require("path"); -exec('npm install && npm start',{cwd:path.resolve('.\\SPA')}, (err, output) => { - // once the command has completed, the callback function is called - if (err) { - // log and return if we encounter an error - console.error("Error on running commands: ", err) - return - } - // log the output received from the command - console.log("Output: \n", output) -}) \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md deleted file mode 100644 index a977f6e..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md +++ /dev/null @@ -1,137 +0,0 @@ -# Registering sample apps with the Microsoft identity platform and updating configuration files using PowerShell - -## Overview - -### Quick summary - -1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "your test tenant's id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - -### More details - -- [Goal of the provided scripts](#goal-of-the-provided-scripts) - - [Presentation of the scripts](#presentation-of-the-scripts) - - [Usage pattern for tests and DevOps scenarios](#usage-pattern-for-tests-and-DevOps-scenarios) -- [How to use the app creation scripts?](#how-to-use-the-app-creation-scripts) - - [Pre-requisites](#pre-requisites) - - [Run the script and start running](#run-the-script-and-start-running) - - [Four ways to run the script](#four-ways-to-run-the-script) - - [Option 1 (interactive)](#option-1-interactive) - - [Option 2 (Interactive, but create apps in a specified tenant)](#option-3-Interactive-but-create-apps-in-a-specified-tenant) - - [Running the script on Azure Sovereign clouds](#running-the-script-on-Azure-Sovereign-clouds) - -## Goal of the provided scripts - -### Presentation of the scripts - -This sample comes with two PowerShell scripts, which automate the creation of the Microsoft Entra applications, and the configuration of the code for this sample. Once you run them, you will only need to build the solution and you are good to test. - -These scripts are: - -- `Configure.ps1` which: - - creates Microsoft Entra applications and their related objects (permissions, dependencies, secrets, app roles), - - changes the configuration files in the sample projects. - - creates a summary file named `createdApps.html` in the folder from which you ran the script, and containing, for each Azure AD application it created: - - the identifier of the application - - the AppId of the application - - the url of its registration in the [Microsoft Entra admin center](https://entra.microsoft.com/). - -- `Cleanup.ps1` which cleans-up the Azure AD objects created by `Configure.ps1`. Note that this script does not revert the changes done in the configuration files, though. You will need to undo the change from source control (from Visual Studio, or from the command line using, for instance, `git reset`). - -> :information_source: If the sample supports using certificates instead of client secrets, this folder will contain an additional set of scripts: `Configure-WithCertificates.ps1` and `Cleanup-WithCertificates.ps1`. You can use them in the same way to register app(s) that use certificates instead of client secrets. - -### Usage pattern for tests and DevOps scenarios - -The `Configure.ps1` will stop if it tries to create an Azure AD application which already exists in the tenant. For this, if you are using the script to try/test the sample, or in DevOps scenarios, you might want to run `Cleanup.ps1` just before `Configure.ps1`. This is what is shown in the steps below. - -## How to use the app creation scripts? - -### Pre-requisites - -1. PowerShell 7 or later (see: [installing PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)) -1. Open PowerShell (On Windows, press `Windows-R` and type `PowerShell` in the search window) - -### (Optionally) install Microsoft.Graph.Applications PowerShell modules - -The scripts install the required PowerShell module (Microsoft.Graph.Applications) for the current user if needed. However, if you want to install if for all users on the machine, you can follow the following steps: - -1. If you have never done it already, in the PowerShell window, install the Microsoft.Graph.Applications PowerShell modules. For this: - - 1. Open PowerShell - 2. Type: - - ```PowerShell - Install-Module Microsoft.Graph.Applications - ``` - - or if you want the modules to be installed for the current user only, run: - - ```PowerShell - Install-Module Microsoft.Graph.Applications -Scope CurrentUser - ``` - -### Run the script and start running - -1. Go to the `AppCreationScripts` sub-folder. From the folder where you cloned the repo, - - ```PowerShell - cd AppCreationScripts - ``` - -1. Run the scripts. See below for the [four options](#four-ways-to-run-the-script) to do that. -1. Open the Visual Studio solution, and in the solution's context menu, choose **Set Startup Projects**. -1. select **Start** for the projects - -You're done! - -### Two ways to run the script - -We advise four ways of running the script: - -- Interactive: you will be prompted for credentials, and the scripts decide in which tenant to create the objects, -- Interactive in specific tenant: you will provide the tenant in which you want to create the objects and then you will be prompted for credentials, and the scripts will create the objects, - -Here are the details on how to do this. - -#### Option 1 (interactive) - -- Just run ``.\Configure.ps1``, and you will be prompted to sign-in (email address, password, and if needed MFA). -- The script will be run as the signed-in user and will use the tenant in which the user is defined. - -Note that the script will choose the tenant in which to create the applications, based on the user. Also to run the `Cleanup.ps1` script, you will need to re-sign-in. - -#### Option 2 (Interactive, but create apps in a specified tenant) - - if you want to create the apps in a particular tenant, you can use the following option: - -- Open the [Microsoft Entra admin center](https://entra.microsoft.com/) -- Select the Microsoft Entra tenant you are interested in (in the combo-box below your name on the top right of the browser window) -- Select **Overview** on the left side menu and then select the **Overview** tab. Copy the content of the **Tenant Id** property -- Then use the full syntax to run the scripts: - -```PowerShell -$tenantId = "yourTenantIdGuid" -. .\Cleanup.ps1 -TenantId $tenantId -. .\Configure.ps1 -TenantId $tenantId -``` - -### Running the script on Azure Sovereign clouds - -All the four options listed above can be used on any Azure Sovereign clouds. By default, the script targets `AzureCloud`, but it can be changed using the parameter `-AzureEnvironmentName`. - -The acceptable values for this parameter are: - -- AzureCloud -- AzureChinaCloud -- AzureUSGovernment - -Example: - - ```PowerShell - . .\Cleanup.ps1 -AzureEnvironmentName "AzureUSGovernment" - . .\Configure.ps1 -AzureEnvironmentName "AzureUSGovernment" - ``` diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 deleted file mode 100644 index d209690..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 +++ /dev/null @@ -1,152 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - - -Function Cleanup -{ - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - <# - .Description - This function removes the Microsoft Entra applications for the sample. These applications were created by the Configure.ps1 script - #> - - # $tenantId is the Microsoft Entra Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant - # into which you want to create the apps. Look it up in the Microsoft Entra admin center in the "Properties" of the Azure AD. - - # Connect to the Microsoft Graph API - Write-Host "Connecting to Microsoft Graph" - - - if ($tenantId -eq "") - { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else - { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Removes the applications - Write-Host "Cleaning-up applications from tenant '$tenantId'" - - Write-Host "Removing 'spa' (ciam-msal-angular-spa) if needed" - try - { - Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove the application 'ciam-msal-angular-spa'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red - } - - Write-Host "Making sure there are no more (ciam-msal-angular-spa) applications found, will remove if needed..." - $apps = Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain - - if ($apps) - { - Remove-MgApplication -ApplicationId $apps.Id - } - - foreach ($app in $apps) - { - Remove-MgApplication -ApplicationId $app.Id - Write-Host "Removed ciam-msal-angular-spa.." - } - - # also remove service principals of this app - try - { - Get-MgServicePrincipal -filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove ServicePrincipal 'ciam-msal-angular-spa'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red - } -} - -# Pre-requisites -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -$ErrorActionPreference = "Stop" - - -try -{ - Cleanup -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} - -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 deleted file mode 100644 index dcd334b..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 +++ /dev/null @@ -1,329 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - -<# - This script creates the Microsoft Entra applications needed for this sample and updates the configuration files - for the visual Studio projects from the data in the Microsoft Entra applications. - - In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user - - There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. -#> - -# Adds the requiredAccesses (expressed as a pipe separated string) to the requiredAccess structure -# The exposed permissions are in the $exposedPermissions collection, and the type of permission (Scope | Role) is -# described in $permissionType -Function AddResourcePermission($requiredAccess, ` - $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) -{ - foreach($permission in $requiredAccesses.Trim().Split("|")) - { - foreach($exposedPermission in $exposedPermissions) - { - if ($exposedPermission.Value -eq $permission) - { - $resourceAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess - $resourceAccess.Type = $permissionType # Scope = Delegated permissions | Role = Application permissions - $resourceAccess.Id = $exposedPermission.Id # Read directory data - $requiredAccess.ResourceAccess += $resourceAccess - } - } - } -} - -# -# Example: GetRequiredPermissions "Microsoft Graph" "Graph.Read|User.Read" -# See also: http://stackoverflow.com/questions/42164581/how-to-configure-a-new-azure-ad-application-through-powershell -Function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) -{ - # If we are passed the service principal we use it directly, otherwise we find it from the display name (which might not be unique) - if ($servicePrincipal) - { - $sp = $servicePrincipal - } - else - { - $sp = Get-MgServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'" - } - $appid = $sp.AppId - $requiredAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess - $requiredAccess.ResourceAppId = $appid - $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess] - - # $sp.Oauth2Permissions | Select Id,AdminConsentDisplayName,Value: To see the list of all the Delegated permissions for the application: - if ($requiredDelegatedPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2PermissionScopes -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope" - } - - # $sp.AppRoles | Select Id,AdminConsentDisplayName,Value: To see the list of all the Application permissions for the application - if ($requiredApplicationPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role" - } - return $requiredAccess -} - - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function UpdateLine([string] $line, [string] $value) -{ - $index = $line.IndexOf(':') - $lineEnd = '' - - if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } - - if ($index -ige 0) - { - $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = UpdateLine $line $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function ReplaceInLine([string] $line, [string] $key, [string] $value) -{ - $index = $line.IndexOf($key) - if ($index -ige 0) - { - $index2 = $index+$key.Length - $line = $line.Substring(0, $index) + $value + $line.Substring($index2) - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = ReplaceInLine $line $key $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - - -<#.Description - Primary entry method to create and configure app registrations -#> -Function ConfigureApplications -{ - <#.Description - This function creates the Microsoft Entra applications for the sample in the provided external tenant and updates the - configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) - so that they are consistent with the Applications parameters - #> - - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) - Write-Host "Connecting to Microsoft Graph" - if ($tenantId -eq "") { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Create the spa AAD application - Write-Host "Creating the AAD application (ciam-msal-angular-spa)" - # create the application - $spaAadApplication = New-MgApplication -DisplayName "ciam-msal-angular-spa" ` - -Spa ` - @{ ` - RedirectUris = "http://localhost:4200"; ` - } ` - -SignInAudience AzureADMyOrg ` - #end of command - - $currentAppId = $spaAadApplication.AppId - $currentAppObjectId = $spaAadApplication.Id - - $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain - #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/ciam-msal-angular-spa") - - # create the service principal of the newly created application - $spaServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} - - # add the user running the script as an app owner if needed - $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId - if ($owner -eq $null) - { - New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} - Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($spaServicePrincipal.DisplayName)'" - } - Write-Host "Done creating the spa application (ciam-msal-angular-spa)" - - # URL of the AAD application in the Microsoft Entra admin center - # Future? $spaPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - $spaPortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" - - Add-Content -Value "spa$currentAppIdciam-msal-angular-spa" -Path createdApps.html - # Declare a list to hold RRA items - $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess] - - # Add Required Resources Access (from 'spa' to 'Microsoft Graph') - Write-Host "Getting access from 'spa' to 'Microsoft Graph'" - $requiredPermission = GetRequiredPermissions -applicationDisplayName "Microsoft Graph"` - -requiredDelegatedPermissions "openid|offline_access" - - $requiredResourcesAccess.Add($requiredPermission) - Write-Host "Added 'Microsoft Graph' to the RRA list." - # Useful for RRA additions troubleshooting - # $requiredResourcesAccess.Count - # $requiredResourcesAccess - - Update-MgApplication -ApplicationId $currentAppObjectId -RequiredResourceAccess $requiredResourcesAccess - Write-Host "Granted permissions." - - - # print the registered app portal URL for any further navigation - Write-Host "Successfully registered and configured that app registration for 'ciam-msal-angular-spa' at `n $spaPortalUrl" -ForegroundColor Green - - # Update config file for 'spa' - # $configFile = $pwd.Path + "\..\SPA\src\app\auth-config.ts" - $configFile = $(Resolve-Path ($pwd.Path + "\..\SPA\src\app\auth-config.ts")) - - $dictionary = @{ "Enter_the_Application_Id_Here" = $spaAadApplication.AppId; "Enter_the_Tenant_Subdomain_Here" = $tenantName.Split(".onmicrosoft.com")[0] }; - - Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow - $dictionary - Write-Host "-----------------" - - ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" - Write-Host "IMPORTANT: Please follow the instructions below to complete a few manual step(s) in the Microsoft Entra admin center": - Write-Host "- For spa" - Write-Host " - Navigate to $spaPortalUrl" - Write-Host " - Navigate to your tenant and create user flows to allow users to sign up for the application." -ForegroundColor Red - Write-Host " - The delegated permissions for the 'spa' application require admin consent. Do remember to navigate to the application registration in the app portal and consent for those." -ForegroundColor Red - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" - -Add-Content -Value "" -Path createdApps.html -} # end of ConfigureApplications function - -# Pre-requisites - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -Set-Content -Value "" -Path createdApps.html -Add-Content -Value "" -Path createdApps.html - -$ErrorActionPreference = "Stop" - -# Run interactively (will ask you for the tenant ID) - -try -{ - ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json deleted file mode 100644 index 7fefcda..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "Sample": { - "Title": "An Angular single-page application using MSAL Angular to authenticate users against Microsoft Entra External ID", - "Client": "SinglePageApplication", - "Level": 100 - }, - "AppRegistrations": [ - { - "x-ms-id": "ciam-angular-spa", - "x-ms-name": "ms-identity-ciam-angular-spa", - "x-ms-version": "2.0", - "replyUrlsWithType": [ - { - "url": "http://localhost:4200/", - "type": "Spa" - } - ], - "requiredResourceAccess": [ - { - "x-ms-resourceAppName": "Microsoft Graph", - "resourceAppId": "00000003-0000-0000-c000-000000000000", - "resourceAccess": [ - { - "id": "37f7f235-527c-4136-accd-4a02d197296e", - "type": "Scope", - "x-ms-name": "openid" - }, - { - "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182", - "type": "Scope", - "x-ms-name": "offline_access" - } - ] - } - ], - "codeConfigurations": [ - { - "settingFile": "SPA/src/app/auth-config.ts", - "replaceTokens": { - "appId": "Enter_the_Application_Id_Here", - "tenantName": "Enter_the_Tenant_Subdomain_Here" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md deleted file mode 100644 index ac776c5..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Portal quickstart for Angular SPA" -description: Learn how to run an sample Angular single-page application to sign in users -services: active-directory -author: kengaderdus -manager: mwongerapk -ms.author: kengaderdus -ms.service: active-directory -ms.workload: identity -ROBOTS: NOINDEX -ms.subservice: ciam -ms.topic: portal -ms.date: 04/19/2023 ---- -# Portal quickstart for Angular SPA - -> In this quickstart, you download and run a code sample that demonstrates how an Angular SPA that can sign in users with Microsoft Entra External ID. -> -> [!div renderon="portal" id="display-on-portal" class="sxs-lookup"] -> -> 1. Make sure you've installed [Node.js](https://nodejs.org/download/). -> 1. Unzip the sample. -> 1. Locate the sample folder in your terminal, then run the following commands: -> -> ```console -> cd SPA && npm install && npm start -> ``` -> -> 1. Visit `http://localhost:4200` in your browser. -> 1. Select **Sign-in** on the navigation bar, then follow the prompts. -> \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json deleted file mode 100644 index 924aaaa..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "Sample": { - "Title": "Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID", - "Level": 100, - "Client": "Angular SPA", - "Languages": [ - "javascript", - "typescript" - ], - "Products": [ - "azure-active-directory", - "msal-angular" - ], - "RepositoryUrl": "ms-identity-ciam-javascript-tutorial", - "Platform": "JavaScript", - "Endpoint": "AAD v2.0", - "Provider": "CIAM", - "description": "This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra and calls Microsoft Graph Api" - }, - "AADApps": [ - { - "Id": "spa", - "Name": "ciam-msal-angular-spa", - "Kind": "SinglePageApplication", - "Audience": "AzureADMyOrg", - "SDK": "MsalAngular", - "SampleSubPath": "1-Authentication\\1-sign-in-angular\\SPA", - "HomePage": "http://localhost:4200", - "ReplyUrls": "http://localhost:4200", - "RequiredResourcesAccess": [ - { - "Resource": "Microsoft Graph", - "DelegatedPermissions": [ - "openid", - "offline_access" - ] - } - ], - "ManualSteps": [ - { - "Comment": "Navigate to your tenant and create user flows to allow users to sign up for the application." - } - ] - } - ], - "CodeConfiguration": [ - { - "App": "spa", - "SettingKind": "Replace", - "SettingFile": "\\..\\SPA\\src\\app\\auth-config.ts", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "Enter_the_Tenant_Subdomain_Here", - "value": "$tenantName" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png deleted file mode 100644 index 27add1e25def9119a0fe504eb588eaf1709fcb0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31735 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%0Ax8^}kJ4@ixd{pW3W*bAL>+0C(E8^?N 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 Qz;)%3oa%!j8KZ#z0b7^-r~m)} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc deleted file mode 100644 index 4f9ac26..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc +++ /dev/null @@ -1,16 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig deleted file mode 100644 index 59d9a3a..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore deleted file mode 100644 index 0711527..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# Compiled output -/dist -/tmp -/out-tsc -/bazel-out - -# Node -/node_modules -npm-debug.log -yarn-error.log - -# IDEs and editors -.idea/ -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# Miscellaneous -/.angular/cache -.sass-cache/ -/connect.lock -/coverage -/libpeerconnection.log -testem.log -/typings - -# System files -.DS_Store -Thumbs.db diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json deleted file mode 100644 index 027f33c..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "1-sign-in-angular": { - "projectType": "application", - "schematics": {}, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/1-sign-in-angular", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "1-sign-in-angular:build:production" - }, - "development": { - "buildTarget": "1-sign-in-angular:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "1-sign-in-angular:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.css" - ], - "scripts": [] - } - } - } - } - }, - "cli": { - "analytics": false - } -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js deleted file mode 100644 index 039ebc5..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js +++ /dev/null @@ -1,46 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, './coverage/1-sign-in-angular'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - browsers: ['Chrome'], - customLaunchers: { - ChromeHeadlessCI: { - base: 'ChromeHeadless', - flags: ['--no-sandbox'] - } - }, - restartOnFileChange: true, - singleRun: true - }); -}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json deleted file mode 100644 index 3eddc30..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json +++ /dev/null @@ -1,13548 +0,0 @@ -{ - "name": "1-sign-in-angular", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "1-sign-in-angular", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^18.0.2", - "@angular/cdk": "^18.0.2", - "@angular/common": "^18.0.2", - "@angular/compiler": "^18.0.2", - "@angular/core": "^18.0.2", - "@angular/forms": "^18.0.2", - "@angular/material": "^18.0.2", - "@angular/platform-browser": "^18.0.2", - "@angular/platform-browser-dynamic": "^18.0.2", - "@angular/router": "^18.0.2", - "@azure/msal-angular": "^3.0.20", - "@azure/msal-browser": "^3.17.0", - "rxjs": "~7.8.1", - "tslib": "^2.6.3", - "zone.js": "~0.14.7" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^18.0.3", - "@angular/cli": "~18.0.3", - "@angular/compiler-cli": "^18.0.2", - "@types/jasmine": "~5.1.4", - "jasmine-core": "~5.1.2", - "karma": "~6.4.3", - "karma-chrome-launcher": "^3.2.0", - "karma-coverage": "~2.2.1", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.4.5" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1801.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.3.tgz", - "integrity": "sha512-4yba7x315GKim7OuBgv89ZtG50hE3hw64KuRLSGuW+RvwcwLV24VanmdWmFiLC4RKYNSH13E0wZqDNJkrMQepw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.1.3", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.1.3.tgz", - "integrity": "sha512-1avnneitUEfC2A9HX24X6a7Ag8sHkxomVEBsggITFNQoGnZAZHCOBRzm3b9QiqTi1c1eH3p8teW8EAufEjFPKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1801.3", - "@angular-devkit/build-webpack": "0.1801.3", - "@angular-devkit/core": "18.1.3", - "@angular/build": "18.1.3", - "@babel/core": "7.24.7", - "@babel/generator": "7.24.7", - "@babel/helper-annotate-as-pure": "7.24.7", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.24.7", - "@babel/plugin-transform-async-to-generator": "7.24.7", - "@babel/plugin-transform-runtime": "7.24.7", - "@babel/preset-env": "7.24.7", - "@babel/runtime": "7.24.7", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "18.1.3", - "@vitejs/plugin-basic-ssl": "1.1.0", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.19", - "babel-loader": "9.1.3", - "browserslist": "^4.21.5", - "copy-webpack-plugin": "12.0.2", - "critters": "0.0.24", - "css-loader": "7.1.2", - "esbuild-wasm": "0.21.5", - "fast-glob": "3.3.2", - "http-proxy-middleware": "3.0.0", - "https-proxy-agent": "7.0.5", - "istanbul-lib-instrument": "6.0.2", - "jsonc-parser": "3.3.1", - "karma-source-map-support": "1.4.0", - "less": "4.2.0", - "less-loader": "12.2.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.3.1", - "magic-string": "0.30.10", - "mini-css-extract-plugin": "2.9.0", - "mrmime": "2.0.0", - "open": "10.1.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.6.1", - "postcss": "8.4.38", - "postcss-loader": "8.1.1", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.77.6", - "sass-loader": "14.2.1", - "semver": "7.6.2", - "source-map-loader": "5.0.0", - "source-map-support": "0.5.21", - "terser": "5.29.2", - "tree-kill": "1.2.2", - "tslib": "2.6.3", - "undici": "6.19.2", - "vite": "5.3.2", - "watchpack": "2.4.1", - "webpack": "5.92.1", - "webpack-dev-middleware": "7.2.1", - "webpack-dev-server": "5.0.4", - "webpack-merge": "5.10.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.21.5" - }, - "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "@angular/localize": "^18.0.0", - "@angular/platform-server": "^18.0.0", - "@angular/service-worker": "^18.0.0", - "@web/test-runner": "^0.18.0", - "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^18.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.4 <5.6" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@web/test-runner": { - "optional": true - }, - "browser-sync": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1801.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1801.3.tgz", - "integrity": "sha512-JezRR72P4QAc4mnkT60/+kVANCYNKcr2sZyX0/9aBHJsR7lIqgOKz5Dft3FgWHwAJcQFtsZ7OLGVOW3P1LpFkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1801.3", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^5.0.2" - } - }, - "node_modules/@angular-devkit/core": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.3.tgz", - "integrity": "sha512-S0UzNNVLbHPaiSVXHjCd2wX+eERj/YR7jJCc40PHs1gINA7Gtd2q3VDm3bUEWe4P6fP6GNp43qSXmWJFQD0+Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.16.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.7.tgz", - "integrity": "sha512-U0lYPjhOaxdw+0UwVsv5y+wJdZ6DD+0ASiommB7j9kEmrPp53MhSvYNYWvwbIWwJceDa3eNq3fAmQOlVXvFCVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.0.7", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.10", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", - "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/animations": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.1.3.tgz", - "integrity": "sha512-jF4jGHZxV/REnymB11wg5q/DMXewJ0byihmvNQ3OPLHGkWnvE9MdrX44vUzI7RkzqO0suaAg8shxJlkY3OHjeA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "18.1.3" - } - }, - "node_modules/@angular/build": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.1.3.tgz", - "integrity": "sha512-jmTQC7lecJ6c2mJobb5nY2CN6jvdeFFHXN/jif0RkNI8dP60uV1QdMKJtTGbxEtAKXdMgOTReYICVYl6m9Q56Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1801.3", - "@babel/core": "7.24.7", - "@babel/helper-annotate-as-pure": "7.24.7", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.24.7", - "@inquirer/confirm": "3.1.11", - "@vitejs/plugin-basic-ssl": "1.1.0", - "ansi-colors": "4.1.3", - "browserslist": "^4.23.0", - "critters": "0.0.24", - "esbuild": "0.21.5", - "fast-glob": "3.3.2", - "https-proxy-agent": "7.0.5", - "lmdb": "3.0.12", - "magic-string": "0.30.10", - "mrmime": "2.0.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.6.1", - "rollup": "4.18.0", - "sass": "1.77.6", - "semver": "7.6.2", - "undici": "6.19.2", - "vite": "5.3.2", - "watchpack": "2.4.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "@angular/localize": "^18.0.0", - "@angular/platform-server": "^18.0.0", - "@angular/service-worker": "^18.0.0", - "less": "^4.2.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.4 <5.6" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular/cdk": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.3.tgz", - "integrity": "sha512-u14xbuXQz+36nBeHSwRcwRoS64WNhOdK97H47nI1WaIZZaGGvKHR1Wwk2XletDRtIHv2622sJm8h+dbaBNeTGQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^7.1.2" - }, - "peerDependencies": { - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cli": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.0.7.tgz", - "integrity": "sha512-CHnpI6d6MpXFsx3750jN4IX3oeieIMKzUPVZUMvPgDbhGFfChHKdxdJStDjYsH47pORb2pMHULw0RJCAPvtB9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1800.7", - "@angular-devkit/core": "18.0.7", - "@angular-devkit/schematics": "18.0.7", - "@schematics/angular": "18.0.7", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.2", - "inquirer": "9.2.22", - "jsonc-parser": "3.2.1", - "npm-package-arg": "11.0.2", - "npm-pick-manifest": "9.0.1", - "ora": "5.4.1", - "pacote": "18.0.6", - "resolve": "1.22.8", - "semver": "7.6.2", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1800.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.7.tgz", - "integrity": "sha512-ZYIjdngUOjY6G2XJGHtATLr+HhJWdo7Z3ATlzQTGI9D1a02kW3UFlELQBhFIn+1o78FU6W0STZgyfBH8M7wD2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.0.7", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", - "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/cli/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular/cli/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/common": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.1.3.tgz", - "integrity": "sha512-TC71jVph4L+QaXlyJTrW27nbqis4sWwr9hD/RDSNkfY9XCvYDb2MjYjKrpbN03FWiv7lmcKT9zgse1fYENFsKQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "18.1.3", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.1.3.tgz", - "integrity": "sha512-Mrcd+YGsz02GVnVlVbzYp7EJIVoPOIHMvhll1OiylhjQElNVeJCLPIvjVYdylzOUDctXNlchkGf/LbA7BYMbXg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "18.1.3" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.1.3.tgz", - "integrity": "sha512-e9t5v/L1KqPLUQL+WU+d70MBBFcSRuwqbkluZgdDjdW5VelYjzlVzXdrzV6jFElP48T3kQCxJN1dAJkAvKjdOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.24.9", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.2.0", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/compiler": "18.1.3", - "typescript": ">=5.4 <5.6" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", - "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.9", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.9", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.9", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/core": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.1.3.tgz", - "integrity": "sha512-1tFTyGLwio5oYAP2sMVDiOvy5wl/v0a4om7RTCpP2Bjro0ynuYe8FK7ilcmdyPXR1DF7GVdo/0R/eCIQJZ2PwA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.14.0" - } - }, - "node_modules/@angular/forms": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.1.3.tgz", - "integrity": "sha512-4kic/9hpS0HkbTORIkrdox7K40EcVT9VIbBruPoxX7jbfiW5jFaJ/05hLRvRt9RF8Sd9G+g5Uohmkcq/5hmsng==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "18.1.3", - "@angular/core": "18.1.3", - "@angular/platform-browser": "18.1.3", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.1.3.tgz", - "integrity": "sha512-4xsn84orqtJwE9c2kgHeMxP/rOEvs8XrUOcyA89WE025uDXk69lAsm7XsCpwOL9iDjTBFPTOXFIbR+s9jvU39w==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^18.0.0 || ^19.0.0", - "@angular/cdk": "18.1.3", - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/forms": "^18.0.0 || ^19.0.0", - "@angular/platform-browser": "^18.0.0 || ^19.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.3.tgz", - "integrity": "sha512-/k5Xt/WjOk6OlRqb1Wd0ZUQ3NjSbafQyDC9Icy0Mb8qJtiXZjA4VCMkZIiQD7cBxO0F/BsAiYnYNjWrIkCZICA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/animations": "18.1.3", - "@angular/common": "18.1.3", - "@angular/core": "18.1.3" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.1.3.tgz", - "integrity": "sha512-VhYfyPcdKrsLrkd5Lq7W+pqE49DZBpUeCqM/Q+s9rhTSiCCKe9Ikktq8yPZ9iHDpFr203P+T1EMHmILnLvf+gQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "18.1.3", - "@angular/compiler": "18.1.3", - "@angular/core": "18.1.3", - "@angular/platform-browser": "18.1.3" - } - }, - "node_modules/@angular/router": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.1.3.tgz", - "integrity": "sha512-6fXiTgdUnaGGF32Un4+7LttG1N9rziansigvLBzFG//qYU0Ihk49phqDdWxz11iaJ+uK1YVafkjSFvV7z9cgDA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "18.1.3", - "@angular/core": "18.1.3", - "@angular/platform-browser": "18.1.3", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@azure/msal-angular": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@azure/msal-angular/-/msal-angular-3.0.23.tgz", - "integrity": "sha512-RTJSDCVFNVs7SNQC9wlKE8xoYzPiNoCatTlCI8m3pOd1AtWdDAwj2LI6NkrK5zZ/GCHgFUVSc3GO2pTQS5I+JA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@azure/msal-browser": "^3.20.0", - "rxjs": "^7.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.20.0.tgz", - "integrity": "sha512-ErsxbfCGIwdqD8jipqdxpfAGiUEQS7MWUe39Rjhl0ZVPsb1JEe9bZCe2+0g23HDH6DGyCAtnTNN9scPtievrMQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "14.14.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "14.14.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.0.tgz", - "integrity": "sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", - "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.24.7", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@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, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@inquirer/confirm": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz", - "integrity": "sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^8.2.4", - "@inquirer/type": "^1.3.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.4.tgz", - "integrity": "sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.3", - "@inquirer/type": "^1.3.3", - "@types/mute-stream": "^0.0.4", - "@types/node": "^20.14.9", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-spinners": "^2.9.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "picocolors": "^1.0.1", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", - "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/type": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", - "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", - "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", - "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.12.tgz", - "integrity": "sha512-vgTwzNUD3Hy4aqtGhX2+nV/usI0mwy3hDRuTjs8VcK0BLiMVEpNQXgzwlWEgPmA8AAPloUgyOs2nK5clJF5oIg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.12.tgz", - "integrity": "sha512-qOt0hAhj2ZLY6aEWu85rzt5zcyCAQITMhCMEPNlo1tuYekpVAdkQNiwXxEkCjBYvwTskvXuwXOOUpjuSc+aJnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.12.tgz", - "integrity": "sha512-Ggd/UXpE+alMncbELCXA3OKpDj9bDBR3qVO7WRTxstloDglRAHfZmUJgTkeaNKjFO1JHqS7AKy0jba9XebZB1w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.12.tgz", - "integrity": "sha512-Qy4cFXFe9h1wAWMsojex8x1ifvw2kqiZv686YiRTdQEzAfc3vJASHFcD/QejHUCx7YHMYdnUoCS45rG2AiGDTQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.12.tgz", - "integrity": "sha512-c+noT9IofktxktFllKHFmci8ka2SYGSLN17pj/KSl1hg7mmfAiGp4xxFxEwMLTb+SX95vP1DFiR++1I3WLVxvA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.12.tgz", - "integrity": "sha512-CO3MFV8gUx16NU/CyyuumAKblESwvoGVA2XhQKZ976OTOxaTbb8F8D3f0iiZ4MYqsN74jIrFuCmXpPnpjbhfOQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@ngtools/webpack": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.3.tgz", - "integrity": "sha512-VmqOO8CcXKL06anNYlL0OkrqIuBNZQu5n0YVP4z8oneJhDBqwK2++dK0WpcNyIFcg3HsQ7w3BuqUWJ4iPiWxEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "typescript": ">=5.4 <5.6", - "webpack": "^5.54.0" - } - }, - "node_modules/@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, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@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, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@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, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@schematics/angular": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.0.7.tgz", - "integrity": "sha512-46jcRDnMYfnwN5CAXimbptbrBdLrNhG3NFGNT1B2O9DzmlXwLclK/z7lz/v70RcBNWMnOcnsYMFB4IbLhN/Fog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.0.7", - "@angular-devkit/schematics": "18.0.7", - "jsonc-parser": "3.2.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", - "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@schematics/angular/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@schematics/angular/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", - "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.14.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", - "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@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, - "license": "BSD-3-Clause" - }, - "node_modules/@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, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001650", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001650.tgz", - "integrity": "sha512-fgEc7hP/LB7iicdXHUI9VsBsMZmUmlVJeQP2qqQW+3lkqVhbmjEU8zp+h5stWeilX+G7uXuIUIIlWlDw9jdt8g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/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, - "license": "MIT" - }, - "node_modules/cliui/node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", - "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.1", - "globby": "^14.0.0", - "normalize-path": "^3.0.0", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", - "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/critters": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", - "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "postcss-media-query-parser": "^0.2.3" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT" - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true, - "license": "MIT" - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz", - "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==", - "dev": true, - "license": "ISC" - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", - "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.21.5.tgz", - "integrity": "sha512-L/FlOPMMFtw+6qPAbuPvJXdrOYOp9yx/PEwSrIZW0qghY4vgV003evdYDwqQ/9ENMQI0B6RMod9xT4FHtto6OQ==", - "dev": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/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, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/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, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/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, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/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, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/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, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/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, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", - "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.10", - "debug": "^4.3.4", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.18" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "9.2.22", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.22.tgz", - "integrity": "sha512-SqLLa/Oe5rZUagTR9z+Zd6izyatHglbmbvVofo1KzuVB54YHleWzeHNLoR7FOICGOeQSqeLh1cordb3MzhGcEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.2", - "@ljharb/through": "^2.3.13", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", - "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/karma": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", - "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.7.2", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", - "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", - "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-coverage/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", - "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0 || ^5.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-jasmine/node_modules/jasmine-core": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", - "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/karma/node_modules/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, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT" - }, - "node_modules/karma/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/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, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/launch-editor": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", - "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", - "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/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, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lmdb": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.12.tgz", - "integrity": "sha512-JnoEulTgveoC64vlYJ9sufGLuNkk6TcxSYpKxSC9aM42I61jIv3pQH0fgb6qW7HV0+FNqA3g1WCQQYfhfawGoQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "msgpackr": "^1.10.2", - "node-addon-api": "^6.1.0", - "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.4.1", - "weak-lru-cache": "^1.2.2" - }, - "bin": { - "download-lmdb-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.0.12", - "@lmdb/lmdb-darwin-x64": "3.0.12", - "@lmdb/lmdb-linux-arm": "3.0.12", - "@lmdb/lmdb-linux-arm64": "3.0.12", - "@lmdb/lmdb-linux-x64": "3.0.12", - "@lmdb/lmdb-win32-x64": "3.0.12" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", - "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", - "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" - } - }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", - "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" - } - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/nice-napi/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", - "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", - "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.1" - }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", - "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", - "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/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, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT" - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ordered-binary": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", - "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", - "dev": true, - "license": "MIT" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", - "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/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, - "license": "MIT" - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", - "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", - "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true, - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.5.2", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", - "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "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, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "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, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/terser": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", - "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/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, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=10.18" - }, - "peerDependencies": { - "tslib": "^2" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-dump": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", - "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.38", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", - "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/undici": { - "version": "6.19.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.2.tgz", - "integrity": "sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz", - "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "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.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", - "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", - "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.4.0", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "rimraf": "^5.0.5", - "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.1.0", - "ws": "^8.16.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/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, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/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, - "license": "MIT" - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/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, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/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, - "license": "MIT" - }, - "node_modules/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, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", - "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", - "license": "MIT" - } - } -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json deleted file mode 100644 index 8f74dd6..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "1-sign-in-angular", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test --watch=false --no-progress --browsers=ChromeHeadlessCI", - "e2e": "ng e2e" - }, - "private": true, - "dependencies": { - "@angular/animations": "^18.0.2", - "@angular/cdk": "^18.0.2", - "@angular/common": "^18.0.2", - "@angular/compiler": "^18.0.2", - "@angular/core": "^18.0.2", - "@angular/forms": "^18.0.2", - "@angular/material": "^18.0.2", - "@angular/platform-browser": "^18.0.2", - "@angular/platform-browser-dynamic": "^18.0.2", - "@angular/router": "^18.0.2", - "@azure/msal-angular": "^3.0.20", - "@azure/msal-browser": "^3.17.0", - "rxjs": "~7.8.1", - "tslib": "^2.6.3", - "zone.js": "~0.14.7" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^18.0.3", - "@angular/cli": "~18.0.3", - "@angular/compiler-cli": "^18.0.2", - "@types/jasmine": "~5.1.4", - "jasmine-core": "~5.1.2", - "karma": "~6.4.3", - "karma-chrome-launcher": "^3.2.0", - "karma-coverage": "~2.2.1", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.4.5" - } -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts deleted file mode 100644 index dcd054b..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { BrowserUtils } from '@azure/msal-browser'; -import { MsalGuard } from '@azure/msal-angular'; - -import { HomeComponent } from './home/home.component'; -import { GuardedComponent } from './guarded/guarded.component'; - -/** - * MSAL Angular can protect routes in your application - * using MsalGuard. For more info, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/initialization.md#secure-the-routes-in-your-application - */ -const routes: Routes = [ - { - path: 'guarded', - component: GuardedComponent, - canActivate: [ - MsalGuard - ] - }, - { - path: '', - component: HomeComponent, - }, -]; - -@NgModule({ - imports: [ - RouterModule.forRoot(routes, { - // Don't perform initial navigation in iframes or popups - initialNavigation: - !BrowserUtils.isInIframe() && !BrowserUtils.isInPopup() - ? 'enabledNonBlocking' - : 'disabled', // Set to enabledBlocking to use Angular Universal - }), - ], - exports: [RouterModule], -}) -export class AppRoutingModule { } diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css deleted file mode 100644 index ecdc1e2..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css +++ /dev/null @@ -1,22 +0,0 @@ -.toolbar-spacer { - flex: 1 1 auto; -} - -a.title { - color: white; -} - -footer { - position: fixed; - left: 0; - bottom: 0; - width: 100%; - color: white; - text-align: center; -} - -.footer-text { - font-size: small; - text-align: center; - flex: 1 1 auto; -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html deleted file mode 100644 index 535543e..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html +++ /dev/null @@ -1,19 +0,0 @@ - - {{ title }} -
- Guarded Component - - -
-
- - -
- diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts deleted file mode 100644 index 6322cd5..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; -import { - MsalService, - MsalBroadcastService, - MSAL_GUARD_CONFIG, - MsalGuardConfiguration, -} from '@azure/msal-angular'; -import { - AuthenticationResult, - InteractionStatus, - InteractionType, - PopupRequest, - RedirectRequest, - EventMessage, - EventType -} from '@azure/msal-browser'; -import { Subject } from 'rxjs'; -import { filter, takeUntil } from 'rxjs/operators'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'], -}) -export class AppComponent implements OnInit, OnDestroy { - title = 'Microsoft identity platform'; - loginDisplay = false; - isIframe = false; - - private readonly _destroying$ = new Subject(); - - constructor( - @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, - private authService: MsalService, - private msalBroadcastService: MsalBroadcastService, - ) { } - - ngOnInit(): void { - this.isIframe = window !== window.parent && !window.opener; - this.setLoginDisplay(); - this.authService.instance.enableAccountStorageEvents(); // Optional - This will enable ACCOUNT_ADDED and ACCOUNT_REMOVED events emitted when a user logs in or out of another tab or window - - /** - * You can subscribe to MSAL events as shown below. For more info, - * visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md - */ - this.msalBroadcastService.inProgress$ - .pipe( - filter( - (status: InteractionStatus) => status === InteractionStatus.None - ), - takeUntil(this._destroying$) - ) - .subscribe(() => { - this.setLoginDisplay(); - this.checkAndSetActiveAccount(); - }); - - this.msalBroadcastService.msalSubject$ - .pipe( - filter( - (msg: EventMessage) => msg.eventType === EventType.LOGOUT_SUCCESS - ), - takeUntil(this._destroying$) - ) - .subscribe((result: EventMessage) => { - this.setLoginDisplay(); - this.checkAndSetActiveAccount(); - }); - - - this.msalBroadcastService.msalSubject$ - .pipe( - filter( - (msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS - ), - takeUntil(this._destroying$) - ) - .subscribe((result: EventMessage) => { - const payload = result.payload as AuthenticationResult; - this.authService.instance.setActiveAccount(payload.account); - }); - } - - setLoginDisplay() { - this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; - } - - checkAndSetActiveAccount() { - /** - * If no active account set but there are accounts signed in, sets first account to active account - * To use active account set here, subscribe to inProgress$ first in your component - * Note: Basic usage demonstrated. Your app may require more complicated account selection logic - */ - let activeAccount = this.authService.instance.getActiveAccount(); - - if (!activeAccount && this.authService.instance.getAllAccounts().length > 0) { - let accounts = this.authService.instance.getAllAccounts(); - // add your code for handling multiple accounts here - this.authService.instance.setActiveAccount(accounts[0]); - } - } - - login() { - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - if (this.msalGuardConfig.authRequest) { - this.authService.loginPopup({ - ...this.msalGuardConfig.authRequest, - } as PopupRequest) - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } else { - this.authService.loginPopup() - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } - } else { - if (this.msalGuardConfig.authRequest) { - this.authService.loginRedirect({ - ...this.msalGuardConfig.authRequest, - } as RedirectRequest); - } else { - this.authService.loginRedirect(); - } - } - } - - logout() { - - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - this.authService.logoutPopup({ - account: this.authService.instance.getActiveAccount(), - }); - } else { - this.authService.logoutRedirect({ - account: this.authService.instance.getActiveAccount(), - }); - } - } - - // unsubscribe to events when component is destroyed - ngOnDestroy(): void { - this._destroying$.next(undefined); - this._destroying$.complete(); - } -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts deleted file mode 100644 index 799ca2e..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; - -import { MatToolbarModule } from "@angular/material/toolbar"; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { MatTableModule } from '@angular/material/table'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatDialogModule } from '@angular/material/dialog'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { MatIconModule } from '@angular/material/icon'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { HomeComponent } from './home/home.component'; -import { GuardedComponent } from './guarded/guarded.component'; - -import { - IPublicClientApplication, - PublicClientApplication, - InteractionType, -} from '@azure/msal-browser'; - -import { - MSAL_INSTANCE, - MsalGuardConfiguration, - MSAL_GUARD_CONFIG, - MsalService, - MsalBroadcastService, - MsalGuard, - MsalRedirectComponent, - MsalInterceptor, - MsalModule, -} from '@azure/msal-angular'; - -import { msalConfig, loginRequest } from './auth-config'; - -/** - * Here we pass the configuration parameters to create an MSAL instance. - * For more info, visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md - */ -export function MSALInstanceFactory(): IPublicClientApplication { - return new PublicClientApplication(msalConfig); -} - -/** - * Set your default interaction type for MSALGuard here. If you have any - * additional scopes you want the user to consent upon login, add them here as well. - */ -export function MsalGuardConfigurationFactory(): MsalGuardConfiguration { - return { - interactionType: InteractionType.Redirect, - authRequest: loginRequest - }; -} - -@NgModule({ - declarations: [ - AppComponent, - HomeComponent, - GuardedComponent, - ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - AppRoutingModule, - MatToolbarModule, - MatButtonModule, - MatCardModule, - MatTableModule, - MatMenuModule, - HttpClientModule, - BrowserAnimationsModule, - MatDialogModule, - MatIconModule, - MsalModule, - ], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: MsalInterceptor, - multi: true, - }, - { - provide: MSAL_INSTANCE, - useFactory: MSALInstanceFactory, - }, - { - provide: MSAL_GUARD_CONFIG, - useFactory: MsalGuardConfigurationFactory, - }, - MsalService, - MsalBroadcastService, - MsalGuard, - ], - bootstrap: [AppComponent, MsalRedirectComponent], -}) -export class AppModule { } diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts deleted file mode 100644 index 33d5ebc..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * This file contains authentication parameters. Contents of this file - * is roughly the same across other MSAL.js libraries. These parameters - * are used to initialize Angular and MSAL Angular configurations in - * in app.module.ts file. - */ - -import { - LogLevel, - Configuration, - BrowserCacheLocation, -} from '@azure/msal-browser'; - -/** - * Configuration object to be passed to MSAL instance on creation. - * For a full list of MSAL.js configuration parameters, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md - */ -export const msalConfig: Configuration = { - auth: { - clientId: 'd40f3188-3369-4f79-94b9-f1504a0e4c5b', // This is the ONLY mandatory field that you need to supply. - authority: 'https://justrebldemo.ciamlogin.com/', // Replace the placeholder with your tenant subdomain - redirectUri: '/', // Points to window.location.origin by default. You must register this URI on Microsoft Entra admin center/App Registration. - postLogoutRedirectUri: '/', // Points to window.location.origin by default. - }, - cache: { - cacheLocation: BrowserCacheLocation.LocalStorage, // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO between tabs. - }, - system: { - loggerOptions: { - loggerCallback(logLevel: LogLevel, message: string) { - console.log(message); - }, - logLevel: LogLevel.Verbose, - piiLoggingEnabled: false, - }, - }, -}; - -/** - * Scopes you add here will be prompted for user consent during sign-in. - * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. - * For more information about OIDC scopes, visit: - * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes - */ -export const loginRequest = { - scopes: [], -}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts deleted file mode 100644 index 3d1c2fd..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts +++ /dev/null @@ -1,194 +0,0 @@ -/** - * Populate claims table with appropriate description - * @param {Record} claims ID token claims - * @returns claimsTable - */ -export const createClaimsTable = (claims: Record): any[] => { - const claimsTable: any[] = []; - - Object.keys(claims).map((key) => { - switch (key) { - case 'aud': - populateClaim( - key, - claims[key], - "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Microsoft Entra admin center.", - claimsTable - ); - break; - case 'iss': - populateClaim( - key, - claims[key], - 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the external tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0.', - claimsTable - ); - break; - case 'iat': - populateClaim( - key, - changeDateFormat(+claims[key]), - '"Issued At" indicates the timestamp (UNIX timestamp) when the authentication for this user occurred.', - claimsTable - ); - break; - case 'nbf': - populateClaim( - key, - changeDateFormat(+claims[key]), - 'The nbf (not before) claim dictates the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', - claimsTable - ); - break; - case 'exp': - populateClaim( - key, - changeDateFormat(+claims[key]), - "The exp (expiration time) claim dictates the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", - claimsTable - ); - break; - case 'name': - populateClaim( - key, - claims[key], - "The name claim provides a human-readable value that identifies the subject of the token. The value isn't guaranteed to be unique, it can be changed, and it's designed to be used only for display purposes. The 'profile' scope is required to receive this claim.", - claimsTable - ); - break; - case 'preferred_username': - populateClaim( - key, - claims[key], - 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', - claimsTable - ); - break; - case 'nonce': - populateClaim( - key, - claims[key], - 'The nonce matches the parameter included in the original /authorize request to the IDP.', - claimsTable - ); - break; - case 'oid': - populateClaim( - key, - claims[key], - 'The oid (user object id) is the only claim that should be used to uniquely identify a user in an external tenant.', - claimsTable - ); - break; - case 'tid': - populateClaim( - key, - claims[key], - 'The id of the tenant where this application resides. You can use this claim to ensure that only users from the current external tenant can access this app.', - claimsTable - ); - break; - case 'upn': - populateClaim( - key, - claims[key], - 'upn (user principal name) might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', - claimsTable - ); - break; - case 'email': - populateClaim( - key, - claims[key], - 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', - claimsTable - ); - break; - case 'acct': - populateClaim( - key, - claims[key], - 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', - claimsTable - ); - break; - case 'sid': - populateClaim( - key, - claims[key], - 'Session ID, used for per-session user sign-out.', - claimsTable - ); - break; - case 'sub': - populateClaim( - key, - claims[key], - 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', - claimsTable - ); - break; - case 'ver': - populateClaim( - key, - claims[key], - 'Version of the token issued by the Microsoft identity platform', - claimsTable - ); - break; - case 'login_hint': - populateClaim( - key, - claims[key], - 'An opaque, reliable login hint claim. This claim is the best value to use for the login_hint OAuth parameter in all flows to get SSO.', - claimsTable - ); - break; - case 'idtyp': - populateClaim( - key, - claims[key], - 'Value is app when the token is an app-only token. This is the most accurate way for an API to determine if a token is an app token or an app+user token', - claimsTable - ); - break; - case 'uti': - case 'rh': - break; - default: - populateClaim(key, claims[key], '', claimsTable); - } - }); - - return claimsTable; -}; - -/** - * Populates claim, description, and value into an claimsObject - * @param {String} claim - * @param {String} value - * @param {String} description - * @param {Array} claimsObject - */ -const populateClaim = ( - claim: string, - value: string, - description: string, - claimsTable: any[] -): void => { - claimsTable.push({ - claim: claim, - value: value, - description: description, - }); -}; - -/** - * Transforms Unix timestamp to date and returns a string value of that date - * @param {number} date Unix timestamp - * @returns - */ -const changeDateFormat = (date: number) => { - let dateObj = new Date(date * 1000); - return `${date} - [${dateObj.toString()}]`; -}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html deleted file mode 100644 index 6a5e109..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html +++ /dev/null @@ -1 +0,0 @@ -

This component is guarded. You can see this because you're signed-in.

diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts deleted file mode 100644 index 90e9903..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-guarded', - templateUrl: './guarded.component.html', - styleUrls: ['./guarded.component.css'] -}) -export class GuardedComponent implements OnInit { - - constructor() { } - - ngOnInit(): void { - } - -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css deleted file mode 100644 index 8f48484..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css +++ /dev/null @@ -1,26 +0,0 @@ -#table-container { - height: '100vh'; - overflow: auto; -} - -table { - margin: 3% auto 1% auto; - width: 70%; -} - -.mat-row { - height: auto; -} - -.mat-cell { - padding: 8px 8px 8px 0; -} - -p { - text-align: center; -} - -.card-section { - margin: 10%; - padding: 5%; -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html deleted file mode 100644 index fe23f91..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html +++ /dev/null @@ -1,34 +0,0 @@ - - Angular single-page application built with MSAL Angular - Sign-in with Microsoft Entra External ID - This sample demonstrates how to configure MSAL Angular to sign-up, sign-in and sign-out with Microsoft Entra External ID - - -
-

See below the claims in your ID token . For more - information, visit: - - docs.microsoft.com - -

-
-
ApplicationAppIdUrl in the Microsoft Entra admin center
- - - - - - - - - - - - - - - - - -
Claim {{element.claim}} Value {{element.value}} Description {{element.description}}
- diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts deleted file mode 100644 index dcde911..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Component, Inject, OnInit } from '@angular/core'; -import { Subject } from 'rxjs'; -import { filter } from 'rxjs/operators'; - -import { MsalBroadcastService, MsalGuardConfiguration, MsalService, MSAL_GUARD_CONFIG } from '@azure/msal-angular'; -import { AuthenticationResult, InteractionStatus, InteractionType } from '@azure/msal-browser'; - -import { createClaimsTable } from '../claim-utils'; - -@Component({ - selector: 'app-home', - templateUrl: './home.component.html', - styleUrls: ['./home.component.css'], -}) -export class HomeComponent implements OnInit { - loginDisplay = false; - dataSource: any = []; - displayedColumns: string[] = ['claim', 'value', 'description']; - - private readonly _destroying$ = new Subject(); - - constructor( - @Inject(MSAL_GUARD_CONFIG) - private msalGuardConfig: MsalGuardConfiguration, - private authService: MsalService, - private msalBroadcastService: MsalBroadcastService - ) { } - - ngOnInit(): void { - - this.msalBroadcastService.inProgress$ - .pipe( - filter((status: InteractionStatus) => status === InteractionStatus.None) - ) - .subscribe(() => { - this.setLoginDisplay(); - this.getClaims( - this.authService.instance.getActiveAccount()?.idTokenClaims - ); - }); - } - - setLoginDisplay() { - this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; - } - - getClaims(claims: any) { - if (claims) { - const claimsTable = createClaimsTable(claims); - this.dataSource = [...claimsTable]; - } - } - - signUp() { - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - this.authService.loginPopup({ - scopes: [], - prompt: 'create', - }) - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } else { - this.authService.loginRedirect({ - scopes: [], - prompt: 'create', - }); - } - - } - - // unsubscribe to events when component is destroyed - ngOnDestroy(): void { - this._destroying$.next(undefined); - this._destroying$.complete(); - } -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts deleted file mode 100644 index 281c0a7..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Router, RouterModule } from '@angular/router'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MSAL_GUARD_CONFIG, MsalGuardConfiguration } from '@azure/msal-angular'; -import { InteractionType } from '@azure/msal-browser'; - -import { msalConfig } from './auth-config'; -import { AppComponent } from './app.component'; -import { AppModule } from './app.module'; - -describe('Sanitize the configuration object', () => { - - it('should define the config object', () => { - expect(msalConfig).toBeDefined(); - expect(msalConfig.auth.clientId).toBeDefined(); - expect(msalConfig.auth.authority).toBeDefined(); - expect(msalConfig.auth.redirectUri).toBeDefined(); - }); - - it('should not contain client id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.clientId)).toBe(false); - }); - - it('should not contain tenant id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.authority!.split(".com/")[1])).toBe(false); - }); -}); - -describe('Ensure that the app starts', () => { - it('should boot the app', () => { - const bootApplication = () => { - const { router, run } = setup(); - - run(() => router.initialNavigation()); - }; - - expect(bootApplication).not.toThrow(); - }); - - it(`should have as title 'Microsoft identity platform'`, async () => { - const { fixture } = setup(); - const app = fixture.debugElement.componentInstance; - expect(app.title).toEqual('Microsoft identity platform'); - }); - - it('should navigate to unguarded route', async () => { - const { router, run } = setup(); - - const canNavigate = await run(() => router.navigateByUrl('/')); - - expect(canNavigate).toBe(true); - }); - - it('should not navigate to guarded component', async () => { - const { router, run } = setup(); - - const canNavigate = await run(() => router.navigateByUrl('/guarded')); - - expect(canNavigate).toBe(false); - }); -}); - -function setup() { - - function MSALGuardConfigFactory(): MsalGuardConfiguration { - return { - interactionType: InteractionType.Redirect, - }; - } - - TestBed.configureTestingModule({ - imports: [ - AppModule, - RouterModule.forRoot([]), - ], - providers: [ - { - provide: MSAL_GUARD_CONFIG, - useFactory: MSALGuardConfigFactory - } - ] - }).compileComponents(); - - let rootFixture: ComponentFixture; - const initializeRootFixture = () => { - if (rootFixture == null) { - rootFixture = TestBed.createComponent(AppComponent); - } - }; - - return { - get router() { - initializeRootFixture(); - - return TestBed.inject(Router); - }, - run(task: () => TResult) { - initializeRootFixture(); - - return rootFixture.ngZone == null - ? task() - : rootFixture.ngZone.run(task); - }, - fixture: TestBed.createComponent(AppComponent) - }; -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts deleted file mode 100644 index 3612073..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const environment = { - production: true -}; diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts deleted file mode 100644 index f56ff47..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts +++ /dev/null @@ -1,16 +0,0 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -export const environment = { - production: false -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html deleted file mode 100644 index 2ca15fa..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Microsoft identity platform - - - - - - - - - - - - diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts deleted file mode 100644 index c7b673c..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts deleted file mode 100644 index 429bb9e..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css deleted file mode 100644 index de5d5b9..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; -html, body { height: 100%; } -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts deleted file mode 100644 index 064ebac..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts +++ /dev/null @@ -1,21 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - (id: string): T; - keys(): string[]; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); \ No newline at end of file diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json deleted file mode 100644 index 82d91dc..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json deleted file mode 100644 index dbf360d..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "es2022", - "module": "es2022", - "lib": [ - "es2020", - "dom" - ] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json b/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json deleted file mode 100644 index 092345b..0000000 --- a/src/SPA_Sample/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json deleted file mode 100644 index cd45074..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/extensions.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": ["ms-azuretools.ms-entra"] -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json deleted file mode 100644 index 05b8664..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/launch.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "id": "ms-entra.launchSample", - "type": "node", - "request": "launch", - "name": "Launch Program", - "program": "${workspaceFolder}/.vscode/msEntraSampleLaunch.js", - "args": [ - "${input:taskDelay}" - ] - } - ], - "inputs": [ - { - "id": "taskDelay", - "type": "command", - "command": "ms-entra.getScenarioEndTime", - "args": "UserFlowDelay" - } - ] -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json deleted file mode 100644 index 1412bda..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleConfig.json +++ /dev/null @@ -1 +0,0 @@ -{"workingDir":"SPA","command":"npm install && npm run start"} \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js deleted file mode 100644 index dddd99a..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/msEntraSampleLaunch.js +++ /dev/null @@ -1,24 +0,0 @@ -const { exec } = require('child_process'); -const path = require('path'); -const config = require('./msEntraSampleConfig.json'); - -// Read the UserFlowDelay from the args. -// @see launch.json -const startDelay = Math.max(0, Number(process.argv[2] || 0) - Date.now()); - -if (startDelay > 0) { - console.log(`Waiting for the user flow setup to finish before launching sample...`); -} - -setTimeout(() => { - console.log('Running Sample...'); - console.log('This may take some time.'); - - exec(config.command, { cwd: path.resolve(config.workingDir) }, (err, output) => { - if (err) { - console.error(err); - return; - } - console.log(output); - }); -}, startDelay); diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js deleted file mode 100644 index b6090a2..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/.vscode/vsCodeLaunchAngularSample.js +++ /dev/null @@ -1,12 +0,0 @@ -const {exec} = require('child_process'); -const path = require("path"); -exec('npm install && npm start',{cwd:path.resolve('.\\SPA')}, (err, output) => { - // once the command has completed, the callback function is called - if (err) { - // log and return if we encounter an error - console.error("Error on running commands: ", err) - return - } - // log the output received from the command - console.log("Output: \n", output) -}) \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md deleted file mode 100644 index a977f6e..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/AppCreationScripts.md +++ /dev/null @@ -1,137 +0,0 @@ -# Registering sample apps with the Microsoft identity platform and updating configuration files using PowerShell - -## Overview - -### Quick summary - -1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "your test tenant's id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - -### More details - -- [Goal of the provided scripts](#goal-of-the-provided-scripts) - - [Presentation of the scripts](#presentation-of-the-scripts) - - [Usage pattern for tests and DevOps scenarios](#usage-pattern-for-tests-and-DevOps-scenarios) -- [How to use the app creation scripts?](#how-to-use-the-app-creation-scripts) - - [Pre-requisites](#pre-requisites) - - [Run the script and start running](#run-the-script-and-start-running) - - [Four ways to run the script](#four-ways-to-run-the-script) - - [Option 1 (interactive)](#option-1-interactive) - - [Option 2 (Interactive, but create apps in a specified tenant)](#option-3-Interactive-but-create-apps-in-a-specified-tenant) - - [Running the script on Azure Sovereign clouds](#running-the-script-on-Azure-Sovereign-clouds) - -## Goal of the provided scripts - -### Presentation of the scripts - -This sample comes with two PowerShell scripts, which automate the creation of the Microsoft Entra applications, and the configuration of the code for this sample. Once you run them, you will only need to build the solution and you are good to test. - -These scripts are: - -- `Configure.ps1` which: - - creates Microsoft Entra applications and their related objects (permissions, dependencies, secrets, app roles), - - changes the configuration files in the sample projects. - - creates a summary file named `createdApps.html` in the folder from which you ran the script, and containing, for each Azure AD application it created: - - the identifier of the application - - the AppId of the application - - the url of its registration in the [Microsoft Entra admin center](https://entra.microsoft.com/). - -- `Cleanup.ps1` which cleans-up the Azure AD objects created by `Configure.ps1`. Note that this script does not revert the changes done in the configuration files, though. You will need to undo the change from source control (from Visual Studio, or from the command line using, for instance, `git reset`). - -> :information_source: If the sample supports using certificates instead of client secrets, this folder will contain an additional set of scripts: `Configure-WithCertificates.ps1` and `Cleanup-WithCertificates.ps1`. You can use them in the same way to register app(s) that use certificates instead of client secrets. - -### Usage pattern for tests and DevOps scenarios - -The `Configure.ps1` will stop if it tries to create an Azure AD application which already exists in the tenant. For this, if you are using the script to try/test the sample, or in DevOps scenarios, you might want to run `Cleanup.ps1` just before `Configure.ps1`. This is what is shown in the steps below. - -## How to use the app creation scripts? - -### Pre-requisites - -1. PowerShell 7 or later (see: [installing PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)) -1. Open PowerShell (On Windows, press `Windows-R` and type `PowerShell` in the search window) - -### (Optionally) install Microsoft.Graph.Applications PowerShell modules - -The scripts install the required PowerShell module (Microsoft.Graph.Applications) for the current user if needed. However, if you want to install if for all users on the machine, you can follow the following steps: - -1. If you have never done it already, in the PowerShell window, install the Microsoft.Graph.Applications PowerShell modules. For this: - - 1. Open PowerShell - 2. Type: - - ```PowerShell - Install-Module Microsoft.Graph.Applications - ``` - - or if you want the modules to be installed for the current user only, run: - - ```PowerShell - Install-Module Microsoft.Graph.Applications -Scope CurrentUser - ``` - -### Run the script and start running - -1. Go to the `AppCreationScripts` sub-folder. From the folder where you cloned the repo, - - ```PowerShell - cd AppCreationScripts - ``` - -1. Run the scripts. See below for the [four options](#four-ways-to-run-the-script) to do that. -1. Open the Visual Studio solution, and in the solution's context menu, choose **Set Startup Projects**. -1. select **Start** for the projects - -You're done! - -### Two ways to run the script - -We advise four ways of running the script: - -- Interactive: you will be prompted for credentials, and the scripts decide in which tenant to create the objects, -- Interactive in specific tenant: you will provide the tenant in which you want to create the objects and then you will be prompted for credentials, and the scripts will create the objects, - -Here are the details on how to do this. - -#### Option 1 (interactive) - -- Just run ``.\Configure.ps1``, and you will be prompted to sign-in (email address, password, and if needed MFA). -- The script will be run as the signed-in user and will use the tenant in which the user is defined. - -Note that the script will choose the tenant in which to create the applications, based on the user. Also to run the `Cleanup.ps1` script, you will need to re-sign-in. - -#### Option 2 (Interactive, but create apps in a specified tenant) - - if you want to create the apps in a particular tenant, you can use the following option: - -- Open the [Microsoft Entra admin center](https://entra.microsoft.com/) -- Select the Microsoft Entra tenant you are interested in (in the combo-box below your name on the top right of the browser window) -- Select **Overview** on the left side menu and then select the **Overview** tab. Copy the content of the **Tenant Id** property -- Then use the full syntax to run the scripts: - -```PowerShell -$tenantId = "yourTenantIdGuid" -. .\Cleanup.ps1 -TenantId $tenantId -. .\Configure.ps1 -TenantId $tenantId -``` - -### Running the script on Azure Sovereign clouds - -All the four options listed above can be used on any Azure Sovereign clouds. By default, the script targets `AzureCloud`, but it can be changed using the parameter `-AzureEnvironmentName`. - -The acceptable values for this parameter are: - -- AzureCloud -- AzureChinaCloud -- AzureUSGovernment - -Example: - - ```PowerShell - . .\Cleanup.ps1 -AzureEnvironmentName "AzureUSGovernment" - . .\Configure.ps1 -AzureEnvironmentName "AzureUSGovernment" - ``` diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 deleted file mode 100644 index d209690..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Cleanup.ps1 +++ /dev/null @@ -1,152 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - - -Function Cleanup -{ - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - <# - .Description - This function removes the Microsoft Entra applications for the sample. These applications were created by the Configure.ps1 script - #> - - # $tenantId is the Microsoft Entra Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant - # into which you want to create the apps. Look it up in the Microsoft Entra admin center in the "Properties" of the Azure AD. - - # Connect to the Microsoft Graph API - Write-Host "Connecting to Microsoft Graph" - - - if ($tenantId -eq "") - { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else - { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Removes the applications - Write-Host "Cleaning-up applications from tenant '$tenantId'" - - Write-Host "Removing 'spa' (ciam-msal-angular-spa) if needed" - try - { - Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove the application 'ciam-msal-angular-spa'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red - } - - Write-Host "Making sure there are no more (ciam-msal-angular-spa) applications found, will remove if needed..." - $apps = Get-MgApplication -Filter "DisplayName eq 'ciam-msal-angular-spa'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain - - if ($apps) - { - Remove-MgApplication -ApplicationId $apps.Id - } - - foreach ($app in $apps) - { - Remove-MgApplication -ApplicationId $app.Id - Write-Host "Removed ciam-msal-angular-spa.." - } - - # also remove service principals of this app - try - { - Get-MgServicePrincipal -filter "DisplayName eq 'ciam-msal-angular-spa'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove ServicePrincipal 'ciam-msal-angular-spa'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red - } -} - -# Pre-requisites -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -$ErrorActionPreference = "Stop" - - -try -{ - Cleanup -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} - -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 deleted file mode 100644 index dcd334b..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/Configure.ps1 +++ /dev/null @@ -1,329 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - -<# - This script creates the Microsoft Entra applications needed for this sample and updates the configuration files - for the visual Studio projects from the data in the Microsoft Entra applications. - - In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user - - There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. -#> - -# Adds the requiredAccesses (expressed as a pipe separated string) to the requiredAccess structure -# The exposed permissions are in the $exposedPermissions collection, and the type of permission (Scope | Role) is -# described in $permissionType -Function AddResourcePermission($requiredAccess, ` - $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) -{ - foreach($permission in $requiredAccesses.Trim().Split("|")) - { - foreach($exposedPermission in $exposedPermissions) - { - if ($exposedPermission.Value -eq $permission) - { - $resourceAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess - $resourceAccess.Type = $permissionType # Scope = Delegated permissions | Role = Application permissions - $resourceAccess.Id = $exposedPermission.Id # Read directory data - $requiredAccess.ResourceAccess += $resourceAccess - } - } - } -} - -# -# Example: GetRequiredPermissions "Microsoft Graph" "Graph.Read|User.Read" -# See also: http://stackoverflow.com/questions/42164581/how-to-configure-a-new-azure-ad-application-through-powershell -Function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) -{ - # If we are passed the service principal we use it directly, otherwise we find it from the display name (which might not be unique) - if ($servicePrincipal) - { - $sp = $servicePrincipal - } - else - { - $sp = Get-MgServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'" - } - $appid = $sp.AppId - $requiredAccess = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess - $requiredAccess.ResourceAppId = $appid - $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphResourceAccess] - - # $sp.Oauth2Permissions | Select Id,AdminConsentDisplayName,Value: To see the list of all the Delegated permissions for the application: - if ($requiredDelegatedPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2PermissionScopes -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope" - } - - # $sp.AppRoles | Select Id,AdminConsentDisplayName,Value: To see the list of all the Application permissions for the application - if ($requiredApplicationPermissions) - { - AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role" - } - return $requiredAccess -} - - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function UpdateLine([string] $line, [string] $value) -{ - $index = $line.IndexOf(':') - $lineEnd = '' - - if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } - - if ($index -ige 0) - { - $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = UpdateLine $line $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function ReplaceInLine([string] $line, [string] $key, [string] $value) -{ - $index = $line.IndexOf($key) - if ($index -ige 0) - { - $index2 = $index+$key.Length - $line = $line.Substring(0, $index) + $value + $line.Substring($index2) - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = ReplaceInLine $line $key $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - - -<#.Description - Primary entry method to create and configure app registrations -#> -Function ConfigureApplications -{ - <#.Description - This function creates the Microsoft Entra applications for the sample in the provided external tenant and updates the - configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) - so that they are consistent with the Applications parameters - #> - - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) - Write-Host "Connecting to Microsoft Graph" - if ($tenantId -eq "") { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Create the spa AAD application - Write-Host "Creating the AAD application (ciam-msal-angular-spa)" - # create the application - $spaAadApplication = New-MgApplication -DisplayName "ciam-msal-angular-spa" ` - -Spa ` - @{ ` - RedirectUris = "http://localhost:4200"; ` - } ` - -SignInAudience AzureADMyOrg ` - #end of command - - $currentAppId = $spaAadApplication.AppId - $currentAppObjectId = $spaAadApplication.Id - - $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain - #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/ciam-msal-angular-spa") - - # create the service principal of the newly created application - $spaServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} - - # add the user running the script as an app owner if needed - $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId - if ($owner -eq $null) - { - New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} - Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($spaServicePrincipal.DisplayName)'" - } - Write-Host "Done creating the spa application (ciam-msal-angular-spa)" - - # URL of the AAD application in the Microsoft Entra admin center - # Future? $spaPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - $spaPortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" - - Add-Content -Value "spa$currentAppIdciam-msal-angular-spa" -Path createdApps.html - # Declare a list to hold RRA items - $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Graph.PowerShell.Models.MicrosoftGraphRequiredResourceAccess] - - # Add Required Resources Access (from 'spa' to 'Microsoft Graph') - Write-Host "Getting access from 'spa' to 'Microsoft Graph'" - $requiredPermission = GetRequiredPermissions -applicationDisplayName "Microsoft Graph"` - -requiredDelegatedPermissions "openid|offline_access" - - $requiredResourcesAccess.Add($requiredPermission) - Write-Host "Added 'Microsoft Graph' to the RRA list." - # Useful for RRA additions troubleshooting - # $requiredResourcesAccess.Count - # $requiredResourcesAccess - - Update-MgApplication -ApplicationId $currentAppObjectId -RequiredResourceAccess $requiredResourcesAccess - Write-Host "Granted permissions." - - - # print the registered app portal URL for any further navigation - Write-Host "Successfully registered and configured that app registration for 'ciam-msal-angular-spa' at `n $spaPortalUrl" -ForegroundColor Green - - # Update config file for 'spa' - # $configFile = $pwd.Path + "\..\SPA\src\app\auth-config.ts" - $configFile = $(Resolve-Path ($pwd.Path + "\..\SPA\src\app\auth-config.ts")) - - $dictionary = @{ "Enter_the_Application_Id_Here" = $spaAadApplication.AppId; "Enter_the_Tenant_Subdomain_Here" = $tenantName.Split(".onmicrosoft.com")[0] }; - - Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow - $dictionary - Write-Host "-----------------" - - ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" - Write-Host "IMPORTANT: Please follow the instructions below to complete a few manual step(s) in the Microsoft Entra admin center": - Write-Host "- For spa" - Write-Host " - Navigate to $spaPortalUrl" - Write-Host " - Navigate to your tenant and create user flows to allow users to sign up for the application." -ForegroundColor Red - Write-Host " - The delegated permissions for the 'spa' application require admin consent. Do remember to navigate to the application registration in the app portal and consent for those." -ForegroundColor Red - Write-Host -ForegroundColor Green "------------------------------------------------------------------------------------------------" - -Add-Content -Value "" -Path createdApps.html -} # end of ConfigureApplications function - -# Pre-requisites - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -Set-Content -Value "" -Path createdApps.html -Add-Content -Value "" -Path createdApps.html - -$ErrorActionPreference = "Stop" - -# Run interactively (will ask you for the tenant ID) - -try -{ - ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json deleted file mode 100644 index 7fefcda..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/apps.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "Sample": { - "Title": "An Angular single-page application using MSAL Angular to authenticate users against Microsoft Entra External ID", - "Client": "SinglePageApplication", - "Level": 100 - }, - "AppRegistrations": [ - { - "x-ms-id": "ciam-angular-spa", - "x-ms-name": "ms-identity-ciam-angular-spa", - "x-ms-version": "2.0", - "replyUrlsWithType": [ - { - "url": "http://localhost:4200/", - "type": "Spa" - } - ], - "requiredResourceAccess": [ - { - "x-ms-resourceAppName": "Microsoft Graph", - "resourceAppId": "00000003-0000-0000-c000-000000000000", - "resourceAccess": [ - { - "id": "37f7f235-527c-4136-accd-4a02d197296e", - "type": "Scope", - "x-ms-name": "openid" - }, - { - "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182", - "type": "Scope", - "x-ms-name": "offline_access" - } - ] - } - ], - "codeConfigurations": [ - { - "settingFile": "SPA/src/app/auth-config.ts", - "replaceTokens": { - "appId": "Enter_the_Application_Id_Here", - "tenantName": "Enter_the_Tenant_Subdomain_Here" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md deleted file mode 100644 index ac776c5..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/quickstart.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Portal quickstart for Angular SPA" -description: Learn how to run an sample Angular single-page application to sign in users -services: active-directory -author: kengaderdus -manager: mwongerapk -ms.author: kengaderdus -ms.service: active-directory -ms.workload: identity -ROBOTS: NOINDEX -ms.subservice: ciam -ms.topic: portal -ms.date: 04/19/2023 ---- -# Portal quickstart for Angular SPA - -> In this quickstart, you download and run a code sample that demonstrates how an Angular SPA that can sign in users with Microsoft Entra External ID. -> -> [!div renderon="portal" id="display-on-portal" class="sxs-lookup"] -> -> 1. Make sure you've installed [Node.js](https://nodejs.org/download/). -> 1. Unzip the sample. -> 1. Locate the sample folder in your terminal, then run the following commands: -> -> ```console -> cd SPA && npm install && npm start -> ``` -> -> 1. Visit `http://localhost:4200` in your browser. -> 1. Select **Sign-in** on the navigation bar, then follow the prompts. -> \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json deleted file mode 100644 index 924aaaa..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/AppCreationScripts/sample.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "Sample": { - "Title": "Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID", - "Level": 100, - "Client": "Angular SPA", - "Languages": [ - "javascript", - "typescript" - ], - "Products": [ - "azure-active-directory", - "msal-angular" - ], - "RepositoryUrl": "ms-identity-ciam-javascript-tutorial", - "Platform": "JavaScript", - "Endpoint": "AAD v2.0", - "Provider": "CIAM", - "description": "This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra and calls Microsoft Graph Api" - }, - "AADApps": [ - { - "Id": "spa", - "Name": "ciam-msal-angular-spa", - "Kind": "SinglePageApplication", - "Audience": "AzureADMyOrg", - "SDK": "MsalAngular", - "SampleSubPath": "1-Authentication\\1-sign-in-angular\\SPA", - "HomePage": "http://localhost:4200", - "ReplyUrls": "http://localhost:4200", - "RequiredResourcesAccess": [ - { - "Resource": "Microsoft Graph", - "DelegatedPermissions": [ - "openid", - "offline_access" - ] - } - ], - "ManualSteps": [ - { - "Comment": "Navigate to your tenant and create user flows to allow users to sign up for the application." - } - ] - } - ], - "CodeConfiguration": [ - { - "App": "spa", - "SettingKind": "Replace", - "SettingFile": "\\..\\SPA\\src\\app\\auth-config.ts", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "Enter_the_Tenant_Subdomain_Here", - "value": "$tenantName" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md deleted file mode 100644 index 8dd2cfa..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/README.md +++ /dev/null @@ -1,415 +0,0 @@ ---- -page_type: sample -name: Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID -description: This sample demonstrates an Angular single-page application (SPA) that uses Microsoft Authentication Library for Angular (MSAL Angular) to sign-in users with Microsoft Entra Consumers Identity and Access Management (Microsoft Entra External ID) -languages: - - javascript - - typescript -products: - - entra-external-id - - msal-angular -urlFragment: ms-identity-ciam-javascript-tutorial-2-sign-in-angular -extensions: - services: - - ms-identity - platform: - - JavaScript - endpoint: - - AAD v2.0 - level: - - 100 - client: - - Angular SPA ---- - -# Angular single-page application using MSAL Angular to sign-in users against Microsoft Entra External ID - -* [Overview](#overview) -* [Scenario](#scenario) -* [Contents](#contents) -* [Prerequisites](#prerequisites) -* [Setup the sample](#setup-the-sample) -* [Explore the sample](#explore-the-sample) -* [Troubleshooting](#troubleshooting) -* [About the code](#about-the-code) -* [Contributing](#contributing) -* [Learn More](#learn-more) - -## Overview - -This sample demonstrates an Angular single-page application (SPA) that lets users sign-in with Microsoft Entra External ID using the [Microsoft Authentication Library for Angular](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular) (MSAL Angular). - -Here you'll learn about [ID Tokens](https://docs.microsoft.com/azure/active-directory/develop/id-tokens), [OIDC scopes](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes), [single-sign on](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso), **silent requests** and more. - -## Scenario - -1. The client Angular SPA uses the to sign-in a user and obtain a JWT [ID Token](https://aka.ms/id-tokens) from **Microsoft Entra External ID**. -1. The **ID Token** proves that the user has successfully authenticated against **Microsoft Entra External ID**. - -![Scenario Image](./ReadmeFiles/topology.png) - -## Contents - -| File/folder | Description | -|---------------------------------|-----------------------------------------------------------| -| `src/app/auth-config.ts` | Authentication parameters reside here. | -| `src/app/app.module.ts` | MSAL Angular configuration parameters reside here. | -| `src/app/app-routing.module.ts` | Configure your MSAL-Guard here. | - -## Prerequisites - -* [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -* [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -* [VS Code Azure Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) extension is recommended for interacting with Azure through VS Code Interface. -* A modern web browser. -* An external tenant. To create one, choose from the following methods: - * (Recommended) Use the [Microsoft Entra External ID extension](https://aka.ms/ciamvscode/readme/marketplace) to set up an external tenant directly in Visual Studio Code. - * [Create a new external tenant](https://learn.microsoft.com/entra/external-id/customers/how-to-create-external-tenant-portal) in the Microsoft Entra admin center. -* A user account in your external tenant. - ->This sample will not work with a **personal Microsoft account**. If you're signed in to the [Microsoft Entra admin center](https://entra.microsoft.com/) with a personal Microsoft account and have not created a user account in your directory before, you will need to create one before proceeding. - -## Setup the sample - -### Step 1: Clone or download this repository - -From your shell or command line: - -```console -git clone https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial.git -``` - -or download and extract the repository *.zip* file. - -> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. - -### Step 2: Install project dependencies - -```console - cd 1-Authentication\1-sign-in-angular\SPA - npm install -``` - -### Step 3: Register the sample application(s) in your tenant - -There is one project in this sample. To register it, you can: - -- follow the steps below for manually register your apps -- or use PowerShell scripts that: - - **automatically** creates the Microsoft Entra applications and related objects (passwords, permissions, dependencies) for you. - - modify the projects' configuration files. - -
- Expand this section if you want to use this automation: - - > :warning: If you have never used **Microsoft Graph PowerShell** before, we recommend you go through the [App Creation Scripts Guide](./AppCreationScripts/AppCreationScripts.md) once to ensure that your environment is prepared correctly for this step. - - 1. On Windows, run PowerShell as **Administrator** and navigate to the root of the cloned directory - 1. In PowerShell run: - - ```PowerShell - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force - ``` - - 1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. - 1. For interactive process -in PowerShell, run: - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "[Optional] - your tenant id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - - > Other ways of running the scripts are described in [App Creation Scripts guide](./AppCreationScripts/AppCreationScripts.md). The scripts also provide a guide to automated application registration, configuration and removal which can help in your CI/CD scenarios. -
- -#### Choose the external tenant where you want to create your applications - -To manually register the apps, as a first step you'll need to: - -1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/). -1. If your account is present in more than one external tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired external tenant. - -#### Create User Flows - -Please refer to: [Tutorial: Create a sign-up and sign-in user flow](https://learn.microsoft.com/entra/external-id/customers/how-to-user-flow-sign-up-sign-in-customers) - -> :information_source: To enable password reset in an external tenant, please refer to: [Tutorial: Enable users to unlock their account or reset passwords using Microsoft Entra self-service password reset](https://learn.microsoft.com/entra/identity/authentication/tutorial-enable-sspr) - -#### Add External Identity Providers - -Please refer to: - -* [Tutorial: Add Google as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-google-federation-customers) -* [Tutorial: Add Facebook as an identity provider](https://learn.microsoft.com/entra/external-id/customers/how-to-facebook-federation-customers) - -#### Register the spa app (ciam-msal-angular-spa) - -1. Navigate to the [Microsoft Entra admin center](https://entra.microsoft.com/) and select the CIAM service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - 1. In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `ciam-msal-angular-spa`. - 1. Under **Supported account types**, select **Accounts in this organizational directory only** - 1. Select **Register** to create the application. -1. In the **Overview** blade, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. In the app's registration screen, select the **Authentication** blade to the left. -1. If you don't have a platform added, select **Add a platform** and select the **Single-page application** option. - 1. In the **Redirect URI** section enter the following redirect URI: - 1. `http://localhost:4200` - 1. Click **Save** to save your changes. -1. Since this app signs-in users, we will now proceed to select **delegated permissions**, which is is required by apps signing-in users. - 1. In the app's registration screen, select the **API permissions** blade in the left to open the page where we add access to the APIs that your application needs: - 1. Select the **Add a permission** button and then: - 1. Ensure that the **Microsoft APIs** tab is selected. - 1. In the *Commonly used Microsoft APIs* section, select **Microsoft Graph** - 1. In the **Delegated permissions** section, select **openid**, **offline_access** in the list. Use the search box if necessary. - 1. Select the **Add permissions** button at the bottom. -1. At this stage, the permissions are assigned correctly, but since it's an external tenant, the users themselves cannot consent to these permissions. To get around this problem, we'd let the [tenant administrator consent on behalf of all users in the tenant](https://docs.microsoft.com/azure/active-directory/develop/v2-admin-consent). Select the **Grant admin consent for {tenant}** button, and then select **Yes** when you are asked if you want to grant consent for the requested permissions for all accounts in the tenant. You need to be a tenant admin to be able to carry out this operation. - -##### Configure the spa app (ciam-msal-angular-spa) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `SPA\src\app\auth-config.ts` file. -1. Find the key `Enter_the_Application_Id_Here` and replace the existing value with the application ID (clientId) of `ciam-msal-angular-spa` app copied from the Microsoft Entra admin center. -1. Find the placeholder `Enter_the_Tenant_Subdomain_Here` and replace it with the Directory (tenant) subdomain. For instance, if your tenant primary domain is `contoso.onmicrosoft.com`, use `contoso`. If you don't have your tenant domain name, learn how to [read your tenant details](https://review.learn.microsoft.com/azure/active-directory/external-identities/customers/how-to-create-customer-tenant-portal#get-the-customer-tenant-details). - -### Step 4: Running the sample - -```console - cd 1-Authentication\1-sign-in-angular\SPA - npm start -``` - -## Explore the sample - -1. Open your browser and navigate to `http://localhost:4200`. -1. Select the **Sign-in** button on the top right corner. Once you sign-in, you will see some of the important claims in your ID token. - -![Screenshot](./ReadmeFiles/screenshot.png) - -> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR_ivMYEeUKlEq8CxnMPgdNZUNDlUTTk2NVNYQkZSSjdaTk5KT1o4V1VVNS4u). - -## Troubleshooting - -
- Expand for troubleshooting info - -> * Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-active-directory-b2c` `node` `ms-identity` `adal` `msal-js` `msal`]. - -To provide feedback on or suggest features for Microsoft Entra, visit [User Voice page](https://feedback.azure.com/d365community/forum/79b1327d-d925-ec11-b6e6-000d3a4f06a4). -
- -## About the code - -MSAL Angular is a wrapper around MSAL.js (i.e. *msal-browser*). As such, many of MSAL.js's public APIs are also available to use with MSAL Angular, while MSAL Angular itself offers additional [public APIs](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/public-apis.md). - -### Configuration - -You can initialize your application in several ways, for instance, by loading the configuration parameters from another server. See [Configuration options](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md) for more information. - -In the sample, authentication parameters reside in [auth-config.ts](./SPA/src/app/auth-config.ts). These parameters then are used for initializing MSAL Angular configuration options in [app.module.ts](./SPA/src/app/app.module.ts). - -### Sign-in - -**MSAL Angular** exposes 3 login methods: `loginPopup()`, `loginRedirect()` and `ssoSilent()`. First, setup your default interaction type in [app.module.ts](./SPA/src/app/app.module.ts): - -```typescript -export function MSALGuardConfigFactory(): MsalGuardConfiguration { - return { - interactionType: InteractionType.Redirect, - }; -} -``` - -Then, define a login method in [app.component.ts](./SPA/src/app/app.component.ts) as follows: - -```typescript -export class AppComponent implements OnInit { - - constructor( - @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, - private authService: MsalService, - private msalBroadcastService: MsalBroadcastService - ) {} - - ngOnInit(): void { - - login() { - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - if (this.msalGuardConfig.authRequest) { - this.authService.loginPopup({...this.msalGuardConfig.authRequest} as PopupRequest) - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } else { - this.authService.loginPopup() - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } - } else { - if (this.msalGuardConfig.authRequest) { - this.authService.loginRedirect({...this.msalGuardConfig.authRequest} as RedirectRequest); - } else { - this.authService.loginRedirect(); - } - } - } -} -``` - -If you already have a session that exists with the authentication server, you can use the `ssoSilent()` API to make a request for tokens without interaction. You will need to pass a [loginHint](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso#automatically-select-account-on-azure-ad) in the request object in order to successfully obtain a token silently. - -```typescript -export class AppComponent implements OnInit { - - constructor( - private authService: MsalService, - ) {} - - ngOnInit(): void { - const silentRequest: SsoSilentRequest = { - scopes: ["User.Read"], - loginHint: "user@contoso.com" - } - - this.authService.ssoSilent(silentRequest) - .subscribe({ - next: (result: AuthenticationResult) => { - console.log("SsoSilent succeeded!"); - }, - error: (error) => { - this.authService.loginRedirect(); - } - }); - } -} -``` - -### ID Token Validation - -When you receive an [ID token](https://docs.microsoft.com/azure/active-directory/develop/id-tokens) directly from the IdP on a secure channel (e.g. HTTPS), such is the case with SPAs, there’s no need to validate it. If you were to do it, you would validate it by asking the same server that gave you the ID token to give you the keys needed to validate it, which renders it pointless, as if one is compromised so is the other. - -### Sign-out - -The application redirects the user to the **Microsoft identity platform** logout endpoint to sign out. This endpoint clears the user's session from the browser. If your app did not go to the logout endpoint, the user may re-authenticate to your app without entering their credentials again, because they would have a valid single sign-in session with the **Microsoft identity platform** endpoint. For more information, see: [Send a sign-out request](https://docs.microsoft.com/azure/active-directory/develop/v2-protocols-oidc#send-a-sign-out-request). - -### Securing Routes - -You can add authentication to secure specific routes in your application by just adding `canActivate: [MsalGuard]` to your route definition. It can be added at the parent or child routes. This ensures that the user must be signed-in to access the secured route. - -```typescript - const routes: Routes = [ - { - path: 'guarded', - component: GuardedComponent, - canActivate: [ - MsalGuard - ] - } - ] -``` - -### Events API - -Using the event API, you can register an event callback that will do something when an event is emitted. When registering an event callback in an Angular component you will need to make sure you do 2 things. - -1. The callback is registered only once -2. The callback is unregistered before the component unmounts. - -```typescript -export class HomeComponent implements OnInit { - - private readonly _destroying$ = new Subject(); - - constructor(private authService: MsalService, private msalBroadcastService: MsalBroadcastService) { } - - ngOnInit(): void { - this.msalBroadcastService.msalSubject$ - .pipe( - filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS), - takeUntil(this._destroying$) - ) - .subscribe((result: EventMessage) => { - // do something with the result, such as accessing ID token - }); - } - - ngOnDestroy(): void { - this._destroying$.next(undefined); - this._destroying$.complete(); - } -} -``` - -For more information, see: [Events in MSAL Angular v2](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md). - -### Deploying SPA to Azure Storage - -There is one single-page application in this sample. To deploy it to **Azure Storage**, you'll need to: - -- create an Azure Storage blob and obtain website coordinates -- build your project and upload it to Azure Storage blob -- update config files with website coordinates - -> :information_source: If you would like to use **VS Code Azure Tools** extension for deployment, [watch the tutorial](https://docs.microsoft.com/azure/developer/javascript/tutorial-vscode-static-website-node-01) offered by Microsoft Docs. - -#### Build and upload (ciam-msal-angular-spa) to an Azure Storage blob - -Build your project to get a distributable files folder, where your built `html`, `css` and `javascript` files will be generated. Then follow the steps below: - -> :warning: When uploading, make sure you upload the contents of your distributable files folder and **not** the entire folder itself. - -> :information_source: If you don't have an account already, see: [How to create a storage account](https://docs.microsoft.com/azure/storage/common/storage-account-create). - -1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/). -1. Locate your storage account and display the account overview. -1. Select **Static website** to display the configuration page for static websites. -1. Select **Enabled** to enable static website hosting for the storage account. -1. In the **Index document name** field, specify a default index page (For example: `index.html`). -1. The default **index page** is displayed when a user navigates to the root of your static website. -1. Select **Save**. The Microsoft Entra admin center now displays your static website endpoint. Make a note of the **Primary endpoint field**. -1. In the `ciam-msal-angular-spa` project source code, update your configuration file with the **Primary endpoint field** as your new **Redirect URI** (you will register this URI later). -1. Next, select **Storage Explorer**. -1. Expand the **BLOB CONTAINERS** node, and then select the `$web` container. -1. Choose the **Upload** button to upload files. -1. If you intend for the browser to display the contents of file, make sure that the content type of that file is set to `text/html`. -1. In the pane that appears beside the **account overview page** of your storage account, select **Static Website**. The URL of your site appears in the **Primary endpoint field**. In the next section, you will register this URI. - -#### Update the CIAM app registration for ciam-msal-angular-spa - -1. Navigate back to to the [Microsoft Entra admin center](https://entra.microsoft.com/). -1. In the left-hand navigation pane, select the **Microsoft Entra** service, and then select **App registrations**. -1. In the resulting screen, select `ciam-msal-angular-spa`. -1. In the app's registration screen, select **Authentication** in the menu. - 1. In the **Redirect URIs** section, update the reply URLs to match the site URL of your Azure deployment. For example: - 1. `https://ciam-msal-angular-spa.azurewebsites.net/` - - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Learn More - -* [Configure your company branding](https://learn.microsoft.com/entra/fundamentals/how-to-customize-branding) -* [OAuth 2.0 authorization with Microsoft Entra ID](https://learn.microsoft.com/entra/architecture/auth-oauth2) -* [Language customization in Microsoft Entra External ID](https://learn.microsoft.com/entra/external-id/user-flow-customize-language) -* [Building Zero Trust ready apps](https://aka.ms/ztdevsession) -* [Initialize client applications using MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-initializing-client-applications) -* [Single sign-on with MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-sso) -* [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) -* [Logging in MSAL.js applications](https://learn.microsoft.com/entra/identity-platform/msal-logging-js) -* [Pass custom state in authentication requests using MSAL.js](https://learn.microsoft.com/entra/identity-platform/msal-js-pass-custom-state-authentication-request) -* [Prompt behavior in MSAL.js interactive requests](https://learn.microsoft.com/entra/identity-platform/msal-js-prompt-behavior) -* [Use the Microsoft Authentication Library for JavaScript to work with Azure AD B2C](https://learn.microsoft.com/entra/identity-platform/msal-b2c-overview) diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/ReadmeFiles/screenshot.png deleted file mode 100644 index 27add1e25def9119a0fe504eb588eaf1709fcb0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31735 zcmeFYcTm&aw=axcLBxhAMXXc-=^aEw1f+%{{XwLcNC_PxqVfO&57MMJ=?0|N5D)<= zp@f7Ml2C*I0RjXFAtbrc-|w7x?|o;^oOj;2|J=FEWY~4>z1Lp*v)5j0ePfIawAop? zSy@ zryX=ZS`CklhA`E$k`^!`KFjUwm}V>YTgYyJ)?Z zcNLxdlCJm5E+Ws24qSnpbw7DYgIibYiI`RD!u`jbPwo|dDtuOxmjC(h^uJQyAm4~- z{G-?PMC0upjmSrr>G+``fvo%Tn+}xrV0J&uw6u$W3;t+-X!@T53|8?Lb4DyIZ*Fm} z#UJ~Ve0#Zz<4@uu@@&MP#GCx5TPOacPRhRJ|C6{?cIoI(f<+^K?#!PQb5=|~F#pO@ zFFZ6=MDqTdjC*|T02C~nH$Qj#b(P3%%{C~2X8xz)+;!1P1mO*E1~w2;VS&?ZugTdd z(bO&dSX=(+-?S9w!@4d|^Vow^nn?y1-?@hd-)24MbAs>oeqP6OhKV`HYjDuLp%_g-({xT>{aI&42FQ z&Q0%atFY`z&$!-Mc?;0F5K}i?$7|JX{7GhWn^fR2-`87F7YzR}M`5hJGun&dqmO%V zoL}}Y($D2oxHMk!c6DA#?0*szCLoaeL}TCl7m|`K*vqDUzZ*3HuV!UAF{pPB{t)Us zxBTIe=T_0*=KRr}zw71Ca9jvE_&1IGYp-vHDH^TA3re!n_{~nLJ@{YQKKG8)U{lt5 z>V$|%IQBocV&mi~^+JDCl&y^WV-H&-()t~1_D9N(mfupxf)p1NIFPJuINVdy^J;BE zqE56sb(O3J>xR`t=hDlXav49)^V?SNK+R+W{-z*F)1tHFftA8sZ0%xIV=me!y)~HB zU(CHCuGpH;OZhGAEWB5ud5?r3f1&50aiG+u_B&oT*X$ZM1S3+1zaIC(xb*hCpXung zy=pUz=u~e)X?fj6-Wsy5uYMM~e(*s&WTrn+RA%k8i~f?kpPJdV=VkZcC+zpCqAZky z^bF+SvLfB8A4>DQHpNKg3t_(nP%zeltZ+bY5NN03u26bJUSH+2985e+Iz)M4cQu9) z_czu;$B(5|BQ#YJAiNX5`v3u3o9|m?)%dzDfDD^lt6U<=l^+do@&=uinI| zsEg-elGeCqVxiw`Y6xBlKj#{Ck<_|!n45}BGI$&x+Bo@Hp4P!TvQlMycf`yQNE2TA z`?$U~j-xHspAhb`yKWELPeY35Ev=ixGvpG|V#KAb%$_`M=3)_PUJM+IT~|f4xRm3Y6I#`-uj!=wkN)k0 zFYmELOcY!1uAafURVr@E$sg(7-IQgEv=Vsb+7x(UHPC3~DyJe!>wlMP)SPM+X2ZdcfZ8mU7dweezEb==d&NfdMh zp%~xZJe2r;fEE>`tA8T&FG7}l@|oc zSwuU7O#9S67}*qJf^nE?uZtz#T_Z4l;nKQJD9WtzjhqR~nf42D)}u@^4F3r@FU z6NHSFVz<$K%HnRz22^woRKEr0x$vc}y;Efi;HH*Qf1X&#L(MJj4FJo*vtX!Fbs6() zReAM@Qu&2+kEFJ8J9zaeG`9%Ak&i_wGn|%#pmEUWt!SeN9_GZHT1GbGOL4iG6OMTXKvywxs|Hp zlyW@;V1pL!xRKqMw(o|WpoGOC91ScZCQnHLQ~o`S-|&JNp| z9o{rwrG6$g2|*LYTf`B+VEtJ-L=Uq-7|8AZAxd^%$=|*yG_J)?P;7ERfXj6yzm600 z1FE*+^YxJ6l1UfgnEQPOEo{X{i;_po7T<(UU$_$D`hg z_cr`hWxBAWKyxrIJP#UepI)lCXrT<^Xu>+I>3Tfo#F$$tqh<|Z+{J`akkJT9Uv}W*{!_~xNUVGowa3sU%-l+F<>Apw_SX6HTA3hf(^XfO?q{<5 zhIx4e`%OqLM6Z6k7`zs9l^8KjY<9_9q|0p4B4&#k+$v?=+&eP1H}Piq4d}H>eKx;p zkMVZ@C@dOOb+|7B;u7Se=;|Flj|=OY^-q+mVzXegK2whd(^Hpcp-(HbPa-X5qjFGW z-)bzN%Fbv%qH<@gGK#pT2Sfgn%xVwO#7w$M)WL z9=>R}prAe)GWV!Pcjy}|sL3v4?`_-K!|61BohuWSe$O>A;UtOn;w7(sT&W8qvve06 zQJp7SQIti^h455+7lvH&4u6Si&6DxzwKxoeC$91H7Z<)vHb@>lv*}s#cWZ&wVQ^$g z$6-U-*Qs)EJ|4FNeb{IZ*AtO@PYmL&per1An$4Ap9Gc~pH^(rERg-+@@N1P~?=yFG zr!9Jmykn|l;$=aD`O432zePUQ{60j@>atv;6a5av)SoZGzu2?JnMQX-CaD6(Iy#TK zZnRXgK1VeQtX1NF#ia&C*}v{mQhhuIMSCFY;2iD_i2Uwg@40R%u2N}GOnJ8Yj1?c8 zKM`=L@%v*`zGX^CLfZ>X8g=@0wAL;KmnUdX}4hCwIzBQrDA zcktpyBXQ8rNmgCZ+3n2>mayT0q~a+cq>hH80#hL{{=IldXusEdU<0G zp1#NjUX{!|-rGc*xyr-WxF&RH0$X;l%@mnAt@iP)EY9@efl#$Z>9RqH-bhn2c3(F{ zXu#SiMtu3m(1W;-a@grjA6AMtnA9q2bshRk9+>U-Y9e(fp-ZtepzK$evL_ujiv3dk zV9P;~0>m!TlQ^IB5c0~K>2h21aBA6C90F)nNVpm&jlEZSnL2s3jw(kt@1l`#uD;Sd8e^5@6>cR}Qz7cspAgo;_!s5X-=SH19StMnpWEg$6v(-)HL7XY(#l~D^=1P2EUB_D$RN=)u2sExb=na} z1p7Mz1IGO-@-_*Dv7S&)|eid^Bg=d-N)0NGSeSBWs)4`k9o2r;yk3)eQlg zA_&J3;KU?ubNmXq-gIFPztSV$xYE$nqYE=%ZI~+LLJwrr! z|MhAJz=PZebGuIb2pFCkMlYdSpbW(jx5w5lGYK0<+piD05?kL}Z3h=fyGb<1Webn| ztV4abv+p@&RVUUy%WqR$B?&IGoqf~4xz3*Hui3iU{wikKrOj;Zbk2bIfC)&mA=I%$ zO~)2O0S``E#3DwG^+5?&mZ-*gYV}j=cWpUTc2jxE%6SSBPACyB<9kd-ct!%6Fo1lm z!1l_v>M)DIgnmEe_4CqbdS2*be;sX1P(05vGS)%}F+8XcT_ z8~Fb0I0>8P?l^cHcGOJT2U)d^S3!#8Xc6Ud0SH6BBaE~HYxQ}} z36g#)ff9#f;xa=K8%L>nGJV!2!vMYPMRLPOW32q}5vHkHZk(syp{}i2qpnW3x}aAT z!@*W=WFP*mC!+$uTV}6jo5=`&13J;|J_yh_-fF(xiLYU0 zbyzIR(rTyDKbp9aIWe&q>Zh2pELbT%2_BG>jwjj(B!{6s^DGl zo86Di@O}IZB3@C;DvVU&UFcH6WiNZr;YiE~d!DFY4%aI;6Z?2_SSh6m?J;h{Q5~Yu z*IHVsZ=cC`oO$ONdKm=5pffbhPN*j~u*76j^*8|H6@pJ1k)=g)>gqQ@cs#cr#d?N( zXq$0Zd&Ln}7JXXW%>A&%JHHFrrFH{qBh7DFAh^6P1T{>xB3uU4Os0iF6+GWtGBQdY z$jLW@?(S6{LufI`()gPy@*4pCTB7ngY-XixN&V+)>dB`aL(O@mv%xd@WTDUuFv0-{Ec!O(C zxf}8kt^P$aFO)MF;1J>dUd_^_6y72J@O`{;uqS3qI%n~exZk)%idtr}GEmFS!MLPB zsnIXdhuUYKvK&3(IeL#8?J4W^LhZGaC!_OMPP#psD||DDZE^ST%qiW3p_|aU*+9D? z*z!} z+hxRUe*js9eBK&3<+#R<4c|`M!2%iPfaslT{Yc5iEX*WjdesamIwTps*d{Mwo}|1~ z`hptX*Ay1rQAcifL0M>PmHS+g-T)s3MJvu3jmHiMi;MFc6Mhkbd=ndwAV>Tg`#PtJ6JKQS={421D4?kU zM_+~5kG5DsGC_2Pc(P#Uv!|8VHq}|i8RfVZt z#^Z=df5_=m$wZDR*RWu&>e1Z~9UVqq@3_w#{qmmX_kZ(YUijp0eJiJw+17Q`oGupmel>LG8X;Ddp{x6ZyW*6)DXB);UhPF7=3t?o!TUbzY$*y=dm8rN(g5e8V=b|Zfx};ou#ki8LMTSq7N4xoD9Oue-)5ee6tmj>M(<($0*)y9{;Tt1g zjn)V_#W8KP;gdyDk$->Z1@1j}3DrYSYtZY)9e~r!chpa^3f#x|D`v^+q-lNI-p`7cQW`@*Lt7yV(>~86Mv(xI_ z(G*$9t&ZIzZxsIUhnm2+%-2lT_UWdL)VbMl|6-z^B@E++6%ThI>SQ4&E#)pQo>%`& zMc#o}-QAD@oj}JjW*MXoRR}^L+$ri_sdhyanE$Q*2=ooFtE^ICF9s4fDAkJss0M>X>mnipgqos)xkVjuDN zk=;Ey(1C9^@Q#p4?t5!4AY^MWEove?rCB5C^qwZ_h-B zPxAB(y-OXVCU$}QLc>T>kyqmKtI))#Y@YH6uAF5#9<)jR(Arz&RFTlrHLi(h34N_9 z2COb8_iGOJGq7PqH)8#KoIFzDroA7XU**`k1d+K@xBh;>u!&>B+Q9e-Vo$=Z;u42l z{*N=t1o|7a&Y9+F9CoBO+J~z>fKe`tT=li z)$WV2GiH>FQTo=t;sL4mJX-!QzJ?pVHJgTwtHi=+yZXfC6jy>^qj@zAq2@;dzygN7S{W+B#+wLsfel>7VRzyTFp*(t zpDSzT|5;~bC$nCtS_xdS6h1vYH!F0XUO+M46rbDj>X-13NbLbn85@1shj5oUQpfjp z2ZKW-JfiJFsn*b=W%C|e{}0@G#@evMB{%nAJDM*65A^^S_nD__`cryb6mqg=>_L=+ zx|~0%vxCEJ_sQBw^N8&t`ZhKokhWgkun%)m9i7s4HK^n-;dIX0v!8zRy(aKS7l&Jv z&No_}3|L6jS{X+2r1ri@U5N0oKV;)YOjZuaMDW|W(Wf$OfA^T9fRt5*Qa3IWb zWe@!N^^e-^vS-8_Ewq_cmH2TJO@IVS)A_njX}z3RjtRd_Rdkiz*XKlFO_xN`RhQlt zbbCET+n8?;R8$R)htkTFec89JKmZ;qVe8ou`x;e_Nf0=6%v%Zq8Hxq zw-3MKbjR95{@@yKW!nz%q=03!3GWd?!OWp|B5B-G8$$@4jZl4lEW#WA<{3)XWz~j= z5T4qBC^OBkZ}Mw|++vo$aDAqBjiU<4Ev;pNDZ?>S)w8>(%#>HkeND&SRj0H`o5r_& z-op@-)%C62*I0|gUy8hU$tg&Hj!Y=xh(=Yk;UQ$Y2*Km^hGr#(<=J?hzww9=3g?M~ z4HbR?D-+1_HB=P~zF{%R)#-diH|M3D5m~$$+Snz$p@zUsb6wNeB#7+x<1uWFU3;AypY&9y*iP zo3r=PI@peS;1Y6|roExw4X?ZAa@E7*FcYzBS~_r4KHRQvRa5f=c|#v-@4UGO?Gc>G zevkGa=QmI1Ssxjm$!nx7+QRqZ>Im*b$viToct|Vl&`-7ur)aRXuwJ*e)}cJ?X9fIt zND6`2kc!3y|28b$XW#q5Z>7Xnbb*`t{ht+`HlVI+YPF#l&@r-UOLP+Oy5OSa`@@C3ZVmWqNyt2 zPINJvpdIep->2I^0In34YR?G$ihzVKhm#k`=ss_>+Y*K+#bbFvz#q9+a;wZye8=pH z8ZxB`igRh??1Kllk^~s1pXa|n9Ii?R`0k8&!8HH249 z?;j6Ddr>m|$Swo*oO303_my94$T2&JGlSzZ4M^5QNBDV`b4=kTs+dMnyL=v?LU&Bb zwXj-U$KD{>6~rQ773iP72AqiZot#e4;tv{)&owJ64BJuf%~5w9`!bSaU|2*AM2^n8 zRMu=H_7Z1pWFhH?IY397eT&BvuC3#iCA66GMs9_Bx}bD$xnMS~VKYCv-5}-o_&WVV zbH(@%EUTBk|T<;C~ciozn)8112O8d}u+>&_P1wz*1+UCu4sCjSJhMFWr zsu}9d|JN|+k(w^v4f%b4GomT1QkZ6uBAZjW8#Xz)C&92%wa!`;5l7CXtNAIbdWGhG zP@6U9%gS7$vevuKU4}X!Ud-cSOA(;dUrk{8x;V`?kO|{+zm_KSE_7I^QTQG*){AcU zh)8zR7ce1C6KtCmS6n9zdknNo8tcaM_OB8WM?4X3dzv6d4*aSyS*X59A=dkbfArcr zStHlK^{a1W7jH7uv;}*BKtv{D;A{DLiGUOQ(Z4oOR`s*-{&FiwD>8amP<^e0C#N$S z(n+)MtJu)IX9&1Sj;Lsi__A z`y(A|r_?;1cEr$O13^@2cnEqUyUc(2Im42gjU>R4r6l$8mD4(Q!O(jREDW+)KtxZ_; z8Dp~jXh(5&bKP=HdiMC!Y9jU8#0PuWaXV4N&yx`^cb4QNw&ovH1FnsZTUgai6I$@I zb+X@oIqpIIiDNt*K@|RL1#(g0Zl1)`YC~=Kj+TjYVazRJdE`|S-WNfek6|BP6yG<# zL47u)%{bJ6(ZMdr)=q7GzG72wY5fQ^f~|vUkk|gp;AW<(RZ6|7wEf8BM2_A4@zq3! zM7fR@t1Fw0kSp$U$z~xdk@{8*E$gMx>(Zb$dA!HiyW-5v$sg|2%0b!r+d%7NPS9Fb zmuY4oP;|63In4u6Y4;xULU!I!A1r&zi@NVYKaZxFEgYrbhWl-c2koF5zbT$?w47}} z9!x_w_s#2@|B&k%v{`J@nj7IS4#U$88f$2A?V2IKoC5bP4*lcp@y4O7sUBHP`elV? z@inxJ`^(wp|0DuK;!kw15maEEDeU(kGbU-9cS-?e?g|vxj80xM!|sY2PIiAvIvQOr z`kS4+JT5uL+A))PMI34LITaB{e*K!nejDuGd0<@f$Zhrg+A&~$!TZ_-Or`Z1F z6qf$&V*KrPG!??VJSJ=WpKizeYtu~?>+q!W{xKB)&LA@jBcFao*&1 z_|VGQ08#VY>b5rgm#6%VRlhpRLL-aM@!J6ps!5LFDORZOOYILd98okxcL*`QiB48 zvR;G9{-(~fdA&;|Cbb#@&A`sf28lf6>IW;2(RArK5TcJ`_jGi8*h2-Z{NO+z506R z)l$8KTPGSWr{8DhU;Ey@_;%*q+!=RHacyS)R`bP^8eWf>^^f(% zHO0-CMfm|0I&Y$Goi(`kmS3TuqV>o<#Lf5I?ZE9MEa%1kRgiy?*c*BT5HnTa+uBQTq=@U~VQzbbn!z_fnIUTg48 z5fhyfDl3lP=vW=-H8(^5A=6mF=6bTK+B;PA^-YCqXCvmC&$T0u@Zsb1#ZR9;A>8r? zN`9jeuX^e!>9FyFf`a1lNXJ3&3~Tn81Ucp+y(`#WPSr5xU_J^Jed5!UA?Pm70FS5*8(;(XiD zW%2MZ@i$wtZA4nDn;aPhQf8172`9TacmpF(c9;A56HHtT=11OxGo(BM#eVp|`%yvl%uSM;R%>)Gk=aM&9XN60~mm&2<4 zvp@4uJiv{hyO?Vd{KjnN!EE;Z`WII z=YHb(KYRVV|L?gR7@p{3V+x@W{e1!BucDs%KT%l*Y8|0Wc91q$vd=O*5AhmwIomIK zY-@C#{k_t#F!FXs8h>p1D7mpr6v^4%Td~>3<7gN$3-hz+mIQ%ijA2s)Bdp%|roj!Gk+3jLj^N9AJ z<9OlyU1t9E&LVTrbN|m&EDBFlcHYi>m^)+OQ{uZdYzns_N$=e}%)c4&`k&VK z)uYICHH19&8j8)L63emH72#!uvp&uuXxE&{*pYIBb9?Qx&23VM++t%|Ysl7urjty} zIbaHE`9_;(c)fxNgPIitazz;J@z8Df7R3S4)#k1=jj=@4!{y}Q%)@tHw|D-|4FSb; zOyjGjk8&;dvCh&BdZKitr{G{}I8@!Qunxn6?}D-zz|Prtv4GSA6ic^3n46(?*6sNHaP- zV_Y_-ca!Ww4=>eu7CLu8OTt92FcoF1w@e;*wFS7wXRf%=?cd~18%O0HMrhweS0YCX7pZkW#-B_ zEaHo-3jc|@ptHcL#&mgP1tVfZEzP1{$K#qFSA$3Sp$I~rL9fN#g{95}{L>*mON5*sZG_C^TH3Q)XKoC6)-^(qUn0U~-Dsj9qsaXrv8OC^Q>+%G z39fR732ra!T~04-K4oEZ?5(&A&L>GnIOvp)@*!oxpXQ1mVp9Zec6QLi+kb%%17NfZL@*d@J+~Q-0 zD%78Yr8Au9uJB(yJK*)Dn#uYBYa0NS4VGpOEs5FRbN+nL8&Y2ODgPl87SA!yP-)`_ zmkLPZYA9o_?*diyOyUYn1&9UI&)I)~7+`vJ#T zkj|S$5?0v-WZ3Gm>dwmz6!v&vh3klTxFeXeclczQM|?!d1!wrAJ<)gIr^LiTt5RwN zwxlhS78;ZGm1Y;Zu9gNLZ}&X>4Q+omc44j33pUTat8Pz#2rtUglPs-FkjCA>w&#(w zoCzQ}<8m9}En9$hxi7q~T@e#$M)C^e(^}Mm+@>j?E|W#Ilp9GsJw3&m#>Pp~*d}1!J`qPe?=@5J z)A&2q_qFefwgAW)vV8G8h%jOH;>G9h-Q77gz_aJh8M~HIZJBpYFgTLbnN+y+zk~+= zAEmC9v9{N*hw13VNPG1KbTl_N`wNMP`1VrwH^%8SX55Y)G-P<6$u1Uy3!&sqvm7N* zc7Zphm6eSR5ERrbz0b~6^H|wIu(&2iWugRA=P~(n*Tv6iXUTbGZ~VE`c_*rD^_cg{ zg+%CYN=(!B|EEyw|84xvKg~+2P0g`bf%8Q|+_)!RenvEgkXYW_t#gFdc0AZ}X3kZF zIn~nUu;O^vf@@-7nt^-#(q=b!2F@r=NbnXrNH~`VVC`HyDs(~_Zi=kuM_#FWB&<$* z0xxuympVJyY|N**IIZrnr=E!?rI!k=c2KN{ztv4srq=t{4~A2QocC;5eC4v+0t!Kp zXCFm!I;BQ^R=(yjeW0KfLTWJHPhL#j$(yk%IQIIEnME&3t_b(gtzlJ+ucVx)h#g=t zh6=b(^PE5pWHE)b>}(fDr+t)ALo82K|CN_AgfY{lpt!-Nd?C|eQAZRknkI*ch;wfw z$)5AM>7ipjL%ou+0x=A0jJmJO_{OT8O740o3l zC_;qy^k|7t3TkC6zP#4V6ga0O< znNEui(alFt2R}B46*W)1U|2pi?*XuQ=QT*#GUDaC^VzXNhh8%F!kOsr+$h&V*l{D*wZh{dr^@95cPOgTSseeV;u^J;fi!DkUf+DP~o~ z=rHD)6dPSxp{$Y0z(y~t)P536`&W7PdOk&SCM!PDA&Im`+EpXFy6Z&(K4BYhp2Pg5 zEA>zG`=!i2_`L+7P#K3?xDGTW3~~?@bGhmxq<&8a-*$82$I~k^5zhDL6ORLKH@l^A z-ya^AB1H_ERG}Ju76(tgkfL|!j)7m~I}yy?tsY1AauAEQr!l+Ds%awv6{MXf#qC5s zH@nPF-qwY~i#SwoyuB-y#cd!5kgC6UC4YkL!6K`AZa#g)d)#bXT?#zHzuL1&Nb#qg zblM1*+wET?k6(sM#LJl)r=@0A2(ON{g6UGF4`L`&)ejV30c1r> zqjN(&icjYe#YCJCJ8hv28*5y9NjihtBHXX}V^@dg2!d1YxQc|_ESv!2wR<#c`R9j8A=k#CHU+y(D{Z-Vzbey}`AP%*n zRVS-5fz}>>VT-*F(DT&=QaQnXZx=E%k)IdWkOZq9pm((gn5R@I^npun=B`e8B}R}? zhYNe&_B7rc=Pb8(DYo@x{%N{rT5X5F`H3?4K&lUA;B#`}O-*f4EHyNtW7F^uK)wnO z!KHCf2EwGxay}#&g$tCtr)2;fw9|Mn8Pqg=wc z#cp>HSsUIn$5$kKM|@yi{&7i0lVdU}n@Sx4Eu4{hM)sP#-@Gh@p;+OX(4mC|!R01so%{Yz$Jym7C9^{1&lljsuT&59^f z+q4$$=^#DDrOEU_qdfk=z@3Q~XNZ;0KQ7#KD@(}=5q5i7fvEN698)uw#7}WG_a#Y{ z*;=-syx*9ZzA(R#du{&oYh7dJBl_Y4=7%$!!Vi!JAOLctJs8XsquKRD86t-&@{oF8 zm%iboy9@46HQKh@*bx{M9-2U+KQT{oA=Va;og3jZs5<(GG% zKsmB59inzY=SyLxmauADY(B>utIDt&T#%K@bfHiP7=P{502SD=kfoiq>e|q1FaWRq zLW*-AtX*{N3vqISSafATkmVL{d-Zcm)f=9p2!mc|Wx$2LCD;D70sbcD1>Y4ncV-S4 z*x`Ha`KaxpugpqhWbF2}^qA4crGDKo-;N38y*H1Ss_4%Z`R>xJoQ4oz6%|FkMZV{= z)XhjKJYWzUDmadDKdI0$ZAIWl%;vr8@`hfis`gpqYZ5!oXQx*n#WAyLPu+zUETZZy;#F>`9CklmwB7`IIxw$2b<|^Gz*VO*6yVOJO`kn+=ZJU+CiYf6tD7D!jiIxp~U^zsmg^Nc}Uo5{!qE2?Xn^&!DV_vxPkramRa|TWy zeAKWrp$A1#>M6Rdh_6Hy^U4MM>b4rEiYWh$QXh%?uIOYMs!CHL-hRgF1du2|dnLk! z6=+=S^rjUb985)7CzuL9mTdYs?#j?MicmC4c78(Wp69BtO{8aThXdJRS~Gj&cEBi2 zWW+b;VPff#3spHda2moeDl%TY3O=jB&9tR~oNRs+FUkO23!E__8P-)$^phgo_0p-+ zn}! zKd^e|l>7L22Py5uM#~bD1a$eQ$ERKLN+$?A)H5O_3kx@y-xDVNG12pyMW(0aNC*r2 zlrV!cxwyE}FKB6L4F};m!e?M$m~_3{c<(g*3-c^?w=TK=?492s<`TD@JlrR5#O97j zud=u&eSe_uDzC?vW+ZovWO0c~C`ecv06eq7c`3)CjReHhpm1d>&`lzP|>M3IGmo6qA(ud ziI0nm(~B-FyyMai#HnrIV7MD=s7k!&@9EF|`W8sE`|og?X-pj&I~(z5BbocoG$cA~ z%rr0!MTD(?JLdlLo6G+_EBmkfME{ek#^9;)geYO~IB@ydRgplgM&H2DI_;MpnI9Ui zm()YBNB!=B2`2p6m3!Fr?b?XplW>gD3fye*)w8<>CKO$svBv<5pt|U7!09?7;R;d+tmlFCfi`nbg!3kun$a){-4$)j@ z9d5Qd+K_%(u*5B#Gq8#>2uShA9Tgc-Y^y)wH~<5seTQ<>%YJNod1;Q`frEn)6TGCl zY3yuFT4nti#@DyFU4W>x%eb7U#$TvDRhNz>gH!#CqlT3VJ52#0h>XILHxA_AtC1?i z7%;2sfTl9~LQ~W5Rh6^-|2)mE-Kk6YBx6p3?Jj#%DA-$8f3$c>tlE@yAM82p*UP#@@kjYyTk0)AcZ?CrSNN~`mz;1D4folaNNnj&@`Yg#;V1;=tCax z+NoS=mQJ1Mxidy=|9zRxyyj7 zuhqOaLq6s9N6b0sr>Lmb4FEk2KgcXxy~bG`Gq~(FCjq5o{u~^g@_4%1op*m_8y4y` z|LIi7(S+-gN=SMy%-&Mx`jZQSI1$odWM-3R;X+Y6#foqcLFdhU%(?zghz)n;&xg_; zXP660WG?7RBZcsf-P%my`#;a1z(L$ce1wXb&aix%ElO0_OtB-gVEpYpOEUoWP*K&ne_`gY1@m{fM9Ky;;@I=0DW$ z1aDYuD=LKR=-S%m&yod&#`FLSKZblYioT=#WU(Hto{6eO2y-^YO!e^e)B77=G|!8s za9t{2X}-iAu3ch+lTb!@`$!Ii1jS0h*+EWs#5YPKML)?-=8{=+&bvK<)ZMifc08!D+zoF4!a&vgOIKb{cxHgT`I){r|+xz)U9U1jk{ z@Zmv|59AOsaDs?o^OM=b1|r3ls<|fxpBl5bFF9O_b-z(MKcfD{oMfU~-LGkoXzV%> z55(P`#q$%%a?yrk#F>&>iVB-JP^&yXxcIiVK21Gg zCr@2Kz9Ax#*bsmd9@tOS;tacB)sjKag91{`s>0;^Uha$pK8U#@ok9ro;yUVM%*M+* zWrAB$nA*IK~qFTVNo2x-<-QCSWh_ z&~@=?xD3t8D|Ab|I4BkN9ekf4?gt3#_86@9!Q9bbt9=sQOHmh8Gpq9rS!ro9cmL+4 z6#Ak9t^MH>e!~>@t7oR!z40_x{N$9PcX8vEIv`acELA*@oIQ7qix` zVk}GyP0ebTxsPdllG6wCKv3T=v;R{v>n3uR^L`L0ZCTVn65dWJ`Z^CbH=XyuijOrtGh7C;E;#^n2eV>dsZd%2GAAYE zs`FHvjTXH|k=E&q&8y)P%x9)tgWvms;2sF?jIQqhs~_iw29xjk&!C(3tI8?6Q&LNf z6oU+hLD(tqLo_)n|9q*5tv)to?aO@QIaYP((}`r7>=LzdcR^bq zo*!B^D1X14@q{7Ou`|LwX%qer&M?_4xc$d3d=`0a`JJiOtiynRD6gjeO-c?JOkpFU z-lX%m{lsnH2k)o`Zi}$ zEUoL>a~Q$(Ptg;GdHR6IT|pQWuwAX~zz1(-uUJr58~sJ7Zs+?A79;kz{Er$~O}`a3 zDCO~QgrRT#=c{&IOs_-AF1KRJIEpj0B!fN9^f^O=yM60~Q#v;0!o*6_wmTK+R?OME4YMisTb!1ud zZEpFBBv#SYk$d#zlRdJs=o!ZrpT9pm(MLrOV$gLf1ZVfLcO9_-0i5Lq%%?NG-P14B zR?}fj_qw`qQldaQn`?@an0XNwd}8ZG^$q|3FdYnd6KLa;<&zDuxLLbNx}1Trv+<9N zn%MYc6N@(Cfe4c1hKTC^SuI;hqZ42`Jxfj%i#*u8^pd}4u`7`N?CRItN=u0!Wlhue z8Bb&R6fJ33s0BbxybZ&C71N%qh-K$I&2R8Qrm!)_9F~4Q7SUcKa49`(oVhx2vfiD-8gat!2@23I* zN*OQ>9NpSBBz3`}+9bEmr%Ejh&?+|!E%aI&w0Hnw^(^{0|t%}%^|7Y?8?3EL^lpDy$vh=J%t`UN3q^ zI{e#j0Y&T$Tj~`|;nQAUTB|>l_EK0O_1UobA&?_vOLsMUD~!V9M0?MwIKpiLnBVqYH6T}bGVy7jM!tk#zhid{KwhY(`6`yy<%lLsl1e{2D>HUsXFKbfH zPH25gft;^z2|)6jc+X@Unv{yV-GZn_=QHNqD5E6f6UHJ zXFajM;)ULwlv5QS)azCcpFg(fyOY`^XRp`W0?))0wDm@KUbgw=wcwHkFB3=-2)xk! z{hkDLbCg8p7dfQhWmLY|C!DU~mMmymPBajw1xOhoTOjw6ahyx5zj0Tt1Y!EQ$P`z^ z=lm@Z_={`04o{EwcVD$v`wXk@Wbx?4rPJ8H2A&PSC8Gj|J+Eossrf6)H#VefQ8BJmYURF%m&Aw8}b6I``>v35&0%7CyRot|`{7Iv) z$duWVKBz*}zT$AUEJK&%rB@||)X>ifs~o=lrF)Z%FmNaSipLL?xTDlGTddnDy6PTb z#}S?*X788$^23(Eyww-rv_Pz`PvE^WfLkPocxa-J?iF%OruJX<>*;p? zEcFQbNk9msk>-2%klzHxj|<%qR&6;ZrYsDGfN$ZAOi7m3MeVXjI~BP(a+9Dr zX7GtZ*h%#_?pi|5oibtuV1p-($CZJ?d9EbxQwzJX~iSRW;?okm(!i<>yW-s z_~g6Q>6ulr%JSsf@nue|b+UVn_aL!3Wr33|cx-T3k=!?k)Ez=gY8!-SH={LG4bjl_ zmSt%^#$@&c7^PhuZ=Ps=%4)|HY%6!qOtH~MnKc*?OfkXWd$)amtqQ5MyLQGHGp$+= zwXqTTCD5j4BN&9`CBt2-vf`o)|~ zoV6&M<+QZ2*D6hOY7`D^xEfwU3xGTd_VANgS?+LOBBXo^s+RXD`=6{_52zbcsHl{S zJZ>W&9hlC&wZ(rvI|8p2@2o&ic+-XRYs#^PT@Pta}gl-uLg``}$qiwcV8k-FCBvJ^K839aguJ z5-ae2-K(-2-9{^nt(;RTx4(H!z~3h=F(s>U4TG&p39#Ca`a37-TQe^X2{F1PKBrkN z0=P>zq7c`g=pxbis*rWTNn{e1S4vN*+)uyOPQG3m;h+G&ZJ{}j-|^S8V}w!IRzX*P z^xfg=#C<`NJqdv}R$lIf=R${bE@eA-%*{fgTO&V^c0M>h$A{$|&`Zt=3;|elQ=1fh1A<^80I> zSt6Z=hD+sdFoIv^uV!W@h9gg_K;Ps=*0uZuHG_oIg~xM%p6VJwI+ijzuwD2lVR`jQRN!sP>hgTX@QFma7%d??39ATy=OY=MdJP}FIn!4+!M51A}+vM1W1w@sip7*zm+I$lk-T0l@h~ePb&ap-=^c)voL5QcFV^Pq7j?V(y^(^|z)w z#qmN}=Oh;vt41=e`omI-`M}3jB%+gx%V1sg0`wB$qcHa{SJQ6n6G&?Hn-h7VC&Bv6Sfs! z<*>=d+A+B<(A)O42Ka%{KVeqvT@$^Q&w?mo6Tg}n%JE9`p8qkbotgbu^CA*L-!TU z=ue)A;5ZXG#=I2Q+y9Z-=ZS}8nj^c3JVhyI!DBHkAAl^Fo?`CpufMuA_ZyvB6_-KZ zx$@X7)b?lRESzcI6$qx-VtO-QBOMTmx}}>xyPjJ7zU<0y%QIQ>{@mr7n-7(zs!6}V zIPOc44R-0zsfr<6jNQ8UU2~obExKy~+n6X~p!2TqV0qSssxUR`SD185)>c-Hq7JBU z?O(7bkv>_YLp3GGH^h;NA4bp$Q<+rkNL7Y3Mcxe)1rBf~Xtc%d9z3^{H>UtOcDZe1 zDsgVP^(3L-8}s>$Ad&pSAQ+X9?W(h5(sThO9t?73X-1`O$CtHo5%yEXza{_);Bu8Z z1z2TqRlq49zkpKZjv`MI?>hO$b;SF)22QB82|2(Gc~XZSe^yJ{i}W^4;_j?MbWv$* zNeqqpa2~h=flNMnwRqV(MMCWa6f|m-EO{)~7W``(NiQm2TTi^AQB)FCOz>>;Ap||M z$vhmZ$yg`LES5?eu;V2SXy~1;*#VLf(f|y$eCsqAM-8rAXBZ0HETfA zv&VM3VPv(QJLBXl)*WU<*}chgFvyB_?{2g|ksTs_8=hvbt*vXvtMvyPF4|i~j|A6R z7Gm+PxdY%RgVHNwb^hWOp{o^MVpQj;&Y;Zm!##nsli99Se`#qim9CzeTFLFNYFL(s zR$eaI=Pe8EGb?|T)o4;|B?K!`bk=cU%(0iZPn`#IN|hW32+IQX^=CD)6&U~#5fSdl z$jJ0fG=y3Wr3X7W4i!dM$;ZU5I#@7pAUoLT!UpGI=IR#5d4t))+c00s45T|K|7_Lg z5oc=$VZZN9Pm!&R2R^&-ERF}MKnU1(_Q0zPH56si#xXvgGLGX3=*S6Jq4gAQz)0gl z8Bu^q3dSHQAY{CkrJhYSdb6>!7jA60JFIdkDJfm$Tn^>{clzLf({k?lM{M%UB855e z*F!_*UNqjf^nXu7~|K|@_V9rT|Pd&tWpp8q2Dj5YZp|1XF=3<|3)!SOG}iE7Z?zd>zA z`XGd-$lGuAk4%B-zYl%;M(zP~+wklWwL~JhtXMc)z!f1Gc-6>PyE4l)$NJnBs-f-g zSVcE-~^{E_{uz4=sscQEw4f@2l{$%P@vyr;zMQsHN5Wr z_17djO{jNWcdvu-?DzBY?13w#AvX$=EV9@)QrTOLmr?z#<*4|B@?(@Lz(el7hca#X zgV^QqPz;aW-#H8n8xS?pyVJ-OXS}b#Z~X2NoL{hMPPy!5onBi%h26xC0q-;a)`&)a zx~n%sZG46SN#mX~xi8<|Jyxnc@HVr`aLo5J&b&ci2oKBeZpq3ymbV~?!RFiKNr2~` zyH4(gu@^+?_7t93mX;}lVVIt*#kFi$vG_?Vg<2i{NU-CQAgacnmkmid~P^cx;@^2y~Jm4!PF9ssI0 z*R^qHg-kqEDHsRK%%M9Lqlb{{+@Z@7w}%iZ$dr=qll{Lwe|w?A{@NMdRDG5KY|YrS zqzID_hg^jBZD9MEb7e9xW4O~nyhIrec9uM>D7cnAL9<#D{xGoEKoI*GEaKnx%3?;O zXW)qMQZm$L{z`C$i$flc+k*~U0`>)Kn7jNKs&Um=9}ILmx4ajsnRjTeR)AS2`cj;* zBY@?*@%^7V>Kt;=^ULJP+H{wN`ivW@vL)=hvTvDXN`;n!OY$i=}vAZa#|7 zOn7=iTmwbcUA_YmEkIHf_|0?9_ITsx22EAMQ_W-z;qFME8cE98;Jr$Z`B(9X&M|3- z#9B6~_Q~8tCun;_^j{-wHfyg5$*y2P|0v z@b39YS3-GgRJ2J8eZiu|N}65{zg@RuR9z*bG*FR@7>eXIx17lRR(t;XO6{`afF-Rn zUl3l+tdvu!&wqb5b3wcu%CDl@NYr!kOd5Q2%2}6g99d0r=qMrfW+XHYYd||^%##$x zn`3Un8Bb7qr$PJ&~u5TNQ_L8YA)Y{9|MoUS}GnK_k?JXYA_$wbaRzd+nprpZryNo znFxO~&qm@iz061ad;tp;A!O!pb+Y*t>9Uu`$+F!HbHz(PB9EkaYb5ZVnVl4|n(s~c)*TLqJ0$%s-1RC7g{cCUnq&nZ1iG`BgL zy&2qRLFF25O08qO(4I1=hfZRWPc;bMVv=tLaL2Q*wIA|5FQ%7oQj(uX&C-!I`pKsz zAD(DEQ)N|LoA_k)9?H3emZ8`Ok{9LePSV$l)WH?~G@(L~Zh}+JO#;gf>o14*5}*Zb)Mk#g5%Wt zns3SEreW<70OK1(X}zJ?if#!Uy2_g!uu1}%VbTj+^Vf)EpyK!Qr(^C;5Mu7wv16O=F}_V)AP?c zZR#XffXxAE>oi+4#K1wb(crr8w&_wu{(UT_r0citPJUBDDVI3-sX_+A%N zG+2e!HNmL16^>kT*m6~NO=jRdboFO$$dslqY})zy<$oj7l!|KxUxCO5_5QWOPFMHe zRSUy+0eX4%`!!Oh#pX*Smre^w`o7pAJxY)#im6OQ5<39fqw-qfl-e_0UV?cezlS0< zd+*=SpP0Cl3rfH27UPTATm3Pd08d-o%&9n4V_fv2Z}rUnhGbsiuhJ0Pv!C=AWMx)L zWbK^?y6j;72=TkOi-UOa4!%kDaxml@2!zO$GluUsBo>_TvUU!%YIIirJ_k!O-JH7+ z=kPoYwr#aWCX}I62rb;q1;?WF(-xdNn*U;1n&T)Jh%!XT+KjA)N7THUR~Np?ledaz z**LEHhcqW2e&LM;hl;Wwq2sB#JJ9T1(7gR?XE&dGF5TT(;b>Wh^2_w}rQq^RcErFZ zduP8=lQ1wRqPyv}lUfX(pFA}uE+e9T$@-F&P?BZ=8t9|d9xLIG!!_ed!QNAj(QaZ! zOFUTAg3#Q2aU{2dX~oX|1u@W?;)_s@;Otd(x4-THILlOu+osl7;PVEA%Vj&R`1-1o zzRl{-^f^HDm8qOJ9zUZ&Vu#&&e?>X;Zl*MQnlGkb&wI}RaPNv?^Ya^nWUGUOdtivy zsdFN(Wha>643!mw)go+g?7{ZR!Qgose`<-rz|#@)d9A?vK<1iPPs8S?c1}G%WVrOx zf-UZp32n8zjoZIAYJRE*i(#Yz%m}RsKKtF8djj$CaU}=XK*URKncT$L&X}QTQ%Xhh zV*NmXpUV|3%XHVBh1#>Ak?MoYpqZNs7&G-DF{AOlJ#)Al0ro;Ss<-pQ{dSs9wt4@d zZXf8Z7`Ry?uQb$ysF$Eb@3ZR8NIos$dIg!Dbx=-mr@u0&Hup}bU8`MjH7`hb>XzMq zeS$?dQaaLuO2M=?kJh%joBO1!HSr3xfvH7fUpak!f$hpFGO@#aavS`-uL}jbPgd0a zhPfJuXJ=5X>>VZVx8H~Y2q!LBkXLA_D>J>t%WrInp%&MUwF(?bkz5&=l5$fuhKT;* zkOukCU^nz^+0m7#(l(HeY0+48#n4$o5& zZh!d2*w~>E529Uo-qcsbTAtmeJ9(uq;|vo6^DGvwjBg|ZbGKW;Lp@q{eVx*re!)Uu zG@nPpW}P?Z7;oVL%U!1Q`?6crPUKrGjpd10vqC!_&_=R@U_uKJ{uHcf3^Z^co0ujb zpR-&j7hm(py&|p7?Ny~upL?)1^db&E{^s4*D8cbpFJz?4-seUHVT}INEW_>c{?$z;o&#z0{LG;Ev6u>pbMUoGR###z0jJ0hM z+e)ucmsD)H)K=mi=JkAOO11);{X}ipr_UpJ&E!M5vVJImL2}ts=k~~q^WZ?rOi~fHl#hk4etPSu0?f!G z`_H%CN(}#U=gvqzB;2@+qT!giM$i9vXHDX@g~m(y7iTKatx@9!uMkll7~hw091#M26g04jijTal0ym?pNRzs=a% z9~Q;Cy6))-)I+4l>_m;^69jgq>MR zH-lkCwMDg=rIq3eD>F0WieHj&VT@-lQyf$7uF@emlZjFfwl5#W%1p-GC_u{@y+QYh zr?r=WUq;&ZS`ce*{pcT_Y+=0DC~v!hS=wL9D?#v@qY0W8S^&dCYB4NM{v`?^Vdvw$ z_c{jj;`{mDl=wNXJLdJbp9w(8-hRtIH!Rk%f$*?TR8Iyr+-Q+l$(^(hUa7JAK<};` z1k)^Ph}o$AUR@Y6Z@ly>Z_7nET6Nhgz=oJgi&n7GdM+fzrTd<7~q2r;Op1?cCYh=93mRfy<}NR>gz;ac%n@o-eR42 zcO~p~!FRGzDUIqlY7u(!cY-Co53lq2vcrV-5Td(|ldv*+z85z7O!B4P(@*!9q?j3| z6BDeXt16*a;~uNi182e-H=wFZp;;^gO~s+KfGXq%YMIq1_O)Tpjq~$9srf2D*|sNG znfTRTr+55kSgId z-pM?Tw-EvNhYVei-SCE}R?)-0N zv<#0Xx(nzB;_f8)JK`t5g#gb%a_7kJsU|P$mGWhhOSw#^$==(xIMFN(F}TmKQ_oOA zP(c$KLB}|xOdK2Yh~G{KpDqie-$Q?OwX@lB-8$|~4Qk#WyPyN$$~J2c700#!lAl-% ziTC_g%fj~>1+OX#UjqhXL)twPCtqjJ(oWn_aDX+7?KOHn=iz5bW}!vEZtXiCt5c-;rvV`^yUhKWO&TRR=;W@_x(;}Kq z6_W-7M-bk!mQw3tTR;%)3{p4NN14US+)Zc9`g-Y;q9P2KO1P(uRKD0vtAu4+=Rgu zRSKFgEtV}y9&ny(3!h8*@J^qR(xAug!^G)eN2ckkY#yx}h41nNHwG(7yu7@9)!f*< z+1c5_oT8#1*NNCV9V&(B8~)gJLh2vy0O?Z8CS&jA;Wy!p-YbF+9%#(zJLGz zzW6Xr1Q)Z`+`>@3zZls1Be(u9p_AF8Gm#Xl%6$+|EVI8p=DR0P>);+Vwjy$ zr0g%$-O6KP$gi2SgNIM)rXA_hb@h&^<{T+4(}U{k{*k7~2wxMp@uvU|%65?}Bk;dJ z^WfqM>R$GjKi4X}qinvTLEW=ruiX9zBhH}D+rdvneExiyje|pW?ufhmh4e2iBiqfJ z>nKh}1+70@aSURQf$G0>pPoA4Q(S*lkbG9ph3v8_91gV(FceIkhST$Qp*PU25!?r% zJdFQ>#~2?Oy2ox7h7i&_i5kL-hV0LMKC(WDiD`ZE9?2E~NMX3?Fo0+SWo6}tuOfA! zfZdsM0ftu(Hr9q11lT`1|H9({fGm;A<=35uyE9xaui9!4H(1b5K4jFctWKW`*xflo zo~Oq)nT3Of(Cpl`VG)37Yd9nnusFlTXb2jzcM{6LIUX?9H=+yBkK-WvSB6QC;;wn{ z*sTbLeU^n=@;HbpgAZmD!*nAM{VELbxAln|X!e_ErVrp$a06XeZ@TTmpKcyGU8K`_ z3FnM=PtvC&GAQ7YnR8yd$8VvtBfuy|2p52g%HvqlC*X-oUIiOCpeN=^miFH6Vnmg zLBete|MVs>W1fr3=tafR%?_j69kt^4HFO2w%gjF|_;BIJB>#0kb~l(sgF=yZ5zy8) zx4E=B20guQ6E(`Qy%8uckXDO4b0g>g{_c;B2N#_wj9v|W*mhES)$7%-HmEHAF&abt z$E(BQ@Yp%o@*9Tbk?V3BlG=_acwqw6`jOc5D7JO_0Ys63;#w{!dt z9sdk2wCMiB*%lO$d}upudi%&TL($!OJUiTO0dg#+^=$-rVoSIxXfD#Q=EyTilHRB!du%vUL%pmIS!Ap&>3TZ{aSmxB8Y_k%CH1sT*#!_ zrzmwvYE97;J$ln;gEh$Xa43l=ffjXt5O%OVq%+LUc#Ih3{}Mdc^yd@PU$_6)(|G=q zLy-O-6Y`Im{9kL;+v%M(?7pRDR3X&OVXN9@$Ju0&Jgp(| zfX2k6n|2iWZiorN+wT)7U_?+Nu57VWQ}*!o$+dkXJ8Gku-F0$aSnAB$p%VCDNxK~@ zw~ABsRc`=2Xf9s& zlh6X`yhMITZ5he~`QrkzP841?%kR#L3sB@NOdqihka-$#*m!4(^7LaJOH9La@9pi5 z)ACa*uN$V$8XXv1n%Fhume@*4zvys77XrS_^foVS`V`ajUqZv-VLHowIMK+DA2DyK zz|k(ANrsNpo8m0}87_IU^Zq8-N`>xBmC}HsniDc>4(tiNAuYl6Jh zXE>CvsqB6uB~TX`toP>A-_O)kXFBT0zcV%orZ!ih3-JMgwmD6Ap3J~7;)Pk`NNIvB z9P)Z+8Juj~cOy?>3Q{JE8x5cG@qaJUOcNH?f;_Z6*eiSdG;(y z=5UTnzU)m46ACu1w+awcURW1)4*TN$Q(9-X@xY zFwS{l(pWH~CvcoX?WIwxcT{~FNWmv4OBS-uQo<*CR+7fABkjJm>8yDUn(LhliySh} zcL=yz5+-fGuqL^R0r%`<2@^@8>w#9Z57N(x-WhIKcz?#WDX+P#Z&vVJO_6{GBDoe1 z!;IV3fOc*I8h?%>jSi(wkjTqFsp7Q9@ge|*N;9^57bP++FNB9@4R)qa($;9Lgfsw= z)p7hTp~iOtlQ>T)X|SJcn>wro?(>8;;11WhTOchU6}Ov72KoFw)V*?6{AOaNswYHC z(%)-?%*+Vjj7ZPquH@S9r~8poYDlGuRc}vql3REIpjJ!3%DJlYDQ3EmUFqmaF2!A^ zR9xR9ww}`dj9cH!y@j@|<}w?_(w5xSDV#;kXZ(__p-@b*K zyB^guq>2;dI=^qzk-@paIL2zb-TYvXIDA+osvfkQrG1e<*ZP@+%e1THik^JcI%jl4 zV}|84zoDzhqdX9=dV0N1_hal?Xi6h10ug5tA#GtwH|3p@2E5cLd?Cc2>{xCfEuz=) zti93I`-8n(X64BSIow` z2{06_60;B6`BPjK?+?JW-{zWT1;2W(c6-^J_*MbhhZ)xUYB%s zQ;1L%zX^D}yP#p|2VHYY7KA-g=YmFwQgmy#ubBb^ z4_mUo%{pivvYsn#`ar+ub2=6Lq382jy!@>wPgTXZ@BN^H=Egw(lp z@Hmx`t=Vi@t2gathbbm^KkKg9`LJxEif;z>rEX4c$-qYIR+HXr?p&n#>(w7B=)$NG zHU->+wxXx1cYoT@4&fJ3PDmv5ebFx~;5ks-UrbW9M{CZQvMAAIH!A!-_sJi_BXa)c z2X%Ed@^A9P4;za)4`-EVJ4x8#byD)SUQF>Kec6U)36Gf9(eiCXqu0k|xfYAWgta)9oI5p{pVsUx z__DZ;4{3^NqL3vSVtZPBIl3e$yY8NS0t7<=o+R>NViC`m|i{H)`LMny+Kbg}m^c~v(9 zVpbH8R$u{jw>T!%5x(4z->6=HUlWf8<}TsG9S9XCSC8xhi{qmadVEX1G;`Ks{KGvb}meRcZK&9=q^HtHv22}|@1tXKX zd&2|F$NHTN6Kex9zDX#k1=K_1!h8Qd42m7^2+X*P`~6WGP2d+u!)rg<{Od zwYO-kvm+?fx8Wi)?kSIm?Y(on<|`;o$g}P3?=tH3a&prHmq-(8!JYoW_3O=AFuL0t z5Q2T`Qeh53zF$Gn(8SUPM0&5P zAoNk59H}wm)bQeg3~Wz}JG!N33W{=f_=~AkPxUC2xmfP;7YJLH6cn_PIG4*l*E$C# zjptixsQ77k*(U^BV-3gHNi5i6+XJ66+(sCB7Zcc6Ll0esw&82M<~bO`o2K#u=-Sn> zz|NhuZq4?Z0$2bkk%ViqBU_A$bNi>^#po@i-?go>;h1Zv1zC2*rrRHg|p_@ z6kU98zFXSwuJn=+_qVYKxSAB4Lk~;p1r`gb#+KgNn7LB&7_zclFz-#CGO^yL-dZAK zBPHCdpCFi2KLB~o6<*$VjpM`B_WK{qRu4szztj~PW>iLQ6h`mRPc-g7Xezrt!SgGq z>Hc(zYgw)D=i(HAz(AqhsqIMrEZkI2Fj_Xd*WUZ3rde5CT=AGi*gI;GCNCSIWQe_F zz3zR{N*%%dRQPfdsXInMmt^lVbqwM>*tkTr_we}G=do3&D;nC{Jgy4T{h43z?NAUc zGN4{HHG8Su&0HG`@8*ZivnjF}^;vPHJL)B&pL2{1{AgM!+Pl3<3Ms!WLzRf`j-5NaK;9&&;cQ}N^XoWj($a$N1iN}tq% z+WFSqzs{A;q%s$v?6x*tDl)Qh zo@>ms3@NnVaS+v^J#9}WRC=vF^0%Q{bFHYliE;*DtC!~K8KrhcKbqvQ+wZO+O|PTN1(Hy$Ikc;{UVKqkl81sRa(F1 zcc|ep_=^5!=c$^N;JWCF9DPk`{tJKvsp?_4qrM`&AAJj#^K zw&PHuD;O=l z-GO2Io%u(N`gFX>TE<13j08w+^5hH5_!$CBqs+oJli{#ZbQH+7vkR9Gp_rmglFo7} zlmNnDgvb*@fTd68+=lE#aqKOtB^~qw_~CWD-WsQRv@B&X@j7t{RhwK4VP=~vv_uXd z$>Et<6`KB7$wd^#D$zCe&6mREfL>&Qf4}p7rJO5%H`9vd+-_kmp{6?2?KUV84ICu_ z07JD(1|RXe<%f@OH)4m(K&c=4l0lBPq+n!o8K8CnG{0&>E~(SL#IX#G7a0!x*}oVq zfz9wjZGUri3VO!lEgVf=9qf_>j$)k!8Q6_ak;vnkPKV3~qe47vOW2Hdb9=#EBtVpH z9+*&btEk6{+VkBC)Ty(+GC0-F=HwLx$E7I7%$z`rd>f`o4%Pv#I`6{?kjF&KoFvCeZPbZK zsRYRAIV07otSH|C=cbAKuyG>ydc(Bt?MfZ@W}LaXLY zdl!+>316*!g*TWn1v{%2?-rQ}(ni_1!`&s#s_k^K$(1c^tY&bFu^xX3V`FrkvCDjW zrR2@QUD)35Fmsw|v&cGG7G)lkX0ParP;c6B3CuafM3pyJB3xN*oNPH3D}iYkOMmO} z$A^7QR;-#5NWZ&!n;3r38$+E`8DJR9it;v-C`6MNwZg=jmloj?T|vY5xE+ASs#XC? z9OeG{kS1X1G3d+u4?@T{A-wa-UL(JjSQk0EGj-|fbt`)zjAKbhE#RkXxVD<@@pn*i z)lH2Qe|?0kVooY_w+4S#0lVFf&m2Z%8I3yeYSJ=UG2enuZFhaJsoC|93#RrQv)m0z zvEsb;tFG9BP7^3)oB{XgjST3ypDTa4{vNUi(kFsD4s2A4M0p6Knv&eTo z40_Tl>?&kzCFp@T}Cs{f;xZ7UN{<^4zKQel?zmk2aHsv8reCLZy4P)zHbMeS*GNcCy zMFGdhBet|?733kEOZs{hqap&M-z`{+_PV_@fRry8UZal{X;-a8cJ;W1`~(*V?izwo zMn|rc(?9+olbtv?)yq8gL?rZqCX&ye1{qdAGU>c^?SJBy|2iD`|9i;e2s63$L5#Xw+oL}Bqi^ZOO&+NGNwXghK6Q-r1N>0K|0s?`^Up!aV0f7i`Kp zfIz0{^lcXI zvN*=#C ze_L8B#5lmdffxL-DlzfDopF+i3jek;dZ=-6|80JV{=Y;1|4PfT#TK}!O7!v8)JGOE z+Y)}mit#jAZ`+;O`fWmxf-jrTZqq0N%x5!GQ(kU0)L!GZWt}Po-Jg5*aH7I4xt3zQ z+{R#0%Ix|IdsPb@Y3$m$er1K-l(X+tC^62a`AiM8!g=}S)NiY=bGRUd1wB2z*C*RE zcKsPo-8wl#PJddGvHR@$^BdO;8Qe+xs9V-@NMtA4_-8E@Tmqi(G!IqI)u8e zS%0fAcEg_exu#hv*$>=yX16MX-~P5-D7NF{3Vp zkj-7kfsk0vMi5*lXYL!qu)fvLGbnfff8_I;_~6aQ>o}Ey$D4@QG2f~i(7j4z3@k2Ob!f(Qa}>=_i@Ui0+$_DnG$*D6SI0z<)^t0{w{cE8AB> zkwrRc02^nf9D5h^^#4lv|Eu2quU^+`7TY;*6vR=${%7H6WnJx#GF&Wvwb@caQGkw~ z{d-Ro!rs-Vv z8T3Bne_zg!1aYJP6qD}qYZ6`z3NtBC{5PrPdj#glfMr9p zFI|ezVG>;CPYlXY{BQU7zE?X}Zk{Gj-;yxgU@GE>RpA6}{GW%!(m2RscMy|yhZ#W_ zzCY;k|ESZM1#)ahT=uM=bf(z3k`cyIb8_6Q9rSFa<^nPS40h9bi<9G~5A-Z2yk5Sp zybZa`$QFo`qx9e0pLsxfZ6=(nJJ}XOaJ~Og4i}2sfITB8aF~DEVFoIo`qw_yG6M)o z%6G^-{@>V<|B(Y%hue(6xs3#LZ-dDwznTa~MD`Q>W>OGcC~hOmows&R^hGtwqJh>k zU_1&=j+Gm2M1k*ptTj7!lp1aPU8N zyYnd(ZZNT^esTG2P`Se_!}IRH497t^9CXt5Od9*v3Lr=S<$wF`SE!V&?0tZ?k{W^D ztcG1t;bt))=J{1!@kzTrhg}=>kN^d=>GN!=3{Q^#m^aPj?e8IbKbX>2@>xYF^9B?$#Te4#do_IW>}Oxo7AVuXtu%x??WLLu}5_T zewU!XfB}Uk_MwZe(&){bb^A_ZFgTw7bx9+C42yX0f6Dhy7O3Q*DDEGX)$qWrAQqzW zwT4TU(Dt??J98@Bc3^eYp4Yx*j3z?fXUjr|x~F-u$jr&|CoFO@WcZqL6PVvaJt~pA zbNE`Mj4#e^bYJH;#LBk7?(T%PFK^MWZq99n@730oXrt;5(L)|O0{@5xsn(j`lH(3I z;W3+2%^diV08>AnYM8-q?N zufKUGB@Kb6DKA@>>RtQ>X>!E^s(Ri9ZJ(pck0EDl8@uL?o=)3FW$Jclv5H%$jf#fUiL`I9yd(kCG{%DcNwUO%11L#Y z;LCm>z=2wfqJ3KQW(|I!`Xh6deHchWG-kf?{Z7T|=)_L~Vmv{%fu=hRx$I9lmo=g+U9wOfx9T-;%i75&ef=Rn^veVQSywu6xsg9pk3aCYF;wimv^sQ z5YZ4msgTO$rY!|@Hx-&IUuc&$U5G_`)B!)~_J7NW4U@u2cUs-A6UWsanbQLrH zY;+$!$5d7kI8k>8(p`(+y@hROJsh_eb1a+apO^Idk!YkvAE*}4kv8|lBW?a09WjD; zm(-Mal^Q>Z7Fdi$TR45woPU#PfIqFK%)r}9`>k&{px3|^jjFbIF^ktIm@+*A^D^(N z)0--I6Qa}2&Xe_kO(v2Tha;&QN>?7Q*=62hKF2Rfd%ck5Ct zW4X3+TfmrwKt=HyDFaX{vl|Y_W5N)>TlNm*`D`F-lg5gR=FDbhsUqatvEwRe6ZQ+c zjUNVCz|eFRC?2d7B7YD*@uul%A#oSn^%d>kr3)?5E_PyP_c32KatVVrS$Jd2)vA zK0-Slt3I9U1Vid8gDN#@FU57nX^e7;wk<1im3Bp|e!gP1?}wyMly;+|N$uBpTvG<- zF!f0@ip6z<7}T{inV7$GyTi+az?T4rKPG?!ifi%#`i1bzA2`E%?&qt#q=Wtj;0PsH zl@RiPfnndnU$3fxpNtpBAA(s3K?hT6l7PTg?q`q6)aG8WgL=2^+{SJ}1StzBK=g-f zs2&WhLlX8vuS}N_pu`gb_@I@0)!Zku>q1D9G41sA=?_RM7VAb3BQNTaHW%~6yHc}? z|2u*n%$9!@ z_IS{5JX$unNVir_?6`!_&MZdzsuta6+~>=C>UR{wxTI?2pmdS8IF^)Ku!C({F$nVO zczF^XxV5;1S|8Kug~>s)XZHV22Dsv;U7d9WxX*w^%^FyO`h}U=ngOw>b&FW!$=3%2 zjCY#)9)y9k4lt>|Ix!o!zvDHY$p%QX8L$(sS-qNacW~V4b8(n6KS5poFeBX|itX)*uig5_J-Sj) z{rvCO4mW|9Tr<#)2k7!tZr~ntnHbSsWw9v?0S1!@-sV^`AhRdzD$mHB+i}ZCSM>Vo z6ME;OZ}A=9MRe&V%u{$@5;}N(EPJ8)9lPgIW);{YR=GE~%X=K86e5awJ>qG7N}ZS4 z?&3ud9Au+|D@a2rpw1OxX)|QJ#$$PLv9`G{a z46jJx%q3rIG*XijjHdXuW!N_bc?n1n;;GYea%inUdPStKJjzt>?6J@_TCMF2@L_}L zD1H+c9$u}+2~E=mxmh!1A?hT^mwnGeg&rAAjyRAhRrup!!=>=ArwYwSGSdu4JjDq% zvCWzINwZHmKLp^mJ`731I@vOjwXatpiD9v}wc;uNpebjXkght=ZRj(S8@=Wd`7<9jTkJ7$Ew=buu;3lTlA z!+T{dlqYlJ!(yy=FHbuiVNIbc0(JXa${*6VD5G^#!*@uc4O=3Iv{gJtFPTR^&7B5M zB%m-r?DnX_Y*}xr5>-=EXONHyd-&T2TLkdlQv$7;Vf-AbRQOUj8?GCIXS&hi<{T(z z{4LffBAxe7P$37`TVX0&cTkToSINDT#}Fi8`We^Ah)*={+Lw^)ZF{TZ#RbtM7oWpy z^9(WPoH?pQAx^Tp#%uW`jqfR=9~W-C=T2jiIVyxDpDeK_`(9s^o{@sX@-sV?uyyb( zNs@HpG)J&1s)>bedOe40p)@bM`j)6^X8P)GFiQ{Y+PjiiMAB8Wo3aK^yhnG)?|q?I z!|GUopHw?+#w5)p!R8yaBy4TO?Qf$C_N_I7C#4?q#<0xO-)^E>iu%!=!Cz6(o!3?! zcf6{PFm%becQdND=^m@}A$eQv*@z~p%&*^3zQS6U{5W?OpZzJ8T#STn9gP3p89)Cy za@|0&CEnD|?v!e(Hp5@J7)v4MvbVGiD@fCAaZmV}yuizsJ%-F|ua{!C&n7f|zr|Nm zZ3lfJckF5}p>_?@Cn8v%4P2|Ezz9p(boMXIwhm2|KL5sywA%U> zB=+&lr2;Z^+1kInRvlAZmoa*QJP?KU&cOI{#zg#<^$e@d%bC+7U^6jY>#Q$p`Whpj z#Y|?24$-9V>BS(&_FGv*L)ao&J)%>EM5-KLX5~ulNs9JKtsLlmW6;i&!r{JX{$sqA z$9Vkct^3SWn&HPvIaCvpK6vF$oz1)StojEcls6V(JY37R+@GeI@bHOv*R#Kp5hg<-Kd{9+YXd>p%|TP$iLC#K{OqO-l`a zeQmFL#-HixLa0Kw^2%$=P|SNm-bjG~`Dpl8n#DnM(vVL6K+sA}guI^w(ZVZlNV{fW z`QW+l$t+gdZXY9UgCF7~Sbt&2Xt{p6gfxBnHGn6T-505KIIh{SS0A_Y)YSy)Behel z!^27mqQ^wbV!D|9QvyWm9U}BmCKlVxYt{7mR_Qf8uMZQYd;j(Y^)8T>!L}-g(@jv( z_wG2W#vqpr<{y$gx^R_k=2xXFelTPcK?Fa4B2uEtaB%0IU^qSK8y}Q37jSJv0O#Su zNv@{#PT)KeL}25f{Pm>Gb=uBtpw?U|I+S<&j@+cJl60k4 z8$DzwFWK0uzz|&v!}e@fcVNU(x2}GLUsdRo@C?l&zl-f782@iuUvvj4p6do8 z{AnuO0dNKfa23ci`E!3H2d3kN!vUvsNP(C*?z8xuNbLqM>h5Zf=w=z0?Jv$GQ_U8S zXY{@&M2xcs-c=*!Ej?1LtK@QmRSpT`&rXx(ldZ27R#z?-8C$k%>c2R*DfY_*_Q^Yp z*4NHu^gBD-@@VDFOY{|9HD%fD4hE~ryEm}cH4v$A2dI5ikuS@;bXYc(>9PI0p`1-k z;GaJD`~gT|RNvO4LokTYjWUppKxXT$fx&maY3(3=-X{#BWOjO7VqTqGZX>7c)wwLp zCPkSQ)L`}plu&S6{PEBgb1l*nsI=Nov zU^9l@8!={T0Jb(>j6wFLj4mCTs60&%ZtS>b?F@)Vp8n`hLNDmyfBuZux39)?p8)=G zy1LFR6|U=9(E0R@aC!_t&@cqG{xjD}D@dO#qYd-pY}7>2 ze7Um7PDT<8-;HogDpfk9#hVT7?s08d7St3mTo>|{@?dV)HCp8TBnm=Kp8JLv^j`I; zR^6h;K~@`Hp^0%8s!FL)JjBnSqrjR^j!p+>yx^XLE2o)=o?Z(tz4fz$ZY~4%4Y|C? zDmh`(lw&o~owpCQGU$VnljJpkG($?Xtk+K|q9k?!liS~{pIa%d`M#py5!Dlikx5s&8(g6O>y&F-WKK^lGfT;z?ktfnv@Yg%T(6FfAGFB+iGIZI$I(iY9ZvQQ)JB!0{yrz}aU;Zp?!f!04g9Q}Z zoFyt6f_&gkaA$B6A4R9*@l}TI@tx4;=>jd*L1KTz>`k{56q%jBv!?LmNalPv-7zTW z-_*Gw@W7@~c>zQMkvZ^>k!>h*sM8Yd)9YSkJ!FKUdnwLsyfa@PW{85m*u6gN_$*_Z zlOl1M)VdjSKcoe*{|biv!@2wm>TvO6GWeKnCqa?^=a-~VQFwFb-6w0vgVBRMK zJ$FFoCSBWGGQF3ndLimyw6E3q7g1!3o9ugGbG19WKR-N^B3;hkTt_eYoMPZE6djoG zXbijgYbP*i^&mEoFW`DC?Q1buC;#o3(|yW`JA)UW;&2@HFTO|3Tx4;Q{m|qzuX`HW zn_R=FCeyF~Z1eLArS#8!*0_(YG?si}S0cV@+KRtAW~XL(%u|9nY@!tc6fzD0b)r6v z^kXx6e)$JUHeu$raw&A_ZKqZBbBdzO<=w$-3gCtXNH%G{Ubx@1u~GO^@nZ@snLRtR zW$2=|t<(a2b*fr9z9!;xc8!%s{o+5(++lwquN6hg_wpFwxf=wzK9IK;6_JooB~kJ| zcN%IL9VNpZ@lbw>a34~KMCfYH;e*g=Nqns#dk~v}B&(+Dh=Zkt2Fh?{T%QvIB^ zT637*KPt1<>lEewLl5H1{v~e`9}+xR#~Olsa&c-1sSn(FMi*^G(bV~CK5Ist zdY$GGFG%JuRpncnt0nm!`_SCEFt)<%t`4P^Oh_4|S}=1jqDSDxhQ}ikT*?S?bzL|j zys@!;{^OLU-y}aS=*w_rb-)UhQ7uK zoI4Y2|7N%tK@FAZ9g*mZ2vapp7u;Mg^q%29)l_>0UqM#6i%wbWUqVhBF?1!D%^cY` z1m51?g@aDPARPp*ErvuCoocXFeLj4cQwl`Id4S-s0`2klzEc8i5L1vLw?Oe#_592{ z?&12q9*Xzuma$#yop~F8$HCwPSw?gzTg#} z%2*mplkKW;f+M*4SQ3jYrqW;!^~z1y!fmcBk-_)A^HO}pE7Ci_Jj{O>{CE3TTk*FD zDJfNvYZHXUa|&23bhtC{&^(8iU6ryLNRuCqBl}Q&$e=HCeNj_7m&wL=4<%n*`5@Gs zox!$!8ZV+carX#0H}+ZO)7Mwbm0>(|waa1cl%RVtJpvfVziO&(C2Fdl)Ilt?K{k&j6;BBk3gqfU;Q{%$PsmR@OU+1~7Ce!WbvR_ISwB0hYU@WC zqPI(v)EqXv{qm_>*I9XF)I|HcL=Q0{b!eeSQN5MDAXPewEn)*LjqB+J4$);qTmWHCCrSx|In=BF|QTQUMXy^r-FZGg%f*Ajq!Q zY>-h6*ak@%x1aRDa{O4Q34Qx@DRRXK?)^4N zz3?h?tydZ?&@he(V!RBd`StL$`W3nMq{9G{zJek^^ftFr5X2Zq2tztbVt*BUNKn$ZBpzLVrS2n0kdFODp-8h zPl$SQ!|Bk&X@j?DjFl~~H)wXOM9pzYg+xkxz&qO|?(z-G?6n9=PuDpxw(1{4t1}PC zRqz@b%`a3=tQk3#%!ro8%y{X?WVO``PD?Zrx?4?4`qDM0IjuehQ5 z=*bO6W0>25=RXpVI2@s>KxmEqwFw)m zeGHF~-S@@Hmih{=UeiEW6<$lOG9<=o)}WoOyWJcFk;hu? zDj7H$OM5s<=$&rYqF40A%e!l5YFl_)cVJ_f%L8-`(OAdzIkMD+W5!)iTy(%Daltf@ zwf6dEI2iOF}d9K{CU-@vQCp9TLz>eIGg0^P0@Y z&w5G$Eoa9Fzx#Sr9t-2hS`HpbvZ39V1e(6J(YuDt2n1<63@!ROG{nCK8IV{Oedbg0 z?M&4aOozCoS|_Cz^P{6~vGuy*8&T!4A*tr-^S%O$vAx#72mGq5X454x7e6P4EO_S& z`Q8toRoPB&3B-;Zw5>OIIUL?urU9wwkdvDHK0j)WwHWZuJyGiW%DTJZ@!NRLp~t+; z?yY-;i|X8BG?!P*AsDINfpkd?>s4|luoiAvS@{b@tH*OBgHpW(S+5AFa%Ye<0 zdbb10?zqqI-1lpNmo^)mawc{S-_}n;PDUU4@@m)y!cX~WYDDDztgJ+a<6(z9#T5-% zaqt5Tk&CIhOYvbDW#dm@*N^1o2KlY8iP&8u6kbR;&coHe(@+c*78SXQ|F!=oUnARO zD(6odh)R50DPVFM*j&9?tx0f=Y?uba^{kCQ4AkX+(N_w)M?!^^+%jm=u}~FRUIwzF z-;}xMc|dix?^hnM4eVWQ(PB5I#c9A}R`~}lZ>BYIj2`MOJ&cv{eU4tofxrJR;zGNB zkbVKu5+Re21Q|`qQG@P4<0jIt{xZ-`mXn6`Kgjog{{BtE21siv8>A(*^H|!=lj-k6 z519|z5+SosM-r$C4MO~vDE%yt9j+m6#}jg(p5{$t$iX?A@9&8Z3EzFsx*^vWsE4=; zP?0;gWd_=Il6+U7RHQ2h7-qxuB2+Aq_xTsaJE;k9|hBZ7j za?@VOm14aLbT;aE1iP`(>^)POI{ov;46>BDx#IiXrso7f&K5qaQ&oQY21s5ZOss2t z=Go!ZxdAF`p$w52k#FdjGm}>G^f|9KhsW}(vOaa;THaHH)^5pB6YaTu>-XQGqI`Q4 zrvdfMdTn_WDCS=8S?{KJ^yb1A#uK8{{G!!HTOmKQ>9O>&m!9Zaph9ZkJsUAISDc() z1I2wGe`5xFSV|+gD->73@Y?snGtt!Hz9ym z%9;Aw724N8!J7rvyAdyt+9%RWy~`C=1}kGf+wVsi2dM&i^}QRh56GF16|d2|_vKAsRFYP(RZwvou*)4*gMobWs*h;#+QqGnjle=*SiCd&8eU%x8E;QD7lZlY*L7JhIP?b*g0(1pn#}SYbdT3x`oLDQ`&A9 z3jq3(f`M!h=fJ{iPP3HY+>aZGsA)@>Opw|SYS8FRyn(r?3@Fkv(V?dL;J0y0FntbJ zx0umT|H43%u-F42SR4i9eJ$_OfZ=v0No-%~aAD)km=VY5PXflx510$?HwzM2?^y$4 z|H^c}!M6puEj+hQ>o$m;ktk!N5I3Ag`#r$}??Pv+#3Vc}k4qQ2_}>PLOY&544Dx3! z4aoRtXMeTjC8;c@SUvYXk1x-Q`aaNS>n-75AMgm; zubz8$maBfiw^t2nGr&3C_@ED_ccW>T$E|#r(~CXR4HHU_s-EVim-LbYg8)8!8AxU8vd%nH_WIS*wEO?`A-lc%XU*GHZxkq2ZN-)JRRK&>fi4epuhv5k$V0>ce7fhR`jK^w1uJSO=M>n7Lu zPoH^+UtN`Ejl-_G+NEOX6|QdhQX$J(9qjf83}0+Pv`|ElTd99>n~HHi`DPM&cwdL5Q$hqz-jDe5zAF9`1~d#CLb*d1dvXFSeiSJ{=DZ5)Vy-`XtO2!j~~|H8jWo-b=tFT zlnTc0&XZ@uFvvt@JBr2+j2sBhdLvB%AY%?o@42sIEuT~N6QOXsOX{(aQ!*2uOYyBv z|JC!IZ+FlIW5brwb?p>i8XTPsYQ5j>06w7sqX;N6pLzEmB#U+SdGG;)m>X3hx)isQ z5(v<=7Hn=W#azUj+q67jbVBq`G54-J9iX?>UWWCnwb+RoiPI#L?qXIU4mwM}Y_9)>F!rEzPwOzfwkPhg{41|_D34B_h4rI2A)RP@2Ryq_L1!{W;gNORs956i>c?*ao9=r`p?|wftG>SW^Sx6lS7Zus`Sb#yNL!{m{ z8#S%~d?j%td~dsH-STw5vajb|S2}L@%4-}ERv_)Pc*mnruybMaQZW*#zscw`pf#=s z7iSAHRV>jo1|G~_- z&%EQmK6Zcv5}w8Dac1zulCRZm$N-ERhez;cjBV-<`Ou>yAuVu3r93KAJ4O>H3Agdp zh-(xzDBOn5S#u^zvB6iLves6a2sJ9vyxlHBf;N?5dNG*GWk74*mYkJIe-1lO1QBeotgr?%^`pOA91rXMqXl^hhx&~^ zAtdUy#LDEagvl=G9&b;56!U|5P&8bAD7!`bjvfZpa!jORr(yNReqT9IOVLbC*CW@a z!@WailB-1ypkcfIRQ6)hh|6D!lIejw+Ecq(e$qPLfQX92d@-YCUUBb1OaSu7UH|EP z%NUS5w*+8v{xo9V6%&QX^Z3jcXc^@w!8)7bJ<^ADS2d=wCWcr=Gw6}SWpP!rpa>kd z=3car^o~qfvi;*iG8Tq0tIk-*?Is7`Zp@@jONl0@g;IWL7;}&WvpwrNTOEvjc0@w( zg>_2bcC*$+#tf7S}oF zj<1x$h$!76p2e-Z=bmM9_C_Z~DIflpqV#_i4`;qgAy$E=o%~2#Y72qy9}eB9*9@}! zAv@kEHed~tk>IGI#`{GeOez?Z|FW%}0(37)ytH_Q#k^y_-GNRKP@j%B#L6`<)tIV> z)PE7+pnLU@nC!mzVdxZ_5xW(IEVmrpYag!p@zQNIbKgXfft{!PSjB~W|Io5x-$f(I zE18}Ys|w#*!&mDYh1h@A6cA@;zW(73P`0J*( zbRZM4$4~|4fs#>Sl+mE&(+^V23^Li#+kFVo4mt9??5SOOX^_*k$l=W(aV}MMA~oB)b1#nK`s?@z_`}+LS7Y4#k>@GOjbI6Xg@$ z`{N27mdDT(c~S$U=?bc8hh!(3X9WM=IAc~~iYCv00wP=GHPZi*YHyq!>%E!AuC-IY zB5jM|hy@Pl>gIqpqQsjiDl||+mI!mtk0;A1E>Bf%Bc(&cb!DDZ|qIMV< zv~9eD(qR%+Y8;Q9mm4v+%;jv#I@l~C?sMnIYd%q7`zji851@u*f4>&E;X`3Ru#6Bf zeeQVxzGeiSUTgTy@)5vEcItOEfh*AB!<=s`+X37l$Mp>{;+aSu{Q(ZVy_TC*!+WD( zTkUOFteR4|^v*t?|7+dY#UQwJk6a}7iJW=%g!%3EC9(d_&k(k(gxg4bOx0A8FO$M3 zJ??|vo!R-j9zgb&hSu95|3+&s->;T@E=EF4$ZMoq7TRu!PeTZYiuYKO;F#T?T46yD z%E)$y_bX;v2*sNIADrMXO%uW!*Cb-@Af zmSE%c{O;}j<)-FXatI@lwCWwHc5o%&OhqbcCCnw5QZVRwx*tV4T6Bvw{e&crx~bY+ ztfO2@2Yd~uIEhx>=bNI$lj@K3OEN%*_gtEz_V+W3lXS=xtVPUT{CXcYv7B%buMLLW z)A@}9vy3CX)h9cKxtKedg5Q<8@iNloX82FGrp9LWGpmg`i{6yA>leLV_!c9z!DBOm zh&LpJuWaPLDBMCLg3&f7L0@ZYG-{6On zpB1_PR$Xp?PxH5lp>a!cHX(PEEXrI-Ue(ge)mOT$F9v*rezcTOY-CbYi2E|X+9#C4 zQuPP3{|2B-c9S@xd-)aCw=to;!VbcgUAL9P1?dnx;`6`0y(2Yi;+{G&<9=c1`Ry@& zoKj69TMy+JAj8qmd=*&|9} z9Go}D9W=!&op3Vf?06if8`L2el>~le7tkB^AxciW?KKrp#CJ|7Gqc;jQAY?TDWuze zXf_0tF1fjwik_r4Fb-7ImJx$Qiz=va%!I3#D0`s~lGt^WvX=aFaOG1`x6=!M-%dx8 z^%}5WOa#f!*bRzerzW&=L|+xHdjNYnKc*M;or zbsvMdOr@EG-(t4Aq&n1_J)5hvbmSp+bQghRN6M6C-&2dQ$0X9BlQ5uij(?mq$kq5@;thw$(aFiCz^$p)Y(s*oflhxKiyvcnI2?_M?pAYaje5Z-pW6d*3! zhSIv;u4ZlDmKC0w_hUlq>rH2aXG6!Y8iX1OrI93f2Ts*UiyPVGM@AHFE+O=?ZAddY z)vv*{`Y?5VgG+xfueiaFd}{V;F9tGZvdN(9wJljz)_2U8fF_X}ZO6kp z1$T8@T$)!G28iVG-DGbYT96)m(gX$pA=Pa)cSw2gSMYl%SMc%SNe!1L<>ZJ~-Bb62 zKdHtajEytj8p#FMsWfFHE}cEMZS!@VGFjr+Qs^xt9F^(6P?`=Qdowf^R`cb4ZbCIg zm4VQU(ki1~N$px;$O@O9^7=ao$A9s;S$fk>Arolvi}=mF@6d4aTWM26nDu+pi#Evb zsg41F0`MpLCj;+eTk}TndTQ9S$wG!+E;tDidFx4AT{joL&k-2K-?xGWFul{r6t<$s z!zkI&a`B6UQv1C=Ke3C`j+u8arBplERt?EK$ziZ!0pLe^Ax|^fsBcdP?1M5!hbgGhug>;$6-pMS4)3I>%cvhNRRs%%v&Nf4g>}b(l7ka`rRl|3&L+-dr-+BXR7Oh=9ifvu!kbLBmetmfT|qs^Gp7#x zN#l>fr8%j9S02JI&$&&OZAOf^Y z+|FYwU_XWE@ZIWtp9Y#L)wq1xZ~TAlZGjYmI(=4>;Ww~<#C`Y#nOJ^&fUCh`d2CHB zKL`B;f97)exa=!KNVj!l7R4WOYCmI?RGaPf)8p#Cp!gI8VJCp#pWq-ZbtQ3nT!_oV z$^KnUI|8Zm)^g9d{m%M<31GVkQ_TLSs^;p#OfF=iJjbW;cXh{M7{nvw>jpdpHd(M|78 z!zh57ylihwY{>~EKOTbLE2_=nFbspxblt`@Sgg5gq?8#*a~QD^G&xGI-l2wi=$7=?#@ zYrZBs<~^r%E`z9bkyCsYM{xt7ehElQF2o-SYcmzpltBadK2~28f&XgOq&SPWbInIN zYb?F4Ue0IaUOfE9D!p_%*GK8`o5uS&k(4ttgSyb%?t5xyd1D1#`OS03P8!)Fkr#1;78Kk1vnO5zJ97#t^eE$i$+fsUJfe~Wc6t`AWk5~lXiJ?)jdd@ z=RlDQ&(p1J)9`YcdB%;02-l$$cPH%+M*GLkBTcB@)4EU^yFS%tIXiVl8XX{@Ms5PI z0OqV2crR%QqSk|1R;~5sny=qUr~A_*teD&z^1b#VH0faZBK>hUMjH?HeKt$8mWyyp zCfh**wRcRmPpV_XctKy48e2=&a<-02#eFFLS$CY(l{7hlfZi!L;;{_2ciA)9!a*Tr>(j5&)HK8DiASVO)ovsvg~OD z&wD*k{zCHEm*Oy$h7Z=?zBok9Fe!&SnUF#?KKc|7svPlaNJKW@VA%ogd#UwKq9lNC zg2m|5PfXl}I!*@9MoeD_Bhp6=it?H9ff}W5T%7-^f3_-Ya;r+vLxTXGRZXosBRIo9 zvN^a!01N@p|9fy9!(&k0Rpy8%IVj>qOZI>Wk7ab9%`FaPE;F)tI1j-&?b%O<@4hFs zus{U*ZR=H{ec^MF-x3S>W#4W)SBw;*83Ydb#!x24TgPsuWsH>W5glwF_4D5)xX%ht zA=;gxdbqq2(&v_djyNW`KGyt4jJ|in>^r{s|A^6D{|Ou9S^Tkgk5s#W5i;qvzRj#~ z(@)qE3uNvr+7LfHcrI>*2;hCK*GWkA7SRLs7FTZLp*|!%MLhfr(9{F0ac8;ai%;bG zM74GQPX$Vr9uT2ylCLq{nJ`%Mhu&c1VJ^P~Ke+A|1> zjfdvHDhm?TCk=P=W5LGYU0x!Wn}wxZ6-8_{&0;C2cesK(LdjkE9YFtSPB=yiX% zEHnzX*X|D^SHA_6el$6nW#E&uZ7{yqWkJnD3n=hc(Fdefu3JEl`^G{e%fWT`_?KUv zWu~#CrGN4)RE%$)}rzL_CJjow=RQ3D^gqUd)pA||(5$8=@W%c!D znuy5pvranPQK>#-U8Bpk*?TuP5^_q=4?H8B^qq#B zk)O$?u^wDzMNiw$n@t2oYsmMk3>TxGzWZmFoK9&|TR+d3KC3Ty4~v~PKf2lG`a>h< zRKttE;_toQA0G!8#6Kj~%hwBCatEo9?ytYWm zFhlMie=VQzRWW|t9qDOC^sU4fQ6!bJrE^u*&o?>Qt9ZrH?gqt&=ee3Ed^E_#?q4)o zG^^F#99=mNwfS+g2uisoADrnm5qr#@<^?{#3UY ze4$f8!=|0(RFPeZJTD8Dv0)6L%11Uugt+-oDwUNIyCTyNRe}nCz2U-LE0ayM;r4choXX8v^_cK;IUu>0tGquKR}qCzx&!yimF( zv(2k-c$o>H!bI&+(H&1aCTFZtVfbw0Jrca+u6|we5Bf`#U=T$5P~3D?FGe>s9BnD5 zM9|&F)JrA;2C^MtQb&3y4!$n}JYEhiE<;vTg*!=UUjhnBEwEj^`jBJ`rHCUYlWKiD z-uY>U`ku5A@G7894BPK+bLoqb-D>Avic1nII0KN4RD731{bSHZMzui3@L)tpIo`+E-gF)}zb2qCe_xX`0Wk|HCMk}WB?vdRH;mQ& zU{=t>_}Uno;JXx~Z0W8E{&|pl@c1-@v`i}RiNUtp1vy{}1@z!}tcOwvNI4BOc6!8O1RF#|)hGY_pbCe)2+~lln<@J{K zenk*(dZnBXu37+&ZQ?a$Cr}`()!ZxDA=r6&2iByUzZ_Vg$}VbHKgpjP$Fz@l*+}{J zG#<`QV+8(C;ZbV%i0@%?K)zR>fii@dqz+a;F?Y3M;F?DH!fEd@@_g~I?%*G(%lxV- zeq~IT%dmkbaS2z~Zi1cG4__B@ya-v-j5H-SXBVqWPA^$z!c;X{Dlpy# zZ114JB}L$s9gpvw!%62`VmNvL66Iy$N}`%;N^1IIWu{Ug_iFv>9aO9`*jlu?ShSS0 zsdR-Stg$f7ZR@f3j%-<8y4b~*1G?c@v@D1eE54Zl+6Qo|SBH5e)E&P*T(OYv{{0G( zb~}w9zYGxo$@FI(d%n6*2t25I5z&Rqn~98HslO<4>z zETMFhTKia_X1 zs*3b3B_h&$?_EGZ!3Icg(n1MEdI?2AKza?m*FZo@2mx|8KF|C9?ilx;amE?rF!+lR zl9j#JUTdy7zu(UsL2nlI2A(eQ-_{xU3Ta~QT}yQKw&!p{ALf%2*`@Z+pH9qE$sBNi z4$KynWj1SwKp$SC>XU?#w$a;DEa&&CZI}E2xqYQ$-52QSk`hjnEyeDXKU*j)!<(*P zrv}CG!#~9KG%NUdT$;)uY~=J_B5U7!R^I@WCzSL912DZ7sY2NvK4G}|FsEpm7P4_R zikN=I(;k`Pf!Wcg@!BU(N4O3TpvGZdF;&*qKz$&^#6@v}M4vUSt&8QHzt-8iYlu=Y z_Pu1^==oV|kID7E9&9|~%|d3VQm@l-E?-j9Zs^>j@FqWV)=UQ9?@_8R&@iMpAB)d7 zqv912qcvI9r;^;Z+0bvy(XUrS!cFljd}q~E=PR(&wm*HAKvWVROiAQHz+=2(`tTSs zT2dJiiLHl~%u>G{Yg++RVpszoRzjhEM~IPGvSY93cVDWLCrZL{yxHssH6K~sYap#_s!C*o_%)$) zPV41`s=M0iv^B?jaSeP`BcgHJ*sn~V?_LHZ1(IZ8dC-;R3kTGq(6rDE zgKf(5U(GZ9h#wsMlttxl>HTMP$7xv8GM;1B#e(_Bs>h7&o$tJsdX;{jmxXki zZS{5(Un#Yn6=_&zs!TD3;$QFHUh9LvtS}|#6lURzECf2e#lpK7w+wP_25PXlc*L>B zOG3R}THIGaB=NFlzA)8YH(2nbfzLNpp%x61WdIMCifsq|wS4V&`v08N|KbSMHrAGM z{31f@A5dCx$8B>(n~K!7z**SrCGS3o(t8=Ix2wL)*$YVVW-S`h;3mf0A_0v)U=BTy zl@E;*>p=WQ7s*8>Q|VRBEx{+6alQPvRfIk5?I{}Tp6*bUQ!1EyQVpe&Px-|WTx^5*GOf=+tJ!U!mIpFG1bAyWrg;vI4NOt z0=mGZ`*Hc_6&UvGBTFE;N@F)cCz;xpG3@Ac*SN$?UZN7)#_zKD<6s{Q1eclo#xM20 zsWm`y>yD^M1NWk;48ubPuP>-5ea9NvYH{dgtkS{HhaU-rFCaC;??GgPPwfCa7@vrr zIQ3_Cb#GGIJ>w@+XDtbIt2Cou<@YDq@IU!N$z%AA zsl$EXo1dG=$h_!aOuW@sXkv|-NS#m=8`Qd7ju76C>hD)eg+dWd5dNuI@!LCohu4tW zzr%8V!^M-T=In$WqYU#+%9KYJb6&?i60Ce)mizNV|0*dV;8G0_>H2BTu-eEGLlD#gR16YT{PUhOf`pzhiM}f^7Rmr?ji7a^Dp%jfo@V^%@)$@VpS@arvD#d01}N z>ULXf*SIDV`+AFw{xVmXT-04zj3J#?vWuXwU&aBc?}4k)f;2i_iM$DQ*%#F^KPaY zK`o=KgPM>VeRgg+FSphZI)qoXBQ}8zDe5~~BhNaLxV;*(kZ|IM9^x{|_>T+7e=`Ef zZvkOIr2=o7?UUWNqfsqeHAvMN(VUKf(c=#(Pon6iW8D$)^jWDik9xU3!l37y&Zm&WzX`hJ(Neg@5h>RTd1JewP-52%jed>)X zo+oLx81rpCdem?B<@m@%0$2>+zh6@LhaQ z@a)WY<^U%t5G7V`cxgUAoD{f(aU%c8J?COi27!14&PV8 z4*Jpc2GNlO-(*@^W#T?d_z-K@ndQR?c<$ESvbV(v8`AnG*Ve_VV5c4m8Oq@w0jpt+ zi+G-KpIzOszY7jsVPp+{nA6?zN`q|?I2`cdK>W7OZ9ss1QP@>|!_}`-xXSS^nYm9z zzddRp91fop%9yMERw!NX5ksQC@Aq{(`ixYI_0^AlAN`ng{j3bGYQr4^q}9N?vYWH zkMd}~DTFlRLO@($2d4h#`#{*0%oa`$cjcl6D++`=VR-S%C1nakNpi{c9307#_&)LW zruS0`3Ha5@?Zy>?@3iuf^VgVE7zt7*CF_*}FCb>7}Q zf)_mQ-m@w_*zDr_{-p7BeNf&wUDxXLri*F%Exi)nr5V~VZ49!bh!&h&8*`8|eppTQhSt^l?LBy$pCAKM;YaK+_W=`hEoa|~< zTj$WymV7L>!X8gVmpzTbQIR}tc#@IUV{~QvX02W6BOtL-=@cYUE1G@--TZLkal0S1 zQ8X!HmoyFv*w3}qlhWMOM7$;Z_O0H&;4zr{Dt#1Te+J!{FTa? zR;E$S<80LEK2aYEuj^Hc65^+nawDV|J!2J9$JHZ=^Q9CT~b-Vn}!e zztN?S+@uNll)3S6kr22MG3_u_-79SCIv@-1>PjqnzB!_M-$V@Ceq93OHxn0zS@vsZ z2CpU-HdXhh^-;}!IZWC%no?nsU2} zjBmI440aJ?n75Q(Jx^p*$9h~drv0R_KWz4rRIL3(_3t!^!MbT|YdS+*hCc4ZpX)mOk&_we5vzT`07GH*q3Cj!9F0MrO;ISTOkk6F(Y*r2gD;rS!J zwyu~k?)9>JrQ&CS8!DERGWMRYozseZNbKHHUQM|5N=8GK$^Ph6qf+KJiyppYa~+u_ zM&Gv3!pUlZLjPA3#PF z<+FxMQw+%@{?VzNJmY6vTMSktNpL-_NS=v;75eaBxY>Tqm)ZvZVIi0u)gW|wkB1H0aFRS+CU8?vWB`@Pad~umkKW&O`bw3B>ysm*{0(E~0<$&DNRU87$`^&2jv_HRHUWjVIvh_*~J`u0lPP^iH z*WpEe5#4c_9)I2g@-C|C0%C5*(L5o7+GVP1obyp_$;({7>}^b2y|3q*i|&*~1(rM@ zNdY$;NN-3D-FE5fm0XOA=L5@sX3>Y}d@B6IqlWFG`sTUK-@+H3?PkbQ#iiJAt!Q6L z^K*QysY%4xiE&hQry{oJsIg$-xw!8;Z|}lRzn7c((|CrNPbupK_1B@Q^?4bEtqPpl zWYco)NZsr3PF@eN?4k4{0*i(*kOI1ubB9Y4!chn(qLhB=d4g}vaF)3(EMS&}%EesP zXKKZYpDa8|UQ>(r__!1nvpO~^&%s;IQQV>3{@i2K;kPAS^6;*9hJfGc-h8NE4hq|B zHI@@euoRN?DehqL0~4s`qavg;pmS*Wd}Q3R7{NW=U2SnR>_&K2AaBcH&PDR0<_gF{ zCF@f%LqSMLL@J!~vG9H~l&$Nrs?Zlf6f4=d{c~!T7s(IB=-@zh@VH-PC(mEvZZ3%0l0Oov0TJ0G0~ZB-Cb^XZWV} zhjIg=Nu5js`qclp-1|m)>$CL7b7PU}6m_oY5$$9cLdWJ@rit%2flLS}Vr5>{qB{gU z%GAA(0^G@>kUN&8y_e$nWwDp@W1rp>OLPD5R5^spxyW*|JRi7Qfhd!OrnqGf@Br90 zYUOZB5VnxNcbdkXuIu6oC;76+tA;80L|vZJ#YRVv7kw^6B)G3_)R{peBqh2vp!daF z_+Ns0L*N7|E=ATP_<+zCO}CFG&~s%E3Um9uArd8&7Rgufi4GgnMx9YRFlb3tRVWpA zoTcA@eJcM^bMk11@62biJDh9V5~x&>sOKtlYX7p80#y5@Oj^CWkg!7s7?6ME(zG6FqAckc| z(rC@Y#R#8l=Da}#nR@$x6T0R2G&onbGr8EUp*gUy_9&>VlMibA$Gpm6ri;(Q$}N^U z1?(v}!z+EB5~%(yd!hUyef~}EQE!O;x>;GS@O^_$z;u8i3+@0YT|$~*;vfKyb(ilp zv#~>sFn(>mEL1i28m~aVA7All%oM}vlEg;AuHACR!iVuU+U-|IsK1+dnTST3at^u_ zigj@#jv<}J*VZK79kVvZ61R%j^$9NDzAgC+*Geu?T;G!+1vm}9X4hSYuDy~?dxHc- z6~G+l@e#F=Jl4+qJUuGJD|Y2+dcOU3f}$d0X|f@?z8Gzd{meC_j_Uq48w+CVfe{Gs zYPyv?ps~7rh6yami)UOr&eizy!NNnDS1A0wc!#L&hX+Pwu5cKbQ^DbvWKbPIWpKuw z7;?&Y)h^eaEJDN=$Lx~<@3Lm+a zV;WZ|3(d1Pt5ze|U#=1^F|e@S8F<6wSBydguIPI*-6RcR@2sD)^|l+Kx|bc@ioEP) z%+S|92u+SPci9b_J+%&PYH68|{5VWotJsUozvB$M3Z=&{P`2;;~&h`3o&qQkABTGc{wPf z!)S1bAln zFZu2GE4$BT_~B!J*s-L#`-3e<>DV_PmLOiJQ`j%f1bt5FTEDFjm$7-?bwJm}T6KPV z!@q-Yd;Jmgp=8}>Apz}s(M}nt0r+YJchy2yc=ost_J_1%pc1ic<^@GVbs9-%Kvj*O z#4ENc_Wt1=-9K~KO>?`)NBPLl^$lvL?8dJy_7v3&$FT<|KHSnGnFaNI{r5y2UeH}m z2nCW!=le2e&myHP*M9GFrz42%XC~266oq{i3r&-7Oce{ZhnX%6y{S9+rLdOncCZ2PZX#d*^j^%-q(%TbuC} z4D2XX6xrmxB#YE*W{|MHcBy67bEdowl1QduaIul)XKn(B5#EkY90YT4HS!YWVSAYl zbv|4;9Og87n;|FbyVtbY(Y6yF!Z`JSYyRelruUQMlr`ijTeZ`@B*9Mf$<|qPs^GZs z+T5?0$fOddwZ52Gk0bj^kG&fIdUf!Dpoe)S3EE7!`!^5Y`nIUgUPLr>zlGza#Z&#^$2R(S(Z^2Ck@YHn*5Om zdn%9L6r+0eAQI#I&|w&Rk6}cO=72)G2EUxOdCUEV;v+ zoTgUw0Moe5n8>p!V!O~Y=4*jhCRwD%cxt|$Ewej5Vms?~-7K`^vs>27C^2K7eeK%_ zSMwZtT29Jh(|G*K`H6l~Nu00uJJXNWri<3+@*Y?S2Ne@tBf8FQ25#6t|Ayn2PULG3 zxpe=p1f@G*5JtS!-io_s0|?~sGnnbS1NU!>I=AFKzuHi*r>9rX=&G-)Ye7!)CP+E< zFLiYNolFqh*vnFYd+s@0^I2(b8Ff+0O{57&{@^2RdeB>Q9KJXBW=Xc) zIlzcc2Ve=kMjKS(F<9w|*K>AZ?$w7)l3waa#Urbv? z5Z)4x4)mzs=$qP9TfR5q;edEaZxtJWL_H0ALCz}9sp|TK>Hw?Vp_@dR#LY#PZ-_GA zm4YRRRfH}dFXY@JnqNu$%Xt@Kw>93YB)1h7;kpkQHK{0cX2Jqw0XfCpf5W;?o zQDqXPf(NMpmF>g)bAhVhC9{%>ebaZ*cE?#t?6EP6<^08A8`MK7z zlOj-+x9sY@b&PvPYfn9S&#fBuJ06GGDduWXUOT?QPvQv_kdFZQ98iz7mOFN#<q^ zD?)v2bGoe{5O zbQ1DA&_q7&GkEEF@C^B>buL!eh?$%)Vys{i@tO0hpIb0$NQm|_HNK6tN#aFh$ZV;6 zn-N!&MGjAN(-=aG0S%*_xE6=F8Wc2GW|KMaA5dwgGUY|ltND-z`IzdP zlvta+Tk$1lF8$vE5^Q5p*q`%($&q~0>Y3LjZd0_MEelmHB}P0po!*geV{P;ci(!QD zr~x$7>u{egi`IP;T1h2WPys2M_$+V)5F=Dv1&y*9Qh$&JNv_?l6q&sP0)%t2mbTuS z>k+IB%@W6vF=$FBhdrZ;d@<1I>u&=@^8h`#KJydk`hR()A;~cRli_mQ(TmGLB=2DM zp7zBHN?e-)lDM)TlD=cUNYqo6-?3f0DVii+48Fx&jRk+4yn39~9_!Q7`ES?XLyH$j z+}miJ8AoTdW+>0-Pm*G#4$l(a|{}loKc}NB*9?fVbn+m`f#2l zYQiO!{#GBs>l_z&Nka*MD+A6!kgSQ0OMYMT&&*8;C>Q+*if~u5%mN$fxQ6;D^iLkpEzv72I;*vf&~7Yj}tN04Q0fw!9>ALB&n=3;2K|$0JnU?p`RHP^coY2SO|W%rDALG8_8%zkGZs>c?(3xRXX-U+ zPxtXvCoT5NT$Qs^Z7IZU?$wuNUL%g=BlO8?;-4aIMvOxk;KjD>?n2{p@6IhThkqF5 z^i2S+Rb*%0jmzCP{)cnD_XmZl`BFfo{IuCtJHPX8#7OJ(Bn80MTrs(s=Iu6Q?k9T9XI;F~lymh3t}Gn&X}+9V zlQV zy&!{R5FQzQ|Al4*mRNxwLGrU0$D`#dl`s++kfi%_QNEYD_Q$1gtlHI` zqLFXWb+k^m*SXe{;nwFez)9{D$WcCd8eVph`E8r`C0vjZo5qSQJj?|usndGT4Q-C* zIsRIu?;M|?%ba6d6k93jr;L)SCY{E-RAxlBYwk@1xi}+hPEw>qg#4%HQtdqf-kg4D znBiou(#qUQVr14FfP_aLhodIS0WLb|%T*F5L~l&ZAH>wwKBkCzx$q{Ru5MPFlJ2!U z@HuE%$;3U#^RYT|%>CV_wwa(b?CGWJnMu~I&hxg{$Vdf%3J4k#B;vQHcmaUl&sh~1 z_74W*Mjk4Ncu?)sPT6Bx7aU+Jm6Suj$?0yLesp&`-SFJ0vuv_G0ud!cBUF~j+Cwz0 z3nK<*oySaeinz{cic@X>mb$o_$vXpQd_BcSc&r#GQf=v+|4U$obAnQV`qztoXjvx* zgPhJX>o3 z{|I`Cg);I%f4W08U}T$V?Pq{LxtIlC7$Kuf0L*3HvwTjg#J0U5kh5~xtR?chz4=lE z3E^wrZU>%nY!X{+E{$>21ke$@x;N52msO)c*JXVH6L!1@yo}od{vs8KCV-ic1PC!T zoRVdBhckp5*3zBTnoEp&0p~HkQ|5OdPNmW*P|$wFr5$1k1h1a6J`1S=pUmtwY?n}*~ zME%BPQh)#SCy*06Cd)hrz$P~-%9%8ME@>kdRs*SZffT0|EHDh;SVy(ZeR03zR7l`tw!wrGo05?_a$v#EqadreN?kl@Sd(g!)0fdtO_8A%YQP{@k zW3UTg*3nfyK}U9@q(^kyiSQGj)vHA5TK$gEn_%EO%O*X6K0KbWAQap{cL9~y#pDk^IIoNthpIR3&3TTyiPTO3H}lo- z>Kvx+M*s`@$S;p(hJ6$wJ0tW(U*5OU12~41Mt{H&K(Ax|whQ67bupr8Kc7AmfHmB4 z&sOeJBVTYwE^AXVyN0~Kpr(Q7MsncA0NDQ-0R2fr_GBd zm~aI|w0w#6&c!Q$*Zl7q6;>Vd&nKoxrA2prW^Y(|97c+oZw;Ff7)YJLby(tu4|s&# zR+y)nvB6Vg4e}~mx27NHRF`MKMtU4#*7?3<$(X*zI887*zO|X#yd%-*$KBxUEzxj> zW)8Ho^lc=8mRKzxl;!a zkUVlnVj9a>9W=f^#{(4?$=yC-Bybu4ekyEhdVMXX31zo?v0C&G#*a_-*zWjA-MAOm72L0Ln*DmQ~V)aIO zYf`)AF^+DXS$JcKyw7Qiaf;N@sB3J19}oCpm6HY0_Zrl7@~!k2#*gZTlaFEcRiK=A z{MXY;91Y(;(FyRL{NU+mGN)Y$v@`>LJ}?3QQdM;&a<2OT=)80q96r?0-Wpg~%^B0q z)mp%?$9=25UREPLwdcdji`V~q@gT^v(=L^_5K@5OnP& zfV9*wdF$~ogMOTCn(i&}V-NcDM(=#1e@2<~H#$<4Y<5wqQ6PI6?wAqi?Ge^43t4Hx zY&(BN5I6UPu072Q$X;cM^stM!ewKa4&OAEEW0&z16Va>kcNnskZ-PNuTJuL~m3|Yq z#t&=uBg5VHo>GxA<9pb|^cOiLN6rrDTt^3)Y~7h+3pP4?0y%b-U-k2V*{QE}U&8$R zxO{-f0auLk8y@d*37xA>>2CH?hrXbWnD3+=Jl-mjHixYH`QmhZ`iJU*8Nf^ka3^cP zn4e9%8jl>9<7Y4NzCA@h9hDEcr^#Qi(3X_W@^@@+fCuk28~73nvNR~$=2vwS85+;$ z=-h+S(557bB6#^=z7V}!&Q&xE&q`;9pTztKdrT7Hg-puu0RxBxfP-T7|4j`3?FW?k z;4JsiL1)Z#nMt@SU!d>HR|bf4C9!oox0yfrv0JZ^4cT!hiBGll_4roXAWq{RfF1>_8*4rrWMK|)SbyW+CcVW_AWesOPPU4SNu7x}keNukIB z6$EiBZVOv)VUy+Ldx(R`m-b3mZ;Q=~U%hlO%HRXwYYI&a>_8*Y!awHL!c9V;RLAWY zN_9V@-4#|x86ULND#_m&edm@OFv+G*j~N&N*0D_rK%3pYRN02HNk{511#Zdr=XWLy zN4ySv-U|R2RYg6zN`IVPd<00=;Y~2eR@2JVW3TB?zpiJuQ{tpZhKZF|b2)0J^xQ7~ zeY1Jgl(HlJ+-N{=B-tElGx4{ySl(yYGtA;W@ng118MV2^#DCsOKn@tg#WPd1drKD; zfDMNnZA9ufq;P?9K)Z}q?v;q=zhGC6v30=x{M1z_|mq76?WIiF8U~L4#CR+z8xO32S(QWzxI~E z#xJy7{6Fa1{|{RZAd3Kt+n0*}lLheaoBdyJJ15%|aGZq-nSh{TGHUGAO-`i?9erg& z34fl&C7w!;9~$okRNM$UJ(*@t#4CRHli#5fg8nb&DM*%6;xA=R;3tp%|0^;4(79)+ z<9%gxG#KbK37qHpODhS1W?@FmGc|3qC&sx|&UU{PWZq)WX7Sa)l3sH@)#Epn-|6Yu zlXUxhN%81Bq6sK*w%1oxwAZt|%BOU+f~60PzPRk9AU{VAr0o67D^-&#do4?+KZ}}5 zjjsomYxZIMxLeg`rpXOwbKhSm!O2_wJ0t5w3IWzUeToeG)Z?V4P1Ftox$in=t|0lmZr#+PHgQGX`a9gQ3 z;+Es_=QNk&r~#K~XYXn)ZSmY%V%r+-=ZNY~d4)$OH*_v6krwkuMfN`p&qiX1k<0M! zk+Z<_@u6!86K-Zhjt#0TRPkJ)dRh2lCkz8opI!~Hd3!cz(X@TKux7P=OjxVIEVc~wf;hu1sVg#(YzKbuMYMt|buO5bi zXGVVp6K5Dv$j39g(N|Xxs#|gOVMyM;ZR9lgC{J1t>X8Y;9b}x^G#FcrLqoUBGCpu7 z)udttq)cmYcRGk^3YC7k45A(Kux2{1C8W`gHMDTk`Vvadx4IQtip+~o5bfwS+9TKg ztdxYgQ~TVr-Ny8tx@>+yec#f2f9iS8c!%jSQy&*i4~v&32e{z?#rQ&$|M~fH|KS3| z*mO;m5otFQ>z#{7>5dg|V-h1Nl!bn*k9XHBfoniO*JUGc&+=NKW0&B#oz#h`_#U2J zr8&r7YVf=$TH%&qzIyH*)nErUSz~MfKZcpWDS4D?Qd2 zQ%p!QQw3_@lhX_jPKU(>RUp%Zzm?2=O7VtnRGEvT-pu0^+QZxm-!&e;rPwKAE-Gc+ z@TJU|-^=NIgT0h|Nlx}+fURhJ5>ZX)gbF>p_WWo^SmM~uO>nk(7r-=l zJ=vNp#cd3U9TF1i0}h~u?m+?SL<9NErWR?AX_#sVzUyvEst#vWLn;u%_%R*cfUxLahnq_W zJUQdKM-4y)bl(6wmXGxxkqo1?Hrw#BlWF2!64pBx* zwh?>XpG+K)>vW^u^4L*hpF;>S^&iD}C(Zf8Bo~uu{iuk-)pq4q^6!C$k~4f3d6oIR zEjLNO92V{NM5L>(q>4Lt~9B)XH$>n4(Mk=dDRi-dw zywuK_qoI;zRL@n)9gEh;$x?L3qo0~x&*RsK4-d~|Efsf!)*W}y&rDDIh`if=E#II| z_EP%E}cwJ1NtldE@BcH+ZI8D%ZE_AbMD?GaR6&8>V_Wr zOzV((NdMqV>NTMy_4ClowWLap-O!(?`?JXOY3Z>w)s@Y&?py%@-*?Y5WFXYB5#n>s z##UHrYuWet4X2s5|otiyN;j8D^sMSgB58qlI(iU>f-A&flq>3Je=9^R>oVZrmjFSa&rdF1H z$TnNjgxV~3=ZK%MRYtmr()zx$zT#d_$~vfFCY4WYlPUIZQ_AK03~Gh3#a+O4V@=u& zOi`sy3{7^DZs^l>I^38TI^X~9xF7;v26ClC6huH5qV#s)(crc)|KNQ%(IeJ3mmk5X zxnd-_{;A-m)@Jf>>Ft7Kopw()u;prRd=P?DzXK+i#gs z{Ym*6d~i7lCxeC;YpONmk&&&LpH1B{Z+OXPjb`A1)PFY==w&jXEWV*V7 zpXcr(4!E(@jLe7!`U zc|nf2xb_t{NqoWaTDl!SoiwlPk4!UF5kpCIlF2nX4vNY$U=uw&v;#_{lL1^UE(#je;@S2A4F}!Z>-z~G z8(GTDaq5L3MYdYB@G?+7`-eGMErorL-BYl+7vbw^(+G9$hX27=XX`4s*3!P3(tG*f z)wln29o1l`ojopX8BDcHQh3j#rRx%~xuDCNs+l#e&R0OuG!zx-=A|}eeDBK0sSCI< zoAnpOW&5jIl-S;mpI?z5`q(XMj5>P54;3BhlW1Z6{4T?*;)TJR;T9XU=23H@1jV&` zzI_xWlohbo^c6}YS%%nKx^|m;({%$p6RVD`gzu`D&T^#jD`dAonGV$Ez%-4S(Kq#3 zqv5mC_>X&70S3#Ne0ddy&`d+%EO~K7N1i@570RF4kl!rLi}vyl05-<2xw!eAK*8I| zJ~J+9=r7&Xyw9IC|E!bkWEY3|x|WcqfA0r6<4zV5YDP#*HRp$~gVRdI^TPZd>M}87 zi`Yt|ABsQFZL~SN7i8=RY%(mfg%rM=nqTubf7wT5E4}BYO4#tvt#F+R^kQBV2`@Tp zCIr3*?E-6pE3<9M8Fio1nsHpd*a?8@>(8}F%Sd@pQq9!5maUzFUJO6pb#6jANN&ogZ&J4FwpaS7sy~!U4{c+gqOtZMbHCp zDJJd;yvvDGd3TMyd;xdd=6d4q!2K7SV2L#Cw8&%CHMidCvz-YjGK*NYH%^}=S$>zm zyXC-S#Ih`>*+dFh$lPpvES&=njKOM^g=KCb1&9ZuR`*hz1x)D+ac8bsYNIaWuWyJG zuly$%$_IF?wMr0{E;BW#u8SgsIlF`IOuXv3eUH0J-iN3AE1c8OM}rk@ts*i;8xg*? zMv-GxnBr*B0QC?(;lCkLu+2o}&Mhg}Tr7{t{4wrx!^E;W<$<4-um_N9a2tnGiDu6O ze0XvZ^uCe&-gt)pa5-noNV%PK(+O!X&=klipmeCoRLb+T&iyu+0HpFV$<;n9uJJJF zJ+!@2;WkH9BW1dvPaCl6o}tKSM?p5`$0V)1i==Wt9mEa!C6$5&PyDT6nW_Jaq!G|K z9sR#=O$&;S`A4CDF;{^Tu-h9zsip1svth%OQnCB*-?O2I`%zI$1jUP#s~s5Gl#SsT!x6tG6B;^K7hC z@I4EIA5w*``0>h1r4uh4ZBOBO3Y*T3raXT?>YPYKo?0}ZD|+nF08A2qpjn~vr4Kn7 zWda-hQr#b?r(11~6gtXmBd+t;6M9AF?3;WKU9q|oiQShdCFh%G-G^0qPh-*vn?;D~ zs9Wrl$xypzfBM-jMkPdcF{%VUpwrG!k7Y(j8IZlxM~#;li6GgUjE@v;G(@Xyh94jk zWDw0Ka3+@@H^xd$B#>-XF?`Jv;Z7UCe(*sg;KUu7nCe|ag^PaoF zmZYjc87KMY39SbF8NbQfD;J;4aiLdxB9xIV_h~Rk8UObpbf<8w0be~) z_-l;zfF3QRSCv{vDML(`kelP|)Dlcon#_*^XoS;P9b96pTuYN5cJdv);3>_;`^lDH zC(geAdRS4&C&OB5wE77=K%mP42K~R6m(h4J$DU|DjZpR^k=VeLulEB(bYI< zCuP%bu-YBl6%i^1*^@dP(Iz*&0koooh?H&#>H|>1h(dOetD1+~nUBLxU)ah=Tr1}_ zshQ#FPbQemP{N4`;`Rr2l!zFyB+9N6Z z4GO6TA6fretFY*~scSwcMlbGe-EI4*DZ|$>ZG2tY*A!wi))-MJSNt5IJe7@ojxQW~ zj(8gXTAU_8PfZ&4n)ac^r_I{z@obqjk0uu1j2tepr-!It2Z2vc@yUYDov};+%qQ@B zpZR$6$^OlN=Eb1EO_huQl9;Z};?6O=M=x~zn5S^V|9nF|s6wz`QgBb~?QEwVqN%!X z{9DI;TY+pb(vLD^6t|yT8`je(`YS=)QebCb>SH^YB?^@J1_51F-=f{ zG0_8YWpD)5&JRouR@SX$#t+jJ*gw7DogQ#xNUM<+aD<97*W}3W*MKiYtv639FF2mo z9vBYVB?&tulTQxyYUaD;UN5s7FO9-0WkACFKCb&|augs2g=aS9F&5SB!ERaDCq%Xa zB;Uk4J)+KUm%xy-0r6FKU02Ci9dQ~R zdQ10ino9@0=Q(bz!L~T??4%9>R;QZa5M_Au>P?ly)Y$f1rImV3oFiY;!6(RV(Sh)Y zLE-JhUg;aU-JBfSKO@`j=w61m@l5KQDV-WnNFUF?kY}n2oV3ZefWF3-cQU)hA>gg` zuP41$y5o1g9yWGS8SofZ{0P8AbC)_JSkHYs-q9~Hs8|=2GqaDna0_XB8Eh9tmo2+x zi_IKB19=rOMGSJru3c=r-1zg zKUNy<$_}1e1m@a!p<2z}(vV;Nc=ifzf30CjdsICYK4lto<{^P;+y^R}eT93|zS6qF zN#^EXx;`|Ja=<*g zpB=;djQ;tCD3u=kE}`MW9*vCU7wvzaZ1smT4n zDfVU9oZ}idTfoTykbtwf0!xiZ*@Wi7Up!ZocRchN_PahfU=SXhwEE_EjWV;(j{se$ zeRIJx9XCm?12Zy zd!xSckYw(C&|OF*=Iad^y$%;0-g?UbFIXyOaI&WOby9#C(1c)g56!BxDKf>+-*U-z z#<5^xO%U>kq7Nfi6k3ZT*w?rVVi0?{5`&8dyYIAYK;1O*%yHz9;^`ZX?259 z4Cpue$&?rWV5-V45e7$kAM3J!?~YpFfW19;Yq{u|BxFsm)1oQwl|J379UUU#mU^n_ zAP@I*{9arTdUdNu1o~*u`8AZ7UedcP<+8{q&nH`>R5_Dy1l)9V&r0Hl(f%FFd%E$C z)$L7NxAOjG`Wa%cU;m{QNx^ig<(Vyptw>7bO$_*4Wi#Bt2c-yqMJaXgp@>&!{-6rz z)#G8Lx02MBZ%xtmYN&iUhKu;nx3uZ#g~%5Zx1&OVvaD7c;}IdnwY};oM-@NqfxPY? z$JMXFuQ3f6Y5l8(3rLhO?V#TmRc{7JQmp=ar6A!7F?R6v%Cvv0RWd-BQC(3&6B7{v zhx5>0tkUiLl^-u|`3I}*$*LVY;e*Mg_N*M%Uv-j73TdA`(3{s&9p-hceI4qA5>QQk zHTdMht5MDQ;{}=8?eG7e>c0FR$~O9ch(eL4h!Cc-jD43~gt87}Q1)bBvu0n4qHNjs zoiRknzNS$2UA7R$mM!}-e6FGA`FuZr!uS5k%iQ;U-Pd-``<(N>&N)5VYdl&PNTx|f z{qs;?xSk7%Y^`j8LA-vKv|U?Q;QHdb^JBEr^JbvmrV}N0G@jo)>?kofpi?i%>TGBL zQIscF?(GdBk8KOLjtVGVA{U{^rabwQ1p_j6{+a{qo@UDcZyVigWp-Rg!xD-(C}`SD zNk#g-tV*DCwRjM#bAO3BNl$ifN@~=Zj8z%cTER)l`V$)&es400QphR3ON&UyXR+ zw710jXA&a&Ib5dgDGgAiN9gL^<;>ZFb+30hb7x9$W&E*D<1zf(emgki#91!4o+HY_ zGGMN=z>9c;Lie$LJ;TNnR8Yo5IwTbKwf%0Ax8^}kJ4@ixd{pW3W*bAL>+0C(E8^?N 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 Qz;)%3oa%!j8KZ#z0b7^-r~m)} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc deleted file mode 100644 index 4f9ac26..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.browserslistrc +++ /dev/null @@ -1,16 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig deleted file mode 100644 index 59d9a3a..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore deleted file mode 100644 index 0711527..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# Compiled output -/dist -/tmp -/out-tsc -/bazel-out - -# Node -/node_modules -npm-debug.log -yarn-error.log - -# IDEs and editors -.idea/ -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# Miscellaneous -/.angular/cache -.sass-cache/ -/connect.lock -/coverage -/libpeerconnection.log -testem.log -/typings - -# System files -.DS_Store -Thumbs.db diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json deleted file mode 100644 index 027f33c..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/angular.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "1-sign-in-angular": { - "projectType": "application", - "schematics": {}, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/1-sign-in-angular", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "1-sign-in-angular:build:production" - }, - "development": { - "buildTarget": "1-sign-in-angular:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "1-sign-in-angular:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.css" - ], - "scripts": [] - } - } - } - } - }, - "cli": { - "analytics": false - } -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js deleted file mode 100644 index 039ebc5..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/karma.conf.js +++ /dev/null @@ -1,46 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, './coverage/1-sign-in-angular'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - browsers: ['Chrome'], - customLaunchers: { - ChromeHeadlessCI: { - base: 'ChromeHeadless', - flags: ['--no-sandbox'] - } - }, - restartOnFileChange: true, - singleRun: true - }); -}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json deleted file mode 100644 index 3eddc30..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package-lock.json +++ /dev/null @@ -1,13548 +0,0 @@ -{ - "name": "1-sign-in-angular", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "1-sign-in-angular", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^18.0.2", - "@angular/cdk": "^18.0.2", - "@angular/common": "^18.0.2", - "@angular/compiler": "^18.0.2", - "@angular/core": "^18.0.2", - "@angular/forms": "^18.0.2", - "@angular/material": "^18.0.2", - "@angular/platform-browser": "^18.0.2", - "@angular/platform-browser-dynamic": "^18.0.2", - "@angular/router": "^18.0.2", - "@azure/msal-angular": "^3.0.20", - "@azure/msal-browser": "^3.17.0", - "rxjs": "~7.8.1", - "tslib": "^2.6.3", - "zone.js": "~0.14.7" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^18.0.3", - "@angular/cli": "~18.0.3", - "@angular/compiler-cli": "^18.0.2", - "@types/jasmine": "~5.1.4", - "jasmine-core": "~5.1.2", - "karma": "~6.4.3", - "karma-chrome-launcher": "^3.2.0", - "karma-coverage": "~2.2.1", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.4.5" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1801.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.3.tgz", - "integrity": "sha512-4yba7x315GKim7OuBgv89ZtG50hE3hw64KuRLSGuW+RvwcwLV24VanmdWmFiLC4RKYNSH13E0wZqDNJkrMQepw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.1.3", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.1.3.tgz", - "integrity": "sha512-1avnneitUEfC2A9HX24X6a7Ag8sHkxomVEBsggITFNQoGnZAZHCOBRzm3b9QiqTi1c1eH3p8teW8EAufEjFPKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1801.3", - "@angular-devkit/build-webpack": "0.1801.3", - "@angular-devkit/core": "18.1.3", - "@angular/build": "18.1.3", - "@babel/core": "7.24.7", - "@babel/generator": "7.24.7", - "@babel/helper-annotate-as-pure": "7.24.7", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.24.7", - "@babel/plugin-transform-async-to-generator": "7.24.7", - "@babel/plugin-transform-runtime": "7.24.7", - "@babel/preset-env": "7.24.7", - "@babel/runtime": "7.24.7", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "18.1.3", - "@vitejs/plugin-basic-ssl": "1.1.0", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.19", - "babel-loader": "9.1.3", - "browserslist": "^4.21.5", - "copy-webpack-plugin": "12.0.2", - "critters": "0.0.24", - "css-loader": "7.1.2", - "esbuild-wasm": "0.21.5", - "fast-glob": "3.3.2", - "http-proxy-middleware": "3.0.0", - "https-proxy-agent": "7.0.5", - "istanbul-lib-instrument": "6.0.2", - "jsonc-parser": "3.3.1", - "karma-source-map-support": "1.4.0", - "less": "4.2.0", - "less-loader": "12.2.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.3.1", - "magic-string": "0.30.10", - "mini-css-extract-plugin": "2.9.0", - "mrmime": "2.0.0", - "open": "10.1.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.6.1", - "postcss": "8.4.38", - "postcss-loader": "8.1.1", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.77.6", - "sass-loader": "14.2.1", - "semver": "7.6.2", - "source-map-loader": "5.0.0", - "source-map-support": "0.5.21", - "terser": "5.29.2", - "tree-kill": "1.2.2", - "tslib": "2.6.3", - "undici": "6.19.2", - "vite": "5.3.2", - "watchpack": "2.4.1", - "webpack": "5.92.1", - "webpack-dev-middleware": "7.2.1", - "webpack-dev-server": "5.0.4", - "webpack-merge": "5.10.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.21.5" - }, - "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "@angular/localize": "^18.0.0", - "@angular/platform-server": "^18.0.0", - "@angular/service-worker": "^18.0.0", - "@web/test-runner": "^0.18.0", - "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^18.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.4 <5.6" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@web/test-runner": { - "optional": true - }, - "browser-sync": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1801.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1801.3.tgz", - "integrity": "sha512-JezRR72P4QAc4mnkT60/+kVANCYNKcr2sZyX0/9aBHJsR7lIqgOKz5Dft3FgWHwAJcQFtsZ7OLGVOW3P1LpFkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1801.3", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^5.0.2" - } - }, - "node_modules/@angular-devkit/core": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.3.tgz", - "integrity": "sha512-S0UzNNVLbHPaiSVXHjCd2wX+eERj/YR7jJCc40PHs1gINA7Gtd2q3VDm3bUEWe4P6fP6GNp43qSXmWJFQD0+Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.16.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.7.tgz", - "integrity": "sha512-U0lYPjhOaxdw+0UwVsv5y+wJdZ6DD+0ASiommB7j9kEmrPp53MhSvYNYWvwbIWwJceDa3eNq3fAmQOlVXvFCVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.0.7", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.10", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", - "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/animations": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.1.3.tgz", - "integrity": "sha512-jF4jGHZxV/REnymB11wg5q/DMXewJ0byihmvNQ3OPLHGkWnvE9MdrX44vUzI7RkzqO0suaAg8shxJlkY3OHjeA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "18.1.3" - } - }, - "node_modules/@angular/build": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.1.3.tgz", - "integrity": "sha512-jmTQC7lecJ6c2mJobb5nY2CN6jvdeFFHXN/jif0RkNI8dP60uV1QdMKJtTGbxEtAKXdMgOTReYICVYl6m9Q56Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1801.3", - "@babel/core": "7.24.7", - "@babel/helper-annotate-as-pure": "7.24.7", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.24.7", - "@inquirer/confirm": "3.1.11", - "@vitejs/plugin-basic-ssl": "1.1.0", - "ansi-colors": "4.1.3", - "browserslist": "^4.23.0", - "critters": "0.0.24", - "esbuild": "0.21.5", - "fast-glob": "3.3.2", - "https-proxy-agent": "7.0.5", - "lmdb": "3.0.12", - "magic-string": "0.30.10", - "mrmime": "2.0.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.6.1", - "rollup": "4.18.0", - "sass": "1.77.6", - "semver": "7.6.2", - "undici": "6.19.2", - "vite": "5.3.2", - "watchpack": "2.4.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "@angular/localize": "^18.0.0", - "@angular/platform-server": "^18.0.0", - "@angular/service-worker": "^18.0.0", - "less": "^4.2.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.4 <5.6" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular/cdk": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.3.tgz", - "integrity": "sha512-u14xbuXQz+36nBeHSwRcwRoS64WNhOdK97H47nI1WaIZZaGGvKHR1Wwk2XletDRtIHv2622sJm8h+dbaBNeTGQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^7.1.2" - }, - "peerDependencies": { - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cli": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.0.7.tgz", - "integrity": "sha512-CHnpI6d6MpXFsx3750jN4IX3oeieIMKzUPVZUMvPgDbhGFfChHKdxdJStDjYsH47pORb2pMHULw0RJCAPvtB9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1800.7", - "@angular-devkit/core": "18.0.7", - "@angular-devkit/schematics": "18.0.7", - "@schematics/angular": "18.0.7", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.2", - "inquirer": "9.2.22", - "jsonc-parser": "3.2.1", - "npm-package-arg": "11.0.2", - "npm-pick-manifest": "9.0.1", - "ora": "5.4.1", - "pacote": "18.0.6", - "resolve": "1.22.8", - "semver": "7.6.2", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1800.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.7.tgz", - "integrity": "sha512-ZYIjdngUOjY6G2XJGHtATLr+HhJWdo7Z3ATlzQTGI9D1a02kW3UFlELQBhFIn+1o78FU6W0STZgyfBH8M7wD2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.0.7", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", - "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/cli/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular/cli/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/common": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.1.3.tgz", - "integrity": "sha512-TC71jVph4L+QaXlyJTrW27nbqis4sWwr9hD/RDSNkfY9XCvYDb2MjYjKrpbN03FWiv7lmcKT9zgse1fYENFsKQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "18.1.3", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.1.3.tgz", - "integrity": "sha512-Mrcd+YGsz02GVnVlVbzYp7EJIVoPOIHMvhll1OiylhjQElNVeJCLPIvjVYdylzOUDctXNlchkGf/LbA7BYMbXg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "18.1.3" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.1.3.tgz", - "integrity": "sha512-e9t5v/L1KqPLUQL+WU+d70MBBFcSRuwqbkluZgdDjdW5VelYjzlVzXdrzV6jFElP48T3kQCxJN1dAJkAvKjdOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.24.9", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.2.0", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/compiler": "18.1.3", - "typescript": ">=5.4 <5.6" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", - "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.9", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.9", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.9", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/core": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.1.3.tgz", - "integrity": "sha512-1tFTyGLwio5oYAP2sMVDiOvy5wl/v0a4om7RTCpP2Bjro0ynuYe8FK7ilcmdyPXR1DF7GVdo/0R/eCIQJZ2PwA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.14.0" - } - }, - "node_modules/@angular/forms": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.1.3.tgz", - "integrity": "sha512-4kic/9hpS0HkbTORIkrdox7K40EcVT9VIbBruPoxX7jbfiW5jFaJ/05hLRvRt9RF8Sd9G+g5Uohmkcq/5hmsng==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "18.1.3", - "@angular/core": "18.1.3", - "@angular/platform-browser": "18.1.3", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.1.3.tgz", - "integrity": "sha512-4xsn84orqtJwE9c2kgHeMxP/rOEvs8XrUOcyA89WE025uDXk69lAsm7XsCpwOL9iDjTBFPTOXFIbR+s9jvU39w==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^18.0.0 || ^19.0.0", - "@angular/cdk": "18.1.3", - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/forms": "^18.0.0 || ^19.0.0", - "@angular/platform-browser": "^18.0.0 || ^19.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.3.tgz", - "integrity": "sha512-/k5Xt/WjOk6OlRqb1Wd0ZUQ3NjSbafQyDC9Icy0Mb8qJtiXZjA4VCMkZIiQD7cBxO0F/BsAiYnYNjWrIkCZICA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/animations": "18.1.3", - "@angular/common": "18.1.3", - "@angular/core": "18.1.3" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.1.3.tgz", - "integrity": "sha512-VhYfyPcdKrsLrkd5Lq7W+pqE49DZBpUeCqM/Q+s9rhTSiCCKe9Ikktq8yPZ9iHDpFr203P+T1EMHmILnLvf+gQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "18.1.3", - "@angular/compiler": "18.1.3", - "@angular/core": "18.1.3", - "@angular/platform-browser": "18.1.3" - } - }, - "node_modules/@angular/router": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.1.3.tgz", - "integrity": "sha512-6fXiTgdUnaGGF32Un4+7LttG1N9rziansigvLBzFG//qYU0Ihk49phqDdWxz11iaJ+uK1YVafkjSFvV7z9cgDA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "18.1.3", - "@angular/core": "18.1.3", - "@angular/platform-browser": "18.1.3", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@azure/msal-angular": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@azure/msal-angular/-/msal-angular-3.0.23.tgz", - "integrity": "sha512-RTJSDCVFNVs7SNQC9wlKE8xoYzPiNoCatTlCI8m3pOd1AtWdDAwj2LI6NkrK5zZ/GCHgFUVSc3GO2pTQS5I+JA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@azure/msal-browser": "^3.20.0", - "rxjs": "^7.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.20.0.tgz", - "integrity": "sha512-ErsxbfCGIwdqD8jipqdxpfAGiUEQS7MWUe39Rjhl0ZVPsb1JEe9bZCe2+0g23HDH6DGyCAtnTNN9scPtievrMQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "14.14.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "14.14.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.0.tgz", - "integrity": "sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", - "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.24.7", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@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, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@inquirer/confirm": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz", - "integrity": "sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^8.2.4", - "@inquirer/type": "^1.3.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.4.tgz", - "integrity": "sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.3", - "@inquirer/type": "^1.3.3", - "@types/mute-stream": "^0.0.4", - "@types/node": "^20.14.9", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-spinners": "^2.9.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "picocolors": "^1.0.1", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", - "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/type": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", - "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", - "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", - "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.12.tgz", - "integrity": "sha512-vgTwzNUD3Hy4aqtGhX2+nV/usI0mwy3hDRuTjs8VcK0BLiMVEpNQXgzwlWEgPmA8AAPloUgyOs2nK5clJF5oIg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.12.tgz", - "integrity": "sha512-qOt0hAhj2ZLY6aEWu85rzt5zcyCAQITMhCMEPNlo1tuYekpVAdkQNiwXxEkCjBYvwTskvXuwXOOUpjuSc+aJnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.12.tgz", - "integrity": "sha512-Ggd/UXpE+alMncbELCXA3OKpDj9bDBR3qVO7WRTxstloDglRAHfZmUJgTkeaNKjFO1JHqS7AKy0jba9XebZB1w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.12.tgz", - "integrity": "sha512-Qy4cFXFe9h1wAWMsojex8x1ifvw2kqiZv686YiRTdQEzAfc3vJASHFcD/QejHUCx7YHMYdnUoCS45rG2AiGDTQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.12.tgz", - "integrity": "sha512-c+noT9IofktxktFllKHFmci8ka2SYGSLN17pj/KSl1hg7mmfAiGp4xxFxEwMLTb+SX95vP1DFiR++1I3WLVxvA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.12.tgz", - "integrity": "sha512-CO3MFV8gUx16NU/CyyuumAKblESwvoGVA2XhQKZ976OTOxaTbb8F8D3f0iiZ4MYqsN74jIrFuCmXpPnpjbhfOQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@ngtools/webpack": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.3.tgz", - "integrity": "sha512-VmqOO8CcXKL06anNYlL0OkrqIuBNZQu5n0YVP4z8oneJhDBqwK2++dK0WpcNyIFcg3HsQ7w3BuqUWJ4iPiWxEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "typescript": ">=5.4 <5.6", - "webpack": "^5.54.0" - } - }, - "node_modules/@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, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@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, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@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, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@schematics/angular": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.0.7.tgz", - "integrity": "sha512-46jcRDnMYfnwN5CAXimbptbrBdLrNhG3NFGNT1B2O9DzmlXwLclK/z7lz/v70RcBNWMnOcnsYMFB4IbLhN/Fog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.0.7", - "@angular-devkit/schematics": "18.0.7", - "jsonc-parser": "3.2.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", - "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@schematics/angular/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@schematics/angular/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", - "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.14.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", - "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@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, - "license": "BSD-3-Clause" - }, - "node_modules/@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, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001650", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001650.tgz", - "integrity": "sha512-fgEc7hP/LB7iicdXHUI9VsBsMZmUmlVJeQP2qqQW+3lkqVhbmjEU8zp+h5stWeilX+G7uXuIUIIlWlDw9jdt8g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/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, - "license": "MIT" - }, - "node_modules/cliui/node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", - "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.1", - "globby": "^14.0.0", - "normalize-path": "^3.0.0", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", - "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/critters": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", - "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "postcss-media-query-parser": "^0.2.3" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT" - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true, - "license": "MIT" - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz", - "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==", - "dev": true, - "license": "ISC" - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", - "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.21.5.tgz", - "integrity": "sha512-L/FlOPMMFtw+6qPAbuPvJXdrOYOp9yx/PEwSrIZW0qghY4vgV003evdYDwqQ/9ENMQI0B6RMod9xT4FHtto6OQ==", - "dev": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/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, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/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, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/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, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/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, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/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, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/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, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", - "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.10", - "debug": "^4.3.4", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.18" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "9.2.22", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.22.tgz", - "integrity": "sha512-SqLLa/Oe5rZUagTR9z+Zd6izyatHglbmbvVofo1KzuVB54YHleWzeHNLoR7FOICGOeQSqeLh1cordb3MzhGcEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.2", - "@ljharb/through": "^2.3.13", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", - "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/karma": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", - "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.7.2", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", - "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", - "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-coverage/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", - "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0 || ^5.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-jasmine/node_modules/jasmine-core": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", - "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/karma/node_modules/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, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT" - }, - "node_modules/karma/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/karma/node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/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, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/launch-editor": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", - "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", - "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/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, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lmdb": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.12.tgz", - "integrity": "sha512-JnoEulTgveoC64vlYJ9sufGLuNkk6TcxSYpKxSC9aM42I61jIv3pQH0fgb6qW7HV0+FNqA3g1WCQQYfhfawGoQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "msgpackr": "^1.10.2", - "node-addon-api": "^6.1.0", - "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.4.1", - "weak-lru-cache": "^1.2.2" - }, - "bin": { - "download-lmdb-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.0.12", - "@lmdb/lmdb-darwin-x64": "3.0.12", - "@lmdb/lmdb-linux-arm": "3.0.12", - "@lmdb/lmdb-linux-arm64": "3.0.12", - "@lmdb/lmdb-linux-x64": "3.0.12", - "@lmdb/lmdb-win32-x64": "3.0.12" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", - "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", - "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" - } - }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", - "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" - } - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/nice-napi/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", - "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", - "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.1" - }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", - "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", - "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/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, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT" - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ordered-binary": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", - "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", - "dev": true, - "license": "MIT" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", - "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/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, - "license": "MIT" - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", - "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", - "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true, - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.5.2", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", - "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "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, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "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, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/terser": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", - "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/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, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=10.18" - }, - "peerDependencies": { - "tslib": "^2" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-dump": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", - "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.38", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", - "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/undici": { - "version": "6.19.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.2.tgz", - "integrity": "sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz", - "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "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.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", - "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", - "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.4.0", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "rimraf": "^5.0.5", - "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.1.0", - "ws": "^8.16.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/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, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/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, - "license": "MIT" - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/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, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/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, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/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, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/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, - "license": "MIT" - }, - "node_modules/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, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", - "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", - "license": "MIT" - } - } -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json deleted file mode 100644 index 8f74dd6..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "1-sign-in-angular", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test --watch=false --no-progress --browsers=ChromeHeadlessCI", - "e2e": "ng e2e" - }, - "private": true, - "dependencies": { - "@angular/animations": "^18.0.2", - "@angular/cdk": "^18.0.2", - "@angular/common": "^18.0.2", - "@angular/compiler": "^18.0.2", - "@angular/core": "^18.0.2", - "@angular/forms": "^18.0.2", - "@angular/material": "^18.0.2", - "@angular/platform-browser": "^18.0.2", - "@angular/platform-browser-dynamic": "^18.0.2", - "@angular/router": "^18.0.2", - "@azure/msal-angular": "^3.0.20", - "@azure/msal-browser": "^3.17.0", - "rxjs": "~7.8.1", - "tslib": "^2.6.3", - "zone.js": "~0.14.7" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^18.0.3", - "@angular/cli": "~18.0.3", - "@angular/compiler-cli": "^18.0.2", - "@types/jasmine": "~5.1.4", - "jasmine-core": "~5.1.2", - "karma": "~6.4.3", - "karma-chrome-launcher": "^3.2.0", - "karma-coverage": "~2.2.1", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.4.5" - } -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts deleted file mode 100644 index dcd054b..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app-routing.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { BrowserUtils } from '@azure/msal-browser'; -import { MsalGuard } from '@azure/msal-angular'; - -import { HomeComponent } from './home/home.component'; -import { GuardedComponent } from './guarded/guarded.component'; - -/** - * MSAL Angular can protect routes in your application - * using MsalGuard. For more info, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/initialization.md#secure-the-routes-in-your-application - */ -const routes: Routes = [ - { - path: 'guarded', - component: GuardedComponent, - canActivate: [ - MsalGuard - ] - }, - { - path: '', - component: HomeComponent, - }, -]; - -@NgModule({ - imports: [ - RouterModule.forRoot(routes, { - // Don't perform initial navigation in iframes or popups - initialNavigation: - !BrowserUtils.isInIframe() && !BrowserUtils.isInPopup() - ? 'enabledNonBlocking' - : 'disabled', // Set to enabledBlocking to use Angular Universal - }), - ], - exports: [RouterModule], -}) -export class AppRoutingModule { } diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css deleted file mode 100644 index ecdc1e2..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.css +++ /dev/null @@ -1,22 +0,0 @@ -.toolbar-spacer { - flex: 1 1 auto; -} - -a.title { - color: white; -} - -footer { - position: fixed; - left: 0; - bottom: 0; - width: 100%; - color: white; - text-align: center; -} - -.footer-text { - font-size: small; - text-align: center; - flex: 1 1 auto; -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html deleted file mode 100644 index 535543e..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.html +++ /dev/null @@ -1,19 +0,0 @@ - - {{ title }} -
- Guarded Component - - -
-
- - -
- diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts deleted file mode 100644 index 6322cd5..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.component.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; -import { - MsalService, - MsalBroadcastService, - MSAL_GUARD_CONFIG, - MsalGuardConfiguration, -} from '@azure/msal-angular'; -import { - AuthenticationResult, - InteractionStatus, - InteractionType, - PopupRequest, - RedirectRequest, - EventMessage, - EventType -} from '@azure/msal-browser'; -import { Subject } from 'rxjs'; -import { filter, takeUntil } from 'rxjs/operators'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'], -}) -export class AppComponent implements OnInit, OnDestroy { - title = 'Microsoft identity platform'; - loginDisplay = false; - isIframe = false; - - private readonly _destroying$ = new Subject(); - - constructor( - @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, - private authService: MsalService, - private msalBroadcastService: MsalBroadcastService, - ) { } - - ngOnInit(): void { - this.isIframe = window !== window.parent && !window.opener; - this.setLoginDisplay(); - this.authService.instance.enableAccountStorageEvents(); // Optional - This will enable ACCOUNT_ADDED and ACCOUNT_REMOVED events emitted when a user logs in or out of another tab or window - - /** - * You can subscribe to MSAL events as shown below. For more info, - * visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/events.md - */ - this.msalBroadcastService.inProgress$ - .pipe( - filter( - (status: InteractionStatus) => status === InteractionStatus.None - ), - takeUntil(this._destroying$) - ) - .subscribe(() => { - this.setLoginDisplay(); - this.checkAndSetActiveAccount(); - }); - - this.msalBroadcastService.msalSubject$ - .pipe( - filter( - (msg: EventMessage) => msg.eventType === EventType.LOGOUT_SUCCESS - ), - takeUntil(this._destroying$) - ) - .subscribe((result: EventMessage) => { - this.setLoginDisplay(); - this.checkAndSetActiveAccount(); - }); - - - this.msalBroadcastService.msalSubject$ - .pipe( - filter( - (msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS - ), - takeUntil(this._destroying$) - ) - .subscribe((result: EventMessage) => { - const payload = result.payload as AuthenticationResult; - this.authService.instance.setActiveAccount(payload.account); - }); - } - - setLoginDisplay() { - this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; - } - - checkAndSetActiveAccount() { - /** - * If no active account set but there are accounts signed in, sets first account to active account - * To use active account set here, subscribe to inProgress$ first in your component - * Note: Basic usage demonstrated. Your app may require more complicated account selection logic - */ - let activeAccount = this.authService.instance.getActiveAccount(); - - if (!activeAccount && this.authService.instance.getAllAccounts().length > 0) { - let accounts = this.authService.instance.getAllAccounts(); - // add your code for handling multiple accounts here - this.authService.instance.setActiveAccount(accounts[0]); - } - } - - login() { - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - if (this.msalGuardConfig.authRequest) { - this.authService.loginPopup({ - ...this.msalGuardConfig.authRequest, - } as PopupRequest) - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } else { - this.authService.loginPopup() - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } - } else { - if (this.msalGuardConfig.authRequest) { - this.authService.loginRedirect({ - ...this.msalGuardConfig.authRequest, - } as RedirectRequest); - } else { - this.authService.loginRedirect(); - } - } - } - - logout() { - - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - this.authService.logoutPopup({ - account: this.authService.instance.getActiveAccount(), - }); - } else { - this.authService.logoutRedirect({ - account: this.authService.instance.getActiveAccount(), - }); - } - } - - // unsubscribe to events when component is destroyed - ngOnDestroy(): void { - this._destroying$.next(undefined); - this._destroying$.complete(); - } -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts deleted file mode 100644 index 799ca2e..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/app.module.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; - -import { MatToolbarModule } from "@angular/material/toolbar"; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { MatTableModule } from '@angular/material/table'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatDialogModule } from '@angular/material/dialog'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { MatIconModule } from '@angular/material/icon'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { HomeComponent } from './home/home.component'; -import { GuardedComponent } from './guarded/guarded.component'; - -import { - IPublicClientApplication, - PublicClientApplication, - InteractionType, -} from '@azure/msal-browser'; - -import { - MSAL_INSTANCE, - MsalGuardConfiguration, - MSAL_GUARD_CONFIG, - MsalService, - MsalBroadcastService, - MsalGuard, - MsalRedirectComponent, - MsalInterceptor, - MsalModule, -} from '@azure/msal-angular'; - -import { msalConfig, loginRequest } from './auth-config'; - -/** - * Here we pass the configuration parameters to create an MSAL instance. - * For more info, visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md - */ -export function MSALInstanceFactory(): IPublicClientApplication { - return new PublicClientApplication(msalConfig); -} - -/** - * Set your default interaction type for MSALGuard here. If you have any - * additional scopes you want the user to consent upon login, add them here as well. - */ -export function MsalGuardConfigurationFactory(): MsalGuardConfiguration { - return { - interactionType: InteractionType.Redirect, - authRequest: loginRequest - }; -} - -@NgModule({ - declarations: [ - AppComponent, - HomeComponent, - GuardedComponent, - ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - AppRoutingModule, - MatToolbarModule, - MatButtonModule, - MatCardModule, - MatTableModule, - MatMenuModule, - HttpClientModule, - BrowserAnimationsModule, - MatDialogModule, - MatIconModule, - MsalModule, - ], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: MsalInterceptor, - multi: true, - }, - { - provide: MSAL_INSTANCE, - useFactory: MSALInstanceFactory, - }, - { - provide: MSAL_GUARD_CONFIG, - useFactory: MsalGuardConfigurationFactory, - }, - MsalService, - MsalBroadcastService, - MsalGuard, - ], - bootstrap: [AppComponent, MsalRedirectComponent], -}) -export class AppModule { } diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts deleted file mode 100644 index 33d5ebc..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/auth-config.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * This file contains authentication parameters. Contents of this file - * is roughly the same across other MSAL.js libraries. These parameters - * are used to initialize Angular and MSAL Angular configurations in - * in app.module.ts file. - */ - -import { - LogLevel, - Configuration, - BrowserCacheLocation, -} from '@azure/msal-browser'; - -/** - * Configuration object to be passed to MSAL instance on creation. - * For a full list of MSAL.js configuration parameters, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md - */ -export const msalConfig: Configuration = { - auth: { - clientId: 'd40f3188-3369-4f79-94b9-f1504a0e4c5b', // This is the ONLY mandatory field that you need to supply. - authority: 'https://justrebldemo.ciamlogin.com/', // Replace the placeholder with your tenant subdomain - redirectUri: '/', // Points to window.location.origin by default. You must register this URI on Microsoft Entra admin center/App Registration. - postLogoutRedirectUri: '/', // Points to window.location.origin by default. - }, - cache: { - cacheLocation: BrowserCacheLocation.LocalStorage, // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO between tabs. - }, - system: { - loggerOptions: { - loggerCallback(logLevel: LogLevel, message: string) { - console.log(message); - }, - logLevel: LogLevel.Verbose, - piiLoggingEnabled: false, - }, - }, -}; - -/** - * Scopes you add here will be prompted for user consent during sign-in. - * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. - * For more information about OIDC scopes, visit: - * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes - */ -export const loginRequest = { - scopes: [], -}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts deleted file mode 100644 index 3d1c2fd..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/claim-utils.ts +++ /dev/null @@ -1,194 +0,0 @@ -/** - * Populate claims table with appropriate description - * @param {Record} claims ID token claims - * @returns claimsTable - */ -export const createClaimsTable = (claims: Record): any[] => { - const claimsTable: any[] = []; - - Object.keys(claims).map((key) => { - switch (key) { - case 'aud': - populateClaim( - key, - claims[key], - "Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Microsoft Entra admin center.", - claimsTable - ); - break; - case 'iss': - populateClaim( - key, - claims[key], - 'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the external tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0.', - claimsTable - ); - break; - case 'iat': - populateClaim( - key, - changeDateFormat(+claims[key]), - '"Issued At" indicates the timestamp (UNIX timestamp) when the authentication for this user occurred.', - claimsTable - ); - break; - case 'nbf': - populateClaim( - key, - changeDateFormat(+claims[key]), - 'The nbf (not before) claim dictates the time (as UNIX timestamp) before which the JWT must not be accepted for processing.', - claimsTable - ); - break; - case 'exp': - populateClaim( - key, - changeDateFormat(+claims[key]), - "The exp (expiration time) claim dictates the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.", - claimsTable - ); - break; - case 'name': - populateClaim( - key, - claims[key], - "The name claim provides a human-readable value that identifies the subject of the token. The value isn't guaranteed to be unique, it can be changed, and it's designed to be used only for display purposes. The 'profile' scope is required to receive this claim.", - claimsTable - ); - break; - case 'preferred_username': - populateClaim( - key, - claims[key], - 'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.', - claimsTable - ); - break; - case 'nonce': - populateClaim( - key, - claims[key], - 'The nonce matches the parameter included in the original /authorize request to the IDP.', - claimsTable - ); - break; - case 'oid': - populateClaim( - key, - claims[key], - 'The oid (user object id) is the only claim that should be used to uniquely identify a user in an external tenant.', - claimsTable - ); - break; - case 'tid': - populateClaim( - key, - claims[key], - 'The id of the tenant where this application resides. You can use this claim to ensure that only users from the current external tenant can access this app.', - claimsTable - ); - break; - case 'upn': - populateClaim( - key, - claims[key], - 'upn (user principal name) might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.', - claimsTable - ); - break; - case 'email': - populateClaim( - key, - claims[key], - 'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.', - claimsTable - ); - break; - case 'acct': - populateClaim( - key, - claims[key], - 'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).', - claimsTable - ); - break; - case 'sid': - populateClaim( - key, - claims[key], - 'Session ID, used for per-session user sign-out.', - claimsTable - ); - break; - case 'sub': - populateClaim( - key, - claims[key], - 'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.', - claimsTable - ); - break; - case 'ver': - populateClaim( - key, - claims[key], - 'Version of the token issued by the Microsoft identity platform', - claimsTable - ); - break; - case 'login_hint': - populateClaim( - key, - claims[key], - 'An opaque, reliable login hint claim. This claim is the best value to use for the login_hint OAuth parameter in all flows to get SSO.', - claimsTable - ); - break; - case 'idtyp': - populateClaim( - key, - claims[key], - 'Value is app when the token is an app-only token. This is the most accurate way for an API to determine if a token is an app token or an app+user token', - claimsTable - ); - break; - case 'uti': - case 'rh': - break; - default: - populateClaim(key, claims[key], '', claimsTable); - } - }); - - return claimsTable; -}; - -/** - * Populates claim, description, and value into an claimsObject - * @param {String} claim - * @param {String} value - * @param {String} description - * @param {Array} claimsObject - */ -const populateClaim = ( - claim: string, - value: string, - description: string, - claimsTable: any[] -): void => { - claimsTable.push({ - claim: claim, - value: value, - description: description, - }); -}; - -/** - * Transforms Unix timestamp to date and returns a string value of that date - * @param {number} date Unix timestamp - * @returns - */ -const changeDateFormat = (date: number) => { - let dateObj = new Date(date * 1000); - return `${date} - [${dateObj.toString()}]`; -}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html deleted file mode 100644 index 6a5e109..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.html +++ /dev/null @@ -1 +0,0 @@ -

This component is guarded. You can see this because you're signed-in.

diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts deleted file mode 100644 index 90e9903..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/guarded/guarded.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-guarded', - templateUrl: './guarded.component.html', - styleUrls: ['./guarded.component.css'] -}) -export class GuardedComponent implements OnInit { - - constructor() { } - - ngOnInit(): void { - } - -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css deleted file mode 100644 index 8f48484..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.css +++ /dev/null @@ -1,26 +0,0 @@ -#table-container { - height: '100vh'; - overflow: auto; -} - -table { - margin: 3% auto 1% auto; - width: 70%; -} - -.mat-row { - height: auto; -} - -.mat-cell { - padding: 8px 8px 8px 0; -} - -p { - text-align: center; -} - -.card-section { - margin: 10%; - padding: 5%; -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html deleted file mode 100644 index fe23f91..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.html +++ /dev/null @@ -1,34 +0,0 @@ - - Angular single-page application built with MSAL Angular - Sign-in with Microsoft Entra External ID - This sample demonstrates how to configure MSAL Angular to sign-up, sign-in and sign-out with Microsoft Entra External ID - - -
-

See below the claims in your ID token . For more - information, visit: - - docs.microsoft.com - -

-
-
ApplicationAppIdUrl in the Microsoft Entra admin center
- - - - - - - - - - - - - - - - - -
Claim {{element.claim}} Value {{element.value}} Description {{element.description}}
- diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts deleted file mode 100644 index dcde911..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/home/home.component.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Component, Inject, OnInit } from '@angular/core'; -import { Subject } from 'rxjs'; -import { filter } from 'rxjs/operators'; - -import { MsalBroadcastService, MsalGuardConfiguration, MsalService, MSAL_GUARD_CONFIG } from '@azure/msal-angular'; -import { AuthenticationResult, InteractionStatus, InteractionType } from '@azure/msal-browser'; - -import { createClaimsTable } from '../claim-utils'; - -@Component({ - selector: 'app-home', - templateUrl: './home.component.html', - styleUrls: ['./home.component.css'], -}) -export class HomeComponent implements OnInit { - loginDisplay = false; - dataSource: any = []; - displayedColumns: string[] = ['claim', 'value', 'description']; - - private readonly _destroying$ = new Subject(); - - constructor( - @Inject(MSAL_GUARD_CONFIG) - private msalGuardConfig: MsalGuardConfiguration, - private authService: MsalService, - private msalBroadcastService: MsalBroadcastService - ) { } - - ngOnInit(): void { - - this.msalBroadcastService.inProgress$ - .pipe( - filter((status: InteractionStatus) => status === InteractionStatus.None) - ) - .subscribe(() => { - this.setLoginDisplay(); - this.getClaims( - this.authService.instance.getActiveAccount()?.idTokenClaims - ); - }); - } - - setLoginDisplay() { - this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; - } - - getClaims(claims: any) { - if (claims) { - const claimsTable = createClaimsTable(claims); - this.dataSource = [...claimsTable]; - } - } - - signUp() { - if (this.msalGuardConfig.interactionType === InteractionType.Popup) { - this.authService.loginPopup({ - scopes: [], - prompt: 'create', - }) - .subscribe((response: AuthenticationResult) => { - this.authService.instance.setActiveAccount(response.account); - }); - } else { - this.authService.loginRedirect({ - scopes: [], - prompt: 'create', - }); - } - - } - - // unsubscribe to events when component is destroyed - ngOnDestroy(): void { - this._destroying$.next(undefined); - this._destroying$.complete(); - } -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts deleted file mode 100644 index 281c0a7..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/app/sample.spec.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Router, RouterModule } from '@angular/router'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MSAL_GUARD_CONFIG, MsalGuardConfiguration } from '@azure/msal-angular'; -import { InteractionType } from '@azure/msal-browser'; - -import { msalConfig } from './auth-config'; -import { AppComponent } from './app.component'; -import { AppModule } from './app.module'; - -describe('Sanitize the configuration object', () => { - - it('should define the config object', () => { - expect(msalConfig).toBeDefined(); - expect(msalConfig.auth.clientId).toBeDefined(); - expect(msalConfig.auth.authority).toBeDefined(); - expect(msalConfig.auth.redirectUri).toBeDefined(); - }); - - it('should not contain client id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.clientId)).toBe(false); - }); - - it('should not contain tenant id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(msalConfig.auth.authority!.split(".com/")[1])).toBe(false); - }); -}); - -describe('Ensure that the app starts', () => { - it('should boot the app', () => { - const bootApplication = () => { - const { router, run } = setup(); - - run(() => router.initialNavigation()); - }; - - expect(bootApplication).not.toThrow(); - }); - - it(`should have as title 'Microsoft identity platform'`, async () => { - const { fixture } = setup(); - const app = fixture.debugElement.componentInstance; - expect(app.title).toEqual('Microsoft identity platform'); - }); - - it('should navigate to unguarded route', async () => { - const { router, run } = setup(); - - const canNavigate = await run(() => router.navigateByUrl('/')); - - expect(canNavigate).toBe(true); - }); - - it('should not navigate to guarded component', async () => { - const { router, run } = setup(); - - const canNavigate = await run(() => router.navigateByUrl('/guarded')); - - expect(canNavigate).toBe(false); - }); -}); - -function setup() { - - function MSALGuardConfigFactory(): MsalGuardConfiguration { - return { - interactionType: InteractionType.Redirect, - }; - } - - TestBed.configureTestingModule({ - imports: [ - AppModule, - RouterModule.forRoot([]), - ], - providers: [ - { - provide: MSAL_GUARD_CONFIG, - useFactory: MSALGuardConfigFactory - } - ] - }).compileComponents(); - - let rootFixture: ComponentFixture; - const initializeRootFixture = () => { - if (rootFixture == null) { - rootFixture = TestBed.createComponent(AppComponent); - } - }; - - return { - get router() { - initializeRootFixture(); - - return TestBed.inject(Router); - }, - run(task: () => TResult) { - initializeRootFixture(); - - return rootFixture.ngZone == null - ? task() - : rootFixture.ngZone.run(task); - }, - fixture: TestBed.createComponent(AppComponent) - }; -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts deleted file mode 100644 index 3612073..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.prod.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const environment = { - production: true -}; diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts deleted file mode 100644 index f56ff47..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/environments/environment.ts +++ /dev/null @@ -1,16 +0,0 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -export const environment = { - production: false -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg deleted file mode 100644 index 1284553..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/favicon.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - Icon-identity-221 - - - - - - - - diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html deleted file mode 100644 index 2ca15fa..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Microsoft identity platform - - - - - - - - - - - - diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts deleted file mode 100644 index c7b673c..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/main.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts deleted file mode 100644 index 429bb9e..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/polyfills.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css deleted file mode 100644 index de5d5b9..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; -html, body { height: 100%; } -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts deleted file mode 100644 index 064ebac..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/src/test.ts +++ /dev/null @@ -1,21 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - (id: string): T; - keys(): string[]; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); \ No newline at end of file diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json deleted file mode 100644 index 82d91dc..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json deleted file mode 100644 index dbf360d..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "es2022", - "module": "es2022", - "lib": [ - "es2020", - "dom" - ] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json deleted file mode 100644 index 092345b..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/SPA/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json b/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json deleted file mode 100644 index 4a1ffa9..0000000 --- a/src/WebApp_Example/CIAM-JSAngular-SPA-AuthCode/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "CIAM-JSAngular-SPA-AuthCode", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.gitignore b/src/sssu_sample/.gitignore similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/.gitignore rename to src/sssu_sample/.gitignore diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/extensions.json b/src/sssu_sample/.vscode/extensions.json similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/extensions.json rename to src/sssu_sample/.vscode/extensions.json diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/launch.json b/src/sssu_sample/.vscode/launch.json similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/launch.json rename to src/sssu_sample/.vscode/launch.json diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/settings.json b/src/sssu_sample/.vscode/settings.json similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/settings.json rename to src/sssu_sample/.vscode/settings.json diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/tasks.json b/src/sssu_sample/.vscode/tasks.json similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/.vscode/tasks.json rename to src/sssu_sample/.vscode/tasks.json diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/CODE_OF_CONDUCT.md b/src/sssu_sample/CODE_OF_CONDUCT.md similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/CODE_OF_CONDUCT.md rename to src/sssu_sample/CODE_OF_CONDUCT.md diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/LICENSE b/src/sssu_sample/LICENSE similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/LICENSE rename to src/sssu_sample/LICENSE diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/README.md b/src/sssu_sample/README.md similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/README.md rename to src/sssu_sample/README.md diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/ResponseContent.cs b/src/sssu_sample/ResponseContent.cs similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/ResponseContent.cs rename to src/sssu_sample/ResponseContent.cs diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/SECURITY.md b/src/sssu_sample/SECURITY.md similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/SECURITY.md rename to src/sssu_sample/SECURITY.md diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/SignUpValidation.cs b/src/sssu_sample/SignUpValidation.cs similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/SignUpValidation.cs rename to src/sssu_sample/SignUpValidation.cs diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/csharp.csproj b/src/sssu_sample/csharp.csproj similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/csharp.csproj rename to src/sssu_sample/csharp.csproj diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/host.json b/src/sssu_sample/host.json similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/host.json rename to src/sssu_sample/host.json diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-configuration.png b/src/sssu_sample/media/api-connector-configuration.png similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-configuration.png rename to src/sssu_sample/media/api-connector-configuration.png diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-selected.png b/src/sssu_sample/media/api-connector-selected.png similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/media/api-connector-selected.png rename to src/sssu_sample/media/api-connector-selected.png diff --git a/src/sssu_sample/SSSU_DomainValidation_AzTable-/media/create-function-app-project.png b/src/sssu_sample/media/create-function-app-project.png similarity index 100% rename from src/sssu_sample/SSSU_DomainValidation_AzTable-/media/create-function-app-project.png rename to src/sssu_sample/media/create-function-app-project.png From 9c2795c41d6df767548302b6fc878ac5fc67dfe3 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Thu, 23 Jan 2025 14:37:42 +0000 Subject: [PATCH 05/11] wip : az-func --- src/AzFunc/BlobTrigger/.gitignore | 264 ++++++++++++++++++ .../BlobTrigger/.vscode/extensions.json | 5 + src/AzFunc/BlobTrigger/BlobTrigger.csproj | 31 ++ src/AzFunc/BlobTrigger/EvgblobTrigger.cs | 25 ++ src/AzFunc/BlobTrigger/Program.cs | 13 + .../Properties/launchSettings.json | 9 + src/AzFunc/BlobTrigger/host.json | 12 + 7 files changed, 359 insertions(+) create mode 100644 src/AzFunc/BlobTrigger/.gitignore create mode 100644 src/AzFunc/BlobTrigger/.vscode/extensions.json create mode 100644 src/AzFunc/BlobTrigger/BlobTrigger.csproj create mode 100644 src/AzFunc/BlobTrigger/EvgblobTrigger.cs create mode 100644 src/AzFunc/BlobTrigger/Program.cs create mode 100644 src/AzFunc/BlobTrigger/Properties/launchSettings.json create mode 100644 src/AzFunc/BlobTrigger/host.json diff --git a/src/AzFunc/BlobTrigger/.gitignore b/src/AzFunc/BlobTrigger/.gitignore new file mode 100644 index 0000000..3c3f4e6 --- /dev/null +++ b/src/AzFunc/BlobTrigger/.gitignore @@ -0,0 +1,264 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# Azure Functions localsettings file +local.settings.json + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +#*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc \ No newline at end of file diff --git a/src/AzFunc/BlobTrigger/.vscode/extensions.json b/src/AzFunc/BlobTrigger/.vscode/extensions.json new file mode 100644 index 0000000..dde673d --- /dev/null +++ b/src/AzFunc/BlobTrigger/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "ms-azuretools.vscode-azurefunctions" + ] +} \ No newline at end of file diff --git a/src/AzFunc/BlobTrigger/BlobTrigger.csproj b/src/AzFunc/BlobTrigger/BlobTrigger.csproj new file mode 100644 index 0000000..e99472f --- /dev/null +++ b/src/AzFunc/BlobTrigger/BlobTrigger.csproj @@ -0,0 +1,31 @@ + + + net8.0 + v4 + Exe + enable + enable + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + Never + + + + + + \ No newline at end of file diff --git a/src/AzFunc/BlobTrigger/EvgblobTrigger.cs b/src/AzFunc/BlobTrigger/EvgblobTrigger.cs new file mode 100644 index 0000000..9519a45 --- /dev/null +++ b/src/AzFunc/BlobTrigger/EvgblobTrigger.cs @@ -0,0 +1,25 @@ +using System.IO; +using System.Threading.Tasks; +using Microsoft.Azure.Functions.Worker; +using Microsoft.Extensions.Logging; + +namespace BlobTrigger +{ + public class EvgblobTrigger + { + private readonly ILogger _logger; + + public EvgblobTrigger(ILogger logger) + { + _logger = logger; + } + + [Function(nameof(EvgblobTrigger))] + public async Task Run([BlobTrigger("samples-workitems/{name}", Source = BlobTriggerSource.EventGrid, Connection = "")] Stream stream, string name) + { + using var blobStreamReader = new StreamReader(stream); + var content = await blobStreamReader.ReadToEndAsync(); + _logger.LogInformation($"C# Blob Trigger (using Event Grid) processed blob\n Name: {name} \n Data: {content}"); + } + } +} diff --git a/src/AzFunc/BlobTrigger/Program.cs b/src/AzFunc/BlobTrigger/Program.cs new file mode 100644 index 0000000..80221bb --- /dev/null +++ b/src/AzFunc/BlobTrigger/Program.cs @@ -0,0 +1,13 @@ +using Microsoft.Azure.Functions.Worker.Builder; +using Microsoft.Extensions.Hosting; + +var builder = FunctionsApplication.CreateBuilder(args); + +builder.ConfigureFunctionsWebApplication(); + +// Application Insights isn't enabled by default. See https://aka.ms/AAt8mw4. +// builder.Services +// .AddApplicationInsightsTelemetryWorkerService() +// .ConfigureFunctionsApplicationInsights(); + +builder.Build().Run(); diff --git a/src/AzFunc/BlobTrigger/Properties/launchSettings.json b/src/AzFunc/BlobTrigger/Properties/launchSettings.json new file mode 100644 index 0000000..cb3713f --- /dev/null +++ b/src/AzFunc/BlobTrigger/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "BlobTrigger": { + "commandName": "Project", + "commandLineArgs": "--port 7168", + "launchBrowser": false + } + } +} \ No newline at end of file diff --git a/src/AzFunc/BlobTrigger/host.json b/src/AzFunc/BlobTrigger/host.json new file mode 100644 index 0000000..d4f2d41 --- /dev/null +++ b/src/AzFunc/BlobTrigger/host.json @@ -0,0 +1,12 @@ +{ + "version": "2.0", + "logging": { + "applicationInsights": { + "samplingSettings": { + "isEnabled": true, + "excludedTypes": "Request" + }, + "enableLiveMetricsFilters": true + } + } +} \ No newline at end of file From e918bcdcdd0a6cb8674b25db48f90ebad55b3612 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Fri, 24 Jan 2025 08:46:32 +0000 Subject: [PATCH 06/11] cleaning the user creation scenario --- src/MSAL_Example/Program.cs | 100 ++++++++++++++++++-------- src/MSAL_Example/appsettings.json.tpl | 21 ++++-- 2 files changed, 87 insertions(+), 34 deletions(-) diff --git a/src/MSAL_Example/Program.cs b/src/MSAL_Example/Program.cs index ef979bb..02a885b 100644 --- a/src/MSAL_Example/Program.cs +++ b/src/MSAL_Example/Program.cs @@ -18,12 +18,14 @@ string clientSecret = config.GetValue("MSAL:ClientSecret", String.Empty); string authorityBase = config.GetValue("MSAL:Authority", "https://login.microsoftonline.com/"); Uri authority = new Uri(new Uri(authorityBase), tenantId); // Double new Uri to avoid adding a second trailing slash in case authority already has one. +var issuer = config.GetValue("MSAL:Issuer"); +string userScenario = config.GetValue("MSAL:UserScenario", "internal"); var scopes = new[] { $"https://graph.microsoft.com/.default" }; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(credential, scopes); -// Scenario 1 : Get All the Users +// Get All the Users try { var users = await graphClient.Users.GetAsync(); var usersValue = users.Value; @@ -33,37 +35,79 @@ Console.WriteLine(ex.Message); } -//Scenario 2 : Create a new User -var email = config.GetValue("NewUser:EmailAddress", "JohnDoe@outlook.fr"); -var displayName = config.GetValue("NewUser:DisplayName", "John Doe"); -// If password is not provided, generate a random password +User newUser = null; string? password = string.IsNullOrEmpty(config.GetValue("NewUser:Password")) - ? PasswordGenerator.CreateRandomPassword(12) - : config.GetValue("NewUser:Password"); + ? PasswordGenerator.CreateRandomPassword(12) + : config.GetValue("NewUser:Password"); -var newUser = new User { - AccountEnabled = true, - DisplayName = "Test User", - Mail = email, - Identities = new List - { - new ObjectIdentity - { - SignInType = "emailAddress", - Issuer = "justrebldemo.onmicrosoft.com", - IssuerAssignedId = email +switch(userScenario) +{ + case "internal": + //Scenario 1 : Create a new External User + var email = config.GetValue("NewExternalUser:EmailAddress"); + var extDisplayName = config.GetValue("NewExternalUser:DisplayName"); + // If password is not provided, generate a random password + + newUser = new User { + AccountEnabled = true, + DisplayName = extDisplayName, + Mail = email, + Identities = new List + { + new ObjectIdentity + { + SignInType = "emailAddress", + Issuer = issuer, + IssuerAssignedId = email + } + }, + PasswordProfile = new PasswordProfile + { + Password = password, + ForceChangePasswordNextSignIn = false // Need to be false for localUsers + }, + PasswordPolicies = "DisablePasswordExpiration" //Need to be disabled for locaUsers + }; + break; + + case "external": + // Scenario 2 : Create a new Internal User + var internalUser = config.GetValue("NewInternalUser:UserPrincipalName"); + var intMailNickname = config.GetValue("NewInternalUser:MailNickname"); + var intDisplayName = config.GetValue("NewInternalUser:DisplayName"); + var intUserPrincipalName = config.GetValue("NewInternalUser:UserPrincipalName"); + + //Check mandatory configs are provided + if (string.IsNullOrEmpty(internalUser) || string.IsNullOrEmpty(intMailNickname) || string.IsNullOrEmpty(intDisplayName) || string.IsNullOrEmpty(intUserPrincipalName)) { + Console.WriteLine("Please provide all the mandatory fields for internal user creation"); + return; } - }, - PasswordProfile = new PasswordProfile - { - Password = password, - ForceChangePasswordNextSignIn = false // Need to be false for localUsers - }, - PasswordPolicies = "DisablePasswordExpiration" //Need to be disabled for locaUsers -}; + + newUser = new User { + AccountEnabled = true, + DisplayName = intDisplayName, + MailNickname = intMailNickname, + UserPrincipalName=$"{internalUser}@{issuer}", // needs to be the same domain as the tenant as it will be a member of the tenant, not an external user in the tenant + PasswordProfile = new PasswordProfile + { + Password = password, + ForceChangePasswordNextSignIn = true + } + }; + break; + default: + Console.WriteLine("Invalid User Scenario"); + break; +} + try { - var result = await graphClient.Users.PostAsync(newUser); - Console.WriteLine($"User Successfully created with ID: {result.Id}"); + if (newUser != null) { + var result = await graphClient.Users.PostAsync(newUser); + Console.WriteLine($"User Successfully created with ID: {result.Id}"); + } + else { + Console.WriteLine("No relevant information provided for the user, exiting..."); + } } catch (Exception ex) { Console.WriteLine(ex.Message); diff --git a/src/MSAL_Example/appsettings.json.tpl b/src/MSAL_Example/appsettings.json.tpl index 1758372..c32d43e 100644 --- a/src/MSAL_Example/appsettings.json.tpl +++ b/src/MSAL_Example/appsettings.json.tpl @@ -1,13 +1,22 @@ { "MSAL": { - "Authority": "https://login.microsoftonline.com/", + "TenantId": "", + "Authority": "https://login.microsoftonline.com", "ClientId": "GUID App Client ID", "ClientSecret": "***", - "ClientObjectId": "GUID App Object ID" + "ClientObjectId": "GUID App Object ID", + "Issuer": ".onmicrosoft.com", + "userScenario": "internal" | "external" }, - "NewUser":{ - "EmailAddress": "", - "DisplayName": "", - "Password": "" + "NewExternalUser": { + "EmailAddress": "john.doe@domain.com", + "DisplayName": "John Doe", + "Password": "" #Can be set or left empty for random password generation + }, + "NewInternalUser": { + "DisplayName": "John Doe", + "MailNickname": "johndoe", + "Password": "", #Can be set or left empty for random password generation + "UserPrincipalName": "john.doe" } } \ No newline at end of file From 5cd777d21f626f46c74984f99fb27e0304416349 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Fri, 24 Jan 2025 09:12:39 +0000 Subject: [PATCH 07/11] Refacto : Cleaning the repo --- .vscode/projects.code-workspace | 5 ++++- {src => Resources}/sssu_sample/.gitignore | 0 .../sssu_sample/.vscode/extensions.json | 0 {src => Resources}/sssu_sample/.vscode/launch.json | 0 .../sssu_sample/.vscode/settings.json | 0 {src => Resources}/sssu_sample/.vscode/tasks.json | 0 {src => Resources}/sssu_sample/CODE_OF_CONDUCT.md | 0 {src => Resources}/sssu_sample/LICENSE | 0 {src => Resources}/sssu_sample/README.md | 0 {src => Resources}/sssu_sample/ResponseContent.cs | 0 {src => Resources}/sssu_sample/SECURITY.md | 0 {src => Resources}/sssu_sample/SignUpValidation.cs | 0 {src => Resources}/sssu_sample/csharp.csproj | 0 {src => Resources}/sssu_sample/host.json | 0 .../media/api-connector-configuration.png | Bin .../sssu_sample/media/api-connector-selected.png | Bin .../media/create-function-app-project.png | Bin src/{ => WIP}/AzFunc/BlobTrigger/.gitignore | 0 .../AzFunc/BlobTrigger/.vscode/extensions.json | 0 src/{ => WIP}/AzFunc/BlobTrigger/BlobTrigger.csproj | 0 src/{ => WIP}/AzFunc/BlobTrigger/EvgblobTrigger.cs | 0 src/{ => WIP}/AzFunc/BlobTrigger/Program.cs | 0 .../BlobTrigger/Properties/launchSettings.json | 0 src/{ => WIP}/AzFunc/BlobTrigger/host.json | 0 24 files changed, 4 insertions(+), 1 deletion(-) rename {src => Resources}/sssu_sample/.gitignore (100%) rename {src => Resources}/sssu_sample/.vscode/extensions.json (100%) rename {src => Resources}/sssu_sample/.vscode/launch.json (100%) rename {src => Resources}/sssu_sample/.vscode/settings.json (100%) rename {src => Resources}/sssu_sample/.vscode/tasks.json (100%) rename {src => Resources}/sssu_sample/CODE_OF_CONDUCT.md (100%) rename {src => Resources}/sssu_sample/LICENSE (100%) rename {src => Resources}/sssu_sample/README.md (100%) rename {src => Resources}/sssu_sample/ResponseContent.cs (100%) rename {src => Resources}/sssu_sample/SECURITY.md (100%) rename {src => Resources}/sssu_sample/SignUpValidation.cs (100%) rename {src => Resources}/sssu_sample/csharp.csproj (100%) rename {src => Resources}/sssu_sample/host.json (100%) rename {src => Resources}/sssu_sample/media/api-connector-configuration.png (100%) rename {src => Resources}/sssu_sample/media/api-connector-selected.png (100%) rename {src => Resources}/sssu_sample/media/create-function-app-project.png (100%) rename src/{ => WIP}/AzFunc/BlobTrigger/.gitignore (100%) rename src/{ => WIP}/AzFunc/BlobTrigger/.vscode/extensions.json (100%) rename src/{ => WIP}/AzFunc/BlobTrigger/BlobTrigger.csproj (100%) rename src/{ => WIP}/AzFunc/BlobTrigger/EvgblobTrigger.cs (100%) rename src/{ => WIP}/AzFunc/BlobTrigger/Program.cs (100%) rename src/{ => WIP}/AzFunc/BlobTrigger/Properties/launchSettings.json (100%) rename src/{ => WIP}/AzFunc/BlobTrigger/host.json (100%) diff --git a/.vscode/projects.code-workspace b/.vscode/projects.code-workspace index 711b2db..5194c1a 100644 --- a/.vscode/projects.code-workspace +++ b/.vscode/projects.code-workspace @@ -8,7 +8,10 @@ }, { "path": "../src/SPA_JS_Vanilla" - } + }, + { + "path": "../src/WIP/AzFunc/BlobTrigger" + }, ], "settings": {} } \ No newline at end of file diff --git a/src/sssu_sample/.gitignore b/Resources/sssu_sample/.gitignore similarity index 100% rename from src/sssu_sample/.gitignore rename to Resources/sssu_sample/.gitignore diff --git a/src/sssu_sample/.vscode/extensions.json b/Resources/sssu_sample/.vscode/extensions.json similarity index 100% rename from src/sssu_sample/.vscode/extensions.json rename to Resources/sssu_sample/.vscode/extensions.json diff --git a/src/sssu_sample/.vscode/launch.json b/Resources/sssu_sample/.vscode/launch.json similarity index 100% rename from src/sssu_sample/.vscode/launch.json rename to Resources/sssu_sample/.vscode/launch.json diff --git a/src/sssu_sample/.vscode/settings.json b/Resources/sssu_sample/.vscode/settings.json similarity index 100% rename from src/sssu_sample/.vscode/settings.json rename to Resources/sssu_sample/.vscode/settings.json diff --git a/src/sssu_sample/.vscode/tasks.json b/Resources/sssu_sample/.vscode/tasks.json similarity index 100% rename from src/sssu_sample/.vscode/tasks.json rename to Resources/sssu_sample/.vscode/tasks.json diff --git a/src/sssu_sample/CODE_OF_CONDUCT.md b/Resources/sssu_sample/CODE_OF_CONDUCT.md similarity index 100% rename from src/sssu_sample/CODE_OF_CONDUCT.md rename to Resources/sssu_sample/CODE_OF_CONDUCT.md diff --git a/src/sssu_sample/LICENSE b/Resources/sssu_sample/LICENSE similarity index 100% rename from src/sssu_sample/LICENSE rename to Resources/sssu_sample/LICENSE diff --git a/src/sssu_sample/README.md b/Resources/sssu_sample/README.md similarity index 100% rename from src/sssu_sample/README.md rename to Resources/sssu_sample/README.md diff --git a/src/sssu_sample/ResponseContent.cs b/Resources/sssu_sample/ResponseContent.cs similarity index 100% rename from src/sssu_sample/ResponseContent.cs rename to Resources/sssu_sample/ResponseContent.cs diff --git a/src/sssu_sample/SECURITY.md b/Resources/sssu_sample/SECURITY.md similarity index 100% rename from src/sssu_sample/SECURITY.md rename to Resources/sssu_sample/SECURITY.md diff --git a/src/sssu_sample/SignUpValidation.cs b/Resources/sssu_sample/SignUpValidation.cs similarity index 100% rename from src/sssu_sample/SignUpValidation.cs rename to Resources/sssu_sample/SignUpValidation.cs diff --git a/src/sssu_sample/csharp.csproj b/Resources/sssu_sample/csharp.csproj similarity index 100% rename from src/sssu_sample/csharp.csproj rename to Resources/sssu_sample/csharp.csproj diff --git a/src/sssu_sample/host.json b/Resources/sssu_sample/host.json similarity index 100% rename from src/sssu_sample/host.json rename to Resources/sssu_sample/host.json diff --git a/src/sssu_sample/media/api-connector-configuration.png b/Resources/sssu_sample/media/api-connector-configuration.png similarity index 100% rename from src/sssu_sample/media/api-connector-configuration.png rename to Resources/sssu_sample/media/api-connector-configuration.png diff --git a/src/sssu_sample/media/api-connector-selected.png b/Resources/sssu_sample/media/api-connector-selected.png similarity index 100% rename from src/sssu_sample/media/api-connector-selected.png rename to Resources/sssu_sample/media/api-connector-selected.png diff --git a/src/sssu_sample/media/create-function-app-project.png b/Resources/sssu_sample/media/create-function-app-project.png similarity index 100% rename from src/sssu_sample/media/create-function-app-project.png rename to Resources/sssu_sample/media/create-function-app-project.png diff --git a/src/AzFunc/BlobTrigger/.gitignore b/src/WIP/AzFunc/BlobTrigger/.gitignore similarity index 100% rename from src/AzFunc/BlobTrigger/.gitignore rename to src/WIP/AzFunc/BlobTrigger/.gitignore diff --git a/src/AzFunc/BlobTrigger/.vscode/extensions.json b/src/WIP/AzFunc/BlobTrigger/.vscode/extensions.json similarity index 100% rename from src/AzFunc/BlobTrigger/.vscode/extensions.json rename to src/WIP/AzFunc/BlobTrigger/.vscode/extensions.json diff --git a/src/AzFunc/BlobTrigger/BlobTrigger.csproj b/src/WIP/AzFunc/BlobTrigger/BlobTrigger.csproj similarity index 100% rename from src/AzFunc/BlobTrigger/BlobTrigger.csproj rename to src/WIP/AzFunc/BlobTrigger/BlobTrigger.csproj diff --git a/src/AzFunc/BlobTrigger/EvgblobTrigger.cs b/src/WIP/AzFunc/BlobTrigger/EvgblobTrigger.cs similarity index 100% rename from src/AzFunc/BlobTrigger/EvgblobTrigger.cs rename to src/WIP/AzFunc/BlobTrigger/EvgblobTrigger.cs diff --git a/src/AzFunc/BlobTrigger/Program.cs b/src/WIP/AzFunc/BlobTrigger/Program.cs similarity index 100% rename from src/AzFunc/BlobTrigger/Program.cs rename to src/WIP/AzFunc/BlobTrigger/Program.cs diff --git a/src/AzFunc/BlobTrigger/Properties/launchSettings.json b/src/WIP/AzFunc/BlobTrigger/Properties/launchSettings.json similarity index 100% rename from src/AzFunc/BlobTrigger/Properties/launchSettings.json rename to src/WIP/AzFunc/BlobTrigger/Properties/launchSettings.json diff --git a/src/AzFunc/BlobTrigger/host.json b/src/WIP/AzFunc/BlobTrigger/host.json similarity index 100% rename from src/AzFunc/BlobTrigger/host.json rename to src/WIP/AzFunc/BlobTrigger/host.json From 55b7b1bd3d821002b5825a7aa784d372e12b3214 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Tue, 28 Jan 2025 12:18:39 +0000 Subject: [PATCH 08/11] fixed : nodejs version --- .devcontainer/devcontainer.json | 2 +- .vscode/projects.code-workspace | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c141f2b..de97515 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -20,7 +20,7 @@ "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {}, // Node JS : "ghcr.io/devcontainers/features/node:1": { - "version": "lts", + "version": "20", "nvmVersion": "latest", "installYarn": true } diff --git a/.vscode/projects.code-workspace b/.vscode/projects.code-workspace index 5194c1a..0cc22e2 100644 --- a/.vscode/projects.code-workspace +++ b/.vscode/projects.code-workspace @@ -7,7 +7,8 @@ "path": "../src/MSAL_Example" }, { - "path": "../src/SPA_JS_Vanilla" + "path": "../src/SPA_JS_Vanilla/App", + "name": "SPA_JS_Vanilla" }, { "path": "../src/WIP/AzFunc/BlobTrigger" From 70e7e33efbdceb8a8aa64c1e8567b947a6a9b584 Mon Sep 17 00:00:00 2001 From: Justrebl Date: Tue, 28 Jan 2025 15:34:51 +0000 Subject: [PATCH 09/11] WIP : Doc + Custom Auth --- README.md | 8 + assets/JWT_with_custom_Attributes.png | Bin 0 -> 207961 bytes src/WIP/Custom_Auth_Extensions/.gitignore | 264 ++++++++++++++++++ .../.vscode/extensions.json | 5 + .../Custom_Auth_Extensions.csproj | 31 ++ .../OnAttributeCollectionStart.cs | 24 ++ src/WIP/Custom_Auth_Extensions/Program.cs | 13 + .../Properties/launchSettings.json | 9 + src/WIP/Custom_Auth_Extensions/README.md | 0 src/WIP/Custom_Auth_Extensions/host.json | 12 + 10 files changed, 366 insertions(+) create mode 100644 assets/JWT_with_custom_Attributes.png create mode 100644 src/WIP/Custom_Auth_Extensions/.gitignore create mode 100644 src/WIP/Custom_Auth_Extensions/.vscode/extensions.json create mode 100644 src/WIP/Custom_Auth_Extensions/Custom_Auth_Extensions.csproj create mode 100644 src/WIP/Custom_Auth_Extensions/OnAttributeCollectionStart.cs create mode 100644 src/WIP/Custom_Auth_Extensions/Program.cs create mode 100644 src/WIP/Custom_Auth_Extensions/Properties/launchSettings.json create mode 100644 src/WIP/Custom_Auth_Extensions/README.md create mode 100644 src/WIP/Custom_Auth_Extensions/host.json diff --git a/README.md b/README.md index ccf5208..7bf9ebc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,12 @@ # Serverless Event Driven Architecture Example +# Configure Custom Attributes : + + # Resources : + - [Azure Data Table SDK Reference](https://azuresdkdocs.blob.core.windows.net/$web/dotnet/Azure.Data.Tables/12.4.0/index.html#:~:text=The%20set%20of%20existing%20Azure%20tables%20can%20be,cref%3D%22Pageable%22%3E%20in%20order%20to%20access%20queried%20tables.%20Console.WriteLine%28table.Name%29%3B) +- [Custom Attributes in Token](https://learn.microsoft.com/en-us/entra/external-id/customers/how-to-add-attributes-to-token) +- [Configure Group Claims](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-fed-group-claims) +- [Graph Application Extension Attributes Test](https://mzansibytes.com/2022/01/08/working-with-extension-attributes-using-microsoft-graph/) +- [Custom Claims Article](https://techcommunity.microsoft.com/blog/appsonazureblog/basic-understanding-on-microsoft-entra-custom-claims-provider/4125866) \ No newline at end of file diff --git a/assets/JWT_with_custom_Attributes.png b/assets/JWT_with_custom_Attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..697b216749e139d6002c1518fe18b6a22212eb6f GIT binary patch literal 207961 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�V4d08q z19B%PalTeS5GjQkDX;r;m8iaaLfE}_6ZEll7 zoiSS+S}$Xn-t{Qs?@viT#og+eE!^h}1r|^S%fPqy1^T%T0f=_&lusQ0JYiCC!9lQ2 z9!PnnV4^L1T&$*84v4@Lgs_CjT>zEf#`2TdVAbSMa&Ucs@PS3oZ7gj@n-d=ONNrMM zmmtkq0tle(j$t3^kL>-{5QL4!J7n5j5{?t`7f63KzGUY4pBG2Rlvu_3s=r#7?{+OS zlZ`V{PxejGrolC+CW~dhVN{-7Yby(By*S|FnEwULs7!sr+wp%O!oh7l4HLqa-47z0Pg28?aL`T0K2@A*8}_517h?{;0=y`B3$ z?{i*pZV&RL&Cl*ffWhmOF8%B(DJOj4nhjM|BRKQ_ig}y~rl$ zKs-8VVCwc+DP%%>xxg3!5`thVgDNow*B)UQL98j%Remve;g_hQsCm-O$rG%&+>pq{4$4 zrg}!E1GQotfVEpT4W4QRR5vbG0pp+R9QPb!4;Uwumo2Nr@HY_UzY@B8e&Dpc*gq-v6MXa#&zuE^`ZBqg9QW*a zVTk)>^?Ro=EsI$$dN|;CW?qRBJo2A|6}g)ZAVA}volY~ z^UYOBvxnQtZCseVjbw8}a_1vP3#PJ`^@&dv?N5qsh1{$9AbSundvu|q*p(yCIo(vz zwG(vROCX=FFed!yhLrxifsqBfcR4L^en;&A;7G%@0B{MaI*-(cjX4zIR8DEC?!$;; z*>vzVx}EC|X2kCg2im8ZZ7&yZ5|(7f~E)e@!liYdZHHN8YV z^LRzFzq_@@TnBaL;;<}mzKIUQ6lX>_K4D`%7>f@D;vRLKryhP=P@%eMPmD7IlozhrcZQ7 z9A8;%CN#j~3tQG_wbV@rS5LH+-}`ym+gg7$xFMjOLfqJY@{so)(<@q+0bP5d%@cJ+ zV=e`J=V9zvB`0&nx!)4#1d4Dp;3=8$WGEYxz%kv5W??)b1-SHo$T>&1JWPV>lcbE$SK!g(5C&BY+cYDEMi(1$bX3Ukz_)CF>=Al{h{EsmPT) z3zu)kcfiKJc7$CK`k>OhXkI1O`6LEK{JOxo(LO6u&KZ zWWf!|qz?ZmDfYn!WX=?zkt9R@FKe85mF@jER;CoV+TAw~`Cp4|k&e2|Q}q`7RAj#x zF-QFEut1lP)K;w(Em|3-Jac}1&>DQSFVxb2k8)lP!cL|N9!mGn^j|*MWyU{5yL>_$ z6w;uHCNe+;A3J7-6QWo&A*=p_6aJb7Jm~f|8{Q37LT!)7Y5m&B)~)K@A+F33hJk-e zzx>qmUHkh=jJQv zgSo?GnQQp^e9J{0n+(s!@LcURA$O(qm~y9o$27=hG487lnh z3*Y<{fuAw&K5xno!l=(Gzs`hK*n|Bf^Y3p|S-N%*6VqxHeh|53#K`&+rIw@diU{H) znnUIJs7DLlQtEse=+;NdX}^pciPL;ALUQ+Jo-Byq1lw8Cf7KDT1J0OHu%<#2lTqiX zy`W)bU9>0n>lSlR@XV^MIMGX)3JsPbN?&IF(;KSTk99eQuJo$RwFMpDoKtdAAzC?EsQcGn^Fe2?P#;{DIrE46lplD?8p&ZL?Qzgg{C z_cY=kZ=T5O_rZwkFD+)O*u;?RFCzTNhff7W2AB$?@h8;wwyl>uWi=Xv5h24J1%9~Y zr8(7{3%rj=eLKRr2$OXo)CzPlb^=7R95AKr{xQ6Wqpp^^yCBg(U|tMj!@#u~{I0Au zwa_DEZ()69(Uy=Qz&;M_#3h|A6~}@0Qa}Dp*g+*jzwPYB)vvS{q6loWntPapXS%ny zi2;h+AB9}~m4n%)mD?{ht@yRBubR7^6S1mzu)AVKi*0sjRsn9-416kReZ+%)j3d6O zu*WOU^bp1=ruTey!9hKpAlb!6!u|YPM7#@7U5w<|0Dl49QnoE06g#PX;avle39k)P z)&q71Ygo_sIQA@65y`#}*{*yh23Nrs`Gzja_6Sfb!K&>%IOx)}vSC#H!`|?rQucrG z{H5rL#aDt)P@++Or!tE{k9wDGhE%J1UEX~Y?XA4n=e#iL%BdXsD>D{gG({P79W}ae zIVhAU*@81X-RdL_1U?OpOFL)OXu8`D9K^KY8?acozu%7?-6Yx3Fw|a5+iS7KSow>S zRQC5moK7uvUwdu(k!i$E!WngQAHR3dhsB_oUX10y7ZHa!6w{Q_ht_-#tIc7XE7Agh z-A00|HqNfi-4VVXQ%k)Y(-sqaBW8oal#sl$#+e$*lX{{Pj5jb~JSwUb7@i;XfsGlu z279gmqlHR#5Aoi7_}Z*MCa#V1jba0i1zQ8WvHFZ}*bcqz8;@?A?-==uxpOUVWYy9N ze9pYHIAtZ}ZcXnQoyCBfyghMjz(kZ`%n1B@*U(Kl$>WgwNPab`GW5%(-Ccs=U;y@u zUMP-OeEDYvr0R0;RnPd_$6#Knpe>2!02i>J6DaSfj3bbcG<2ocYSg#|4;{PM` zxMiwdpE}N8($qnZmfop9pn{r5`^tJUkU2!yx@}wfJ#}Ua>e0MhFF{2&w{R( z{tY4hR4jS1M=^hH!&E6)8t2Jv{W&jkUN03$NN#@gW0CAQ#BkUcB6azHFZ3@`Ep_u> zul?r}|6h8N|L~=&MgPO?kY3Z7JDP-tHhg781nhOoPB^%PX{McFcOL8}tic9IMfZh}_p$;( zJ{~DHDSq;7PkS_8$*w<(=uqcrCsu*=uh$rse57DR98{k@U8=9_~)r*fR zQ7f_BHCBp|-J9epKdo!hH$3D$^U(?n4^X)rw?ky~KIORf;V-b^DO|%MSKhnfrhkGu zGg2k?2F~{Q^0}EBSo5x{TDYfwLPeIBx=~($WHI$Ltp59 zYuWT60URq7@D36xL^BOgCPNufjVE)(;6sCY2oRTtx6;n?u&Nt7k$A9YbU=`=^v9|-9a@kCtWLFN_e1CYMpuzE)PSEkW#+c87DTkdmx3daB-oBh+8M7AQKy~rc z?-c*clX$tQX_S_XqtOud@$(AB&>opDXei<}RRzlD;xj{)(;lP6x`)5_)vn7>vs`5#9GxnIVG_Zh1Ll`Yia_W(O zRVZSvO8Tg#IOb>j==qpK2rB~QnNg0n#@HT*6#b&XMCZ)to+ZMFp9OoC9}ED;k=t1U zIiiznmLqMDwWLFVX0Gk%0&A$-dU*Pl#{r6(Vy#yA?Iz80qHVxSqE(fn7!H;hY*ugZ z)VgpuBolc20scyGh&Sp6zh$E~7g$m4LjRT3$l;P|u-@ccG*ZlW?wi6SMmg5HGClA; zUQ7)?K>NQB4fhHKdJGy78o?~?Q&V^eou%8pxBI0JMp)W`%}9q#;$Jx2d7kwPK44EW zmcV9y)QHTR)XP@0m1mJX^?Osmn*)!B(V-q~5PM_47p;VYxvSu>89g;VX)`1*eE
^x{?gJcy#58>k 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

ibW<(ruTb_{RaM3DQ*7h`{d2B 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

QMW8b9c7uIH5xxyVPCMy8m3dAP*9}!gepH7zR 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 + + net8.0 + v4 + Exe + enable + enable + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + Never + + + + + + \ No newline at end of file diff --git a/src/WIP/Custom_Auth_Extensions/OnAttributeCollectionStart.cs b/src/WIP/Custom_Auth_Extensions/OnAttributeCollectionStart.cs new file mode 100644 index 0000000..42ee966 --- /dev/null +++ b/src/WIP/Custom_Auth_Extensions/OnAttributeCollectionStart.cs @@ -0,0 +1,24 @@ +using Microsoft.Azure.Functions.Worker; +using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace Custom_Auth_Extensions +{ + public class OnAttributeCollectionStart + { + private readonly ILogger _logger; + + public OnAttributeCollectionStart(ILogger logger) + { + _logger = logger; + } + + [Function("OnAttributeCollectionStart")] + public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req) + { + _logger.LogInformation("C# HTTP trigger function processed a request."); + return new OkObjectResult("Welcome to Azure Functions!"); + } + } +} diff --git a/src/WIP/Custom_Auth_Extensions/Program.cs b/src/WIP/Custom_Auth_Extensions/Program.cs new file mode 100644 index 0000000..80221bb --- /dev/null +++ b/src/WIP/Custom_Auth_Extensions/Program.cs @@ -0,0 +1,13 @@ +using Microsoft.Azure.Functions.Worker.Builder; +using Microsoft.Extensions.Hosting; + +var builder = FunctionsApplication.CreateBuilder(args); + +builder.ConfigureFunctionsWebApplication(); + +// Application Insights isn't enabled by default. See https://aka.ms/AAt8mw4. +// builder.Services +// .AddApplicationInsightsTelemetryWorkerService() +// .ConfigureFunctionsApplicationInsights(); + +builder.Build().Run(); diff --git a/src/WIP/Custom_Auth_Extensions/Properties/launchSettings.json b/src/WIP/Custom_Auth_Extensions/Properties/launchSettings.json new file mode 100644 index 0000000..3d6101f --- /dev/null +++ b/src/WIP/Custom_Auth_Extensions/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Custom_Auth_Extensions": { + "commandName": "Project", + "commandLineArgs": "--port 7202", + "launchBrowser": false + } + } +} \ No newline at end of file diff --git a/src/WIP/Custom_Auth_Extensions/README.md b/src/WIP/Custom_Auth_Extensions/README.md new file mode 100644 index 0000000..e69de29 diff --git a/src/WIP/Custom_Auth_Extensions/host.json b/src/WIP/Custom_Auth_Extensions/host.json new file mode 100644 index 0000000..d4f2d41 --- /dev/null +++ b/src/WIP/Custom_Auth_Extensions/host.json @@ -0,0 +1,12 @@ +{ + "version": "2.0", + "logging": { + "applicationInsights": { + "samplingSettings": { + "isEnabled": true, + "excludedTypes": "Request" + }, + "enableLiveMetricsFilters": true + } + } +} \ No newline at end of file From 6e1fa8384148ea04455419cf16b21c62d7e2ad84 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 4 Jun 2025 10:41:05 +0200 Subject: [PATCH 10/11] Adding frontend webapp to authenticate via EasyAuth --- .devcontainer/devcontainer.json | 2 +- .vscode/launch.json | 15 - .vscode/projects.code-workspace | 3 + README.md | 7 +- .../.devcontainer/devcontainer.json | 22 ++ src/AuthSample/.github/CODE_OF_CONDUCT.md | 9 + src/AuthSample/.github/ISSUE_TEMPLATE.md | 33 ++ .../.github/PULL_REQUEST_TEMPLATE.md | 45 +++ src/AuthSample/.gitignore | 350 +++++++++++++++++ src/AuthSample/CHANGELOG.md | 13 + src/AuthSample/CONTRIBUTING.md | 76 ++++ src/AuthSample/LICENSE.md | 21 ++ src/AuthSample/README.md | 30 ++ src/AuthSample/backend/.deployment | 2 + src/AuthSample/backend/.gitignore | 350 +++++++++++++++++ src/AuthSample/backend/.vscode/settings.json | 7 + src/AuthSample/backend/package.json | 35 ++ src/AuthSample/backend/run.cjs | 2 + src/AuthSample/backend/src/index.js | 11 + src/AuthSample/backend/src/server.js | 112 ++++++ src/AuthSample/backend/src/sortJson.js | 11 + src/AuthSample/backend/src/with-graph/auth.js | 64 ++++ .../backend/src/with-graph/graph.js | 29 ++ src/AuthSample/backend/web.config | 63 ++++ src/AuthSample/frontend/.azure/config | 7 + src/AuthSample/frontend/.deployment | 2 + src/AuthSample/frontend/.env.sample | 3 + src/AuthSample/frontend/.gitignore | 353 ++++++++++++++++++ src/AuthSample/frontend/.vscode/launch.json | 17 + src/AuthSample/frontend/.vscode/settings.json | 7 + src/AuthSample/frontend/package.json | 35 ++ src/AuthSample/frontend/run.cjs | 2 + src/AuthSample/frontend/src/error.js | 6 + src/AuthSample/frontend/src/index.js | 15 + src/AuthSample/frontend/src/refreshToken.js | 78 ++++ src/AuthSample/frontend/src/remoteProfile.js | 75 ++++ src/AuthSample/frontend/src/server.js | 145 +++++++ src/AuthSample/frontend/src/sortJson.js | 7 + src/AuthSample/frontend/src/views/debug.ejs | 63 ++++ src/AuthSample/frontend/src/views/home.ejs | 38 ++ src/AuthSample/frontend/src/views/profile.ejs | 62 +++ src/AuthSample/frontend/web.config | 63 ++++ src/AuthSample/scripts/access-token.sh | 23 ++ src/AuthSample/scripts/app-creation.sh | 16 + src/Backend/.vscode/launch.json | 28 ++ {.vscode => src/Backend/.vscode}/tasks.json | 4 +- src/Backend/Backend.csproj | 13 + src/Backend/Backend.http | 6 + .../Controllers/WeatherForecastController.cs | 32 ++ src/Backend/Program.cs | 25 ++ src/Backend/Properties/launchSettings.json | 41 ++ src/Backend/WeatherForecast.cs | 12 + src/Backend/appsettings.Development.json | 8 + 53 files changed, 2480 insertions(+), 18 deletions(-) delete mode 100644 .vscode/launch.json create mode 100644 src/AuthSample/.devcontainer/devcontainer.json create mode 100644 src/AuthSample/.github/CODE_OF_CONDUCT.md create mode 100644 src/AuthSample/.github/ISSUE_TEMPLATE.md create mode 100644 src/AuthSample/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/AuthSample/.gitignore create mode 100644 src/AuthSample/CHANGELOG.md create mode 100644 src/AuthSample/CONTRIBUTING.md create mode 100644 src/AuthSample/LICENSE.md create mode 100644 src/AuthSample/README.md create mode 100644 src/AuthSample/backend/.deployment create mode 100644 src/AuthSample/backend/.gitignore create mode 100644 src/AuthSample/backend/.vscode/settings.json create mode 100644 src/AuthSample/backend/package.json create mode 100644 src/AuthSample/backend/run.cjs create mode 100644 src/AuthSample/backend/src/index.js create mode 100644 src/AuthSample/backend/src/server.js create mode 100644 src/AuthSample/backend/src/sortJson.js create mode 100644 src/AuthSample/backend/src/with-graph/auth.js create mode 100644 src/AuthSample/backend/src/with-graph/graph.js create mode 100644 src/AuthSample/backend/web.config create mode 100644 src/AuthSample/frontend/.azure/config create mode 100644 src/AuthSample/frontend/.deployment create mode 100644 src/AuthSample/frontend/.env.sample create mode 100644 src/AuthSample/frontend/.gitignore create mode 100644 src/AuthSample/frontend/.vscode/launch.json create mode 100644 src/AuthSample/frontend/.vscode/settings.json create mode 100644 src/AuthSample/frontend/package.json create mode 100644 src/AuthSample/frontend/run.cjs create mode 100644 src/AuthSample/frontend/src/error.js create mode 100644 src/AuthSample/frontend/src/index.js create mode 100644 src/AuthSample/frontend/src/refreshToken.js create mode 100644 src/AuthSample/frontend/src/remoteProfile.js create mode 100644 src/AuthSample/frontend/src/server.js create mode 100644 src/AuthSample/frontend/src/sortJson.js create mode 100644 src/AuthSample/frontend/src/views/debug.ejs create mode 100644 src/AuthSample/frontend/src/views/home.ejs create mode 100644 src/AuthSample/frontend/src/views/profile.ejs create mode 100644 src/AuthSample/frontend/web.config create mode 100644 src/AuthSample/scripts/access-token.sh create mode 100644 src/AuthSample/scripts/app-creation.sh create mode 100644 src/Backend/.vscode/launch.json rename {.vscode => src/Backend/.vscode}/tasks.json (62%) create mode 100644 src/Backend/Backend.csproj create mode 100644 src/Backend/Backend.http create mode 100644 src/Backend/Controllers/WeatherForecastController.cs create mode 100644 src/Backend/Program.cs create mode 100644 src/Backend/Properties/launchSettings.json create mode 100644 src/Backend/WeatherForecast.cs create mode 100644 src/Backend/appsettings.Development.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index de97515..f50a58f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -33,7 +33,7 @@ ], // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "dotnet restore", + "postCreateCommand": "curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo 'deb https://ngrok-agent.s3.amazonaws.com buster main' | sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update && sudo apt install ngrok", // Configure tool-specific properties. "customizations": { diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 0d009b0..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "configurations": [ - { - "name": ".NET Core Launch (console)", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build", - "program": "bin/Debug/net8.0/Cli.dll", - "args": [], - "cwd": "${workspaceFolder}/src/MSAL_Example", - "stopAtEntry": false, - "console": "internalConsole" - } - ] -} \ No newline at end of file diff --git a/.vscode/projects.code-workspace b/.vscode/projects.code-workspace index 0cc22e2..88d125e 100644 --- a/.vscode/projects.code-workspace +++ b/.vscode/projects.code-workspace @@ -6,6 +6,9 @@ { "path": "../src/MSAL_Example" }, + { + "path": "../src/Backend" + }, { "path": "../src/SPA_JS_Vanilla/App", "name": "SPA_JS_Vanilla" diff --git a/README.md b/README.md index 7bf9ebc..d1823dc 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,12 @@ # Resources : - [Azure Data Table SDK Reference](https://azuresdkdocs.blob.core.windows.net/$web/dotnet/Azure.Data.Tables/12.4.0/index.html#:~:text=The%20set%20of%20existing%20Azure%20tables%20can%20be,cref%3D%22Pageable%22%3E%20in%20order%20to%20access%20queried%20tables.%20Console.WriteLine%28table.Name%29%3B) +- [Define Custom Attributes](https://learn.microsoft.com/en-us/entra/external-id/customers/how-to-define-custom-attributes#create-custom-user-attributes) - [Custom Attributes in Token](https://learn.microsoft.com/en-us/entra/external-id/customers/how-to-add-attributes-to-token) - [Configure Group Claims](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-fed-group-claims) - [Graph Application Extension Attributes Test](https://mzansibytes.com/2022/01/08/working-with-extension-attributes-using-microsoft-graph/) -- [Custom Claims Article](https://techcommunity.microsoft.com/blog/appsonazureblog/basic-understanding-on-microsoft-entra-custom-claims-provider/4125866) \ No newline at end of file +- [Custom Claims Article](https://techcommunity.microsoft.com/blog/appsonazureblog/basic-understanding-on-microsoft-entra-custom-claims-provider/4125866) + +# Disable Sign-up : +- [(Preview) MSGraph Disable Sign-Up process](https://github.com/MathiasMSFT/MyWiki/blob/main/Entra%20External%20ID/Disable-SignUp.md) +- [Custom Authentication Extension Overview](https://learn.microsoft.com/en-us/entra/identity-platform/custom-extension-overview) \ No newline at end of file diff --git a/src/AuthSample/.devcontainer/devcontainer.json b/src/AuthSample/.devcontainer/devcontainer.json new file mode 100644 index 0000000..a46d874 --- /dev/null +++ b/src/AuthSample/.devcontainer/devcontainer.json @@ -0,0 +1,22 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node +{ + "name": "Node.js & TypeScript", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/typescript-node:0-18" + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "yarn install", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/src/AuthSample/.github/CODE_OF_CONDUCT.md b/src/AuthSample/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f9ba8cf --- /dev/null +++ b/src/AuthSample/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,9 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/src/AuthSample/.github/ISSUE_TEMPLATE.md b/src/AuthSample/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..15c7f60 --- /dev/null +++ b/src/AuthSample/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,33 @@ + +> Please provide us with the following information: +> --------------------------------------------------------------- + +### This issue is for a: (mark with an `x`) +``` +- [ ] bug report -> please search issues before submitting +- [ ] feature request +- [ ] documentation issue or request +- [ ] regression (a behavior that used to work and stopped in a new release) +``` + +### Minimal steps to reproduce +> + +### Any log messages given by the failure +> + +### Expected/desired behavior +> + +### OS and Version? +> Windows 7, 8 or 10. Linux (which distribution). macOS (Yosemite? El Capitan? Sierra?) + +### Versions +> + +### Mention any other details that might be useful + +> --------------------------------------------------------------- +> Thanks! We'll be in touch soon. diff --git a/src/AuthSample/.github/PULL_REQUEST_TEMPLATE.md b/src/AuthSample/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ab05e29 --- /dev/null +++ b/src/AuthSample/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,45 @@ +## Purpose + +* ... + +## Does this introduce a breaking change? + +``` +[ ] Yes +[ ] No +``` + +## Pull Request Type +What kind of change does this Pull Request introduce? + + +``` +[ ] Bugfix +[ ] Feature +[ ] Code style update (formatting, local variables) +[ ] Refactoring (no functional changes, no api changes) +[ ] Documentation content changes +[ ] Other... Please describe: +``` + +## How to Test +* Get the code + +``` +git clone [repo-address] +cd [repo-name] +git checkout [branch-name] +npm install +``` + +* Test the code + +``` +``` + +## What to Check +Verify that the following are valid +* ... + +## Other Information + \ No newline at end of file diff --git a/src/AuthSample/.gitignore b/src/AuthSample/.gitignore new file mode 100644 index 0000000..dfcfd56 --- /dev/null +++ b/src/AuthSample/.gitignore @@ -0,0 +1,350 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ diff --git a/src/AuthSample/CHANGELOG.md b/src/AuthSample/CHANGELOG.md new file mode 100644 index 0000000..9824752 --- /dev/null +++ b/src/AuthSample/CHANGELOG.md @@ -0,0 +1,13 @@ +## [project-title] Changelog + + +# x.y.z (yyyy-mm-dd) + +*Features* +* ... + +*Bug Fixes* +* ... + +*Breaking Changes* +* ... diff --git a/src/AuthSample/CONTRIBUTING.md b/src/AuthSample/CONTRIBUTING.md new file mode 100644 index 0000000..a9115cf --- /dev/null +++ b/src/AuthSample/CONTRIBUTING.md @@ -0,0 +1,76 @@ +# Contributing to [project-title] + +This project welcomes contributions and suggestions. Most contributions require you to agree to a +Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us +the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. + +When you submit a pull request, a CLA bot will automatically determine whether you need to provide +a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions +provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or +contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + + - [Code of Conduct](#coc) + - [Issues and Bugs](#issue) + - [Feature Requests](#feature) + - [Submission Guidelines](#submit) + +## Code of Conduct +Help us keep this project open and inclusive. Please read and follow our [Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +## Found an Issue? +If you find a bug in the source code or a mistake in the documentation, you can help us by +[submitting an issue](#submit-issue) to the GitHub Repository. Even better, you can +[submit a Pull Request](#submit-pr) with a fix. + +## Want a Feature? +You can *request* a new feature by [submitting an issue](#submit-issue) to the GitHub +Repository. If you would like to *implement* a new feature, please submit an issue with +a proposal for your work first, to be sure that we can use it. + +* **Small Features** can be crafted and directly [submitted as a Pull Request](#submit-pr). + +## Submission Guidelines + +### Submitting an Issue +Before you submit an issue, search the archive, maybe your question was already answered. + +If your issue appears to be a bug, and hasn't been reported, open a new issue. +Help us to maximize the effort we can spend fixing issues and adding new +features, by not reporting duplicate issues. Providing the following information will increase the +chances of your issue being dealt with quickly: + +* **Overview of the Issue** - if an error is being thrown a non-minified stack trace helps +* **Version** - what version is affected (e.g. 0.1.2) +* **Motivation for or Use Case** - explain what are you trying to do and why the current behavior is a bug for you +* **Browsers and Operating System** - is this a problem with all browsers? +* **Reproduce the Error** - provide a live example or a unambiguous set of steps +* **Related Issues** - has a similar issue been reported before? +* **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be + causing the problem (line of code or commit) + +You can file new issues by providing the above information at the corresponding repository's issues link: https://github.com/[organization-name]/[repository-name]/issues/new]. + +### Submitting a Pull Request (PR) +Before you submit your Pull Request (PR) consider the following guidelines: + +* Search the repository (https://github.com/[organization-name]/[repository-name]/pulls) for an open or closed PR + that relates to your submission. You don't want to duplicate effort. + +* Make your changes in a new git fork: + +* Commit your changes using a descriptive commit message +* Push your fork to GitHub: +* In GitHub, create a pull request +* If we suggest changes then: + * Make the required updates. + * Rebase your fork and force push to your GitHub repository (this will update your Pull Request): + + ```shell + git rebase master -i + git push -f + ``` + +That's it! Thank you for your contribution! diff --git a/src/AuthSample/LICENSE.md b/src/AuthSample/LICENSE.md new file mode 100644 index 0000000..7965606 --- /dev/null +++ b/src/AuthSample/LICENSE.md @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE \ No newline at end of file diff --git a/src/AuthSample/README.md b/src/AuthSample/README.md new file mode 100644 index 0000000..d504bb3 --- /dev/null +++ b/src/AuthSample/README.md @@ -0,0 +1,30 @@ +--- +page_type: sample +name: Authenticate and authorize users end-to-end in Azure App Service with JavaScript +description: This tutorial shows how to secure two App Services (frontend and backend), passing user auth from the frontend app to the backend. +languages: +- javascript +products: +- azure-app-service +--- + +# Authenticate and authorize users end-to-end in Azure App Service + +Azure App Service provides a highly scalable, self-patching web hosting service. In addition, App Service has built-in support for [user authentication and authorization](https://learn.microsoft.com/azure/app-service/overview-authentication-authorization). This tutorial shows how to secure your apps with App Service authentication and authorization. It uses an Express.js with views frontend as an example. App Service authentication and authorization support all language runtimes, and you can learn how to apply it to your preferred language by following the tutorial. + +## Features + +In the tutorial, you learn: + +> [!div class="checklist"] +> * Enable built-in authentication and authorization +> * Secure apps against unauthenticated requests +> * Use Azure Active Directory as the identity provider +> * Access a remote app on behalf of the signed-in user +> * Secure service-to-service calls with token authentication +> * Use access tokens from server code +> * Use access tokens from client (browser) code + +## Read the tutorial + +[Read the tutorial](https://learn.microsoft.com/azure/app-service/tutorial-auth-aad) to understand how to deploy this scenario to App Service. \ No newline at end of file diff --git a/src/AuthSample/backend/.deployment b/src/AuthSample/backend/.deployment new file mode 100644 index 0000000..6278331 --- /dev/null +++ b/src/AuthSample/backend/.deployment @@ -0,0 +1,2 @@ +[config] +SCM_DO_BUILD_DURING_DEPLOYMENT=true \ No newline at end of file diff --git a/src/AuthSample/backend/.gitignore b/src/AuthSample/backend/.gitignore new file mode 100644 index 0000000..dfcfd56 --- /dev/null +++ b/src/AuthSample/backend/.gitignore @@ -0,0 +1,350 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ diff --git a/src/AuthSample/backend/.vscode/settings.json b/src/AuthSample/backend/.vscode/settings.json new file mode 100644 index 0000000..32a2492 --- /dev/null +++ b/src/AuthSample/backend/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "appService.zipIgnorePattern": [ + "node_modules{,/**}", + ".env", + ".vscode{,/**}" + ] +} \ No newline at end of file diff --git a/src/AuthSample/backend/package.json b/src/AuthSample/backend/package.json new file mode 100644 index 0000000..c1c3137 --- /dev/null +++ b/src/AuthSample/backend/package.json @@ -0,0 +1,35 @@ +{ + "name": "backend", + "version": "1.0.0", + "description": "JavaScript server written with Express.js and Microsoft Graph", + "main": "src/index.js", + "type": "module", + "scripts": { + "start": "node src/index.js --unhandled-rejections=warn" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/azure-samples/js-e2e-web-app-easy-auth-app-to-app.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/azure-samples/js-e2e-web-app-easy-auth-app-to-app/issues" + }, + "homepage": "https://github.com/azure-samples/js-e2e-web-app-easy-auth-app-to-app#readme", + "devDependencies": {}, + "dependencies": { + "@azure/msal-node": "^1.12.1", + "@microsoft/microsoft-graph-client": "^3.0.2", + "express": "^4.17.1", + "isomorphic-fetch": "^3.0.0", + "jwt-decode": "^3.1.2" + }, + "prettier": { + "printWidth": 80, + "semi": true, + "singleQuote": true, + "trailingComma": "es5" + } +} diff --git a/src/AuthSample/backend/run.cjs b/src/AuthSample/backend/run.cjs new file mode 100644 index 0000000..7437e84 --- /dev/null +++ b/src/AuthSample/backend/run.cjs @@ -0,0 +1,2 @@ +// For more information on this file, see https://techcommunity.microsoft.com/t5/apps-on-azure-blog/supporting-es6-import-on-windows-app-service-node-js-iisnode/ba-p/3639037 +import("./src/index.js"); \ No newline at end of file diff --git a/src/AuthSample/backend/src/index.js b/src/AuthSample/backend/src/index.js new file mode 100644 index 0000000..a7f8ec9 --- /dev/null +++ b/src/AuthSample/backend/src/index.js @@ -0,0 +1,11 @@ +import { create } from './server.js'; + +// Listening port for App Service should be set to WEB_PORT for Linux container and PORT for Windows native +const port = process.env.WEB_PORT || process.env.PORT || 8080; + +create() +.then(app => { + app.listen(port, () => { + console.log(`backend index.js Server has started on port ${port}!`); + }); +}).catch(err => console.log(`backend index.js ${JSON.stringify(err)}`)); \ No newline at end of file diff --git a/src/AuthSample/backend/src/server.js b/src/AuthSample/backend/src/server.js new file mode 100644 index 0000000..885a387 --- /dev/null +++ b/src/AuthSample/backend/src/server.js @@ -0,0 +1,112 @@ +// +// Express.js app server +import express from 'express'; +import 'isomorphic-fetch'; +import { sortJson, prettyJson } from './sortJson.js'; + + +// Uncomment for the app->app->graph tutorial +import { getGraphProfile } from './with-graph/graph.js'; + +// + +// +export const create = async () => { + // Create express app + const app = express(); + + // Get root + app.get('/debug', async (req, res) => { + + res.send( + prettyJson( + sortJson({ + route: 'debug', + headers: sortJson(req.headers), + env: sortJson(process.env), + }) + ) + ); + }); + + // Get Profile and return to client + app.get('/get-profile', async (req, res) => { + + console.log('/get-profile requested'); + + try { + + const profile = { + "displayName": "John Doe", + + // return true if we have an access token + "withAuthentication": false + } + let profileFromGraph=false; + //let graphProfile={}; + + const bearerToken = req.headers['Authorization'] || req.headers['authorization']; + console.log(`backend server.js bearerToken ${!!bearerToken ? 'found' : 'not found'}`); + + if (bearerToken) { + const accessToken = bearerToken.split(' ')[1]; + + + if (!accessToken || accessToken === 'undefined' || accessToken === 'null' || accessToken.length === 0){ + console.log(`backend server.js accessToken: 'not found'}`); + return res.status(401).json({ error: 'No access token found' }); + } else { + console.log(`backend server.js accessToken: 'found' ${accessToken}}`); + profile.withAuthentication = true; + } + + // TODO: get profile from Graph API + // Uncomment for the app->app->graph tutorial + + // where did the profile come from + //profileFromGraph=true; + + // get the profile from Microsoft Graph + //graphProfile = await getGraphProfile(accessToken); + + // log the profile for debugging + // console.log(`profile: ${JSON.stringify(graphProfile)}`); + } + + const dataToReturn = { + route: '/profile success', + profile: (profileFromGraph) ? { authentication: true, ...graphProfile }: {...profile}, + headers: req.headers, + bearerToken, + env: process.env, + error: null, + } + console.log(`backend server.js profile: ${JSON.stringify(profile)}`) + + return res.status(200).json(dataToReturn); + + } catch (err) { + const dataToReturn = { + error: { + route: '/profile error', + profile: 'error', + server_response: err, + message: err.message, + }, + } + console.log(`backend server.js err message: ${err.message}`) + + // Return 200 so error displays in browser for debugging + // Don't do this in production + return res.status(200).json(dataToReturn); + } + }); + + // instead of 404 - just return home page + app.get('*', (_, res) => { + res.json({ status: 'unknown url request' }); + }); + + return app; +}; +// diff --git a/src/AuthSample/backend/src/sortJson.js b/src/AuthSample/backend/src/sortJson.js new file mode 100644 index 0000000..28f69c2 --- /dev/null +++ b/src/AuthSample/backend/src/sortJson.js @@ -0,0 +1,11 @@ +export const sortJson = (json) => { + if (!json) return {}; + + if (typeof json !== 'object') return {}; + + return Object.entries(json).sort(Intl.Collator().compare).reduce((o, [k, v]) => (o[k] = v, o), {}); +} +export const prettyJson = (json) => { + return JSON.stringify(json, null, 6) .replace(/\n( *)/g, function (match, p1) { + return '
' + ' ' .repeat(p1.length); }) +} \ No newline at end of file diff --git a/src/AuthSample/backend/src/with-graph/auth.js b/src/AuthSample/backend/src/with-graph/auth.js new file mode 100644 index 0000000..c9a1b44 --- /dev/null +++ b/src/AuthSample/backend/src/with-graph/auth.js @@ -0,0 +1,64 @@ +// ./backend/src/auth.js +import MSAL from '@azure/msal-node'; +import 'isomorphic-fetch'; + +// Programmatically get tenant id from env var +// Env var was set by Easy Auth in App Service +// env value should look something like: https://sts.windows.net/YOUR-TENANT-ID-AS-GUID/v2.0 +export function getTenantId() { + + const openIdIssuer = process.env.WEBSITE_AUTH_OPENID_ISSUER; + const backendAppTenantId = openIdIssuer.replace(/https:\/\/sts\.windows\.net\/(.{1,36})\/v2\.0/gm, '$1'); + + return backendAppTenantId; +} +// ./backend/src/auth.js +// Exchange current bearerToken for Graph API token +// Env vars were set by Easy Auth in App Service +export async function getGraphToken(backEndAccessToken) { + + const config = { + // MSAL configuration + auth: { + // the backend's authentication CLIENT ID + clientId: process.env.WEBSITE_AUTH_CLIENT_ID, + // the backend's authentication CLIENT SECRET + clientSecret: process.env.MICROSOFT_PROVIDER_AUTHENTICATION_SECRET, + // OAuth 2.0 authorization endpoint (v2) + // should be: https://login.microsoftonline.com/BACKEND-TENANT-ID + authority: `https://login.microsoftonline.com/${getTenantId()}` + }, + // used for debugging + system: { + loggerOptions: { + loggerCallback(loglevel, message, containsPii) { + console.log(message); + }, + piiLoggingEnabled: true, + logLevel: MSAL.LogLevel.Verbose, + } + } + }; + + const clientCredentialAuthority = new MSAL.ConfidentialClientApplication(config); + + const oboRequest = { + oboAssertion: backEndAccessToken, + // this scope must already exist on the backend authentication app registration + // and visible in resources.azure.com backend app auth config + scopes: ["https://graph.microsoft.com/.default"] + } + + // This example has Easy auth validate token in App service runtime + // from headers that can't be set externally + + // If you aren't using App service/Easy Auth, + // you must validate your access token yourself + // before calling this code + try { + const { accessToken } = await clientCredentialAuthority.acquireTokenOnBehalfOf(oboRequest); + return accessToken; + } catch (error) { + console.log(`getGraphToken:error.type = ${error.type} ${error.message}`); + } +} diff --git a/src/AuthSample/backend/src/with-graph/graph.js b/src/AuthSample/backend/src/with-graph/graph.js new file mode 100644 index 0000000..7dfab0f --- /dev/null +++ b/src/AuthSample/backend/src/with-graph/graph.js @@ -0,0 +1,29 @@ +// ./backend/src/graph.js +import graph from "@microsoft/microsoft-graph-client"; +import { getGraphToken } from "./auth.js"; + +// Create client from token with Graph API scope +export function getAuthenticatedClient(accessToken) { + const client = graph.Client.init({ + authProvider: (done) => { + done(null, accessToken); + } + }); + + return client; +} +export async function getGraphProfile(accessToken) { + // exchange current backend token for token with + // graph api scope + const graphToken = await getGraphToken(accessToken); + + // use graph token to get Graph client + const graphClient = getAuthenticatedClient(graphToken); + + // get profile of user + const profile = await graphClient + .api('/me') + .get(); + + return profile; +} \ No newline at end of file diff --git a/src/AuthSample/backend/web.config b/src/AuthSample/backend/web.config new file mode 100644 index 0000000..c50a8f4 --- /dev/null +++ b/src/AuthSample/backend/web.config @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AuthSample/frontend/.azure/config b/src/AuthSample/frontend/.azure/config new file mode 100644 index 0000000..6042bba --- /dev/null +++ b/src/AuthSample/frontend/.azure/config @@ -0,0 +1,7 @@ +[defaults] +group = rg-forvia-appauth +sku = P0V3 +appserviceplan = appplan-forvia-authsample +location = francecentral +web = app-front-forvia-appauth + diff --git a/src/AuthSample/frontend/.deployment b/src/AuthSample/frontend/.deployment new file mode 100644 index 0000000..6278331 --- /dev/null +++ b/src/AuthSample/frontend/.deployment @@ -0,0 +1,2 @@ +[config] +SCM_DO_BUILD_DURING_DEPLOYMENT=true \ No newline at end of file diff --git a/src/AuthSample/frontend/.env.sample b/src/AuthSample/frontend/.env.sample new file mode 100644 index 0000000..ec5d600 --- /dev/null +++ b/src/AuthSample/frontend/.env.sample @@ -0,0 +1,3 @@ +APPSETTING_WEBSITE_AUTH_ENABLED=false +BACKEND_URL="http://localhost:8080" +WEB_PORT=3000 \ No newline at end of file diff --git a/src/AuthSample/frontend/.gitignore b/src/AuthSample/frontend/.gitignore new file mode 100644 index 0000000..ff517bb --- /dev/null +++ b/src/AuthSample/frontend/.gitignore @@ -0,0 +1,353 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Environment files +.env \ No newline at end of file diff --git a/src/AuthSample/frontend/.vscode/launch.json b/src/AuthSample/frontend/.vscode/launch.json new file mode 100644 index 0000000..d5598fe --- /dev/null +++ b/src/AuthSample/frontend/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\src\\index.js" + } + ] +} \ No newline at end of file diff --git a/src/AuthSample/frontend/.vscode/settings.json b/src/AuthSample/frontend/.vscode/settings.json new file mode 100644 index 0000000..32a2492 --- /dev/null +++ b/src/AuthSample/frontend/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "appService.zipIgnorePattern": [ + "node_modules{,/**}", + ".env", + ".vscode{,/**}" + ] +} \ No newline at end of file diff --git a/src/AuthSample/frontend/package.json b/src/AuthSample/frontend/package.json new file mode 100644 index 0000000..03c2a57 --- /dev/null +++ b/src/AuthSample/frontend/package.json @@ -0,0 +1,35 @@ +{ + "name": "frontend", + "version": "1.0.0", + "description": "JavaScript server written with Express.js and Microsoft Graph", + "main": "src/index.js", + "type": "module", + "scripts": { + "start": "node src/index.js --unhandled-rejections=warn" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/azure-samples/js-e2e-web-app-easy-auth-app-to-app.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/azure-samples/azure-samples/js-e2e-web-app-easy-auth-app-to-app/issues" + }, + "homepage": "https://github.com/azure-samples/js-e2e-web-app-easy-auth-app-to-app#readme", + "devDependencies": {}, + "dependencies": { + "dotenv": "^16.0.3", + "ejs": "^3.1.8", + "express": "^4.17.1", + "isomorphic-fetch": "^3.0.0", + "jwt-decode": "^3.1.2" + }, + "prettier": { + "printWidth": 80, + "semi": true, + "singleQuote": true, + "trailingComma": "es5" + } +} diff --git a/src/AuthSample/frontend/run.cjs b/src/AuthSample/frontend/run.cjs new file mode 100644 index 0000000..7437e84 --- /dev/null +++ b/src/AuthSample/frontend/run.cjs @@ -0,0 +1,2 @@ +// For more information on this file, see https://techcommunity.microsoft.com/t5/apps-on-azure-blog/supporting-es6-import-on-windows-app-service-node-js-iisnode/ba-p/3639037 +import("./src/index.js"); \ No newline at end of file diff --git a/src/AuthSample/frontend/src/error.js b/src/AuthSample/frontend/src/error.js new file mode 100644 index 0000000..82d67ef --- /dev/null +++ b/src/AuthSample/frontend/src/error.js @@ -0,0 +1,6 @@ +export class HTTPResponseError extends Error { + constructor(response, ...args) { + super(`HTTP Error Response: ${response.status} ${response.statusText}`, ...args); + this.response = response; + } +} diff --git a/src/AuthSample/frontend/src/index.js b/src/AuthSample/frontend/src/index.js new file mode 100644 index 0000000..d9140e9 --- /dev/null +++ b/src/AuthSample/frontend/src/index.js @@ -0,0 +1,15 @@ +import * as dotenv from 'dotenv' // see https://github.com/motdotla/dotenv#how-do-i-use-dotenv-with-import +dotenv.config() + + +import { create } from './server.js'; + +// Listening port for App Service should be set to WEB_PORT for Linux container and PORT for Windows native +const port = process.env.WEB_PORT || process.env.PORT || 8080; + +create() + .then(app => { + app.listen(port, () => { + console.log(`frontend index.js Server has started on port ${port}!`); + }); + }).catch(err => console.log(`frontend index.js: ${JSON.stringify(err)}`)); \ No newline at end of file diff --git a/src/AuthSample/frontend/src/refreshToken.js b/src/AuthSample/frontend/src/refreshToken.js new file mode 100644 index 0000000..527405f --- /dev/null +++ b/src/AuthSample/frontend/src/refreshToken.js @@ -0,0 +1,78 @@ +import "isomorphic-fetch"; +import { HTTPResponseError } from './error.js'; + +export const refreshTokenInMiddleware = async (url, accessToken) => { + + try { + // Get refreshed token + if (!url) { + return { + refreshed: false, + status: `!url` + } + }; + + // Get remote profile + const response = await fetch(url, { + cache: "no-store", // no caching -- for demo purposes only + method: 'GET', + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + // // Check response status + if (response.ok) { + return { + refreshed: true, + status: response.status + } + } else { + return { + refreshed: false, + status: response.status, + error: new HTTPResponseError(response) + } + } + } catch (err) { + console.log(`frontend refreshToken.js: ${JSON.stringify(err)}`); + } + +} +export const isTokenExpired = (expiration) => { + + // Get token expired time + const expiredTime = expiration; + const expirationDate = new Date(expiredTime * 1000); + + const currentTime = (+ new Date()); // current time in seconds + const currentTimeDate = new Date(currentTime); + + if (currentTime > (expiredTime * 1000)) { + + return { + expired: true, + expiredTime, + expirationDate, + currentTime, + currentTimeDate, + minutes_remaining: 0, + refreshed: false, + cause: "token expired" + }; + + } else { + const minutes_remaining = Math.round((((expirationDate - currentTimeDate) % 86400000) % 3600000) / 60000); + + return { + expired: false, + expiredTime, + expirationDate, + currentTime, + currentTimeDate, + minutes_remaining, + refreshed: false, + cause: "token NOT expired" + }; + } +} \ No newline at end of file diff --git a/src/AuthSample/frontend/src/remoteProfile.js b/src/AuthSample/frontend/src/remoteProfile.js new file mode 100644 index 0000000..99e1e5f --- /dev/null +++ b/src/AuthSample/frontend/src/remoteProfile.js @@ -0,0 +1,75 @@ +import { HTTPResponseError } from './error.js'; +import { sortJson } from './sortJson.js'; +import "isomorphic-fetch"; + +export const getRemoteProfile = async (remoteUrl, accessToken, authEnabled) => { + + try { + + if (!remoteUrl ) { + return { + error: 'Client: No remote URL' + }; + } + + + if (authEnabled && !accessToken) { + return { + error: 'Client: No access token found' + }; + } + + const config = { + cache: "no-store", // no caching -- for demo purposes only + method: 'GET', + headers: {} + } + + // Add access token as bearer token only if present + if(!!accessToken){ + config.headers.Authorization= `Bearer ${accessToken}` + } + + // Get remote profile + const response = await fetch(remoteUrl, config); + + // Check response status + if (response.ok) { + + // Get api response including profile + const apiResponse = await response.json(); + console.log(`frontend remoteProfile.js getRemoteProfile response json: ${JSON.stringify(apiResponse?.profile)}`); + + // Data for rendered view + return { + error: {}, + profile: sortJson(apiResponse?.profile), + headers: sortJson(apiResponse?.headers), + env: sortJson(apiResponse?.env), + bearerToken: apiResponse?.bearerToken, + }; + } else { + + const textError = await response.text(); + console.log(`frontend remoteProfile.js getRemoteProfile api Fetch error text: ${response?.statusCode} ${textError}`); + + return { + error: { + error: new HTTPResponseError(response), + message: `api response not ok ${response?.statusCode} ${textError}`, + type: "getRemoteProfile - api response", + + } + } + } + } catch (error) { + console.log(`frontend remoteProfile.js getRemoteProfile caught error = ${error?.message}`); + return { + error: { + error: new HTTPResponseError(error), + message: error.message, + type: "getRemoteProfile - catch", + } + } + } +} diff --git a/src/AuthSample/frontend/src/server.js b/src/AuthSample/frontend/src/server.js new file mode 100644 index 0000000..83fb98a --- /dev/null +++ b/src/AuthSample/frontend/src/server.js @@ -0,0 +1,145 @@ +// +// Express.js app server +import express from 'express'; +import { refreshTokenInMiddleware, isTokenExpired } from './refreshToken.js'; +import "isomorphic-fetch"; +import jwt_decode from 'jwt-decode'; +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { sortJson } from './sortJson.js'; +import { getRemoteProfile } from './remoteProfile.js'; +const __dirname = dirname(fileURLToPath(import.meta.url)); +// + +// +// Optional middleware to refresh the token if it is about to expire +// There are otherways to refresh, this was the easiest for this sample project +const refreshToken = async function (req, _, next) { + + // Set default middleware values + req.tokenMiddleware = { + "token": "", + "decoded": "" + }; + + // Get token from injected headers + req.tokenMiddleware.token = req.headers['x-ms-token-aad-access-token']; + + if (!req.tokenMiddleware.token) { + return next(); + } + + // Decode token + req.tokenMiddleware.decoded = jwt_decode(req.tokenMiddleware.token); + + // Check if token is expired + req.tokenMiddleware.isExpired = isTokenExpired(req.tokenMiddleware.decoded.exp); + + // If token is expired, refresh it + if (req.tokenMiddleware.isExpired.expired) { + + const refreshUrl = `https://${req.headers.host}/.auth/refresh`; + req.tokenMiddleware.refreshedTokenResult = await refreshTokenInMiddleware(refreshUrl, req.tokenMiddleware.token); + } + return next(); +} +// + +// +export const create = async () => { + + // Create express app + const app = express(); + + // Refresh token middleware + app.use(refreshToken) + + // set the view engine to ejs + app.set('view engine', 'ejs'); + + // Home page + app.get('/', async (_, res) => { + res.render(`${__dirname}/views/home`); + }); + + // Access token from injected header + app.get('/debug', async (req, res) => { + + try { + + // Data for rendered view + const dataForView = { + error: undefined, + accessToken: req.headers['x-ms-token-aad-access-token'], + scope: req.tokenMiddleware?.decoded?.scp, + user: req.tokenMiddleware?.decoded?.name, + tokenMiddleware: sortJson(req.tokenMiddleware), + headers: sortJson(req.headers), + env: sortJson(process.env) + }; + + // Success - View + res.render(`${__dirname}/views/debug`, dataForView) + + } catch (error) { + + // Failure - View + res.render(`${__dirname}/views/debug`, { error }) + } + }); + + // Get remote profile + // use access token as bearer token to API server + app.get('/get-profile', async (req, res) => { + + try { + + // Get remote URL from environment variable + // Should be in format of https://server/profile + let remoteUrl = process.env.BACKEND_URL + "/get-profile"; + if (!remoteUrl) { + return res.render(`${__dirname}/views/profile`, { error: 'Client: No remote URL found' }); + } + + // Get access token from injected header + const accessToken = req.headers['x-ms-token-aad-access-token']; + console.log(`accessToken: ${accessToken}`) + + const authEnabled = process.env.APPSETTING_WEBSITE_AUTH_ENABLED==='true' ? true : false; + if (authEnabled && !accessToken) { + return res.render(`${__dirname}/views/profile`, { error: 'Client: No access token found' }); + } + + // Get remote profile + const response = await getRemoteProfile(remoteUrl, accessToken, authEnabled); + const error = (response.error && Object.keys(response.error).length > 0 ) ? JSON.stringify(response.error) : ""; + + // Data for rendered view + const dataForView = { + error, + remoteUrl, + profile: sortJson(response.profile), + headers: sortJson(response.headers), + env: sortJson(response.env), + authEnabled, + bearerToken: response.bearerToken, + raw: response + }; + + // Success - render view + res.render(`${__dirname}/views/profile`, dataForView); + + } catch (error) { + // Route-level Failure - render view + res.render(`${__dirname}/views/profile`, error.message ); + } + }); + + // instead of 404 - just return home page + app.get('*', (_, res) => { + res.redirect('/'); + }); + + return app; +}; +// diff --git a/src/AuthSample/frontend/src/sortJson.js b/src/AuthSample/frontend/src/sortJson.js new file mode 100644 index 0000000..5223e5e --- /dev/null +++ b/src/AuthSample/frontend/src/sortJson.js @@ -0,0 +1,7 @@ +export const sortJson = (json) => { + if (!json) return {}; + + if (typeof json !== 'object') return {}; + + return Object.entries(json).sort(Intl.Collator().compare).reduce((o, [k, v]) => (o[k] = v, o), {}); +} \ No newline at end of file diff --git a/src/AuthSample/frontend/src/views/debug.ejs b/src/AuthSample/frontend/src/views/debug.ejs new file mode 100644 index 0000000..73cd419 --- /dev/null +++ b/src/AuthSample/frontend/src/views/debug.ejs @@ -0,0 +1,63 @@ + + + + + + + + Easy auth - Get Profile from API server + + + +

Client (EJS) server - Profile

+ + <% if (error) { %> + +

Error

+

+ <%= error %> +

+ + <% } else { %> + + +

Access token

+

+

<%= user %>
+
<%= scope %>
+ <%= accessToken %> + +

+ +



+
+
+ Additional resources - Easy auth + +

Token refresh middleware

+

+ <%- JSON.stringify(tokenMiddleware, null, 6) .replace(/\n( *)/g, function (match, p1) { + return '
' + ' ' .repeat(p1.length); }); %> +

+ +

HTTP Headers

+

+ <%- JSON.stringify(headers, null, 6) .replace(/\n( *)/g, function (match, p1) { return '
' + + ' ' .repeat(p1.length); }); %> +

+ +

App Service environment variables

+

+ <%- JSON.stringify(env, null, 6) .replace(/\n( *)/g, function (match, p1) { return '
' + ' ' + .repeat(p1.length); }); %> +

+

+
+ <% } %> + + + \ No newline at end of file diff --git a/src/AuthSample/frontend/src/views/home.ejs b/src/AuthSample/frontend/src/views/home.ejs new file mode 100644 index 0000000..0978332 --- /dev/null +++ b/src/AuthSample/frontend/src/views/home.ejs @@ -0,0 +1,38 @@ + + + + + + + + Easy auth - Get Profile from API server + + + + + +

Easy auth - Get Profile from API server - 1

+ +

Get user's profile from server API

+



+ + + + \ No newline at end of file diff --git a/src/AuthSample/frontend/src/views/profile.ejs b/src/AuthSample/frontend/src/views/profile.ejs new file mode 100644 index 0000000..291e98a --- /dev/null +++ b/src/AuthSample/frontend/src/views/profile.ejs @@ -0,0 +1,62 @@ + + + + + + + + Easy auth - Get Profile from API server + + + + +

API server - Profile

+
Remote url: <%= remoteUrl %>
+ + <% if (error) { %> + +

Error

+

+ <%= error %> +

+ + <% } else { %> + +

Success

+

+ <%- JSON.stringify(profile, null, 6) .replace(/\n( *)/g, function (match, p1) { return '
' + ' ' + .repeat(p1.length); }); %> +

+



+
+ Additional resources - Easy auth +
+ +

API Service HTTP Headers

+

+ <%- JSON.stringify(headers, null, 6) .replace(/\n( *)/g, function (match, p1) { return '
' + + ' ' .repeat(p1.length); }); %> +

+ +

API Service environment variables

+

+ <%- JSON.stringify(env, null, 6) .replace(/\n( *)/g, function (match, p1) { return '
' + ' ' + .repeat(p1.length); }); %> +

+ +

API Service bearer token

+

+ <%= bearerToken %> +

+
+
+

+ <% } %> + + + + diff --git a/src/AuthSample/frontend/web.config b/src/AuthSample/frontend/web.config new file mode 100644 index 0000000..c50a8f4 --- /dev/null +++ b/src/AuthSample/frontend/web.config @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AuthSample/scripts/access-token.sh b/src/AuthSample/scripts/access-token.sh new file mode 100644 index 0000000..5684a8d --- /dev/null +++ b/src/AuthSample/scripts/access-token.sh @@ -0,0 +1,23 @@ +# Prerequisites: jq (available in the Azure Cloud Shell) + +frontendapp=frontend-abc +backendapp=backend-abc +groupname=myAuthResourceGroup +location="West Europe" +os="Linux" +planname=myPlan +backendurl=https://$backendapp.azurewebsites.net +nodeLts="NODE:16-lts" +sku="FREE" + +authSettings=$(az webapp auth show -g "$groupname" -n "$frontendapp") +frontendId=$(az webapp auth microsoft show --name "$frontendapp" --resource-group "$groupname" --query registration.clientId --output tsv) +backendId=$(az webapp auth microsoft show --name "$backendapp" --resource-group "$groupname" --query registration.clientId --output tsv) + +firstParam="scope=openid email profile offline_access api://$backendId/user_impersonation" +paramArrayObj=$( jq --null-input \ + --arg p1 "$firstParam" \ + '{"loginParameters": [$p1]}' ) +echo paramArrayObj= $paramArrayObj +authSettings=$(echo "$authSettings" | jq '.properties' | jq --argjson p "$paramArrayObj" '.identityProviders.azureActiveDirectory.login += $p') +az webapp auth set --resource-group "$resourcegroupname" --name "$frontendapp" --body "$authSettings" diff --git a/src/AuthSample/scripts/app-creation.sh b/src/AuthSample/scripts/app-creation.sh new file mode 100644 index 0000000..ba1d7a6 --- /dev/null +++ b/src/AuthSample/scripts/app-creation.sh @@ -0,0 +1,16 @@ +frontendapp=frontend-abc +backendapp=backend-abc +groupname=myAuthResourceGroup +location="West Europe" +os="Linux" +planname=myPlan +backendurl=https://$backendapp.azurewebsites.net +nodeLts="NODE:16-lts" +sku="Free" + +#cd js-e2e-web-app-easy-auth-app-to-app/ +cd ../frontend/ +az webapp up --resource-group "$groupname" --name "$frontendapp" --plan "$planname" --sku "$sku" --location "$location" --os-type "$os" --runtime "$nodeLts" +cd ../backend/ +az webapp up --resource-group "$groupname" --name "$backendapp" --runtime "$nodeLts" +az webapp config appsettings set --name "$frontendapp" --resource-group "$groupname" --settings BACKEND_URL="$backendurl" diff --git a/src/Backend/.vscode/launch.json b/src/Backend/.vscode/launch.json new file mode 100644 index 0000000..3def302 --- /dev/null +++ b/src/Backend/.vscode/launch.json @@ -0,0 +1,28 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (web)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/bin/Debug/net8.0/Backend.dll", + "args": [], + "cwd": "${workspaceFolder}", + "launchBrowser": { + "enabled": false + }, + "stopAtEntry": false, + // "serverReadyAction": { + // "action": "openExternally", + // "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + // }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "sourceFileMap": { + "/Views": "${workspaceFolder}/Views" + } + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/src/Backend/.vscode/tasks.json similarity index 62% rename from .vscode/tasks.json rename to src/Backend/.vscode/tasks.json index af88786..720505e 100644 --- a/.vscode/tasks.json +++ b/src/Backend/.vscode/tasks.json @@ -7,7 +7,9 @@ "type": "process", "args": [ "build", - "${workspaceFolder}/src/MSAL_Example/Cli.csproj" + "${workspaceFolder}/Backend.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" } diff --git a/src/Backend/Backend.csproj b/src/Backend/Backend.csproj new file mode 100644 index 0000000..fa018d2 --- /dev/null +++ b/src/Backend/Backend.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/src/Backend/Backend.http b/src/Backend/Backend.http new file mode 100644 index 0000000..7dd9692 --- /dev/null +++ b/src/Backend/Backend.http @@ -0,0 +1,6 @@ +@Backend_HostAddress = http://localhost:5148 + +GET {{Backend_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/src/Backend/Controllers/WeatherForecastController.cs b/src/Backend/Controllers/WeatherForecastController.cs new file mode 100644 index 0000000..382d44d --- /dev/null +++ b/src/Backend/Controllers/WeatherForecastController.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.Mvc; + +namespace Backend.Controllers; + +[ApiController] +[Route("[controller]")] +public class WeatherForecastController : ControllerBase +{ + private static readonly string[] Summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) + { + _logger = logger; + } + + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } +} diff --git a/src/Backend/Program.cs b/src/Backend/Program.cs new file mode 100644 index 0000000..15eacee --- /dev/null +++ b/src/Backend/Program.cs @@ -0,0 +1,25 @@ +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/src/Backend/Properties/launchSettings.json b/src/Backend/Properties/launchSettings.json new file mode 100644 index 0000000..ad10e4f --- /dev/null +++ b/src/Backend/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:8351", + "sslPort": 44344 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5148", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7021;http://localhost:5148", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/Backend/WeatherForecast.cs b/src/Backend/WeatherForecast.cs new file mode 100644 index 0000000..645adc8 --- /dev/null +++ b/src/Backend/WeatherForecast.cs @@ -0,0 +1,12 @@ +namespace Backend; + +public class WeatherForecast +{ + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } +} diff --git a/src/Backend/appsettings.Development.json b/src/Backend/appsettings.Development.json new file mode 100644 index 0000000..ff66ba6 --- /dev/null +++ b/src/Backend/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} From 6a64ab5ecf42206254c1e57f3bf23ae9cacfebee Mon Sep 17 00:00:00 2001 From: Julien S Date: Thu, 5 Jun 2025 12:58:49 +0000 Subject: [PATCH 11/11] refactor : renamed project folders --- ms-identity-docs-code-dotnet.sln | 21 +++-- src/Backend/.vscode/launch.json | 28 ------- src/Backend/.vscode/tasks.json | 17 ---- src/Backend/Backend.csproj | 13 --- src/Backend/Backend.http | 6 -- .../Controllers/WeatherForecastController.cs | 32 ------- src/Backend/Program.cs | 25 ------ src/Backend/Properties/launchSettings.json | 41 --------- src/Backend/WeatherForecast.cs | 12 --- src/Backend/appsettings.Development.json | 8 -- .../.devcontainer/devcontainer.json | 0 .../.github/CODE_OF_CONDUCT.md | 0 .../.github/ISSUE_TEMPLATE.md | 0 .../.github/PULL_REQUEST_TEMPLATE.md | 0 src/{AuthSample => EasyAuthSample}/.gitignore | 0 .../CHANGELOG.md | 0 .../CONTRIBUTING.md | 0 src/{AuthSample => EasyAuthSample}/LICENSE.md | 0 src/{AuthSample => EasyAuthSample}/README.md | 0 .../backend/.deployment | 0 .../backend/.gitignore | 0 .../backend/.vscode/settings.json | 0 .../backend/package.json | 0 .../backend/run.cjs | 0 .../backend/src/index.js | 0 .../backend/src/server.js | 0 .../backend/src/sortJson.js | 0 .../backend/src/with-graph/auth.js | 0 .../backend/src/with-graph/graph.js | 0 .../backend/web.config | 0 .../frontend/.azure/config | 0 .../frontend/.deployment | 0 .../frontend/.env.sample | 0 .../frontend/.gitignore | 0 .../frontend/.vscode/launch.json | 0 .../frontend/.vscode/settings.json | 0 .../frontend/package.json | 0 .../frontend/run.cjs | 0 .../frontend/src/error.js | 0 .../frontend/src/index.js | 0 .../frontend/src/refreshToken.js | 0 .../frontend/src/remoteProfile.js | 0 .../frontend/src/server.js | 0 .../frontend/src/sortJson.js | 0 .../frontend/src/views/debug.ejs | 0 .../frontend/src/views/home.ejs | 0 .../frontend/src/views/profile.ejs | 0 .../frontend/web.config | 0 .../scripts/access-token.sh | 0 .../scripts/app-creation.sh | 0 .../Cli.csproj | 0 .../Program.cs | 0 .../README.md | 0 .../appsettings.json.tpl | 0 .../utils/PasswordUtils.cs | 0 src/SPA_JS_Vanilla/App/public/authConfig.js | 84 +++++++++---------- src/SPA_JS_Vanilla/App/public/signout.html | 29 ++++--- 57 files changed, 72 insertions(+), 244 deletions(-) delete mode 100644 src/Backend/.vscode/launch.json delete mode 100644 src/Backend/.vscode/tasks.json delete mode 100644 src/Backend/Backend.csproj delete mode 100644 src/Backend/Backend.http delete mode 100644 src/Backend/Controllers/WeatherForecastController.cs delete mode 100644 src/Backend/Program.cs delete mode 100644 src/Backend/Properties/launchSettings.json delete mode 100644 src/Backend/WeatherForecast.cs delete mode 100644 src/Backend/appsettings.Development.json rename src/{AuthSample => EasyAuthSample}/.devcontainer/devcontainer.json (100%) rename src/{AuthSample => EasyAuthSample}/.github/CODE_OF_CONDUCT.md (100%) rename src/{AuthSample => EasyAuthSample}/.github/ISSUE_TEMPLATE.md (100%) rename src/{AuthSample => EasyAuthSample}/.github/PULL_REQUEST_TEMPLATE.md (100%) rename src/{AuthSample => EasyAuthSample}/.gitignore (100%) rename src/{AuthSample => EasyAuthSample}/CHANGELOG.md (100%) rename src/{AuthSample => EasyAuthSample}/CONTRIBUTING.md (100%) rename src/{AuthSample => EasyAuthSample}/LICENSE.md (100%) rename src/{AuthSample => EasyAuthSample}/README.md (100%) rename src/{AuthSample => EasyAuthSample}/backend/.deployment (100%) rename src/{AuthSample => EasyAuthSample}/backend/.gitignore (100%) rename src/{AuthSample => EasyAuthSample}/backend/.vscode/settings.json (100%) rename src/{AuthSample => EasyAuthSample}/backend/package.json (100%) rename src/{AuthSample => EasyAuthSample}/backend/run.cjs (100%) rename src/{AuthSample => EasyAuthSample}/backend/src/index.js (100%) rename src/{AuthSample => EasyAuthSample}/backend/src/server.js (100%) rename src/{AuthSample => EasyAuthSample}/backend/src/sortJson.js (100%) rename src/{AuthSample => EasyAuthSample}/backend/src/with-graph/auth.js (100%) rename src/{AuthSample => EasyAuthSample}/backend/src/with-graph/graph.js (100%) rename src/{AuthSample => EasyAuthSample}/backend/web.config (100%) rename src/{AuthSample => EasyAuthSample}/frontend/.azure/config (100%) rename src/{AuthSample => EasyAuthSample}/frontend/.deployment (100%) rename src/{AuthSample => EasyAuthSample}/frontend/.env.sample (100%) rename src/{AuthSample => EasyAuthSample}/frontend/.gitignore (100%) rename src/{AuthSample => EasyAuthSample}/frontend/.vscode/launch.json (100%) rename src/{AuthSample => EasyAuthSample}/frontend/.vscode/settings.json (100%) rename src/{AuthSample => EasyAuthSample}/frontend/package.json (100%) rename src/{AuthSample => EasyAuthSample}/frontend/run.cjs (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/error.js (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/index.js (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/refreshToken.js (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/remoteProfile.js (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/server.js (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/sortJson.js (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/views/debug.ejs (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/views/home.ejs (100%) rename src/{AuthSample => EasyAuthSample}/frontend/src/views/profile.ejs (100%) rename src/{AuthSample => EasyAuthSample}/frontend/web.config (100%) rename src/{AuthSample => EasyAuthSample}/scripts/access-token.sh (100%) rename src/{AuthSample => EasyAuthSample}/scripts/app-creation.sh (100%) rename src/{MSAL_Example => MSGraphUsers_Example}/Cli.csproj (100%) rename src/{MSAL_Example => MSGraphUsers_Example}/Program.cs (100%) rename src/{MSAL_Example => MSGraphUsers_Example}/README.md (100%) rename src/{MSAL_Example => MSGraphUsers_Example}/appsettings.json.tpl (100%) rename src/{MSAL_Example => MSGraphUsers_Example}/utils/PasswordUtils.cs (100%) diff --git a/ms-identity-docs-code-dotnet.sln b/ms-identity-docs-code-dotnet.sln index e90343b..3eefe00 100644 --- a/ms-identity-docs-code-dotnet.sln +++ b/ms-identity-docs-code-dotnet.sln @@ -1,25 +1,30 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.5.002.0 +VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cli", "src\MSAL_Example\Cli.csproj", "{02150C0C-C207-4DF3-8733-E239A6F6C72B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{34473EFE-8914-4FAB-A39D-EE0315235850}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cli", "src\MSGraphUsers_Example\Cli.csproj", "{970D6801-B4F9-432D-8BD4-EDAE0FBBD33E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {02150C0C-C207-4DF3-8733-E239A6F6C72B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {02150C0C-C207-4DF3-8733-E239A6F6C72B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02150C0C-C207-4DF3-8733-E239A6F6C72B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {02150C0C-C207-4DF3-8733-E239A6F6C72B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E447D051-17A5-4726-BC3C-98FC39077032} EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {970D6801-B4F9-432D-8BD4-EDAE0FBBD33E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {970D6801-B4F9-432D-8BD4-EDAE0FBBD33E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {970D6801-B4F9-432D-8BD4-EDAE0FBBD33E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {970D6801-B4F9-432D-8BD4-EDAE0FBBD33E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {970D6801-B4F9-432D-8BD4-EDAE0FBBD33E} = {34473EFE-8914-4FAB-A39D-EE0315235850} + EndGlobalSection EndGlobal diff --git a/src/Backend/.vscode/launch.json b/src/Backend/.vscode/launch.json deleted file mode 100644 index 3def302..0000000 --- a/src/Backend/.vscode/launch.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": ".NET Core Launch (web)", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build", - "program": "${workspaceFolder}/bin/Debug/net8.0/Backend.dll", - "args": [], - "cwd": "${workspaceFolder}", - "launchBrowser": { - "enabled": false - }, - "stopAtEntry": false, - // "serverReadyAction": { - // "action": "openExternally", - // "pattern": "\\bNow listening on:\\s+(https?://\\S+)" - // }, - "env": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "sourceFileMap": { - "/Views": "${workspaceFolder}/Views" - } - } - ] -} \ No newline at end of file diff --git a/src/Backend/.vscode/tasks.json b/src/Backend/.vscode/tasks.json deleted file mode 100644 index 720505e..0000000 --- a/src/Backend/.vscode/tasks.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/Backend.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - } - ] -} \ No newline at end of file diff --git a/src/Backend/Backend.csproj b/src/Backend/Backend.csproj deleted file mode 100644 index fa018d2..0000000 --- a/src/Backend/Backend.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - diff --git a/src/Backend/Backend.http b/src/Backend/Backend.http deleted file mode 100644 index 7dd9692..0000000 --- a/src/Backend/Backend.http +++ /dev/null @@ -1,6 +0,0 @@ -@Backend_HostAddress = http://localhost:5148 - -GET {{Backend_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/src/Backend/Controllers/WeatherForecastController.cs b/src/Backend/Controllers/WeatherForecastController.cs deleted file mode 100644 index 382d44d..0000000 --- a/src/Backend/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace Backend.Controllers; - -[ApiController] -[Route("[controller]")] -public class WeatherForecastController : ControllerBase -{ - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } -} diff --git a/src/Backend/Program.cs b/src/Backend/Program.cs deleted file mode 100644 index 15eacee..0000000 --- a/src/Backend/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -var builder = WebApplication.CreateBuilder(args); - -// Add services to the container. - -builder.Services.AddControllers(); -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); -} - -app.UseHttpsRedirection(); - -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); diff --git a/src/Backend/Properties/launchSettings.json b/src/Backend/Properties/launchSettings.json deleted file mode 100644 index ad10e4f..0000000 --- a/src/Backend/Properties/launchSettings.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:8351", - "sslPort": 44344 - } - }, - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "http://localhost:5148", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "https://localhost:7021;http://localhost:5148", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/src/Backend/WeatherForecast.cs b/src/Backend/WeatherForecast.cs deleted file mode 100644 index 645adc8..0000000 --- a/src/Backend/WeatherForecast.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Backend; - -public class WeatherForecast -{ - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } -} diff --git a/src/Backend/appsettings.Development.json b/src/Backend/appsettings.Development.json deleted file mode 100644 index ff66ba6..0000000 --- a/src/Backend/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/src/AuthSample/.devcontainer/devcontainer.json b/src/EasyAuthSample/.devcontainer/devcontainer.json similarity index 100% rename from src/AuthSample/.devcontainer/devcontainer.json rename to src/EasyAuthSample/.devcontainer/devcontainer.json diff --git a/src/AuthSample/.github/CODE_OF_CONDUCT.md b/src/EasyAuthSample/.github/CODE_OF_CONDUCT.md similarity index 100% rename from src/AuthSample/.github/CODE_OF_CONDUCT.md rename to src/EasyAuthSample/.github/CODE_OF_CONDUCT.md diff --git a/src/AuthSample/.github/ISSUE_TEMPLATE.md b/src/EasyAuthSample/.github/ISSUE_TEMPLATE.md similarity index 100% rename from src/AuthSample/.github/ISSUE_TEMPLATE.md rename to src/EasyAuthSample/.github/ISSUE_TEMPLATE.md diff --git a/src/AuthSample/.github/PULL_REQUEST_TEMPLATE.md b/src/EasyAuthSample/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from src/AuthSample/.github/PULL_REQUEST_TEMPLATE.md rename to src/EasyAuthSample/.github/PULL_REQUEST_TEMPLATE.md diff --git a/src/AuthSample/.gitignore b/src/EasyAuthSample/.gitignore similarity index 100% rename from src/AuthSample/.gitignore rename to src/EasyAuthSample/.gitignore diff --git a/src/AuthSample/CHANGELOG.md b/src/EasyAuthSample/CHANGELOG.md similarity index 100% rename from src/AuthSample/CHANGELOG.md rename to src/EasyAuthSample/CHANGELOG.md diff --git a/src/AuthSample/CONTRIBUTING.md b/src/EasyAuthSample/CONTRIBUTING.md similarity index 100% rename from src/AuthSample/CONTRIBUTING.md rename to src/EasyAuthSample/CONTRIBUTING.md diff --git a/src/AuthSample/LICENSE.md b/src/EasyAuthSample/LICENSE.md similarity index 100% rename from src/AuthSample/LICENSE.md rename to src/EasyAuthSample/LICENSE.md diff --git a/src/AuthSample/README.md b/src/EasyAuthSample/README.md similarity index 100% rename from src/AuthSample/README.md rename to src/EasyAuthSample/README.md diff --git a/src/AuthSample/backend/.deployment b/src/EasyAuthSample/backend/.deployment similarity index 100% rename from src/AuthSample/backend/.deployment rename to src/EasyAuthSample/backend/.deployment diff --git a/src/AuthSample/backend/.gitignore b/src/EasyAuthSample/backend/.gitignore similarity index 100% rename from src/AuthSample/backend/.gitignore rename to src/EasyAuthSample/backend/.gitignore diff --git a/src/AuthSample/backend/.vscode/settings.json b/src/EasyAuthSample/backend/.vscode/settings.json similarity index 100% rename from src/AuthSample/backend/.vscode/settings.json rename to src/EasyAuthSample/backend/.vscode/settings.json diff --git a/src/AuthSample/backend/package.json b/src/EasyAuthSample/backend/package.json similarity index 100% rename from src/AuthSample/backend/package.json rename to src/EasyAuthSample/backend/package.json diff --git a/src/AuthSample/backend/run.cjs b/src/EasyAuthSample/backend/run.cjs similarity index 100% rename from src/AuthSample/backend/run.cjs rename to src/EasyAuthSample/backend/run.cjs diff --git a/src/AuthSample/backend/src/index.js b/src/EasyAuthSample/backend/src/index.js similarity index 100% rename from src/AuthSample/backend/src/index.js rename to src/EasyAuthSample/backend/src/index.js diff --git a/src/AuthSample/backend/src/server.js b/src/EasyAuthSample/backend/src/server.js similarity index 100% rename from src/AuthSample/backend/src/server.js rename to src/EasyAuthSample/backend/src/server.js diff --git a/src/AuthSample/backend/src/sortJson.js b/src/EasyAuthSample/backend/src/sortJson.js similarity index 100% rename from src/AuthSample/backend/src/sortJson.js rename to src/EasyAuthSample/backend/src/sortJson.js diff --git a/src/AuthSample/backend/src/with-graph/auth.js b/src/EasyAuthSample/backend/src/with-graph/auth.js similarity index 100% rename from src/AuthSample/backend/src/with-graph/auth.js rename to src/EasyAuthSample/backend/src/with-graph/auth.js diff --git a/src/AuthSample/backend/src/with-graph/graph.js b/src/EasyAuthSample/backend/src/with-graph/graph.js similarity index 100% rename from src/AuthSample/backend/src/with-graph/graph.js rename to src/EasyAuthSample/backend/src/with-graph/graph.js diff --git a/src/AuthSample/backend/web.config b/src/EasyAuthSample/backend/web.config similarity index 100% rename from src/AuthSample/backend/web.config rename to src/EasyAuthSample/backend/web.config diff --git a/src/AuthSample/frontend/.azure/config b/src/EasyAuthSample/frontend/.azure/config similarity index 100% rename from src/AuthSample/frontend/.azure/config rename to src/EasyAuthSample/frontend/.azure/config diff --git a/src/AuthSample/frontend/.deployment b/src/EasyAuthSample/frontend/.deployment similarity index 100% rename from src/AuthSample/frontend/.deployment rename to src/EasyAuthSample/frontend/.deployment diff --git a/src/AuthSample/frontend/.env.sample b/src/EasyAuthSample/frontend/.env.sample similarity index 100% rename from src/AuthSample/frontend/.env.sample rename to src/EasyAuthSample/frontend/.env.sample diff --git a/src/AuthSample/frontend/.gitignore b/src/EasyAuthSample/frontend/.gitignore similarity index 100% rename from src/AuthSample/frontend/.gitignore rename to src/EasyAuthSample/frontend/.gitignore diff --git a/src/AuthSample/frontend/.vscode/launch.json b/src/EasyAuthSample/frontend/.vscode/launch.json similarity index 100% rename from src/AuthSample/frontend/.vscode/launch.json rename to src/EasyAuthSample/frontend/.vscode/launch.json diff --git a/src/AuthSample/frontend/.vscode/settings.json b/src/EasyAuthSample/frontend/.vscode/settings.json similarity index 100% rename from src/AuthSample/frontend/.vscode/settings.json rename to src/EasyAuthSample/frontend/.vscode/settings.json diff --git a/src/AuthSample/frontend/package.json b/src/EasyAuthSample/frontend/package.json similarity index 100% rename from src/AuthSample/frontend/package.json rename to src/EasyAuthSample/frontend/package.json diff --git a/src/AuthSample/frontend/run.cjs b/src/EasyAuthSample/frontend/run.cjs similarity index 100% rename from src/AuthSample/frontend/run.cjs rename to src/EasyAuthSample/frontend/run.cjs diff --git a/src/AuthSample/frontend/src/error.js b/src/EasyAuthSample/frontend/src/error.js similarity index 100% rename from src/AuthSample/frontend/src/error.js rename to src/EasyAuthSample/frontend/src/error.js diff --git a/src/AuthSample/frontend/src/index.js b/src/EasyAuthSample/frontend/src/index.js similarity index 100% rename from src/AuthSample/frontend/src/index.js rename to src/EasyAuthSample/frontend/src/index.js diff --git a/src/AuthSample/frontend/src/refreshToken.js b/src/EasyAuthSample/frontend/src/refreshToken.js similarity index 100% rename from src/AuthSample/frontend/src/refreshToken.js rename to src/EasyAuthSample/frontend/src/refreshToken.js diff --git a/src/AuthSample/frontend/src/remoteProfile.js b/src/EasyAuthSample/frontend/src/remoteProfile.js similarity index 100% rename from src/AuthSample/frontend/src/remoteProfile.js rename to src/EasyAuthSample/frontend/src/remoteProfile.js diff --git a/src/AuthSample/frontend/src/server.js b/src/EasyAuthSample/frontend/src/server.js similarity index 100% rename from src/AuthSample/frontend/src/server.js rename to src/EasyAuthSample/frontend/src/server.js diff --git a/src/AuthSample/frontend/src/sortJson.js b/src/EasyAuthSample/frontend/src/sortJson.js similarity index 100% rename from src/AuthSample/frontend/src/sortJson.js rename to src/EasyAuthSample/frontend/src/sortJson.js diff --git a/src/AuthSample/frontend/src/views/debug.ejs b/src/EasyAuthSample/frontend/src/views/debug.ejs similarity index 100% rename from src/AuthSample/frontend/src/views/debug.ejs rename to src/EasyAuthSample/frontend/src/views/debug.ejs diff --git a/src/AuthSample/frontend/src/views/home.ejs b/src/EasyAuthSample/frontend/src/views/home.ejs similarity index 100% rename from src/AuthSample/frontend/src/views/home.ejs rename to src/EasyAuthSample/frontend/src/views/home.ejs diff --git a/src/AuthSample/frontend/src/views/profile.ejs b/src/EasyAuthSample/frontend/src/views/profile.ejs similarity index 100% rename from src/AuthSample/frontend/src/views/profile.ejs rename to src/EasyAuthSample/frontend/src/views/profile.ejs diff --git a/src/AuthSample/frontend/web.config b/src/EasyAuthSample/frontend/web.config similarity index 100% rename from src/AuthSample/frontend/web.config rename to src/EasyAuthSample/frontend/web.config diff --git a/src/AuthSample/scripts/access-token.sh b/src/EasyAuthSample/scripts/access-token.sh similarity index 100% rename from src/AuthSample/scripts/access-token.sh rename to src/EasyAuthSample/scripts/access-token.sh diff --git a/src/AuthSample/scripts/app-creation.sh b/src/EasyAuthSample/scripts/app-creation.sh similarity index 100% rename from src/AuthSample/scripts/app-creation.sh rename to src/EasyAuthSample/scripts/app-creation.sh diff --git a/src/MSAL_Example/Cli.csproj b/src/MSGraphUsers_Example/Cli.csproj similarity index 100% rename from src/MSAL_Example/Cli.csproj rename to src/MSGraphUsers_Example/Cli.csproj diff --git a/src/MSAL_Example/Program.cs b/src/MSGraphUsers_Example/Program.cs similarity index 100% rename from src/MSAL_Example/Program.cs rename to src/MSGraphUsers_Example/Program.cs diff --git a/src/MSAL_Example/README.md b/src/MSGraphUsers_Example/README.md similarity index 100% rename from src/MSAL_Example/README.md rename to src/MSGraphUsers_Example/README.md diff --git a/src/MSAL_Example/appsettings.json.tpl b/src/MSGraphUsers_Example/appsettings.json.tpl similarity index 100% rename from src/MSAL_Example/appsettings.json.tpl rename to src/MSGraphUsers_Example/appsettings.json.tpl diff --git a/src/MSAL_Example/utils/PasswordUtils.cs b/src/MSGraphUsers_Example/utils/PasswordUtils.cs similarity index 100% rename from src/MSAL_Example/utils/PasswordUtils.cs rename to src/MSGraphUsers_Example/utils/PasswordUtils.cs diff --git a/src/SPA_JS_Vanilla/App/public/authConfig.js b/src/SPA_JS_Vanilla/App/public/authConfig.js index 3bca56a..e4ff57f 100644 --- a/src/SPA_JS_Vanilla/App/public/authConfig.js +++ b/src/SPA_JS_Vanilla/App/public/authConfig.js @@ -1,52 +1,52 @@ /** - * Configuration object to be passed to MSAL instance on creation. + * Configuration object to be passed to MSAL instance on creation. * For a full list of MSAL.js configuration parameters, visit: - * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md + * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md */ const msalConfig = { - auth: { - clientId: '82df21ba-d942-4ad7-b75f-4ee95cae533e', // This is the ONLY mandatory field that you need to supply. - authority: 'https://justrebldemo.ciamlogin.com/', // Replace the placeholder with your tenant subdomain - redirectUri: 'http://localhost:3000', // You must register this URI on Microsoft Entra admin center/App Registration. Defaults to window.location.href e.g. http://localhost:3000/ - navigateToLoginRequestUrl: true, // If "true", will navigate back to the original request location before processing the auth code response. - }, - cache: { - cacheLocation: 'sessionStorage', // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO. - storeAuthStateInCookie: false, // set this to true if you have to support IE - }, - system: { - loggerOptions: { - loggerCallback: (level, message, containsPii) => { - if (containsPii) { - return; - } - switch (level) { - case msal.LogLevel.Error: - console.error(message); - return; - case msal.LogLevel.Info: - console.info(message); - return; - case msal.LogLevel.Verbose: - console.debug(message); - return; - case msal.LogLevel.Warning: - console.warn(message); - return; - } - }, - }, + auth: { + clientId: "82df21ba-d942-4ad7-b75f-4ee95cae533e", // This is the ONLY mandatory field that you need to supply. + authority: "https://justrebldemo.ciamlogin.com/", // Replace the placeholder with your tenant subdomain + redirectUri: "http://localhost:3000", // You must register this URI on Microsoft Entra admin center/App Registration. Defaults to window.location.href e.g. http://localhost:3000/ + navigateToLoginRequestUrl: true, // If "true", will navigate back to the original request location before processing the auth code response. + }, + cache: { + cacheLocation: "sessionStorage", // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO. + storeAuthStateInCookie: false, // set this to true if you have to support IE + }, + system: { + loggerOptions: { + loggerCallback: (level, message, containsPii) => { + if (containsPii) { + return; + } + switch (level) { + case msal.LogLevel.Error: + console.error(message); + return; + case msal.LogLevel.Info: + console.info(message); + return; + case msal.LogLevel.Verbose: + console.debug(message); + return; + case msal.LogLevel.Warning: + console.warn(message); + return; + } + }, }, + }, }; /** * Scopes you add here will be prompted for user consent during sign-in. * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. - * For more information about OIDC scopes, visit: + * For more information about OIDC scopes, visit: * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes */ const loginRequest = { - scopes: [], + scopes: [], }; /** @@ -60,9 +60,9 @@ const loginRequest = { // }; // exporting config object for jest -if (typeof exports !== 'undefined') { - module.exports = { - msalConfig: msalConfig, - loginRequest: loginRequest, - }; -} \ No newline at end of file +if (typeof exports !== "undefined") { + module.exports = { + msalConfig: msalConfig, + loginRequest: loginRequest, + }; +} diff --git a/src/SPA_JS_Vanilla/App/public/signout.html b/src/SPA_JS_Vanilla/App/public/signout.html index 973acc2..4437340 100644 --- a/src/SPA_JS_Vanilla/App/public/signout.html +++ b/src/SPA_JS_Vanilla/App/public/signout.html @@ -1,19 +1,24 @@ - - - + + + Microsoft Entra External ID | Vanilla JavaScript SPA - + - - - + + +
-

Goodbye!

-

You have signed out and your cache has been cleared.

- Take me back +

Goodbye!

+

You have signed out and your cache has been cleared.

+ Take me back
- - \ No newline at end of file + +