From 98f989ba73681c2ad11434dee399089fd469620b Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Wed, 11 Mar 2026 20:43:36 -0300 Subject: [PATCH 1/9] feat: script base de datos --- bd/script_creacion_bd.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bd/script_creacion_bd.sql b/bd/script_creacion_bd.sql index 89a9fbc..62c40bd 100644 --- a/bd/script_creacion_bd.sql +++ b/bd/script_creacion_bd.sql @@ -1,6 +1,6 @@ -CREATE DATABASE IF NOT EXISTS bd_garcia; +CREATE DATABASE IF NOT EXISTS bd_munoz; -USE bd_garcia; +USE bd_munoz; CREATE TABLE IF NOT EXISTS person ( id INT AUTO_INCREMENT PRIMARY KEY, From d6476f24ba0933047da4a45527cf774014fabce7 Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Wed, 11 Mar 2026 21:37:33 -0300 Subject: [PATCH 2/9] feat: crud backend implementation complete java 8 --- .vscode/settings.json | 5 + backend/.gitattributes | 2 + backend/.gitignore | 33 ++ backend/.mvn/wrapper/maven-wrapper.properties | 3 + backend/mvnw | 295 ++++++++++++++++++ backend/mvnw.cmd | 189 +++++++++++ backend/pom.xml | 66 ++++ .../examen/backend/BackendApplication.java | 13 + .../backend/controller/PersonController.java | 32 ++ .../com/examen/backend/dto/ResponseDTO.java | 13 + .../java/com/examen/backend/model/Person.java | 77 +++++ .../backend/repository/PersonRepository.java | 7 + .../src/main/resources/application.properties | 8 + .../backend/BackendApplicationTests.java | 13 + 14 files changed, 756 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 backend/.gitattributes create mode 100644 backend/.gitignore create mode 100644 backend/.mvn/wrapper/maven-wrapper.properties create mode 100755 backend/mvnw create mode 100644 backend/mvnw.cmd create mode 100644 backend/pom.xml create mode 100644 backend/src/main/java/com/examen/backend/BackendApplication.java create mode 100644 backend/src/main/java/com/examen/backend/controller/PersonController.java create mode 100644 backend/src/main/java/com/examen/backend/dto/ResponseDTO.java create mode 100644 backend/src/main/java/com/examen/backend/model/Person.java create mode 100644 backend/src/main/java/com/examen/backend/repository/PersonRepository.java create mode 100644 backend/src/main/resources/application.properties create mode 100644 backend/src/test/java/com/examen/backend/BackendApplicationTests.java diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6a799fd --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "java.project.sourcePaths": [ + "backend/src/main/java" + ] +} \ No newline at end of file diff --git a/backend/.gitattributes b/backend/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/backend/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/backend/.mvn/wrapper/maven-wrapper.properties b/backend/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..8dea6c2 --- /dev/null +++ b/backend/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip diff --git a/backend/mvnw b/backend/mvnw new file mode 100755 index 0000000..bd8896b --- /dev/null +++ b/backend/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/backend/mvnw.cmd b/backend/mvnw.cmd new file mode 100644 index 0000000..92450f9 --- /dev/null +++ b/backend/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 0000000..965227b --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + + + com.examen + backend + 0.0.1-SNAPSHOT + backend + Demo project for Spring Boot + + + + + + + + + + + + + + + 1.8 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + + com.mysql + mysql-connector-j + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/backend/src/main/java/com/examen/backend/BackendApplication.java b/backend/src/main/java/com/examen/backend/BackendApplication.java new file mode 100644 index 0000000..c02942d --- /dev/null +++ b/backend/src/main/java/com/examen/backend/BackendApplication.java @@ -0,0 +1,13 @@ +package com.examen.backend; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class BackendApplication { + + public static void main(String[] args) { + SpringApplication.run(BackendApplication.class, args); + } + +} diff --git a/backend/src/main/java/com/examen/backend/controller/PersonController.java b/backend/src/main/java/com/examen/backend/controller/PersonController.java new file mode 100644 index 0000000..9f00ea3 --- /dev/null +++ b/backend/src/main/java/com/examen/backend/controller/PersonController.java @@ -0,0 +1,32 @@ +package com.examen.backend.controller; + +import com.examen.backend.model.Person; +import com.examen.backend.repository.PersonRepository; +import com.examen.backend.dto.ResponseDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/person") +@CrossOrigin(origins = "*") +public class PersonController { + + @Autowired + private PersonRepository repo; + + @GetMapping + public ResponseDTO list() { + return new ResponseDTO(true, "Ok", repo.findAll()); + } + + @PostMapping + public ResponseDTO create(@RequestBody Person p) { + return new ResponseDTO(true, "Creado", repo.save(p)); + } + + @DeleteMapping("/{id}") + public ResponseDTO delete(@PathVariable Integer id) { + repo.deleteById(id); + return new ResponseDTO(true, "Eliminado", null); + } +} diff --git a/backend/src/main/java/com/examen/backend/dto/ResponseDTO.java b/backend/src/main/java/com/examen/backend/dto/ResponseDTO.java new file mode 100644 index 0000000..28e20d0 --- /dev/null +++ b/backend/src/main/java/com/examen/backend/dto/ResponseDTO.java @@ -0,0 +1,13 @@ +package com.examen.backend.dto; + +public class ResponseDTO { + public boolean status; + public String msg; + public Object data; + + public ResponseDTO(boolean status, String msg, Object data) { + this.status = status; + this.msg = msg; + this.data = data; + } +} diff --git a/backend/src/main/java/com/examen/backend/model/Person.java b/backend/src/main/java/com/examen/backend/model/Person.java new file mode 100644 index 0000000..d4a0dd1 --- /dev/null +++ b/backend/src/main/java/com/examen/backend/model/Person.java @@ -0,0 +1,77 @@ +package com.examen.backend.model; + +import javax.persistence.*; +import java.time.LocalDate; + +@Entity +@Table(name = "person") +public class Person { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + private String nombre; + private String apellido; + @Column(name = "fechaNacimiento") + private LocalDate fechaNacimiento; + private String puesto; + private Double sueldo; + + public Person() {} + + public Person(String apellido, LocalDate fechaNacimiento, Integer id, String nombre, String puesto, Double sueldo) { + this.apellido = apellido; + this.fechaNacimiento = fechaNacimiento; + this.id = id; + this.nombre = nombre; + this.puesto = puesto; + this.sueldo = sueldo; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellido() { + return apellido; + } + + public void setApellido(String apellido) { + this.apellido = apellido; + } + + public LocalDate getFechaNacimiento() { + return fechaNacimiento; + } + + public void setFechaNacimiento(LocalDate fechaNacimiento) { + this.fechaNacimiento = fechaNacimiento; + } + + public String getPuesto() { + return puesto; + } + + public void setPuesto(String puesto) { + this.puesto = puesto; + } + + public Double getSueldo() { + return sueldo; + } + + public void setSueldo(Double sueldo) { + this.sueldo = sueldo; + } +} diff --git a/backend/src/main/java/com/examen/backend/repository/PersonRepository.java b/backend/src/main/java/com/examen/backend/repository/PersonRepository.java new file mode 100644 index 0000000..75469e3 --- /dev/null +++ b/backend/src/main/java/com/examen/backend/repository/PersonRepository.java @@ -0,0 +1,7 @@ +package com.examen.backend.repository; + +import com.examen.backend.model.Person; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PersonRepository extends JpaRepository { +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties new file mode 100644 index 0000000..64bcd82 --- /dev/null +++ b/backend/src/main/resources/application.properties @@ -0,0 +1,8 @@ +spring.application.name=backend +spring.datasource.url=jdbc:mysql://localhost:3306/bd_munoz?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false +spring.datasource.username=conexión +spring.datasource.password=Wk2!rT8s@6w +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true \ No newline at end of file diff --git a/backend/src/test/java/com/examen/backend/BackendApplicationTests.java b/backend/src/test/java/com/examen/backend/BackendApplicationTests.java new file mode 100644 index 0000000..b7d0990 --- /dev/null +++ b/backend/src/test/java/com/examen/backend/BackendApplicationTests.java @@ -0,0 +1,13 @@ +package com.examen.backend; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class BackendApplicationTests { + + @Test + void contextLoads() { + } + +} From 91b7beb4e163c2f7f030c78e322d4712ce195933 Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Wed, 11 Mar 2026 22:53:41 -0300 Subject: [PATCH 3/9] feat: implement full CRUD navigation with routing - Added PersonListComponent for data visualization - Implemented PersonFormComponent for create/edit operations - Configured Angular Router for navigation between views - Integrated HttpClient for full API connectivity (GET, POST, PUT, DELETE) - Added Cancel and Edit --- frontend/.editorconfig | 17 + frontend/.gitignore | 44 + frontend/.prettierrc | 12 + frontend/.vscode/extensions.json | 4 + frontend/.vscode/launch.json | 20 + frontend/.vscode/mcp.json | 9 + frontend/.vscode/tasks.json | 42 + frontend/README.md | 59 + frontend/angular.json | 81 + frontend/package-lock.json | 8706 +++++++++++++++++ frontend/package.json | 38 + frontend/public/favicon.ico | Bin 0 -> 15086 bytes frontend/src/app/app.config.server.ts | 12 + frontend/src/app/app.config.ts | 14 + frontend/src/app/app.css | 0 frontend/src/app/app.html | 1 + frontend/src/app/app.routes.server.ts | 8 + frontend/src/app/app.routes.ts | 9 + frontend/src/app/app.spec.ts | 23 + frontend/src/app/app.ts | 15 + .../components/person-form/person-form.css | 0 .../components/person-form/person-form.html | 10 + .../person-form/person-form.spec.ts | 22 + .../app/components/person-form/person-form.ts | 71 + .../components/person-list/person-list.css | 0 .../components/person-list/person-list.html | 29 + .../app/components/person-list/person-list.ts | 33 + frontend/src/app/services/person.service.ts | 30 + frontend/src/app/services/person.spec.ts | 16 + frontend/src/app/services/person.ts | 6 + frontend/src/index.html | 13 + frontend/src/main.server.ts | 8 + frontend/src/main.ts | 6 + frontend/src/server.ts | 68 + frontend/src/styles.css | 1 + frontend/tsconfig.app.json | 17 + frontend/tsconfig.json | 33 + frontend/tsconfig.spec.json | 15 + 38 files changed, 9492 insertions(+) create mode 100644 frontend/.editorconfig create mode 100644 frontend/.gitignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/.vscode/extensions.json create mode 100644 frontend/.vscode/launch.json create mode 100644 frontend/.vscode/mcp.json create mode 100644 frontend/.vscode/tasks.json create mode 100644 frontend/README.md create mode 100644 frontend/angular.json create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/src/app/app.config.server.ts create mode 100644 frontend/src/app/app.config.ts create mode 100644 frontend/src/app/app.css create mode 100644 frontend/src/app/app.html create mode 100644 frontend/src/app/app.routes.server.ts create mode 100644 frontend/src/app/app.routes.ts create mode 100644 frontend/src/app/app.spec.ts create mode 100644 frontend/src/app/app.ts create mode 100644 frontend/src/app/components/person-form/person-form.css create mode 100644 frontend/src/app/components/person-form/person-form.html create mode 100644 frontend/src/app/components/person-form/person-form.spec.ts create mode 100644 frontend/src/app/components/person-form/person-form.ts create mode 100644 frontend/src/app/components/person-list/person-list.css create mode 100644 frontend/src/app/components/person-list/person-list.html create mode 100644 frontend/src/app/components/person-list/person-list.ts create mode 100644 frontend/src/app/services/person.service.ts create mode 100644 frontend/src/app/services/person.spec.ts create mode 100644 frontend/src/app/services/person.ts create mode 100644 frontend/src/index.html create mode 100644 frontend/src/main.server.ts create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/server.ts create mode 100644 frontend/src/styles.css create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.spec.json diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..f166060 --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,17 @@ +# 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 +ij_typescript_use_double_quotes = false + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..854acd5 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,44 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-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 +!.vscode/mcp.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings +__screenshots__/ + +# System files +.DS_Store +Thumbs.db diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..d6c16d7 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,12 @@ +{ + "printWidth": 100, + "singleQuote": true, + "overrides": [ + { + "files": "*.html", + "options": { + "parser": "angular" + } + } + ] +} diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..77b3745 --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/frontend/.vscode/launch.json b/frontend/.vscode/launch.json new file mode 100644 index 0000000..925af83 --- /dev/null +++ b/frontend/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/frontend/.vscode/mcp.json b/frontend/.vscode/mcp.json new file mode 100644 index 0000000..956af8c --- /dev/null +++ b/frontend/.vscode/mcp.json @@ -0,0 +1,9 @@ +{ + // For more information, visit: https://angular.dev/ai/mcp + "servers": { + "angular-cli": { + "command": "npx", + "args": ["-y", "@angular/cli", "mcp"] + } + } +} diff --git a/frontend/.vscode/tasks.json b/frontend/.vscode/tasks.json new file mode 100644 index 0000000..244306f --- /dev/null +++ b/frontend/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "Changes detected" + }, + "endsPattern": { + "regexp": "bundle generation (complete|failed)" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "Changes detected" + }, + "endsPattern": { + "regexp": "bundle generation (complete|failed)" + } + } + } + } + ] +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..e5ba19d --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,59 @@ +# Frontend + +This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 21.2.2. + +## Development server + +To start a local development server, run: + +```bash +ng serve +``` + +Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files. + +## Code scaffolding + +Angular CLI includes powerful code scaffolding tools. To generate a new component, run: + +```bash +ng generate component component-name +``` + +For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run: + +```bash +ng generate --help +``` + +## Building + +To build the project run: + +```bash +ng build +``` + +This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed. + +## Running unit tests + +To execute unit tests with the [Vitest](https://vitest.dev/) test runner, use the following command: + +```bash +ng test +``` + +## Running end-to-end tests + +For end-to-end (e2e) testing, run: + +```bash +ng e2e +``` + +Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs. + +## Additional Resources + +For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/frontend/angular.json b/frontend/angular.json new file mode 100644 index 0000000..cde76a7 --- /dev/null +++ b/frontend/angular.json @@ -0,0 +1,81 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "cli": { + "packageManager": "npm" + }, + "newProjectRoot": "projects", + "projects": { + "frontend": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "browser": "src/main.ts", + "tsConfig": "tsconfig.app.json", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.css" + ], + "server": "src/main.server.ts", + "outputMode": "server", + "security": { + "allowedHosts": [] + }, + "ssr": { + "entry": "src/server.ts" + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kB", + "maximumError": "1MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kB", + "maximumError": "8kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "frontend:build:production" + }, + "development": { + "buildTarget": "frontend:build:development" + } + }, + "defaultConfiguration": "development" + }, + "test": { + "builder": "@angular/build:unit-test" + } + } + } + } +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..368bf15 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,8706 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@angular/common": "^21.2.0", + "@angular/compiler": "^21.2.0", + "@angular/core": "^21.2.0", + "@angular/forms": "^21.2.0", + "@angular/platform-browser": "^21.2.0", + "@angular/platform-server": "^21.2.0", + "@angular/router": "^21.2.0", + "@angular/ssr": "^21.2.2", + "express": "^5.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular/build": "^21.2.2", + "@angular/cli": "^21.2.2", + "@angular/compiler-cli": "^21.2.0", + "@types/express": "^5.0.1", + "@types/node": "^20.17.19", + "jsdom": "^28.0.0", + "prettier": "^3.8.1", + "typescript": "~5.9.2", + "vitest": "^4.0.8" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.31", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@algolia/abtesting": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.14.1.tgz", + "integrity": "sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.48.1.tgz", + "integrity": "sha512-LV5qCJdj+/m9I+Aj91o+glYszrzd7CX6NgKaYdTOj4+tUYfbS62pwYgUfZprYNayhkQpVFcrW8x8ZlIHpS23Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.48.1.tgz", + "integrity": "sha512-/AVoMqHhPm14CcHq7mwB+bUJbfCv+jrxlNvRjXAuO+TQa+V37N8k1b0ijaRBPdmSjULMd8KtJbQyUyabXOu6Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.48.1.tgz", + "integrity": "sha512-VXO+qu2Ep6ota28ktvBm3sG53wUHS2n7bgLWmce5jTskdlCD0/JrV4tnBm1l7qpla1CeoQb8D7ShFhad+UoSOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.48.1.tgz", + "integrity": "sha512-zl+Qyb0nLg+Y5YvKp1Ij+u9OaPaKg2/EPzTwKNiVyOHnQJlFxmXyUZL1EInczAZsEY8hVpPCLtNfhMhfxluXKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.48.1.tgz", + "integrity": "sha512-r89Qf9Oo9mKWQXumRu/1LtvVJAmEDpn8mHZMc485pRfQUMAwSSrsnaw1tQ3sszqzEgAr1c7rw6fjBI+zrAXTOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.48.1.tgz", + "integrity": "sha512-TPKNPKfghKG/bMSc7mQYD9HxHRUkBZA4q1PEmHgICaSeHQscGqL4wBrKkhfPlDV1uYBKW02pbFMUhsOt7p4ZpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.48.1.tgz", + "integrity": "sha512-4Fu7dnzQyQmMFknYwTiN/HxPbH4DyxvQ1m+IxpPp5oslOgz8m6PG5qhiGbqJzH4HiT1I58ecDiCAC716UyVA8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.48.1.tgz", + "integrity": "sha512-/RFq3TqtXDUUawwic/A9xylA2P3LDMO8dNhphHAUOU51b1ZLHrmZ6YYJm3df1APz7xLY1aht6okCQf+/vmrV9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.48.1.tgz", + "integrity": "sha512-Of0jTeAZRyRhC7XzDSjJef0aBkgRcvRAaw0ooYRlOw57APii7lZdq+layuNdeL72BRq1snaJhoMMwkmLIpJScw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.48.1.tgz", + "integrity": "sha512-bE7JcpFXzxF5zHwj/vkl2eiCBvyR1zQ7aoUdO+GDXxGp0DGw7nI0p8Xj6u8VmRQ+RDuPcICFQcCwRIJT5tDJFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.48.1.tgz", + "integrity": "sha512-MK3wZ2koLDnvH/AmqIF1EKbJlhRS5j74OZGkLpxI4rYvNi9Jn/C7vb5DytBnQ4KUWts7QsmbdwHkxY5txQHXVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.48.1.tgz", + "integrity": "sha512-2oDT43Y5HWRSIQMPQI4tA/W+TN/N2tjggZCUsqQV440kxzzoPGsvv9QP1GhQ4CoDa+yn6ygUsGp6Dr+a9sPPSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.48.1.tgz", + "integrity": "sha512-xcaCqbhupVWhuBP1nwbk1XNvwrGljozutEiLx06mvqDf3o8cHyEgQSHS4fKJM+UAggaWVnnFW+Nne5aQ8SUJXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1" + }, + "engines": { + "node": ">= 14.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/@angular-devkit/architect": { + "version": "0.2102.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.2.tgz", + "integrity": "sha512-CDvFtXwyBtMRkTQnm+LfBNLL0yLV8ZGskrM1T6VkcGwXGFDott1FxUdj96ViodYsYL5fbJr0MNA6TlLcanV3kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.2", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.2.tgz", + "integrity": "sha512-xUeKGe4BDQpkz0E6fnAPIJXE0y0nqtap0KhJIBhvN7xi3NenIzTmoi6T9Yv5OOBUdLZbOm4SOel8MhdXiIBpAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.18.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.2.tgz", + "integrity": "sha512-CCeyQxGUq+oyGnHd7PfcYIVbj9pRnqjQq0rAojoAqs1BJdtInx9weLBCLy+AjM3NHePeZrnwm+wEVr8apED8kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.2", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.21", + "ora": "9.3.0", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/build": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.2.tgz", + "integrity": "sha512-Vq2eIneNxzhHm1MwEmRqEJDwHU9ODfSRDaMWwtysGMhpoMQmLdfTqkQDmkC2qVUr8mV8Z1i5I+oe5ZJaMr/PlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2102.2", + "@babel/core": "7.29.0", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.21", + "@vitejs/plugin-basic-ssl": "2.1.4", + "beasties": "0.4.1", + "browserslist": "^4.26.0", + "esbuild": "0.27.3", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "magic-string": "0.30.21", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.4", + "rolldown": "1.0.0-rc.4", + "sass": "1.97.3", + "semver": "7.7.4", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.15", + "undici": "7.22.0", + "vite": "7.3.1", + "watchpack": "2.5.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.5.1" + }, + "peerDependencies": { + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/localize": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-server": "^21.0.0", + "@angular/service-worker": "^21.0.0", + "@angular/ssr": "^21.2.2", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^21.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.9 <6.0", + "vitest": "^4.0.8" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@angular/cli": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.2.tgz", + "integrity": "sha512-eZo8/qX+ZIpIWc0CN+cCX13Lbgi/031wAp8DRVhDDO6SMVtcr/ObOQ2S16+pQdOMXxiG3vby6IhzJuz9WACzMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2102.2", + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", + "@inquirer/prompts": "7.10.1", + "@listr2/prompt-adapter-inquirer": "3.0.5", + "@modelcontextprotocol/sdk": "1.26.0", + "@schematics/angular": "21.2.2", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.48.1", + "ini": "6.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "npm-package-arg": "13.0.2", + "pacote": "21.3.1", + "parse5-html-rewriting-stream": "8.0.0", + "semver": "7.7.4", + "yargs": "18.0.0", + "zod": "4.3.6" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.3.tgz", + "integrity": "sha512-GjUaAklmhBF98d5ctRLg7v4ZfDVIy1XXB0MBbnDt9HKz9DWXLq9kmzJIBjR703AjE4WzK4Br+gcYD6RAzrdzAA==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "21.2.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.3.tgz", + "integrity": "sha512-Jht+xHTV+fDAILo5mFO4uzIMxZNm4uGi9Akwyd85mn6Dg3eu3csY5aZrCE6QtvjCK4zjfrOeQ2LOfWH7koI3uQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.3.tgz", + "integrity": "sha512-NIdwUNdglSPE9vZEb+vBJ+LY2C0tNW+zr4+UQg6gi/uiziauX9iq069UNPARpbM08kjyldtFBCdjvby5C6sl/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "7.29.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.2.3", + "typescript": ">=5.9 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/core": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.3.tgz", + "integrity": "sha512-jc+FDbtKVPtWJaW4sk9/iAIqcAxgOhVx5IwgOS9DqD/T3cSscgf4u9zHfLHYPnh/TOYGUjdgl++dp8cSqTrvLw==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.2.3", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@angular/forms": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.3.tgz", + "integrity": "sha512-esBgTC/0ujdVqRhn09qn1ombmGgO6pvEXVrgqILOFeDmxOQH7ZEb0tz3p3wNgpzxPwxWpqt3ztTatRNHfoHiwg==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.2.3", + "@angular/core": "21.2.3", + "@angular/platform-browser": "21.2.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.3.tgz", + "integrity": "sha512-qjlEiswQcufrV5dbvo5o47L4FiYFf5d7Y7hNcj4/BK6o531FUUpagt47mGuwFe3D/9+ygZrz2/uxWZK+4E1gQg==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/animations": "21.2.3", + "@angular/common": "21.2.3", + "@angular/core": "21.2.3" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-server": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-21.2.3.tgz", + "integrity": "sha512-2Pflo9k8hFjDETyI0SMVYrY+gRUZCJLPCVAQhrazMD1TbK8U52jRIOv28BlQwBbZAVRI5DG2ek6h43BgGz1GVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0", + "xhr2": "^0.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.2.3", + "@angular/compiler": "21.2.3", + "@angular/core": "21.2.3", + "@angular/platform-browser": "21.2.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/router": { + "version": "21.2.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.3.tgz", + "integrity": "sha512-vSQovp+3u7HDn/nbKRIUEtY5ztCuyX2t2gQKGhYeXhelETJXaLWOoRntXZ0s95l0harGxFUU1pnCX8mqsrVFbw==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.2.3", + "@angular/core": "21.2.3", + "@angular/platform-browser": "21.2.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/ssr": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-21.2.2.tgz", + "integrity": "sha512-ZEdE0G3+v0JCtSxpBynSlGImXi47HwWGqANtfHcOJUdf6GGKzSzoyliT1+7Lu2TR4TyCjtDq/RQH5bETr3zghA==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/platform-server": "^21.0.0", + "@angular/router": "^21.0.0" + }, + "peerDependenciesMeta": { + "@angular/platform-server": { + "optional": true + } + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz", + "integrity": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^3.1.1", + "@csstools/css-color-parser": "^4.0.2", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.6" + } + }, + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "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.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "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-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz", + "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", + "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.1.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.0.tgz", + "integrity": "sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0" + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", + "integrity": "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@gar/promise-retry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.2.tgz", + "integrity": "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "^0.13.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@hono/node-server": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", + "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", + "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.5" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.1.tgz", + "integrity": "sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.1.tgz", + "integrity": "sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.1.tgz", + "integrity": "sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.1.tgz", + "integrity": "sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.1.tgz", + "integrity": "sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.1.tgz", + "integrity": "sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.1.tgz", + "integrity": "sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", + "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "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/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", + "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", + "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", + "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.113.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.113.0.tgz", + "integrity": "sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.4.tgz", + "integrity": "sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.4.tgz", + "integrity": "sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz", + "integrity": "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.2.tgz", + "integrity": "sha512-Ywa6HDtX7TRBQZTVMMnxX3Mk7yVnG8KtSFaXWrkx779+q8tqYdBwNwAqbNd4Zatr1GccKaz9xcptHJta5+DTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.1.0.tgz", + "integrity": "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.0.tgz", + "integrity": "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.3", + "proc-log": "^6.1.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.1.tgz", + "integrity": "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.0.tgz", + "integrity": "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", + "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "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/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz", + "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "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/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.4.tgz", + "integrity": "sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "chai": "^6.2.1", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.18", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.18", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "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/algoliasearch": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.48.1.tgz", + "integrity": "sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.14.1", + "@algolia/client-abtesting": "5.48.1", + "@algolia/client-analytics": "5.48.1", + "@algolia/client-common": "5.48.1", + "@algolia/client-insights": "5.48.1", + "@algolia/client-personalization": "5.48.1", + "@algolia/client-query-suggestions": "5.48.1", + "@algolia/client-search": "5.48.1", + "@algolia/ingestion": "1.48.1", + "@algolia/monitoring": "1.48.1", + "@algolia/recommend": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/beasties": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.1.tgz", + "integrity": "sha512-2Imdcw3LznDuxAbJM26RHniOLAzE6WgrK8OuvVXCQtNBS8rsnD9zsSEa3fHl4hHpUY7BYTlrpvtPVbvu9G6neg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3", + "postcss-safe-parser": "^7.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "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", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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/cacache": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001777", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz", + "integrity": "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==", + "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/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "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/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "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": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "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/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/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": "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.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssstyle": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cssstyle/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "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/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "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.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "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/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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.307", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", + "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "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/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/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "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/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "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/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.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/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "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-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.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/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-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "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/hono": { + "version": "4.12.7", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.7.tgz", + "integrity": "sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "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.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true, + "license": "MIT" + }, + "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/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/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "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-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", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "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/jose": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.1.tgz", + "integrity": "sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "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/jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.21.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.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/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "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/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/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.1.tgz", + "integrity": "sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@harperfast/extended-iterable": "^1.0.3", + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.5.1", + "@lmdb/lmdb-darwin-x64": "3.5.1", + "@lmdb/lmdb-linux-arm": "3.5.1", + "@lmdb/lmdb-linux-arm64": "3.5.1", + "@lmdb/lmdb-linux-x64": "3.5.1", + "@lmdb/lmdb-win32-arm64": "3.5.1", + "@lmdb/lmdb-win32-x64": "3.5.1" + } + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "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.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-fetch-happen": { + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.4.tgz", + "integrity": "sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "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": "5.0.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", + "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", + "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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/msgpackr": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.9.tgz", + "integrity": "sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==", + "dev": true, + "license": "MIT", + "optional": true, + "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/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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", + "optional": true + }, + "node_modules/node-gyp": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", + "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "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", + "optional": true, + "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/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-bundled": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", + "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "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==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "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==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", + "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.1", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.3.1.tgz", + "integrity": "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?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-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-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/piscina": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.4.tgz", + "integrity": "sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "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", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "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/promise-retry/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/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/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/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "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/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/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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/rolldown": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.4.tgz", + "integrity": "sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.113.0", + "@rolldown/pluginutils": "1.0.0-rc.4" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-x64": "1.0.0-rc.4", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.4", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.4", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.4", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.4", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.4", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.4" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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/sass": { + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", + "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "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": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.0.tgz", + "integrity": "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.0", + "@sigstore/tuf": "^4.0.1", + "@sigstore/verify": "^3.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "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/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "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-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": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stdin-discarder": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", + "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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/tar": { + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.0.25", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.25.tgz", + "integrity": "sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.25" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.25", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.25.tgz", + "integrity": "sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==", + "dev": true, + "license": "MIT" + }, + "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": "6.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "peer": true + }, + "node_modules/tuf-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", + "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz", + "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/unique-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.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.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "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.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.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/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.10.0", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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", + "optional": true + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "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/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/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/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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xhr2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", + "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "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": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..71172b3 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,38 @@ +{ + "name": "frontend", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "serve:ssr:frontend": "node dist/frontend/server/server.mjs" + }, + "private": true, + "packageManager": "npm@11.6.2", + "dependencies": { + "@angular/common": "^21.2.0", + "@angular/compiler": "^21.2.0", + "@angular/core": "^21.2.0", + "@angular/forms": "^21.2.0", + "@angular/platform-browser": "^21.2.0", + "@angular/platform-server": "^21.2.0", + "@angular/router": "^21.2.0", + "@angular/ssr": "^21.2.2", + "express": "^5.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular/build": "^21.2.2", + "@angular/cli": "^21.2.2", + "@angular/compiler-cli": "^21.2.0", + "@types/express": "^5.0.1", + "@types/node": "^20.17.19", + "jsdom": "^28.0.0", + "prettier": "^3.8.1", + "typescript": "~5.9.2", + "vitest": "^4.0.8" + } +} \ No newline at end of file diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/frontend/src/app/app.config.server.ts b/frontend/src/app/app.config.server.ts new file mode 100644 index 0000000..41031f1 --- /dev/null +++ b/frontend/src/app/app.config.server.ts @@ -0,0 +1,12 @@ +import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; +import { provideServerRendering, withRoutes } from '@angular/ssr'; +import { appConfig } from './app.config'; +import { serverRoutes } from './app.routes.server'; + +const serverConfig: ApplicationConfig = { + providers: [ + provideServerRendering(withRoutes(serverRoutes)) + ] +}; + +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts new file mode 100644 index 0000000..7bdf21b --- /dev/null +++ b/frontend/src/app/app.config.ts @@ -0,0 +1,14 @@ +import { ApplicationConfig, provideBrowserGlobalErrorListeners } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { provideHttpClient } from '@angular/common/http'; + +import { routes } from './app.routes'; +import { provideClientHydration, withEventReplay } from '@angular/platform-browser'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideBrowserGlobalErrorListeners(), + provideRouter(routes), provideClientHydration(withEventReplay()), + provideHttpClient() + ] +}; diff --git a/frontend/src/app/app.css b/frontend/src/app/app.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/app.html b/frontend/src/app/app.html new file mode 100644 index 0000000..e7402fd --- /dev/null +++ b/frontend/src/app/app.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/app/app.routes.server.ts b/frontend/src/app/app.routes.server.ts new file mode 100644 index 0000000..ffd37b1 --- /dev/null +++ b/frontend/src/app/app.routes.server.ts @@ -0,0 +1,8 @@ +import { RenderMode, ServerRoute } from '@angular/ssr'; + +export const serverRoutes: ServerRoute[] = [ + { + path: '**', + renderMode: RenderMode.Prerender + } +]; diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts new file mode 100644 index 0000000..089cb3f --- /dev/null +++ b/frontend/src/app/app.routes.ts @@ -0,0 +1,9 @@ +import { Routes } from '@angular/router'; +import { PersonListComponent } from './components/person-list/person-list'; +import { PersonFormComponent } from './components/person-form/person-form'; + +export const routes: Routes = [ + { path: '', component: PersonListComponent }, + { path: 'person/new', component: PersonFormComponent }, + { path: 'person/edit/:id', component: PersonFormComponent } +]; diff --git a/frontend/src/app/app.spec.ts b/frontend/src/app/app.spec.ts new file mode 100644 index 0000000..f13c264 --- /dev/null +++ b/frontend/src/app/app.spec.ts @@ -0,0 +1,23 @@ +import { TestBed } from '@angular/core/testing'; +import { App } from './app'; + +describe('App', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [App], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(App); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it('should render title', async () => { + const fixture = TestBed.createComponent(App); + await fixture.whenStable(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, frontend'); + }); +}); diff --git a/frontend/src/app/app.ts b/frontend/src/app/app.ts new file mode 100644 index 0000000..a9c4dac --- /dev/null +++ b/frontend/src/app/app.ts @@ -0,0 +1,15 @@ +import { Component, signal } from '@angular/core'; +import { PersonFormComponent } from './components/person-form/person-form'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [RouterOutlet, PersonFormComponent], + template: '', + templateUrl: './app.html', + styleUrl: './app.css' +}) +export class App { + protected readonly title = signal('frontend'); +} diff --git a/frontend/src/app/components/person-form/person-form.css b/frontend/src/app/components/person-form/person-form.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/components/person-form/person-form.html b/frontend/src/app/components/person-form/person-form.html new file mode 100644 index 0000000..b731d5c --- /dev/null +++ b/frontend/src/app/components/person-form/person-form.html @@ -0,0 +1,10 @@ +
+

Nuevo Registro

+ + + + + + + +
\ No newline at end of file diff --git a/frontend/src/app/components/person-form/person-form.spec.ts b/frontend/src/app/components/person-form/person-form.spec.ts new file mode 100644 index 0000000..8dff3f5 --- /dev/null +++ b/frontend/src/app/components/person-form/person-form.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PersonForm } from './person-form'; + +describe('PersonForm', () => { + let component: PersonForm; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PersonForm], + }).compileComponents(); + + fixture = TestBed.createComponent(PersonForm); + component = fixture.componentInstance; + await fixture.whenStable(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/person-form/person-form.ts b/frontend/src/app/components/person-form/person-form.ts new file mode 100644 index 0000000..eb27f44 --- /dev/null +++ b/frontend/src/app/components/person-form/person-form.ts @@ -0,0 +1,71 @@ +import { Component, OnInit } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; +import { ActivatedRoute, Router } from '@angular/router'; +import { PersonService } from '../../services/person.service'; + +@Component({ + selector: 'app-person-form', + standalone: true, + imports: [FormsModule, CommonModule], + templateUrl: './person-form.html', + styleUrls: ['./person-form.css'] +}) +export class PersonFormComponent implements OnInit { + idToEdit: number | null = null; + isEdit = false; + + person = { + nombre: '', + apellido: '', + fechaNacimiento: '', + puesto: '', + sueldo: 0 + }; + + constructor( + private personService: PersonService, + private router: Router, + private route: ActivatedRoute + ) {} + + ngOnInit() { + const id = this.route.snapshot.params['id']; + if (id) { + this.isEdit = true; + this.idToEdit = Number(id); + this.personService.getPersonById(this.idToEdit).subscribe({ + next: (res) => { + if (res.status) { + this.person = res.data; + if (this.person.fechaNacimiento) { + this.person.fechaNacimiento = this.person.fechaNacimiento.split('T')[0]; + } + } + }, + error: (err) => console.error('Error al cargar persona', err) + }); + } + } + + onSave() { + const action = this.isEdit && this.idToEdit !== null + ? this.personService.updatePerson(this.idToEdit, this.person) + : this.personService.createPerson(this.person); + + action.subscribe({ + next: (res) => { + alert(res.msg || "Operación realizada con éxito"); + this.router.navigate(['/']); + }, + error: (err) => { + console.error('Error en la operación', err); + alert("Hubo un error al procesar la solicitud."); + } + }); + } + + cancel() { + this.router.navigate(['/']); + } +} \ No newline at end of file diff --git a/frontend/src/app/components/person-list/person-list.css b/frontend/src/app/components/person-list/person-list.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/components/person-list/person-list.html b/frontend/src/app/components/person-list/person-list.html new file mode 100644 index 0000000..56079a2 --- /dev/null +++ b/frontend/src/app/components/person-list/person-list.html @@ -0,0 +1,29 @@ +
+
+

Listado de Personas

+ +
+ + + + + + + + + + + + + + + + + + + +
NombreApellidoPuestoSueldoAcciones
{{p.nombre}}{{p.apellido}}{{p.puesto}}{{p.sueldo | currency}} + + +
+
\ No newline at end of file diff --git a/frontend/src/app/components/person-list/person-list.ts b/frontend/src/app/components/person-list/person-list.ts new file mode 100644 index 0000000..bb2a0ae --- /dev/null +++ b/frontend/src/app/components/person-list/person-list.ts @@ -0,0 +1,33 @@ +import { Component, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterModule, Router } from '@angular/router'; +import { PersonService } from '../../services/person.service'; + +@Component({ + selector: 'app-person-list', + standalone: true, + imports: [CommonModule, RouterModule], + templateUrl: './person-list.html', + styleUrls: ['./person-list.css'] +}) +export class PersonListComponent implements OnInit { + people: any[] = []; + + constructor(private personService: PersonService, private router: Router) {} + + ngOnInit() { this.load(); } + + load() { + this.personService.getPeople().subscribe(res => this.people = res.data); + } + + delete(id: number) { + if(confirm('¿Seguro?')) { + this.personService.deletePerson(id).subscribe(() => this.load()); + } + } + + goToCreate() { this.router.navigate(['/person/new']); } + + goToEdit(id: number) { this.router.navigate(['/person/edit', id]); } +} \ No newline at end of file diff --git a/frontend/src/app/services/person.service.ts b/frontend/src/app/services/person.service.ts new file mode 100644 index 0000000..e605b24 --- /dev/null +++ b/frontend/src/app/services/person.service.ts @@ -0,0 +1,30 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; + +@Injectable({ providedIn: 'root' }) +export class PersonService { + private API_URL = 'http://localhost:8080/api/person'; + + constructor(private http: HttpClient) { } + + getPeople(): Observable { + return this.http.get(this.API_URL); + } + + getPersonById(id: number): Observable { + return this.http.get(`${this.API_URL}/${id}`); + } + + createPerson(person: any): Observable { + return this.http.post(this.API_URL, person); + } + + updatePerson(id: number, person: any): Observable { + return this.http.put(`${this.API_URL}/${id}`, person); + } + + deletePerson(id: number): Observable { + return this.http.delete(`${this.API_URL}/${id}`); + } +} \ No newline at end of file diff --git a/frontend/src/app/services/person.spec.ts b/frontend/src/app/services/person.spec.ts new file mode 100644 index 0000000..413ed32 --- /dev/null +++ b/frontend/src/app/services/person.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { Person } from './person'; + +describe('Person', () => { + let service: Person; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(Person); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/services/person.ts b/frontend/src/app/services/person.ts new file mode 100644 index 0000000..e7502eb --- /dev/null +++ b/frontend/src/app/services/person.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class Person {} diff --git a/frontend/src/index.html b/frontend/src/index.html new file mode 100644 index 0000000..3af61ec --- /dev/null +++ b/frontend/src/index.html @@ -0,0 +1,13 @@ + + + + + Frontend + + + + + + + + diff --git a/frontend/src/main.server.ts b/frontend/src/main.server.ts new file mode 100644 index 0000000..723e001 --- /dev/null +++ b/frontend/src/main.server.ts @@ -0,0 +1,8 @@ +import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser'; +import { App } from './app/app'; +import { config } from './app/app.config.server'; + +const bootstrap = (context: BootstrapContext) => + bootstrapApplication(App, config, context); + +export default bootstrap; diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..5df75f9 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { App } from './app/app'; + +bootstrapApplication(App, appConfig) + .catch((err) => console.error(err)); diff --git a/frontend/src/server.ts b/frontend/src/server.ts new file mode 100644 index 0000000..4bf0631 --- /dev/null +++ b/frontend/src/server.ts @@ -0,0 +1,68 @@ +import { + AngularNodeAppEngine, + createNodeRequestHandler, + isMainModule, + writeResponseToNodeResponse, +} from '@angular/ssr/node'; +import express from 'express'; +import { join } from 'node:path'; + +const browserDistFolder = join(import.meta.dirname, '../browser'); + +const app = express(); +const angularApp = new AngularNodeAppEngine(); + +/** + * Example Express Rest API endpoints can be defined here. + * Uncomment and define endpoints as necessary. + * + * Example: + * ```ts + * app.get('/api/{*splat}', (req, res) => { + * // Handle API request + * }); + * ``` + */ + +/** + * Serve static files from /browser + */ +app.use( + express.static(browserDistFolder, { + maxAge: '1y', + index: false, + redirect: false, + }), +); + +/** + * Handle all other requests by rendering the Angular application. + */ +app.use((req, res, next) => { + angularApp + .handle(req) + .then((response) => + response ? writeResponseToNodeResponse(response, res) : next(), + ) + .catch(next); +}); + +/** + * Start the server if this module is the main entry point, or it is ran via PM2. + * The server listens on the port defined by the `PORT` environment variable, or defaults to 4000. + */ +if (isMainModule(import.meta.url) || process.env['pm_id']) { + const port = process.env['PORT'] || 4000; + app.listen(port, (error) => { + if (error) { + throw error; + } + + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +/** + * Request handler used by the Angular CLI (for dev-server and during build) or Firebase Cloud Functions. + */ +export const reqHandler = createNodeRequestHandler(app); diff --git a/frontend/src/styles.css b/frontend/src/styles.css new file mode 100644 index 0000000..90d4ee0 --- /dev/null +++ b/frontend/src/styles.css @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..ef19921 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,17 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [ + "node" + ] + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "src/**/*.spec.ts" + ] +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..2ab7442 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "ES2022", + "module": "preserve" + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + }, + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/frontend/tsconfig.spec.json b/frontend/tsconfig.spec.json new file mode 100644 index 0000000..d383706 --- /dev/null +++ b/frontend/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "vitest/globals" + ] + }, + "include": [ + "src/**/*.d.ts", + "src/**/*.spec.ts" + ] +} From 34d90b2a366eb12dc01bf3625117689778e4e98d Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Wed, 11 Mar 2026 22:59:46 -0300 Subject: [PATCH 4/9] feat(frontend): complete routing architecture and full CRUD logic - Unified create/edit logic in PersonFormComponent - Fixed strict type errors and integrated RouterOutlet - Added navigation flow and 'Cancel' functionality --- frontend/src/app/app.html | 2 +- frontend/src/app/app.ts | 3 +-- frontend/src/app/components/person-form/person-form.html | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/app.html b/frontend/src/app/app.html index e7402fd..90c6b64 100644 --- a/frontend/src/app/app.html +++ b/frontend/src/app/app.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/app/app.ts b/frontend/src/app/app.ts index a9c4dac..3138962 100644 --- a/frontend/src/app/app.ts +++ b/frontend/src/app/app.ts @@ -5,8 +5,7 @@ import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, - imports: [RouterOutlet, PersonFormComponent], - template: '', + imports: [RouterOutlet], templateUrl: './app.html', styleUrl: './app.css' }) diff --git a/frontend/src/app/components/person-form/person-form.html b/frontend/src/app/components/person-form/person-form.html index b731d5c..d315ae2 100644 --- a/frontend/src/app/components/person-form/person-form.html +++ b/frontend/src/app/components/person-form/person-form.html @@ -6,5 +6,6 @@

Nuevo Registro

- + + \ No newline at end of file From 37d60b5bcb688d4065ba9e98867f8d6c910ff506 Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Thu, 12 Mar 2026 10:41:57 -0300 Subject: [PATCH 5/9] fix: force change detection on async data load for edit form and list view --- .../app/components/person-form/person-form.ts | 31 +++++++++++-------- .../app/components/person-list/person-list.ts | 14 ++++++--- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/frontend/src/app/components/person-form/person-form.ts b/frontend/src/app/components/person-form/person-form.ts index eb27f44..dc336e4 100644 --- a/frontend/src/app/components/person-form/person-form.ts +++ b/frontend/src/app/components/person-form/person-form.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { CommonModule } from '@angular/common'; import { ActivatedRoute, Router } from '@angular/router'; @@ -14,8 +14,9 @@ import { PersonService } from '../../services/person.service'; export class PersonFormComponent implements OnInit { idToEdit: number | null = null; isEdit = false; - - person = { + + person: any = { + id: null, nombre: '', apellido: '', fechaNacimiento: '', @@ -26,8 +27,9 @@ export class PersonFormComponent implements OnInit { constructor( private personService: PersonService, private router: Router, - private route: ActivatedRoute - ) {} + private route: ActivatedRoute, + private cdr: ChangeDetectorRef + ) { } ngOnInit() { const id = this.route.snapshot.params['id']; @@ -36,11 +38,12 @@ export class PersonFormComponent implements OnInit { this.idToEdit = Number(id); this.personService.getPersonById(this.idToEdit).subscribe({ next: (res) => { - if (res.status) { + if (res.status && res.data) { this.person = res.data; - if (this.person.fechaNacimiento) { - this.person.fechaNacimiento = this.person.fechaNacimiento.split('T')[0]; - } + if (this.person.fechaNacimiento) { + this.person.fechaNacimiento = this.person.fechaNacimiento.split('T')[0]; + } + this.cdr.detectChanges() } }, error: (err) => console.error('Error al cargar persona', err) @@ -50,13 +53,15 @@ export class PersonFormComponent implements OnInit { onSave() { const action = this.isEdit && this.idToEdit !== null - ? this.personService.updatePerson(this.idToEdit, this.person) + ? this.personService.updatePerson(this.idToEdit, this.person) : this.personService.createPerson(this.person); action.subscribe({ next: (res) => { alert(res.msg || "Operación realizada con éxito"); - this.router.navigate(['/']); + this.router.navigate(['/']).then(() => { + window.location.reload(); + }); }, error: (err) => { console.error('Error en la operación', err); @@ -65,7 +70,7 @@ export class PersonFormComponent implements OnInit { }); } - cancel() { - this.router.navigate(['/']); + cancel() { + this.router.navigate(['/']); } } \ No newline at end of file diff --git a/frontend/src/app/components/person-list/person-list.ts b/frontend/src/app/components/person-list/person-list.ts index bb2a0ae..791e42a 100644 --- a/frontend/src/app/components/person-list/person-list.ts +++ b/frontend/src/app/components/person-list/person-list.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule, Router } from '@angular/router'; import { PersonService } from '../../services/person.service'; @@ -13,13 +13,19 @@ import { PersonService } from '../../services/person.service'; export class PersonListComponent implements OnInit { people: any[] = []; - constructor(private personService: PersonService, private router: Router) {} + constructor(private personService: PersonService, private router: Router, private cdr: ChangeDetectorRef) {} ngOnInit() { this.load(); } load() { - this.personService.getPeople().subscribe(res => this.people = res.data); - } + this.personService.getPeople().subscribe({ + next: (res) => { + this.people = [...res.data]; + this.cdr.detectChanges() + }, + error: (err) => console.error("Error cargando lista", err) + }); +} delete(id: number) { if(confirm('¿Seguro?')) { From 3b095fdf29ca9c8d02084314e937480550fc0e40 Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Thu, 12 Mar 2026 10:54:03 -0300 Subject: [PATCH 6/9] remove backend folder from frontend branch --- backend/.gitattributes | 2 - backend/.gitignore | 33 -- backend/.mvn/wrapper/maven-wrapper.properties | 3 - backend/mvnw | 295 ------------------ backend/mvnw.cmd | 189 ----------- backend/pom.xml | 66 ---- .../examen/backend/BackendApplication.java | 13 - .../backend/controller/PersonController.java | 32 -- .../com/examen/backend/dto/ResponseDTO.java | 13 - .../java/com/examen/backend/model/Person.java | 77 ----- .../backend/repository/PersonRepository.java | 7 - .../src/main/resources/application.properties | 8 - .../backend/BackendApplicationTests.java | 13 - 13 files changed, 751 deletions(-) delete mode 100644 backend/.gitattributes delete mode 100644 backend/.gitignore delete mode 100644 backend/.mvn/wrapper/maven-wrapper.properties delete mode 100755 backend/mvnw delete mode 100644 backend/mvnw.cmd delete mode 100644 backend/pom.xml delete mode 100644 backend/src/main/java/com/examen/backend/BackendApplication.java delete mode 100644 backend/src/main/java/com/examen/backend/controller/PersonController.java delete mode 100644 backend/src/main/java/com/examen/backend/dto/ResponseDTO.java delete mode 100644 backend/src/main/java/com/examen/backend/model/Person.java delete mode 100644 backend/src/main/java/com/examen/backend/repository/PersonRepository.java delete mode 100644 backend/src/main/resources/application.properties delete mode 100644 backend/src/test/java/com/examen/backend/BackendApplicationTests.java diff --git a/backend/.gitattributes b/backend/.gitattributes deleted file mode 100644 index 3b41682..0000000 --- a/backend/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -/mvnw text eol=lf -*.cmd text eol=crlf diff --git a/backend/.gitignore b/backend/.gitignore deleted file mode 100644 index 667aaef..0000000 --- a/backend/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/backend/.mvn/wrapper/maven-wrapper.properties b/backend/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 8dea6c2..0000000 --- a/backend/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,3 +0,0 @@ -wrapperVersion=3.3.4 -distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip diff --git a/backend/mvnw b/backend/mvnw deleted file mode 100755 index bd8896b..0000000 --- a/backend/mvnw +++ /dev/null @@ -1,295 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.4 -# -# Optional ENV vars -# ----------------- -# JAVA_HOME - location of a JDK home dir, required when download maven via java source -# MVNW_REPOURL - repo url base for downloading maven distribution -# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output -# ---------------------------------------------------------------------------- - -set -euf -[ "${MVNW_VERBOSE-}" != debug ] || set -x - -# OS specific support. -native_path() { printf %s\\n "$1"; } -case "$(uname)" in -CYGWIN* | MINGW*) - [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" - native_path() { cygpath --path --windows "$1"; } - ;; -esac - -# set JAVACMD and JAVACCMD -set_java_home() { - # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched - if [ -n "${JAVA_HOME-}" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - JAVACCMD="$JAVA_HOME/jre/sh/javac" - else - JAVACMD="$JAVA_HOME/bin/java" - JAVACCMD="$JAVA_HOME/bin/javac" - - if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then - echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 - echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 - return 1 - fi - fi - else - JAVACMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v java - )" || : - JAVACCMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v javac - )" || : - - if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then - echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 - return 1 - fi - fi -} - -# hash string like Java String::hashCode -hash_string() { - str="${1:-}" h=0 - while [ -n "$str" ]; do - char="${str%"${str#?}"}" - h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) - str="${str#?}" - done - printf %x\\n $h -} - -verbose() { :; } -[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - -die() { - printf %s\\n "$1" >&2 - exit 1 -} - -trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} - -scriptDir="$(dirname "$0")" -scriptName="$(basename "$0")" - -# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties -while IFS="=" read -r key value; do - case "${key-}" in - distributionUrl) distributionUrl=$(trim "${value-}") ;; - distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; - esac -done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" - -case "${distributionUrl##*/}" in -maven-mvnd-*bin.*) - MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ - case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in - *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; - :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; - :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; - :Linux*x86_64*) distributionPlatform=linux-amd64 ;; - *) - echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 - distributionPlatform=linux-amd64 - ;; - esac - distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" - ;; -maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; -esac - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" -distributionUrlName="${distributionUrl##*/}" -distributionUrlNameMain="${distributionUrlName%.*}" -distributionUrlNameMain="${distributionUrlNameMain%-bin}" -MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" -MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" - -exec_maven() { - unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : - exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" -} - -if [ -d "$MAVEN_HOME" ]; then - verbose "found existing MAVEN_HOME at $MAVEN_HOME" - exec_maven "$@" -fi - -case "${distributionUrl-}" in -*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; -*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; -esac - -# prepare tmp dir -if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then - clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } - trap clean HUP INT TERM EXIT -else - die "cannot create temp dir" -fi - -mkdir -p -- "${MAVEN_HOME%/*}" - -# Download and Install Apache Maven -verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -verbose "Downloading from: $distributionUrl" -verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -# select .zip or .tar.gz -if ! command -v unzip >/dev/null; then - distributionUrl="${distributionUrl%.zip}.tar.gz" - distributionUrlName="${distributionUrl##*/}" -fi - -# verbose opt -__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' -[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v - -# normalize http auth -case "${MVNW_PASSWORD:+has-password}" in -'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; -has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; -esac - -if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then - verbose "Found wget ... using wget" - wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" -elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then - verbose "Found curl ... using curl" - curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" -elif set_java_home; then - verbose "Falling back to use Java to download" - javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" - targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" - cat >"$javaSource" <<-END - public class Downloader extends java.net.Authenticator - { - protected java.net.PasswordAuthentication getPasswordAuthentication() - { - return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); - } - public static void main( String[] args ) throws Exception - { - setDefault( new Downloader() ); - java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); - } - } - END - # For Cygwin/MinGW, switch paths to Windows format before running javac and java - verbose " - Compiling Downloader.java ..." - "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" - verbose " - Running Downloader.java ..." - "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" -fi - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -if [ -n "${distributionSha256Sum-}" ]; then - distributionSha256Result=false - if [ "$MVN_CMD" = mvnd.sh ]; then - echo "Checksum validation is not supported for maven-mvnd." >&2 - echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then - distributionSha256Result=true - fi - elif command -v shasum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 - echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - fi - if [ $distributionSha256Result = false ]; then - echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 - echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 - exit 1 - fi -fi - -# unzip and move -if command -v unzip >/dev/null; then - unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" -else - tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" -fi - -# Find the actual extracted directory name (handles snapshots where filename != directory name) -actualDistributionDir="" - -# First try the expected directory name (for regular distributions) -if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then - if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then - actualDistributionDir="$distributionUrlNameMain" - fi -fi - -# If not found, search for any directory with the Maven executable (for snapshots) -if [ -z "$actualDistributionDir" ]; then - # enable globbing to iterate over items - set +f - for dir in "$TMP_DOWNLOAD_DIR"/*; do - if [ -d "$dir" ]; then - if [ -f "$dir/bin/$MVN_CMD" ]; then - actualDistributionDir="$(basename "$dir")" - break - fi - fi - done - set -f -fi - -if [ -z "$actualDistributionDir" ]; then - verbose "Contents of $TMP_DOWNLOAD_DIR:" - verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" - die "Could not find Maven distribution directory in extracted archive" -fi - -verbose "Found extracted Maven distribution directory: $actualDistributionDir" -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" - -clean || : -exec_maven "$@" diff --git a/backend/mvnw.cmd b/backend/mvnw.cmd deleted file mode 100644 index 92450f9..0000000 --- a/backend/mvnw.cmd +++ /dev/null @@ -1,189 +0,0 @@ -<# : batch portion -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.3.4 -@REM -@REM Optional ENV vars -@REM MVNW_REPOURL - repo url base for downloading maven distribution -@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output -@REM ---------------------------------------------------------------------------- - -@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) -@SET __MVNW_CMD__= -@SET __MVNW_ERROR__= -@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% -@SET PSModulePath= -@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( - IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) -) -@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% -@SET __MVNW_PSMODULEP_SAVE= -@SET __MVNW_ARG0_NAME__= -@SET MVNW_USERNAME= -@SET MVNW_PASSWORD= -@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) -@echo Cannot start maven from wrapper >&2 && exit /b 1 -@GOTO :EOF -: end batch / begin powershell #> - -$ErrorActionPreference = "Stop" -if ($env:MVNW_VERBOSE -eq "true") { - $VerbosePreference = "Continue" -} - -# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties -$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl -if (!$distributionUrl) { - Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" -} - -switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { - "maven-mvnd-*" { - $USE_MVND = $true - $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" - $MVN_CMD = "mvnd.cmd" - break - } - default { - $USE_MVND = $false - $MVN_CMD = $script -replace '^mvnw','mvn' - break - } -} - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -if ($env:MVNW_REPOURL) { - $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } - $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" -} -$distributionUrlName = $distributionUrl -replace '^.*/','' -$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' - -$MAVEN_M2_PATH = "$HOME/.m2" -if ($env:MAVEN_USER_HOME) { - $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" -} - -if (-not (Test-Path -Path $MAVEN_M2_PATH)) { - New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null -} - -$MAVEN_WRAPPER_DISTS = $null -if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { - $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" -} else { - $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" -} - -$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" -$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' -$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" - -if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { - Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" - Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" - exit $? -} - -if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { - Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" -} - -# prepare tmp dir -$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile -$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" -$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null -trap { - if ($TMP_DOWNLOAD_DIR.Exists) { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } - } -} - -New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null - -# Download and Install Apache Maven -Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -Write-Verbose "Downloading from: $distributionUrl" -Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -$webclient = New-Object System.Net.WebClient -if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { - $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) -} -[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum -if ($distributionSha256Sum) { - if ($USE_MVND) { - Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." - } - Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash - if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { - Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." - } -} - -# unzip and move -Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null - -# Find the actual extracted directory name (handles snapshots where filename != directory name) -$actualDistributionDir = "" - -# First try the expected directory name (for regular distributions) -$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" -$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" -if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { - $actualDistributionDir = $distributionUrlNameMain -} - -# If not found, search for any directory with the Maven executable (for snapshots) -if (!$actualDistributionDir) { - Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { - $testPath = Join-Path $_.FullName "bin/$MVN_CMD" - if (Test-Path -Path $testPath -PathType Leaf) { - $actualDistributionDir = $_.Name - } - } -} - -if (!$actualDistributionDir) { - Write-Error "Could not find Maven distribution directory in extracted archive" -} - -Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" -Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null -try { - Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null -} catch { - if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { - Write-Error "fail to move MAVEN_HOME" - } -} finally { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } -} - -Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/backend/pom.xml b/backend/pom.xml deleted file mode 100644 index 965227b..0000000 --- a/backend/pom.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.7.18 - - - com.examen - backend - 0.0.1-SNAPSHOT - backend - Demo project for Spring Boot - - - - - - - - - - - - - - - 1.8 1.8 - 1.8 - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - - - - com.mysql - mysql-connector-j - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/backend/src/main/java/com/examen/backend/BackendApplication.java b/backend/src/main/java/com/examen/backend/BackendApplication.java deleted file mode 100644 index c02942d..0000000 --- a/backend/src/main/java/com/examen/backend/BackendApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.examen.backend; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class BackendApplication { - - public static void main(String[] args) { - SpringApplication.run(BackendApplication.class, args); - } - -} diff --git a/backend/src/main/java/com/examen/backend/controller/PersonController.java b/backend/src/main/java/com/examen/backend/controller/PersonController.java deleted file mode 100644 index 9f00ea3..0000000 --- a/backend/src/main/java/com/examen/backend/controller/PersonController.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.examen.backend.controller; - -import com.examen.backend.model.Person; -import com.examen.backend.repository.PersonRepository; -import com.examen.backend.dto.ResponseDTO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping("/api/person") -@CrossOrigin(origins = "*") -public class PersonController { - - @Autowired - private PersonRepository repo; - - @GetMapping - public ResponseDTO list() { - return new ResponseDTO(true, "Ok", repo.findAll()); - } - - @PostMapping - public ResponseDTO create(@RequestBody Person p) { - return new ResponseDTO(true, "Creado", repo.save(p)); - } - - @DeleteMapping("/{id}") - public ResponseDTO delete(@PathVariable Integer id) { - repo.deleteById(id); - return new ResponseDTO(true, "Eliminado", null); - } -} diff --git a/backend/src/main/java/com/examen/backend/dto/ResponseDTO.java b/backend/src/main/java/com/examen/backend/dto/ResponseDTO.java deleted file mode 100644 index 28e20d0..0000000 --- a/backend/src/main/java/com/examen/backend/dto/ResponseDTO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.examen.backend.dto; - -public class ResponseDTO { - public boolean status; - public String msg; - public Object data; - - public ResponseDTO(boolean status, String msg, Object data) { - this.status = status; - this.msg = msg; - this.data = data; - } -} diff --git a/backend/src/main/java/com/examen/backend/model/Person.java b/backend/src/main/java/com/examen/backend/model/Person.java deleted file mode 100644 index d4a0dd1..0000000 --- a/backend/src/main/java/com/examen/backend/model/Person.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.examen.backend.model; - -import javax.persistence.*; -import java.time.LocalDate; - -@Entity -@Table(name = "person") -public class Person { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; - private String nombre; - private String apellido; - @Column(name = "fechaNacimiento") - private LocalDate fechaNacimiento; - private String puesto; - private Double sueldo; - - public Person() {} - - public Person(String apellido, LocalDate fechaNacimiento, Integer id, String nombre, String puesto, Double sueldo) { - this.apellido = apellido; - this.fechaNacimiento = fechaNacimiento; - this.id = id; - this.nombre = nombre; - this.puesto = puesto; - this.sueldo = sueldo; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getApellido() { - return apellido; - } - - public void setApellido(String apellido) { - this.apellido = apellido; - } - - public LocalDate getFechaNacimiento() { - return fechaNacimiento; - } - - public void setFechaNacimiento(LocalDate fechaNacimiento) { - this.fechaNacimiento = fechaNacimiento; - } - - public String getPuesto() { - return puesto; - } - - public void setPuesto(String puesto) { - this.puesto = puesto; - } - - public Double getSueldo() { - return sueldo; - } - - public void setSueldo(Double sueldo) { - this.sueldo = sueldo; - } -} diff --git a/backend/src/main/java/com/examen/backend/repository/PersonRepository.java b/backend/src/main/java/com/examen/backend/repository/PersonRepository.java deleted file mode 100644 index 75469e3..0000000 --- a/backend/src/main/java/com/examen/backend/repository/PersonRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.examen.backend.repository; - -import com.examen.backend.model.Person; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface PersonRepository extends JpaRepository { -} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties deleted file mode 100644 index 64bcd82..0000000 --- a/backend/src/main/resources/application.properties +++ /dev/null @@ -1,8 +0,0 @@ -spring.application.name=backend -spring.datasource.url=jdbc:mysql://localhost:3306/bd_munoz?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false -spring.datasource.username=conexión -spring.datasource.password=Wk2!rT8s@6w -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver - -spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=true \ No newline at end of file diff --git a/backend/src/test/java/com/examen/backend/BackendApplicationTests.java b/backend/src/test/java/com/examen/backend/BackendApplicationTests.java deleted file mode 100644 index b7d0990..0000000 --- a/backend/src/test/java/com/examen/backend/BackendApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.examen.backend; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class BackendApplicationTests { - - @Test - void contextLoads() { - } - -} From 31194d5fa06e07194d90b2efbdc5779851e56d47 Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Thu, 12 Mar 2026 10:56:51 -0300 Subject: [PATCH 7/9] restore bd folder from garcia_bd branch --- bd/script_creacion_bd.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bd/script_creacion_bd.sql b/bd/script_creacion_bd.sql index 62c40bd..89a9fbc 100644 --- a/bd/script_creacion_bd.sql +++ b/bd/script_creacion_bd.sql @@ -1,6 +1,6 @@ -CREATE DATABASE IF NOT EXISTS bd_munoz; +CREATE DATABASE IF NOT EXISTS bd_garcia; -USE bd_munoz; +USE bd_garcia; CREATE TABLE IF NOT EXISTS person ( id INT AUTO_INCREMENT PRIMARY KEY, From b842dfa8b1489362c314106a07dc7ad8cba60221 Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Thu, 12 Mar 2026 11:06:46 -0300 Subject: [PATCH 8/9] docs: add readme for frontend deployment --- frontend/README.md | 67 +++++++++++++++------------------------------- 1 file changed, 21 insertions(+), 46 deletions(-) diff --git a/frontend/README.md b/frontend/README.md index e5ba19d..20db839 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,59 +1,34 @@ -# Frontend +## Frontend +Aplicación cliente desarrollada en Angular 17+ (Standalone Components) para el CRUD de gestión de personas. -This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 21.2.2. +## Requisitos Previos +Node.js: v18 o superior. -## Development server +Angular CLI: Instalado de forma global (npm install -g @angular/cli). -To start a local development server, run: +Backend: Debe estar corriendo en http://localhost:8080. -```bash -ng serve -``` - -Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files. - -## Code scaffolding - -Angular CLI includes powerful code scaffolding tools. To generate a new component, run: - -```bash -ng generate component component-name -``` - -For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run: +## Instalación y Despliegue +Navegar a la carpeta del proyecto: +cd frontend -```bash -ng generate --help -``` +Instalar las dependencias: +npm install -## Building - -To build the project run: - -```bash -ng build -``` - -This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed. - -## Running unit tests - -To execute unit tests with the [Vitest](https://vitest.dev/) test runner, use the following command: +Ejecutar la aplicación en modo desarrollo: +ng serve -```bash -ng test -``` +Abrir el navegador en http://localhost:4200. -## Running end-to-end tests +## Características Técnicas +Standalone Components: Uso de componentes independientes para una arquitectura más limpia. -For end-to-end (e2e) testing, run: +Change Detection Manual: Implementación de ChangeDetectorRef para asegurar la reactividad en cargas asíncronas de datos. -```bash -ng e2e -``` +Bootstrap: Estilos responsivos. -Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs. +## Pantallas de Ejemplo +Listado: Visualización de todos los registros con opciones de edición y borrado. -## Additional Resources +Formulario: Registro y edición de personas con validación de datos. -For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. From 7452a74185cd1b132d8536f3644555c0c9a19bdd Mon Sep 17 00:00:00 2001 From: m4nul0l Date: Thu, 12 Mar 2026 11:12:22 -0300 Subject: [PATCH 9/9] docs: add operation screenshots --- frontend/README.md | 9 +++++++++ frontend/screenshots/borrar-persona.png | Bin 0 -> 26443 bytes frontend/screenshots/creacion-persona.png | Bin 0 -> 11887 bytes frontend/screenshots/edicion-persona.png | Bin 0 -> 12294 bytes .../screenshots/lista-personas-actualizada.png | Bin 0 -> 31029 bytes frontend/screenshots/lista-personas-editada.png | Bin 0 -> 30968 bytes frontend/screenshots/lista-personas.png | Bin 0 -> 25030 bytes 7 files changed, 9 insertions(+) create mode 100644 frontend/screenshots/borrar-persona.png create mode 100644 frontend/screenshots/creacion-persona.png create mode 100644 frontend/screenshots/edicion-persona.png create mode 100644 frontend/screenshots/lista-personas-actualizada.png create mode 100644 frontend/screenshots/lista-personas-editada.png create mode 100644 frontend/screenshots/lista-personas.png diff --git a/frontend/README.md b/frontend/README.md index 20db839..c2569b6 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -32,3 +32,12 @@ Listado: Visualización de todos los registros con opciones de edición y borrad Formulario: Registro y edición de personas con validación de datos. +## Capturas de Pantalla + +/screenshots/lista-personas.png +/screenshots/creacion-persona.png +/screenshots/lista-personas-actualizada.png +/screenshots/edicion-persona.png +/screenshots/lista-personas-editada.png +/screenshots/borrar-persona.png + diff --git a/frontend/screenshots/borrar-persona.png b/frontend/screenshots/borrar-persona.png new file mode 100644 index 0000000000000000000000000000000000000000..c5bf81b844b74c230a54f27740bf4f6a8cedbc20 GIT binary patch literal 26443 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
vbaORMpcszL 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 literal 0 HcmV?d00001 diff --git a/frontend/screenshots/creacion-persona.png b/frontend/screenshots/creacion-persona.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d3758909233121ccb10d97a1d568930f0e245e GIT binary patch literal 11887 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 AT>t<8 literal 0 HcmV?d00001 diff --git a/frontend/screenshots/lista-personas.png b/frontend/screenshots/lista-personas.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6aaf18aed08d4e8ea8332b48704271c303fab0 GIT binary patch literal 25030 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 literal 0 HcmV?d00001