diff --git a/jsconfig.json b/jsconfig.json index d68564202..bffdf8f0c 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -10,6 +10,9 @@ "jsdoc" ], "compilerOptions": { + // For "execa" import in db-helper.mts + "target": "es2017", + "module": "NodeNext", "baseUrl": "./src", // this must be specified if "paths" is specified. "paths": { // defined aliases in webpack for import diff --git a/package.json b/package.json index 236f9a79a..ae4fa8892 100644 --- a/package.json +++ b/package.json @@ -38,12 +38,12 @@ }, "scripts": { "dev": "ts-node src/engine/native/node/index.ts --trace-warnings", - "dev-ms-db": "cd src/management-system-v2 && docker compose -f docker-compose-dev.yml up -d && ./db-helper.sh --init", - "dev-ms-db-create": "cd src/management-system-v2 && ./db-helper.sh --new", + "dev-ms-db": "cd src/management-system-v2 && docker compose -f docker-compose-dev.yml up -d && tsx scripts/db-helper.mts --init", + "dev-ms-db-create": "cd src/management-system-v2 && tsx scripts/db-helper.mts --new", "dev-ms-db-deploy": "cd src/management-system-v2 && yarn prisma migrate deploy", "dev-ms-db-migrate": "cd src/management-system-v2 && yarn prisma migrate dev", - "dev-ms-db-use": "cd src/management-system-v2 && ./db-helper.sh --use", - "dev-ms-db-delete": "cd src/management-system-v2 && ./db-helper.sh --delete", + "dev-ms-db-use": "cd src/management-system-v2 && tsx scripts/db-helper.mts --use", + "dev-ms-db-delete": "cd src/management-system-v2 && tsx scripts/db-helper.mts --delete", "dev-ms": "cd src/management-system-v2 && yarn dev", "dev-ms-old": "cd src/management-system && yarn web:dev", "dev-ms-old-iam": "cd src/management-system && yarn web:dev-iam", @@ -117,7 +117,8 @@ "webpack": "^4.35.3", "webpack-cli": "^3.3.0", "webpack-dev-server": "^3.2.1", - "node-loader": "^1.0.3" + "node-loader": "^1.0.3", + "tsx": "4.19.2" }, "dependencies": { "react-resizable": "^3.0.5" diff --git a/src/management-system-v2/db-helper.sh b/src/management-system-v2/db-helper.sh deleted file mode 100755 index 91cbc4a24..000000000 --- a/src/management-system-v2/db-helper.sh +++ /dev/null @@ -1,269 +0,0 @@ -#!/bin/bash - -# Configurable parameters -CONTAINER_NAME="postgres_database_proceed" # Replace with your Docker container name -POSTGRES_USER="proceed" # PostgreSQL user -POSTGRES_PASSWORD="proceed" # PostgreSQL password -DEFAULT_DB="proceed_db" # The default database name when --default is used -ENV_FILE="./.env" -DB_HOST="localhost" -DB_PORT="5432" -DEFAULT_SCHEMA="public" - -# Parse command-line arguments -INIT=false -CREATE_NEW_DB=false -DELETE_DB=false -DELETE_ALL=false -DELETE_BRANCH="" -CHANGE_DB=false -CHANGE_OPTION="" - -while [[ "$#" -gt 0 ]]; do - case $1 in - --init) - INIT=true - ;; - --new) - CREATE_NEW_DB=true - ;; - --delete) - DELETE_DB=true - ;; - --branch) - DELETE_BRANCH="$2" - shift # Shift past the branch name argument - ;; - --all) - DELETE_ALL=true - ;; - --use) - CHANGE_DB=true - ;; - branch|default) - CHANGE_OPTION="$1" - ;; - --*) # Handle any unknown options - echo "Unknown option: $1" - exit 1 - ;; - *) # Handle non-option arguments (like branch names) - BRANCH_NAME="$1" - ;; - esac - shift # Shift to the next argument -done - -# Function to update the DATABASE_URL in .env file -update_env_file() { - local db_name=$1 - local env_file=$2 - - # Generate the new DATABASE_URL in the required format - DATABASE_URL="postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$DB_HOST:$DB_PORT/$db_name?schema=$DEFAULT_SCHEMA" - - # Replace DATABASE_URL in the .env file - if [ -f "$env_file" ]; then - echo "Updating DATABASE_URL in $env_file" - - # Check if the DATABASE_URL already exists in the file - if grep -q "^DATABASE_URL=" "$env_file"; then - # If DATABASE_URL exists, update it - sed -i '' "s|^DATABASE_URL=.*|DATABASE_URL=$DATABASE_URL|" "$env_file" - else - # If DATABASE_URL does not exist, append it to the file - echo "DATABASE_URL=$DATABASE_URL" >> "$env_file" - fi - - if [ $? -eq 0 ]; then - echo "DATABASE_URL successfully updated in $env_file" - else - echo "Failed to update DATABASE_URL in $env_file" - exit 1 - fi - else - echo "$env_file not found! Creating new .env file..." - echo "DATABASE_URL=$DATABASE_URL" > "$env_file" - if [ $? -eq 0 ]; then - echo "Created new $env_file with DATABASE_URL" - else - echo "Failed to create $env_file" - exit 1 - fi - fi -} - -# Get the current branch name (only if not provided) -if [ -z "$BRANCH_NAME" ]; then - BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) -fi - -# Replace hyphens & slash with underscores in the branch name -BRANCH_NAME_SAFE=$(echo "$BRANCH_NAME" | tr '-' '_' | tr '/' '_') - -# Determine which database to use -if [ "$DELETE_DB" == false ]; then - if [ "$INIT" == true ]; then - # Check if branch-specific database exists - BRANCH_DB_NAME="proceed_db_${BRANCH_NAME_SAFE}" - BRANCH_DB_EXISTS=$(docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -tAc "SELECT 1 FROM pg_database WHERE datname='$BRANCH_DB_NAME';") - - # Check if default database exists - DEFAULT_DB_EXISTS=$(docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "postgres" -tAc "SELECT 1 FROM pg_database WHERE datname='$DEFAULT_DB';") - - if [ "$BRANCH_DB_EXISTS" == "1" ]; then - DB_NAME=$BRANCH_DB_NAME - echo "Using existing branch-specific database: $DB_NAME" - elif [ "$DEFAULT_DB_EXISTS" == "1" ]; then - DB_NAME=$DEFAULT_DB - echo "Branch database not found. Using default database: $DB_NAME" - else - DB_NAME=$DEFAULT_DB - echo "Neither branch nor default database exists. Creating default database: $DB_NAME" - docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "postgres" -c "CREATE DATABASE $DB_NAME;" - if [ $? -ne 0 ]; then - echo "Failed to create default database: $DB_NAME" - exit 1 - fi - echo "Default database $DB_NAME created successfully." - fi - # Update .env file for init - update_env_file "$DB_NAME" "$ENV_FILE" - else - DB_NAME="proceed_db_${BRANCH_NAME_SAFE}" - echo "Using branch-specific database: $DB_NAME" - fi -fi - -# Check if the Docker container is running -if ! docker ps | grep -q "$CONTAINER_NAME"; then - echo "Starting Docker container: $CONTAINER_NAME" - docker start "$CONTAINER_NAME" - if [ $? -ne 0 ]; then - echo "Failed to start Docker container: $CONTAINER_NAME" - exit 1 - fi -fi - -# Handle --delete option: Delete the specified database or all branch-specific databases -if [ "$DELETE_DB" == true ]; then - if [ "$DELETE_ALL" == true ]; then - echo "Deleting all branch-specific databases except the default one..." - - # Get a list of all databases and delete the ones that match the branch pattern - DATABASES=$(docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -tAc "SELECT datname FROM pg_database WHERE datname LIKE 'proceed_db_%';") - - for DB in $DATABASES; do - if [ "$DB" != "$DEFAULT_DB" ]; then - echo "Dropping database: $DB" - docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -c "DROP DATABASE $DB;" - if [ $? -eq 0 ]; then - echo "Database $DB dropped successfully." - else - echo "Failed to drop the database: $DB." - fi - fi - done - exit 0 - elif [ -n "$DELETE_BRANCH" ]; then - # Handle --delete --branch - BRANCH_NAME_SAFE=$(echo "$DELETE_BRANCH" | tr '-' '_' | tr '/' '_') - DB_NAME="proceed_db_${BRANCH_NAME_SAFE}" - - echo "Checking if the database $DB_NAME exists for deletion..." - DB_EXISTS=$(docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -tAc "SELECT 1 FROM pg_database WHERE datname='$DB_NAME';") - - if [ "$DB_EXISTS" == "1" ]; then - echo "Dropping the database: $DB_NAME" - docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -c "DROP DATABASE $DB_NAME;" - if [ $? -eq 0 ]; then - echo "Database $DB_NAME dropped successfully." - else - echo "Failed to drop the database: $DB_NAME." - exit 1 - fi - else - echo "Database $DB_NAME does not exist. Nothing to delete." - fi - exit 0 - else - # Handle default deletion - if [ "$INIT" == false ]; then - echo "Checking if the database $DB_NAME exists for deletion..." - DB_EXISTS=$(docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -tAc "SELECT 1 FROM pg_database WHERE datname='$DB_NAME';") - - if [ "$DB_EXISTS" == "1" ]; then - echo "Dropping the database: $DB_NAME" - docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -c "DROP DATABASE $DB_NAME;" - if [ $? -eq 0 ]; then - echo "Database $DB_NAME dropped successfully." - else - echo "Failed to drop the database: $DB_NAME." - exit 1 - fi - else - echo "Database $DB_NAME does not exist. Nothing to delete." - fi - else - echo "Cannot delete the default database." - exit 1 - fi - fi - exit 0 -fi - -# Handle --new option: Create a new database if it doesn't exist -if [ "$CREATE_NEW_DB" == true ]; then - if [ "$INIT" == false ]; then - echo "Checking if the database $DB_NAME exists..." - DB_EXISTS=$(docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -tAc "SELECT 1 FROM pg_database WHERE datname='$DB_NAME';") - - if [ "$DB_EXISTS" == "1" ]; then - echo "Database $DB_NAME already exists. Reusing it." - else - # Create a new database for the branch if it doesn't exist - echo "Creating a new database for branch: $BRANCH_NAME_SAFE" - docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -d "$DEFAULT_DB" -c "CREATE DATABASE $DB_NAME;" - - if [ $? -ne 0 ]; then - echo "Failed to create database: $DB_NAME" - exit 1 - fi - echo "Database $DB_NAME created." - fi - # Update .env file for new database - update_env_file "$DB_NAME" "$ENV_FILE" - else - echo "Using the default database. Skipping branch-specific database creation." - fi -fi - -# Handle --use option: Update the DATABASE_URL in the .env file with the default or branch database -if [ "$CHANGE_DB" == true ]; then - if [ "$CHANGE_OPTION" == "default" ]; then - DB_NAME=$DEFAULT_DB - echo "Switching to default database: $DB_NAME" - elif [ "$CHANGE_OPTION" = "branch" ]; then - DB_NAME="proceed_db_${BRANCH_NAME_SAFE}" - echo "Switching to branch-specific database: $DB_NAME" - else - echo "Unknown option for --use: $CHANGE_OPTION. Use 'default' or 'branch'." - exit 1 - fi - - # Update .env file for database change - update_env_file "$DB_NAME" "$ENV_FILE" -fi - -# Apply the schema to the selected database (only on --new and --init) -if [ "$CREATE_NEW_DB" == true ] || [ "$INIT" == true ]; then - echo "Applying the schema using Prisma..." - yarn prisma migrate deploy - - if [ $? -eq 0 ]; then - echo "Schema applied successfully to $DB_NAME." - else - echo "Failed to apply the schema to $DB_NAME." - exit 1 - fi -fi diff --git a/src/management-system-v2/docker-compose-dev.yml b/src/management-system-v2/docker-compose-dev.yml index 415ebc0b0..4c00f5e94 100644 --- a/src/management-system-v2/docker-compose-dev.yml +++ b/src/management-system-v2/docker-compose-dev.yml @@ -7,7 +7,7 @@ services: POSTGRES_USER: proceed POSTGRES_PASSWORD: proceed ports: - - '5432:5432' + - '5433:5432' volumes: - postgres_data:/var/lib/postgresql/data diff --git a/src/management-system-v2/package.json b/src/management-system-v2/package.json index 325cf8d80..64d53f89e 100644 --- a/src/management-system-v2/package.json +++ b/src/management-system-v2/package.json @@ -91,6 +91,7 @@ "sass": "1.75.0", "ts-node": "10.9.2", "typescript": "5.4.5", - "@types/react-resizable": "^3.0.7" + "@types/react-resizable": "^3.0.7", + "execa": "9.5.2" } } diff --git a/src/management-system-v2/scripts/db-helper.mts b/src/management-system-v2/scripts/db-helper.mts new file mode 100644 index 000000000..974920492 --- /dev/null +++ b/src/management-system-v2/scripts/db-helper.mts @@ -0,0 +1,245 @@ +import { execSync } from 'child_process'; +import fs from 'fs/promises'; +// https://github.com/sindresorhus/execa/issues/1159 +const { execaSync } = await import('execa'); + +interface CommandOptions { + init?: boolean; + new?: boolean; + delete?: boolean; + deleteAll?: boolean; + deleteBranch?: string; + changeDb?: boolean; + changeOption?: 'branch' | 'default'; + branchName?: string; +} + +const config = { + containerName: 'postgres_database_proceed', + postgresUser: 'proceed', + postgresPassword: 'proceed', + defaultDb: 'proceed_db', + envFile: './.env', + dbHost: 'localhost', + // Use non default port to avoid conflicts with local Postgres installations. + dbPort: '5433', + defaultSchema: 'public', +}; + +async function getCurrentBranch(): Promise { + try { + const result = execSync('git rev-parse --abbrev-ref HEAD', { + encoding: 'utf-8', + }); + return result.trim(); + } catch (error) { + console.error('Failed to get current git branch:', error); + process.exit(1); + } +} + +function sanitizeBranchName(branchName: string): string { + return branchName.replace(/[-/]/g, '_'); +} + +async function updateEnvFile(dbName: string, envFile: string): Promise { + const databaseUrl = `postgresql://${config.postgresUser}:${config.postgresPassword}@${config.dbHost}:${config.dbPort}/${dbName}?schema=${config.defaultSchema}`; + + try { + let envContent = ''; + try { + envContent = await fs.readFile(envFile, 'utf-8'); + } catch (error) { + // File doesn't exist, will create new one + } + + const newEnvContent = envContent.includes('DATABASE_URL=') + ? envContent.replace(/^DATABASE_URL=.*/m, `DATABASE_URL=${databaseUrl}`) + : `${envContent}\nDATABASE_URL=${databaseUrl}`; + + await fs.writeFile(envFile, newEnvContent.trim()); + console.log(`DATABASE_URL successfully updated in ${envFile}`); + } catch (error) { + console.error(`Failed to update DATABASE_URL in ${envFile}:`, error); + process.exit(1); + } +} + +async function executePostgresCommand(command: string): Promise { + try { + const { stdout } = execaSync('docker', [ + 'exec', + '-e', + `PGPASSWORD=${config.postgresPassword}`, + '-i', + config.containerName, + 'psql', + '-U', + config.postgresUser, + '-d', + config.defaultDb, + '-tAc', + command, + ]); + return stdout.trim(); + } catch (error) { + console.error('Failed to execute Postgres command:', error); + process.exit(1); + } +} + +async function checkDatabaseExists(dbName: string): Promise { + const result = await executePostgresCommand( + `SELECT 1 FROM pg_database WHERE datname='${dbName}';`, + ); + return result === '1'; +} + +async function createDatabase(dbName: string): Promise { + try { + await executePostgresCommand(`CREATE DATABASE ${dbName};`); + console.log(`Database ${dbName} created successfully.`); + } catch (error) { + console.error(`Failed to create database ${dbName}:`, error); + process.exit(1); + } +} + +async function dropDatabase(dbName: string): Promise { + try { + await executePostgresCommand(`DROP DATABASE ${dbName};`); + console.log(`Database ${dbName} dropped successfully.`); + } catch (error) { + console.error(`Failed to drop database ${dbName}:`, error); + process.exit(1); + } +} + +async function ensureDockerContainerRunning(): Promise { + try { + const { stdout } = execaSync('docker', ['ps']); + if (!stdout.includes(config.containerName)) { + console.log(`Starting Docker container: ${config.containerName}`); + execaSync('docker', ['start', config.containerName]); + } + } catch (error) { + console.error('Failed to start Docker container:', error); + process.exit(1); + } +} + +async function applyPrismaSchema(): Promise { + try { + execaSync('yarn', ['prisma', 'migrate', 'deploy']); + console.log('Schema applied successfully.'); + } catch (error) { + console.error('Failed to apply Prisma schema:', error); + process.exit(1); + } +} + +async function main() { + // Parse command line arguments + const args = process.argv.slice(2); + const options: CommandOptions = {}; + + for (let i = 0; i < args.length; i++) { + switch (args[i]) { + case '--init': + options.init = true; + break; + case '--new': + options.new = true; + break; + case '--delete': + options.delete = true; + break; + case '--all': + options.deleteAll = true; + break; + case '--branch': + options.deleteBranch = args[++i]; + break; + case '--use': + options.changeDb = true; + break; + case 'branch': + case 'default': + options.changeOption = args[i] as 'branch' | 'default'; + break; + default: + if (!args[i].startsWith('--')) { + options.branchName = args[i]; + } + } + } + + // Get branch name if not provided + const branchName = options.branchName || (await getCurrentBranch()); + const safeBranchName = sanitizeBranchName(branchName); + const branchDbName = `proceed_db_${safeBranchName}`; + + await ensureDockerContainerRunning(); + + if (options.delete) { + if (options.deleteAll) { + const databases = await executePostgresCommand( + "SELECT datname FROM pg_database WHERE datname LIKE 'proceed_db_%';", + ); + + for (const db of databases.split('\n')) { + if (db && db !== config.defaultDb) { + await dropDatabase(db); + } + } + process.exit(0); + } + + if (options.deleteBranch) { + const dbToDelete = `proceed_db_${sanitizeBranchName(options.deleteBranch)}`; + if (await checkDatabaseExists(dbToDelete)) { + await dropDatabase(dbToDelete); + } else { + console.log( + `Database ${dbToDelete} does not exist. Nothing to delete.`, + ); + } + process.exit(0); + } + + if (!options.init && (await checkDatabaseExists(branchDbName))) { + await dropDatabase(branchDbName); + } else { + console.log('Cannot delete the default database.'); + } + process.exit(0); + } + + let dbName = options.init ? config.defaultDb : branchDbName; + + if (options.new && !options.init) { + if (await checkDatabaseExists(branchDbName)) { + console.log(`Database ${branchDbName} already exists. Reusing it.`); + } else { + await createDatabase(branchDbName); + } + dbName = branchDbName; + } + + if (options.changeDb) { + dbName = + options.changeOption === 'default' ? config.defaultDb : branchDbName; + console.log(`Switching to ${options.changeOption} database: ${dbName}`); + } + + await updateEnvFile(dbName, config.envFile); + + if (options.new || options.init) { + await applyPrismaSchema(); + } +} + +main().catch((error) => { + console.error('An error occurred:', error); + process.exit(1); +}); diff --git a/yarn.lock b/yarn.lock index ed26bc1e8..6ab961495 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1873,6 +1873,126 @@ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -3137,6 +3257,11 @@ resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz" integrity sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" resolved "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz" @@ -3177,6 +3302,11 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@sindresorhus/merge-streams@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" + integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + "@sinonjs/commons@^3.0.0": version "3.0.1" resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz" @@ -9877,6 +10007,36 @@ es6-templates@^0.2.2, es6-templates@^0.2.3: recast "~0.11.12" through "~2.3.6" +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" + escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" @@ -10536,6 +10696,24 @@ execa@7.2.0: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +execa@9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.5.2.tgz#a4551034ee0795e241025d2f987dab3f4242dff2" + integrity sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q== + dependencies: + "@sindresorhus/merge-streams" "^4.0.0" + cross-spawn "^7.0.3" + figures "^6.1.0" + get-stream "^9.0.0" + human-signals "^8.0.0" + is-plain-obj "^4.1.0" + is-stream "^4.0.1" + npm-run-path "^6.0.0" + pretty-ms "^9.0.0" + signal-exit "^4.1.0" + strip-final-newline "^4.0.0" + yoctocolors "^2.0.0" + execa@^0.8.0: version "0.8.0" resolved "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz" @@ -10933,6 +11111,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" + integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + dependencies: + is-unicode-supported "^2.0.0" + file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz" @@ -11448,7 +11633,7 @@ fsevents@^1.2.3, fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -11586,6 +11771,14 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-symbol-description@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" @@ -11602,6 +11795,13 @@ get-tsconfig@^4.5.0: dependencies: resolve-pkg-maps "^1.0.0" +get-tsconfig@^4.7.5: + version "4.8.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== + dependencies: + resolve-pkg-maps "^1.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" @@ -12632,6 +12832,11 @@ human-signals@^4.3.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +human-signals@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.0.tgz#2d3d63481c7c2319f0373428b01ffe30da6df852" + integrity sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA== + husky@^9.1.6: version "9.1.6" resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c" @@ -13357,6 +13562,11 @@ is-plain-obj@^1.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== +is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" @@ -13421,6 +13631,11 @@ is-stream@^3.0.0: resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" @@ -13452,6 +13667,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + is-upper-case@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz" @@ -16745,6 +16965,14 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" +npm-run-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" + integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== + dependencies: + path-key "^4.0.0" + unicorn-magic "^0.3.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" @@ -17390,6 +17618,11 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" + integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" @@ -18285,6 +18518,13 @@ pretty-format@^3.8.0: resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz" integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew== +pretty-ms@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.2.0.tgz#e14c0aad6493b69ed63114442a84133d7e560ef0" + integrity sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg== + dependencies: + parse-ms "^4.0.0" + pretty@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz" @@ -20279,7 +20519,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -20298,20 +20538,6 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" @@ -21125,6 +21351,11 @@ strip-final-newline@^3.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== +strip-final-newline@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" + integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== + strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz" @@ -21935,6 +22166,16 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tsx@4.19.2: + version "4.19.2" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.2.tgz#2d7814783440e0ae42354d0417d9c2989a2ae92c" + integrity sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g== + dependencies: + esbuild "~0.23.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" @@ -22183,6 +22424,11 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" @@ -23641,6 +23887,11 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.1.tgz#e0167474e9fbb9e8b3ecca738deaa61dd12e56fc" + integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ== + yorkie@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz"